!function(I){var g={};function n(e){var c;return(g[e]||(c=g[e]={i:e,l:!1,exports:{}},I[e].call(c.exports,c,c.exports,n),c.l=!0,c)).exports}n.m=I,n.c=g,n.d=function(I,g,e){n.o(I,g)||Object.defineProperty(I,g,{enumerable:!0,get:e})},n.r=function(I){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})},n.t=function(I,g){if(1&g&&(I=n(I)),8&g)return I;if(4&g&&"object"==typeof I&&I&&I.__esModule)return I;var e=Object.create(null);if(n.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:I}),2&g&&"string"!=typeof I)for(var c in I)n.d(e,c,function(g){return I[g]}.bind(null,c));return e},n.n=function(I){var g=I&&I.__esModule?function(){return I.default}:function(){return I};return n.d(g,"a",g),g},n.o=function(I,g){return Object.prototype.hasOwnProperty.call(I,g)},n.p="",n(n.s=25)}([function(module,exports){eval("module.exports = jQuery;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9leHRlcm5hbCBcImpRdWVyeVwiP2NkMGMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBqUXVlcnk7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval('var toPropertyKey = __webpack_require__(12);\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzPzk1MjMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n')},function(module,exports,__webpack_require__){eval('var toPropertyKey = __webpack_require__(12);\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, "prototype", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzPzViYzMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2\n')},function(module,exports){eval('function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzPzk3MGIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3\n')},function(module,exports,__webpack_require__){eval('// TODO(Babel 8): Remove this file.\n\nvar runtime = __webpack_require__(20)();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === "object") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function("r", "regeneratorRuntime = r")(runtime);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcz9hMzRhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4\n')},function(module,exports){eval('function _typeof(o) {\n "@babel/helpers - typeof";\n\n return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;\n }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcz83MDM3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5\n')},function(module,exports){eval('function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanM/Yzk3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6\n')},function(module,exports,__webpack_require__){eval('var arrayWithoutHoles = __webpack_require__(14);\nvar iterableToArray = __webpack_require__(15);\nvar unsupportedIterableToArray = __webpack_require__(16);\nvar nonIterableSpread = __webpack_require__(17);\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzPzQ0OGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7\n')},function(module,exports,__webpack_require__){eval('var setPrototypeOf = __webpack_require__(19);\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, "prototype", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzP2VkNmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8\n')},function(module,exports){eval('function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8zYzk2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n')},function(module,exports){eval('function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports["default"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcz8zNmM2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10\n')},function(module,exports){eval('function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzPzVhNDMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n')},function(module,exports,__webpack_require__){eval('var _typeof = __webpack_require__(5)["default"];\nvar toPrimitive = __webpack_require__(18);\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, "string");\n return "symbol" == _typeof(i) ? i : String(i);\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzP2EzOTUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBTdHJpbmcoaSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n')},function(module,exports,__webpack_require__){eval('var _typeof = __webpack_require__(5)["default"];\nvar assertThisInitialized = __webpack_require__(9);\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === "object" || typeof call === "function")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError("Derived constructors may only return object or undefined");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzPzZiNTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///13\n')},function(module,exports,__webpack_require__){eval('var arrayLikeToArray = __webpack_require__(11);\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcz8yMjM2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n')},function(module,exports){eval('function _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanM/MTFiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///15\n')},function(module,exports,__webpack_require__){eval('var arrayLikeToArray = __webpack_require__(11);\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz82NjEzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n')},function(module,exports){eval('function _nonIterableSpread() {\n 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}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcz8wNjc2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17\n')},function(module,exports,__webpack_require__){eval('var _typeof = __webpack_require__(5)["default"];\nfunction toPrimitive(t, r) {\n if ("object" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || "default");\n if ("object" != _typeof(i)) return i;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return ("string" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcz9lNTBkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n')},function(module,exports){eval('function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports["default"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcz80YTRiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///19\n')},function(module,exports,__webpack_require__){eval('var _typeof = __webpack_require__(5)["default"];\nfunction _regeneratorRuntime() {\n "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports["default"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = "function" == typeof Symbol ? Symbol : {},\n a = i.iterator || "@@iterator",\n c = i.asyncIterator || "@@asyncIterator",\n u = i.toStringTag || "@@toStringTag";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, "");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, "_invoke", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: "normal",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: "throw",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = "suspendedStart",\n l = "suspendedYield",\n f = "executing",\n s = "completed",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n ["next", "throw", "return"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if ("throw" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {\n invoke("next", t, i, a);\n }, function (t) {\n invoke("throw", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke("throw", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, "_invoke", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw new Error("Generator is already running");\n if (o === s) {\n if ("throw" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else "return" === n.method && n.abrupt("return", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if ("normal" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a \'" + n + "\' method")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = "normal", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: "root"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || "" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if ("function" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + " is not iterable");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, "constructor", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {\n var e = "function" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {\n return this;\n }), define(g, "toString", function () {\n return "[object Generator]";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if ("throw" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if ("root" === i.tryLoc) return handle("end");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, "catchLoc"),\n u = n.call(i, "finallyLoc");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw new Error("try statement without catch or finally");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if ("throw" === t.type) throw t.arg;\n return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n "catch": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if ("throw" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw new Error("illegal catch attempt");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, "next" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanM/N2VjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gT2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB7XG4gICAgICB0cnlMb2M6IHRbMF1cbiAgICB9O1xuICAgIDEgaW4gdCAmJiAoZS5jYXRjaExvYyA9IHRbMV0pLCAyIGluIHQgJiYgKGUuZmluYWxseUxvYyA9IHRbMl0sIGUuYWZ0ZXJMb2MgPSB0WzNdKSwgdGhpcy50cnlFbnRyaWVzLnB1c2goZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHQuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoZSkge1xuICAgIGlmIChlIHx8IFwiXCIgPT09IGUpIHtcbiAgICAgIHZhciByID0gZVthXTtcbiAgICAgIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZS5uZXh0KSByZXR1cm4gZTtcbiAgICAgIGlmICghaXNOYU4oZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBvID0gLTEsXG4gICAgICAgICAgaSA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytvIDwgZS5sZW5ndGg7KSBpZiAobi5jYWxsKGUsIG8pKSByZXR1cm4gbmV4dC52YWx1ZSA9IGVbb10sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaS5uZXh0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfdHlwZW9mKGUpICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgbyhnLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbyhHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBlLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0ICYmIHQuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhZSAmJiAoZSA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoZS5kaXNwbGF5TmFtZSB8fCBlLm5hbWUpKTtcbiAgfSwgZS5tYXJrID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShnKSwgdDtcbiAgfSwgZS5hd3JhcCA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IHRcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGMsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGUuYXN5bmMgPSBmdW5jdGlvbiAodCwgciwgbiwgbywgaSkge1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9IFByb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSByLnB1c2gobik7XG4gICAgcmV0dXJuIHIucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IHIubGVuZ3RoOykge1xuICAgICAgICB2YXIgdCA9IHIucG9wKCk7XG4gICAgICAgIGlmICh0IGluIGUpIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZS52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK3Iuc2xpY2UoMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///20\n')},function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);\n\n/**\r\n * pagination.js 1.5.1\r\n * A jQuery plugin to provide simple yet fully customisable pagination.\r\n * @version 1.5.1\r\n * @author mss\r\n * @url https://github.com/Maxiaoxiang/jQuery-plugins\r\n *\r\n * @调用方法\r\n * $(selector).pagination(option, callback);\r\n * -此处callback是初始化调用,option里的callback是点击页码后调用\r\n *\r\n * -- example --\r\n * $(selector).pagination({\r\n * ... // 配置参数\r\n * callback: function(api) {\r\n * console.log('点击页码调用该回调'); //切换页码时执行一次回调\r\n * }\r\n * }, function(){\r\n * console.log('初始化'); //插件初始化时调用该方法,比如请求第一次接口来初始化分页配置\r\n * });\r\n */\n\n(function (factory) {\n if (typeof define === 'function' && (__webpack_require__(23) || false) && !jquery__WEBPACK_IMPORTED_MODULE_1___default.a) {\n // AMD或CMD\n define(['jquery'], factory);\n } else if (( false ? undefined : _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(module)) === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = function (root, jQuery) {\n if (jQuery === undefined) {\n if (typeof window !== 'undefined') {\n jQuery = __webpack_require__(0);\n } else {\n jQuery = __webpack_require__(0)(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n //Browser globals\n factory(jquery__WEBPACK_IMPORTED_MODULE_1___default.a);\n }\n})(function ($) {\n //配置参数\n var defaults = {\n totalData: 0,\n //数据总条数\n showData: 0,\n //每页显示的条数\n pageCount: 9,\n //总页数,默认为9\n current: 1,\n //当前第几页\n prevCls: 'prev',\n //上一页class\n nextCls: 'next',\n //下一页class\n prevContent: '<',\n //上一页内容\n nextContent: '>',\n //下一页内容\n activeCls: 'active',\n //当前页选中状态\n coping: false,\n //首页和尾页\n isHide: false,\n //当前页数为0页或者1页时不显示分页\n homePage: '',\n //首页节点内容\n endPage: '',\n //尾页节点内容\n keepShowPN: false,\n //是否一直显示上一页下一页\n mode: 'unfixed',\n //分页模式,unfixed:不固定页码数量,fixed:固定页码数量\n count: 4,\n //mode为unfixed时显示当前选中页前后页数,mode为fixed显示页码总数\n jump: false,\n //跳转到指定页数\n jumpIptCls: 'jump-ipt',\n //文本框内容\n jumpBtnCls: 'jump-btn',\n //跳转按钮\n jumpBtn: '跳转',\n //跳转按钮文本\n callback: function callback() {} //回调\n };\n var Pagination = function Pagination(element, options) {\n //全局变量\n var opts = options,\n //配置\n current,\n //当前页\n $document = $(document),\n $obj = $(element); //容器\n\n /**\r\n * 设置总页数\r\n * @param {int} page 页码\r\n * @return opts.pageCount 总页数配置\r\n */\n this.setPageCount = function (page) {\n return opts.pageCount = page;\n };\n\n /**\r\n * 获取总页数\r\n * 如果配置了总条数和每页显示条数,将会自动计算总页数并略过总页数配置,反之\r\n * @return {int} 总页数\r\n */\n this.getPageCount = function () {\n return opts.totalData && opts.showData ? Math.ceil(parseInt(opts.totalData) / opts.showData) : opts.pageCount;\n };\n\n /**\r\n * 获取当前页\r\n * @return {int} 当前页码\r\n */\n this.getCurrent = function () {\n return current;\n };\n\n /**\r\n * 填充数据\r\n * @param {int} 页码\r\n */\n this.filling = function (index) {\n var html = '';\n current = parseInt(index) || parseInt(opts.current); //当前页码\n var pageCount = this.getPageCount(); //获取的总页数\n switch (opts.mode //配置模式\n ) {\n case 'fixed':\n //固定按钮模式\n html += '' + opts.prevContent + '';\n if (opts.coping) {\n var home = opts.coping && opts.homePage ? opts.homePage : '1';\n html += '' + home + '';\n }\n var start = current > opts.count - 1 ? current + opts.count - 1 > pageCount ? current - (opts.count - (pageCount - current)) : current - 2 : 1;\n var end = current + opts.count - 1 > pageCount ? pageCount : start + opts.count;\n for (; start <= end; start++) {\n if (start != current) {\n html += '' + start + '';\n } else {\n html += '' + start + '';\n }\n }\n if (opts.coping) {\n var _end = opts.coping && opts.endPage ? opts.endPage : pageCount;\n html += '' + _end + '';\n }\n html += '' + opts.nextContent + '';\n break;\n case 'unfixed':\n //不固定按钮模式\n if (opts.keepShowPN || current > 1) {\n //上一页\n html += '' + opts.prevContent + '';\n } else {\n if (opts.keepShowPN == false) {\n $obj.find('.' + opts.prevCls) && $obj.find('.' + opts.prevCls).remove();\n }\n }\n if (current >= opts.count + 2 && current != 1 && pageCount != opts.count) {\n var home = opts.coping && opts.homePage ? opts.homePage : '1';\n html += opts.coping ? '' + home + '...' : '';\n }\n var start = current - opts.count <= 1 ? 1 : current - opts.count;\n var end = current + opts.count >= pageCount ? pageCount : current + opts.count;\n for (; start <= end; start++) {\n if (start <= pageCount && start >= 1) {\n if (start != current) {\n html += '' + start + '';\n } else {\n html += '' + start + '';\n }\n }\n }\n if (current + opts.count < pageCount && current >= 1 && pageCount > opts.count) {\n var end = opts.coping && opts.endPage ? opts.endPage : pageCount;\n html += opts.coping ? '...' + end + '' : '';\n }\n if (opts.keepShowPN || current < pageCount) {\n //下一页\n html += '' + opts.nextContent + '';\n } else {\n if (opts.keepShowPN == false) {\n $obj.find('.' + opts.nextCls) && $obj.find('.' + opts.nextCls).remove();\n }\n }\n break;\n case 'easy':\n //简单模式\n break;\n default:\n }\n html += opts.jump ? '' + opts.jumpBtn + '' : '';\n $obj.empty().html(html);\n };\n\n //绑定事件\n this.eventBind = function () {\n var that = this;\n var pageCount = that.getPageCount(); //总页数\n var index = 1;\n $obj.off().on('click', 'a', function () {\n if ($(this).hasClass(opts.nextCls)) {\n if ($obj.find('.' + opts.activeCls).text() >= pageCount) {\n $(this).addClass('disabled');\n return false;\n } else {\n index = parseInt($obj.find('.' + opts.activeCls).text()) + 1;\n }\n } else if ($(this).hasClass(opts.prevCls)) {\n if ($obj.find('.' + opts.activeCls).text() <= 1) {\n $(this).addClass('disabled');\n return false;\n } else {\n index = parseInt($obj.find('.' + opts.activeCls).text()) - 1;\n }\n } else if ($(this).hasClass(opts.jumpBtnCls)) {\n if ($obj.find('.' + opts.jumpIptCls).val() !== '') {\n index = parseInt($obj.find('.' + opts.jumpIptCls).val());\n } else {\n return;\n }\n } else {\n index = parseInt($(this).data('page'));\n }\n that.filling(index);\n typeof opts.callback === 'function' && opts.callback(that);\n });\n //输入跳转的页码\n $obj.on('input propertychange', '.' + opts.jumpIptCls, function () {\n var $this = $(this);\n var val = $this.val();\n var reg = /[^\\d]/g;\n if (reg.test(val)) $this.val(val.replace(reg, ''));\n parseInt(val) > pageCount && $this.val(pageCount);\n if (parseInt(val) === 0) $this.val(1); //最小值为1\n });\n //回车跳转指定页码\n $document.keydown(function (e) {\n if (e.keyCode == 13 && $obj.find('.' + opts.jumpIptCls).val()) {\n var index = parseInt($obj.find('.' + opts.jumpIptCls).val());\n that.filling(index);\n typeof opts.callback === 'function' && opts.callback(that);\n }\n });\n };\n\n //初始化\n this.init = function () {\n this.filling(opts.current);\n this.eventBind();\n if (opts.isHide && this.getPageCount() == '1' || this.getPageCount() == '0') {\n $obj.hide();\n } else {\n $obj.show();\n }\n };\n this.init();\n };\n $.fn.pagination = function (parameter, callback) {\n if (typeof parameter == 'function') {\n //重载\n callback = parameter;\n parameter = {};\n } else {\n parameter = parameter || {};\n callback = callback || function () {};\n }\n var options = $.extend({}, defaults, parameter);\n return this.each(function () {\n var pagination = new Pagination(this, options);\n callback(pagination);\n });\n };\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(22)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi5qcz9kMTM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBwYWdpbmF0aW9uLmpzIDEuNS4xXHJcbiAqIEEgalF1ZXJ5IHBsdWdpbiB0byBwcm92aWRlIHNpbXBsZSB5ZXQgZnVsbHkgY3VzdG9taXNhYmxlIHBhZ2luYXRpb24uXHJcbiAqIEB2ZXJzaW9uIDEuNS4xXHJcbiAqIEBhdXRob3IgbXNzXHJcbiAqIEB1cmwgaHR0cHM6Ly9naXRodWIuY29tL01heGlhb3hpYW5nL2pRdWVyeS1wbHVnaW5zXHJcbiAqXHJcbiAqIEDosIPnlKjmlrnms5VcclxuICogJChzZWxlY3RvcikucGFnaW5hdGlvbihvcHRpb24sIGNhbGxiYWNrKTtcclxuICogLeatpOWkhGNhbGxiYWNr5piv5Yid5aeL5YyW6LCD55So77yMb3B0aW9u6YeM55qEY2FsbGJhY2vmmK/ngrnlh7vpobXnoIHlkI7osIPnlKhcclxuICpcclxuICogLS0gZXhhbXBsZSAtLVxyXG4gKiAkKHNlbGVjdG9yKS5wYWdpbmF0aW9uKHtcclxuICogICAgIC4uLiAvLyDphY3nva7lj4LmlbBcclxuICogICAgIGNhbGxiYWNrOiBmdW5jdGlvbihhcGkpIHtcclxuICogICAgICAgICBjb25zb2xlLmxvZygn54K55Ye76aG156CB6LCD55So6K+l5Zue6LCDJyk7IC8v5YiH5o2i6aG156CB5pe25omn6KGM5LiA5qyh5Zue6LCDXHJcbiAqICAgICB9XHJcbiAqIH0sIGZ1bmN0aW9uKCl7XHJcbiAqICAgICBjb25zb2xlLmxvZygn5Yid5aeL5YyWJyk7IC8v5o+S5Lu25Yid5aeL5YyW5pe26LCD55So6K+l5pa55rOV77yM5q+U5aaC6K+35rGC56ys5LiA5qyh5o6l5Y+j5p2l5Yid5aeL5YyW5YiG6aG16YWN572uXHJcbiAqIH0pO1xyXG4gKi9cclxuaW1wb3J0IGpRdWVyeSBmcm9tICdqcXVlcnknXHJcbjsoZnVuY3Rpb24oZmFjdG9yeSkge1xyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIChkZWZpbmUuYW1kIHx8IGRlZmluZS5jbWQpICYmICFqUXVlcnkpIHtcclxuICAgIC8vIEFNROaIlkNNRFxyXG4gICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgLy8gTm9kZS9Db21tb25KU1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihyb290LCBqUXVlcnkpIHtcclxuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKShyb290KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmYWN0b3J5KGpRdWVyeSlcclxuICAgICAgcmV0dXJuIGpRdWVyeVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvL0Jyb3dzZXIgZ2xvYmFsc1xyXG4gICAgZmFjdG9yeShqUXVlcnkpXHJcbiAgfVxyXG59KShmdW5jdGlvbigkKSB7XHJcbiAgLy/phY3nva7lj4LmlbBcclxuICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICB0b3RhbERhdGE6IDAsIC8v5pWw5o2u5oC75p2h5pWwXHJcbiAgICBzaG93RGF0YTogMCwgLy/mr4/pobXmmL7npLrnmoTmnaHmlbBcclxuICAgIHBhZ2VDb3VudDogOSwgLy/mgLvpobXmlbAs6buY6K6k5Li6OVxyXG4gICAgY3VycmVudDogMSwgLy/lvZPliY3nrKzlh6DpobVcclxuICAgIHByZXZDbHM6ICdwcmV2JywgLy/kuIrkuIDpobVjbGFzc1xyXG4gICAgbmV4dENsczogJ25leHQnLCAvL+S4i+S4gOmhtWNsYXNzXHJcbiAgICBwcmV2Q29udGVudDogJzwnLCAvL+S4iuS4gOmhteWGheWuuVxyXG4gICAgbmV4dENvbnRlbnQ6ICc+JywgLy/kuIvkuIDpobXlhoXlrrlcclxuICAgIGFjdGl2ZUNsczogJ2FjdGl2ZScsIC8v5b2T5YmN6aG16YCJ5Lit54q25oCBXHJcbiAgICBjb3Bpbmc6IGZhbHNlLCAvL+mmlumhteWSjOWwvumhtVxyXG4gICAgaXNIaWRlOiBmYWxzZSwgLy/lvZPliY3pobXmlbDkuLow6aG15oiW6ICFMemhteaXtuS4jeaYvuekuuWIhumhtVxyXG4gICAgaG9tZVBhZ2U6ICcnLCAvL+mmlumhteiKgueCueWGheWuuVxyXG4gICAgZW5kUGFnZTogJycsIC8v5bC+6aG16IqC54K55YaF5a65XHJcbiAgICBrZWVwU2hvd1BOOiBmYWxzZSwgLy/mmK/lkKbkuIDnm7TmmL7npLrkuIrkuIDpobXkuIvkuIDpobVcclxuICAgIG1vZGU6ICd1bmZpeGVkJywgLy/liIbpobXmqKHlvI/vvIx1bmZpeGVk77ya5LiN5Zu65a6a6aG156CB5pWw6YeP77yMZml4ZWTvvJrlm7rlrprpobXnoIHmlbDph49cclxuICAgIGNvdW50OiA0LCAvL21vZGXkuLp1bmZpeGVk5pe25pi+56S65b2T5YmN6YCJ5Lit6aG15YmN5ZCO6aG15pWw77yMbW9kZeS4umZpeGVk5pi+56S66aG156CB5oC75pWwXHJcbiAgICBqdW1wOiBmYWxzZSwgLy/ot7PovazliLDmjIflrprpobXmlbBcclxuICAgIGp1bXBJcHRDbHM6ICdqdW1wLWlwdCcsIC8v5paH5pys5qGG5YaF5a65XHJcbiAgICBqdW1wQnRuQ2xzOiAnanVtcC1idG4nLCAvL+i3s+i9rOaMiemSrlxyXG4gICAganVtcEJ0bjogJ+i3s+i9rCcsIC8v6Lez6L2s5oyJ6ZKu5paH5pysXHJcbiAgICBjYWxsYmFjazogZnVuY3Rpb24oKSB7fSAvL+Wbnuiwg1xyXG4gIH1cclxuXHJcbiAgdmFyIFBhZ2luYXRpb24gPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAvL+WFqOWxgOWPmOmHj1xyXG4gICAgdmFyIG9wdHMgPSBvcHRpb25zLCAvL+mFjee9rlxyXG4gICAgICBjdXJyZW50LCAvL+W9k+WJjemhtVxyXG4gICAgICAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KSxcclxuICAgICAgJG9iaiA9ICQoZWxlbWVudCkgLy/lrrnlmahcclxuXHJcbiAgICAvKipcclxuICAgICAqIOiuvue9ruaAu+mhteaVsFxyXG4gICAgICogQHBhcmFtIHtpbnR9IHBhZ2Ug6aG156CBXHJcbiAgICAgKiBAcmV0dXJuIG9wdHMucGFnZUNvdW50IOaAu+mhteaVsOmFjee9rlxyXG4gICAgICovXHJcbiAgICB0aGlzLnNldFBhZ2VDb3VudCA9IGZ1bmN0aW9uKHBhZ2UpIHtcclxuICAgICAgcmV0dXJuIChvcHRzLnBhZ2VDb3VudCA9IHBhZ2UpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bmgLvpobXmlbBcclxuICAgICAqIOWmguaenOmFjee9ruS6huaAu+adoeaVsOWSjOavj+mhteaYvuekuuadoeaVsO+8jOWwhuS8muiHquWKqOiuoeeul+aAu+mhteaVsOW5tueVpei/h+aAu+mhteaVsOmFjee9ru+8jOWPjeS5i1xyXG4gICAgICogQHJldHVybiB7aW50fSDmgLvpobXmlbBcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRQYWdlQ291bnQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdHMudG90YWxEYXRhICYmIG9wdHMuc2hvd0RhdGFcclxuICAgICAgICA/IE1hdGguY2VpbChwYXJzZUludChvcHRzLnRvdGFsRGF0YSkgLyBvcHRzLnNob3dEYXRhKVxyXG4gICAgICAgIDogb3B0cy5wYWdlQ291bnRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjemhtVxyXG4gICAgICogQHJldHVybiB7aW50fSDlvZPliY3pobXnoIFcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRDdXJyZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDloavlhYXmlbDmja5cclxuICAgICAqIEBwYXJhbSB7aW50fSDpobXnoIFcclxuICAgICAqL1xyXG4gICAgdGhpcy5maWxsaW5nID0gZnVuY3Rpb24oaW5kZXgpIHtcclxuICAgICAgdmFyIGh0bWwgPSAnJ1xyXG4gICAgICBjdXJyZW50ID0gcGFyc2VJbnQoaW5kZXgpIHx8IHBhcnNlSW50KG9wdHMuY3VycmVudCkgLy/lvZPliY3pobXnoIFcclxuICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoaXMuZ2V0UGFnZUNvdW50KCkgLy/ojrflj5bnmoTmgLvpobXmlbBcclxuICAgICAgc3dpdGNoIChcclxuICAgICAgICBvcHRzLm1vZGUgLy/phY3nva7mqKHlvI9cclxuICAgICAgKSB7XHJcbiAgICAgICAgY2FzZSAnZml4ZWQnOiAvL+WbuuWumuaMiemSruaooeW8j1xyXG4gICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiJyArXHJcbiAgICAgICAgICAgIG9wdHMucHJldkNscyArXHJcbiAgICAgICAgICAgICdcIj4nICtcclxuICAgICAgICAgICAgb3B0cy5wcmV2Q29udGVudCArXHJcbiAgICAgICAgICAgICc8L2E+J1xyXG4gICAgICAgICAgaWYgKG9wdHMuY29waW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBob21lID0gb3B0cy5jb3BpbmcgJiYgb3B0cy5ob21lUGFnZSA/IG9wdHMuaG9tZVBhZ2UgOiAnMSdcclxuICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIjFcIj4nICsgaG9tZSArICc8L2E+J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHN0YXJ0ID1cclxuICAgICAgICAgICAgY3VycmVudCA+IG9wdHMuY291bnQgLSAxXHJcbiAgICAgICAgICAgICAgPyBjdXJyZW50ICsgb3B0cy5jb3VudCAtIDEgPiBwYWdlQ291bnRcclxuICAgICAgICAgICAgICAgID8gY3VycmVudCAtIChvcHRzLmNvdW50IC0gKHBhZ2VDb3VudCAtIGN1cnJlbnQpKVxyXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50IC0gMlxyXG4gICAgICAgICAgICAgIDogMVxyXG4gICAgICAgICAgdmFyIGVuZCA9XHJcbiAgICAgICAgICAgIGN1cnJlbnQgKyBvcHRzLmNvdW50IC0gMSA+IHBhZ2VDb3VudFxyXG4gICAgICAgICAgICAgID8gcGFnZUNvdW50XHJcbiAgICAgICAgICAgICAgOiBzdGFydCArIG9wdHMuY291bnRcclxuICAgICAgICAgIGZvciAoOyBzdGFydCA8PSBlbmQ7IHN0YXJ0KyspIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICBodG1sICs9XHJcbiAgICAgICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIicgK1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgK1xyXG4gICAgICAgICAgICAgICAgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgK1xyXG4gICAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiJyArIG9wdHMuYWN0aXZlQ2xzICsgJ1wiPicgKyBzdGFydCArICc8L3NwYW4+J1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0cy5jb3BpbmcpIHtcclxuICAgICAgICAgICAgdmFyIF9lbmQgPSBvcHRzLmNvcGluZyAmJiBvcHRzLmVuZFBhZ2UgPyBvcHRzLmVuZFBhZ2UgOiBwYWdlQ291bnRcclxuICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICc8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgZGF0YS1wYWdlPVwiJyArXHJcbiAgICAgICAgICAgICAgcGFnZUNvdW50ICtcclxuICAgICAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICAgICAgX2VuZCArXHJcbiAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBodG1sICs9XHJcbiAgICAgICAgICAgICc8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCInICtcclxuICAgICAgICAgICAgb3B0cy5uZXh0Q2xzICtcclxuICAgICAgICAgICAgJ1wiPicgK1xyXG4gICAgICAgICAgICBvcHRzLm5leHRDb250ZW50ICtcclxuICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3VuZml4ZWQnOiAvL+S4jeWbuuWumuaMiemSruaooeW8j1xyXG4gICAgICAgICAgaWYgKG9wdHMua2VlcFNob3dQTiB8fCBjdXJyZW50ID4gMSkge1xyXG4gICAgICAgICAgICAvL+S4iuS4gOmhtVxyXG4gICAgICAgICAgICBodG1sICs9XHJcbiAgICAgICAgICAgICAgJzxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cIicgK1xyXG4gICAgICAgICAgICAgIG9wdHMucHJldkNscyArXHJcbiAgICAgICAgICAgICAgJ1wiPicgK1xyXG4gICAgICAgICAgICAgIG9wdHMucHJldkNvbnRlbnQgK1xyXG4gICAgICAgICAgICAgICc8L2E+J1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG9wdHMua2VlcFNob3dQTiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICRvYmouZmluZCgnLicgKyBvcHRzLnByZXZDbHMpICYmXHJcbiAgICAgICAgICAgICAgICAkb2JqLmZpbmQoJy4nICsgb3B0cy5wcmV2Q2xzKS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1cnJlbnQgPj0gb3B0cy5jb3VudCArIDIgJiZcclxuICAgICAgICAgICAgY3VycmVudCAhPSAxICYmXHJcbiAgICAgICAgICAgIHBhZ2VDb3VudCAhPSBvcHRzLmNvdW50XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGhvbWUgPSBvcHRzLmNvcGluZyAmJiBvcHRzLmhvbWVQYWdlID8gb3B0cy5ob21lUGFnZSA6ICcxJ1xyXG4gICAgICAgICAgICBodG1sICs9IG9wdHMuY29waW5nXHJcbiAgICAgICAgICAgICAgPyAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIjFcIj4nICtcclxuICAgICAgICAgICAgICAgIGhvbWUgK1xyXG4gICAgICAgICAgICAgICAgJzwvYT48c3Bhbj4uLi48L3NwYW4+J1xyXG4gICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBzdGFydCA9IGN1cnJlbnQgLSBvcHRzLmNvdW50IDw9IDEgPyAxIDogY3VycmVudCAtIG9wdHMuY291bnRcclxuICAgICAgICAgIHZhciBlbmQgPVxyXG4gICAgICAgICAgICBjdXJyZW50ICsgb3B0cy5jb3VudCA+PSBwYWdlQ291bnQgPyBwYWdlQ291bnQgOiBjdXJyZW50ICsgb3B0cy5jb3VudFxyXG4gICAgICAgICAgZm9yICg7IHN0YXJ0IDw9IGVuZDsgc3RhcnQrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPD0gcGFnZUNvdW50ICYmIHN0YXJ0ID49IDEpIHtcclxuICAgICAgICAgICAgICBpZiAoc3RhcnQgIT0gY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIicgK1xyXG4gICAgICAgICAgICAgICAgICBzdGFydCArXHJcbiAgICAgICAgICAgICAgICAgICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgc3RhcnQgK1xyXG4gICAgICAgICAgICAgICAgICAnPC9hPidcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCInICsgb3B0cy5hY3RpdmVDbHMgKyAnXCI+JyArIHN0YXJ0ICsgJzwvc3Bhbj4nXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1cnJlbnQgKyBvcHRzLmNvdW50IDwgcGFnZUNvdW50ICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnQgPj0gMSAmJlxyXG4gICAgICAgICAgICBwYWdlQ291bnQgPiBvcHRzLmNvdW50XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IG9wdHMuY29waW5nICYmIG9wdHMuZW5kUGFnZSA/IG9wdHMuZW5kUGFnZSA6IHBhZ2VDb3VudFxyXG4gICAgICAgICAgICBodG1sICs9IG9wdHMuY29waW5nXHJcbiAgICAgICAgICAgICAgPyAnPHNwYW4+Li4uPC9zcGFuPjxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBkYXRhLXBhZ2U9XCInICtcclxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudCArXHJcbiAgICAgICAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICBlbmQgK1xyXG4gICAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdHMua2VlcFNob3dQTiB8fCBjdXJyZW50IDwgcGFnZUNvdW50KSB7XHJcbiAgICAgICAgICAgIC8v5LiL5LiA6aG1XHJcbiAgICAgICAgICAgIGh0bWwgKz1cclxuICAgICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiJyArXHJcbiAgICAgICAgICAgICAgb3B0cy5uZXh0Q2xzICtcclxuICAgICAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICAgICAgb3B0cy5uZXh0Q29udGVudCArXHJcbiAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob3B0cy5rZWVwU2hvd1BOID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgJG9iai5maW5kKCcuJyArIG9wdHMubmV4dENscykgJiZcclxuICAgICAgICAgICAgICAgICRvYmouZmluZCgnLicgKyBvcHRzLm5leHRDbHMpLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnZWFzeSc6IC8v566A5Y2V5qih5byPXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgIH1cclxuICAgICAgaHRtbCArPSBvcHRzLmp1bXBcclxuICAgICAgICA/ICc8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIicgK1xyXG4gICAgICAgICAgb3B0cy5qdW1wSXB0Q2xzICtcclxuICAgICAgICAgICdcIj48YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCInICtcclxuICAgICAgICAgIG9wdHMuanVtcEJ0bkNscyArXHJcbiAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICBvcHRzLmp1bXBCdG4gK1xyXG4gICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgOiAnJ1xyXG4gICAgICAkb2JqLmVtcHR5KCkuaHRtbChodG1sKVxyXG4gICAgfVxyXG5cclxuICAgIC8v57uR5a6a5LqL5Lu2XHJcbiAgICB0aGlzLmV2ZW50QmluZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoYXQuZ2V0UGFnZUNvdW50KCkgLy/mgLvpobXmlbBcclxuICAgICAgdmFyIGluZGV4ID0gMVxyXG4gICAgICAkb2JqLm9mZigpLm9uKCdjbGljaycsICdhJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3Mob3B0cy5uZXh0Q2xzKSkge1xyXG4gICAgICAgICAgaWYgKCRvYmouZmluZCgnLicgKyBvcHRzLmFjdGl2ZUNscykudGV4dCgpID49IHBhZ2VDb3VudCkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdkaXNhYmxlZCcpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludCgkb2JqLmZpbmQoJy4nICsgb3B0cy5hY3RpdmVDbHMpLnRleHQoKSkgKyAxXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmhhc0NsYXNzKG9wdHMucHJldkNscykpIHtcclxuICAgICAgICAgIGlmICgkb2JqLmZpbmQoJy4nICsgb3B0cy5hY3RpdmVDbHMpLnRleHQoKSA8PSAxKSB7XHJcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2Rpc2FibGVkJylcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmRleCA9IHBhcnNlSW50KCRvYmouZmluZCgnLicgKyBvcHRzLmFjdGl2ZUNscykudGV4dCgpKSAtIDFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuaGFzQ2xhc3Mob3B0cy5qdW1wQnRuQ2xzKSkge1xyXG4gICAgICAgICAgaWYgKCRvYmouZmluZCgnLicgKyBvcHRzLmp1bXBJcHRDbHMpLnZhbCgpICE9PSAnJykge1xyXG4gICAgICAgICAgICBpbmRleCA9IHBhcnNlSW50KCRvYmouZmluZCgnLicgKyBvcHRzLmp1bXBJcHRDbHMpLnZhbCgpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGluZGV4ID0gcGFyc2VJbnQoJCh0aGlzKS5kYXRhKCdwYWdlJykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuZmlsbGluZyhpbmRleClcclxuICAgICAgICB0eXBlb2Ygb3B0cy5jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBvcHRzLmNhbGxiYWNrKHRoYXQpXHJcbiAgICAgIH0pXHJcbiAgICAgIC8v6L6T5YWl6Lez6L2s55qE6aG156CBXHJcbiAgICAgICRvYmoub24oJ2lucHV0IHByb3BlcnR5Y2hhbmdlJywgJy4nICsgb3B0cy5qdW1wSXB0Q2xzLCBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXHJcbiAgICAgICAgdmFyIHZhbCA9ICR0aGlzLnZhbCgpXHJcbiAgICAgICAgdmFyIHJlZyA9IC9bXlxcZF0vZ1xyXG4gICAgICAgIGlmIChyZWcudGVzdCh2YWwpKSAkdGhpcy52YWwodmFsLnJlcGxhY2UocmVnLCAnJykpXHJcbiAgICAgICAgcGFyc2VJbnQodmFsKSA+IHBhZ2VDb3VudCAmJiAkdGhpcy52YWwocGFnZUNvdW50KVxyXG4gICAgICAgIGlmIChwYXJzZUludCh2YWwpID09PSAwKSAkdGhpcy52YWwoMSkgLy/mnIDlsI/lgLzkuLoxXHJcbiAgICAgIH0pXHJcbiAgICAgIC8v5Zue6L2m6Lez6L2s5oyH5a6a6aG156CBXHJcbiAgICAgICRkb2N1bWVudC5rZXlkb3duKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICRvYmouZmluZCgnLicgKyBvcHRzLmp1bXBJcHRDbHMpLnZhbCgpKSB7XHJcbiAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludCgkb2JqLmZpbmQoJy4nICsgb3B0cy5qdW1wSXB0Q2xzKS52YWwoKSlcclxuICAgICAgICAgIHRoYXQuZmlsbGluZyhpbmRleClcclxuICAgICAgICAgIHR5cGVvZiBvcHRzLmNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIG9wdHMuY2FsbGJhY2sodGhhdClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy/liJ3lp4vljJZcclxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLmZpbGxpbmcob3B0cy5jdXJyZW50KVxyXG4gICAgICB0aGlzLmV2ZW50QmluZCgpXHJcbiAgICAgIGlmIChcclxuICAgICAgICAob3B0cy5pc0hpZGUgJiYgdGhpcy5nZXRQYWdlQ291bnQoKSA9PSAnMScpIHx8XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlQ291bnQoKSA9PSAnMCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgJG9iai5oaWRlKClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkb2JqLnNob3coKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgJC5mbi5wYWdpbmF0aW9uID0gZnVuY3Rpb24ocGFyYW1ldGVyLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAvL+mHjei9vVxyXG4gICAgICBjYWxsYmFjayA9IHBhcmFtZXRlclxyXG4gICAgICBwYXJhbWV0ZXIgPSB7fVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1ldGVyID0gcGFyYW1ldGVyIHx8IHt9XHJcbiAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fVxyXG4gICAgfVxyXG4gICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtZXRlcilcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBwYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb24odGhpcywgb3B0aW9ucylcclxuICAgICAgY2FsbGJhY2socGFnaW5hdGlvbilcclxuICAgIH0pXHJcbiAgfVxyXG59KVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFJQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///21\n")},function(module,exports){eval('module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "exports", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanM/ODJiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XG5cdGlmICghb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImV4cG9ydHNcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22\n')},function(module,exports){eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/MDA4NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///23\n")},function(module,exports,__webpack_require__){eval("// extracted by mini-css-extract-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcmVwb3J0LnNjc3M/ZWY3NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///24\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/toConsumableArray.js\nvar toConsumableArray = __webpack_require__(7);\nvar toConsumableArray_default = /*#__PURE__*/__webpack_require__.n(toConsumableArray);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/assertThisInitialized.js\nvar assertThisInitialized = __webpack_require__(9);\nvar assertThisInitialized_default = /*#__PURE__*/__webpack_require__.n(assertThisInitialized);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/asyncToGenerator.js\nvar asyncToGenerator = __webpack_require__(6);\nvar asyncToGenerator_default = /*#__PURE__*/__webpack_require__.n(asyncToGenerator);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/defineProperty.js\nvar defineProperty = __webpack_require__(1);\nvar defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/inherits.js\nvar inherits = __webpack_require__(8);\nvar inherits_default = /*#__PURE__*/__webpack_require__.n(inherits);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\nvar possibleConstructorReturn = __webpack_require__(13);\nvar possibleConstructorReturn_default = /*#__PURE__*/__webpack_require__.n(possibleConstructorReturn);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/getPrototypeOf.js\nvar getPrototypeOf = __webpack_require__(10);\nvar getPrototypeOf_default = /*#__PURE__*/__webpack_require__.n(getPrototypeOf);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/createClass.js\nvar createClass = __webpack_require__(2);\nvar createClass_default = /*#__PURE__*/__webpack_require__.n(createClass);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/classCallCheck.js\nvar classCallCheck = __webpack_require__(3);\nvar classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js\nvar regenerator = __webpack_require__(4);\nvar regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);\n\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(0);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n\n// CONCATENATED MODULE: ./src/request.js\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty_default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\nvar request_request = function request(data) {\n return new Promise(function (resolve) {\n external_jQuery_default.a.ajax(_objectSpread(_objectSpread({}, data), {}, {\n success: function success(res) {\n resolve(res);\n }\n }));\n });\n};\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.js\nvar helpers_typeof = __webpack_require__(5);\nvar typeof_default = /*#__PURE__*/__webpack_require__.n(helpers_typeof);\n\n// CONCATENATED MODULE: ./src/utils.js\n\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\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); }\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; }\nvar IS_BATCHDOWNLOAD = ~location.href.indexOf('export/batch');\n//是否是第三方的单个下载\nvar IS_THIDRD = ~location.href.indexOf('duo');\nString.prototype.substitute = function (data) {\n if (data && typeof_default()(data) == 'object') {\n return this.replace(/\\{([^{}]+)\\}/g, function (match, key) {\n var value = data[key];\n return value !== undefined ? '' + value : '';\n });\n } else {\n return this.toString();\n }\n};\nfunction mix() {\n for (var _len = arguments.length, mixins = new Array(_len), _key = 0; _key < _len; _key++) {\n mixins[_key] = arguments[_key];\n }\n var Mix = /*#__PURE__*/createClass_default()(function Mix() {\n classCallCheck_default()(this, Mix);\n for (var _i = 0, _mixins = mixins; _i < _mixins.length; _i++) {\n var mixin = _mixins[_i];\n copyProperties(this, new mixin()); // 拷贝实例属性\n }\n });\n for (var _i2 = 0, _mixins2 = mixins; _i2 < _mixins2.length; _i2++) {\n var mixin = _mixins2[_i2];\n copyProperties(Mix, mixin); // 拷贝静态属性\n copyProperties(Mix.prototype, mixin.prototype); // 拷贝原型属性\n }\n return Mix;\n}\nfunction copyProperties(target, source) {\n var _iterator = _createForOfIteratorHelper(Reflect.ownKeys(source)),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n if (key !== 'constructor' && key !== 'prototype' && key !== 'name') {\n var desc = Object.getOwnPropertyDescriptor(source, key);\n Object.defineProperty(target, key, desc);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\nfunction simpleCopy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\n// CONCATENATED MODULE: ./src/api.js\n\n\nvar domain = '';\nvar token = '';\nif (false) {} else {\n window.hgc_layer = layer;\n}\n\n\nvar api_Api = /*#__PURE__*/function () {\n function Api() {\n classCallCheck_default()(this, Api);\n this.getScorePartApi = domain + '/index.php/export/GetSection' + token;\n this.getExamClassApi = domain + '/index.php/export/getExamClass' + token;\n this.getDownloadProgressApi = domain + '/index.php/export/downloadProgress' + token;\n this.delTaskApi = domain + '/index.php/export/deleteTask' + token;\n this.downLoadTeacherUrl = domain + '/export/down_load?examId=';\n this.downLoadErrorTenUrl = domain + '/export/download?exam_id=';\n this.batchDownLoadApi = domain + '/index.php/export/pushTask' + token;\n this.singleDownLoadApi = domain + '/index.php/export/ajax_down' + token;\n this.judgeTeacherForSubject8 = domain + '/teaching/index' + token;\n this.judgeTeacherForSubjectOther = domain + '/export/academicr' + token;\n }\n createClass_default()(Api, [{\n key: \"getScorePart\",\n value: function getScorePart(examId) {\n return request_request({\n url: this.getScorePartApi,\n data: {\n exam_id: examId\n },\n method: 'POST'\n });\n }\n }, {\n key: \"getExamClass\",\n value: function getExamClass(examId) {\n return request_request({\n url: this.getExamClassApi,\n data: {\n isThird: 0,\n examGroupId: examId\n },\n method: 'POST'\n });\n }\n }, {\n key: \"getDownloadProgress\",\n value: function getDownloadProgress(params) {\n params = params || {};\n params.pageLimit = 10;\n console.log(params);\n return request_request({\n url: this.getDownloadProgressApi,\n data: params,\n method: 'POST'\n });\n }\n }, {\n key: \"delTask\",\n value: function delTask(params) {\n return request_request({\n url: this.delTaskApi,\n data: params,\n method: 'POST'\n });\n }\n }, {\n key: \"downLoadTeacher\",\n value: function downLoadTeacher(examId) {\n location.href = this.downLoadTeacherUrl + examId;\n }\n }, {\n key: \"downLoadErrorTen\",\n value: function downLoadErrorTen(examId) {\n location.href = this.downLoadErrorTenUrl + examId;\n }\n }, {\n key: \"batchDownLoad\",\n value: function batchDownLoad(params) {\n return request_request({\n url: this.batchDownLoadApi,\n data: params,\n method: 'POST'\n });\n }\n }, {\n key: \"singleDownLoad\",\n value: function singleDownLoad(params) {\n return request_request({\n url: this.singleDownLoadApi,\n data: params,\n method: 'POST'\n });\n }\n // 教学宝是否可以下载\n }, {\n key: \"judgeTeacherDownLoad\",\n value: function judgeTeacherDownLoad(params) {\n var classId = params.classId,\n examId = params.examId,\n subjectId = params.subjectId;\n var url = this.judgeTeacherForSubjectOther;\n //批量下载的时候过滤条件不同\n var filterConditions = IS_THIDRD ? '8,9,12,13,14,15,16,17,18,19' : '8';\n if (~filterConditions.indexOf(subjectId)) {\n url = this.judgeTeacherForSubject8;\n }\n return request_request({\n url: url,\n data: {\n classId: classId,\n examId: examId\n },\n method: 'GET'\n });\n }\n }]);\n return Api;\n}();\n/* harmony default export */ var api = (api_Api);\n// CONCATENATED MODULE: ./src/component.js\n\n\n//复选\n\nvar component_CheckBoxItem = /*#__PURE__*/function () {\n function CheckBoxItem($checkBox, allFn, singleFn) {\n classCallCheck_default()(this, CheckBoxItem);\n this.allFn = allFn || function () {};\n this.singleFn = singleFn || function () {};\n this.$checBox = $checkBox;\n //除了 全选 禁用按钮以外的其他按钮的集合\n this.totalCount = this.$checBox.find('.h_checkItem:not(\".checkAll\"):not(\".disabled\")').length;\n this.checkedItemsCount = 0;\n this.bindEvent();\n }\n createClass_default()(CheckBoxItem, [{\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n this.$checBox.on('click', '.h_checkItem', function () {\n var isDisabled = external_jQuery_default()(this).hasClass('disabled');\n var isNotSel = external_jQuery_default()(this).hasClass('notSel');\n var isChecked = external_jQuery_default()(this).hasClass('checked');\n var isCheckAllEl = external_jQuery_default()(this).hasClass('checkAll');\n if (isDisabled || isNotSel) return;\n external_jQuery_default()(this)[isChecked ? 'removeClass' : 'addClass']('checked');\n if (isCheckAllEl) {\n var checkItems = external_jQuery_default()(this).siblings('.h_checkItem');\n checkItems[isChecked ? 'removeClass' : 'addClass']('checked');\n self.checkedItemsCount = isChecked ? 0 : checkItems.length;\n self.allFn(external_jQuery_default()(this), !isChecked);\n } else {\n var checkAll = external_jQuery_default()(this).siblings('.checkAll');\n !isChecked ? self.checkedItemsCount++ : self.checkedItemsCount--;\n var isCheckAllStatus = self.checkedItemsCount >= self.totalCount;\n checkAll[isCheckAllStatus ? 'addClass' : 'removeClass']('checked');\n self.singleFn(external_jQuery_default()(this), !isChecked);\n }\n });\n }\n }]);\n return CheckBoxItem;\n}(); // 单选\nvar component_RadioBoxItem = /*#__PURE__*/function () {\n function RadioBoxItem($radioBox, fn) {\n classCallCheck_default()(this, RadioBoxItem);\n this.$radioBox = $radioBox;\n this.cb = fn;\n this.bindEvent();\n }\n createClass_default()(RadioBoxItem, [{\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n this.$radioBox.on('click', '.h_radioItem', function () {\n var isNotSel = external_jQuery_default()(this).hasClass('notSel');\n if (isNotSel) return;\n external_jQuery_default()(this).addClass('checked').siblings('.h_radioItem').removeClass('checked');\n self.cb && self.cb(external_jQuery_default()(this));\n });\n }\n }]);\n return RadioBoxItem;\n}(); // 切换\nvar component_Switch = /*#__PURE__*/function () {\n function Switch($switch, fn, defaultstatus) {\n classCallCheck_default()(this, Switch);\n this.$switch = $switch;\n this.status = defaultstatus || false;\n this.cb = fn || function () {};\n this.bindEvent();\n }\n createClass_default()(Switch, [{\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n this.$switch.click(function () {\n external_jQuery_default()(this).toggleClass('open');\n self.status = !self.status;\n self.cb && self.cb(self.status);\n });\n }\n }]);\n return Switch;\n}();\n\n// EXTERNAL MODULE: ./src/pagination.js\nvar pagination = __webpack_require__(21);\n\n// EXTERNAL MODULE: ./src/report.scss\nvar report = __webpack_require__(24);\n\n// CONCATENATED MODULE: ./src/template.js\nvar downLoadSettingModuleTpl = \"
\\n
\\n

\\u4E0B\\u8F7D\\u62A5\\u8868 X

\\n
\\n
\\n \\u4E0B\\u8F7D\\u5BF9\\u8C61:\\n
\\n
    \\n
  • \\n
  • \\n \\n
\\n
\\n
\\n
\\n
\\n \\u62A5\\u8868\\u5185\\u5BB9:\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u8003\\u8BD5\\u73ED\\u7EA7:\\n
\\n
\\n \\u53EF\\u4E0B\\u8F7D\\n
\\n
\\n
\\n
\\n \\u4E0D\\u53EF\\u4E0B\\u8F7D\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\u7248\\u5F0F\\u5207\\u6362\\n \\u6CE8\\uFF1A\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u7684\\u8003\\u8BD5\\u4EC5\\u80FD\\u652F\\u6301\\u9898\\u578B\\u7248\\n
\\n
\\n

\\u73ED\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868

\\n
\\n
\\n
\\n \\u5B8C\\u6574\\u7248\\n
\\n
\\n \\u9898\\u578B\\u7248\\u7B80\\u6613\\u7248\\n
\\n
\\n

\\u7B80\\u6613\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001\\u9009\\u9879\\u7EDF\\u8BA1\\u3001\\u7F3A\\u8003\\u4EBA\\u6570

\\n

\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u65F6\\u4EC5\\u80FD\\u9009\\u62E9\\u9898\\u578B\\u7248\\uFF0C\\u9898\\u578B\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001
\\u9009\\u9879\\u7EDF\\u8BA1

\\n
\\n
\\n
\\n

\\u73ED\\u7EA7\\u5E73\\u5747\\u5206\\u8868

\\n
\\n
\\n
\\n \\u5B8C\\u6574\\u7248\\n
\\n
\\n \\u9898\\u578B\\u7248\\u7B80\\u6613\\u7248\\n
\\n
\\n

\\u7B80\\u6613\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1

\\n

\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u65F6\\u4EC5\\u80FD\\u9009\\u62E9\\u9898\\u578B\\u7248\\uFF0C\\u9898\\u578B\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1

\\n
\\n
\\n
\\n

\\u5E74\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868

\\n
\\n
\\n
\\n \\u5B8C\\u6574\\u7248\\n
\\n
\\n \\u9898\\u578B\\u7248\\u7B80\\u6613\\u7248\\n
\\n
\\n

\\u7B80\\u6613\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001\\u9009\\u9879\\u7EDF\\u8BA1\\u3001\\u5206\\u6570\\u6BB5\\u4EBA\\u6570

\\n

\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u65F6\\u4EC5\\u80FD\\u9009\\u62E9\\u9898\\u578B\\u7248\\uFF0C\\u9898\\u578B\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001
\\u9009\\u9879\\u7EDF\\u8BA1\\u3001\\u5206\\u6570\\u6BB5\\u4EBA\\u6570

\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6587\\u7EFC\\u7406\\u7EFC\\u5355\\u79D1\\u6210\\u7EE9\\u660E\\u7EC6\\u62A5\\u8868\\n
\\n
\\n

\\uFF08\\u73ED\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868\\u3001\\u73ED\\u7EA7\\u5E73\\u5747\\u5206\\u8868\\u3001\\u5E74\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868\\uFF09

\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u5206\\u6BB5\\u8BBE\\u7F6E:\\n
\\n
\\n

\\n \\u8BE5\\u5206\\u6BB5\\u8BBE\\u7F6E\\u7528\\u4E8E\\u914D\\u7F6E\\u5206\\u6570\\u6BB5\\u4EBA\\u6570\\u7EDF\\u8BA1 \\u6CE8: \\u5206\\u6BB5\\u5305\\u542B\\u53F3\\u8FB9\\u754C\\u503C\\n

\\n
\\n
    \\n\\n
\\n
\\n +\\n -\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\u663E\\u793A\\u8BBE\\u7F6E:\\n
\\n
\\n
\\n \\u5B66\\u751F\\u7B54\\u6848\\n
\\n
\\n \\u5B66\\u751F\\u5F97\\u5206\\n
\\n \\uFF08\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868\\u6839\\u636E\\u8BBE\\u7F6E\\u663E\\u793A\\uFF09\\n
\\n
\\n
\\n
\\n \\u603B\\u5206\\u7CFB\\u6570:\\n
\\n
\\n
\\n \\n \\u542F\\u7528\\u7CFB\\u6570\\u540E\\uFF0C\\u4F1A\\u53E6\\u5916\\u63D0\\u4F9B\\u6362\\u7B97\\u540E\\u7684\\u603B\\u5206\\u6210\\u7EE9\\uFF08\\u539F\\u59CB\\u603B\\u5206\\xD7\\u7CFB\\u6570\\uFF09\\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n \\u7EB8\\u5F20\\u8BBE\\u7F6E:\\n
\\n
\\n
\\n A4\\u6A2A\\u5411\\n
\\n
\\n A3\\u7EB5\\u5411\\n
\\n
\\n A3\\u6A2A\\u5411\\n
\\n \\uFF1F\\u9898\\u76EE\\u6570\\u8D85\\u8FC740\\u65F6\\u9ED8\\u8BA4\\u4E3AA3\\u6A2A\\u5411\\n
\\n
\\n
\\n
\\n \\u6392\\u540D\\u5347\\u964D:\\n
\\n
\\n
\\n \\u542F\\u7528\\u540E\\uFF0C\\u4F1A\\u5728\\u73ED\\u7EA7\\u6210\\u7EE9\\u5206\\u6790\\u8868\\u4E2D\\u663E\\u793A\\u73ED\\u7EA7\\u6392\\u540D\\u5347\\u964D\\uFF0C\\u5E74\\u7EA7\\u6392\\u540D\\u5347\\u964D\\n
\\n
\\n
\\n\\n

\\u9AD8\\u7EA7\\u8BBE\\u7F6E

\\n
\\n
\\u9519\\u9898\\u524D\\u5341\\u65E0\\u9700\\u914D\\u7F6E\\uFF0C\\u76F4\\u63A5\\u4E0B\\u8F7D\\u5373\\u53EF
\\n
\\n
\\n
\\n

\\u5B66\\u751F\\u4FE1\\u606F

\\n
\\n
\\n
\\n \\u5168\\u9009\\n
\\n
\\n \\u5B66\\u751F\\u59D3\\u540D\\n
\\n
\\n \\u7CFB\\u7EDF\\u51C6\\u8003\\u8BC1\\u53F7\\n
\\n
\\n \\u5B66\\u6821\\u51C6\\u8003\\u8BC1\\u53F7\\n
\\n
\\n \\u8EAB\\u4EFD\\u8BC1\\u53F7\\n
\\n
\\n \\u5B66\\u53F7\\n
\\n
\\n
\\n
\\n
\\n

\\u8FC7\\u6EE4\\u6761\\u4EF6

\\n
\\n
\\n
\\n \\u5168\\u9009\\n
\\n
\\n \\u53EA\\u663E\\u793A\\u5728\\u7C4D\\u751F\\n
\\n
\\n \\u8FC7\\u6EE40\\u5206\\u8003\\u751F\\n
\\n
\\n
\\n
\\n
\\n

\\u8FBE\\u7EBF\\u7387\\u8BBE\\u7F6E

\\n
\\n 100%\\u2265\\n \\u4F18\\u79C0\\u7387\\u2265\\n %>\\n \\u826F\\u597D\\u7387\\u2265\\n %>\\n \\u4E2D\\u7B49\\u7387\\u2265\\n %>\\n \\u4E0D\\u53CA\\u683C\\u7387\\u2265\\n 0%\\n
\\n
\\n

\\u6CE8: \\u4E00\\u6B21\\u914D\\u7F6E\\u4FDD\\u5B58\\u540E\\uFF0C\\u540E\\u7EED\\u4E0B\\u8F7D\\u4ECD\\u6CBF\\u7528\\u5F53\\u524D\\u914D\\u7F6E

\\n
\\n
\\n
\\u4FDD\\u5B58\\u5E76\\u8FD4\\u56DE
\\n
\\u53D6\\u6D88\\u5E76\\u8FD4\\u56DE
\\n
\\n
\\n
\\u4E0B\\u8F7D
\\n
\\u751F\\u6210
\\n
\\u53D6\\u6D88
\\n
\\n
\\n
\";\nvar downLoadModuleListTpl = \"
\\n
\\n

\\u4E0B\\u8F7D\\u8FDB\\u5EA6 X

\\n
\\n
\\n \\u5B66\\u79D1\\uFF1A\\n \\n
\\n
\\n \\u72B6\\u6001\\uFF1A\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\";\nvar downLoadSettingModuleCreate = \"
\\n
\\n
\\xD7
\\n
\\n \\u5DF2\\u751F\\u6210\\uFF0C\\u8BF7\\u9009\\u62E9\\u4E0B\\u4E00\\u6B65\\u64CD\\u4F5C\\uFF01\\n
\\n
\\n
\\u6253\\u5370
\\n
\\u4E0B\\u8F7D
\\n
\\n
\\n
\";\n\n// CONCATENATED MODULE: ./src/report.js\n\n\n\n\n\n\n\n\n\nfunction report_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction report_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? report_ownKeys(Object(t), !0).forEach(function (r) { defineProperty_default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : report_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction report_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = report_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\nfunction report_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return report_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 report_arrayLikeToArray(o, minLen); }\nfunction report_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 _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = getPrototypeOf_default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf_default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn_default()(this, result); }; }\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\n\n\n\n\n\n\nvar DownLoadModelInstance = null;\nvar DownLoadModelListInstance = null;\nvar DownLoadURL = null;\n/**\r\n * 文档下载弹框分为\r\n * 1 单文件下载\r\n * 2 批量下载\r\n * 和 【单文件下载】相比【批量下载】只是多了【班级选择】的概念\r\n * 里面的高级设置是一样的\r\n */\n\n/**\r\n*访问地址 http://localhost:8081/#/export/batch\r\n**/\nvar report_Tpls = /*#__PURE__*/createClass_default()(function Tpls() {\n classCallCheck_default()(this, Tpls);\n this.downLoadType = {\n word: 1,\n excel: 2,\n teacher: 3,\n error: 4\n };\n this.checkAllTpl = \"
\\n \\u5168\\u9009\\n
\";\n this.reportContentOptionTpl = \"
\\n {name}\\n
\";\n this.scorePartTpl = \"
  • \\n
  • \";\n this.scorePartZeroTpl = \"
  • 0
  • \";\n this.canDownLoadClassTpl = \"
    \\n {className}\\n
    \";\n this.noDownLoadClassTpl = \"
    \\n {className}\\n
    \";\n this.downLoadListItemTpl = \"
    \\n \\n
    \\n
    \\n

    {examName}

    \\n

    \\u5B66\\u79D1\\uFF1A{subject}\\n \\u4E0B\\u8F7D\\u5BF9\\u8C61\\uFF1A{downloadName}\\n \\n \\n {completedStatus}\\uFF1A{classLength}\\u4E2A\\u73ED\\u7EA7\\n {classList}\\n \\n \\n {errorMsg}\\n \\n\\n \\n

    \\n
    \\n
    \\n
    \\u6253\\u5370
    \\n
    \\u4E0B\\u8F7D
    \\n
    \\n
    \\n
    \\n
    \";\n this.batchCheckAllTpl = \"
    \\n \\n
    \\n \\u5220\\u9664\\u9009\\u4E2D\\u9879\\n
    \\n
    \";\n this.notaskTpl = '
    暂无下载任务
    ';\n});\nvar mixinsClass = [report_Tpls, api];\n//批量下载\nvar report_BatchDownLoad = /*#__PURE__*/function (_mix) {\n inherits_default()(BatchDownLoad, _mix);\n var _super = _createSuper(BatchDownLoad);\n function BatchDownLoad(examId) {\n var _this2;\n classCallCheck_default()(this, BatchDownLoad);\n _this2 = _super.call(this);\n _this2.examId = examId;\n //所有下载对象班级的集合\n _this2.allClassList = [];\n //下载对象对应班级集合的缓存\n _this2.cacheExamTypeForClass = {};\n //当前下载对象下面 选择的班级\n _this2.selExamClassData = [];\n //当前渲染的班级数据\n //word excel 教学宝 错题前十 对应可下载的班级都不一样\n _this2.canDownLoadExamListData = [];\n _this2.noDownLoadExamListData = [];\n return _this2;\n }\n createClass_default()(BatchDownLoad, [{\n key: \"batchInit\",\n value: function batchInit() {\n this.initDom();\n this.bindEvent();\n //更新错题前十 和讲案的问题\n //IS_THIDRD && this.subjectId != '8'\n if (!this.isMathSubject) {\n //教学宝和错题前十提示问题\n this.downloadTypeTextNotice = defineProperty_default()(defineProperty_default()({}, this.downLoadType.teacher, '该学科暂不支持批量下载教学宝'), this.downLoadType.error, '当前科目暂未上线错题前十');\n }\n }\n }, {\n key: \"initDom\",\n value: function initDom() {\n external_jQuery_default()('#examClassBox').removeClass('hide');\n this.$canDownLoadExam = external_jQuery_default()('#canDownLoadExam');\n this.$noDownLoadExam = external_jQuery_default()('#noDownLoadExam');\n }\n }, {\n key: \"getExamClassList\",\n value: function () {\n var _getExamClassList = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee(cb) {\n var examClassList, result;\n return regenerator_default.a.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.getExamClass(this.examId);\n case 2:\n examClassList = _context.sent;\n result = JSON.parse(examClassList);\n this.allClassList = result.success ? result.data.class : [];\n console.log(result);\n this.initStatusForDownlaodType(this.downLoadData.download_type);\n //this.updateRenderExamListData('word')\n if (result.data.scorePart) {\n _context.next = 10;\n break;\n }\n external_jQuery_default()('#scorePartEl').hide();\n return _context.abrupt(\"return\");\n case 10:\n this.downLoadData.scoreSection = result.data.scorePart.splice(0, result.data.scorePart.length - 1);\n cb && cb(result.data.scorePart);\n case 12:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function getExamClassList(_x) {\n return _getExamClassList.apply(this, arguments);\n }\n return getExamClassList;\n }()\n }, {\n key: \"updateRenderExamListData\",\n value: function updateRenderExamListData(key) {\n this.selExamClassData = [];\n if (this.cacheExamTypeForClass[key]) {\n this.canDownLoadExamListData = this.cacheExamTypeForClass[key].can;\n this.noDownLoadExamListData = this.cacheExamTypeForClass[key].no;\n this.renderExamList();\n return;\n }\n var isExcel = key === 'excel';\n\n //缓存可以下载和不可下载的\n var cacheExamItem = this.cacheExamTypeForClass[key] = {\n can: [],\n no: []\n };\n //如果没有完成阅卷\n this.canDownLoadExamListData = cacheExamItem.can = this.allClassList.filter(function (v) {\n return v[key];\n });\n this.noDownLoadExamListData = cacheExamItem.no = this.allClassList.filter(function (v) {\n return !v[key];\n });\n this.renderExamList();\n }\n }, {\n key: \"renderExamList\",\n value: function renderExamList() {\n var _this3 = this;\n var examClassHtml = this.canDownLoadExamListData.reduce(function (examHtml, item) {\n examHtml += _this3.canDownLoadClassTpl.substitute(item);\n return examHtml;\n }, '');\n ////console.log(this.noDownLoadExamListData)\n var examClassHtmlDisabled = this.noDownLoadExamListData.reduce(function (examHtml, item) {\n examHtml += _this3.noDownLoadClassTpl.substitute(item);\n return examHtml;\n }, '');\n this.$canDownLoadExam.html(examClassHtml ? this.checkAllTpl + examClassHtml : '暂无可下载的班级');\n this.$noDownLoadExam.html(examClassHtmlDisabled ? examClassHtmlDisabled : '暂无不可下载的班级');\n //重置可以选择的考试班级的个数等信息\n this.resetCanDownLoadCheckBox();\n }\n }, {\n key: \"resetCanDownLoadCheckBox\",\n value: function resetCanDownLoadCheckBox() {\n Object.assign(this.canDownLoadExamCheck, {\n totalCount: this.canDownLoadExamListData.length,\n checkedItemsCount: 0\n });\n }\n }, {\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n self.canDownLoadExamCheck = new component_CheckBoxItem(self.$canDownLoadExam, function ($checkAllItem, status) {\n self.selExamClassData = status ? self.canDownLoadExamListData.map(function (v) {\n return {\n id: v.id,\n className: v.className\n };\n }) : [];\n ////console.log('选择的班级', self.selExamClassData)\n }, function ($checkItem, status) {\n var curId = $checkItem.attr('data-id');\n if (status) {\n var curExamClass = self.canDownLoadExamListData.find(function (v) {\n return v.id == curId;\n });\n self.selExamClassData.push(simpleCopy(curExamClass));\n } else {\n var curIndex = self.selExamClassData.findIndex(function (v) {\n return v.id == curId;\n });\n self.selExamClassData.splice(curIndex, 1);\n }\n ////console.log('选择的班级', self.selExamClassData)\n });\n }\n }]);\n return BatchDownLoad;\n}(mix.apply(void 0, mixinsClass)); //判断是否需要批量下载的功能\nif (IS_BATCHDOWNLOAD) {\n mixinsClass.push(report_BatchDownLoad);\n}\n//下载设置弹框\nvar report_DownLoadModel = /*#__PURE__*/function (_mix2) {\n inherits_default()(DownLoadModel, _mix2);\n var _super2 = _createSuper(DownLoadModel);\n function DownLoadModel(_ref) {\n var _this4;\n var examId = _ref.examId,\n subjectId = _ref.subjectId,\n classId = _ref.classId,\n downLoadType = _ref.downLoadType,\n complete = _ref.complete;\n classCallCheck_default()(this, DownLoadModel);\n _this4 = _super2.call(this, examId);\n _this4.examId = examId;\n _this4.subjectId = subjectId;\n _this4.classId = classId;\n //判断是否完成阅卷 未完成阅卷只有excel 里面【选择作答明细表】能下载\n //\n _this4.isComplete = IS_BATCHDOWNLOAD ? true : complete === '1';\n\n //判断是否文综理综\n _this4.isWenLiAll = ['18', '19'].includes(_this4.subjectId);\n //判断是否数学学科\n _this4.isMathSubject = ['3', '6', '51'].includes(_this4.subjectId);\n //教学宝是否可以下载\n _this4.teacherTalkingIsDownLoad = false;\n //错题前十是否可以下载\n _this4.errorTenIsDownLoad = false;\n //教学宝和错题前十提示问题\n _this4.downloadTypeTextNotice = defineProperty_default()(defineProperty_default()({}, _this4.downLoadType.teacher, '教学宝无需配置,直接下载即可'), _this4.downLoadType.error, _this4.isMathSubject ? '错题前十无需配置,直接下载即可' : '当前科目暂未上线教学宝');\n\n //下载选项提交数据\n _this4.downLoadData = {\n //1 word 2excel 3 教学宝 4 错题文档\n download_type: downLoadType ? +downLoadType : _this4.isComplete ? _this4.downLoadType.word : 2,\n //报表类型\n reportType: [],\n //班级学生成绩分析表 简单版/完整版\n isSimpleClazzAchievement: 0,\n //班级平均分数表 简单版/完整版\n isSimpleClazzAvgScore: 0,\n //年级成绩分析表简单版/完整版\n isSimpleGradeAchievement: 0,\n //显示设置\n scoreOfEachQuestion: 0,\n //分数段\n scoreSection: [],\n //总分系数\n totalScoreCoefficient: -1,\n //纸张类型 A4:1 A3:2\n paperSizeType: 1\n };\n //高级设置\n _this4.firstEnterHighSetting = true;\n _this4.highSettingData = localStorage.getItem('highSetting') ? JSON.parse(localStorage.getItem('highSetting')) : {\n //系统准考证号\n hasStudentSystemCard: 0,\n //学校准考证号\n hasStudentSchoolCard: 0,\n //身份证号\n hasIdNumber: 0,\n //考号\n hasStudentNo: 0,\n //过滤外籍生\n removeOuterStudent: 0,\n // 过滤0分\n removeZeroStudent: 0,\n //优秀率\n excellentRatio: 0.9,\n //良好率\n goodRatio: 0.8,\n //中等率\n mediumRatio: 0.6\n };\n\n //针对word 和 excel 的下载内容\n /**\r\n * CLAZZ_ACHIEVEMENT(0,\"班级学生成绩分析表\"),\r\n * CLAZZ_AVG_SCORE(1,\"班级平均分表\"),\r\n * STUDENT_ACHIEVEMENT_RANK(2,\"学生成绩排名跟踪表\"),\r\n GRADE_ACHIEVEMENT(3,\"年级学生成绩分析表\"),\r\n SCORE_SECTION(4,\"班级分数段表\"),\r\n SUBJECT_ACHIEVEMENT(5,\"各学科成绩分析表\"),\r\n WEN_LI_ZONG_ACHIEVEMENT_DETAILS(6,\"文综理综单科成绩明细报表\");\r\n */\n _this4.wordDownLoadContentOptions = [{\n name: '班级学生成绩分析表',\n id: 0\n }, {\n name: '班级平均分表',\n id: 1\n }, {\n name: '班级分数段表',\n id: 4\n }];\n _this4.excelDownLoadContentOptions = [].concat(toConsumableArray_default()(_this4.wordDownLoadContentOptions), [{\n name: '年级学生成绩分析表',\n id: 3\n }, {\n name: '学生成绩排名跟踪表',\n id: 2\n }, {\n name: '学生作答明细表',\n id: 7\n }]);\n // 文综理综独有选项\n if (_this4.isWenLiAll) {\n _this4.excelDownLoadContentOptions.splice(1, 0, {\n name: '各学科成绩分析表',\n id: 5\n });\n }\n _this4.renderReportContentOptions = _this4.wordDownLoadContentOptions;\n _this4.initsDom();\n if (IS_BATCHDOWNLOAD) {\n _this4.batchInit();\n _this4.getExamClassList(_this4.renderScorePart.bind(assertThisInitialized_default()(_this4)));\n } else {\n _this4.getScoreData();\n }\n _this4.bindEvents();\n _this4.render();\n return _this4;\n }\n createClass_default()(DownLoadModel, [{\n key: \"getScoreData\",\n value: function () {\n var _getScoreData = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee2() {\n var scorePartData, res;\n return regenerator_default.a.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.getScorePart(this.examId);\n case 2:\n scorePartData = _context2.sent;\n res = JSON.parse(scorePartData);\n this.initStatusForDownlaodType(this.downLoadData.download_type);\n if (res.success) {\n this.initDownloadTypeTextNotice(res.download_rule);\n this.downLoadData.scoreSection = res.data.splice(0, res.data.length - 1);\n this.renderScorePart();\n }\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function getScoreData() {\n return _getScoreData.apply(this, arguments);\n }\n return getScoreData;\n }()\n }, {\n key: \"initDownloadTypeTextNotice\",\n value: function initDownloadTypeTextNotice(download_rule) {\n var isTeacherDownLoad = download_rule.is_lecture_download,\n isErrorTenDownLoad = download_rule.is_topwb_download,\n teacherDownLoadMsg = download_rule.is_lecture_download_msg,\n errorDownLoadMsg = download_rule.is_topwb_download_msg;\n // //题号超过50题时仅能选择题型版\n // if(this.downLoadData.download_type){\n // console.log(download_rule,88)\n // $('#achievement').children('.h_radioItem').eq(0).addClass('notSel')\n // $('#avgScore').children('.h_radioItem').eq(0).addClass('notSel')\n // $('#gradeAvgScore').children('.h_radioItem').eq(0).addClass('notSel')\n // }\n this.teacherTalkingIsDownLoad = isTeacherDownLoad ? true : false;\n if (!isTeacherDownLoad) {\n this.downloadTypeTextNotice[this.downLoadType.teacher] = teacherDownLoadMsg ? teacherDownLoadMsg : '教学宝无需配置,直接下载即可';\n }\n this.errorTenIsDownLoad = isErrorTenDownLoad ? true : false;\n if (!isErrorTenDownLoad) {\n this.downloadTypeTextNotice[this.downLoadType.error] = errorDownLoadMsg ? IS_THIDRD ? '当前科目未上线错题前十' : errorDownLoadMsg : '错题前十无需配置,直接下载即可';\n }\n }\n }, {\n key: \"initsDom\",\n value: function initsDom() {\n external_jQuery_default()('body').append(\n //IS_BATCHDOWNLOAD 是否批量\n downLoadSettingModuleTpl.substitute({\n isSingle: IS_BATCHDOWNLOAD ? '' : 'hide'\n }));\n // 如果是word显示题型版\n external_jQuery_default()('#h_submitBtn .ensure').show();\n if (this.downLoadData.download_type == 1) {\n external_jQuery_default()('#h_submitBtn .ensure').hide();\n external_jQuery_default()('#h_submitBtn .create').show();\n external_jQuery_default()('.options-excel').hide();\n } else {\n external_jQuery_default()('.options-word').hide();\n }\n\n // 如果不是word方式打开,不显示纸张设置\n if (this.downLoadData.download_type != 1) {\n external_jQuery_default()('#paperSizeSetting').remove();\n }\n\n //如果没有完成阅卷,除了excel报表其他报表都不能选择\n if (!this.isComplete) {\n external_jQuery_default()('.downLoadObject li').addClass('disabled').removeClass('current').eq(1).removeClass('disabled').addClass('current');\n }\n //先隐藏excel 选项模块\n external_jQuery_default()('.excelOption').hide();\n //判断文综理综选项是否显示\n if (!this.isWenLiAll) {\n //console.log($('.excelOption'))\n external_jQuery_default()('.excelOption').eq(1).remove();\n }\n this.$reportContentOptions = external_jQuery_default()('#reportContentOption .h_checkBox');\n //分段系数\n this.$totalScoreCoefficient = external_jQuery_default()('.totalScore input');\n }\n }, {\n key: \"render\",\n value: function render() {\n this.renderReportContentOption();\n\n //初始化下载类型选项\n //this.initStatusForDownlaodType(this.downLoadData.download_type)\n }\n //报表内容选项\n }, {\n key: \"renderReportContentOption\",\n value: function renderReportContentOption() {\n //console.log('当前选择的报表类型', this.downLoadData.download_type)\n var options = this.renderReportContentOptions = function (_this) {\n var downLoadData = _this.downLoadData;\n if (~'1|2'.indexOf(downLoadData.download_type)) {\n return downLoadData.download_type === _this.downLoadType.word ? _this.wordDownLoadContentOptions : _this.excelDownLoadContentOptions;\n } else {\n return [];\n }\n }(this);\n var reportContentOptionHtml = this.checkAllTpl.substitute({\n name: 'reportContentOption'\n });\n var _iterator = report_createForOfIteratorHelper(options),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var item = _step.value;\n reportContentOptionHtml += this.reportContentOptionTpl.substitute(item);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n external_jQuery_default()('#reportContentOption')[options.length ? 'show' : 'hide']();\n this.$reportContentOptions.html(reportContentOptionHtml);\n Object.assign(this.reportContentCheck, {\n totalCount: options.length,\n checkedItemsCount: 0\n });\n if (this.isComplete) {\n this.$reportContentOptions.children('.checkAll').trigger('click');\n } else {\n this.$reportContentOptions.children().each(function () {\n var id = external_jQuery_default()(this).attr('data-id');\n if (id !== '7') {\n external_jQuery_default()(this).addClass('notSel');\n } else {\n external_jQuery_default()(this).trigger('click');\n }\n });\n }\n }\n //分段设置\n }, {\n key: \"renderScorePart\",\n value: function renderScorePart() {\n var _this5 = this;\n var scoreHtml = this.downLoadData.scoreSection.reduce(function (scorePartHtml, score, index) {\n scorePartHtml += _this5.scorePartTpl.substitute({\n score: score,\n index: index\n });\n return scorePartHtml;\n }, '');\n external_jQuery_default()('#scoreList').html(scoreHtml + this.scorePartZeroTpl);\n }\n }, {\n key: \"reduceScorePart\",\n value: function reduceScorePart() {\n var scoreSection = this.downLoadData.scoreSection;\n var scorePartLength = scoreSection.length;\n if (scorePartLength <= 2) return;\n this.downLoadData.scoreSection = scoreSection.splice(0, scoreSection.length - 1);\n this.renderScorePart();\n }\n }, {\n key: \"addScorePart\",\n value: function addScorePart() {\n var scoreSection = this.downLoadData.scoreSection;\n var scorePartLength = scoreSection.length;\n if (scorePartLength >= 10) return;\n scoreSection.push('');\n this.renderScorePart();\n }\n }, {\n key: \"clearScroePart\",\n value: function clearScroePart() {\n var scoreSection = this.downLoadData.scoreSection;\n this.downLoadData.scoreSection = scoreSection.map(function () {\n return '';\n });\n this.renderScorePart();\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var _this6 = this;\n var self = this;\n var downLoadData = self.downLoadData;\n var downLoadType = downLoadData.download_type;\n //是否只选择了选择作答明细表\n var hasReportType7 = false;\n //报表内容选项\n self.reportContentCheck = new component_CheckBoxItem(self.$reportContentOptions, function ($checkAllItem, status) {\n downLoadData.reportType = status ? self.renderReportContentOptions.map(function (v) {\n return v.id;\n }) : [];\n if (IS_BATCHDOWNLOAD && hasReportType7) {\n hasReportType7 = false;\n var _self$downLoadType = self.downLoadType,\n word = _self$downLoadType.word,\n excel = _self$downLoadType.excel,\n teacher = _self$downLoadType.teacher,\n error = _self$downLoadType.error;\n var reportNameMap = defineProperty_default()(defineProperty_default()(defineProperty_default()(defineProperty_default()({}, word, 'word'), excel, 'excel'), teacher, 'teacher'), error, 'error');\n self.updateRenderExamListData(reportNameMap[downLoadType]);\n }\n\n //console.log('报表内容选项', downLoadData.reportType)\n }, function ($checkItem, status) {\n var curId = $checkItem.attr('data-id');\n if (status) {\n downLoadData.reportType.push(curId);\n } else {\n var curIndex = downLoadData.reportType.findIndex(function (id) {\n return id == curId;\n });\n downLoadData.reportType.splice(curIndex, 1);\n }\n console.log(self.allClassList);\n if (IS_BATCHDOWNLOAD && downLoadData.reportType.toString() === '7') {\n hasReportType7 = true;\n self.canDownLoadExamListData = self.allClassList;\n self.noDownLoadExamListData = [];\n self.renderExamList();\n } else {\n var _self$downLoadType2 = self.downLoadType,\n word = _self$downLoadType2.word,\n excel = _self$downLoadType2.excel,\n teacher = _self$downLoadType2.teacher,\n error = _self$downLoadType2.error;\n var reportNameMap = defineProperty_default()(defineProperty_default()(defineProperty_default()(defineProperty_default()({}, word, 'word'), excel, 'excel'), teacher, 'teacher'), error, 'error');\n self.updateRenderExamListData(reportNameMap[downLoadType]);\n }\n //console.log('报表内容选项', downLoadData.reportType)\n });\n //文综理综单科成绩明细表\n new component_CheckBoxItem(external_jQuery_default()('#subjectReport'), function () {}, function ($checkItem, status) {\n if (status) {\n downLoadData.reportType.push(6);\n } else {\n var curIndex = downLoadData.reportType.findIndex(function (id) {\n return id === 5;\n });\n downLoadData.reportType.splice(curIndex, 1);\n }\n //self.hasWenLiZongDetail = status ? 1 : 0\n //console.log('报表内容选项', downLoadData.reportType)\n });\n\n //样式切换\n external_jQuery_default()('.hgc_report .styleChange .tip').click(function () {\n var isClose = external_jQuery_default()(this).hasClass('down');\n external_jQuery_default()(this).siblings('.styleBox')[isClose ? 'show' : 'hide']();\n external_jQuery_default()(this)[isClose ? 'removeClass' : 'addClass']('down')[isClose ? 'addClass' : 'removeClass']('up');\n });\n //班级学生成绩分析表\n new component_RadioBoxItem(external_jQuery_default()('#achievement'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat;\n ////console.log(downLoadData)\n });\n //纸张设置\n new component_RadioBoxItem(external_jQuery_default()('#paperSizeSetting'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat;\n ////console.log(downLoadData)\n });\n //班级平均分表\n new component_RadioBoxItem(external_jQuery_default()('#avgScore'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat;\n ////console.log(downLoadData)\n });\n //年级平均分表\n new component_RadioBoxItem(external_jQuery_default()('#gradeAvgScore'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat;\n ////console.log(downLoadData)\n });\n //显示设置\n new component_RadioBoxItem(external_jQuery_default()('#studentAchievement'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat;\n ////console.log(downLoadData)\n });\n\n //分段设置\n external_jQuery_default()('#scoreOperator .hbtn').unbind().click(function () {\n if (external_jQuery_default()(this).hasClass('reduce')) {\n self.reduceScorePart();\n } else if (external_jQuery_default()(this).hasClass('add')) {\n self.addScorePart();\n } else {\n self.clearScroePart();\n }\n });\n //分段文本框操作\n external_jQuery_default()('#scoreList').off('blur').on('blur', 'input', function () {\n var scoreSection = self.downLoadData.scoreSection;\n var _index = +external_jQuery_default()(this).attr('data-index');\n var val = +external_jQuery_default()(this).val();\n if (val <= 0 || scoreSection[_index + 1] && val <= scoreSection[_index + 1] || scoreSection[_index - 1] && val >= scoreSection[_index - 1] || val >= self.maxScore) {\n hgc_layer.alert('分段数值设置不正确,请重新输入');\n external_jQuery_default()(this).val(scoreSection[_index]);\n } else {\n scoreSection[_index] = val;\n }\n });\n new component_Switch(external_jQuery_default()('#switch-total-score'), function (status) {\n if (status) {\n external_jQuery_default()('#contactChoice1,#contactChoice2').prop('disabled', false);\n self.downLoadData.totalScoreCoefficientIsRounding = 1;\n } else {\n external_jQuery_default()('#contactChoice1,#contactChoice2').prop('disabled', true);\n external_jQuery_default()('#contactChoice1').prop('checked', true);\n external_jQuery_default()('#contactChoice2').prop('checked', false);\n delete self.downLoadData.totalScoreCoefficientIsRounding;\n }\n _this6.$totalScoreCoefficient[status ? 'removeClass' : 'addClass']('disabled').prop('disabled', !status);\n self.downLoadData.totalScoreCoefficient = status ? _this6.$totalScoreCoefficient.val() : -1;\n });\n external_jQuery_default()('.number-type input').click(function () {\n self.downLoadData.totalScoreCoefficientIsRounding = external_jQuery_default()(this).val();\n });\n new component_Switch(external_jQuery_default()('#switch-ranking'), function (status) {\n self.downLoadData.showRankingChanges = status ? 1 : 0;\n });\n this.$totalScoreCoefficient.blur(function () {\n var val = +external_jQuery_default()(this).val();\n if (!Number.isFinite(val)) {\n hgc_layer.alert('总分系数为0~10以内的数字');\n val = 1.25;\n } else {\n if (val <= 0) {\n val = 1.25;\n } else if (val > 10) {\n val = 10;\n }\n }\n external_jQuery_default()(this).val(val.toFixed(2));\n self.downLoadData.totalScoreCoefficient = val.toFixed(2);\n });\n external_jQuery_default()('#h_submitBtn .hbtn').click(function () {\n if (external_jQuery_default()(this).hasClass('ensure')) {\n //下载\n onSubmitBtn(self);\n } else if (external_jQuery_default()(this).hasClass('create')) {\n // 生成\n onSubmitBtn(self, '生成');\n // $('body').append(downLoadSettingModuleCreate)\n // scFn.call(this)\n } else {\n external_jQuery_default()('#hgc_reportBox').remove();\n DownLoadModelInstance = null;\n }\n });\n external_jQuery_default()('.hgc_report h2.title .hclose').click(function () {\n external_jQuery_default()('#hgc_reportBox').remove();\n DownLoadModelInstance = null;\n });\n function onSubmitBtn(self, type) {\n var downLoadType = self.downLoadData.download_type;\n var submitParams = report_objectSpread(report_objectSpread(report_objectSpread({}, self.downLoadData), self.highSettingData), {}, {\n scoreSection: self.downLoadData.scoreSection.length ? [].concat(toConsumableArray_default()(self.downLoadData.scoreSection), ['0']) : []\n });\n if (~'1|2'.indexOf(downLoadType) && !self.downLoadData.reportType.length) {\n hgc_layer.alert('请选择要下载的报表内容');\n return;\n }\n if (IS_BATCHDOWNLOAD) {\n // 批量\n submitParams.examGroupId = self.examId;\n self.batchDownLoadFn(downLoadType, submitParams, type);\n } else {\n // 单个 下载\n submitParams.exam_id = self.examId;\n self.singleDownLoadFn(downLoadType, submitParams, type);\n }\n }\n this.highSettingEvent();\n }\n }, {\n key: \"scFn\",\n value: function scFn() {\n external_jQuery_default()('.sc_submitBtns .hbtn').click(function () {\n if (external_jQuery_default()(this).hasClass('create')) {\n //打印\n evaluationClient.BulkPrintPDF(JSON.stringify(DownLoadURL.print));\n external_jQuery_default()('#hgc_reportBox').remove();\n external_jQuery_default()('#sc_createBox').remove();\n } else {\n //下载\n if (DownLoadURL.status) {\n external_jQuery_default()('#hgc_reportBox').remove();\n external_jQuery_default()('#sc_createBox').remove();\n location.href = DownLoadURL.result;\n }\n }\n });\n external_jQuery_default()('.sc_close').click(function () {\n external_jQuery_default()('#sc_createBox').remove();\n });\n }\n }, {\n key: \"highSettingEvent\",\n value: function highSettingEvent() {\n var _this7 = this;\n var self = this;\n var downLoadData = self.downLoadData;\n //高级设置\n external_jQuery_default()('#highSetting span').click(function () {\n self.submitBtnStatusChange(true);\n self.initHighSettingStatus();\n });\n\n //高级设置---学生选择\n var studentsInfo = ['hasStudentSystemCard', 'hasStudentSchoolCard', 'hasIdNumber', 'hasStudentNo'];\n new component_CheckBoxItem(external_jQuery_default()('#studentsSetting'), function ($checkAll, status) {\n studentsInfo.forEach(function (v) {\n _this7.highSettingData[v] = status ? 1 : 0;\n });\n }, function ($checkItem, status) {\n var name = $checkItem.attr('data-name');\n _this7.highSettingData[name] = status ? 1 : 0;\n });\n //过滤条件\n var filterInfo = ['removeOuterStudent', 'removeZeroStudent'];\n new component_CheckBoxItem(external_jQuery_default()('#filterSetting'), function ($checkAll, status) {\n filterInfo.forEach(function (v) {\n _this7.highSettingData[v] = status ? 1 : 0;\n });\n }, function ($checkItem, status) {\n var name = $checkItem.attr('data-name');\n _this7.highSettingData[name] = status ? 1 : 0;\n });\n //达线设置\n var complianceFields = [100, 'excellentRatio', 'goodRatio', 'mediumRatio', 0];\n external_jQuery_default()('#complianceRate input').blur(function () {\n var name = external_jQuery_default()(this).attr('data-name');\n var currentVal = +external_jQuery_default()(this).val();\n var fieldIndex = complianceFields.indexOf(name);\n var preVal = complianceFields[fieldIndex - 1];\n preVal = Number.isFinite(preVal) ? preVal : self.highSettingData[preVal] * 100;\n var nextVal = complianceFields[fieldIndex + 1];\n nextVal = Number.isFinite(nextVal) ? nextVal : self.highSettingData[nextVal] * 100;\n if (currentVal < preVal && currentVal > nextVal) {\n self.highSettingData[name] = +(currentVal / 100).toFixed(2);\n } else {\n external_jQuery_default()(this).val(self.highSettingData[name] * 100);\n }\n });\n external_jQuery_default()('.hgc_report').on('click', '.downLoadObject li', function () {\n if (external_jQuery_default()(this).hasClass('disabled')) return;\n external_jQuery_default()(this).addClass('current').siblings().removeClass('current');\n var downLoadType = external_jQuery_default()(this).attr('data-id');\n if (downLoadType == 2) {\n external_jQuery_default()('#scoreDisplaySettings').show();\n } else {\n external_jQuery_default()('#scoreDisplaySettings').hide();\n self.downLoadData.scoreOfEachQuestion = 0;\n }\n // 如果不是word方式打开,不显示纸张设置\n if (downLoadType != 1) {\n external_jQuery_default()('#paperSizeSetting').hide();\n } else {\n external_jQuery_default()('#paperSizeSetting').show();\n }\n // 如果是word显示题型版\n if (downLoadType == 1) {\n external_jQuery_default()('.options-excel').hide();\n external_jQuery_default()('.options-word').show();\n } else {\n external_jQuery_default()('.options-word').hide();\n external_jQuery_default()('.options-excel').show();\n }\n self.initStatusForDownlaodType(downLoadType);\n });\n external_jQuery_default()('#h_saveSettingBtn .hbtn').click(function () {\n self.submitBtnStatusChange(false);\n if (external_jQuery_default()(this).hasClass('ensure')) {\n window.localStorage.setItem('highSetting', JSON.stringify(self.highSettingData));\n }\n });\n }\n }, {\n key: \"initHighSettingStatus\",\n value: function initHighSettingStatus() {\n var _this8 = this;\n var self = this;\n if (!self.firstEnterHighSetting) return;\n var highSettingOptions = [].concat(toConsumableArray_default()(external_jQuery_default()('#studentsSetting .h_checkItem')), toConsumableArray_default()(external_jQuery_default()('#filterSetting .h_checkItem')));\n highSettingOptions.forEach(function (el) {\n var name = external_jQuery_default()(el).attr('data-name');\n if (_this8.highSettingData[name]) {\n external_jQuery_default()(el).click();\n }\n });\n external_jQuery_default()('#complianceRate input').each(function () {\n var name = external_jQuery_default()(this).attr('data-name');\n external_jQuery_default()(this).val(self.highSettingData[name] * 100);\n });\n self.firstEnterHighSetting = false;\n }\n }, {\n key: \"submitBtnStatusChange\",\n value: function submitBtnStatusChange(flag) {\n debugger;\n external_jQuery_default()('#setting')[flag ? 'hide' : 'show']();\n external_jQuery_default()('#filterOptions')[!flag ? 'hide' : 'show']();\n external_jQuery_default()('#h_saveSettingBtn')[flag ? 'addClass' : 'removeClass']('flex');\n external_jQuery_default()('#h_submitBtn')[!flag ? 'addClass' : 'removeClass']('flex');\n }\n }, {\n key: \"batchDownLoadFn\",\n value: function batchDownLoadFn(downLoadType, submitParams) {\n var self = this;\n console.log(submitParams);\n if (!self.selExamClassData.length) {\n hgc_layer.alert('请选择要下载的班级');\n return;\n }\n submitParams = report_objectSpread(report_objectSpread({}, submitParams), {}, {\n class_ids: self.selExamClassData\n });\n hgc_layer.msg('生成中,请稍后...', {\n time: 0,\n shade: 0.4\n });\n self.batchDownLoad(submitParams).then(function (res) {\n hgc_layer.closeAll();\n var result = JSON.parse(res);\n if (result.status) {\n hgc_layer.open({\n title: '下载提示:',\n content: '已成功转入后台生成报表,请等待',\n btn: ['查看生成进度', '确定'],\n yes: function yes(index, layero) {\n //按钮【按钮一】的回调\n hgc_layer.closeAll();\n external_jQuery_default()('#hgc_reportBox').remove();\n var subjectId = external_jQuery_default()('.progress_btn').attr('subjectId');\n DownLoadModelListInstance = new report_DownLoadListModel(subjectId);\n },\n btn2: function btn2(index, layero) {\n //按钮【按钮二】的回调\n //return false 开启该代码可禁止点击该按钮关闭\n //按钮【按钮一】的回调\n hgc_layer.closeAll();\n external_jQuery_default()('#hgc_reportBox').remove();\n },\n cancel: function cancel() {\n //右上角关闭回调\n //return false 开启该代码可禁止点击该按钮关闭\n //按钮【按钮一】的回调\n hgc_layer.closeAll();\n external_jQuery_default()('#hgc_reportBox').remove();\n }\n });\n } else {\n hgc_layer.alert(result.msg);\n }\n });\n }\n }, {\n key: \"singleDownLoadFn\",\n value: function () {\n var _singleDownLoadFn = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee3(downLoadType, submitParams, type) {\n var _this9 = this;\n var self, result, res, errorInfo, reportMap;\n return regenerator_default.a.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n self = this;\n if (!~'3|4'.indexOf(downLoadType)) {\n _context3.next = 17;\n break;\n }\n if (!(downLoadType == self.downLoadType.teacher && self.teacherTalkingIsDownLoad)) {\n _context3.next = 15;\n break;\n }\n hgc_layer.msg('生成中,请稍后...', {\n time: 0,\n shade: 0.4\n });\n _context3.next = 6;\n return self.judgeTeacherDownLoad({\n subjectId: self.subjectId,\n classId: self.classId,\n examId: self.examId\n });\n case 6:\n result = _context3.sent;\n res = JSON.parse(result);\n errorInfo = res.error;\n hgc_layer.closeAll();\n if (!res.status) {\n self.downLoadTeacher(self.examId);\n } else {\n hgc_layer.alert(res.error);\n //教学宝是否可以下载的状态判断c\n external_jQuery_default()('#nosetting').children('strong').html(errorInfo);\n }\n //教学宝是否能下载\n self.teacherTalkingIsDownLoad = res.status ? false : true;\n self.downloadTypeTextNotice[downLoadType] = errorInfo ? errorInfo : self.downloadTypeTextNotice[downLoadType];\n _context3.next = 16;\n break;\n case 15:\n if (downLoadType == self.downLoadType.error && self.errorTenIsDownLoad) {\n self.downLoadErrorTen(self.examId);\n }\n case 16:\n return _context3.abrupt(\"return\");\n case 17:\n //报表内容替换字段\n /**\r\n * CLAZZ_ACHIEVEMENT(0,\"班级学生成绩分析表\"),CLAZZ_AVG_SCORE(1,\"班级平均分表\"),STUDENT_ACHIEVEMENT_RANK(2,\"学生成绩排名跟踪表\"),\r\n GRADE_ACHIEVEMENT(3,\"年级学生成绩分析表\"),SCORE_SECTION(4,\"班级分数段表\"),SUBJECT_ACHIEVEMENT(5,\"各学科成绩分析表\"),\r\n WEN_LI_ZONG_ACHIEVEMENT_DETAILS(6,\"文综理综单科成绩明细报表\");\r\n */\n reportMap = {\n 0: 'hasClazzAchievement',\n 1: 'hasClazzAvgScore',\n 2: 'hasStudentAchievementRank',\n 3: 'hasGradeAchievement',\n 4: 'hasScoreSection',\n 5: 'hasSubjectAchievement',\n 6: 'hasWenLiZongDetail',\n 7: 'hasClazzChoiceTopicStatistics'\n };\n submitParams.reportType.forEach(function (key) {\n submitParams[reportMap[key]] = 1;\n });\n hgc_layer.msg('生成中,请稍后...', {\n time: 0,\n shade: 0.4\n });\n self.singleDownLoad(submitParams).then(function (res) {\n hgc_layer.closeAll();\n var result = JSON.parse(res);\n if (result.status) {\n if (type == '生成') {\n DownLoadURL = result;\n external_jQuery_default()('body').append(downLoadSettingModuleCreate);\n _this9.scFn.call(_this9);\n } else {\n external_jQuery_default()('#hgc_reportBox').remove();\n location.href = result.result;\n }\n } else {\n hgc_layer.alert(result.result);\n }\n });\n case 21:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function singleDownLoadFn(_x2, _x3, _x4) {\n return _singleDownLoadFn.apply(this, arguments);\n }\n return singleDownLoadFn;\n }()\n }, {\n key: \"initStatusForDownlaodType\",\n value: function () {\n var _initStatusForDownlaodType = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee4(downLoadType) {\n var hasOption, isTeacher, _this$downLoadType, word, excel, teacher, error, reportNameMap;\n return regenerator_default.a.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n hasOption = ~'1|2'.indexOf(downLoadType);\n isTeacher = downLoadType == 3;\n this.downLoadData.download_type = +downLoadType;\n //重置报表内容选项\n this.downLoadData.reportType = [];\n //是否有报表内容选项\n if (hasOption) {\n this.renderReportContentOption();\n }\n // word 模块并且是批量 下\n if (IS_BATCHDOWNLOAD) {\n external_jQuery_default()('#h_submitBtn .ensure').show();\n external_jQuery_default()('#h_submitBtn .create').hide();\n if (downLoadType == 1) {\n external_jQuery_default()('#h_submitBtn .ensure').hide();\n external_jQuery_default()('#h_submitBtn .create').show();\n }\n }\n\n /**\r\n * 教学宝 错题前十 没有选项 init\r\n */\n debugger;\n external_jQuery_default()('#setting .canselOptions')[hasOption ? 'show' : 'hide']();\n\n /**\r\n * excel 有年级平均分选项 init\r\n */\n external_jQuery_default()('.excelOption')[downLoadType == this.downLoadType.excel ? 'show' : 'hide']();\n //默认不选中文综理综单科成绩明细报表 非文综理综没有这个选项\n if (this.isWenLiAll) {\n //文理综单科成绩明细表\n external_jQuery_default()('#subjectReport .h_checkItem').removeClass('checked');\n }\n if (!IS_BATCHDOWNLOAD) {\n //教学宝是否可以下载的状态判断c\n //单个下载除了数学 其他科目都没有错题前十\n //let isDownLoadError = !this.isMathSubject && downLoadType == 4\n external_jQuery_default()('#nosetting')[hasOption ? 'removeClass' : 'addClass']('flex').children('strong').html(this.downloadTypeTextNotice[downLoadType]);\n } else {\n _this$downLoadType = this.downLoadType, word = _this$downLoadType.word, excel = _this$downLoadType.excel, teacher = _this$downLoadType.teacher, error = _this$downLoadType.error;\n reportNameMap = defineProperty_default()(defineProperty_default()(defineProperty_default()(defineProperty_default()({}, word, 'word'), excel, 'excel'), teacher, 'teacher'), error, 'error');\n this.updateRenderExamListData(reportNameMap[downLoadType]);\n //IS_THIDRD && this.subjectId != '8'\n //批量下载 除了数学其他科目 教学宝==>>不支持下载 错题前十==>>暂未上线该功能\n if (!this.isMathSubject) {\n //教学宝是否可以下载的状态判断c\n external_jQuery_default()('#nosetting')[hasOption || isTeacher ? 'removeClass' : 'addClass']('flex').children('strong').html(this.downloadTypeTextNotice[downLoadType]);\n external_jQuery_default()('#examClassBox')[hasOption || isTeacher ? 'show' : 'hide']();\n }\n }\n case 11:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function initStatusForDownlaodType(_x5) {\n return _initStatusForDownlaodType.apply(this, arguments);\n }\n return initStatusForDownlaodType;\n }()\n }]);\n return DownLoadModel;\n}(mix.apply(void 0, mixinsClass)); // 批量下载列表弹框\nvar report_DownLoadListModel = /*#__PURE__*/function (_mix3) {\n inherits_default()(DownLoadListModel, _mix3);\n var _super3 = _createSuper(DownLoadListModel);\n function DownLoadListModel(subjectId) {\n var _this10;\n classCallCheck_default()(this, DownLoadListModel);\n _this10 = _super3.call(this);\n _this10.searchParams = {\n page: 1,\n pageLimit: 10,\n subjectId: subjectId,\n status: ''\n };\n _this10.listData = [];\n _this10.selListData = [];\n _this10.searchSubjects = {};\n _this10.eventBind();\n _this10.getList();\n return _this10;\n }\n createClass_default()(DownLoadListModel, [{\n key: \"getList\",\n value: function () {\n var _getList = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee5() {\n var page,\n self,\n result,\n res,\n _args5 = arguments;\n return regenerator_default.a.wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n page = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : 1;\n self = this;\n self.searchParams.page = page;\n _context5.next = 5;\n return self.getDownloadProgress(self.searchParams);\n case 5:\n result = _context5.sent;\n res = JSON.parse(result);\n self.initListProgress(res);\n //调用分页\n if (!(res.pages.totalPage <= 1)) {\n _context5.next = 11;\n break;\n }\n external_jQuery_default()('#h_pagination').hide();\n return _context5.abrupt(\"return\");\n case 11:\n external_jQuery_default()('#h_pagination').show();\n external_jQuery_default()('#h_pagination').pagination({\n pageCount: res.pages.totalPage,\n jump: true,\n callback: function callback(api) {\n //console.log(api.getCurrent())\n self.searchParams.page = api.getCurrent();\n self.getDownloadProgress(self.searchParams).then(function (result) {\n var res = JSON.parse(result);\n self.initListProgress(res);\n });\n //获取当前页面\n //api.getCurrent()\n }\n });\n case 13:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5, this);\n }));\n function getList() {\n return _getList.apply(this, arguments);\n }\n return getList;\n }()\n }, {\n key: \"initListProgress\",\n value: function initListProgress(res) {\n this.selListData = [];\n this.listData = this.formatData(res.data.listData);\n if (!Object.keys(this.searchSubjects).length) {\n this.renderFilterSubject(res.subjects, res.sessionSubjectId);\n }\n this.renderList();\n }\n }, {\n key: \"formatData\",\n value: function formatData(data) {\n //2 word 1excel 3 教学宝 4 错题文档\n var _this$downLoadType2 = this.downLoadType,\n word = _this$downLoadType2.word,\n excel = _this$downLoadType2.excel,\n teacher = _this$downLoadType2.teacher,\n error = _this$downLoadType2.error;\n var downloadMap = defineProperty_default()(defineProperty_default()(defineProperty_default()(defineProperty_default()({}, word, 'word'), excel, 'excel'), teacher, '教学宝'), error, '错题文档');\n var createStatusMap = {\n 1: '未生成',\n 2: '已生成',\n 3: '生成失败',\n 4: '生成中'\n };\n var resultData = [];\n for (var i = 0, ilen = data.length; i < ilen; i++) {\n var examName = data[i].examName;\n var task = data[i].task;\n for (var j = 0, jlen = task.length; j < jlen; j++) {\n task[j] = report_objectSpread(report_objectSpread({}, task[j]), {}, {\n examName: examName,\n classLength: task[j].class.length,\n classList: task[j].class.toString(),\n isHide: task[j].errorMsg ? '' : 'hide',\n downloadName: downloadMap[task[j].downloadType],\n isDisabeld: task[j].status == '2' ? '' : 'disabled',\n completedStatus: createStatusMap[task[j].status],\n isShow: task[j].downloadType == 2 ? 'isShow' : ''\n });\n resultData.push(task[j]);\n }\n }\n return resultData;\n }\n //渲染学科筛选条件\n }, {\n key: \"renderFilterSubject\",\n value: function renderFilterSubject(subjects, defaultSubjectId) {\n this.searchSubjects = subjects;\n var subjectOptions = '';\n for (var subjectId in subjects) {\n var isDefaultOption = subjectId === defaultSubjectId;\n subjectOptions += \"\");\n }\n this.searchParams.subjectId = defaultSubjectId;\n external_jQuery_default()('#subjectFilter').html(subjectOptions);\n }\n }, {\n key: \"renderList\",\n value: function renderList() {\n var data = this.listData;\n var downListHtml = '';\n for (var i = 0, ilen = data.length; i < ilen; i++) {\n downListHtml += this.downLoadListItemTpl.substitute(data[i]);\n }\n if (!downListHtml) {\n downListHtml = this.notaskTpl;\n } else {\n downListHtml += this.batchCheckAllTpl;\n }\n external_jQuery_default()('#downLoadList').html(downListHtml);\n this.updateListCheckCount();\n }\n }, {\n key: \"updateListCheckCount\",\n value: function updateListCheckCount() {\n var totalCount = this.listData.filter(function (v) {\n return v.status === '2';\n }).length;\n Object.assign(this.downLoadListCheck, {\n totalCount: totalCount,\n checkedItemsCount: 0\n });\n }\n }, {\n key: \"delDownload\",\n value: function delDownload(ids, cb) {\n this.delTask({\n ids: ids\n }).then(function (res) {\n return JSON.parse(res);\n }).then(function (result) {\n if (result.success) {\n cb(result);\n }\n }).catch(function (err) {\n //console.error(err)\n });\n }\n }, {\n key: \"eventBind\",\n value: function eventBind() {\n var _this11 = this;\n var self = this;\n external_jQuery_default()('body').append(downLoadModuleListTpl);\n this.downLoadListCheck = new component_CheckBoxItem(external_jQuery_default()('#downLoadList'), function ($checkAllItem, status) {\n _this11.selListData = status ? simpleCopy(_this11.listData) : [];\n ////console.log('报表内容选项', downLoadData.reportType)\n }, function ($checkItem, status) {\n var curId = $checkItem.attr('data-id');\n if (status) {\n var checkItem = _this11.listData.find(function (v) {\n return v.id === curId;\n });\n _this11.selListData.push(checkItem);\n } else {\n var checkIndex = _this11.selListData.findIndex(function (v) {\n return v.id === curId;\n });\n _this11.selListData.splice(checkIndex, 1);\n }\n ////console.log('报表内容选项', downLoadData.reportType)\n });\n\n //修改筛选条件\n external_jQuery_default()('#subjectFilter').change(function () {\n self.searchParams.subjectId = external_jQuery_default()(this).val();\n self.getList();\n });\n external_jQuery_default()('#statusFilter').change(function () {\n self.searchParams.status = external_jQuery_default()(this).val();\n self.getList();\n });\n var that = this;\n external_jQuery_default()('#downLoadList').on('click', '.downLoadInfo .hbtns .singleBtn', function (event) {\n event.stopPropagation();\n var curId = external_jQuery_default()(this).attr('data-id');\n //删除\n if (external_jQuery_default()(this).hasClass('del')) {\n self.delDownload([curId], function (result) {\n var delIndex = self.listData.findIndex(function (v) {\n return v.id === curId;\n });\n self.listData.splice(delIndex, 1);\n if (!self.listData.length) {\n self.getList();\n } else {\n self.renderList();\n }\n });\n } else if (external_jQuery_default()(this).hasClass('create')) {\n //打印\n if (external_jQuery_default()(this).hasClass('disabled')) return;\n var ids = that.listData.filter(function (s) {\n return s.id == curId;\n });\n var data = '';\n if (ids.length) {\n data = ids[0].print;\n }\n evaluationClient.BulkPrintPDF(JSON.stringify(data));\n } else {\n // 下载\n if (external_jQuery_default()(this).hasClass('disabled')) return;\n var zipUrl = external_jQuery_default()(this).attr('data-zipUrl');\n location.href = zipUrl;\n }\n });\n external_jQuery_default()('#downLoadList').on('click', '.batchBtns .opratorBtn', function (event) {\n event.stopPropagation();\n if (!self.selListData.length) {\n hgc_layer.alert('请选择需要操作的项');\n return;\n }\n //批量删除\n if (external_jQuery_default()(this).hasClass('notice')) {\n self.delDownload(self.selListData.map(function (v) {\n return v.id;\n }), function (result) {\n self.selListData.forEach(function (v) {\n var curIndex = self.listData.findIndex(function (_ref2) {\n var id = _ref2.id;\n return id == v.id;\n });\n self.listData.splice(curIndex, 1);\n });\n self.renderList();\n });\n }\n });\n external_jQuery_default()('.hgc_report h2.title .hclose').click(function () {\n external_jQuery_default()('#hgc_reportBox').remove();\n DownLoadModelListInstance = null;\n });\n }\n }]);\n return DownLoadListModel;\n}(mix(report_Tpls, api));\nexternal_jQuery_default()(function () {\n external_jQuery_default()('#dynamic-table .downloadFileBtn').click(function () {\n if (external_jQuery_default()(this).attr('topic_count') >= 40) {\n // hasXa4 hasYa3 hasXa3\n setTimeout(function () {\n external_jQuery_default()('#hasXa4').show();\n external_jQuery_default()('#hasYa3').hide();\n external_jQuery_default()('#hasXa3').show();\n }, 20);\n } else {\n setTimeout(function () {\n external_jQuery_default()('#hasXa4').show();\n external_jQuery_default()('#hasYa3').show();\n external_jQuery_default()('#hasXa3').show();\n }, 20);\n }\n if (!IS_BATCHDOWNLOAD) {\n var downLoadType = external_jQuery_default()(this).attr('data-downloadType');\n var examId = external_jQuery_default()(this).attr('rel');\n var subjectId = external_jQuery_default()(this).attr('subject');\n var classId = external_jQuery_default()(this).attr('class_id');\n var complete = external_jQuery_default()(this).attr('complete');\n DownLoadModelInstance = new report_DownLoadModel({\n examId: examId,\n subjectId: subjectId,\n classId: classId,\n downLoadType: downLoadType,\n complete: complete\n });\n } else {\n var _subjectId = external_jQuery_default()(this).attr('subject');\n var _examId = external_jQuery_default()(this).attr('rel');\n var _complete = external_jQuery_default()(this).attr('complete');\n DownLoadModelInstance = new report_DownLoadModel({\n examId: _examId,\n subjectId: _subjectId,\n complete: _complete\n });\n }\n if (external_jQuery_default()(this).attr('data-downloadType') != 2) {\n external_jQuery_default()('#scoreDisplaySettings').hide();\n }\n });\n external_jQuery_default()('.progress_btn').click(function (e) {\n e.preventDefault();\n var subjectId = external_jQuery_default()(this).attr('subjectId');\n DownLoadModelListInstance = new report_DownLoadListModel(subjectId);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcmVxdWVzdC5qcz8yYWRlIiwid2VicGFjazovLy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovLy8uL3NyYy9hcGkuanM/ZDcyMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50LmpzP2EyOTAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLmpzP2U3NjEiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlcG9ydC5qcz80MjI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSdcclxuXHJcbmNvbnN0IHJlcXVlc3QgPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcclxuICAgICQuYWpheCh7XHJcbiAgICAgIC4uLmRhdGEsXHJcbiAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHsgcmVxdWVzdCB9XHJcbiIsImV4cG9ydCBjb25zdCBJU19CQVRDSERPV05MT0FEID0gfmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhwb3J0L2JhdGNoJylcclxuLy/mmK/lkKbmmK/nrKzkuInmlrnnmoTljZXkuKrkuIvovb1cclxuZXhwb3J0IGNvbnN0IElTX1RISURSRCA9IH5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2R1bycpXHJcblN0cmluZy5wcm90b3R5cGUuc3Vic3RpdHV0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PSAnb2JqZWN0Jykge1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXFx7KFtee31dKylcXH0vZywgZnVuY3Rpb24obWF0Y2gsIGtleSkge1xyXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW2tleV1cclxuICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyAnJyArIHZhbHVlIDogJydcclxuICAgIH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1peCguLi5taXhpbnMpIHtcclxuICBjbGFzcyBNaXgge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIGZvciAobGV0IG1peGluIG9mIG1peGlucykge1xyXG4gICAgICAgIGNvcHlQcm9wZXJ0aWVzKHRoaXMsIG5ldyBtaXhpbigpKSAvLyDmi7fotJ3lrp7kvovlsZ7mgKdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XHJcbiAgICBjb3B5UHJvcGVydGllcyhNaXgsIG1peGluKSAvLyDmi7fotJ3pnZnmgIHlsZ7mgKdcclxuICAgIGNvcHlQcm9wZXJ0aWVzKE1peC5wcm90b3R5cGUsIG1peGluLnByb3RvdHlwZSkgLy8g5ou36LSd5Y6f5Z6L5bGe5oCnXHJcbiAgfVxyXG5cclxuICByZXR1cm4gTWl4XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHRhcmdldCwgc291cmNlKSB7XHJcbiAgZm9yIChsZXQga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhzb3VyY2UpKSB7XHJcbiAgICBpZiAoa2V5ICE9PSAnY29uc3RydWN0b3InICYmIGtleSAhPT0gJ3Byb3RvdHlwZScgJiYga2V5ICE9PSAnbmFtZScpIHtcclxuICAgICAgbGV0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KVxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaW1wbGVDb3B5KG9iaikge1xyXG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbn1cclxuXHJcbmV4cG9ydCB7IG1peCwgc2ltcGxlQ29weSB9XHJcblxyXG4iLCJsZXQgZG9tYWluID0gJydcclxubGV0IHRva2VuID0gJydcclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XHJcbiAgZG9tYWluID0gJ2h0dHA6Ly96c3lhczIudGVzdGluZy54dWVwaW5nLmNvbSdcclxuXHJcblxyXG5cclxuICB0b2tlbiA9XHJcbiAgICAnL3VzZXJuYW1lL3poYW5neGl1eGl1L3RpbWUvMTY4MDA1ODEzOS9zaWcvOTYxNzExZGMyODJhZTA0MDMyMDc1OTkwNzM3NDMzMDIvc2Vzc2lvbmlkL3Nlc3Npb25fNzdkOTE5ZDY1YWQ4NjkzN2FkYjRhNGQ1YzlhOTcwZjEnXHJcbiAgLy8gdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS9kYW5pZS90aW1lLzE1NzIyNDA2MjYvc2lnLzNhOTJiOGUzNTlkN2EyZmQ4Zjk0MzUyMzJjZjliMDAwL3Nlc3Npb25pZC9zZXNzaW9uXzI1MTFkNzNmMTA3YjcwODA0OWM0NTUwYWY4YWU3YzFkJ1xyXG4gIC8vXHJcbiAgLy8gdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS96ZW5neXVxdW4vdGltZS8xNTc1MjU1NTIwL3NpZy8yMDg0ZWUyYjBlZjJkODUyMDgxZjM5OTFiOGJjZTFmNC9zZXNzaW9uaWQvc2Vzc2lvbl85OTQ3Yjk4ZDA5MmY0NjFmMjg1ZThlZDQ3OGZlZTIxYSdcclxuICAvLyAgIC8v6KKB5by6XHJcbiAgLy8gICB0b2tlbiA9XHJcbiAgLy8gICAnL3VzZXJuYW1lLzM4NjUwMDAvdGltZS8xNTc0MzIzNDUyL3NpZy9lZTIzZmQ5NDk0NDdmODZiZWM3YzZhYjBiY2Y3YjE3Yi9zZXNzaW9uaWQvc2Vzc2lvbl8zZDQ0Y2U4YWQyZTY5OTcyYmY2YzJmZGUxNDVmMzRlNidcclxuICAvL1xyXG4gIC8vICAgdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS8zODUzMDAyL3RpbWUvMTU3Njc0MjM4My9zaWcvMjRkYThkMmQ3ZmZmMmYwYWNhNmE3Njg1NjNlMGIwYmQvc2Vzc2lvbmlkL3Nlc3Npb25fOTFjOGI5MTFmNmM2OWIwNDAzZmVkYWE2ZGI5MDYxYzknXHJcbiAgLy8gICAgLy9wZW5nIGN1aSAg5b2t57+gXHJcbiAgLy8gICAgdG9rZW4gPSAnL3VzZXJuYW1lL3BjMDAyL3RpbWUvMTU2NzQ5OTkwOC9zaWcvN2Q5Y2EzZDQwYjc0MjJiNzU5Y2U5YTdlMDhiMmRlMjAvc2Vzc2lvbmlkL3Nlc3Npb25fOTM0ODJmNmNmMWM4NjViN2EyZTI3OTNjNjZmMmM1OTUnXHJcbiAgLy8gICAgdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS94bGwvdGltZS8xNTcwNzU5NDQ0L3NpZy8xZTVlN2QwYTI5N2NmZDk3ZDY5OThkM2EyOTdhZjliMy9zZXNzaW9uaWQvc2Vzc2lvbl9iNTY5OWM3NzVmM2Q3NzBhYjI4YjRiYmExZTU4ZTViMSdcclxuXHJcblxyXG5cclxuICB3aW5kb3cuaGdjX2xheWVyID0ge1xyXG4gICAgYWxlcnQ6IGZ1bmN0aW9uKG1zZykge1xyXG4gICAgICB3aW5kb3cuYWxlcnQobXNnKVxyXG4gICAgfSxcclxuICAgIG9wZW46IGZ1bmN0aW9uKCkge30sXHJcbiAgICBjbG9zZUFsbDogZnVuY3Rpb24oKSB7fSxcclxuICAgIG1zZzogZnVuY3Rpb24oKSB7fVxyXG4gIH1cclxufSBlbHNlIHtcclxuICB3aW5kb3cuaGdjX2xheWVyID0gbGF5ZXJcclxufVxyXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0J1xyXG5pbXBvcnQgeyBJU19USElEUkQgfSBmcm9tICcuL3V0aWxzJ1xyXG5jbGFzcyBBcGkge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5nZXRTY29yZVBhcnRBcGkgPSBkb21haW4gKyAnL2luZGV4LnBocC9leHBvcnQvR2V0U2VjdGlvbicgKyB0b2tlblxyXG5cclxuICAgIHRoaXMuZ2V0RXhhbUNsYXNzQXBpID0gZG9tYWluICsgJy9pbmRleC5waHAvZXhwb3J0L2dldEV4YW1DbGFzcycgKyB0b2tlblxyXG5cclxuICAgIHRoaXMuZ2V0RG93bmxvYWRQcm9ncmVzc0FwaSA9ICAgXHJcbiAgICAgIGRvbWFpbiArICcvaW5kZXgucGhwL2V4cG9ydC9kb3dubG9hZFByb2dyZXNzJyArIHRva2VuXHJcblxyXG4gICAgdGhpcy5kZWxUYXNrQXBpID0gZG9tYWluICsgJy9pbmRleC5waHAvZXhwb3J0L2RlbGV0ZVRhc2snICsgdG9rZW5cclxuXHJcbiAgICB0aGlzLmRvd25Mb2FkVGVhY2hlclVybCA9IGRvbWFpbiArICcvZXhwb3J0L2Rvd25fbG9hZD9leGFtSWQ9J1xyXG5cclxuICAgIHRoaXMuZG93bkxvYWRFcnJvclRlblVybCA9IGRvbWFpbiArICcvZXhwb3J0L2Rvd25sb2FkP2V4YW1faWQ9J1xyXG5cclxuICAgIHRoaXMuYmF0Y2hEb3duTG9hZEFwaSA9IGRvbWFpbiArICcvaW5kZXgucGhwL2V4cG9ydC9wdXNoVGFzaycgKyB0b2tlblxyXG5cclxuICAgIHRoaXMuc2luZ2xlRG93bkxvYWRBcGkgPSBkb21haW4gKyAnL2luZGV4LnBocC9leHBvcnQvYWpheF9kb3duJyArIHRva2VuXHJcblxyXG4gICAgdGhpcy5qdWRnZVRlYWNoZXJGb3JTdWJqZWN0OCA9IGRvbWFpbiArICcvdGVhY2hpbmcvaW5kZXgnICsgdG9rZW5cclxuICAgIHRoaXMuanVkZ2VUZWFjaGVyRm9yU3ViamVjdE90aGVyID0gZG9tYWluICsgJy9leHBvcnQvYWNhZGVtaWNyJyArIHRva2VuXHJcbiAgfVxyXG4gIGdldFNjb3JlUGFydChleGFtSWQpIHtcclxuICAgIHJldHVybiByZXF1ZXN0KHtcclxuICAgICAgdXJsOiB0aGlzLmdldFNjb3JlUGFydEFwaSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGV4YW1faWQ6IGV4YW1JZFxyXG4gICAgICB9LFxyXG4gICAgICBtZXRob2Q6ICdQT1NUJ1xyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0RXhhbUNsYXNzKGV4YW1JZCkge1xyXG4gICAgcmV0dXJuIHJlcXVlc3Qoe1xyXG4gICAgICB1cmw6IHRoaXMuZ2V0RXhhbUNsYXNzQXBpLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaXNUaGlyZDogMCxcclxuICAgICAgICBleGFtR3JvdXBJZDogZXhhbUlkXHJcbiAgICAgIH0sXHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnXHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXREb3dubG9hZFByb2dyZXNzKHBhcmFtcykge1xyXG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9XHJcbiAgICBwYXJhbXMucGFnZUxpbWl0ID0gMTBcclxuICAgIGNvbnNvbGUubG9nKHBhcmFtcylcclxuICAgIHJldHVybiByZXF1ZXN0KHtcclxuICAgICAgdXJsOiB0aGlzLmdldERvd25sb2FkUHJvZ3Jlc3NBcGksXHJcbiAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgbWV0aG9kOiAnUE9TVCdcclxuICAgIH0pXHJcbiAgfVxyXG4gIGRlbFRhc2socGFyYW1zKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdCh7XHJcbiAgICAgIHVybDogdGhpcy5kZWxUYXNrQXBpLFxyXG4gICAgICBkYXRhOiBwYXJhbXMsXHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnXHJcbiAgICB9KVxyXG4gIH1cclxuICBkb3duTG9hZFRlYWNoZXIoZXhhbUlkKSB7XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5kb3duTG9hZFRlYWNoZXJVcmwgKyBleGFtSWRcclxuICB9XHJcbiAgZG93bkxvYWRFcnJvclRlbihleGFtSWQpIHtcclxuICAgIGxvY2F0aW9uLmhyZWYgPSB0aGlzLmRvd25Mb2FkRXJyb3JUZW5VcmwgKyBleGFtSWRcclxuICB9XHJcbiAgYmF0Y2hEb3duTG9hZChwYXJhbXMpIHtcclxuICAgIHJldHVybiByZXF1ZXN0KHtcclxuICAgICAgdXJsOiB0aGlzLmJhdGNoRG93bkxvYWRBcGksXHJcbiAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgbWV0aG9kOiAnUE9TVCdcclxuICAgIH0pXHJcbiAgfVxyXG4gIHNpbmdsZURvd25Mb2FkKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHJlcXVlc3Qoe1xyXG4gICAgICB1cmw6IHRoaXMuc2luZ2xlRG93bkxvYWRBcGksXHJcbiAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgbWV0aG9kOiAnUE9TVCdcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vIOaVmeWtpuWuneaYr+WQpuWPr+S7peS4i+i9vVxyXG4gIGp1ZGdlVGVhY2hlckRvd25Mb2FkKHBhcmFtcykge1xyXG4gICAgbGV0IHsgY2xhc3NJZCwgZXhhbUlkLCBzdWJqZWN0SWQgfSA9IHBhcmFtc1xyXG4gICAgbGV0IHVybCA9IHRoaXMuanVkZ2VUZWFjaGVyRm9yU3ViamVjdE90aGVyXHJcbiAgICAvL+aJuemHj+S4i+i9veeahOaXtuWAmei/h+a7pOadoeS7tuS4jeWQjFxyXG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnMgPSBJU19USElEUkQgPyAnOCw5LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5JyA6ICc4J1xyXG4gICAgaWYgKH5maWx0ZXJDb25kaXRpb25zLmluZGV4T2Yoc3ViamVjdElkKSkge1xyXG4gICAgICB1cmwgPSB0aGlzLmp1ZGdlVGVhY2hlckZvclN1YmplY3Q4XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVxdWVzdCh7XHJcbiAgICAgIHVybDogdXJsLFxyXG4gICAgICBkYXRhOiB7IGNsYXNzSWQsIGV4YW1JZCB9LFxyXG4gICAgICBtZXRob2Q6ICdHRVQnXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXBpXHJcbiIsIi8v5aSN6YCJXHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSdcclxuY2xhc3MgQ2hlY2tCb3hJdGVtIHtcclxuICBjb25zdHJ1Y3RvcigkY2hlY2tCb3gsIGFsbEZuLCBzaW5nbGVGbikge1xyXG4gICAgdGhpcy5hbGxGbiA9IGFsbEZuIHx8IGZ1bmN0aW9uKCkge31cclxuICAgIHRoaXMuc2luZ2xlRm4gPSBzaW5nbGVGbiB8fCBmdW5jdGlvbigpIHt9XHJcbiAgICB0aGlzLiRjaGVjQm94ID0gJGNoZWNrQm94XHJcbiAgICAvL+mZpOS6hiDlhajpgIkg56aB55So5oyJ6ZKu5Lul5aSW55qE5YW25LuW5oyJ6ZKu55qE6ZuG5ZCIXHJcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLiRjaGVjQm94LmZpbmQoXHJcbiAgICAgICcuaF9jaGVja0l0ZW06bm90KFwiLmNoZWNrQWxsXCIpOm5vdChcIi5kaXNhYmxlZFwiKSdcclxuICAgICkubGVuZ3RoXHJcbiAgICB0aGlzLmNoZWNrZWRJdGVtc0NvdW50ID0gMFxyXG4gICAgdGhpcy5iaW5kRXZlbnQoKVxyXG4gIH1cclxuICBiaW5kRXZlbnQoKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgdGhpcy4kY2hlY0JveC5vbignY2xpY2snLCAnLmhfY2hlY2tJdGVtJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgIGxldCBpc0Rpc2FibGVkID0gJCh0aGlzKS5oYXNDbGFzcygnZGlzYWJsZWQnKVxyXG4gICAgICBsZXQgaXNOb3RTZWwgPSAkKHRoaXMpLmhhc0NsYXNzKCdub3RTZWwnKVxyXG4gICAgICBsZXQgaXNDaGVja2VkID0gJCh0aGlzKS5oYXNDbGFzcygnY2hlY2tlZCcpXHJcbiAgICAgIGxldCBpc0NoZWNrQWxsRWwgPSAkKHRoaXMpLmhhc0NsYXNzKCdjaGVja0FsbCcpXHJcbiAgICAgIGlmIChpc0Rpc2FibGVkIHx8IGlzTm90U2VsKSByZXR1cm5cclxuICAgICAgJCh0aGlzKVtpc0NoZWNrZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2NoZWNrZWQnKVxyXG4gICAgICBpZiAoaXNDaGVja0FsbEVsKSB7XHJcbiAgICAgICAgbGV0IGNoZWNrSXRlbXMgPSAkKHRoaXMpLnNpYmxpbmdzKCcuaF9jaGVja0l0ZW0nKVxyXG4gICAgICAgIGNoZWNrSXRlbXNbaXNDaGVja2VkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKCdjaGVja2VkJylcclxuICAgICAgICBzZWxmLmNoZWNrZWRJdGVtc0NvdW50ID0gaXNDaGVja2VkID8gMCA6IGNoZWNrSXRlbXMubGVuZ3RoXHJcbiAgICAgICAgc2VsZi5hbGxGbigkKHRoaXMpLCAhaXNDaGVja2VkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjaGVja0FsbCA9ICQodGhpcykuc2libGluZ3MoJy5jaGVja0FsbCcpXHJcbiAgICAgICAgIWlzQ2hlY2tlZCA/IHNlbGYuY2hlY2tlZEl0ZW1zQ291bnQrKyA6IHNlbGYuY2hlY2tlZEl0ZW1zQ291bnQtLVxyXG4gICAgICAgIGxldCBpc0NoZWNrQWxsU3RhdHVzID0gc2VsZi5jaGVja2VkSXRlbXNDb3VudCA+PSBzZWxmLnRvdGFsQ291bnRcclxuICAgICAgICBjaGVja0FsbFtpc0NoZWNrQWxsU3RhdHVzID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKCdjaGVja2VkJylcclxuICAgICAgICBzZWxmLnNpbmdsZUZuKCQodGhpcyksICFpc0NoZWNrZWQpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbi8vIOWNlemAiVxyXG5jbGFzcyBSYWRpb0JveEl0ZW0ge1xyXG4gIGNvbnN0cnVjdG9yKCRyYWRpb0JveCwgZm4pIHtcclxuICAgIHRoaXMuJHJhZGlvQm94ID0gJHJhZGlvQm94XHJcbiAgICB0aGlzLmNiID0gZm5cclxuXHJcbiAgICB0aGlzLmJpbmRFdmVudCgpXHJcbiAgfVxyXG4gIGJpbmRFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICB0aGlzLiRyYWRpb0JveC5vbignY2xpY2snLCAnLmhfcmFkaW9JdGVtJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgIGxldCBpc05vdFNlbCA9ICQodGhpcykuaGFzQ2xhc3MoJ25vdFNlbCcpXHJcbiAgICAgIGlmIChpc05vdFNlbCkgcmV0dXJuXHJcbiAgICAgICQodGhpcylcclxuICAgICAgICAuYWRkQ2xhc3MoJ2NoZWNrZWQnKVxyXG4gICAgICAgIC5zaWJsaW5ncygnLmhfcmFkaW9JdGVtJylcclxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKVxyXG4gICAgICBzZWxmLmNiICYmIHNlbGYuY2IoJCh0aGlzKSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbi8vIOWIh+aNolxyXG5jbGFzcyBTd2l0Y2gge1xyXG4gIGNvbnN0cnVjdG9yKCRzd2l0Y2gsIGZuLCBkZWZhdWx0c3RhdHVzKSB7XHJcbiAgICB0aGlzLiRzd2l0Y2ggPSAkc3dpdGNoXHJcbiAgICB0aGlzLnN0YXR1cyA9IGRlZmF1bHRzdGF0dXMgfHwgZmFsc2VcclxuICAgIHRoaXMuY2IgPSBmbiB8fCBmdW5jdGlvbigpIHt9XHJcbiAgICB0aGlzLmJpbmRFdmVudCgpXHJcbiAgfVxyXG4gIGJpbmRFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICB0aGlzLiRzd2l0Y2guY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ29wZW4nKVxyXG4gICAgICBzZWxmLnN0YXR1cyA9ICFzZWxmLnN0YXR1c1xyXG4gICAgICBzZWxmLmNiICYmIHNlbGYuY2Ioc2VsZi5zdGF0dXMpXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHsgQ2hlY2tCb3hJdGVtLCBSYWRpb0JveEl0ZW0sIFN3aXRjaCB9XHJcblxyXG4iLCJjb25zdCBkb3duTG9hZFNldHRpbmdNb2R1bGVUcGwgPSBgPGRpdiBpZD1cImhnY19yZXBvcnRCb3hcIj5cclxuPGRpdiBjbGFzcz1cImhnY19yZXBvcnRcIj5cclxuICAgIDxoMiBjbGFzcz1cInRpdGxlXCI+5LiL6L295oql6KGoIDxpIGNsYXNzPVwiaGNsb3NlXCI+WDwvaT48L2gyPlxyXG4gICAgPGRpdiBjbGFzcz1cInNldHRpbmdcIiBpZD1cInNldHRpbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbSB7aXNTaW5nbGV9XCI+XHJcbiAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+5LiL6L295a+56LGhOjwvZW0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZG93bkxvYWRPYmplY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ3b3JkIGN1cnJlbnRcIiBkYXRhLWlkPVwiMVwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZXhjZWxcIiBkYXRhLWlkPVwiMlwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fuc2VsT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbVwiIGlkPVwicmVwb3J0Q29udGVudE9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVwib3B0aW9uVGl0bGVcIj7miqXooajlhoXlrrk6PC9lbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrQm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydEl0ZW0gaGlkZVwiIGlkPVwiZXhhbUNsYXNzQm94XCI+XHJcbiAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+6ICD6K+V54+t57qnOjwvZW0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25Mb2FkIGNhbkRvd25Mb2FkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0YWdcIj7lj6/kuIvovb08L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tCb3hcIiBpZD1cImNhbkRvd25Mb2FkRXhhbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bkxvYWQgbm9Eb3duTG9hZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGFnXCI+5LiN5Y+v5LiL6L29PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrQm94XCIgaWQ9XCJub0Rvd25Mb2FkRXhhbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW5zZWxPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBvcnRJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJvcHRpb25UaXRsZVwiPjwvZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc0NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3R5bGVDaGFuZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXAgZG93blwiPueJiOW8j+WIh+aNojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtc2ctdGV4dCBvcHRpb25zLXdvcmRcIiA+5rOo77ya6aKY5Y+36LaF6L+HNTDpopjnmoTogIPor5Xku4Xog73mlK/mjIHpopjlnovniYg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHlsZUJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0U3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+PHNwYW4+54+t57qn5a2m55Sf5oiQ57up5YiG5p6Q6KGoPC9zcGFuPjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYW5nZUJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0JveFwiIGlkPVwiYWNoaWV2ZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBjaGVja2VkXCIgZGF0YS1uYW1lPVwiaXNTaW1wbGVDbGF6ekFjaGlldmVtZW50XCIgZGF0YS1zdGF0dXM9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrozmlbTniYg8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW0gXCIgZGF0YS1uYW1lPVwiaXNTaW1wbGVDbGF6ekFjaGlldmVtZW50XCIgZGF0YS1zdGF0dXM9XCIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT48c3BhbiBjbGFzcz1cIm9wdGlvbnMtd29yZFwiPumimOWei+eJiDwvc3Bhbj48c3BhbiBjbGFzcz1cIm9wdGlvbnMtZXhjZWxcIj7nroDmmJPniYg8L3NwYW4+PC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvcHRpb25zLWV4Y2VsXCI+566A5piT54mI5LiN5o+Q5L6b6aKY55uu57uf6K6h44CB562U6ZSZ5Lq65pWw44CB6YCJ6aG557uf6K6h44CB57y66ICD5Lq65pWwPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm9wdGlvbnMtd29yZFwiPumimOWPt+i2hei/hzUw6aKY5pe25LuF6IO96YCJ5oup6aKY5Z6L54mI77yM6aKY5Z6L54mI5LiN5o+Q5L6b6aKY55uu57uf6K6h44CB562U6ZSZ5Lq65pWw44CBPGJyIC8+6YCJ6aG557uf6K6hPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnRTdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz48c3Bhbj7nj63nuqflubPlnYfliIbooag8L3NwYW4+PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhbmdlQm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvQm94XCIgaWQ9XCJhdmdTY29yZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9JdGVtIGNoZWNrZWRcIiBkYXRhLW5hbWU9XCJpc1NpbXBsZUNsYXp6QXZnU2NvcmVcIiBkYXRhLXN0YXR1cz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWujOaVtOeJiDwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBcIiBkYXRhLW5hbWU9XCJpc1NpbXBsZUNsYXp6QXZnU2NvcmVcIiBkYXRhLXN0YXR1cz1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPjxzcGFuIGNsYXNzPVwib3B0aW9ucy13b3JkXCI+6aKY5Z6L54mIPC9zcGFuPjxzcGFuIGNsYXNzPVwib3B0aW9ucy1leGNlbFwiPueugOaYk+eJiDwvc3Bhbj48L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm9wdGlvbnMtZXhjZWxcIj7nroDmmJPniYjkuI3mj5Dkvpvpopjnm67nu5/orqE8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwib3B0aW9ucy13b3JkXCI+6aKY5Y+36LaF6L+HNTDpopjml7bku4Xog73pgInmi6npopjlnovniYjvvIzpopjlnovniYjkuI3mj5Dkvpvpopjnm67nu5/orqE8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydFN0eWxlIGV4Y2VsT3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxzcGFuPuW5tOe6p+WtpueUn+aIkOe7qeWIhuaekOihqDwvc3Bhbj48L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFuZ2VCb3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9Cb3hcIiBpZD1cImdyYWRlQXZnU2NvcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBjaGVja2VkXCIgZGF0YS1uYW1lPVwiaXNTaW1wbGVHcmFkZUFjaGlldmVtZW50XCIgZGF0YS1zdGF0dXM9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrozmlbTniYg8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW0gXCIgZGF0YS1uYW1lPVwiaXNTaW1wbGVHcmFkZUFjaGlldmVtZW50XCIgZGF0YS1zdGF0dXM9XCIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT48c3BhbiBjbGFzcz1cIm9wdGlvbnMtd29yZFwiPumimOWei+eJiDwvc3Bhbj48c3BhbiBjbGFzcz1cIm9wdGlvbnMtZXhjZWxcIj7nroDmmJPniYg8L3NwYW4+PC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvcHRpb25zLWV4Y2VsXCI+566A5piT54mI5LiN5o+Q5L6b6aKY55uu57uf6K6h44CB562U6ZSZ5Lq65pWw44CB6YCJ6aG557uf6K6h44CB5YiG5pWw5q615Lq65pWwPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm9wdGlvbnMtd29yZFwiPumimOWPt+i2hei/hzUw6aKY5pe25LuF6IO96YCJ5oup6aKY5Z6L54mI77yM6aKY5Z6L54mI5LiN5o+Q5L6b6aKY55uu57uf6K6h44CB562U6ZSZ5Lq65pWw44CBPGJyIC8+6YCJ6aG557uf6K6h44CB5YiG5pWw5q615Lq65pWwPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnRTdHlsZSBleGNlbE9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYW5nZUJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrQm94XCIgaWQ9XCJzdWJqZWN0UmVwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7mlofnu7znkIbnu7zljZXnp5HmiJDnu6nmmI7nu4bmiqXooag8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD7vvIjnj63nuqflrabnlJ/miJDnu6nliIbmnpDooajjgIHnj63nuqflubPlnYfliIbooajjgIHlubTnuqflrabnlJ/miJDnu6nliIbmnpDooajvvIk8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBvcnRJdGVtXCIgaWQ9XCJzY29yZVBhcnRFbFwiPlxyXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVwib3B0aW9uVGl0bGVcIj7liIbmrrXorr7nva46PC9lbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY29yZVBhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0aXBzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7or6XliIbmrrXorr7nva7nlKjkuo7phY3nva7liIbmlbDmrrXkurrmlbDnu5/orqE8L3NwYW4+PHNwYW4+IDxpPuazqDo8L2k+IOWIhuauteWMheWQq+WPs+i+ueeVjOWAvDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NvcmVTZXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInNjb3Jlc1wiIGlkPVwic2NvcmVMaXN0XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG5zXCIgaWQ9XCJzY29yZU9wZXJhdG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQgaGJ0blwiPis8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWR1Y2UgaGJ0biBkaXNhYmxlZFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWwgaGJ0blwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydEl0ZW1cIiBpZD1cInNjb3JlRGlzcGxheVNldHRpbmdzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJvcHRpb25UaXRsZVwiPuaYvuekuuiuvue9rjo8L2VtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9Cb3hcIiBpZD1cInN0dWRlbnRBY2hpZXZlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW0gY2hlY2tlZFwiIGRhdGEtbmFtZT1cInNjb3JlT2ZFYWNoUXVlc3Rpb25cIiBkYXRhLXN0YXR1cz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+5a2m55Sf562U5qGIPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbVwiIGRhdGEtbmFtZT1cInNjb3JlT2ZFYWNoUXVlc3Rpb25cIiBkYXRhLXN0YXR1cz1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+5a2m55Sf5b6X5YiGPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICM5OTk7XCI+77yI5a2m55Sf5oiQ57up5YiG5p6Q6KGo5qC55o2u6K6+572u5pi+56S677yJPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVwib3B0aW9uVGl0bGVcIj7mgLvliIbns7vmlbA6PC9lbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbFNjb3JlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3N3aXRjaFwiIGlkPVwic3dpdGNoLXRvdGFsLXNjb3JlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZGlzYWJsZWRcIiBkaXNhYmxlZCB2YWx1ZT1cIjEuMjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+5ZCv55So57O75pWw5ZCO77yM5Lya5Y+m5aSW5o+Q5L6b5o2i566X5ZCO55qE5oC75YiG5oiQ57up77yI5Y6f5aeL5oC75YiGw5fns7vmlbDvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJudW1iZXItdHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cImNvbnRhY3RDaG9pY2UxXCIgbmFtZT1cInJldGFpblwiIHZhbHVlPVwiMVwiIGNoZWNrZWQgZGlzYWJsZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvbnRhY3RDaG9pY2UxXCI+5L+d55WZ5bCP5pWwPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJjb250YWN0Q2hvaWNlMlwiIG5hbWU9XCJyZXRhaW5cIiB2YWx1ZT1cIjBcIiAgZGlzYWJsZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvbnRhY3RDaG9pY2UyXCI+5L+d55WZ5pW05pWwPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydEl0ZW1cIiBpZD1cInBhcGVyU2l6ZVNldHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+57q45byg6K6+572uOjwvZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc0NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW0gY2hlY2tlZFwiIGRhdGEtbmFtZT1cInBhcGVyU2l6ZVR5cGVcIiBkYXRhLXN0YXR1cz1cIjFcIiBpZD1cImhhc1hhNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT5BNOaoquWQkTwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW1cIiBkYXRhLW5hbWU9XCJwYXBlclNpemVUeXBlXCIgZGF0YS1zdGF0dXM9XCIyXCIgaWQ9XCJoYXNZYTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+QTPnurXlkJE8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9JdGVtXCIgZGF0YS1uYW1lPVwicGFwZXJTaXplVHlwZVwiIGRhdGEtc3RhdHVzPVwiM1wiIGlkPVwiaGFzWGEzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPkEz5qiq5ZCRPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICM5OTk7XCIgY2xhc3M9XCJwYXBlci10aXBzXCI+PGk+77yfPC9pPjxlbT7popjnm67mlbDotoXov4c0MOaXtum7mOiupOS4ukEz5qiq5ZCRPC9lbT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBvcnRJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJvcHRpb25UaXRsZVwiPuaOkuWQjeWNh+mZjTo8L2VtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsU2NvcmUgcmFua2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9zd2l0Y2hcIiBpZD1cInN3aXRjaC1yYW5raW5nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPuWQr+eUqOWQju+8jOS8muWcqOePree6p+aIkOe7qeWIhuaekOihqOS4reaYvuekuuePree6p+aOkuWQjeWNh+mZje+8jOW5tOe6p+aOkuWQjeWNh+mZjTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaGlnaFNldHRpbmdcIiBpZD1cImhpZ2hTZXR0aW5nXCI+PHNwYW4+6auY57qn6K6+572uPC9zcGFuPjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibm9zZXR0aW5nXCIgaWQ9XCJub3NldHRpbmdcIj4gPHNwYW4+PC9zcGFuPiA8c3Ryb25nPumUmemimOWJjeWNgeaXoOmcgOmFjee9ru+8jOebtOaOpeS4i+i9veWNs+WPrzwvc3Ryb25nPiA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlck9wdGlvbnNcIiBpZD1cImZpbHRlck9wdGlvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnRTdHlsZVwiPlxyXG4gICAgICAgICAgICA8aDM+PHNwYW4+5a2m55Sf5L+h5oGvPC9zcGFuPjwvaDM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFuZ2VCb3hcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrQm94XCIgaWQ9XCJzdHVkZW50c1NldHRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW0gY2hlY2tBbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lhajpgIk8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbSBjaGVja2VkIGRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+5a2m55Sf5aeT5ZCNPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW1cIiBkYXRhLW5hbWU9XCJoYXNTdHVkZW50U3lzdGVtQ2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuezu+e7n+WHhuiAg+ivgeWPtzwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtXCIgZGF0YS1uYW1lPVwiaGFzU3R1ZGVudFNjaG9vbENhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrabmoKHlh4bogIPor4Hlj7c8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiIGRhdGEtbmFtZT1cImhhc0lkTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+6Lqr5Lu96K+B5Y+3PC9lbT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW1cIiBkYXRhLW5hbWU9XCJoYXNTdHVkZW50Tm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrablj7c8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydFN0eWxlXCI+XHJcbiAgICAgICAgICAgIDxoMz48c3Bhbj7ov4fmu6TmnaHku7Y8L3NwYW4+PC9oMz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYW5nZUJveFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tCb3hcIiBpZD1cImZpbHRlclNldHRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW0gY2hlY2tBbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lhajpgIk8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbSAgXCIgZGF0YS1uYW1lPVwicmVtb3ZlT3V0ZXJTdHVkZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+5Y+q5pi+56S65Zyo57GN55SfPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW1cIiBkYXRhLW5hbWU9XCJyZW1vdmVaZXJvU3R1ZGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPui/h+a7pDDliIbogIPnlJ88L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydFN0eWxlXCI+XHJcbiAgICAgICAgICAgIDxoMz48c3Bhbj7ovr7nur/njoforr7nva48L3NwYW4+PC9oMz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYW5nZUJveCBjb21wbGlhbmNlUmF0ZVwiIGlkPVwiY29tcGxpYW5jZVJhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWRcIj4xMDAlPC9zcGFuPjxpPuKJpTwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPuS8mOengOeOhzwvc3Bhbj48aT7iiaU8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj48aW5wdXQgZGF0YS1uYW1lPVwiZXhjZWxsZW50UmF0aW9cIiBpZD1cImV4Y2VsbGVudFJhdGlvXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIjkwXCI+JTwvc3Bhbj48aT4+PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+6Imv5aW9546HPC9zcGFuPjxpPuKJpTwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPjxpbnB1dCBkYXRhLW5hbWU9XCJnb29kUmF0aW9cIiBpZD1cImdvb2RSYXRpb1wiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCI4MFwiPiU8L3NwYW4+PGk+PjwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPuS4reetieeOhzwvc3Bhbj48aT7iiaU8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj48aW5wdXQgZGF0YS1uYW1lPVwibWVkaXVtUmF0aW9cIiBpZD1cIm1lZGl1bVJhdGlvXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIjYwXCI+JTwvc3Bhbj48aT4+PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+5LiN5Y+K5qC8546HPC9zcGFuPjxpPuKJpTwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWRcIj4wJTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0aXBzXCI+PGkgY2xhc3M9XCJub3RpY2VcIj7ms6g6PC9pPiDkuIDmrKHphY3nva7kv53lrZjlkI7vvIzlkI7nu63kuIvovb3ku43msr/nlKjlvZPliY3phY3nva48L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdWJtaXRCdG5zIHNhdmVTZXR0aW5nQnRuIFwiIGlkPVwiaF9zYXZlU2V0dGluZ0J0blwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbnN1cmUgaGJ0blwiPuS/neWtmOW5tui/lOWbnjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW5jZWwgaGJ0blwiPuWPlua2iOW5tui/lOWbnjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3VibWl0QnRucyBzdWJtaXRCdG4gZmxleFwiIGlkPVwiaF9zdWJtaXRCdG5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW5zdXJlIGhidG5cIj7kuIvovb08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRlIGhidG5cIj7nlJ/miJA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsIGhidG5cIj7lj5bmtog8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+YFxyXG5cclxuY29uc3QgZG93bkxvYWRNb2R1bGVMaXN0VHBsID0gYDxkaXYgaWQ9XCJoZ2NfcmVwb3J0Qm94XCI+XHJcbjxkaXYgY2xhc3M9XCJoZ2NfcmVwb3J0XCI+XHJcbiAgICA8aDIgY2xhc3M9XCJ0aXRsZVwiPuS4i+i9vei/m+W6piA8aSBjbGFzcz1cImhjbG9zZVwiPlg8L2k+PC9oMj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVySXRlbVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj7lrabnp5HvvJo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJzdWJqZWN0RmlsdGVyXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlckl0ZW1cIj5cclxuICAgICAgICAgICAgPHNwYW4+54q25oCB77yaPC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGlkPVwic3RhdHVzRmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+5YWo6YOoPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPuacqueUn+aIkDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjJcIj7lt7LnlJ/miJA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzXCI+55Sf5oiQ5aSx6LSlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0JveCBkb3duTG9hZExpc3RcIiBpZD1cImRvd25Mb2FkTGlzdFwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwiaF9wYWdpbmF0aW9uXCIgY2xhc3M9XCJtLXN0eWxlIGgtcGFnaW5hdGlvblwiPjwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+YFxyXG5cclxuY29uc3QgZG93bkxvYWRTZXR0aW5nTW9kdWxlQ3JlYXRlID0gYDxkaXYgaWQ9XCJzY19jcmVhdGVCb3hcIj5cclxuPGRpdiBjbGFzcz1cInNjLXJlcG9ydFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzY19jbG9zZVwiPsOXPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjX2NvbnRlbnRcIj5cclxuICAgICAg5bey55Sf5oiQ77yM6K+36YCJ5oup5LiL5LiA5q2l5pON5L2c77yBXHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjX3N1Ym1pdEJ0bnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZSBoYnRuXCI+5omT5Y2wPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlbnN1cmUgaGJ0blwiPuS4i+i9vTwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+YFxyXG5leHBvcnQgeyBkb3duTG9hZFNldHRpbmdNb2R1bGVUcGwsIGRvd25Mb2FkTW9kdWxlTGlzdFRwbCxkb3duTG9hZFNldHRpbmdNb2R1bGVDcmVhdGUgfVxyXG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknXHJcbmltcG9ydCBBcGkgZnJvbSAnLi9hcGknXHJcbmltcG9ydCB7IENoZWNrQm94SXRlbSwgUmFkaW9Cb3hJdGVtLCBTd2l0Y2ggfSBmcm9tICcuL2NvbXBvbmVudCdcclxuaW1wb3J0ICcuL3BhZ2luYXRpb24nXHJcbmltcG9ydCAnLi9yZXBvcnQuc2NzcydcclxuaW1wb3J0IHsgZG93bkxvYWRNb2R1bGVMaXN0VHBsLCBkb3duTG9hZFNldHRpbmdNb2R1bGVUcGwgYXMgaHRtbFRwbCxkb3duTG9hZFNldHRpbmdNb2R1bGVDcmVhdGUgfSBmcm9tICcuL3RlbXBsYXRlJ1xyXG5pbXBvcnQgeyBJU19CQVRDSERPV05MT0FELCBJU19USElEUkQsIG1peCwgc2ltcGxlQ29weSB9IGZyb20gJy4vdXRpbHMnXHJcbmxldCBEb3duTG9hZE1vZGVsSW5zdGFuY2UgPSBudWxsXHJcbmxldCBEb3duTG9hZE1vZGVsTGlzdEluc3RhbmNlID0gbnVsbFxyXG5sZXQgRG93bkxvYWRVUkwgPSBudWxsXHJcbi8qKlxyXG4gKiDmlofmoaPkuIvovb3lvLnmoYbliIbkuLpcclxuICogMSDljZXmlofku7bkuIvovb1cclxuICogMiDmibnph4/kuIvovb1cclxuICog5ZKMIOOAkOWNleaWh+S7tuS4i+i9veOAkeebuOavlOOAkOaJuemHj+S4i+i9veOAkeWPquaYr+WkmuS6huOAkOePree6p+mAieaLqeOAkeeahOamguW/tVxyXG4gKiDph4zpnaLnmoTpq5jnuqforr7nva7mmK/kuIDmoLfnmoRcclxuICovXHJcblxyXG4gLyoqXHJcbiAq6K6/6Zeu5Zyw5Z2AIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MS8jL2V4cG9ydC9iYXRjaFxyXG4gKiovXHJcblxyXG5jbGFzcyBUcGxzIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZG93bkxvYWRUeXBlID0ge1xyXG4gICAgICB3b3JkOiAxLFxyXG4gICAgICBleGNlbDogMixcclxuICAgICAgdGVhY2hlcjogMyxcclxuICAgICAgZXJyb3I6IDRcclxuICAgIH1cclxuICAgIHRoaXMuY2hlY2tBbGxUcGwgPSBgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtIGNoZWNrQWxsXCI+XHJcbiAgICAgICAgICA8aT48L2k+PGVtPuWFqOmAiTwvZW0+XHJcbiAgICAgIDwvZGl2PmBcclxuICAgIHRoaXMucmVwb3J0Q29udGVudE9wdGlvblRwbCA9IGA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW1cIiBkYXRhLWlkPVwie2lkfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPntuYW1lfTwvZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgdGhpcy5zY29yZVBhcnRUcGwgPSBgPGxpIGNsYXNzPVwibnVtYmVyXCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJ7c2NvcmV9XCIgZGF0YS1pbmRleD1cIntpbmRleH1cIj48L2xpPlxyXG4gICAgPGxpIGNsYXNzPVwibGluZVwiPjwvbGk+YFxyXG4gICAgdGhpcy5zY29yZVBhcnRaZXJvVHBsID0gYDxsaSBjbGFzcz1cIm51bWJlciBsYXN0XCI+MDwvbGk+YFxyXG4gICAgdGhpcy5jYW5Eb3duTG9hZENsYXNzVHBsID0gYDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiIGRhdGEtaWQ9XCJ7aWR9XCI+XHJcbiAgICAgICAgICAgIDxpPjwvaT48ZW0+e2NsYXNzTmFtZX08L2VtPlxyXG4gICAgICAgIDwvZGl2PmBcclxuICAgIHRoaXMubm9Eb3duTG9hZENsYXNzVHBsID0gYDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbSBkaXNhYmxlZFwiPlxyXG4gICAgICAgIDxpPjwvaT48ZW0+e2NsYXNzTmFtZX08L2VtPlxyXG4gICAgPC9kaXY+YFxyXG4gICAgdGhpcy5kb3duTG9hZExpc3RJdGVtVHBsID0gYDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbSB7aXNEaXNhYmVsZH1cIiBkYXRhLWlkPVwie2lkfVwiPlxyXG4gICAgPGk+PC9pPlxyXG4gICAgPGRpdiBjbGFzcz1cImRvd25Mb2FkSW5mb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgIDxoMz57ZXhhbU5hbWV9PC9oMz5cclxuICAgICAgICAgICAgPHA+PHNwYW4+5a2m56eR77yae3N1YmplY3R9PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj7kuIvovb3lr7nosaHvvJp7ZG93bmxvYWROYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInR4dFwiPlxyXG4gICAgICAgICAgICAgICAge2NvbXBsZXRlZFN0YXR1c33vvJp7Y2xhc3NMZW5ndGh95Liq54+t57qnXHJcbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInRpcGJveFwiPntjbGFzc0xpc3R9PC9iPlxyXG4gICAgICAgICAgICAgIDwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0aXAge2lzSGlkZX1cIj5cclxuICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwidGlwYm94XCI+e2Vycm9yTXNnfTwvYj5cclxuICAgICAgICAgICAgICA8L3N0cm9uZz5cclxuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoYnRuc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1idG4gY3JlYXRlIHNpbmdsZUJ0biB7aXNEaXNhYmVsZH0ge2lzU2hvd31cIiAgZGF0YS1pZD1cIntpZH1cIiBkYXRhLXppcFVybD1cInt6aXBVcmx9XCI+5omT5Y2wPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWJ0biBzaW5nbGVCdG4ge2lzRGlzYWJlbGR9XCIgZGF0YS1pZD1cIntpZH1cIiBkYXRhLXppcFVybD1cInt6aXBVcmx9XCI+5LiL6L29PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWwgc2luZ2xlQnRuXCIgZGF0YS1pZD1cIntpZH1cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gXHJcbiAgICB0aGlzLmJhdGNoQ2hlY2tBbGxUcGwgPSBgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtIGNoZWNrQWxsXCI+XHJcbiAgICA8aT48L2k+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmF0Y2hCdG5zXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpY2Ugb3ByYXRvckJ0blwiPuWIoOmZpOmAieS4remhuTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gXHJcbiAgICB0aGlzLm5vdGFza1RwbCA9ICc8ZGl2IGNsYXNzPVwibm90YXNrXCI+5pqC5peg5LiL6L295Lu75YqhPC9kaXY+J1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgbWl4aW5zQ2xhc3MgPSBbVHBscywgQXBpXVxyXG4vL+aJuemHj+S4i+i9vVxyXG5jbGFzcyBCYXRjaERvd25Mb2FkIGV4dGVuZHMgbWl4KC4uLm1peGluc0NsYXNzKSB7XHJcbiAgY29uc3RydWN0b3IoZXhhbUlkKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmV4YW1JZCA9IGV4YW1JZFxyXG4gICAgLy/miYDmnInkuIvovb3lr7nosaHnj63nuqfnmoTpm4blkIhcclxuICAgIHRoaXMuYWxsQ2xhc3NMaXN0ID0gW11cclxuICAgIC8v5LiL6L295a+56LGh5a+55bqU54+t57qn6ZuG5ZCI55qE57yT5a2YXHJcbiAgICB0aGlzLmNhY2hlRXhhbVR5cGVGb3JDbGFzcyA9IHt9XHJcbiAgICAvL+W9k+WJjeS4i+i9veWvueixoeS4i+mdoiDpgInmi6nnmoTnj63nuqdcclxuICAgIHRoaXMuc2VsRXhhbUNsYXNzRGF0YSA9IFtdXHJcbiAgICAvL+W9k+WJjea4suafk+eahOePree6p+aVsOaNrlxyXG4gICAgLy93b3JkICBleGNlbCDmlZnlrablrp0g6ZSZ6aKY5YmN5Y2BIOWvueW6lOWPr+S4i+i9veeahOePree6p+mDveS4jeS4gOagt1xyXG4gICAgdGhpcy5jYW5Eb3duTG9hZEV4YW1MaXN0RGF0YSA9IFtdXHJcbiAgICB0aGlzLm5vRG93bkxvYWRFeGFtTGlzdERhdGEgPSBbXVxyXG4gIH1cclxuICBiYXRjaEluaXQoKSB7XHJcbiAgICB0aGlzLmluaXREb20oKVxyXG4gICAgdGhpcy5iaW5kRXZlbnQoKVxyXG4gICAgLy/mm7TmlrDplJnpopjliY3ljYEg5ZKM6K6y5qGI55qE6Zeu6aKYXHJcbiAgICAvL0lTX1RISURSRCAmJiB0aGlzLnN1YmplY3RJZCAhPSAnOCdcclxuICAgIGlmICghdGhpcy5pc01hdGhTdWJqZWN0KSB7XHJcbiAgICAgIC8v5pWZ5a2m5a6d5ZKM6ZSZ6aKY5YmN5Y2B5o+Q56S66Zeu6aKYXHJcbiAgICAgIHRoaXMuZG93bmxvYWRUeXBlVGV4dE5vdGljZSA9IHtcclxuICAgICAgICBbdGhpcy5kb3duTG9hZFR5cGUudGVhY2hlcl06ICfor6Xlrabnp5HmmoLkuI3mlK/mjIHmibnph4/kuIvovb3mlZnlrablrp0nLFxyXG4gICAgICAgIFt0aGlzLmRvd25Mb2FkVHlwZS5lcnJvcl06ICflvZPliY3np5Hnm67mmoLmnKrkuIrnur/plJnpopjliY3ljYEnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaW5pdERvbSgpIHtcclxuICAgICQoJyNleGFtQ2xhc3NCb3gnKS5yZW1vdmVDbGFzcygnaGlkZScpXHJcbiAgICB0aGlzLiRjYW5Eb3duTG9hZEV4YW0gPSAkKCcjY2FuRG93bkxvYWRFeGFtJylcclxuICAgIHRoaXMuJG5vRG93bkxvYWRFeGFtID0gJCgnI25vRG93bkxvYWRFeGFtJylcclxuICB9XHJcbiAgYXN5bmMgZ2V0RXhhbUNsYXNzTGlzdChjYikge1xyXG4gICAgLy8vL2NvbnNvbGUubG9nKHRoaXMuZXhhbUlkKVxyXG4gICAgY29uc3QgZXhhbUNsYXNzTGlzdCA9IGF3YWl0IHRoaXMuZ2V0RXhhbUNsYXNzKHRoaXMuZXhhbUlkKVxyXG4gICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZXhhbUNsYXNzTGlzdClcclxuICAgIHRoaXMuYWxsQ2xhc3NMaXN0ID0gcmVzdWx0LnN1Y2Nlc3MgPyByZXN1bHQuZGF0YS5jbGFzcyA6IFtdXHJcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcblxyXG4gICAgdGhpcy5pbml0U3RhdHVzRm9yRG93bmxhb2RUeXBlKHRoaXMuZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGUpXHJcbiAgICAvL3RoaXMudXBkYXRlUmVuZGVyRXhhbUxpc3REYXRhKCd3b3JkJylcclxuICAgIGlmKCFyZXN1bHQuZGF0YS5zY29yZVBhcnQpe1xyXG4gICAgICAkKCcjc2NvcmVQYXJ0RWwnKS5oaWRlKClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kb3duTG9hZERhdGEuc2NvcmVTZWN0aW9uID0gcmVzdWx0LmRhdGEuc2NvcmVQYXJ0LnNwbGljZShcclxuICAgICAgMCxcclxuICAgICAgcmVzdWx0LmRhdGEuc2NvcmVQYXJ0Lmxlbmd0aCAtIDFcclxuICAgIClcclxuICAgIGNiICYmIGNiKHJlc3VsdC5kYXRhLnNjb3JlUGFydClcclxuICB9XHJcbiAgdXBkYXRlUmVuZGVyRXhhbUxpc3REYXRhKGtleSkge1xyXG4gICAgdGhpcy5zZWxFeGFtQ2xhc3NEYXRhID0gW11cclxuICAgIGlmICh0aGlzLmNhY2hlRXhhbVR5cGVGb3JDbGFzc1trZXldKSB7XHJcbiAgICAgIHRoaXMuY2FuRG93bkxvYWRFeGFtTGlzdERhdGEgPSB0aGlzLmNhY2hlRXhhbVR5cGVGb3JDbGFzc1trZXldLmNhblxyXG4gICAgICB0aGlzLm5vRG93bkxvYWRFeGFtTGlzdERhdGEgPSB0aGlzLmNhY2hlRXhhbVR5cGVGb3JDbGFzc1trZXldLm5vXHJcbiAgICAgIHRoaXMucmVuZGVyRXhhbUxpc3QoKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBpc0V4Y2VsID0ga2V5ID09PSAnZXhjZWwnXHJcblxyXG4gICAgLy/nvJPlrZjlj6/ku6XkuIvovb3lkozkuI3lj6/kuIvovb3nmoRcclxuICAgIGNvbnN0IGNhY2hlRXhhbUl0ZW0gPSAodGhpcy5jYWNoZUV4YW1UeXBlRm9yQ2xhc3Nba2V5XSA9IHtcclxuICAgICAgY2FuOiBbXSxcclxuICAgICAgbm86IFtdXHJcbiAgICB9KVxyXG4gICAgLy/lpoLmnpzmsqHmnInlrozmiJDpmIXljbdcclxuICAgIHRoaXMuY2FuRG93bkxvYWRFeGFtTGlzdERhdGEgPSAgY2FjaGVFeGFtSXRlbS5jYW4gPSB0aGlzLmFsbENsYXNzTGlzdC5maWx0ZXIoXHJcbiAgICAgIHYgPT4gdltrZXldXHJcbiAgICApO1xyXG4gICAgdGhpcy5ub0Rvd25Mb2FkRXhhbUxpc3REYXRhID0gY2FjaGVFeGFtSXRlbS5ubyA9ICB0aGlzLmFsbENsYXNzTGlzdC5maWx0ZXIoXHJcbiAgICAgIHYgPT4gIXZba2V5XVxyXG4gICAgKVxyXG4gICAgdGhpcy5yZW5kZXJFeGFtTGlzdCgpXHJcbiAgfVxyXG4gIHJlbmRlckV4YW1MaXN0KCkge1xyXG4gICAgbGV0IGV4YW1DbGFzc0h0bWwgPSB0aGlzLmNhbkRvd25Mb2FkRXhhbUxpc3REYXRhLnJlZHVjZShcclxuICAgICAgKGV4YW1IdG1sLCBpdGVtKSA9PiB7XHJcbiAgICAgICAgZXhhbUh0bWwgKz0gdGhpcy5jYW5Eb3duTG9hZENsYXNzVHBsLnN1YnN0aXR1dGUoaXRlbSlcclxuICAgICAgICByZXR1cm4gZXhhbUh0bWxcclxuICAgICAgfSxcclxuICAgICAgJydcclxuICAgIClcclxuICAgIC8vLy9jb25zb2xlLmxvZyh0aGlzLm5vRG93bkxvYWRFeGFtTGlzdERhdGEpXHJcbiAgICBsZXQgZXhhbUNsYXNzSHRtbERpc2FibGVkID0gdGhpcy5ub0Rvd25Mb2FkRXhhbUxpc3REYXRhLnJlZHVjZShcclxuICAgICAgKGV4YW1IdG1sLCBpdGVtKSA9PiB7XHJcbiAgICAgICAgZXhhbUh0bWwgKz0gdGhpcy5ub0Rvd25Mb2FkQ2xhc3NUcGwuc3Vic3RpdHV0ZShpdGVtKVxyXG4gICAgICAgIHJldHVybiBleGFtSHRtbFxyXG4gICAgICB9LFxyXG4gICAgICAnJ1xyXG4gICAgKVxyXG4gICAgdGhpcy4kY2FuRG93bkxvYWRFeGFtLmh0bWwoXHJcbiAgICAgIGV4YW1DbGFzc0h0bWwgPyB0aGlzLmNoZWNrQWxsVHBsICsgZXhhbUNsYXNzSHRtbCA6ICfmmoLml6Dlj6/kuIvovb3nmoTnj63nuqcnXHJcbiAgICApXHJcbiAgICB0aGlzLiRub0Rvd25Mb2FkRXhhbS5odG1sKFxyXG4gICAgICBleGFtQ2xhc3NIdG1sRGlzYWJsZWQgPyBleGFtQ2xhc3NIdG1sRGlzYWJsZWQgOiAn5pqC5peg5LiN5Y+v5LiL6L2955qE54+t57qnJ1xyXG4gICAgKVxyXG4gICAgLy/ph43nva7lj6/ku6XpgInmi6nnmoTogIPor5Xnj63nuqfnmoTkuKrmlbDnrYnkv6Hmga9cclxuICAgIHRoaXMucmVzZXRDYW5Eb3duTG9hZENoZWNrQm94KClcclxuICB9XHJcbiAgcmVzZXRDYW5Eb3duTG9hZENoZWNrQm94KCkge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNhbkRvd25Mb2FkRXhhbUNoZWNrLCB7XHJcbiAgICAgIHRvdGFsQ291bnQ6IHRoaXMuY2FuRG93bkxvYWRFeGFtTGlzdERhdGEubGVuZ3RoLFxyXG4gICAgICBjaGVja2VkSXRlbXNDb3VudDogMFxyXG4gICAgfSlcclxuICB9XHJcbiAgYmluZEV2ZW50KCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgIHNlbGYuY2FuRG93bkxvYWRFeGFtQ2hlY2sgPSBuZXcgQ2hlY2tCb3hJdGVtKFxyXG4gICAgICBzZWxmLiRjYW5Eb3duTG9hZEV4YW0sXHJcbiAgICAgIGZ1bmN0aW9uKCRjaGVja0FsbEl0ZW0sIHN0YXR1cykge1xyXG4gICAgICAgIHNlbGYuc2VsRXhhbUNsYXNzRGF0YSA9IHN0YXR1c1xyXG4gICAgICAgICAgPyBzZWxmLmNhbkRvd25Mb2FkRXhhbUxpc3REYXRhLm1hcCh2ID0+ICh7XHJcbiAgICAgICAgICAgICAgaWQ6IHYuaWQsXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiB2LmNsYXNzTmFtZVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgIDogW11cclxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ+mAieaLqeeahOePree6pycsIHNlbGYuc2VsRXhhbUNsYXNzRGF0YSlcclxuICAgICAgfSxcclxuICAgICAgZnVuY3Rpb24oJGNoZWNrSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgICAgbGV0IGN1cklkID0gJGNoZWNrSXRlbS5hdHRyKCdkYXRhLWlkJylcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICBsZXQgY3VyRXhhbUNsYXNzID0gc2VsZi5jYW5Eb3duTG9hZEV4YW1MaXN0RGF0YS5maW5kKFxyXG4gICAgICAgICAgICB2ID0+IHYuaWQgPT0gY3VySWRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHNlbGYuc2VsRXhhbUNsYXNzRGF0YS5wdXNoKHNpbXBsZUNvcHkoY3VyRXhhbUNsYXNzKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGN1ckluZGV4ID0gc2VsZi5zZWxFeGFtQ2xhc3NEYXRhLmZpbmRJbmRleCh2ID0+IHYuaWQgPT0gY3VySWQpXHJcbiAgICAgICAgICBzZWxmLnNlbEV4YW1DbGFzc0RhdGEuc3BsaWNlKGN1ckluZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ+mAieaLqeeahOePree6pycsIHNlbGYuc2VsRXhhbUNsYXNzRGF0YSlcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxufVxyXG4vL+WIpOaWreaYr+WQpumcgOimgeaJuemHj+S4i+i9veeahOWKn+iDvVxyXG5pZiAoSVNfQkFUQ0hET1dOTE9BRCkge1xyXG4gIG1peGluc0NsYXNzLnB1c2goQmF0Y2hEb3duTG9hZClcclxufVxyXG4vL+S4i+i9veiuvue9ruW8ueahhlxyXG5jbGFzcyBEb3duTG9hZE1vZGVsIGV4dGVuZHMgbWl4KC4uLm1peGluc0NsYXNzKSB7XHJcbiAgY29uc3RydWN0b3Ioe2V4YW1JZCwgc3ViamVjdElkLCBjbGFzc0lkLCBkb3duTG9hZFR5cGUsY29tcGxldGV9KSB7XHJcbiAgICBzdXBlcihleGFtSWQpXHJcbiAgICB0aGlzLmV4YW1JZCA9IGV4YW1JZFxyXG4gICAgdGhpcy5zdWJqZWN0SWQgPSBzdWJqZWN0SWRcclxuICAgIHRoaXMuY2xhc3NJZCA9IGNsYXNzSWRcclxuICAgIC8v5Yik5pat5piv5ZCm5a6M5oiQ6ZiF5Y23IOacquWujOaIkOmYheWNt+WPquaciWV4Y2VsIOmHjOmdouOAkOmAieaLqeS9nOetlOaYjue7huihqOOAkeiDveS4i+i9vVxyXG4gICAgLy9cclxuICAgIHRoaXMuaXNDb21wbGV0ZSA9IElTX0JBVENIRE9XTkxPQUQ/dHJ1ZTpjb21wbGV0ZSA9PT0gJzEnXHJcblxyXG4gICAgLy/liKTmlq3mmK/lkKbmlofnu7znkIbnu7xcclxuICAgIHRoaXMuaXNXZW5MaUFsbCA9IFsnMTgnLCAnMTknXS5pbmNsdWRlcyh0aGlzLnN1YmplY3RJZClcclxuICAgIC8v5Yik5pat5piv5ZCm5pWw5a2m5a2m56eRXHJcbiAgICB0aGlzLmlzTWF0aFN1YmplY3QgPSBbJzMnLCAnNicsICc1MSddLmluY2x1ZGVzKHRoaXMuc3ViamVjdElkKVxyXG4gICAgLy/mlZnlrablrp3mmK/lkKblj6/ku6XkuIvovb1cclxuICAgIHRoaXMudGVhY2hlclRhbGtpbmdJc0Rvd25Mb2FkID0gZmFsc2VcclxuICAgIC8v6ZSZ6aKY5YmN5Y2B5piv5ZCm5Y+v5Lul5LiL6L29XHJcbiAgICB0aGlzLmVycm9yVGVuSXNEb3duTG9hZCA9IGZhbHNlXHJcbiAgICAvL+aVmeWtpuWuneWSjOmUmemimOWJjeWNgeaPkOekuumXrumimFxyXG4gICAgdGhpcy5kb3dubG9hZFR5cGVUZXh0Tm90aWNlID0ge1xyXG4gICAgICBbdGhpcy5kb3duTG9hZFR5cGUudGVhY2hlcl06ICfmlZnlrablrp3ml6DpnIDphY3nva7vvIznm7TmjqXkuIvovb3ljbPlj68nLFxyXG4gICAgICBbdGhpcy5kb3duTG9hZFR5cGUuZXJyb3JdOiB0aGlzLmlzTWF0aFN1YmplY3RcclxuICAgICAgICA/ICfplJnpopjliY3ljYHml6DpnIDphY3nva7vvIznm7TmjqXkuIvovb3ljbPlj68nXHJcbiAgICAgICAgOiAn5b2T5YmN56eR55uu5pqC5pyq5LiK57q/5pWZ5a2m5a6dJ1xyXG4gICAgfVxyXG5cclxuICAgIC8v5LiL6L296YCJ6aG55o+Q5Lqk5pWw5o2uXHJcbiAgICB0aGlzLmRvd25Mb2FkRGF0YSA9IHtcclxuICAgICAgLy8xIHdvcmQgMmV4Y2VsIDMg5pWZ5a2m5a6dIDQg6ZSZ6aKY5paH5qGjXHJcbiAgICAgIGRvd25sb2FkX3R5cGU6IGRvd25Mb2FkVHlwZSA/ICtkb3duTG9hZFR5cGUgOiB0aGlzLmlzQ29tcGxldGU/dGhpcy5kb3duTG9hZFR5cGUud29yZDoyLFxyXG4gICAgICAvL+aKpeihqOexu+Wei1xyXG4gICAgICByZXBvcnRUeXBlOiBbXSxcclxuICAgICAgLy/nj63nuqflrabnlJ/miJDnu6nliIbmnpDooagg566A5Y2V54mIL+WujOaVtOeJiFxyXG4gICAgICBpc1NpbXBsZUNsYXp6QWNoaWV2ZW1lbnQ6IDAsXHJcblxyXG4gICAgICAvL+ePree6p+W5s+Wdh+WIhuaVsOihqCDnroDljZXniYgv5a6M5pW054mIXHJcbiAgICAgIGlzU2ltcGxlQ2xhenpBdmdTY29yZTogMCxcclxuICAgICAgLy/lubTnuqfmiJDnu6nliIbmnpDooajnroDljZXniYgv5a6M5pW054mIXHJcbiAgICAgIGlzU2ltcGxlR3JhZGVBY2hpZXZlbWVudDogMCxcclxuICAgICAgLy/mmL7npLrorr7nva5cclxuICAgICAgc2NvcmVPZkVhY2hRdWVzdGlvbjowLFxyXG4gICAgICAvL+WIhuaVsOautVxyXG4gICAgICBzY29yZVNlY3Rpb246IFtdLFxyXG4gICAgICAvL+aAu+WIhuezu+aVsFxyXG4gICAgICB0b3RhbFNjb3JlQ29lZmZpY2llbnQ6IC0xLFxyXG4gICAgICAvL+e6uOW8oOexu+WeiyBBNDoxIEEzOjJcclxuICAgICAgcGFwZXJTaXplVHlwZToxXHJcbiAgICB9XHJcbiAgICAvL+mrmOe6p+iuvue9rlxyXG4gICAgdGhpcy5maXJzdEVudGVySGlnaFNldHRpbmcgPSB0cnVlXHJcbiAgICB0aGlzLmhpZ2hTZXR0aW5nRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoaWdoU2V0dGluZycpXHJcbiAgICAgID8gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGlnaFNldHRpbmcnKSlcclxuICAgICAgOiB7XHJcbiAgICAgICAgICAvL+ezu+e7n+WHhuiAg+ivgeWPt1xyXG4gICAgICAgICAgaGFzU3R1ZGVudFN5c3RlbUNhcmQ6IDAsXHJcbiAgICAgICAgICAvL+WtpuagoeWHhuiAg+ivgeWPt1xyXG4gICAgICAgICAgaGFzU3R1ZGVudFNjaG9vbENhcmQ6IDAsXHJcbiAgICAgICAgICAvL+i6q+S7veivgeWPt1xyXG4gICAgICAgICAgaGFzSWROdW1iZXI6IDAsXHJcbiAgICAgICAgICAvL+iAg+WPt1xyXG4gICAgICAgICAgaGFzU3R1ZGVudE5vOjAsXHJcbiAgICAgICAgICAvL+i/h+a7pOWkluexjeeUn1xyXG4gICAgICAgICAgcmVtb3ZlT3V0ZXJTdHVkZW50OiAwLFxyXG4gICAgICAgICAgLy8g6L+H5rukMOWIhlxyXG4gICAgICAgICAgcmVtb3ZlWmVyb1N0dWRlbnQ6IDAsXHJcbiAgICAgICAgICAvL+S8mOengOeOh1xyXG4gICAgICAgICAgZXhjZWxsZW50UmF0aW86IDAuOSxcclxuICAgICAgICAgIC8v6Imv5aW9546HXHJcbiAgICAgICAgICBnb29kUmF0aW86IDAuOCxcclxuICAgICAgICAgIC8v5Lit562J546HXHJcbiAgICAgICAgICBtZWRpdW1SYXRpbzogMC42XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC8v6ZKI5a+5d29yZCDlkowgZXhjZWwg55qE5LiL6L295YaF5a65XHJcbiAgICAvKipcclxuICAgICAqIENMQVpaX0FDSElFVkVNRU5UKDAsXCLnj63nuqflrabnlJ/miJDnu6nliIbmnpDooahcIiksXHJcbiAgICAgKiBDTEFaWl9BVkdfU0NPUkUoMSxcIuePree6p+W5s+Wdh+WIhuihqFwiKSxcclxuICAgICAqIFNUVURFTlRfQUNISUVWRU1FTlRfUkFOSygyLFwi5a2m55Sf5oiQ57up5o6S5ZCN6Lef6Liq6KGoXCIpLFxyXG4gICAgR1JBREVfQUNISUVWRU1FTlQoMyxcIuW5tOe6p+WtpueUn+aIkOe7qeWIhuaekOihqFwiKSxcclxuICAgIFNDT1JFX1NFQ1RJT04oNCxcIuePree6p+WIhuaVsOauteihqFwiKSxcclxuXHJcbiAgICBTVUJKRUNUX0FDSElFVkVNRU5UKDUsXCLlkITlrabnp5HmiJDnu6nliIbmnpDooahcIiksXHJcbiAgICBXRU5fTElfWk9OR19BQ0hJRVZFTUVOVF9ERVRBSUxTKDYsXCLmlofnu7znkIbnu7zljZXnp5HmiJDnu6nmmI7nu4bmiqXooahcIik7XHJcbiAgICAgKi9cclxuICAgIHRoaXMud29yZERvd25Mb2FkQ29udGVudE9wdGlvbnMgPSBbXHJcbiAgICAgIHsgbmFtZTogJ+ePree6p+WtpueUn+aIkOe7qeWIhuaekOihqCcsIGlkOiAwIH0sXHJcbiAgICAgIHsgbmFtZTogJ+ePree6p+W5s+Wdh+WIhuihqCcsIGlkOiAxIH0sXHJcbiAgICAgIHsgbmFtZTogJ+ePree6p+WIhuaVsOauteihqCcsIGlkOiA0IH1cclxuICAgIF1cclxuICAgIHRoaXMuZXhjZWxEb3duTG9hZENvbnRlbnRPcHRpb25zID0gW1xyXG4gICAgICAuLi50aGlzLndvcmREb3duTG9hZENvbnRlbnRPcHRpb25zLFxyXG4gICAgICB7IG5hbWU6ICflubTnuqflrabnlJ/miJDnu6nliIbmnpDooagnLCBpZDogMyB9LFxyXG4gICAgICB7IG5hbWU6ICflrabnlJ/miJDnu6nmjpLlkI3ot5/ouKrooagnLCBpZDogMiB9LFxyXG5cclxuICAgICAgeyBuYW1lOiAn5a2m55Sf5L2c562U5piO57uG6KGoJywgaWQ6IDcgfVxyXG4gICAgXVxyXG4gICAgLy8g5paH57u855CG57u854us5pyJ6YCJ6aG5XHJcbiAgICBpZiAodGhpcy5pc1dlbkxpQWxsKSB7XHJcbiAgICAgIHRoaXMuZXhjZWxEb3duTG9hZENvbnRlbnRPcHRpb25zLnNwbGljZSgxLCAwLCB7XHJcbiAgICAgICAgbmFtZTogJ+WQhOWtpuenkeaIkOe7qeWIhuaekOihqCcsXHJcbiAgICAgICAgaWQ6IDVcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlclJlcG9ydENvbnRlbnRPcHRpb25zID0gdGhpcy53b3JkRG93bkxvYWRDb250ZW50T3B0aW9uc1xyXG5cclxuICAgIHRoaXMuaW5pdHNEb20oKVxyXG5cclxuICAgIGlmIChJU19CQVRDSERPV05MT0FEKSB7XHJcbiAgICAgIHRoaXMuYmF0Y2hJbml0KClcclxuXHJcbiAgICAgIHRoaXMuZ2V0RXhhbUNsYXNzTGlzdCh0aGlzLnJlbmRlclNjb3JlUGFydC5iaW5kKHRoaXMpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRTY29yZURhdGEoKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZEV2ZW50cygpXHJcblxyXG4gICAgdGhpcy5yZW5kZXIoKVxyXG4gIH1cclxuICBhc3luYyBnZXRTY29yZURhdGEoKSB7XHJcbiAgICAvLyDliIbmrrVcclxuICAgIGNvbnN0IHNjb3JlUGFydERhdGEgPSBhd2FpdCB0aGlzLmdldFNjb3JlUGFydCh0aGlzLmV4YW1JZClcclxuXHJcbiAgICBjb25zdCByZXMgPSBKU09OLnBhcnNlKHNjb3JlUGFydERhdGEpXHJcblxyXG4gICAgdGhpcy5pbml0U3RhdHVzRm9yRG93bmxhb2RUeXBlKHRoaXMuZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGUpXHJcbiAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5pbml0RG93bmxvYWRUeXBlVGV4dE5vdGljZShyZXMuZG93bmxvYWRfcnVsZSlcclxuXHJcbiAgICAgIHRoaXMuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvbiA9IHJlcy5kYXRhLnNwbGljZSgwLCByZXMuZGF0YS5sZW5ndGggLSAxKVxyXG4gICAgICB0aGlzLnJlbmRlclNjb3JlUGFydCgpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGluaXREb3dubG9hZFR5cGVUZXh0Tm90aWNlKGRvd25sb2FkX3J1bGUpIHtcclxuICAgIGxldCB7XHJcbiAgICAgIGlzX2xlY3R1cmVfZG93bmxvYWQ6IGlzVGVhY2hlckRvd25Mb2FkLFxyXG4gICAgICBpc190b3B3Yl9kb3dubG9hZDogaXNFcnJvclRlbkRvd25Mb2FkLFxyXG4gICAgICBpc19sZWN0dXJlX2Rvd25sb2FkX21zZzogdGVhY2hlckRvd25Mb2FkTXNnLFxyXG4gICAgICBpc190b3B3Yl9kb3dubG9hZF9tc2c6IGVycm9yRG93bkxvYWRNc2dcclxuICAgIH0gPSBkb3dubG9hZF9ydWxlXHJcbiAgICAvLyAvL+mimOWPt+i2hei/hzUw6aKY5pe25LuF6IO96YCJ5oup6aKY5Z6L54mIXHJcbiAgICAvLyBpZih0aGlzLmRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlKXtcclxuICAgIC8vICAgY29uc29sZS5sb2coZG93bmxvYWRfcnVsZSw4OClcclxuICAgIC8vICAgJCgnI2FjaGlldmVtZW50JykuY2hpbGRyZW4oJy5oX3JhZGlvSXRlbScpLmVxKDApLmFkZENsYXNzKCdub3RTZWwnKVxyXG4gICAgLy8gICAkKCcjYXZnU2NvcmUnKS5jaGlsZHJlbignLmhfcmFkaW9JdGVtJykuZXEoMCkuYWRkQ2xhc3MoJ25vdFNlbCcpXHJcbiAgICAvLyAgICQoJyNncmFkZUF2Z1Njb3JlJykuY2hpbGRyZW4oJy5oX3JhZGlvSXRlbScpLmVxKDApLmFkZENsYXNzKCdub3RTZWwnKVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy50ZWFjaGVyVGFsa2luZ0lzRG93bkxvYWQgPSBpc1RlYWNoZXJEb3duTG9hZCA/IHRydWUgOiBmYWxzZVxyXG4gICAgaWYgKCFpc1RlYWNoZXJEb3duTG9hZCkge1xyXG4gICAgICB0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2VbXHJcbiAgICAgICAgdGhpcy5kb3duTG9hZFR5cGUudGVhY2hlclxyXG4gICAgICBdID0gdGVhY2hlckRvd25Mb2FkTXNnXHJcbiAgICAgICAgPyB0ZWFjaGVyRG93bkxvYWRNc2dcclxuICAgICAgICA6ICfmlZnlrablrp3ml6DpnIDphY3nva7vvIznm7TmjqXkuIvovb3ljbPlj68nXHJcbiAgICB9XHJcbiAgICB0aGlzLmVycm9yVGVuSXNEb3duTG9hZCA9IGlzRXJyb3JUZW5Eb3duTG9hZCA/IHRydWUgOiBmYWxzZVxyXG4gICAgaWYgKCFpc0Vycm9yVGVuRG93bkxvYWQpIHtcclxuICAgICAgdGhpcy5kb3dubG9hZFR5cGVUZXh0Tm90aWNlW3RoaXMuZG93bkxvYWRUeXBlLmVycm9yXSA9IGVycm9yRG93bkxvYWRNc2dcclxuICAgICAgICA/IElTX1RISURSRFxyXG4gICAgICAgICAgPyAn5b2T5YmN56eR55uu5pyq5LiK57q/6ZSZ6aKY5YmN5Y2BJ1xyXG4gICAgICAgICAgOiBlcnJvckRvd25Mb2FkTXNnXHJcbiAgICAgICAgOiAn6ZSZ6aKY5YmN5Y2B5peg6ZyA6YWN572u77yM55u05o6l5LiL6L295Y2z5Y+vJ1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0c0RvbSgpIHtcclxuICAgICQoJ2JvZHknKS5hcHBlbmQoICAvL0lTX0JBVENIRE9XTkxPQUQg5piv5ZCm5om56YePXHJcbiAgICAgIGh0bWxUcGwuc3Vic3RpdHV0ZSh7XHJcbiAgICAgICAgaXNTaW5nbGU6IElTX0JBVENIRE9XTkxPQUQgPyAnJyA6ICdoaWRlJ1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgLy8g5aaC5p6c5pivd29yZOaYvuekuumimOWei+eJiFxyXG4gICAgJCgnI2hfc3VibWl0QnRuIC5lbnN1cmUnKS5zaG93KClcclxuICAgIGlmKHRoaXMuZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGU9PTEpe1xyXG4gICAgICAkKCcjaF9zdWJtaXRCdG4gLmVuc3VyZScpLmhpZGUoKVxyXG4gICAgICAkKCcjaF9zdWJtaXRCdG4gLmNyZWF0ZScpLnNob3coKVxyXG4gICAgICAkKCcub3B0aW9ucy1leGNlbCcpLmhpZGUoKVxyXG4gICAgfWVsc2Uge1xyXG4gICAgICAkKCcub3B0aW9ucy13b3JkJykuaGlkZSgpXHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c5LiN5pivd29yZOaWueW8j+aJk+W8gO+8jOS4jeaYvuekuue6uOW8oOiuvue9rlxyXG4gICAgaWYodGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSAhPSAxKXtcclxuICAgICAgJCgnI3BhcGVyU2l6ZVNldHRpbmcnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WmguaenOayoeacieWujOaIkOmYheWNt++8jOmZpOS6hmV4Y2Vs5oql6KGo5YW25LuW5oql6KGo6YO95LiN6IO96YCJ5oupXHJcbiAgICBpZighdGhpcy5pc0NvbXBsZXRlKXtcclxuICAgICAgICAkKCcuZG93bkxvYWRPYmplY3QgbGknKS5hZGRDbGFzcygnZGlzYWJsZWQnKS5yZW1vdmVDbGFzcygnY3VycmVudCcpLmVxKDEpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpLmFkZENsYXNzKCdjdXJyZW50Jyk7XHJcbiAgICB9XHJcbiAgICAvL+WFiOmakOiXj2V4Y2VsIOmAiemhueaooeWdl1xyXG4gICAgJCgnLmV4Y2VsT3B0aW9uJykuaGlkZSgpXHJcbiAgICAvL+WIpOaWreaWh+e7vOeQhue7vOmAiemhueaYr+WQpuaYvuekulxyXG4gICAgaWYgKCF0aGlzLmlzV2VuTGlBbGwpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygkKCcuZXhjZWxPcHRpb24nKSlcclxuICAgICAgJCgnLmV4Y2VsT3B0aW9uJylcclxuICAgICAgICAuZXEoMSlcclxuICAgICAgICAucmVtb3ZlKClcclxuICAgIH1cclxuICAgIHRoaXMuJHJlcG9ydENvbnRlbnRPcHRpb25zID0gJCgnI3JlcG9ydENvbnRlbnRPcHRpb24gLmhfY2hlY2tCb3gnKVxyXG4gICAgLy/liIbmrrXns7vmlbBcclxuICAgIHRoaXMuJHRvdGFsU2NvcmVDb2VmZmljaWVudCA9ICQoJy50b3RhbFNjb3JlIGlucHV0JylcclxuICB9XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgdGhpcy5yZW5kZXJSZXBvcnRDb250ZW50T3B0aW9uKClcclxuXHJcbiAgICAvL+WIneWni+WMluS4i+i9veexu+Wei+mAiemhuVxyXG4gICAgLy90aGlzLmluaXRTdGF0dXNGb3JEb3dubGFvZFR5cGUodGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSlcclxuICB9XHJcbiAgLy/miqXooajlhoXlrrnpgInpoblcclxuICByZW5kZXJSZXBvcnRDb250ZW50T3B0aW9uKCkge1xyXG4gICAgLy9jb25zb2xlLmxvZygn5b2T5YmN6YCJ5oup55qE5oql6KGo57G75Z6LJywgdGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSlcclxuICAgIGNvbnN0IG9wdGlvbnMgPSAodGhpcy5yZW5kZXJSZXBvcnRDb250ZW50T3B0aW9ucyA9IChfdGhpcyA9PiB7XHJcbiAgICAgIGNvbnN0IGRvd25Mb2FkRGF0YSA9IF90aGlzLmRvd25Mb2FkRGF0YVxyXG4gICAgICBpZiAoficxfDInLmluZGV4T2YoZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlID09PSBfdGhpcy5kb3duTG9hZFR5cGUud29yZFxyXG4gICAgICAgICAgPyBfdGhpcy53b3JkRG93bkxvYWRDb250ZW50T3B0aW9uc1xyXG4gICAgICAgICAgOiBfdGhpcy5leGNlbERvd25Mb2FkQ29udGVudE9wdGlvbnNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gW11cclxuICAgICAgfVxyXG4gICAgfSkodGhpcykpXHJcbiAgICBsZXQgcmVwb3J0Q29udGVudE9wdGlvbkh0bWwgPSB0aGlzLmNoZWNrQWxsVHBsLnN1YnN0aXR1dGUoe1xyXG4gICAgICBuYW1lOiAncmVwb3J0Q29udGVudE9wdGlvbidcclxuICAgIH0pXHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIG9wdGlvbnMpIHtcclxuICAgICAgcmVwb3J0Q29udGVudE9wdGlvbkh0bWwgKz0gdGhpcy5yZXBvcnRDb250ZW50T3B0aW9uVHBsLnN1YnN0aXR1dGUoaXRlbSlcclxuICAgIH1cclxuXHJcbiAgICAkKCcjcmVwb3J0Q29udGVudE9wdGlvbicpW29wdGlvbnMubGVuZ3RoID8gJ3Nob3cnIDogJ2hpZGUnXSgpXHJcbiAgICB0aGlzLiRyZXBvcnRDb250ZW50T3B0aW9ucy5odG1sKHJlcG9ydENvbnRlbnRPcHRpb25IdG1sKVxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnJlcG9ydENvbnRlbnRDaGVjaywge1xyXG4gICAgICB0b3RhbENvdW50OiBvcHRpb25zLmxlbmd0aCxcclxuICAgICAgY2hlY2tlZEl0ZW1zQ291bnQ6IDBcclxuICAgIH0pXHJcbiAgICBpZih0aGlzLmlzQ29tcGxldGUpe1xyXG4gICAgICAgIHRoaXMuJHJlcG9ydENvbnRlbnRPcHRpb25zLmNoaWxkcmVuKCcuY2hlY2tBbGwnKS50cmlnZ2VyKCdjbGljaycpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLiRyZXBvcnRDb250ZW50T3B0aW9ucy5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgbGV0IGlkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWlkJylcclxuICAgICAgICAgICAgaWYoaWQgIT09ICc3Jyl7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdub3RTZWwnKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICQodGhpcykudHJpZ2dlcignY2xpY2snKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgLy/liIbmrrXorr7nva5cclxuICByZW5kZXJTY29yZVBhcnQoKSB7XHJcbiAgICBsZXQgc2NvcmVIdG1sID0gdGhpcy5kb3duTG9hZERhdGEuc2NvcmVTZWN0aW9uLnJlZHVjZShcclxuICAgICAgKHNjb3JlUGFydEh0bWwsIHNjb3JlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHNjb3JlUGFydEh0bWwgKz0gdGhpcy5zY29yZVBhcnRUcGwuc3Vic3RpdHV0ZSh7XHJcbiAgICAgICAgICBzY29yZTogc2NvcmUsXHJcbiAgICAgICAgICBpbmRleDogaW5kZXhcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBzY29yZVBhcnRIdG1sXHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApXHJcbiAgICAkKCcjc2NvcmVMaXN0JykuaHRtbChzY29yZUh0bWwgKyB0aGlzLnNjb3JlUGFydFplcm9UcGwpXHJcbiAgfVxyXG4gIHJlZHVjZVNjb3JlUGFydCgpIHtcclxuICAgIGxldCBzY29yZVNlY3Rpb24gPSB0aGlzLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb25cclxuICAgIGxldCBzY29yZVBhcnRMZW5ndGggPSBzY29yZVNlY3Rpb24ubGVuZ3RoXHJcbiAgICBpZiAoc2NvcmVQYXJ0TGVuZ3RoIDw9IDIpIHJldHVyblxyXG4gICAgdGhpcy5kb3duTG9hZERhdGEuc2NvcmVTZWN0aW9uID0gc2NvcmVTZWN0aW9uLnNwbGljZShcclxuICAgICAgMCxcclxuICAgICAgc2NvcmVTZWN0aW9uLmxlbmd0aCAtIDFcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnJlbmRlclNjb3JlUGFydCgpXHJcbiAgfVxyXG4gIGFkZFNjb3JlUGFydCgpIHtcclxuICAgIGxldCBzY29yZVNlY3Rpb24gPSB0aGlzLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb25cclxuICAgIGxldCBzY29yZVBhcnRMZW5ndGggPSBzY29yZVNlY3Rpb24ubGVuZ3RoXHJcbiAgICBpZiAoc2NvcmVQYXJ0TGVuZ3RoID49IDEwKSByZXR1cm5cclxuICAgIHNjb3JlU2VjdGlvbi5wdXNoKCcnKVxyXG4gICAgdGhpcy5yZW5kZXJTY29yZVBhcnQoKVxyXG4gIH1cclxuICBjbGVhclNjcm9lUGFydCgpIHtcclxuICAgIGxldCBzY29yZVNlY3Rpb24gPSB0aGlzLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb25cclxuICAgIHRoaXMuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvbiA9IHNjb3JlU2VjdGlvbi5tYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfSlcclxuICAgIHRoaXMucmVuZGVyU2NvcmVQYXJ0KClcclxuICB9XHJcbiAgYmluZEV2ZW50cygpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICBjb25zdCBkb3duTG9hZERhdGEgPSBzZWxmLmRvd25Mb2FkRGF0YVxyXG4gICAgbGV0IGRvd25Mb2FkVHlwZSA9IGRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlXHJcbiAgICAvL+aYr+WQpuWPqumAieaLqeS6humAieaLqeS9nOetlOaYjue7huihqFxyXG4gICAgbGV0IGhhc1JlcG9ydFR5cGU3ID0gZmFsc2U7XHJcbiAgICAvL+aKpeihqOWGheWuuemAiemhuVxyXG4gICAgc2VsZi5yZXBvcnRDb250ZW50Q2hlY2sgPSBuZXcgQ2hlY2tCb3hJdGVtKFxyXG4gICAgICBzZWxmLiRyZXBvcnRDb250ZW50T3B0aW9ucyxcclxuICAgICAgZnVuY3Rpb24oJGNoZWNrQWxsSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgICAgZG93bkxvYWREYXRhLnJlcG9ydFR5cGUgPSBzdGF0dXNcclxuICAgICAgICAgID8gc2VsZi5yZW5kZXJSZXBvcnRDb250ZW50T3B0aW9ucy5tYXAodiA9PiB2LmlkKVxyXG4gICAgICAgICAgOiBbXVxyXG5cclxuICAgICAgICBpZihJU19CQVRDSERPV05MT0FEICYmIGhhc1JlcG9ydFR5cGU3KXtcclxuICAgICAgICAgIGhhc1JlcG9ydFR5cGU3ID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgeyB3b3JkLCBleGNlbCwgdGVhY2hlciwgZXJyb3IgfSA9IHNlbGYuZG93bkxvYWRUeXBlXHJcbiAgICAgICAgICBsZXQgcmVwb3J0TmFtZU1hcCA9IHtcclxuICAgICAgICAgICAgW3dvcmRdOiAnd29yZCcsXHJcbiAgICAgICAgICAgIFtleGNlbF06ICdleGNlbCcsXHJcbiAgICAgICAgICAgIFt0ZWFjaGVyXTogJ3RlYWNoZXInLFxyXG4gICAgICAgICAgICBbZXJyb3JdOiAnZXJyb3InXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZWxmLnVwZGF0ZVJlbmRlckV4YW1MaXN0RGF0YShyZXBvcnROYW1lTWFwW2Rvd25Mb2FkVHlwZV0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCfmiqXooajlhoXlrrnpgInpobknLCBkb3duTG9hZERhdGEucmVwb3J0VHlwZSlcclxuICAgICAgfSxcclxuICAgICAgZnVuY3Rpb24oJGNoZWNrSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgICAgbGV0IGN1cklkID0gJGNoZWNrSXRlbS5hdHRyKCdkYXRhLWlkJylcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICBkb3duTG9hZERhdGEucmVwb3J0VHlwZS5wdXNoKGN1cklkKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY3VySW5kZXggPSBkb3duTG9hZERhdGEucmVwb3J0VHlwZS5maW5kSW5kZXgoaWQgPT4gaWQgPT0gY3VySWQpXHJcbiAgICAgICAgICBkb3duTG9hZERhdGEucmVwb3J0VHlwZS5zcGxpY2UoY3VySW5kZXgsIDEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHNlbGYuYWxsQ2xhc3NMaXN0KVxyXG5cclxuICAgICAgICBpZihJU19CQVRDSERPV05MT0FEICYmIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLnRvU3RyaW5nKCkgPT09ICc3Jyl7XHJcblxyXG4gICAgICAgICAgaGFzUmVwb3J0VHlwZTcgPSB0cnVlO1xyXG4gICAgICAgICAgc2VsZi5jYW5Eb3duTG9hZEV4YW1MaXN0RGF0YSA9IHNlbGYuYWxsQ2xhc3NMaXN0XHJcbiAgICAgICAgICBzZWxmLm5vRG93bkxvYWRFeGFtTGlzdERhdGEgPSBbXVxyXG4gICAgICAgICAgc2VsZi5yZW5kZXJFeGFtTGlzdCgpXHJcblxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgbGV0IHsgd29yZCwgZXhjZWwsIHRlYWNoZXIsIGVycm9yIH0gPSBzZWxmLmRvd25Mb2FkVHlwZVxyXG4gICAgICAgICAgbGV0IHJlcG9ydE5hbWVNYXAgPSB7XHJcbiAgICAgICAgICAgIFt3b3JkXTogJ3dvcmQnLFxyXG4gICAgICAgICAgICBbZXhjZWxdOiAnZXhjZWwnLFxyXG4gICAgICAgICAgICBbdGVhY2hlcl06ICd0ZWFjaGVyJyxcclxuICAgICAgICAgICAgW2Vycm9yXTogJ2Vycm9yJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2VsZi51cGRhdGVSZW5kZXJFeGFtTGlzdERhdGEocmVwb3J0TmFtZU1hcFtkb3duTG9hZFR5cGVdKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCfmiqXooajlhoXlrrnpgInpobknLCBkb3duTG9hZERhdGEucmVwb3J0VHlwZSlcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy/mlofnu7znkIbnu7zljZXnp5HmiJDnu6nmmI7nu4booahcclxuICAgIG5ldyBDaGVja0JveEl0ZW0oXHJcbiAgICAgICQoJyNzdWJqZWN0UmVwb3J0JyksXHJcbiAgICAgICgpID0+IHt9LFxyXG4gICAgICBmdW5jdGlvbigkY2hlY2tJdGVtLCBzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICBkb3duTG9hZERhdGEucmVwb3J0VHlwZS5wdXNoKDYpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBjdXJJbmRleCA9IGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLmZpbmRJbmRleChpZCA9PiBpZCA9PT0gNSlcclxuICAgICAgICAgIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLnNwbGljZShjdXJJbmRleCwgMSlcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9zZWxmLmhhc1dlbkxpWm9uZ0RldGFpbCA9IHN0YXR1cyA/IDEgOiAwXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygn5oql6KGo5YaF5a656YCJ6aG5JywgZG93bkxvYWREYXRhLnJlcG9ydFR5cGUpXHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICAvL+agt+W8j+WIh+aNolxyXG4gICAgJCgnLmhnY19yZXBvcnQgLnN0eWxlQ2hhbmdlIC50aXAnKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgbGV0IGlzQ2xvc2UgPSAkKHRoaXMpLmhhc0NsYXNzKCdkb3duJylcclxuICAgICAgJCh0aGlzKVxyXG4gICAgICAgIC5zaWJsaW5ncygnLnN0eWxlQm94JylcclxuICAgICAgICBbaXNDbG9zZSA/ICdzaG93JyA6ICdoaWRlJ10oKVxyXG4gICAgICAkKHRoaXMpXHJcbiAgICAgICAgW2lzQ2xvc2UgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2Rvd24nKVxyXG4gICAgICAgIFtpc0Nsb3NlID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKCd1cCcpXHJcbiAgICB9KVxyXG4gICAgLy/nj63nuqflrabnlJ/miJDnu6nliIbmnpDooahcclxuICAgIG5ldyBSYWRpb0JveEl0ZW0oJCgnI2FjaGlldmVtZW50JyksIGZ1bmN0aW9uKCRyYWRpb0l0ZW0sIHN0YXR1cykge1xyXG4gICAgICBsZXQgc3RhdCA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1zdGF0dXMnKVxyXG4gICAgICBsZXQgbmFtZSA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgZG93bkxvYWREYXRhW25hbWVdID0gc3RhdFxyXG4gICAgICAvLy8vY29uc29sZS5sb2coZG93bkxvYWREYXRhKVxyXG4gICAgfSlcclxuICAgIC8v57q45byg6K6+572uXHJcbiAgICBuZXcgUmFkaW9Cb3hJdGVtKCQoJyNwYXBlclNpemVTZXR0aW5nJyksIGZ1bmN0aW9uKCRyYWRpb0l0ZW0sIHN0YXR1cykge1xyXG4gICAgICBsZXQgc3RhdCA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1zdGF0dXMnKVxyXG4gICAgICBsZXQgbmFtZSA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgZG93bkxvYWREYXRhW25hbWVdID0gc3RhdFxyXG4gICAgICAvLy8vY29uc29sZS5sb2coZG93bkxvYWREYXRhKVxyXG4gICAgfSlcclxuICAgIC8v54+t57qn5bmz5Z2H5YiG6KGoXHJcbiAgICBuZXcgUmFkaW9Cb3hJdGVtKCQoJyNhdmdTY29yZScpLCBmdW5jdGlvbigkcmFkaW9JdGVtLCBzdGF0dXMpIHtcclxuICAgICAgbGV0IHN0YXQgPSAkcmFkaW9JdGVtLmF0dHIoJ2RhdGEtc3RhdHVzJylcclxuICAgICAgbGV0IG5hbWUgPSAkcmFkaW9JdGVtLmF0dHIoJ2RhdGEtbmFtZScpXHJcbiAgICAgIGRvd25Mb2FkRGF0YVtuYW1lXSA9IHN0YXRcclxuICAgICAgLy8vL2NvbnNvbGUubG9nKGRvd25Mb2FkRGF0YSlcclxuICAgIH0pXHJcbiAgICAvL+W5tOe6p+W5s+Wdh+WIhuihqFxyXG4gICAgbmV3IFJhZGlvQm94SXRlbSgkKCcjZ3JhZGVBdmdTY29yZScpLCBmdW5jdGlvbigkcmFkaW9JdGVtLCBzdGF0dXMpIHtcclxuICAgICAgbGV0IHN0YXQgPSAkcmFkaW9JdGVtLmF0dHIoJ2RhdGEtc3RhdHVzJylcclxuICAgICAgbGV0IG5hbWUgPSAkcmFkaW9JdGVtLmF0dHIoJ2RhdGEtbmFtZScpXHJcbiAgICAgIGRvd25Mb2FkRGF0YVtuYW1lXSA9IHN0YXRcclxuICAgICAgLy8vL2NvbnNvbGUubG9nKGRvd25Mb2FkRGF0YSlcclxuICAgIH0pXHJcbiAgICAvL+aYvuekuuiuvue9rlxyXG4gICAgbmV3IFJhZGlvQm94SXRlbSgkKCcjc3R1ZGVudEFjaGlldmVtZW50JyksIGZ1bmN0aW9uKCRyYWRpb0l0ZW0sIHN0YXR1cykge1xyXG4gICAgICBsZXQgc3RhdCA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1zdGF0dXMnKVxyXG4gICAgICBsZXQgbmFtZSA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgZG93bkxvYWREYXRhW25hbWVdID0gc3RhdFxyXG4gICAgICAvLy8vY29uc29sZS5sb2coZG93bkxvYWREYXRhKVxyXG4gICAgfSlcclxuXHJcbiAgICAvL+WIhuauteiuvue9rlxyXG4gICAgJCgnI3Njb3JlT3BlcmF0b3IgLmhidG4nKVxyXG4gICAgICAudW5iaW5kKClcclxuICAgICAgLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdyZWR1Y2UnKSkge1xyXG4gICAgICAgICAgc2VsZi5yZWR1Y2VTY29yZVBhcnQoKVxyXG4gICAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5oYXNDbGFzcygnYWRkJykpIHtcclxuICAgICAgICAgIHNlbGYuYWRkU2NvcmVQYXJ0KClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VsZi5jbGVhclNjcm9lUGFydCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgLy/liIbmrrXmlofmnKzmoYbmk43kvZxcclxuICAgICQoJyNzY29yZUxpc3QnKVxyXG4gICAgICAub2ZmKCdibHVyJylcclxuICAgICAgLm9uKCdibHVyJywgJ2lucHV0JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbGV0IHNjb3JlU2VjdGlvbiA9IHNlbGYuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvblxyXG4gICAgICAgIGxldCBfaW5kZXggPSArJCh0aGlzKS5hdHRyKCdkYXRhLWluZGV4JylcclxuICAgICAgICBsZXQgdmFsID0gKyQodGhpcykudmFsKClcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB2YWwgPD0gMCB8fFxyXG4gICAgICAgICAgKHNjb3JlU2VjdGlvbltfaW5kZXggKyAxXSAmJiB2YWwgPD0gc2NvcmVTZWN0aW9uW19pbmRleCArIDFdKSB8fFxyXG4gICAgICAgICAgKHNjb3JlU2VjdGlvbltfaW5kZXggLSAxXSAmJiB2YWwgPj0gc2NvcmVTZWN0aW9uW19pbmRleCAtIDFdKSB8fFxyXG4gICAgICAgICAgdmFsID49IHNlbGYubWF4U2NvcmVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGhnY19sYXllci5hbGVydCgn5YiG5q615pWw5YC86K6+572u5LiN5q2j56Gu77yM6K+36YeN5paw6L6T5YWlJylcclxuICAgICAgICAgICQodGhpcykudmFsKHNjb3JlU2VjdGlvbltfaW5kZXhdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzY29yZVNlY3Rpb25bX2luZGV4XSA9IHZhbFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICBuZXcgU3dpdGNoKCQoJyNzd2l0Y2gtdG90YWwtc2NvcmUnKSwgc3RhdHVzID0+IHtcclxuICAgICAgaWYoc3RhdHVzKXtcclxuICAgICAgICAkKCcjY29udGFjdENob2ljZTEsI2NvbnRhY3RDaG9pY2UyJykucHJvcCgnZGlzYWJsZWQnLGZhbHNlKVxyXG4gICAgICAgIHNlbGYuZG93bkxvYWREYXRhLnRvdGFsU2NvcmVDb2VmZmljaWVudElzUm91bmRpbmcgPSAxXHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICQoJyNjb250YWN0Q2hvaWNlMSwjY29udGFjdENob2ljZTInKS5wcm9wKCdkaXNhYmxlZCcsdHJ1ZSlcclxuICAgICAgICAkKCcjY29udGFjdENob2ljZTEnKS5wcm9wKCdjaGVja2VkJyx0cnVlKVxyXG4gICAgICAgICQoJyNjb250YWN0Q2hvaWNlMicpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKVxyXG4gICAgICAgIGRlbGV0ZSBzZWxmLmRvd25Mb2FkRGF0YS50b3RhbFNjb3JlQ29lZmZpY2llbnRJc1JvdW5kaW5nXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4kdG90YWxTY29yZUNvZWZmaWNpZW50W3N0YXR1cyA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShcclxuICAgICAgICAnZGlzYWJsZWQnXHJcbiAgICAgICkucHJvcCgnZGlzYWJsZWQnLCAhc3RhdHVzKVxyXG5cclxuICAgICAgc2VsZi5kb3duTG9hZERhdGEudG90YWxTY29yZUNvZWZmaWNpZW50ID0gc3RhdHVzXHJcbiAgICAgICAgPyB0aGlzLiR0b3RhbFNjb3JlQ29lZmZpY2llbnQudmFsKClcclxuICAgICAgICA6IC0xXHJcbiAgICB9KVxyXG4gICAgJCgnLm51bWJlci10eXBlIGlucHV0JykuY2xpY2soZnVuY3Rpb24oKXtcclxuICAgICAgc2VsZi5kb3duTG9hZERhdGEudG90YWxTY29yZUNvZWZmaWNpZW50SXNSb3VuZGluZyA9ICQodGhpcykudmFsKClcclxuICAgIH0pXHJcbiAgICBuZXcgU3dpdGNoKCQoJyNzd2l0Y2gtcmFua2luZycpLCBzdGF0dXMgPT4ge1xyXG4gICAgICBzZWxmLmRvd25Mb2FkRGF0YS5zaG93UmFua2luZ0NoYW5nZXMgPSBzdGF0dXMgPyAxIDowXHJcbiAgICB9KVxyXG4gICAgdGhpcy4kdG90YWxTY29yZUNvZWZmaWNpZW50LmJsdXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgIGxldCB2YWwgPSArJCh0aGlzKS52YWwoKVxyXG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWwpKSB7XHJcbiAgICAgICAgaGdjX2xheWVyLmFsZXJ0KCfmgLvliIbns7vmlbDkuLow772eMTDku6XlhoXnmoTmlbDlrZcnKVxyXG4gICAgICAgIHZhbCA9IDEuMjVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsIDw9IDApIHtcclxuICAgICAgICAgIHZhbCA9IDEuMjVcclxuICAgICAgICB9IGVsc2UgaWYgKHZhbCA+IDEwKSB7XHJcbiAgICAgICAgICB2YWwgPSAxMFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAkKHRoaXMpLnZhbCh2YWwudG9GaXhlZCgyKSlcclxuICAgICAgc2VsZi5kb3duTG9hZERhdGEudG90YWxTY29yZUNvZWZmaWNpZW50ID0gdmFsLnRvRml4ZWQoMilcclxuICAgIH0pXHJcbiAgICAkKCcjaF9zdWJtaXRCdG4gLmhidG4nKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2Vuc3VyZScpKSB7IC8v5LiL6L29XHJcbiAgICAgICAgICBvblN1Ym1pdEJ0bihzZWxmKVxyXG4gICAgICB9IGVsc2UgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2NyZWF0ZScpKSB7IC8vIOeUn+aIkFxyXG4gICAgICAgIG9uU3VibWl0QnRuKHNlbGYsJ+eUn+aIkCcpXHJcbiAgICAgICAgLy8gJCgnYm9keScpLmFwcGVuZChkb3duTG9hZFNldHRpbmdNb2R1bGVDcmVhdGUpXHJcbiAgICAgICAgLy8gICBzY0ZuLmNhbGwodGhpcylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgICAgRG93bkxvYWRNb2RlbEluc3RhbmNlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgJCgnLmhnY19yZXBvcnQgaDIudGl0bGUgLmhjbG9zZScpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgIERvd25Mb2FkTW9kZWxJbnN0YW5jZSA9IG51bGxcclxuICAgIH0pXHJcbiAgICBmdW5jdGlvbiBvblN1Ym1pdEJ0bihzZWxmLHR5cGUpe1xyXG4gICAgICBsZXQgZG93bkxvYWRUeXBlID0gc2VsZi5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZVxyXG4gICAgICBsZXQgc3VibWl0UGFyYW1zID0ge1xyXG4gICAgICAgIC4uLnNlbGYuZG93bkxvYWREYXRhLFxyXG4gICAgICAgIC4uLnNlbGYuaGlnaFNldHRpbmdEYXRhLFxyXG4gICAgICAgIHNjb3JlU2VjdGlvbjpzZWxmLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb24ubGVuZ3RoP1suLi5zZWxmLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb24sICcwJ106W11cclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgficxfDInLmluZGV4T2YoZG93bkxvYWRUeXBlKSAmJlxyXG4gICAgICAgICFzZWxmLmRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICBoZ2NfbGF5ZXIuYWxlcnQoJ+ivt+mAieaLqeimgeS4i+i9veeahOaKpeihqOWGheWuuScpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKElTX0JBVENIRE9XTkxPQUQpIHsgLy8g5om56YePXHJcbiAgICAgICAgc3VibWl0UGFyYW1zLmV4YW1Hcm91cElkID0gc2VsZi5leGFtSWRcclxuICAgICAgICBzZWxmLmJhdGNoRG93bkxvYWRGbihkb3duTG9hZFR5cGUsIHN1Ym1pdFBhcmFtcyx0eXBlKVxyXG4gICAgICB9IGVsc2UgeyAvLyDljZXkuKog5LiL6L29XHJcbiAgICAgICAgc3VibWl0UGFyYW1zLmV4YW1faWQgPSBzZWxmLmV4YW1JZFxyXG4gICAgICAgIHNlbGYuc2luZ2xlRG93bkxvYWRGbihkb3duTG9hZFR5cGUsIHN1Ym1pdFBhcmFtcyx0eXBlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZ2hTZXR0aW5nRXZlbnQoKVxyXG4gIH1cclxuICBzY0ZuKCkge1xyXG4gICAgJCgnLnNjX3N1Ym1pdEJ0bnMgLmhidG4nKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdjcmVhdGUnKSkgeyAvL+aJk+WNsFxyXG4gICAgICAgIGV2YWx1YXRpb25DbGllbnQuQnVsa1ByaW50UERGKEpTT04uc3RyaW5naWZ5KERvd25Mb2FkVVJMLnByaW50KSlcclxuICAgICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgICAgJCgnI3NjX2NyZWF0ZUJveCcpLnJlbW92ZSgpXHJcbiAgICAgIH1lbHNlIHsgLy/kuIvovb1cclxuICAgICAgICBpZiAoRG93bkxvYWRVUkwuc3RhdHVzKSB7XHJcbiAgICAgICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgICAgICAkKCcjc2NfY3JlYXRlQm94JykucmVtb3ZlKClcclxuICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBEb3duTG9hZFVSTC5yZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAkKCcuc2NfY2xvc2UnKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICQoJyNzY19jcmVhdGVCb3gnKS5yZW1vdmUoKVxyXG4gICAgfSlcclxuICB9XHJcbiAgaGlnaFNldHRpbmdFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICBjb25zdCBkb3duTG9hZERhdGEgPSBzZWxmLmRvd25Mb2FkRGF0YVxyXG4gICAgLy/pq5jnuqforr7nva5cclxuICAgICQoJyNoaWdoU2V0dGluZyBzcGFuJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgIHNlbGYuc3VibWl0QnRuU3RhdHVzQ2hhbmdlKHRydWUpXHJcblxyXG4gICAgICBzZWxmLmluaXRIaWdoU2V0dGluZ1N0YXR1cygpXHJcbiAgICB9KVxyXG5cclxuICAgIC8v6auY57qn6K6+572uLS0t5a2m55Sf6YCJ5oupXHJcbiAgICBjb25zdCBzdHVkZW50c0luZm8gPSBbXHJcbiAgICAgICdoYXNTdHVkZW50U3lzdGVtQ2FyZCcsXHJcbiAgICAgICdoYXNTdHVkZW50U2Nob29sQ2FyZCcsXHJcbiAgICAgICdoYXNJZE51bWJlcicsXHJcbiAgICAgICdoYXNTdHVkZW50Tm8nXHJcbiAgICBdXHJcbiAgICBuZXcgQ2hlY2tCb3hJdGVtKFxyXG4gICAgICAkKCcjc3R1ZGVudHNTZXR0aW5nJyksXHJcbiAgICAgICgkY2hlY2tBbGwsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIHN0dWRlbnRzSW5mby5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oaWdoU2V0dGluZ0RhdGFbdl0gPSBzdGF0dXMgPyAxIDogMFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgICgkY2hlY2tJdGVtLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9ICRjaGVja0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgICB0aGlzLmhpZ2hTZXR0aW5nRGF0YVtuYW1lXSA9IHN0YXR1cyA/IDEgOiAwXHJcbiAgICAgIH1cclxuICAgIClcclxuICAgIC8v6L+H5ruk5p2h5Lu2XHJcbiAgICBjb25zdCBmaWx0ZXJJbmZvID0gWydyZW1vdmVPdXRlclN0dWRlbnQnLCAncmVtb3ZlWmVyb1N0dWRlbnQnXVxyXG4gICAgbmV3IENoZWNrQm94SXRlbShcclxuICAgICAgJCgnI2ZpbHRlclNldHRpbmcnKSxcclxuICAgICAgKCRjaGVja0FsbCwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgZmlsdGVySW5mby5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oaWdoU2V0dGluZ0RhdGFbdl0gPSBzdGF0dXMgPyAxIDogMFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgICgkY2hlY2tJdGVtLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBsZXQgbmFtZSA9ICRjaGVja0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgICB0aGlzLmhpZ2hTZXR0aW5nRGF0YVtuYW1lXSA9IHN0YXR1cyA/IDEgOiAwXHJcbiAgICAgIH1cclxuICAgIClcclxuICAgIC8v6L6+57q/6K6+572uXHJcbiAgICBsZXQgY29tcGxpYW5jZUZpZWxkcyA9IFtcclxuICAgICAgMTAwLFxyXG4gICAgICAnZXhjZWxsZW50UmF0aW8nLFxyXG4gICAgICAnZ29vZFJhdGlvJyxcclxuICAgICAgJ21lZGl1bVJhdGlvJyxcclxuICAgICAgMFxyXG4gICAgXVxyXG5cclxuICAgICQoJyNjb21wbGlhbmNlUmF0ZSBpbnB1dCcpLmJsdXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgIGxldCBuYW1lID0gJCh0aGlzKS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICBsZXQgY3VycmVudFZhbCA9ICskKHRoaXMpLnZhbCgpXHJcbiAgICAgIGxldCBmaWVsZEluZGV4ID0gY29tcGxpYW5jZUZpZWxkcy5pbmRleE9mKG5hbWUpXHJcbiAgICAgIGxldCBwcmVWYWwgPSBjb21wbGlhbmNlRmllbGRzW2ZpZWxkSW5kZXggLSAxXVxyXG4gICAgICBwcmVWYWwgPSBOdW1iZXIuaXNGaW5pdGUocHJlVmFsKVxyXG4gICAgICAgID8gcHJlVmFsXHJcbiAgICAgICAgOiBzZWxmLmhpZ2hTZXR0aW5nRGF0YVtwcmVWYWxdICogMTAwXHJcbiAgICAgIGxldCBuZXh0VmFsID0gY29tcGxpYW5jZUZpZWxkc1tmaWVsZEluZGV4ICsgMV1cclxuICAgICAgbmV4dFZhbCA9IE51bWJlci5pc0Zpbml0ZShuZXh0VmFsKVxyXG4gICAgICAgID8gbmV4dFZhbFxyXG4gICAgICAgIDogc2VsZi5oaWdoU2V0dGluZ0RhdGFbbmV4dFZhbF0gKiAxMDBcclxuICAgICAgaWYgKGN1cnJlbnRWYWwgPCBwcmVWYWwgJiYgY3VycmVudFZhbCA+IG5leHRWYWwpIHtcclxuICAgICAgICBzZWxmLmhpZ2hTZXR0aW5nRGF0YVtuYW1lXSA9ICsoY3VycmVudFZhbCAvIDEwMCkudG9GaXhlZCgyKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICQodGhpcykudmFsKHNlbGYuaGlnaFNldHRpbmdEYXRhW25hbWVdICogMTAwKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgICQoJy5oZ2NfcmVwb3J0Jykub24oJ2NsaWNrJywgJy5kb3duTG9hZE9iamVjdCBsaScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmKCQodGhpcykuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpcmV0dXJuO1xyXG4gICAgICAkKHRoaXMpXHJcbiAgICAgICAgLmFkZENsYXNzKCdjdXJyZW50JylcclxuICAgICAgICAuc2libGluZ3MoKVxyXG4gICAgICAgIC5yZW1vdmVDbGFzcygnY3VycmVudCcpXHJcbiAgICAgIGxldCBkb3duTG9hZFR5cGUgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtaWQnKVxyXG4gICAgICBpZihkb3duTG9hZFR5cGU9PTIpe1xyXG4gICAgICAgICQoJyNzY29yZURpc3BsYXlTZXR0aW5ncycpLnNob3coKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcjc2NvcmVEaXNwbGF5U2V0dGluZ3MnKS5oaWRlKCk7XHJcbiAgICAgICAgc2VsZi5kb3duTG9hZERhdGEuc2NvcmVPZkVhY2hRdWVzdGlvbiA9IDBcclxuICAgICAgfVxyXG4gICAgICAvLyDlpoLmnpzkuI3mmK93b3Jk5pa55byP5omT5byA77yM5LiN5pi+56S657q45byg6K6+572uXHJcbiAgICAgIGlmKGRvd25Mb2FkVHlwZSAhPSAxKXtcclxuICAgICAgICAkKCcjcGFwZXJTaXplU2V0dGluZycpLmhpZGUoKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgJCgnI3BhcGVyU2l6ZVNldHRpbmcnKS5zaG93KCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g5aaC5p6c5pivd29yZOaYvuekuumimOWei+eJiFxyXG4gICAgICBpZihkb3duTG9hZFR5cGU9PTEpe1xyXG4gICAgICAgICQoJy5vcHRpb25zLWV4Y2VsJykuaGlkZSgpXHJcbiAgICAgICAgJCgnLm9wdGlvbnMtd29yZCcpLnNob3coKVxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgJCgnLm9wdGlvbnMtd29yZCcpLmhpZGUoKVxyXG4gICAgICAgICQoJy5vcHRpb25zLWV4Y2VsJykuc2hvdygpXHJcbiAgICAgIH1cclxuICAgICAgc2VsZi5pbml0U3RhdHVzRm9yRG93bmxhb2RUeXBlKGRvd25Mb2FkVHlwZSlcclxuICAgIH0pXHJcblxyXG4gICAgJCgnI2hfc2F2ZVNldHRpbmdCdG4gLmhidG4nKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgc2VsZi5zdWJtaXRCdG5TdGF0dXNDaGFuZ2UoZmFsc2UpXHJcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdlbnN1cmUnKSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICdoaWdoU2V0dGluZycsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShzZWxmLmhpZ2hTZXR0aW5nRGF0YSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGluaXRIaWdoU2V0dGluZ1N0YXR1cygpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICBpZiAoIXNlbGYuZmlyc3RFbnRlckhpZ2hTZXR0aW5nKSByZXR1cm5cclxuICAgIGNvbnN0IGhpZ2hTZXR0aW5nT3B0aW9ucyA9IFtcclxuICAgICAgLi4uJCgnI3N0dWRlbnRzU2V0dGluZyAuaF9jaGVja0l0ZW0nKSxcclxuICAgICAgLi4uJCgnI2ZpbHRlclNldHRpbmcgLmhfY2hlY2tJdGVtJylcclxuICAgIF1cclxuICAgIGhpZ2hTZXR0aW5nT3B0aW9ucy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgbGV0IG5hbWUgPSAkKGVsKS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICBpZiAodGhpcy5oaWdoU2V0dGluZ0RhdGFbbmFtZV0pIHtcclxuICAgICAgICAkKGVsKS5jbGljaygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgJCgnI2NvbXBsaWFuY2VSYXRlIGlucHV0JykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgbGV0IG5hbWUgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtbmFtZScpXHJcbiAgICAgICQodGhpcykudmFsKHNlbGYuaGlnaFNldHRpbmdEYXRhW25hbWVdICogMTAwKVxyXG4gICAgfSlcclxuXHJcbiAgICBzZWxmLmZpcnN0RW50ZXJIaWdoU2V0dGluZyA9IGZhbHNlXHJcbiAgfVxyXG4gIHN1Ym1pdEJ0blN0YXR1c0NoYW5nZShmbGFnKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgJCgnI3NldHRpbmcnKVtmbGFnID8gJ2hpZGUnIDogJ3Nob3cnXSgpXHJcbiAgICAkKCcjZmlsdGVyT3B0aW9ucycpWyFmbGFnID8gJ2hpZGUnIDogJ3Nob3cnXSgpXHJcbiAgICAkKCcjaF9zYXZlU2V0dGluZ0J0bicpW2ZsYWcgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2ZsZXgnKVxyXG4gICAgJCgnI2hfc3VibWl0QnRuJylbIWZsYWcgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2ZsZXgnKVxyXG4gIH1cclxuICBiYXRjaERvd25Mb2FkRm4oZG93bkxvYWRUeXBlLCBzdWJtaXRQYXJhbXMpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICBjb25zb2xlLmxvZyhzdWJtaXRQYXJhbXMpO1xyXG4gICAgaWYgKCFzZWxmLnNlbEV4YW1DbGFzc0RhdGEubGVuZ3RoKSB7XHJcbiAgICAgIGhnY19sYXllci5hbGVydCgn6K+36YCJ5oup6KaB5LiL6L2955qE54+t57qnJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzdWJtaXRQYXJhbXMgPSB7XHJcbiAgICAgIC4uLnN1Ym1pdFBhcmFtcyxcclxuICAgICAgY2xhc3NfaWRzOiBzZWxmLnNlbEV4YW1DbGFzc0RhdGFcclxuICAgIH1cclxuICAgIGhnY19sYXllci5tc2coJ+eUn+aIkOS4re+8jOivt+eojeWQji4uLicsIHsgdGltZTogMCwgc2hhZGU6IDAuNCB9KVxyXG4gICAgc2VsZi5iYXRjaERvd25Mb2FkKHN1Ym1pdFBhcmFtcykudGhlbihyZXMgPT4ge1xyXG4gICAgICBoZ2NfbGF5ZXIuY2xvc2VBbGwoKVxyXG4gICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzKSB7XHJcbiAgICAgICAgaGdjX2xheWVyLm9wZW4oe1xyXG4gICAgICAgICAgdGl0bGU6ICfkuIvovb3mj5DnpLo6JyxcclxuICAgICAgICAgIGNvbnRlbnQ6ICflt7LmiJDlip/ovazlhaXlkI7lj7DnlJ/miJDmiqXooajvvIzor7fnrYnlvoUnLFxyXG4gICAgICAgICAgYnRuOiBbJ+afpeeci+eUn+aIkOi/m+W6picsICfnoa7lrponXSxcclxuICAgICAgICAgIHllczogZnVuY3Rpb24oaW5kZXgsIGxheWVybykge1xyXG4gICAgICAgICAgICAvL+aMiemSruOAkOaMiemSruS4gOOAkeeahOWbnuiwg1xyXG4gICAgICAgICAgICBoZ2NfbGF5ZXIuY2xvc2VBbGwoKVxyXG4gICAgICAgICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIGxldCBzdWJqZWN0SWQgPSAkKCcucHJvZ3Jlc3NfYnRuJykuYXR0cignc3ViamVjdElkJylcclxuICAgICAgICAgICAgRG93bkxvYWRNb2RlbExpc3RJbnN0YW5jZSA9IG5ldyBEb3duTG9hZExpc3RNb2RlbChzdWJqZWN0SWQpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYnRuMjogZnVuY3Rpb24oaW5kZXgsIGxheWVybykge1xyXG4gICAgICAgICAgICAvL+aMiemSruOAkOaMiemSruS6jOOAkeeahOWbnuiwg1xyXG4gICAgICAgICAgICAvL3JldHVybiBmYWxzZSDlvIDlkK/or6Xku6PnoIHlj6/npoHmraLngrnlh7vor6XmjInpkq7lhbPpl61cclxuICAgICAgICAgICAgLy/mjInpkq7jgJDmjInpkq7kuIDjgJHnmoTlm57osINcclxuICAgICAgICAgICAgaGdjX2xheWVyLmNsb3NlQWxsKClcclxuICAgICAgICAgICAgJCgnI2hnY19yZXBvcnRCb3gnKS5yZW1vdmUoKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIC8v5Y+z5LiK6KeS5YWz6Zet5Zue6LCDXHJcbiAgICAgICAgICAgIC8vcmV0dXJuIGZhbHNlIOW8gOWQr+ivpeS7o+eggeWPr+emgeatoueCueWHu+ivpeaMiemSruWFs+mXrVxyXG4gICAgICAgICAgICAvL+aMiemSruOAkOaMiemSruS4gOOAkeeahOWbnuiwg1xyXG4gICAgICAgICAgICBoZ2NfbGF5ZXIuY2xvc2VBbGwoKVxyXG4gICAgICAgICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBoZ2NfbGF5ZXIuYWxlcnQocmVzdWx0Lm1zZylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgYXN5bmMgc2luZ2xlRG93bkxvYWRGbihkb3duTG9hZFR5cGUsIHN1Ym1pdFBhcmFtcyx0eXBlKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgaWYgKH4nM3w0Jy5pbmRleE9mKGRvd25Mb2FkVHlwZSkpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRvd25Mb2FkVHlwZSA9PSBzZWxmLmRvd25Mb2FkVHlwZS50ZWFjaGVyICYmXHJcbiAgICAgICAgc2VsZi50ZWFjaGVyVGFsa2luZ0lzRG93bkxvYWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaGdjX2xheWVyLm1zZygn55Sf5oiQ5Lit77yM6K+356iN5ZCOLi4uJywgeyB0aW1lOiAwLCBzaGFkZTogMC40IH0pXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHNlbGYuanVkZ2VUZWFjaGVyRG93bkxvYWQoe1xyXG4gICAgICAgICAgc3ViamVjdElkOiBzZWxmLnN1YmplY3RJZCxcclxuICAgICAgICAgIGNsYXNzSWQ6IHNlbGYuY2xhc3NJZCxcclxuICAgICAgICAgIGV4YW1JZDogc2VsZi5leGFtSWRcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdClcclxuICAgICAgICBsZXQgZXJyb3JJbmZvID0gcmVzLmVycm9yXHJcbiAgICAgICAgaGdjX2xheWVyLmNsb3NlQWxsKClcclxuICAgICAgICBpZiAoIXJlcy5zdGF0dXMpIHtcclxuICAgICAgICAgIHNlbGYuZG93bkxvYWRUZWFjaGVyKHNlbGYuZXhhbUlkKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBoZ2NfbGF5ZXIuYWxlcnQocmVzLmVycm9yKVxyXG4gICAgICAgICAgLy/mlZnlrablrp3mmK/lkKblj6/ku6XkuIvovb3nmoTnirbmgIHliKTmlq1jXHJcbiAgICAgICAgICAkKCcjbm9zZXR0aW5nJylcclxuICAgICAgICAgICAgLmNoaWxkcmVuKCdzdHJvbmcnKVxyXG4gICAgICAgICAgICAuaHRtbChlcnJvckluZm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5pWZ5a2m5a6d5piv5ZCm6IO95LiL6L29XHJcbiAgICAgICAgc2VsZi50ZWFjaGVyVGFsa2luZ0lzRG93bkxvYWQgPSByZXMuc3RhdHVzID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgICAgc2VsZi5kb3dubG9hZFR5cGVUZXh0Tm90aWNlW2Rvd25Mb2FkVHlwZV0gPSBlcnJvckluZm9cclxuICAgICAgICAgID8gZXJyb3JJbmZvXHJcbiAgICAgICAgICA6IHNlbGYuZG93bmxvYWRUeXBlVGV4dE5vdGljZVtkb3duTG9hZFR5cGVdXHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZG93bkxvYWRUeXBlID09IHNlbGYuZG93bkxvYWRUeXBlLmVycm9yICYmXHJcbiAgICAgICAgc2VsZi5lcnJvclRlbklzRG93bkxvYWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgc2VsZi5kb3duTG9hZEVycm9yVGVuKHNlbGYuZXhhbUlkKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgLy/miqXooajlhoXlrrnmm7/mjaLlrZfmrrVcclxuICAgIC8qKlxyXG4gICAgICogQ0xBWlpfQUNISUVWRU1FTlQoMCxcIuePree6p+WtpueUn+aIkOe7qeWIhuaekOihqFwiKSxDTEFaWl9BVkdfU0NPUkUoMSxcIuePree6p+W5s+Wdh+WIhuihqFwiKSxTVFVERU5UX0FDSElFVkVNRU5UX1JBTksoMixcIuWtpueUn+aIkOe7qeaOkuWQjei3n+i4quihqFwiKSxcclxuICAgIEdSQURFX0FDSElFVkVNRU5UKDMsXCLlubTnuqflrabnlJ/miJDnu6nliIbmnpDooahcIiksU0NPUkVfU0VDVElPTig0LFwi54+t57qn5YiG5pWw5q616KGoXCIpLFNVQkpFQ1RfQUNISUVWRU1FTlQoNSxcIuWQhOWtpuenkeaIkOe7qeWIhuaekOihqFwiKSxcclxuICAgIFdFTl9MSV9aT05HX0FDSElFVkVNRU5UX0RFVEFJTFMoNixcIuaWh+e7vOeQhue7vOWNleenkeaIkOe7qeaYjue7huaKpeihqFwiKTtcclxuICAgICAqL1xyXG4gICAgbGV0IHJlcG9ydE1hcCA9IHtcclxuICAgICAgMDogJ2hhc0NsYXp6QWNoaWV2ZW1lbnQnLFxyXG4gICAgICAxOiAnaGFzQ2xhenpBdmdTY29yZScsXHJcbiAgICAgIDI6ICdoYXNTdHVkZW50QWNoaWV2ZW1lbnRSYW5rJyxcclxuICAgICAgMzogJ2hhc0dyYWRlQWNoaWV2ZW1lbnQnLFxyXG4gICAgICA0OiAnaGFzU2NvcmVTZWN0aW9uJyxcclxuICAgICAgNTogJ2hhc1N1YmplY3RBY2hpZXZlbWVudCcsXHJcbiAgICAgIDY6ICdoYXNXZW5MaVpvbmdEZXRhaWwnLFxyXG4gICAgICA3OidoYXNDbGF6ekNob2ljZVRvcGljU3RhdGlzdGljcydcclxuICAgIH1cclxuICAgIHN1Ym1pdFBhcmFtcy5yZXBvcnRUeXBlLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgc3VibWl0UGFyYW1zW3JlcG9ydE1hcFtrZXldXSA9IDFcclxuICAgIH0pXHJcbiAgICBoZ2NfbGF5ZXIubXNnKCfnlJ/miJDkuK3vvIzor7fnqI3lkI4uLi4nLCB7IHRpbWU6IDAsIHNoYWRlOiAwLjQgfSlcclxuICAgIHNlbGYuc2luZ2xlRG93bkxvYWQoc3VibWl0UGFyYW1zKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgIGhnY19sYXllci5jbG9zZUFsbCgpXHJcbiAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHtcclxuICAgICAgICBpZiAodHlwZSA9PSAn55Sf5oiQJykge1xyXG4gICAgICAgICAgRG93bkxvYWRVUkwgPSByZXN1bHRcclxuICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQoZG93bkxvYWRTZXR0aW5nTW9kdWxlQ3JlYXRlKVxyXG4gICAgICAgICAgdGhpcy5zY0ZuLmNhbGwodGhpcylcclxuICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAkKCcjaGdjX3JlcG9ydEJveCcpLnJlbW92ZSgpXHJcbiAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gcmVzdWx0LnJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBoZ2NfbGF5ZXIuYWxlcnQocmVzdWx0LnJlc3VsdClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgYXN5bmMgaW5pdFN0YXR1c0ZvckRvd25sYW9kVHlwZShkb3duTG9hZFR5cGUpIHtcclxuICAgIGxldCBoYXNPcHRpb24gPSB+JzF8MicuaW5kZXhPZihkb3duTG9hZFR5cGUpXHJcbiAgICBsZXQgaXNUZWFjaGVyID0gZG93bkxvYWRUeXBlID09IDM7XHJcblxyXG4gICAgdGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSA9ICtkb3duTG9hZFR5cGVcclxuICAgIC8v6YeN572u5oql6KGo5YaF5a656YCJ6aG5XHJcbiAgICB0aGlzLmRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlID0gW11cclxuICAgIC8v5piv5ZCm5pyJ5oql6KGo5YaF5a656YCJ6aG5XHJcbiAgICBpZiAoaGFzT3B0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyUmVwb3J0Q29udGVudE9wdGlvbigpXHJcbiAgICB9XHJcbiAgICAvLyB3b3JkIOaooeWdl+W5tuS4lOaYr+aJuemHjyDkuItcclxuICAgIGlmIChJU19CQVRDSERPV05MT0FEKSB7XHJcbiAgICAgICQoJyNoX3N1Ym1pdEJ0biAuZW5zdXJlJykuc2hvdygpXHJcbiAgICAgICQoJyNoX3N1Ym1pdEJ0biAuY3JlYXRlJykuaGlkZSgpXHJcbiAgICAgIGlmIChkb3duTG9hZFR5cGUgPT0gMSkge1xyXG4gICAgICAgICQoJyNoX3N1Ym1pdEJ0biAuZW5zdXJlJykuaGlkZSgpXHJcbiAgICAgICAgJCgnI2hfc3VibWl0QnRuIC5jcmVhdGUnKS5zaG93KClcclxuICAgICAgfVxyXG4gICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIOaVmeWtpuWunSDplJnpopjliY3ljYEg5rKh5pyJ6YCJ6aG5IGluaXRcclxuICAgICAqL1xyXG4gICAgZGVidWdnZXJcclxuICAgICQoJyNzZXR0aW5nIC5jYW5zZWxPcHRpb25zJylbaGFzT3B0aW9uID8gJ3Nob3cnIDogJ2hpZGUnXSgpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBleGNlbCDmnInlubTnuqflubPlnYfliIbpgInpobkgaW5pdFxyXG4gICAgICovXHJcbiAgICAkKCcuZXhjZWxPcHRpb24nKVtcclxuICAgICAgZG93bkxvYWRUeXBlID09IHRoaXMuZG93bkxvYWRUeXBlLmV4Y2VsID8gJ3Nob3cnIDogJ2hpZGUnXHJcbiAgICBdKClcclxuICAgIC8v6buY6K6k5LiN6YCJ5Lit5paH57u855CG57u85Y2V56eR5oiQ57up5piO57uG5oql6KGoIOmdnuaWh+e7vOeQhue7vOayoeaciei/meS4qumAiemhuVxyXG4gICAgaWYgKHRoaXMuaXNXZW5MaUFsbCkge1xyXG4gICAgICAvL+aWh+eQhue7vOWNleenkeaIkOe7qeaYjue7huihqFxyXG4gICAgICAkKCcjc3ViamVjdFJlcG9ydCAuaF9jaGVja0l0ZW0nKS5yZW1vdmVDbGFzcygnY2hlY2tlZCcpXHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX0JBVENIRE9XTkxPQUQpIHtcclxuICAgICAgLy/mlZnlrablrp3mmK/lkKblj6/ku6XkuIvovb3nmoTnirbmgIHliKTmlq1jXHJcbiAgICAgIC8v5Y2V5Liq5LiL6L296Zmk5LqG5pWw5a2mIOWFtuS7luenkeebrumDveayoeaciemUmemimOWJjeWNgVxyXG4gICAgICAvL2xldCBpc0Rvd25Mb2FkRXJyb3IgPSAhdGhpcy5pc01hdGhTdWJqZWN0ICYmIGRvd25Mb2FkVHlwZSA9PSA0XHJcbiAgICAgICQoJyNub3NldHRpbmcnKVxyXG4gICAgICAgIFtoYXNPcHRpb24gPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2ZsZXgnKVxyXG4gICAgICAgIC5jaGlsZHJlbignc3Ryb25nJylcclxuICAgICAgICAuaHRtbCh0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2VbZG93bkxvYWRUeXBlXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB7IHdvcmQsIGV4Y2VsLCB0ZWFjaGVyLCBlcnJvciB9ID0gdGhpcy5kb3duTG9hZFR5cGVcclxuICAgICAgbGV0IHJlcG9ydE5hbWVNYXAgPSB7XHJcbiAgICAgICAgW3dvcmRdOiAnd29yZCcsXHJcbiAgICAgICAgW2V4Y2VsXTogJ2V4Y2VsJyxcclxuICAgICAgICBbdGVhY2hlcl06ICd0ZWFjaGVyJyxcclxuICAgICAgICBbZXJyb3JdOiAnZXJyb3InXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVSZW5kZXJFeGFtTGlzdERhdGEocmVwb3J0TmFtZU1hcFtkb3duTG9hZFR5cGVdKVxyXG4gICAgICAvL0lTX1RISURSRCAmJiB0aGlzLnN1YmplY3RJZCAhPSAnOCdcclxuICAgICAgLy/mibnph4/kuIvovb0g6Zmk5LqG5pWw5a2m5YW25LuW56eR55uuIOaVmeWtpuWunT09Pj7kuI3mlK/mjIHkuIvovb0gIOmUmemimOWJjeWNgT09Pj7mmoLmnKrkuIrnur/or6Xlip/og71cclxuICAgICAgaWYgKCF0aGlzLmlzTWF0aFN1YmplY3QpIHtcclxuXHJcbiAgICAgICAgLy/mlZnlrablrp3mmK/lkKblj6/ku6XkuIvovb3nmoTnirbmgIHliKTmlq1jXHJcbiAgICAgICAgJCgnI25vc2V0dGluZycpXHJcbiAgICAgICAgICBbaGFzT3B0aW9uIHx8IGlzVGVhY2hlciA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXSgnZmxleCcpXHJcbiAgICAgICAgICAuY2hpbGRyZW4oJ3N0cm9uZycpXHJcbiAgICAgICAgICAuaHRtbCh0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2VbZG93bkxvYWRUeXBlXSlcclxuICAgICAgICAkKCcjZXhhbUNsYXNzQm94JylbaGFzT3B0aW9uIHx8IGlzVGVhY2hlciA/ICdzaG93JyA6ICdoaWRlJ10oKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi8vIOaJuemHj+S4i+i9veWIl+ihqOW8ueahhlxyXG5jbGFzcyBEb3duTG9hZExpc3RNb2RlbCBleHRlbmRzIG1peChUcGxzLCBBcGkpIHtcclxuICBjb25zdHJ1Y3RvcihzdWJqZWN0SWQpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0ge1xyXG4gICAgICAgIHBhZ2U6MSxcclxuICAgICAgICBwYWdlTGltaXQ6MTAsXHJcbiAgICAgICAgc3ViamVjdElkOnN1YmplY3RJZCxcclxuICAgICAgICBzdGF0dXM6JydcclxuICAgIH1cclxuICAgIHRoaXMubGlzdERhdGEgPSBbXVxyXG5cclxuICAgIHRoaXMuc2VsTGlzdERhdGEgPSBbXVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU3ViamVjdHMgPSB7fVxyXG5cclxuICAgIHRoaXMuZXZlbnRCaW5kKClcclxuXHJcbiAgICB0aGlzLmdldExpc3QoKVxyXG4gIH1cclxuICBhc3luYyBnZXRMaXN0KHBhZ2UgPSAxKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgc2VsZi5zZWFyY2hQYXJhbXMucGFnZSA9IHBhZ2U7XHJcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc2VsZi5nZXREb3dubG9hZFByb2dyZXNzKHNlbGYuc2VhcmNoUGFyYW1zKVxyXG4gICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0KVxyXG4gICAgc2VsZi5pbml0TGlzdFByb2dyZXNzKHJlcylcclxuICAgIC8v6LCD55So5YiG6aG1XHJcbiAgICBpZihyZXMucGFnZXMudG90YWxQYWdlIDw9IDEpe1xyXG4gICAgICAkKCcjaF9wYWdpbmF0aW9uJykuaGlkZSgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgICQoJyNoX3BhZ2luYXRpb24nKS5zaG93KClcclxuICAgICQoJyNoX3BhZ2luYXRpb24nKS5wYWdpbmF0aW9uKHtcclxuICAgICAgcGFnZUNvdW50OiByZXMucGFnZXMudG90YWxQYWdlLFxyXG4gICAgICBqdW1wOiB0cnVlLFxyXG4gICAgICBjYWxsYmFjazogYXBpID0+IHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGFwaS5nZXRDdXJyZW50KCkpXHJcbiAgICAgICAgc2VsZi5zZWFyY2hQYXJhbXMucGFnZSA9IGFwaS5nZXRDdXJyZW50KClcclxuICAgICAgICBzZWxmLmdldERvd25sb2FkUHJvZ3Jlc3Moc2VsZi5zZWFyY2hQYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdClcclxuICAgICAgICAgIHNlbGYuaW5pdExpc3RQcm9ncmVzcyhyZXMpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAvL+iOt+WPluW9k+WJjemhtemdolxyXG4gICAgICAgIC8vYXBpLmdldEN1cnJlbnQoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBpbml0TGlzdFByb2dyZXNzKHJlcykge1xyXG4gICAgdGhpcy5zZWxMaXN0RGF0YSA9IFtdXHJcbiAgICB0aGlzLmxpc3REYXRhID0gdGhpcy5mb3JtYXREYXRhKHJlcy5kYXRhLmxpc3REYXRhKVxyXG4gICAgaWYoIU9iamVjdC5rZXlzKHRoaXMuc2VhcmNoU3ViamVjdHMpLmxlbmd0aCl7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGaWx0ZXJTdWJqZWN0KHJlcy5zdWJqZWN0cyxyZXMuc2Vzc2lvblN1YmplY3RJZClcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyTGlzdCgpXHJcbiAgfVxyXG4gIGZvcm1hdERhdGEoZGF0YSkge1xyXG4gICAgLy8yIHdvcmQgMWV4Y2VsIDMg5pWZ5a2m5a6dIDQg6ZSZ6aKY5paH5qGjXHJcbiAgICBsZXQgeyB3b3JkLCBleGNlbCwgdGVhY2hlciwgZXJyb3IgfSA9IHRoaXMuZG93bkxvYWRUeXBlXHJcbiAgICBjb25zdCBkb3dubG9hZE1hcCA9IHtcclxuICAgICAgW3dvcmRdOiAnd29yZCcsXHJcbiAgICAgIFtleGNlbF06ICdleGNlbCcsXHJcbiAgICAgIFt0ZWFjaGVyXTogJ+aVmeWtpuWunScsXHJcbiAgICAgIFtlcnJvcl06ICfplJnpopjmlofmoaMnXHJcbiAgICB9XHJcbiAgICBjb25zdCBjcmVhdGVTdGF0dXNNYXAgPSB7XHJcbiAgICAgIDE6ICfmnKrnlJ/miJAnLFxyXG4gICAgICAyOiAn5bey55Sf5oiQJyxcclxuICAgICAgMzogJ+eUn+aIkOWksei0pScsXHJcbiAgICAgIDQ6ICfnlJ/miJDkuK0nXHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0RGF0YSA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGlsZW47IGkrKykge1xyXG4gICAgICBsZXQgZXhhbU5hbWUgPSBkYXRhW2ldLmV4YW1OYW1lXHJcbiAgICAgIGxldCB0YXNrID0gZGF0YVtpXS50YXNrXHJcbiAgICAgIGZvciAobGV0IGogPSAwLCBqbGVuID0gdGFzay5sZW5ndGg7IGogPCBqbGVuOyBqKyspIHtcclxuICAgICAgICB0YXNrW2pdID0ge1xyXG4gICAgICAgICAgLi4udGFza1tqXSxcclxuICAgICAgICAgIGV4YW1OYW1lOiBleGFtTmFtZSxcclxuICAgICAgICAgIGNsYXNzTGVuZ3RoOiB0YXNrW2pdLmNsYXNzLmxlbmd0aCxcclxuICAgICAgICAgIGNsYXNzTGlzdDogdGFza1tqXS5jbGFzcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgaXNIaWRlOiB0YXNrW2pdLmVycm9yTXNnID8gJycgOiAnaGlkZScsXHJcbiAgICAgICAgICBkb3dubG9hZE5hbWU6IGRvd25sb2FkTWFwW3Rhc2tbal0uZG93bmxvYWRUeXBlXSxcclxuICAgICAgICAgIGlzRGlzYWJlbGQ6IHRhc2tbal0uc3RhdHVzID09ICcyJyA/ICcnIDogJ2Rpc2FibGVkJyxcclxuICAgICAgICAgIGNvbXBsZXRlZFN0YXR1czogY3JlYXRlU3RhdHVzTWFwW3Rhc2tbal0uc3RhdHVzXSxcclxuICAgICAgICAgIGlzU2hvdzp0YXNrW2pdLmRvd25sb2FkVHlwZSA9PSAyID8gJ2lzU2hvdycgOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHREYXRhLnB1c2godGFza1tqXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdERhdGFcclxuICB9XHJcbiAgLy/muLLmn5Plrabnp5HnrZvpgInmnaHku7ZcclxuICByZW5kZXJGaWx0ZXJTdWJqZWN0KHN1YmplY3RzLGRlZmF1bHRTdWJqZWN0SWQpe1xyXG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3RzID0gc3ViamVjdHM7XHJcbiAgICAgIGxldCBzdWJqZWN0T3B0aW9ucyA9ICcnO1xyXG4gICAgICBmb3IobGV0IHN1YmplY3RJZCBpbiBzdWJqZWN0cyl7XHJcbiAgICAgICAgbGV0IGlzRGVmYXVsdE9wdGlvbiA9IHN1YmplY3RJZCA9PT0gZGVmYXVsdFN1YmplY3RJZDtcclxuICAgICAgICBzdWJqZWN0T3B0aW9ucys9YDxvcHRpb24gdmFsdWU9XCIke3N1YmplY3RJZH1cIiAke2lzRGVmYXVsdE9wdGlvbj8nc2VsZWN0ZWQnOicnfT4ke3N1YmplY3RzW3N1YmplY3RJZF19PC9vcHRpb24+YFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VhcmNoUGFyYW1zLnN1YmplY3RJZCA9IGRlZmF1bHRTdWJqZWN0SWQ7XHJcbiAgICAgICQoJyNzdWJqZWN0RmlsdGVyJykuaHRtbChzdWJqZWN0T3B0aW9ucylcclxuICB9XHJcbiAgcmVuZGVyTGlzdCgpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5saXN0RGF0YVxyXG4gICAgbGV0IGRvd25MaXN0SHRtbCA9ICcnXHJcbiAgICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XHJcbiAgICAgIGRvd25MaXN0SHRtbCArPSB0aGlzLmRvd25Mb2FkTGlzdEl0ZW1UcGwuc3Vic3RpdHV0ZShkYXRhW2ldKVxyXG4gICAgfVxyXG4gICAgaWYgKCFkb3duTGlzdEh0bWwpIHtcclxuICAgICAgZG93bkxpc3RIdG1sID0gdGhpcy5ub3Rhc2tUcGxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvd25MaXN0SHRtbCArPSB0aGlzLmJhdGNoQ2hlY2tBbGxUcGxcclxuICAgIH1cclxuICAgICQoJyNkb3duTG9hZExpc3QnKS5odG1sKGRvd25MaXN0SHRtbClcclxuICAgIHRoaXMudXBkYXRlTGlzdENoZWNrQ291bnQoKVxyXG4gIH1cclxuICB1cGRhdGVMaXN0Q2hlY2tDb3VudCgpIHtcclxuICAgIGxldCB0b3RhbENvdW50ID0gdGhpcy5saXN0RGF0YS5maWx0ZXIodiA9PiB2LnN0YXR1cyA9PT0gJzInKS5sZW5ndGhcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5kb3duTG9hZExpc3RDaGVjaywge1xyXG4gICAgICB0b3RhbENvdW50OiB0b3RhbENvdW50LFxyXG4gICAgICBjaGVja2VkSXRlbXNDb3VudDogMFxyXG4gICAgfSlcclxuICB9XHJcbiAgZGVsRG93bmxvYWQoaWRzLCBjYikge1xyXG4gICAgdGhpcy5kZWxUYXNrKHsgaWRzIH0pXHJcbiAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKVxyXG4gICAgICB9KVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgY2IocmVzdWx0KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmVycm9yKGVycilcclxuICAgICAgfSlcclxuICB9XHJcbiAgZXZlbnRCaW5kKCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgICQoJ2JvZHknKS5hcHBlbmQoZG93bkxvYWRNb2R1bGVMaXN0VHBsKVxyXG4gICAgdGhpcy5kb3duTG9hZExpc3RDaGVjayA9IG5ldyBDaGVja0JveEl0ZW0oXHJcbiAgICAgICQoJyNkb3duTG9hZExpc3QnKSxcclxuICAgICAgKCRjaGVja0FsbEl0ZW0sIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsTGlzdERhdGEgPSBzdGF0dXMgPyBzaW1wbGVDb3B5KHRoaXMubGlzdERhdGEpIDogW11cclxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ+aKpeihqOWGheWuuemAiemhuScsIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlKVxyXG4gICAgICB9LFxyXG4gICAgICAoJGNoZWNrSXRlbSwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cklkID0gJGNoZWNrSXRlbS5hdHRyKCdkYXRhLWlkJylcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICBsZXQgY2hlY2tJdGVtID0gdGhpcy5saXN0RGF0YS5maW5kKHYgPT4gdi5pZCA9PT0gY3VySWQpXHJcbiAgICAgICAgICB0aGlzLnNlbExpc3REYXRhLnB1c2goY2hlY2tJdGVtKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY2hlY2tJbmRleCA9IHRoaXMuc2VsTGlzdERhdGEuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gY3VySWQpXHJcbiAgICAgICAgICB0aGlzLnNlbExpc3REYXRhLnNwbGljZShjaGVja0luZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ+aKpeihqOWGheWuuemAiemhuScsIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlKVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgLy/kv67mlLnnrZvpgInmnaHku7ZcclxuICAgICQoJyNzdWJqZWN0RmlsdGVyJykuY2hhbmdlKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2VsZi5zZWFyY2hQYXJhbXMuc3ViamVjdElkID0gJCh0aGlzKS52YWwoKVxyXG4gICAgICAgIHNlbGYuZ2V0TGlzdCgpXHJcbiAgICB9KVxyXG4gICAgJCgnI3N0YXR1c0ZpbHRlcicpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgIHNlbGYuc2VhcmNoUGFyYW1zLnN0YXR1cyA9ICQodGhpcykudmFsKClcclxuICAgICAgICBzZWxmLmdldExpc3QoKVxyXG4gICAgfSlcclxuXHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICQoJyNkb3duTG9hZExpc3QnKS5vbignY2xpY2snLCAnLmRvd25Mb2FkSW5mbyAuaGJ0bnMgLnNpbmdsZUJ0bicsIGZ1bmN0aW9uKFxyXG4gICAgICBldmVudFxyXG4gICAgKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgIGxldCBjdXJJZCA9ICQodGhpcykuYXR0cignZGF0YS1pZCcpXHJcbiAgICAgIC8v5Yig6ZmkXHJcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdkZWwnKSkge1xyXG4gICAgICAgIHNlbGYuZGVsRG93bmxvYWQoW2N1cklkXSwgcmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgICBsZXQgZGVsSW5kZXggPSBzZWxmLmxpc3REYXRhLmZpbmRJbmRleCh2ID0+IHYuaWQgPT09IGN1cklkKVxyXG4gICAgICAgICAgc2VsZi5saXN0RGF0YS5zcGxpY2UoZGVsSW5kZXgsIDEpXHJcblxyXG4gICAgICAgICAgaWYoIXNlbGYubGlzdERhdGEubGVuZ3RoKXtcclxuICAgICAgICAgICAgc2VsZi5nZXRMaXN0KClcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzZWxmLnJlbmRlckxpc3QoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5oYXNDbGFzcygnY3JlYXRlJykpIHsgLy/miZPljbBcclxuICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkgcmV0dXJuXHJcbiAgICAgICAgbGV0IGlkcyA9IHRoYXQubGlzdERhdGEuZmlsdGVyKHM9PnMuaWQgPT0gY3VySWQpXHJcbiAgICAgICAgbGV0IGRhdGEgPSAnJ1xyXG4gICAgICAgIGlmIChpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBpZHNbMF0ucHJpbnRcclxuICAgICAgICAgIH1cclxuICAgICAgICBldmFsdWF0aW9uQ2xpZW50LkJ1bGtQcmludFBERihKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuXHJcbiAgICAgIH0gZWxzZSB7IC8vIOS4i+i9vVxyXG4gICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSByZXR1cm5cclxuICAgICAgICBsZXQgemlwVXJsID0gJCh0aGlzKS5hdHRyKCdkYXRhLXppcFVybCcpXHJcbiAgICAgICAgbG9jYXRpb24uaHJlZiA9IHppcFVybFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgJCgnI2Rvd25Mb2FkTGlzdCcpLm9uKCdjbGljaycsICcuYmF0Y2hCdG5zIC5vcHJhdG9yQnRuJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgaWYgKCFzZWxmLnNlbExpc3REYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGhnY19sYXllci5hbGVydCgn6K+36YCJ5oup6ZyA6KaB5pON5L2c55qE6aG5JylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICAvL+aJuemHj+WIoOmZpFxyXG4gICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnbm90aWNlJykpIHtcclxuICAgICAgICBzZWxmLmRlbERvd25sb2FkKFxyXG4gICAgICAgICAgc2VsZi5zZWxMaXN0RGF0YS5tYXAodiA9PiB2LmlkKSxcclxuICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VsTGlzdERhdGEuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICBsZXQgY3VySW5kZXggPSBzZWxmLmxpc3REYXRhLmZpbmRJbmRleCgoeyBpZCB9KSA9PiBpZCA9PSB2LmlkKVxyXG4gICAgICAgICAgICAgIHNlbGYubGlzdERhdGEuc3BsaWNlKGN1ckluZGV4LCAxKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBzZWxmLnJlbmRlckxpc3QoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAkKCcuaGdjX3JlcG9ydCBoMi50aXRsZSAuaGNsb3NlJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgRG93bkxvYWRNb2RlbExpc3RJbnN0YW5jZSA9IG51bGxcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICAkKCcjZHluYW1pYy10YWJsZSAuZG93bmxvYWRGaWxlQnRuJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgIGlmKCQodGhpcykuYXR0cigndG9waWNfY291bnQnKSA+PSA0MCkge1xyXG4gICAgICAgIC8vIGhhc1hhNCBoYXNZYTMgaGFzWGEzXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAkKCcjaGFzWGE0Jykuc2hvdygpO1xyXG4gICAgICAgICAgJCgnI2hhc1lhMycpLmhpZGUoKTtcclxuICAgICAgICAgICQoJyNoYXNYYTMnKS5zaG93KCk7XHJcbiAgICAgICAgfSwyMClcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgJCgnI2hhc1hhNCcpLnNob3coKTtcclxuICAgICAgICAgICQoJyNoYXNZYTMnKS5zaG93KCk7XHJcbiAgICAgICAgICAkKCcjaGFzWGEzJykuc2hvdygpO1xyXG4gICAgICAgIH0sMjApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFJU19CQVRDSERPV05MT0FEKSB7XHJcbiAgICAgICAgbGV0IGRvd25Mb2FkVHlwZSA9ICQodGhpcykuYXR0cignZGF0YS1kb3dubG9hZFR5cGUnKVxyXG4gICAgICAgIGxldCBleGFtSWQgPSAkKHRoaXMpLmF0dHIoJ3JlbCcpXHJcbiAgICAgICAgbGV0IHN1YmplY3RJZCA9ICQodGhpcykuYXR0cignc3ViamVjdCcpXHJcbiAgICAgICAgbGV0IGNsYXNzSWQgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzX2lkJylcclxuICAgICAgICBsZXQgY29tcGxldGUgPSAkKHRoaXMpLmF0dHIoJ2NvbXBsZXRlJyk7XHJcbiAgICAgICAgRG93bkxvYWRNb2RlbEluc3RhbmNlID0gbmV3IERvd25Mb2FkTW9kZWwoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGV4YW1JZCxcclxuICAgICAgICAgICAgc3ViamVjdElkLFxyXG4gICAgICAgICAgICBjbGFzc0lkLFxyXG4gICAgICAgICAgICBkb3duTG9hZFR5cGUsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzdWJqZWN0SWQgPSAkKHRoaXMpLmF0dHIoJ3N1YmplY3QnKVxyXG4gICAgICAgIGxldCBleGFtSWQgPSAkKHRoaXMpLmF0dHIoJ3JlbCcpXHJcbiAgICAgICAgbGV0IGNvbXBsZXRlID0gJCh0aGlzKS5hdHRyKCdjb21wbGV0ZScpO1xyXG4gICAgICAgIERvd25Mb2FkTW9kZWxJbnN0YW5jZSA9IG5ldyBEb3duTG9hZE1vZGVsKHtcclxuICAgICAgICAgIGV4YW1JZCwgc3ViamVjdElkLGNvbXBsZXRlXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBpZigkKHRoaXMpLmF0dHIoJ2RhdGEtZG93bmxvYWRUeXBlJykgIT0gMil7XHJcbiAgICAgICAgJCgnI3Njb3JlRGlzcGxheVNldHRpbmdzJykuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgJCgnLnByb2dyZXNzX2J0bicpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBsZXQgc3ViamVjdElkID0gJCh0aGlzKS5hdHRyKCdzdWJqZWN0SWQnKVxyXG4gICAgICBEb3duTG9hZE1vZGVsTGlzdEluc3RhbmNlID0gbmV3IERvd25Mb2FkTGlzdE1vZGVsKHN1YmplY3RJZClcclxuICAgIH0pXHJcbn0pXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FDMUNBO0FBQ0E7QUFDQSxhQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7Ozs7QUN2SUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7O0FDMUVBO0FBZ1FBO0FBd0JBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBRUE7QUFDQTtBQUdBO0FBR0E7QUEwQkE7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")}]);