element-ui-wbi 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,11 +9,11 @@
9
9
  /******/ (function() { // webpackBootstrap
10
10
  /******/ var __webpack_modules__ = ({
11
11
 
12
- /***/ 2634:
12
+ /***/ 2601:
13
13
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
14
14
 
15
15
  "use strict";
16
- eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=6ae25121&scoped=true\nvar Indexvue_type_template_id_6ae25121_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_6ae25121_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n param: {\n ...newVal\n }\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n param: {\n ...this.defaultParams\n }\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n log(this);\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n const param = {\n ...this.params.param,\n ...params\n };\n this.params = {\n ...this.params,\n param\n };\n this.params.page = 1;\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=6ae25121&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=6ae25121&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_6ae25121_scoped_true_render,\n Indexvue_type_template_id_6ae25121_scoped_true_staticRenderFns,\n false,\n null,\n \"6ae25121\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(4100);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=0c5de06e&scoped=true\nvar Indexvue_type_template_id_0c5de06e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(\" \" + _vm._s(_vm.title) + \" \")]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\"\n }\n }, [_c('div', {\n staticStyle: {\n \"position\": \"absolute\",\n \"right\": \"0px\",\n \"top\": \"-14px\",\n \"width\": \"100%\",\n \"text-align\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)])]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_0c5de06e_scoped_true_render,\n Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns,\n false,\n null,\n \"0c5de06e\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n config.headers.authorization = localStorage.getItem('token');\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(3472);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QzZ1QixHQUFHLENBQUNDLGVBQWUsQ0FBQ0osSUFBSSxDQUFDO1FBQzVDQyxJQUFJLENBQUNJLFFBQVEsR0FBR3ZULGtCQUFrQixDQUFDMUwsUUFBUSxDQUFDO1FBQzVDNmUsSUFBSSxDQUFDbnJCLEtBQUssQ0FBQyxDQUFDO1FBQ1p4RCxNQUFNLENBQUM2dUIsR0FBRyxDQUFDRyxlQUFlLENBQUNMLElBQUksQ0FBQ25TLElBQUksQ0FBQztNQUN0QztJQUNLLENBQUMsQ0FBQztFQUNOO0FBQ0osQzs7QUN2SEF5UyxtQkFBTyxDQUFDLElBQW9CLENBQUM7QUFDbUI7QUFDRDtBQUNQO0FBQ0o7QUFDQTtBQUNBO0FBQ3BDLE1BQU1PLElBQUksR0FBRyxDQUFDTixLQUFVLEVBQUVDLGdCQUFTLEVBQUVDLFlBQU0sRUFBRUMsVUFBSSxFQUFFQyxVQUFJLENBQUM7QUFDeEQsTUFBTUcsT0FBTyxHQUFHLFNBQUFBLENBQVNud0IsR0FBRyxFQUFDO0VBQ3pCa3dCLElBQUksQ0FBQy90QixPQUFPLENBQUNpdUIsR0FBRyxJQUFJO0lBQ2hCcHdCLEdBQUcsQ0FBQ3F3QixTQUFTLENBQUNELEdBQUcsQ0FBQ3gzQixJQUFJLEVBQUV3M0IsR0FBRyxDQUFDO0VBQ2hDLENBQUMsQ0FBQztBQUNOLENBQUM7O0FBRUQ7QUFDQSwrQ0FBZUQsT0FBTyxFQUFDO0FBRWhCLE1BQU1uQyxJQUFJLFNBQVNpQyxTQUFLO0VBQzNCbm9CLFdBQVdBLENBQUNpSyxPQUFPLEVBQUM7SUFDaEIsS0FBSyxDQUFDQSxPQUFPLENBQUM7RUFDbEI7QUFDSixDOztBQ3JCd0I7QUFDQTtBQUN4Qiw4Q0FBZSxVQUFHO0FBQ0kiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0B2dWUvY2xpLXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL3NldFB1YmxpY1BhdGguanM/NjljYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/MjczMyIsIndlYnBhY2s6Ly92dWUyL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlPzNjNWUiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlPzgyYWYiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2Q0ZDAiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2U4MjgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/MmY4NSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZmIxZCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/MDhiYSIsIndlYnBhY2s6Ly92dWUyL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzVkMDMiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzc3NGEiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzQ5NmEiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzllMmEiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzM4YTAiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/MGU3MSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy1kcmFnLmpzPzVlYmQiLCJ3ZWJwYWNrOi8vdnVlMi9zcmMvY29tcG9uZW50cy9kaWFsb2cvSW5kZXgudnVlPzRkYjYiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/MjBlNyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT84Nzc0Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvSW5kZXgudnVlP2IzOWYiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/NjExOCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZTdmYSIsIndlYnBhY2s6Ly92dWUyL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2MxZmIiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlPzMwYmIiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2U5NTgiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2YxMmQiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2YzMzUiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlPzkwOWMiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL3RyZWUvdHJlZS5qcz80MmM2Iiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/YmY2NiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/MTU0YiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/ZTZiMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/YThkMiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/N2EwMSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24uanM/Yjg1ZiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMuanM/Y2ZkYSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydENsYXNzQnJhbmQuanM/MTlmOCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzUHJpdmF0ZUZpZWxkU2V0Mi5qcz80NGJmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRHZXQyLmpzPzkyOWUiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzPzRiZWEiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanM/YzllYiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanM/MjAyNyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanM/MWE5NCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanM/OWJhMyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzPzkzZTIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcz9jMTc4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzP2M3OTIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzPzI3YTQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcz9hMGVkIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcz8xZGI5Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzPzZkNzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcz9iMmU0Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcz9iZjhjIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzPzc4ZjEiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzPzhmZTkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcz9mNDM3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzP2ZmMTAiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NTRlOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcz85NTk3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz83NjYyIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9jMTdhIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzPzY4YTQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanM/ODc2OCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/MWQzZiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanM/YTIyNyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzPzZiYzYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzP2YwMmQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanM/ODc5NSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanM/OWZhYyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzPzU5YzAiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzPzFhNWMiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanM/NzgyNSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcz80ZGM5Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanM/YmQxMyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcz8xMTBmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzPzAxMzIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcz8yOWZiIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz83MmM4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzPzI3MjkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanM/YmQ5ZCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzP2M2ZjMiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanM/ZmFkNiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvaHR0cC9pbmRleC5qcz9jYzZhIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9pbmRleC5qcz8xNTY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQHZ1ZS9jbGktc2VydmljZS9saWIvY29tbWFuZHMvYnVpbGQvZW50cnktbGliLmpzPzhhOTciXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBUaGlzIGZpbGUgaXMgaW1wb3J0ZWQgaW50byBsaWIvd2MgY2xpZW50IGJ1bmRsZXMuXG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgY3VycmVudFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gIGlmIChwcm9jZXNzLmVudi5ORUVEX0NVUlJFTlRTQ1JJUFRfUE9MWUZJTEwpIHtcbiAgICB2YXIgZ2V0Q3VycmVudFNjcmlwdCA9IHJlcXVpcmUoJ0Bzb2RhL2dldC1jdXJyZW50LXNjcmlwdCcpXG4gICAgY3VycmVudFNjcmlwdCA9IGdldEN1cnJlbnRTY3JpcHQoKVxuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJlY2F1c2UgcHJldmlvdXNseSB3ZSBkaXJlY3RseSBpbmNsdWRlZCB0aGUgcG9seWZpbGxcbiAgICBpZiAoISgnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICdjdXJyZW50U2NyaXB0JywgeyBnZXQ6IGdldEN1cnJlbnRTY3JpcHQgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgc3JjID0gY3VycmVudFNjcmlwdCAmJiBjdXJyZW50U2NyaXB0LnNyYy5tYXRjaCgvKC4rXFwvKVteL10rXFwuanMoXFw/LiopPyQvKVxuICBpZiAoc3JjKSB7XG4gICAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBzcmNbMV0gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG59XG5cbi8vIEluZGljYXRlIHRvIHdlYnBhY2sgdGhhdCB0aGlzIGZpbGUgY2FuIGJlIGNvbmNhdGVuYXRlZFxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0udG90YWw+MCk/X2MoJ2RpdicsW19jKCdlbC1wYWdpbmF0aW9uJyxfdm0uX2Ioe2F0dHJzOntcImJhY2tncm91bmRcIjpcIlwiLFwiY3VycmVudC1wYWdlXCI6X3ZtLmN1cnJlbnRQYWdlLFwicGFnZS1zaXplXCI6X3ZtLnBhZ2VTaXplLFwicGFnZS1zaXplc1wiOl92bS5wYWdlU2l6ZXMsXCJ0b3RhbFwiOl92bS50b3RhbCxcImxheW91dFwiOlwicHJldiwgcGFnZXIsIG5leHRcIn0sb246e1wic2l6ZS1jaGFuZ2VcIjpfdm0uaGFuZGxlU2l6ZUNoYW5nZSxcImN1cnJlbnQtY2hhbmdlXCI6X3ZtLmhhbmRsZUN1cnJlbnRDaGFuZ2V9fSwnZWwtcGFnaW5hdGlvbicsX3ZtLiRhdHRycyxmYWxzZSkpXSwxKTpfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZGl2IHYtaWY9XCJ0b3RhbD4wXCI+XHJcbiAgICAgICAgPGVsLXBhZ2luYXRpb25cclxuICAgICAgICAgICAgYmFja2dyb3VuZCBcclxuICAgICAgICAgICAgOmN1cnJlbnQtcGFnZT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZXM9XCJwYWdlU2l6ZXNcIlxyXG4gICAgICAgICAgICA6dG90YWw9XCJ0b3RhbFwiXHJcbiAgICAgICAgICAgIGxheW91dD1cInByZXYsIHBhZ2VyLCBuZXh0XCJcclxuICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgQHNpemUtY2hhbmdlPVwiaGFuZGxlU2l6ZUNoYW5nZVwiXHJcbiAgICAgICAgICAgIEBjdXJyZW50LWNoYW5nZT1cImhhbmRsZUN1cnJlbnRDaGFuZ2VcIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgICBleHBvcnQgZGVmYXVsdCB7XHJcbiAgICAgICAgbmFtZTogJ1BhZ2luYXRpb24nLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIHRvdGFsOiB7XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsaW1pdDoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMjBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemVzOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsxMCwgMTUsIDIwLCAzMCwgNTBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBjdXJyZW50UGFnZToge1xyXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGltaXRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOmxpbWl0JywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbENvdW50OiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRvdGFsJywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIGhhbmRsZVNpemVDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCBsaW1pdDogdmFsIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB2YWwsIGxpbWl0OiB0aGlzLnBhZ2VTaXplIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uZWwtcGFnaW5hdGlvbntcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNmI3MGZiNCZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yNmI3MGZiNCZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIyNmI3MGZiNFwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJwYWdlLXRhYmxlXCIsYXR0cnM6e1wiaWRcIjp0aGlzLnRhYmxlSWR9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidGFibGVcIn0sW19jKCdlbC1zY3JvbGxiYXInLHtzdGF0aWNTdHlsZTp7XCJoZWlnaHRcIjpcIjEwMCVcIn19LFtfYygnZWwtdGFibGUnLF92bS5fYih7cmVmOl92bS50YWJsZUlkLGF0dHJzOntcInN0cmlwZVwiOlwiXCIsXCJkYXRhXCI6X3ZtLmxpc3QsXCJyb3cta2V5XCI6X3ZtLnJvd0tleSxcImxvYWRcIjpfdm0ubG9hZCxcImhpZ2hsaWdodC1jdXJyZW50LXJvd1wiOl92bS5obGlnaHRDdXJyZW50Um93LFwiZGVmYXVsdC1leHBhbmQtYWxsXCI6X3ZtLmRlZmF1bHRFeHBhbmRBbGx9LG9uOntcInNlbGVjdFwiOl92bS5oYW5kZWxTZWxlY3Rpb25DaGFuZ2UsXCJzZWxlY3QtYWxsXCI6X3ZtLnNlbGVjdEFsbCxcInJvdy1jbGlja1wiOl92bS5oYW5kbGVSb3dDbGljayxcImV4cGFuZC1jaGFuZ2VcIjp2YWw9Pl92bS4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbCl9fSwnZWwtdGFibGUnLF92bS4kYXR0cnMsZmFsc2UpLFsoX3ZtLnNob3dDaGVja0JveCk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcInNlbGVjdGlvblwiLFwid2lkdGhcIjpcIjYwcHhcIixcImFsaWduXCI6XCJjZW50ZXJcIn19KTpfdm0uX2UoKSwoX3ZtLnNvcnROdW0pP19jKCdlbC10YWJsZS1jb2x1bW4nLHthdHRyczp7XCJ0eXBlXCI6XCJpbmRleFwiLFwid2lkdGhcIjpcIjYwcHhcIixcImxhYmVsXCI6XCLluo/lj7dcIixcImFsaWduXCI6XCJjZW50ZXJcIn0sc2NvcGVkU2xvdHM6X3ZtLl91KFt7a2V5OlwiZGVmYXVsdFwiLGZuOmZ1bmN0aW9uKHNjb3BlKXtyZXR1cm4gWyhfdm0ucGFnZSk/X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKChfdm0ucGFyYW1zLnBhZ2UtMSkqX3ZtLnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMSkpXSk6X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKHNjb3BlLiRpbmRleCsxKSldKV19fV0sbnVsbCxmYWxzZSwyNzg2MDA4MDIxKX0pOl92bS5fZSgpLF92bS5fdChcImRlZmF1bHRcIildLDIpXSwxKV0sMSksKF92bS5wYWdlKT9fYygnUGFnaW5hdGlvbicse2F0dHJzOntcInRvdGFsXCI6X3ZtLnRvdGFsLFwicGFnZVwiOl92bS5wYXJhbXMucGFnZSxcImxpbWl0XCI6X3ZtLnBhcmFtcy5saW1pdH0sb246e1widXBkYXRlOnBhZ2VcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJHNldChfdm0ucGFyYW1zLCBcInBhZ2VcIiwgJGV2ZW50KX0sXCJwYWdpbmF0aW9uXCI6X3ZtLmdldExpc3R9fSk6X3ZtLl9lKCldLDEpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLXRhYmxlXCIgOmlkPVwidGhpcy50YWJsZUlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxlbC1zY3JvbGxiYXIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxlbC10YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIHYtYmluZD1cIiRhdHRyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBlXHJcbiAgICAgICAgICAgICAgICAgICAgOnJlZj1cInRhYmxlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkYXRhPVwibGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnJvdy1rZXk9XCJyb3dLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpsb2FkPVwibG9hZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmhpZ2hsaWdodC1jdXJyZW50LXJvdz1cImhsaWdodEN1cnJlbnRSb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3Q9XCJoYW5kZWxTZWxlY3Rpb25DaGFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3QtYWxsPVwic2VsZWN0QWxsXCJcclxuICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdC1leHBhbmQtYWxsPVwiZGVmYXVsdEV4cGFuZEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHJvdy1jbGljaz1cImhhbmRsZVJvd0NsaWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBAZXhwYW5kLWNoYW5nZT1cInZhbD0+JGVtaXQoJ2V4cGFuZC1jaGFuZ2UnLCB2YWwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic2hvd0NoZWNrQm94XCIgdHlwZT1cInNlbGVjdGlvblwiIHdpZHRoPVwiNjBweFwiIGFsaWduPVwiY2VudGVyXCI+PC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic29ydE51bVwiIHR5cGU9XCJpbmRleFwiIHdpZHRoPVwiNjBweFwiIGxhYmVsPVwi5bqP5Y+3XCIgYWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHNsb3Qtc2NvcGU9XCJzY29wZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInBhZ2VcIj57eyhwYXJhbXMucGFnZS0xKSpwYXJhbXMubGltaXQrc2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57e3Njb3BlLiRpbmRleCsxfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9lbC10YWJsZT5cclxuICAgICAgICAgICAgPC9lbC1zY3JvbGxiYXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPFBhZ2luYXRpb24gdi1pZj1cInBhZ2VcIiA6dG90YWw9XCJ0b3RhbFwiIDpwYWdlLnN5bmM9XCJwYXJhbXMucGFnZVwiIDpsaW1pdD1cInBhcmFtcy5saW1pdFwiIEBwYWdpbmF0aW9uPVwiZ2V0TGlzdFwiIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ1BhZ2VUYWJsZScsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIC8vIOiHquWumuS5ieaVsOaNrlxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguWcsOWdgFxyXG4gICAgICAgIHVybDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDor7fmsYLmlrnlvI9cclxuICAgICAgICBtZXRob2Q6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnZ2V0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5piv5ZCm5pi+56S65bqP5Y+3XHJcbiAgICAgICAgc29ydE51bToge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbliIbpobVcclxuICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOagkeW9ouihqOagvOaXtu+8jOaYr+WQpuWFqOmDqOWxleW8gFxyXG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWIneWni+ivt+axguWPguaVsFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXM6IHtcclxuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+KHt9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6buY6K6k6YCJ5Lit5pWw5o2uXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PltdXHJcbiAgICAgICAgfSxcclxuICAgICAgICByb3dLZXk6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnaWQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBobGlnaHRDdXJyZW50Um93OiB7XHJcbiAgICAgICAgICAgIHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBkYXRhKG5ld1ZhbCl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IG5ld1ZhbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRTZWxlY3Q6IHtcclxuICAgICAgICAgICAgaGFuZGxlcigpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlZXA6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXMobmV3VmFsLCBvbGRWYWwpe1xyXG4gICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG5ld1ZhbCl7XHJcbiAgICAgICAgICAgICAgICBpZihuZXdWYWxba2V5XSAhPSBvbGRWYWxba2V5XSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7cGFnZTogMSwgbGltaXQ6IDE1LCBwYXJhbTogey4uLm5ld1ZhbH19O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiAxNSxcclxuICAgICAgICAgICAgICAgIHBhcmFtOiB7Li4udGhpcy5kZWZhdWx0UGFyYW1zfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgbGlzdDogW10sXHJcbiAgICAgICAgICAgIHRhYmxlSWQ6IGB0YWJsZV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNil9YCxcclxuICAgICAgICAgICAgc2VsZWN0RGF0YToge30sXHJcbiAgICAgICAgICAgIHNlbGVjdElkczogW11cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBsb2codGhpcyk7XHJcbiAgICAgICAgaWYodGhpcy4kbGlzdGVuZXJzWydzZWxlY3Rpb24tY2hhbmdlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDaGVja0JveCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IHRoaXMuZGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmRlZmF1bHRTZWxlY3Qpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIC8vIOiOt+WPluaVsOaNrlxyXG4gICAgICAgIGdldExpc3QocGFnZU9wdGlvbil7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnVybCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocGFnZU9wdGlvbil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5wYWdlID0gcGFnZU9wdGlvbi5wYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMubGltaXQgPSBwYWdlT3B0aW9uLmxpbWl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJhbXMubGltaXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZVBhcmFtcyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy4kcm91dGUucGF0aCk7XHJcbiAgICAgICAgICAgIGlmKHN0b3JhZ2VQYXJhbXMpe1xyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLiRyb3V0ZS5wYXRoLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLm1ldGhvZCl7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdnZXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGh0dHAuZ2V0KHRoaXMudXJsLCB0aGlzLnBhcmFtcywgKHJlcyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncG9zdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaHR0cC5wb3N0KHRoaXMudXJsLCB0aGlzLnBhcmFtcywgKHJlcyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX3NldERhdGEocmVzKXtcclxuICAgICAgICAgICAgaWYodGhpcy5wYWdlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IHJlcy5kYXRhLnJlY29yZHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gcmVzLmRhdGEudG90YWw7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDorr7nva7pu5jorqTpgInkuK1cclxuICAgICAgICBzZXRDaGVja2VkKCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFNlbGVjdC5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHRoaXMuZGVmYXVsdFNlbGVjdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNob3dDaGVja0JveCAmJiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOm7mOiupOmAieS4reaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdElkcy5pbmNsdWRlcyhpdGVtW3RoaXMucm93S2V5XSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmnaHku7bmn6Xor6JcclxuICAgICAgICBxdWVyeShwYXJhbXM9e30pe1xyXG4gICAgICAgICAgICBpZihPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gey4uLnRoaXMucGFyYW1zLnBhcmFtLCAuLi5wYXJhbXN9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7Li4udGhpcy5wYXJhbXMsIHBhcmFtfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g54K55Ye76KGMXHJcbiAgICAgICAgaGFuZGxlUm93Q2xpY2socm93LCBjb2x1bW4sIGV2ZW50KXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgncm93LWNsaWNrJywgcm93LCBjb2x1bW4sIGV2ZW50KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRlbFNlbGVjdGlvbkNoYW5nZShfLCByb3cpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV0pe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV0gPSByb3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTGlzdCA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3REYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBzZWxlY3Rpb25MaXN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsIHNlbGVjdGlvbkxpc3QpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5YWo6YCJL+WFqOS4jemAiVxyXG4gICAgICAgIHNlbGVjdEFsbChzZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICBpZihzZWxlY3Rpb24ubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkxpc3QgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gc2VsZWN0aW9uTGlzdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb25MaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldEN1cnJlbnQoaW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnNldEN1cnJlbnRSb3codGhpcy5saXN0W2luZGV4XSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXREYXRhKCl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Q7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsb2FkKHRyZWUsIHRyZWVOb2RlLCByZXNvbHZlKXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnbG9hZCcsIHRyZWUsIHRyZWVOb2RlLCByZXNvbHZlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbiAgICAucGFnZS10YWJsZXtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgZmxleDogMSAxIGF1dG87XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgLnRhYmxle1xyXG4gICAgICAgICAgICBmbGV4OiBhdXRvIDEgMTtcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlIHRoZWFke1xyXG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxse1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY3RkE7XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUtLW1pbmkgLmVsLXRhYmxlX19jZWxse1xyXG4gICAgICAgIHBhZGRpbmc6IDNweCAwO1xyXG4gICAgfVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmFlMjUxMjEmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZhZTI1MTIxJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTZhZTI1MTIxJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjZhZTI1MTIxXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdlbC1kaWFsb2cnLF92bS5fYih7ZGlyZWN0aXZlczpbe25hbWU6XCJkaWFsb2dEcmFnXCIscmF3TmFtZTpcInYtZGlhbG9nRHJhZ1wifV0sc3RhdGljU3R5bGU6e1wibWFyZ2luLXRvcFwiOlwiMFwifSxhdHRyczp7XCJ0aXRsZVwiOl92bS50aXRsZSxcInZpc2libGVcIjpfdm0uZGlhbG9nVmlzaWJsZSxcImJlZm9yZS1jbG9zZVwiOl92bS5oYW5kbGVDbG9zZSxcImNlbnRlclwiOlwiXCIsXCJjbG9zZS1vbi1jbGljay1tb2RhbFwiOmZhbHNlLFwic2hvdy1jbG9zZVwiOl92bS5zaG93Q2xvc2UsXCJhcHBlbmQtdG8tYm9keVwiOlwiXCJ9fSwnZWwtZGlhbG9nJyxfdm0uJGF0dHJzLGZhbHNlKSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcIm92ZXJmbG93LXlcIjpcImF1dG9cIixcIm92ZXJmbG93LXhcIjpcImhpZGRlblwiLFwicG9zaXRpb25cIjpcInJlbGF0aXZlXCJ9LHN0eWxlOih7bWF4SGVpZ2h0OiBfdm0ubWF4SGVpZ2h0LCBtaW5IZWlnaHQ6IF92bS5taW5IZWlnaHR9KX0sW192bS5fdChcImRlZmF1bHRcIildLDIpLF9jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJ0ZXh0LWFsaWduXCI6XCJjZW50ZXJcIn0sYXR0cnM6e1wic2xvdFwiOlwiZm9vdGVyXCJ9LHNsb3Q6XCJmb290ZXJcIn0sW192bS5fdChcImZvb3RlclwiKV0sMildKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvLyB2LWRpYWxvZ0RyYWc6IOW8ueeql+aLluaLvVxyXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XHJcblZ1ZS5kaXJlY3RpdmUoJ2RpYWxvZ0RyYWcnLCB7XHJcbiAgICBiaW5kKGVsKSB7XHJcblx0XHRjb25zdCBkaWFsb2dIZWFkZXJFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kaWFsb2dfX2hlYWRlcicpO1xyXG5cdFx0Y29uc3QgZHJhZ0RvbSA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kaWFsb2cnKTtcclxuXHRcdGRpYWxvZ0hlYWRlckVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcclxuXHJcblx0XHQvLyDojrflj5bljp/mnInlsZ7mgKcgaWUgZG9t5YWD57SgLmN1cnJlbnRTdHlsZSDngavni5DosLfmrYwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9t5YWD57SgLCBudWxsKTtcclxuXHRcdGNvbnN0IHN0eSA9IGRyYWdEb20uY3VycmVudFN0eWxlIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRyYWdEb20sIG51bGwpO1xyXG5cclxuXHRcdGRpYWxvZ0hlYWRlckVsLm9ubW91c2Vkb3duID0gKGV2ZW50KT0+e1xyXG5cdFx0XHQvLyDpvKDmoIfmjInkuIvvvIzorqHnrpflvZPliY3lhYPntKDot53nprvlj6/op4bljLrnmoTot53nprtcclxuXHRcdFx0Y29uc3QgZGlzWCA9IGV2ZW50LmNsaWVudFggLSBkaWFsb2dIZWFkZXJFbC5vZmZzZXRMZWZ0O1xyXG5cdFx0XHRjb25zdCBkaXNZID0gZXZlbnQuY2xpZW50WSAtIGRpYWxvZ0hlYWRlckVsLm9mZnNldFRvcDtcclxuXHJcblx0XHRcdC8vIOiOt+WPluWIsOeahOWAvOW4pnB4IOato+WImeWMuemFjeabv+aNolxyXG5cdFx0XHRsZXQgc3R5TD1udWxsO1xyXG5cdFx0XHRsZXQgc3R5VD1udWxsO1xyXG5cclxuXHRcdFx0Ly8g5rOo5oSP5ZyoaWXkuK0g56ys5LiA5qyh6I635Y+W5Yiw55qE5YC85Li657uE5Lu26Ieq5bimNTAlIOenu+WKqOS5i+WQjui1i+WAvOS4unB4XHJcblx0XHRcdGlmIChzdHkubGVmdC5pbmNsdWRlcygnXFwlJykpIHtcclxuXHRcdFx0XHRzdHlMID0gK2RvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKiAoK3N0eS5sZWZ0LnJlcGxhY2UoL1xcJS9nLCAnJykgLyAxMDApO1xyXG5cdFx0XHRcdHN0eVQgPSArZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgKiAoK3N0eS50b3AucmVwbGFjZSgvXFwlL2csICcnKSAvIDEwMCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c3R5TCA9ICtzdHkubGVmdC5yZXBsYWNlKC9cXHB4L2csICcnKTtcclxuXHRcdFx0XHRzdHlUID0gK3N0eS50b3AucmVwbGFjZSgvXFxweC9nLCAnJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdC8vIOmAmui/h+S6i+S7tuWnlOaJmO+8jOiuoeeul+enu+WKqOeahOi3neemu1xyXG5cdFx0XHRcdGNvbnN0IGwgPSBlLmNsaWVudFggLSBkaXNYO1xyXG5cdFx0XHRcdGNvbnN0IHQgPSBlLmNsaWVudFkgLSBkaXNZO1xyXG5cclxuXHRcdFx0XHQvLyDnp7vliqjlvZPliY3lhYPntKBcclxuXHRcdFx0XHRkcmFnRG9tLnN0eWxlLmxlZnQgPSBgJHtsICsgc3R5TH1weGA7XHJcblx0XHRcdFx0ZHJhZ0RvbS5zdHlsZS50b3AgPSBgJHt0ICsgc3R5VH1weGA7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRkb2N1bWVudC5vbm1vdXNldXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XHJcblx0XHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0fVxyXG59KTtcclxuXHJcblZ1ZS5kaXJlY3RpdmUoJ3JlbW92ZUFyaWFIaWRkZW4nLCB7XHJcblx0YmluZChlbCkge1xyXG5cdFx0bGV0IGFyaWFFbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtcmFkaW9fX29yaWdpbmFsJyk7XHJcblx0XHRhcmlhRWxzLmZvckVhY2goKGl0ZW0pPT57XHJcblx0XHRcdGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59KTsiLCI8dGVtcGxhdGU+XHJcbiAgICA8ZWwtZGlhbG9nIHYtYmluZD1cIiRhdHRyc1wiIDp0aXRsZT1cInRpdGxlXCIgOnZpc2libGU9XCJkaWFsb2dWaXNpYmxlXCIgdi1kaWFsb2dEcmFnIDpiZWZvcmUtY2xvc2U9XCJoYW5kbGVDbG9zZVwiIGNlbnRlciA6Y2xvc2Utb24tY2xpY2stbW9kYWw9XCJmYWxzZVwiIDpzaG93LWNsb3NlPVwic2hvd0Nsb3NlXCIgYXBwZW5kLXRvLWJvZHkgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO292ZXJmbG93LXg6IGhpZGRlbjtwb3NpdGlvbjogcmVsYXRpdmU7XCIgOnN0eWxlPVwie21heEhlaWdodCwgbWluSGVpZ2h0fVwiPlxyXG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBzbG90PVwiZm9vdGVyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIj48L3Nsb3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2VsLWRpYWxvZz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCAnLi9kaWFsb2ctZHJhZyc7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdEaWFsb2cnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICfmj5DnpLonXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhIZWlnaHQ6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnNjB2aCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1pbkhlaWdodDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcxNTBweCdcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybntcclxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0Nsb3NlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpe1xyXG4gICAgICAgIGlmKHRoaXMuJGxpc3RlbmVyc1snY2xvc2UnXSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUNsb3NlKCl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuL2RlZXAvLmVsLWRpYWxvZ19faGVhZGVye1xyXG4gICAgcGFkZGluZzogMTVweCAyMHB4O1xyXG59XHJcbi9kZWVwLy5lbC1kaWFsb2ctLWNlbnRlciAuZWwtZGlhbG9nX19ib2R5e1xyXG4gICAgcGFkZGluZzogMjBweDtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDE0ODc2MmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQxNDg3NjJlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxNDg3NjJlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjQxNDg3NjJlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdlbC1jYXJkJyx7c3RhdGljU3R5bGU6e1wiaGVpZ2h0XCI6XCJjYWxjKDEwMCUgLSAycHgpXCIsXCJvdmVyZmxvd1wiOlwiYXV0b1wifSxhdHRyczp7XCJzaGFkb3dcIjpfdm0uc2hhZG93fX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcImNsZWFyZml4XCIsYXR0cnM6e1wic2xvdFwiOlwiaGVhZGVyXCJ9LHNsb3Q6XCJoZWFkZXJcIn0sW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJmb250LXNpemVcIjpcIjE2cHhcIn19LFsoX3ZtLiRzbG90c1snY2FyZC10aXRsZSddKT9bX3ZtLl90KFwiY2FyZC10aXRsZVwiKV06W192bS5fdihcIiBcIitfdm0uX3MoX3ZtLnRpdGxlKStcIiBcIildXSwyKSxfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wiZmxleFwiOlwiMVwiLFwicG9zaXRpb25cIjpcInJlbGF0aXZlXCJ9fSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcInBvc2l0aW9uXCI6XCJhYnNvbHV0ZVwiLFwicmlnaHRcIjpcIjBweFwiLFwidG9wXCI6XCItMTRweFwiLFwid2lkdGhcIjpcIjEwMCVcIixcInRleHQtYWxpZ25cIjpcInJpZ2h0XCJ9fSxbX3ZtLl90KFwiY2FyZC10b29sc1wiKV0sMildKV0pLF92bS5fdChcImRlZmF1bHRcIildLDIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxlbC1jYXJkIDpzaGFkb3c9XCJzaGFkb3dcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiRzbG90c1snY2FyZC10aXRsZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNhcmQtdGl0bGVcIj48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6IDBweDt0b3A6IC0xNHB4O3dpZHRoOiAxMDAlO3RleHQtYWxpZ246IHJpZ2h0O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJjYXJkLXRvb2xzXCI+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgIDwvZWwtY2FyZD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdDYXJkJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hhZG93OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uY2xlYXJmaXh7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MGM1ZGUwNmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNWRlMDZlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTBjNWRlMDZlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjBjNWRlMDZlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0uc2hvdyk/X2MoJ2RpdicsWyhfdm0uZGF0YS5sZW5ndGggPiAwKT9fdm0uX2woKF92bS5kYXRhKSxmdW5jdGlvbihpdGVtKXtyZXR1cm4gX2MoJ2F1dGgtdHJlZScse2tleTppdGVtLmlkLGF0dHJzOntcImRhdGFcIjppdGVtLFwicHJvcHNcIjpfdm0ucHJvcHN9LG9uOntcIm9uLW5vZGUtZXhwYW5kXCI6KGRhdGEpPT5fdm0ub25FeHBhbmQoZGF0YSksXCJvbi1ub2RlLWNoZWNrZWRcIjooZGF0YSk9Pl92bS5vbkNoZWNrZWQoZGF0YSl9fSl9KTpfdm0uX2UoKV0sMik6X3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8g5piv5ZCm5pyJ5a2Q6IqC54K5XG5jb25zdCBoYXNDaGlsZHJlbiA9IChkYXRhKT0+e1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuY2hpbGRyZW4pICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn07XG5cbi8vIOWIm+W7uuiKgueCuVxuZXhwb3J0IGNvbnN0IHJlbmRlckxhYmVsID0gKGgsIGRhdGEsIGNvbnRleHQpPT57XG4gICAgY29uc3Qge3Byb3BzLCBsaXN0ZW5lcnN9ID0gY29udGV4dDtcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtZXhwYW5kJ107XG4gICAgY29uc3QgY2hlY2tlZEhhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtY2hlY2tlZCddO1xuICAgIGNvbnN0IGxhYmVsID0gZGF0YVtwcm9wcy5wcm9wcy5sYWJlbF07XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGNoaWxkTm9kZXMucHVzaChsYWJlbCk7XG5cbiAgICBjb25zdCBpY29DbGFzcyA9IFtdO1xuICAgIGlmKGhhc0NoaWxkcmVuKGRhdGEpKXtcbiAgICAgICAgaWYoZGF0YS5leHBhbmQpe1xuICAgICAgICAgICAgaWNvQ2xhc3MucHVzaCgnaWNvbi1pY29uLWR3b24nKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpY29DbGFzcy5wdXNoKCdpY29uLWljb25fcmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaCgnbGknLCB7XG4gICAgfSwgW1xuICAgICAgICBoKCdpJywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGBpY29uZm9udCAke2ljb0NsYXNzLmpvaW4oJyAnKX1gXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBgJHsxNCpkYXRhLl9sZXZlfXB4YCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTJweCknLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnJyksXG4gICAgICAgIGgoJ2knLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogZGF0YS5jaGVja2VkPydpY29uZm9udCBpY29uLWZhbmd4aW5neHVhbnpob25nZmlsJzonaWNvbmZvbnQgaWNvbi1mYW5neGluZ3dlaXh1YW56aG9uZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkSGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICcnKSxcbiAgICAgICAgaCgnc3BhbicsIHtcblxuICAgICAgICB9LCBjaGlsZE5vZGVzKVxuICAgIF0pO1xufTtcblxuLy8g5Yib5bu6IG5vZGUg5a2Q6IqC54K5XG5leHBvcnQgY29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoaCwgbGlzdCwgZXhwYW5kLCBjb250ZXh0KT0+e1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbGlzdC5tYXAoaXRlbT0+e1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlck5vZGUoaCwgaXRlbSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2xzID0gWyd0cmVlLW5vZGUtY2hpbGRyZW4nXTtcbiAgICAgICAgaWYoIWV4cGFuZCl7XG4gICAgICAgICAgICBjbHMucHVzaCgnZXhwYW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGgoJ2RpdicsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjbHMuam9pbignICcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlck5vZGUgPSAoaCwgZGF0YSwgY29udGV4dCk9PntcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgY2hpbGROb2Rlcy5wdXNoKHJlbmRlckxhYmVsKGgsIGRhdGEsIGNvbnRleHQpKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47XG4gICAgaWYoaGFzQ2hpbGRyZW4oZGF0YSkpe1xuICAgICAgICBjaGlsZE5vZGVzLnB1c2gocmVuZGVyQ2hpbGRyZW4oaCwgY2hpbGRyZW4sIGRhdGEuZXhwYW5kLCBjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoJ3VsJywge1xuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbm9kZSdcbiAgICAgICAgfVxuICAgIH0sIGNoaWxkTm9kZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9IChoLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IHtwcm9wc30gPSBjb250ZXh0O1xuICAgIHJldHVybiByZW5kZXJOb2RlKGgsIHByb3BzLmRhdGEsIGNvbnRleHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyOyIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IHYtaWY9XCJzaG93XCI+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YXV0aC10cmVlIHYtZm9yPVwiaXRlbSBpbiBkYXRhXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6cHJvcHM9XCJwcm9wc1wiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtZXhwYW5kPVwiKGRhdGEpPT5vbkV4cGFuZChkYXRhKVwiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtY2hlY2tlZD1cIihkYXRhKT0+b25DaGVja2VkKGRhdGEpXCJcbiAgICAgICAgICAgID48L2F1dGgtdHJlZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vdHJlZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1RyZWUnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQXV0aFRyZWU6IHtcbiAgICAgICAgICAgIHJlbmRlcixcbiAgICAgICAgICAgIGZ1bmN0aW9uYWw6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICduYW1lJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEoKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IDEsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGxpc3Q6IFtdLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaW5pdChkYXRhLCBsZXZlKXtcbiAgICAgICAgICAgIGRhdGEuX2xldmUgPSBsZXZlO1xuICAgICAgICAgICAgaWYoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIGxldmUrKztcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhLmNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KGRhdGEuY2hpbGRyZW5baV0sIGxldmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g5Yi35pawXG4gICAgICAgIHJlZnJlc2goKXtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWxleW8gC/pmpDol49cbiAgICAgICAgb25FeHBhbmQoZGF0YSl7XG4gICAgICAgICAgICBkYXRhLmV4cGFuZCA9ICFkYXRhLmV4cGFuZDtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgInkuK0v5Y+W5raI6YCJ5LitXG4gICAgICAgIG9uQ2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGRhdGEuY2hlY2tlZCA9ICFkYXRhLmNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnRvb2xlckNoZWNrZWQodGhpcy5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZCh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xlckNoZWNrZWQobGlzdCwgbm9kZSl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBsaXN0KXtcbiAgICAgICAgICAgICAgICBpZihsaXN0W2ldLmlkID09PSBub2RlLmlkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQobGlzdFtpXS5jaGlsZHJlbiwgbGlzdFtpXS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sZXJDaGVja2VkKGxpc3RbaV0uY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YCJ5Lit6IqC54K55pe277yM6K6+572u5a2Q6IqC54K55YWo6YCJXG4gICAgICAgIHNldENoaWxkQ2hlY2tlZChjaGlsZHJlbiwgY2hlY2tlZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4sIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDorr7nva7niLboioLngrnpgInkuK1cbiAgICAgICAgc2V0UGFyZW50Q2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZElzQ2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuaciemAieS4rVxuICAgICAgICBjaGlsZElzQ2hlY2tlZChjaGlsZHJlbil7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJc0NoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXG4gICAgICAgIHNldERlZmF1bHRDaGVja2VkKGRlZmF1bHRJZHMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGVmYXVsdElkcyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHRoaXMuZGF0YSwgZGVmYXVsdElkc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQodGhpcy5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5qC55o2u5omA57uZ55qEaWTvvIzorr7nva7mlLnpobnpgInkuK1cbiAgICAgICAgc2V0Q2hlY2tlZChkYXRhLCBpZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmlkID09PSBpZCl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDojrflj5bpgInkuK3pgInnmoRrZXlcbiAgICAgICAgZ2V0Q2hlY2tlZEtleXMoKXtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWRLZXlzKHRoaXMuZGF0YSwga2V5cyk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YGN5Y6G5Ye66YCJ5Lit6YCJ55qEa2V5XG4gICAgICAgIF9nZXRDaGVja2VkS2V5cyhkYXRhLCBrZXlzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkYXRhW2ldLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkS2V5cyhkYXRhW2ldLmNoaWxkcmVuLCBrZXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiOt+WPlumAieS4remAieeahOiKgueCuVxuICAgICAgICBnZXRDaGVja2VkTm9kZXMoKXtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkTm9kZXModGhpcy5kYXRhLCBub2Rlcyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmBjeWOhuWHuumAieS4remAieeahOiKgueCuVxuICAgICAgICBfZ2V0Q2hlY2tlZE5vZGVzKGRhdGEsIG5vZGVzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goZGF0YVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZE5vZGVzKGRhdGFbaV0uY2hpbGRyZW4sIG5vZGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gdGhpcy5kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KHRoaXMuZGF0YVtpXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfVxuICAgIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxuQGltcG9ydCB1cmwoLi9pY29uL2ljb25mb250LmNzcyk7XG51bHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBsaXtcbiAgICAgICAgcGFkZGluZzogNXB4IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAuY2hlY2staWNve1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgICAgICB3aWR0aDogNXB4O1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaTpob3ZlcntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkY29sb3I6ICMwMDAwMDAsICRhbHBoYTogMC4xKTtcbiAgICB9XG5cbiAgICAuZXhwYW5ke1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00MC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00MC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01ZTgxZTA1ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWU4MWUwNWUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWU4MWUwNWUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNWU4MWUwNWVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7XG4gIGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTtcbiAgfVxufSIsImltcG9ydCBjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIGZyb20gXCIuL2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcbiAgY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApO1xuICBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpO1xufSIsImltcG9ydCBhc3NlcnRDbGFzc0JyYW5kIGZyb20gXCIuL2Fzc2VydENsYXNzQnJhbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldDIocywgYSwgcikge1xuICByZXR1cm4gcy5zZXQoYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7XG59IiwiaW1wb3J0IGFzc2VydENsYXNzQnJhbmQgZnJvbSBcIi4vYXNzZXJ0Q2xhc3NCcmFuZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MihzLCBhKSB7XG4gIHJldHVybiBzLmdldChhc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52XG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnLi8uLi9oZWxwZXJzL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi4vaGVscGVycy9zcGVlZG9tZXRlci5qcyc7XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgd2l0aFhTUkZUb2tlbn0gPSBjb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKGNvbmZpZykpO1xuXG4gICAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkpIHtcbiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IGNvbmZpZy54c3JmSGVhZGVyTmFtZSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG5cbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldChjb25maWcueHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8gdGhpbmcudG9KU09OKCkgOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS42LjdcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcblxuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGU7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxuLy8gdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCBheGlvc1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cHtcclxuICAgICNheGlvcztcclxuICAgICNyZXF1ZXN0Q291bnQgPSAwOyAvLyDor7fmsYLmrKHmlbBcclxuICAgICNsb2FkaW5nSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgI2NvbmZpZyA9IHtcclxuICAgICAgICBiYXNlVVJMOiAnJyxcclxuICAgICAgICB0aW1lb3V0OiA2MCAqIDEwMDAsXHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcclxuICAgICAgICBzdWNjZXNzQ29kZTogMjAwLFxyXG4gICAgICAgIGVycm9yQ29kZTogNTAwLFxyXG4gICAgICAgIGNhbGxCYWNrQ29kZTogW10sXHJcbiAgICAgICAgY2FsbDogbnVsbFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgZm9yKGNvbnN0IGsgaW4gdGhpcy4jY29uZmlnKXtcclxuICAgICAgICAgICAgaWYob3B0aW9uc1trXSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25maWdba10gPSBvcHRpb25zW2tdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgICAgYXhpb3MuZGVmYXVsdHMuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MgPSBheGlvcy5jcmVhdGUodGhpcy4jY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxyXG4gICAgICAgICAgICBjb25maWc9PntcclxuICAgICAgICAgICAgICAgIGlmKCFjb25maWcucGFyYW1zKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlID0gbG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVycy5hdXRob3JpemF0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShcclxuICAgICAgICAgICAgcmVzcG9uc2U9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50LS07XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpe1xyXG4gICAgICAgIGlmKCFyZXMpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSB0aGlzLiNjb25maWcuc3VjY2Vzc0NvZGUpe1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHJlcy5jb2RlID09PSB0aGlzLiNjb25maWcuZXJyb3JDb2RlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGVycihyZXMpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGVycm9yKHJlcy5tc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYodGhpcy4jY29uZmlnLmNhbGxCYWNrQ29kZS5pbmNsdWRlcyhyZXMuY29kZSkgJiYgdHlwZW9mIHRoaXMuI2NvbmZpZy5jYWxsID09PSAnZnVuY3Rpb24nKXtcclxuICAgICAgICAgICAgdGhpcy4jY29uZmlnLmNhbGwocmVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdCh1cmwscGFyYW1zLHN1Y2Nlc3MsZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5wb3N0KHVybCxwYXJhbXMpLnRoZW4ocmVzPT57XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHVybCxwYXJhbXMsc3VjY2VzcyxlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnVwZGF0ZSh1cmwscGFyYW1zKS50aGVuKHJlcz0+e1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5nZXQodXJsLCB7IHBhcmFtczogcGFyYW1zfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuXHRcdHRoaXMuI2F4aW9zLmRlbGV0ZSh1cmwsIHsgcGFyYW1zOiBwYXJhbXN9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG4gICAgZG93bkxvYWQodXJsLCBwYXJhbXM9e30pe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnBvc3QodXJsLCBwYXJhbXMsIHsncmVzcG9uc2VUeXBlJzogJ2Jsb2InfSkudGhlbihyZXM9PntcclxuXHRcdFx0aWYocmVzKXtcclxuXHRcdFx0XHRsZXQgZmlsZU5hbWUgPSBwYXJhbXMuZmlsZU5hbWU7XHJcblx0XHRcdFx0aWYoIWZpbGVOYW1lKXtcclxuXHRcdFx0XHRcdGZpbGVOYW1lID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXS5zcGxpdCgnZmlsZW5hbWU9JylbMV0ucmVwbGFjZSgvXCIvZywgJycpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5kYXRhXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07Y2hhcnNldD1VVEYtOCd9KTtcclxuXHRcdFx0XHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cdFx0XHRcdGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHRcdFx0XHRsaW5rLmRvd25sb2FkID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcclxuXHRcdFx0XHRsaW5rLmNsaWNrKCk7XHJcblx0XHRcdFx0d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwobGluay5ocmVmKTtcclxuXHRcdFx0fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwicmVxdWlyZSgnLi9tZXNzYWdlL2luZGV4LmpzJyk7XHJcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJy4vcGFnaW5hdGlvbi9JbmRleC52dWUnO1xyXG5pbXBvcnQgUGFnZVRhYmxlIGZyb20gJy4vcGFnZS10YWJsZS9JbmRleC52dWUnO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4vZGlhbG9nL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBDYXJkIGZyb20gJy4vY2FyZC9JbmRleC52dWUnO1xyXG5pbXBvcnQgVHJlZSBmcm9tICcuL3RyZWUvSW5kZXgudnVlJztcclxuaW1wb3J0IF9IdHRwIGZyb20gJy4vaHR0cC9pbmRleC5qcyc7XHJcbmNvbnN0IGNvbXMgPSBbUGFnaW5hdGlvbiwgUGFnZVRhYmxlLCBEaWFsb2csIENhcmQsIFRyZWVdO1xyXG5jb25zdCBpbnN0YWxsID0gZnVuY3Rpb24oVnVlKXtcclxuICAgIGNvbXMuZm9yRWFjaChjb20gPT4ge1xyXG4gICAgICAgIFZ1ZS5jb21wb25lbnQoY29tLm5hbWUsIGNvbSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG4vLyDlr7zlh7rnu4Tku7ZcclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFsbDtcclxuXHJcbmV4cG9ydCBjbGFzcyBIdHRwIGV4dGVuZHMgX0h0dHB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcclxuICAgICAgICBzdXBlcihvcHRpb25zKTtcclxuICAgIH1cclxufSIsImltcG9ydCAnLi9zZXRQdWJsaWNQYXRoJ1xuaW1wb3J0IG1vZCBmcm9tICd+ZW50cnknXG5leHBvcnQgZGVmYXVsdCBtb2RcbmV4cG9ydCAqIGZyb20gJ35lbnRyeSdcbiJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwidG90YWwiLCJfYiIsImF0dHJzIiwiY3VycmVudFBhZ2UiLCJwYWdlU2l6ZSIsInBhZ2VTaXplcyIsIm9uIiwiaGFuZGxlU2l6ZUNoYW5nZSIsImhhbmRsZUN1cnJlbnRDaGFuZ2UiLCIkYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIm5hbWUiLCJwcm9wcyIsInJlcXVpcmVkIiwidHlwZSIsIk51bWJlciIsImRlZmF1bHQiLCJwYWdlIiwibGltaXQiLCJBcnJheSIsImNvbXB1dGVkIiwiZ2V0Iiwic2V0IiwidmFsIiwiJGVtaXQiLCJ0b3RhbENvdW50IiwibWV0aG9kcyIsInN0YXRpY0NsYXNzIiwidGFibGVJZCIsInN0YXRpY1N0eWxlIiwicmVmIiwibGlzdCIsInJvd0tleSIsImxvYWQiLCJobGlnaHRDdXJyZW50Um93IiwiZGVmYXVsdEV4cGFuZEFsbCIsImhhbmRlbFNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdEFsbCIsImhhbmRsZVJvd0NsaWNrIiwic2hvd0NoZWNrQm94Iiwic29ydE51bSIsInNjb3BlZFNsb3RzIiwiX3UiLCJrZXkiLCJmbiIsInNjb3BlIiwiX3YiLCJfcyIsInBhcmFtcyIsIiRpbmRleCIsIl90IiwidXBkYXRlOnBhZ2UiLCIkZXZlbnQiLCIkc2V0IiwiZ2V0TGlzdCIsImRhdGEiLCJ1cmwiLCJTdHJpbmciLCJtZXRob2QiLCJCb29sZWFuIiwiZGVmYXVsdFBhcmFtcyIsIk9iamVjdCIsImRlZmF1bHRTZWxlY3QiLCJ5cGUiLCJ3YXRjaCIsIm5ld1ZhbCIsImhhbmRsZXIiLCJzZXRDaGVja2VkIiwiZGVlcCIsIm9sZFZhbCIsInBhcmFtIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyaW5nIiwic2VsZWN0RGF0YSIsInNlbGVjdElkcyIsIm1vdW50ZWQiLCJsb2ciLCIkbGlzdGVuZXJzIiwiaXRlbSIsInBhZ2VPcHRpb24iLCJzdG9yYWdlUGFyYW1zIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiJHJvdXRlIiwicGF0aCIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiaHR0cCIsInJlcyIsIl9zZXREYXRhIiwicG9zdCIsInJlY29yZHMiLCJsZW5ndGgiLCJtYXAiLCIkbmV4dFRpY2siLCIkcmVmcyIsImluY2x1ZGVzIiwidG9nZ2xlUm93U2VsZWN0aW9uIiwicXVlcnkiLCJrZXlzIiwicm93IiwiY29sdW1uIiwiZXZlbnQiLCJfIiwic2VsZWN0aW9uTGlzdCIsInZhbHVlcyIsInNlbGVjdGlvbiIsInNldEN1cnJlbnQiLCJpbmRleCIsInNldEN1cnJlbnRSb3ciLCJnZXREYXRhIiwidHJlZSIsInRyZWVOb2RlIiwicmVzb2x2ZSIsImRpcmVjdGl2ZXMiLCJyYXdOYW1lIiwidGl0bGUiLCJkaWFsb2dWaXNpYmxlIiwiaGFuZGxlQ2xvc2UiLCJzaG93Q2xvc2UiLCJzdHlsZSIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsInNsb3QiLCJWdWUiLCJkaXJlY3RpdmUiLCJiaW5kIiwiZWwiLCJkaWFsb2dIZWFkZXJFbCIsInF1ZXJ5U2VsZWN0b3IiLCJkcmFnRG9tIiwiY3Vyc29yIiwic3R5IiwiY3VycmVudFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm9ubW91c2Vkb3duIiwiZGlzWCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwiZGlzWSIsImNsaWVudFkiLCJvZmZzZXRUb3AiLCJzdHlMIiwic3R5VCIsImxlZnQiLCJkb2N1bWVudCIsImJvZHkiLCJjbGllbnRXaWR0aCIsInJlcGxhY2UiLCJjbGllbnRIZWlnaHQiLCJ0b3AiLCJvbm1vdXNlbW92ZSIsImUiLCJsIiwidCIsIm9ubW91c2V1cCIsImFyaWFFbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInJlbW92ZUF0dHJpYnV0ZSIsInNoYWRvdyIsIiRzbG90cyIsInNob3ciLCJfbCIsImlkIiwib25FeHBhbmQiLCJvbkNoZWNrZWQiLCJoYXNDaGlsZHJlbiIsImlzQXJyYXkiLCJjaGlsZHJlbiIsInJlbmRlckxhYmVsIiwiaCIsImNvbnRleHQiLCJsaXN0ZW5lcnMiLCJjbGlja0hhbmRsZXIiLCJjaGVja2VkSGFuZGxlciIsImxhYmVsIiwiY2hpbGROb2RlcyIsInB1c2giLCJpY29DbGFzcyIsImV4cGFuZCIsImRvbVByb3BzIiwiY2xhc3NOYW1lIiwiam9pbiIsIm1hcmdpbkxlZnQiLCJfbGV2ZSIsImZvbnRTaXplIiwidHJhbnNmb3JtIiwiY29sb3IiLCJjbGljayIsImNoZWNrZWQiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlck5vZGUiLCJjbHMiLCJjb21wb25lbnRzIiwiQXV0aFRyZWUiLCJmdW5jdGlvbmFsIiwiaW5pdCIsImxldmUiLCJpIiwicmVmcmVzaCIsInRvb2xlckNoZWNrZWQiLCJzZXRQYXJlbnRDaGVja2VkIiwibm9kZSIsInNldENoaWxkQ2hlY2tlZCIsImNoaWxkSXNDaGVja2VkIiwic2V0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0SWRzIiwiZ2V0Q2hlY2tlZEtleXMiLCJfZ2V0Q2hlY2tlZEtleXMiLCJnZXRDaGVja2VkTm9kZXMiLCJub2RlcyIsIl9nZXRDaGVja2VkTm9kZXMiLCJpbW1lZGlhdGUiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIm9iaiIsInByaXZhdGVDb2xsZWN0aW9uIiwiaGFzIiwiVHlwZUVycm9yIiwiY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIl9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjIiwicHJpdmF0ZU1hcCIsInZhbHVlIiwiX2Fzc2VydENsYXNzQnJhbmQiLCJuIiwiYXJndW1lbnRzIiwiYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldDIiLCJzIiwiYSIsInIiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQyIiwidGhpc0FyZyIsIndyYXAiLCJhcHBseSIsInByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInN0ciIsImNhbGwiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwiY3JlYXRlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheUJ1ZmZlciIsImlzQXJyYXlCdWZmZXJWaWV3IiwicmVzdWx0IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc0Jvb2xlYW4iLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1N0cmVhbSIsInBpcGUiLCJpc0Zvcm1EYXRhIiwia2luZCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJ0cmltIiwiYWxsT3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydHkiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsInByb3AiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImZvckVhY2hFbnRyeSIsImdlbmVyYXRvciIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJpc0hUTUxGb3JtIiwidG9DYW1lbENhc2UiLCJyZXBsYWNlciIsIm0iLCJwMSIsInAyIiwidG9VcHBlckNhc2UiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZnJlZXplTWV0aG9kcyIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsIkVycm9yIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwic3BsaXQiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQUJFVCIsIkFMUEhBX0RJR0lUIiwiZ2VuZXJhdGVTdHJpbmciLCJzaXplIiwiYWxwaGFiZXQiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInNvdXJjZSIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzQXN5bmNGbiIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJoYXNPd25Qcm9wIiwidXRpbHMiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhdHVzIiwiZnJvbSIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJQbGF0Zm9ybUZvcm1EYXRhIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJjb25jYXQiLCJlYWNoIiwidG9rZW4iLCJpc0ZsYXRBcnJheSIsInNvbWUiLCJwcmVkaWNhdGVzIiwidGVzdCIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm9wdGlvbnMiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsImRlZmluZWQiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJfQmxvYiIsIkJsb2IiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGVyIiwiX2VuY29kZSIsImJ1aWxkVVJMIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiZm9yRWFjaEhhbmRsZXIiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIlVSTFNlYXJjaFBhcmFtcyIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsInBsYXRmb3JtIiwidG9VUkxFbmNvZGVkRm9ybSIsImhlbHBlcnMiLCJpc05vZGUiLCJwYXJzZVByb3BQYXRoIiwiYXJyYXlUb09iamVjdCIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiZW50cmllcyIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic3RyaW5naWZ5U2FmZWx5IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJpZ25vcmVEdXBsaWNhdGVPZiIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsImhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwicGFyc2VUb2tlbnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsImlzVmFsaWRIZWFkZXJOYW1lIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImZvcm1hdEhlYWRlciIsInciLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZSIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJhY2Nlc3NvciIsImludGVybmFscyIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImZsb29yIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsImJ1aWxkRnVsbFBhdGgiLCJyZXF1ZXN0ZWRVUkwiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsImlzVVJMU2FtZU9yaWdpbiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJwYXJzZVByb3RvY29sIiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsImNvb2tpZXMiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJkaXNwYXRjaFhoclJlcXVlc3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwid2l0aFhTUkZUb2tlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJidG9hIiwiZnVsbFBhdGgiLCJvcGVuIiwicGFyYW1zU2VyaWFsaXplciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlRGF0YSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJlcnIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJoYW5kbGVFcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJ4c3JmVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2l0aENyZWRlbnRpYWxzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJzZW5kIiwiaHR0cEFkYXB0ZXIiLCJ4aHJBZGFwdGVyIiwia25vd25BZGFwdGVycyIsInhociIsInJlbmRlclJlYXNvbiIsInJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJnZXRBZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwib25BZGFwdGVyUmVqZWN0aW9uIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJ0aW1lb3V0TWVzc2FnZSIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbXB1dGVDb25maWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiVkVSU0lPTiIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiX3JlcXVlc3QiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJ1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInB1c2hSZXNwb25zZUludGVyY2VwdG9ycyIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZvckVhY2hNZXRob2ROb0RhdGEiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJodHRwTWV0aG9kIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZUV4ZWN1dG9yIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwic3BsaWNlIiwiYyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJmb3JtVG9KU09OIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwiX2F4aW9zIiwiV2Vha01hcCIsIl9yZXF1ZXN0Q291bnQiLCJfbG9hZGluZ0luc3RhbmNlIiwiX2NvbmZpZyIsIkh0dHAiLCJzdWNjZXNzQ29kZSIsImVycm9yQ29kZSIsImNhbGxCYWNrQ29kZSIsImsiLCJfdGhpcyRyZXF1ZXN0Q291bnQiLCJfdGhpcyRyZXF1ZXN0Q291bnQyIiwibG9hZGluZyIsImF1dGhvcml6YXRpb24iLCJsb2NhbFN0b3JhZ2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQzIiwiX3RoaXMkcmVxdWVzdENvdW50NCIsImNsb3NlIiwiX3RoaXMkcmVxdWVzdENvdW50NSIsIl90aGlzJHJlcXVlc3RDb3VudDYiLCJfaGFuZGxlUmVzdWx0Iiwic3VjY2VzcyIsIm1zZyIsInVwZGF0ZSIsImRvd25Mb2FkIiwiYmxvYiIsImxpbmsiLCJkaXNwbGF5IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG93bmxvYWQiLCJyZXZva2VPYmplY3RVUkwiLCJyZXF1aXJlIiwiUGFnaW5hdGlvbiIsIlBhZ2VUYWJsZSIsIkRpYWxvZyIsIkNhcmQiLCJUcmVlIiwiX0h0dHAiLCJjb21zIiwiaW5zdGFsbCIsImNvbSIsImNvbXBvbmVudCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2634\n");
16
+ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=d8da1446&scoped=true\nvar Indexvue_type_template_id_d8da1446_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n ...newVal\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n ...this.defaultParams\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n this.params = {\n ...this.params,\n ...params,\n page: 1\n };\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_d8da1446_scoped_true_render,\n Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns,\n false,\n null,\n \"d8da1446\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(4100);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=0c5de06e&scoped=true\nvar Indexvue_type_template_id_0c5de06e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(\" \" + _vm._s(_vm.title) + \" \")]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\"\n }\n }, [_c('div', {\n staticStyle: {\n \"position\": \"absolute\",\n \"right\": \"0px\",\n \"top\": \"-14px\",\n \"width\": \"100%\",\n \"text-align\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)])]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_0c5de06e_scoped_true_render,\n Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns,\n false,\n null,\n \"0c5de06e\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n config.headers.authorization = localStorage.getItem('token');\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(3472);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxDQUFDLENBQUM7UUFDWnhELE1BQU0sQ0FBQzZ1QixHQUFHLENBQUNHLGVBQWUsQ0FBQ0wsSUFBSSxDQUFDblMsSUFBSSxDQUFDO01BQ3RDO0lBQ0ssQ0FBQyxDQUFDO0VBQ047QUFDSixDOztBQ3ZIQXlTLG1CQUFPLENBQUMsSUFBb0IsQ0FBQztBQUNtQjtBQUNEO0FBQ1A7QUFDSjtBQUNBO0FBQ0E7QUFDcEMsTUFBTU8sSUFBSSxHQUFHLENBQUNOLEtBQVUsRUFBRUMsZ0JBQVMsRUFBRUMsWUFBTSxFQUFFQyxVQUFJLEVBQUVDLFVBQUksQ0FBQztBQUN4RCxNQUFNRyxPQUFPLEdBQUcsU0FBQUEsQ0FBU253QixHQUFHLEVBQUM7RUFDekJrd0IsSUFBSSxDQUFDL3RCLE9BQU8sQ0FBQ2l1QixHQUFHLElBQUk7SUFDaEJwd0IsR0FBRyxDQUFDcXdCLFNBQVMsQ0FBQ0QsR0FBRyxDQUFDdDNCLElBQUksRUFBRXMzQixHQUFHLENBQUM7RUFDaEMsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7QUFFRDtBQUNBLCtDQUFlRCxPQUFPLEVBQUM7QUFFaEIsTUFBTW5DLElBQUksU0FBU2lDLFNBQUs7RUFDM0Jub0IsV0FBV0EsQ0FBQ2lLLE9BQU8sRUFBQztJQUNoQixLQUFLLENBQUNBLE9BQU8sQ0FBQztFQUNsQjtBQUNKLEM7O0FDckJ3QjtBQUNBO0FBQ3hCLDhDQUFlLFVBQUc7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQHZ1ZS9jbGktc2VydmljZS9saWIvY29tbWFuZHMvYnVpbGQvc2V0UHVibGljUGF0aC5qcz82OWNiIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT8yNzMzIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/M2M1ZSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ODJhZiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZDRkMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZTgyOCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcz8yZjg1Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mYjFkIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8wOGJhIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/NWQwMyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/Nzc0YSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/ODNjMyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/NThjNyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/MzhhMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8wZTcxIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLWRyYWcuanM/NWViZCIsIndlYnBhY2s6Ly92dWUyL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/NGRiNiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8yMGU3Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvSW5kZXgudnVlPzg3NzQiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/YjM5ZiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT82MTE4Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9lN2ZhIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/YzFmYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/MzBiYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZTk1OCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjEyZCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjMzNSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/OTA5YyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS90cmVlLmpzPzQyYzYiLCJ3ZWJwYWNrOi8vdnVlMi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9iZjY2Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT8xNTRiIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9lNmIwIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9hOGQyIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT83YTAxIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbi5qcz9iODVmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYy5qcz9jZmRhIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0Q2xhc3NCcmFuZC5qcz8xOWY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRTZXQyLmpzPzQ0YmYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZEdldDIuanM/OTI5ZSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanM/NGJlYSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcz9jOWViIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz8yMDI3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcz8xYTk0Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcz85YmEzIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/OTNlMiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzP2MxNzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/Yzc5MiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/MjdhNCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzP2EwZWQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzPzFkYjkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanM/NmQ3OCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzP2IyZTQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzP2JmOGMiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/NzhmMSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanM/OGZlOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzP2Y0MzciLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanM/ZmYxMCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcz81NGU5Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzPzk1OTciLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzc2NjIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzP2MxN2EiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanM/NjhhNCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz84NzY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcz8xZDNmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz9hMjI3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/NmJjNiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanM/ZjAyZCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcz84Nzk1Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcz85ZmFjIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanM/NTljMCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/MWE1YyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz83ODI1Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzRkYzkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcz9iZDEzIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzExMGYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanM/MDEzMiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzI5ZmIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanM/MjcyOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcz9iZDlkIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YzZmMyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcz9mYWQ2Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9odHRwL2luZGV4LmpzP2NjNmEiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzPzE1NjgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1zZXJ2aWNlL2xpYi9jb21tYW5kcy9idWlsZC9lbnRyeS1saWIuanM/OGE5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIFRoaXMgZmlsZSBpcyBpbXBvcnRlZCBpbnRvIGxpYi93YyBjbGllbnQgYnVuZGxlcy5cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBjdXJyZW50U2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmN1cnJlbnRTY3JpcHRcbiAgaWYgKHByb2Nlc3MuZW52Lk5FRURfQ1VSUkVOVFNDUklQVF9QT0xZRklMTCkge1xuICAgIHZhciBnZXRDdXJyZW50U2NyaXB0ID0gcmVxdWlyZSgnQHNvZGEvZ2V0LWN1cnJlbnQtc2NyaXB0JylcbiAgICBjdXJyZW50U2NyaXB0ID0gZ2V0Q3VycmVudFNjcmlwdCgpXG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYmVjYXVzZSBwcmV2aW91c2x5IHdlIGRpcmVjdGx5IGluY2x1ZGVkIHRoZSBwb2x5ZmlsbFxuICAgIGlmICghKCdjdXJyZW50U2NyaXB0JyBpbiBkb2N1bWVudCkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwgJ2N1cnJlbnRTY3JpcHQnLCB7IGdldDogZ2V0Q3VycmVudFNjcmlwdCB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBzcmMgPSBjdXJyZW50U2NyaXB0ICYmIGN1cnJlbnRTY3JpcHQuc3JjLm1hdGNoKC8oLitcXC8pW14vXStcXC5qcyhcXD8uKik/JC8pXG4gIGlmIChzcmMpIHtcbiAgICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHNyY1sxXSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cbn1cblxuLy8gSW5kaWNhdGUgdG8gd2VicGFjayB0aGF0IHRoaXMgZmlsZSBjYW4gYmUgY29uY2F0ZW5hdGVkXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gKF92bS50b3RhbD4wKT9fYygnZGl2JyxbX2MoJ2VsLXBhZ2luYXRpb24nLF92bS5fYih7YXR0cnM6e1wiYmFja2dyb3VuZFwiOlwiXCIsXCJjdXJyZW50LXBhZ2VcIjpfdm0uY3VycmVudFBhZ2UsXCJwYWdlLXNpemVcIjpfdm0ucGFnZVNpemUsXCJwYWdlLXNpemVzXCI6X3ZtLnBhZ2VTaXplcyxcInRvdGFsXCI6X3ZtLnRvdGFsLFwibGF5b3V0XCI6XCJwcmV2LCBwYWdlciwgbmV4dFwifSxvbjp7XCJzaXplLWNoYW5nZVwiOl92bS5oYW5kbGVTaXplQ2hhbmdlLFwiY3VycmVudC1jaGFuZ2VcIjpfdm0uaGFuZGxlQ3VycmVudENoYW5nZX19LCdlbC1wYWdpbmF0aW9uJyxfdm0uJGF0dHJzLGZhbHNlKSldLDEpOl92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgdi1pZj1cInRvdGFsPjBcIj5cclxuICAgICAgICA8ZWwtcGFnaW5hdGlvblxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kIFxyXG4gICAgICAgICAgICA6Y3VycmVudC1wYWdlPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICA6cGFnZS1zaXplPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICA6cGFnZS1zaXplcz1cInBhZ2VTaXplc1wiXHJcbiAgICAgICAgICAgIDp0b3RhbD1cInRvdGFsXCJcclxuICAgICAgICAgICAgbGF5b3V0PVwicHJldiwgcGFnZXIsIG5leHRcIlxyXG4gICAgICAgICAgICB2LWJpbmQ9XCIkYXR0cnNcIlxyXG4gICAgICAgICAgICBAc2l6ZS1jaGFuZ2U9XCJoYW5kbGVTaXplQ2hhbmdlXCJcclxuICAgICAgICAgICAgQGN1cnJlbnQtY2hhbmdlPVwiaGFuZGxlQ3VycmVudENoYW5nZVwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuICAgIGV4cG9ydCBkZWZhdWx0IHtcclxuICAgICAgICBuYW1lOiAnUGFnaW5hdGlvbicsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgdG90YWw6IHtcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxpbWl0OiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAyMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlU2l6ZXM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzEwLCAxNSwgMjAsIDMwLCA1MF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHZhbClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemU6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saW1pdFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bGltaXQnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b3RhbFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dG90YWwnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgaGFuZGxlU2l6ZUNoYW5nZSh2YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRpb24nLCB7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIGxpbWl0OiB2YWwgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGFuZGxlQ3VycmVudENoYW5nZSh2YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRpb24nLCB7IHBhZ2U6IHZhbCwgbGltaXQ6IHRoaXMucGFnZVNpemUgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5lbC1wYWdpbmF0aW9ue1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MjZiNzBmYjQmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi8sXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9XG4gICAgdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbicgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnMgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHtcbiAgICAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIChvcHRpb25zLmZ1bmN0aW9uYWwgPyB0aGlzLnBhcmVudCA6IHRoaXMpLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3RcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbihoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKSA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2YjcwZmI0JnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjI2YjcwZmI0XCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdkaXYnLHtzdGF0aWNDbGFzczpcInBhZ2UtdGFibGVcIixhdHRyczp7XCJpZFwiOnRoaXMudGFibGVJZH19LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ0YWJsZVwifSxbX2MoJ2VsLXNjcm9sbGJhcicse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiMTAwJVwifX0sW19jKCdlbC10YWJsZScsX3ZtLl9iKHtyZWY6X3ZtLnRhYmxlSWQsYXR0cnM6e1wic3RyaXBlXCI6XCJcIixcImRhdGFcIjpfdm0ubGlzdCxcInJvdy1rZXlcIjpfdm0ucm93S2V5LFwibG9hZFwiOl92bS5sb2FkLFwiaGlnaGxpZ2h0LWN1cnJlbnQtcm93XCI6X3ZtLmhsaWdodEN1cnJlbnRSb3csXCJkZWZhdWx0LWV4cGFuZC1hbGxcIjpfdm0uZGVmYXVsdEV4cGFuZEFsbH0sb246e1wic2VsZWN0XCI6X3ZtLmhhbmRlbFNlbGVjdGlvbkNoYW5nZSxcInNlbGVjdC1hbGxcIjpfdm0uc2VsZWN0QWxsLFwicm93LWNsaWNrXCI6X3ZtLmhhbmRsZVJvd0NsaWNrLFwiZXhwYW5kLWNoYW5nZVwiOnZhbD0+X3ZtLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgdmFsKX19LCdlbC10YWJsZScsX3ZtLiRhdHRycyxmYWxzZSksWyhfdm0uc2hvd0NoZWNrQm94KT9fYygnZWwtdGFibGUtY29sdW1uJyx7YXR0cnM6e1widHlwZVwiOlwic2VsZWN0aW9uXCIsXCJ3aWR0aFwiOlwiNjBweFwiLFwiYWxpZ25cIjpcImNlbnRlclwifX0pOl92bS5fZSgpLChfdm0uc29ydE51bSk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcImluZGV4XCIsXCJ3aWR0aFwiOlwiNjBweFwiLFwibGFiZWxcIjpcIuW6j+WPt1wiLFwiYWxpZ25cIjpcImNlbnRlclwifSxzY29wZWRTbG90czpfdm0uX3UoW3trZXk6XCJkZWZhdWx0XCIsZm46ZnVuY3Rpb24oc2NvcGUpe3JldHVybiBbKF92bS5wYWdlKT9fYygnc3BhbicsW192bS5fdihfdm0uX3MoKF92bS5wYXJhbXMucGFnZS0xKSpfdm0ucGFyYW1zLmxpbWl0K3Njb3BlLiRpbmRleCsxKSldKTpfYygnc3BhbicsW192bS5fdihfdm0uX3Moc2NvcGUuJGluZGV4KzEpKV0pXX19XSxudWxsLGZhbHNlLDI3ODYwMDgwMjEpfSk6X3ZtLl9lKCksX3ZtLl90KFwiZGVmYXVsdFwiKV0sMildLDEpXSwxKSwoX3ZtLnBhZ2UpP19jKCdQYWdpbmF0aW9uJyx7YXR0cnM6e1widG90YWxcIjpfdm0udG90YWwsXCJwYWdlXCI6X3ZtLnBhcmFtcy5wYWdlLFwibGltaXRcIjpfdm0ucGFyYW1zLmxpbWl0fSxvbjp7XCJ1cGRhdGU6cGFnZVwiOmZ1bmN0aW9uKCRldmVudCl7cmV0dXJuIF92bS4kc2V0KF92bS5wYXJhbXMsIFwicGFnZVwiLCAkZXZlbnQpfSxcInBhZ2luYXRpb25cIjpfdm0uZ2V0TGlzdH19KTpfdm0uX2UoKV0sMSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtdGFibGVcIiA6aWQ9XCJ0aGlzLnRhYmxlSWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgPGVsLXNjcm9sbGJhciBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPGVsLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJpcGVcclxuICAgICAgICAgICAgICAgICAgICA6cmVmPVwidGFibGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICA6cm93LWtleT1cInJvd0tleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmxvYWQ9XCJsb2FkXCJcclxuICAgICAgICAgICAgICAgICAgICA6aGlnaGxpZ2h0LWN1cnJlbnQtcm93PVwiaGxpZ2h0Q3VycmVudFJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgQHNlbGVjdD1cImhhbmRlbFNlbGVjdGlvbkNoYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHNlbGVjdC1hbGw9XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkZWZhdWx0LWV4cGFuZC1hbGw9XCJkZWZhdWx0RXhwYW5kQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBAcm93LWNsaWNrPVwiaGFuZGxlUm93Q2xpY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBleHBhbmQtY2hhbmdlPVwidmFsPT4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZWwtdGFibGUtY29sdW1uIHYtaWY9XCJzaG93Q2hlY2tCb3hcIiB0eXBlPVwic2VsZWN0aW9uXCIgd2lkdGg9XCI2MHB4XCIgYWxpZ249XCJjZW50ZXJcIj48L2VsLXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZWwtdGFibGUtY29sdW1uIHYtaWY9XCJzb3J0TnVtXCIgdHlwZT1cImluZGV4XCIgd2lkdGg9XCI2MHB4XCIgbGFiZWw9XCLluo/lj7dcIiBhbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgc2xvdC1zY29wZT1cInNjb3BlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwicGFnZVwiPnt7KHBhcmFtcy5wYWdlLTEpKnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlPnt7c2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2VsLXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L2VsLXRhYmxlPlxyXG4gICAgICAgICAgICA8L2VsLXNjcm9sbGJhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8UGFnaW5hdGlvbiB2LWlmPVwicGFnZVwiIDp0b3RhbD1cInRvdGFsXCIgOnBhZ2Uuc3luYz1cInBhcmFtcy5wYWdlXCIgOmxpbWl0PVwicGFyYW1zLmxpbWl0XCIgQHBhZ2luYXRpb249XCJnZXRMaXN0XCIgLz5cclxuICAgIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0PlxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnUGFnZVRhYmxlJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgLy8g6Ieq5a6a5LmJ5pWw5o2uXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K+35rGC5Zyw5Z2AXHJcbiAgICAgICAgdXJsOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguaWueW8j1xyXG4gICAgICAgIG1ldGhvZDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdnZXQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbmmL7npLrluo/lj7dcclxuICAgICAgICBzb3J0TnVtOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOaYr+WQpuWIhumhtVxyXG4gICAgICAgIHBhZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5qCR5b2i6KGo5qC85pe277yM5piv5ZCm5YWo6YOo5bGV5byAXHJcbiAgICAgICAgZGVmYXVsdEV4cGFuZEFsbDoge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5Yid5aeL6K+35rGC5Y+C5pWwXHJcbiAgICAgICAgZGVmYXVsdFBhcmFtczoge1xyXG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT4oe30pXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDpu5jorqTpgInkuK3mlbDmja5cclxuICAgICAgICBkZWZhdWx0U2VsZWN0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+W11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJvd0tleToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdpZCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhsaWdodEN1cnJlbnRSb3c6IHtcclxuICAgICAgICAgICAgeXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGRhdGEobmV3VmFsKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gbmV3VmFsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICBoYW5kbGVyKCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVmYXVsdFBhcmFtcyhuZXdWYWwsIG9sZFZhbCl7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gbmV3VmFsKXtcclxuICAgICAgICAgICAgICAgIGlmKG5ld1ZhbFtrZXldICE9IG9sZFZhbFtrZXldKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHtwYWdlOiAxLCBsaW1pdDogMTUsIC4uLm5ld1ZhbH07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybntcclxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcclxuICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgbGltaXQ6IDE1LFxyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kZWZhdWx0UGFyYW1zXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICBsaXN0OiBbXSxcclxuICAgICAgICAgICAgdGFibGVJZDogYHRhYmxlXyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE2KX1gLFxyXG4gICAgICAgICAgICBzZWxlY3REYXRhOiB7fSxcclxuICAgICAgICAgICAgc2VsZWN0SWRzOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpe1xyXG4gICAgICAgIGlmKHRoaXMuJGxpc3RlbmVyc1snc2VsZWN0aW9uLWNoYW5nZSddKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmRhdGEpe1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5kZWZhdWx0U2VsZWN0KXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAvLyDojrflj5bmlbDmja5cclxuICAgICAgICBnZXRMaXN0KHBhZ2VPcHRpb24pe1xyXG4gICAgICAgICAgICBpZighdGhpcy51cmwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHBhZ2VPcHRpb24pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMucGFnZSA9IHBhZ2VPcHRpb24ucGFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLmxpbWl0ID0gcGFnZU9wdGlvbi5saW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighdGhpcy5wYWdlKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyYW1zLmxpbWl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VQYXJhbXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuJHJvdXRlLnBhdGgpO1xyXG4gICAgICAgICAgICBpZihzdG9yYWdlUGFyYW1zKXtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy4kcm91dGUucGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2godGhpcy5tZXRob2Qpe1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2V0JzpcclxuICAgICAgICAgICAgICAgICAgICBodHRwLmdldCh0aGlzLnVybCwgdGhpcy5wYXJhbXMsIChyZXMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3Bvc3QnOlxyXG4gICAgICAgICAgICAgICAgICAgIGh0dHAucG9zdCh0aGlzLnVybCwgdGhpcy5wYXJhbXMsIChyZXMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9zZXREYXRhKHJlcyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGFnZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSByZXMuZGF0YS5yZWNvcmRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcy5kYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXHJcbiAgICAgICAgc2V0Q2hlY2tlZCgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRTZWxlY3QubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSB0aGlzLmRlZmF1bHRTZWxlY3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zaG93Q2hlY2tCb3ggJiYgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDpu5jorqTpgInkuK3mlbDmja5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RJZHMuaW5jbHVkZXMoaXRlbVt0aGlzLnJvd0tleV0pKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5p2h5Lu25p+l6K+iXHJcbiAgICAgICAgcXVlcnkocGFyYW1zPXt9KXtcclxuICAgICAgICAgICAgaWYoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHsuLi50aGlzLnBhcmFtcywgLi4ucGFyYW1zLCBwYWdlOiAxfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldExpc3QoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOeCueWHu+ihjFxyXG4gICAgICAgIGhhbmRsZVJvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jvdy1jbGljaycsIHJvdywgY29sdW1uLCBldmVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kZWxTZWxlY3Rpb25DaGFuZ2UoXywgcm93KXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dID0gcm93O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkxpc3QgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gc2VsZWN0aW9uTGlzdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb25MaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWFqOmAiS/lhajkuI3pgIlcclxuICAgICAgICBzZWxlY3RBbGwoc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgaWYoc2VsZWN0aW9uLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25MaXN0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHNlbGVjdGlvbkxpc3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uTGlzdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXRDdXJyZW50KGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS5zZXRDdXJyZW50Um93KHRoaXMubGlzdFtpbmRleF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0RGF0YSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZCh0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2xvYWQnLCB0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4gICAgLnBhZ2UtdGFibGV7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIC50YWJsZXtcclxuICAgICAgICAgICAgZmxleDogYXV0byAxIDE7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZSB0aGVhZHtcclxuICAgICAgICBjb2xvcjogIzMzMzMzMztcclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGN0ZBO1xyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlLS1taW5pIC5lbC10YWJsZV9fY2VsbHtcclxuICAgICAgICBwYWRkaW5nOiAzcHggMDtcclxuICAgIH1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWQ4ZGExNDQ2JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kOGRhMTQ0NiZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1kOGRhMTQ0NiZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCJkOGRhMTQ0NlwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZWwtZGlhbG9nJyxfdm0uX2Ioe2RpcmVjdGl2ZXM6W3tuYW1lOlwiZGlhbG9nRHJhZ1wiLHJhd05hbWU6XCJ2LWRpYWxvZ0RyYWdcIn1dLHN0YXRpY1N0eWxlOntcIm1hcmdpbi10b3BcIjpcIjBcIn0sYXR0cnM6e1widGl0bGVcIjpfdm0udGl0bGUsXCJ2aXNpYmxlXCI6X3ZtLmRpYWxvZ1Zpc2libGUsXCJiZWZvcmUtY2xvc2VcIjpfdm0uaGFuZGxlQ2xvc2UsXCJjZW50ZXJcIjpcIlwiLFwiY2xvc2Utb24tY2xpY2stbW9kYWxcIjpmYWxzZSxcInNob3ctY2xvc2VcIjpfdm0uc2hvd0Nsb3NlLFwiYXBwZW5kLXRvLWJvZHlcIjpcIlwifX0sJ2VsLWRpYWxvZycsX3ZtLiRhdHRycyxmYWxzZSksW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJvdmVyZmxvdy15XCI6XCJhdXRvXCIsXCJvdmVyZmxvdy14XCI6XCJoaWRkZW5cIixcInBvc2l0aW9uXCI6XCJyZWxhdGl2ZVwifSxzdHlsZTooe21heEhlaWdodDogX3ZtLm1heEhlaWdodCwgbWluSGVpZ2h0OiBfdm0ubWluSGVpZ2h0fSl9LFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwyKSxfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1widGV4dC1hbGlnblwiOlwiY2VudGVyXCJ9LGF0dHJzOntcInNsb3RcIjpcImZvb3RlclwifSxzbG90OlwiZm9vdGVyXCJ9LFtfdm0uX3QoXCJmb290ZXJcIildLDIpXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8gdi1kaWFsb2dEcmFnOiDlvLnnqpfmi5bmi71cclxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5WdWUuZGlyZWN0aXZlKCdkaWFsb2dEcmFnJywge1xyXG4gICAgYmluZChlbCkge1xyXG5cdFx0Y29uc3QgZGlhbG9nSGVhZGVyRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZWwtZGlhbG9nX19oZWFkZXInKTtcclxuXHRcdGNvbnN0IGRyYWdEb20gPSBlbC5xdWVyeVNlbGVjdG9yKCcuZWwtZGlhbG9nJyk7XHJcblx0XHRkaWFsb2dIZWFkZXJFbC5zdHlsZS5jdXJzb3IgPSAnbW92ZSc7XHJcblxyXG5cdFx0Ly8g6I635Y+W5Y6f5pyJ5bGe5oCnIGllIGRvbeWFg+e0oC5jdXJyZW50U3R5bGUg54Gr54uQ6LC35q2MIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbeWFg+e0oCwgbnVsbCk7XHJcblx0XHRjb25zdCBzdHkgPSBkcmFnRG9tLmN1cnJlbnRTdHlsZSB8fCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkcmFnRG9tLCBudWxsKTtcclxuXHJcblx0XHRkaWFsb2dIZWFkZXJFbC5vbm1vdXNlZG93biA9IChldmVudCk9PntcclxuXHRcdFx0Ly8g6byg5qCH5oyJ5LiL77yM6K6h566X5b2T5YmN5YWD57Sg6Led56a75Y+v6KeG5Yy655qE6Led56a7XHJcblx0XHRcdGNvbnN0IGRpc1ggPSBldmVudC5jbGllbnRYIC0gZGlhbG9nSGVhZGVyRWwub2Zmc2V0TGVmdDtcclxuXHRcdFx0Y29uc3QgZGlzWSA9IGV2ZW50LmNsaWVudFkgLSBkaWFsb2dIZWFkZXJFbC5vZmZzZXRUb3A7XHJcblxyXG5cdFx0XHQvLyDojrflj5bliLDnmoTlgLzluKZweCDmraPliJnljLnphY3mm7/mjaJcclxuXHRcdFx0bGV0IHN0eUw9bnVsbDtcclxuXHRcdFx0bGV0IHN0eVQ9bnVsbDtcclxuXHJcblx0XHRcdC8vIOazqOaEj+WcqGll5LitIOesrOS4gOasoeiOt+WPluWIsOeahOWAvOS4uue7hOS7tuiHquW4pjUwJSDnp7vliqjkuYvlkI7otYvlgLzkuLpweFxyXG5cdFx0XHRpZiAoc3R5LmxlZnQuaW5jbHVkZXMoJ1xcJScpKSB7XHJcblx0XHRcdFx0c3R5TCA9ICtkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICogKCtzdHkubGVmdC5yZXBsYWNlKC9cXCUvZywgJycpIC8gMTAwKTtcclxuXHRcdFx0XHRzdHlUID0gK2RvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0ICogKCtzdHkudG9wLnJlcGxhY2UoL1xcJS9nLCAnJykgLyAxMDApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHN0eUwgPSArc3R5LmxlZnQucmVwbGFjZSgvXFxweC9nLCAnJyk7XHJcblx0XHRcdFx0c3R5VCA9ICtzdHkudG9wLnJlcGxhY2UoL1xccHgvZywgJycpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHQvLyDpgJrov4fkuovku7blp5TmiZjvvIzorqHnrpfnp7vliqjnmoTot53nprtcclxuXHRcdFx0XHRjb25zdCBsID0gZS5jbGllbnRYIC0gZGlzWDtcclxuXHRcdFx0XHRjb25zdCB0ID0gZS5jbGllbnRZIC0gZGlzWTtcclxuXHJcblx0XHRcdFx0Ly8g56e75Yqo5b2T5YmN5YWD57SgXHJcblx0XHRcdFx0ZHJhZ0RvbS5zdHlsZS5sZWZ0ID0gYCR7bCArIHN0eUx9cHhgO1xyXG5cdFx0XHRcdGRyYWdEb20uc3R5bGUudG9wID0gYCR7dCArIHN0eVR9cHhgO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xyXG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH1cclxufSk7XHJcblxyXG5WdWUuZGlyZWN0aXZlKCdyZW1vdmVBcmlhSGlkZGVuJywge1xyXG5cdGJpbmQoZWwpIHtcclxuXHRcdGxldCBhcmlhRWxzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnLmVsLXJhZGlvX19vcmlnaW5hbCcpO1xyXG5cdFx0YXJpYUVscy5mb3JFYWNoKChpdGVtKT0+e1xyXG5cdFx0XHRpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7IiwiPHRlbXBsYXRlPlxyXG4gICAgPGVsLWRpYWxvZyB2LWJpbmQ9XCIkYXR0cnNcIiA6dGl0bGU9XCJ0aXRsZVwiIDp2aXNpYmxlPVwiZGlhbG9nVmlzaWJsZVwiIHYtZGlhbG9nRHJhZyA6YmVmb3JlLWNsb3NlPVwiaGFuZGxlQ2xvc2VcIiBjZW50ZXIgOmNsb3NlLW9uLWNsaWNrLW1vZGFsPVwiZmFsc2VcIiA6c2hvdy1jbG9zZT1cInNob3dDbG9zZVwiIGFwcGVuZC10by1ib2R5IHN0eWxlPVwibWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bztvdmVyZmxvdy14OiBoaWRkZW47cG9zaXRpb246IHJlbGF0aXZlO1wiIDpzdHlsZT1cInttYXhIZWlnaHQsIG1pbkhlaWdodH1cIj5cclxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiZm9vdGVyXCI+PC9zbG90PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9lbC1kaWFsb2c+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5pbXBvcnQgJy4vZGlhbG9nLWRyYWcnO1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnRGlhbG9nJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAn5o+Q56S6J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF4SGVpZ2h0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJzYwdmgnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtaW5IZWlnaHQ6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnMTUwcHgnXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIGRpYWxvZ1Zpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDbG9zZTogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBpZih0aGlzLiRsaXN0ZW5lcnNbJ2Nsb3NlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVDbG9zZSgpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi9kZWVwLy5lbC1kaWFsb2dfX2hlYWRlcntcclxuICAgIHBhZGRpbmc6IDE1cHggMjBweDtcclxufVxyXG4vZGVlcC8uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fYm9keXtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxNDg3NjJlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MTQ4NzYyZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00MTQ4NzYyZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI0MTQ4NzYyZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZWwtY2FyZCcse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiY2FsYygxMDAlIC0gMnB4KVwiLFwib3ZlcmZsb3dcIjpcImF1dG9cIn0sYXR0cnM6e1wic2hhZG93XCI6X3ZtLnNoYWRvd319LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJjbGVhcmZpeFwiLGF0dHJzOntcInNsb3RcIjpcImhlYWRlclwifSxzbG90OlwiaGVhZGVyXCJ9LFtfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wiZm9udC1zaXplXCI6XCIxNnB4XCJ9fSxbKF92bS4kc2xvdHNbJ2NhcmQtdGl0bGUnXSk/W192bS5fdChcImNhcmQtdGl0bGVcIildOltfdm0uX3YoXCIgXCIrX3ZtLl9zKF92bS50aXRsZSkrXCIgXCIpXV0sMiksX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcImZsZXhcIjpcIjFcIixcInBvc2l0aW9uXCI6XCJyZWxhdGl2ZVwifX0sW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJwb3NpdGlvblwiOlwiYWJzb2x1dGVcIixcInJpZ2h0XCI6XCIwcHhcIixcInRvcFwiOlwiLTE0cHhcIixcIndpZHRoXCI6XCIxMDAlXCIsXCJ0ZXh0LWFsaWduXCI6XCJyaWdodFwifX0sW192bS5fdChcImNhcmQtdG9vbHNcIildLDIpXSldKSxfdm0uX3QoXCJkZWZhdWx0XCIpXSwyKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZWwtY2FyZCA6c2hhZG93PVwic2hhZG93XCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgPGRpdiBzbG90PVwiaGVhZGVyXCIgY2xhc3M9XCJjbGVhcmZpeFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIkc2xvdHNbJ2NhcmQtdGl0bGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJjYXJkLXRpdGxlXCI+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAtMTRweDt3aWR0aDogMTAwJTt0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiY2FyZC10b29sc1wiPjwvc2xvdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICA8L2VsLWNhcmQ+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnQ2FyZCcsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNoYWRvdzoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLmNsZWFyZml4e1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTBjNWRlMDZlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzVkZTA2ZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYzVkZTA2ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIwYzVkZTA2ZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiAoX3ZtLnNob3cpP19jKCdkaXYnLFsoX3ZtLmRhdGEubGVuZ3RoID4gMCk/X3ZtLl9sKChfdm0uZGF0YSksZnVuY3Rpb24oaXRlbSl7cmV0dXJuIF9jKCdhdXRoLXRyZWUnLHtrZXk6aXRlbS5pZCxhdHRyczp7XCJkYXRhXCI6aXRlbSxcInByb3BzXCI6X3ZtLnByb3BzfSxvbjp7XCJvbi1ub2RlLWV4cGFuZFwiOihkYXRhKT0+X3ZtLm9uRXhwYW5kKGRhdGEpLFwib24tbm9kZS1jaGVja2VkXCI6KGRhdGEpPT5fdm0ub25DaGVja2VkKGRhdGEpfX0pfSk6X3ZtLl9lKCldLDIpOl92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8vIOaYr+WQpuacieWtkOiKgueCuVxuY29uc3QgaGFzQ2hpbGRyZW4gPSAoZGF0YSk9PntcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmNoaWxkcmVuKSAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG59O1xuXG4vLyDliJvlu7roioLngrlcbmV4cG9ydCBjb25zdCByZW5kZXJMYWJlbCA9IChoLCBkYXRhLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IHtwcm9wcywgbGlzdGVuZXJzfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgY2xpY2tIYW5kbGVyID0gbGlzdGVuZXJzWydvbi1ub2RlLWV4cGFuZCddO1xuICAgIGNvbnN0IGNoZWNrZWRIYW5kbGVyID0gbGlzdGVuZXJzWydvbi1ub2RlLWNoZWNrZWQnXTtcbiAgICBjb25zdCBsYWJlbCA9IGRhdGFbcHJvcHMucHJvcHMubGFiZWxdO1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBbXTtcbiAgICBjaGlsZE5vZGVzLnB1c2gobGFiZWwpO1xuXG4gICAgY29uc3QgaWNvQ2xhc3MgPSBbXTtcbiAgICBpZihoYXNDaGlsZHJlbihkYXRhKSl7XG4gICAgICAgIGlmKGRhdGEuZXhwYW5kKXtcbiAgICAgICAgICAgIGljb0NsYXNzLnB1c2goJ2ljb24taWNvbi1kd29uJyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWNvQ2xhc3MucHVzaCgnaWNvbi1pY29uX3JpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGgoJ2xpJywge1xuICAgIH0sIFtcbiAgICAgICAgaCgnaScsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBgaWNvbmZvbnQgJHtpY29DbGFzcy5qb2luKCcgJyl9YFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogYCR7MTQqZGF0YS5fbGV2ZX1weGAsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0ycHgpJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM2NjYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tIYW5kbGVyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJycpLFxuICAgICAgICBoKCdpJywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGRhdGEuY2hlY2tlZD8naWNvbmZvbnQgaWNvbi1mYW5neGluZ3h1YW56aG9uZ2ZpbCc6J2ljb25mb250IGljb24tZmFuZ3hpbmd3ZWl4dWFuemhvbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM2NjYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZEhhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnJyksXG4gICAgICAgIGgoJ3NwYW4nLCB7XG5cbiAgICAgICAgfSwgY2hpbGROb2RlcylcbiAgICBdKTtcbn07XG5cbi8vIOWIm+W7uiBub2RlIOWtkOiKgueCuVxuZXhwb3J0IGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKGgsIGxpc3QsIGV4cGFuZCwgY29udGV4dCk9PntcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSAmJiBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGxpc3QubWFwKGl0ZW09PntcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJOb2RlKGgsIGl0ZW0sIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNscyA9IFsndHJlZS1ub2RlLWNoaWxkcmVuJ107XG4gICAgICAgIGlmKCFleHBhbmQpe1xuICAgICAgICAgICAgY2xzLnB1c2goJ2V4cGFuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoKCdkaXYnLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2xzLmpvaW4oJyAnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJOb2RlID0gKGgsIGRhdGEsIGNvbnRleHQpPT57XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGNoaWxkTm9kZXMucHVzaChyZW5kZXJMYWJlbChoLCBkYXRhLCBjb250ZXh0KSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkcmVuO1xuICAgIGlmKGhhc0NoaWxkcmVuKGRhdGEpKXtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKHJlbmRlckNoaWxkcmVuKGgsIGNoaWxkcmVuLCBkYXRhLmV4cGFuZCwgY29udGV4dCkpO1xuICAgIH1cblxuICAgIHJldHVybiBoKCd1bCcsIHtcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25vZGUnXG4gICAgICAgIH1cbiAgICB9LCBjaGlsZE5vZGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXIgPSAoaCwgY29udGV4dCk9PntcbiAgICBjb25zdCB7cHJvcHN9ID0gY29udGV4dDtcbiAgICByZXR1cm4gcmVuZGVyTm9kZShoLCBwcm9wcy5kYXRhLCBjb250ZXh0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcjsiLCI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic2hvd1wiPlxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImRhdGEubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGF1dGgtdHJlZSB2LWZvcj1cIml0ZW0gaW4gZGF0YVwiXG4gICAgICAgICAgICAgICAgOmtleT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOnByb3BzPVwicHJvcHNcIlxuICAgICAgICAgICAgICAgIEBvbi1ub2RlLWV4cGFuZD1cIihkYXRhKT0+b25FeHBhbmQoZGF0YSlcIlxuICAgICAgICAgICAgICAgIEBvbi1ub2RlLWNoZWNrZWQ9XCIoZGF0YSk9Pm9uQ2hlY2tlZChkYXRhKVwiXG4gICAgICAgICAgICA+PC9hdXRoLXRyZWU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHJlbmRlciBmcm9tICcuL3RyZWUnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdUcmVlJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEF1dGhUcmVlOiB7XG4gICAgICAgICAgICByZW5kZXIsXG4gICAgICAgICAgICBmdW5jdGlvbmFsOiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnbmFtZSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRhKCl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAxLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBsaXN0OiBbXSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGluaXQoZGF0YSwgbGV2ZSl7XG4gICAgICAgICAgICBkYXRhLl9sZXZlID0gbGV2ZTtcbiAgICAgICAgICAgIGlmKGRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICBsZXZlKys7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YS5jaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChkYXRhLmNoaWxkcmVuW2ldLCBsZXZlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWIt+aWsFxuICAgICAgICByZWZyZXNoKCl7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyDlsZXlvIAv6ZqQ6JePXG4gICAgICAgIG9uRXhwYW5kKGRhdGEpe1xuICAgICAgICAgICAgZGF0YS5leHBhbmQgPSAhZGF0YS5leHBhbmQ7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YCJ5LitL+WPlua2iOmAieS4rVxuICAgICAgICBvbkNoZWNrZWQoZGF0YSl7XG4gICAgICAgICAgICBkYXRhLmNoZWNrZWQgPSAhZGF0YS5jaGVja2VkO1xuICAgICAgICAgICAgdGhpcy50b29sZXJDaGVja2VkKHRoaXMuZGF0YSwgZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICB0b29sZXJDaGVja2VkKGxpc3QsIG5vZGUpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gbGlzdCl7XG4gICAgICAgICAgICAgICAgaWYobGlzdFtpXS5pZCA9PT0gbm9kZS5pZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hpbGRDaGVja2VkKGxpc3RbaV0uY2hpbGRyZW4sIGxpc3RbaV0uY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGVyQ2hlY2tlZChsaXN0W2ldLmNoaWxkcmVuLCBub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmAieS4reiKgueCueaXtu+8jOiuvue9ruWtkOiKgueCueWFqOmAiVxuICAgICAgICBzZXRDaGlsZENoZWNrZWQoY2hpbGRyZW4sIGNoZWNrZWQpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hpbGRDaGVja2VkKGNoaWxkcmVuW2ldLmNoaWxkcmVuLCBjaGVja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6K6+572u54i26IqC54K56YCJ5LitXG4gICAgICAgIHNldFBhcmVudENoZWNrZWQoZGF0YSl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJc0NoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldLmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRDaGVja2VkKGRhdGFbaV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDliKTmlq3oioLngrnnmoTlrZDoioLngrnmmK/lkKbmnInpgInkuK1cbiAgICAgICAgY2hpbGRJc0NoZWNrZWQoY2hpbGRyZW4pe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkSXNDaGVja2VkKGNoaWxkcmVuW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiuvue9rum7mOiupOmAieS4rVxuICAgICAgICBzZXREZWZhdWx0Q2hlY2tlZChkZWZhdWx0SWRzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRlZmF1bHRJZHMpe1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCh0aGlzLmRhdGEsIGRlZmF1bHRJZHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRDaGVja2VkKHRoaXMuZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOagueaNruaJgOe7meeahGlk77yM6K6+572u5pS56aG56YCJ5LitXG4gICAgICAgIHNldENoZWNrZWQoZGF0YSwgaWQpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5pZCA9PT0gaWQpe1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2ldLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKGRhdGFbaV0uY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6I635Y+W6YCJ5Lit6YCJ55qEa2V5XG4gICAgICAgIGdldENoZWNrZWRLZXlzKCl7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkS2V5cyh0aGlzLmRhdGEsIGtleXMpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmBjeWOhuWHuumAieS4remAieeahGtleVxuICAgICAgICBfZ2V0Q2hlY2tlZEtleXMoZGF0YSwga2V5cyl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZGF0YVtpXS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZEtleXMoZGF0YVtpXS5jaGlsZHJlbiwga2V5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDojrflj5bpgInkuK3pgInnmoToioLngrlcbiAgICAgICAgZ2V0Q2hlY2tlZE5vZGVzKCl7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZE5vZGVzKHRoaXMuZGF0YSwgbm9kZXMpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgY3ljoblh7rpgInkuK3pgInnmoToioLngrlcbiAgICAgICAgX2dldENoZWNrZWROb2RlcyhkYXRhLCBub2Rlcyl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKGRhdGFbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWROb2RlcyhkYXRhW2ldLmNoaWxkcmVuLCBub2Rlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpIGluIHRoaXMuZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdCh0aGlzLmRhdGFbaV0sIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbkBpbXBvcnQgdXJsKC4vaWNvbi9pY29uZm9udC5jc3MpO1xudWx7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgbGl7XG4gICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgLmNoZWNrLWljb3tcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGhlaWdodDogNXB4O1xuICAgICAgICAgICAgd2lkdGg6IDVweDtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGk6aG92ZXJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGNvbG9yOiAjMDAwMDAwLCAkYWxwaGE6IDAuMSk7XG4gICAgfVxuXG4gICAgLmV4cGFuZHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWU4MWUwNWUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVlODFlMDVlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVlODFlMDVlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjVlODFlMDVlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikge1xuICBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7XG4gIH1cbn0iLCJpbXBvcnQgY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiBmcm9tIFwiLi9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7XG4gIGNoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTtcbiAgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikge1xuICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTtcbn0iLCJpbXBvcnQgYXNzZXJ0Q2xhc3NCcmFuZCBmcm9tIFwiLi9hc3NlcnRDbGFzc0JyYW5kLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQyKHMsIGEsIHIpIHtcbiAgcmV0dXJuIHMuc2V0KGFzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByO1xufSIsImltcG9ydCBhc3NlcnRDbGFzc0JyYW5kIGZyb20gXCIuL2Fzc2VydENsYXNzQnJhbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldDIocywgYSkge1xuICByZXR1cm4gcy5nZXQoYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdXG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufVxuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudlxufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCBjb29raWVzIGZyb20gJy4vLi4vaGVscGVycy9jb29raWVzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSAnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gJy4uL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMnO1xuXG5mdW5jdGlvbiBwcm9ncmVzc0V2ZW50UmVkdWNlcihsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSkge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiBlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlXG4gICAgfTtcblxuICAgIGRhdGFbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ10gPSB0cnVlO1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH07XG59XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIHdpdGhYU1JGVG9rZW59ID0gY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb250ZW50VHlwZTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUoZmFsc2UpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IHJlcXVlc3RIZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICBjb25zdCB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgY29uc3QgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihjb25maWcpKTtcblxuICAgICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpKSB7XG4gICAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgICBjb25zdCB4c3JmVmFsdWUgPSBjb25maWcueHNyZkhlYWRlck5hbWUgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXQoY29uZmlnLnhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlclxufVxuXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHRoaW5nLnRvSlNPTigpIDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNi43XCI7IiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4uL2Vudi9kYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG5cbiAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHB7XHJcbiAgICAjYXhpb3M7XHJcbiAgICAjcmVxdWVzdENvdW50ID0gMDsgLy8g6K+35rGC5qyh5pWwXHJcbiAgICAjbG9hZGluZ0luc3RhbmNlID0gbnVsbDtcclxuICAgICNjb25maWcgPSB7XHJcbiAgICAgICAgYmFzZVVSTDogJycsXHJcbiAgICAgICAgdGltZW91dDogNjAgKiAxMDAwLFxyXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgICAgc3VjY2Vzc0NvZGU6IDIwMCxcclxuICAgICAgICBlcnJvckNvZGU6IDUwMCxcclxuICAgICAgICBjYWxsQmFja0NvZGU6IFtdLFxyXG4gICAgICAgIGNhbGw6IG51bGxcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xyXG4gICAgICAgIGZvcihjb25zdCBrIGluIHRoaXMuI2NvbmZpZyl7XHJcbiAgICAgICAgICAgIGlmKG9wdGlvbnNba10pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY29uZmlnW2tdID0gb3B0aW9uc1trXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBheGlvcy5kZWZhdWx0cy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnO1xyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIHRoaXMuI2F4aW9zID0gYXhpb3MuY3JlYXRlKHRoaXMuI2NvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMuI2F4aW9zLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShcclxuICAgICAgICAgICAgY29uZmlnPT57XHJcbiAgICAgICAgICAgICAgICBpZighY29uZmlnLnBhcmFtcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZSA9IGxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I9PntcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoXHJcbiAgICAgICAgICAgIHJlc3BvbnNlPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNyZXF1ZXN0Q291bnQtLTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI3JlcXVlc3RDb3VudCA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKXtcclxuICAgICAgICBpZighcmVzKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyZXMuY29kZSA9PT0gdGhpcy4jY29uZmlnLnN1Y2Nlc3NDb2RlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSBpZihyZXMuY29kZSA9PT0gdGhpcy4jY29uZmlnLmVycm9yQ29kZSl7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIocmVzKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBlcnJvcihyZXMubXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuI2NvbmZpZy5jYWxsQmFja0NvZGUuaW5jbHVkZXMocmVzLmNvZGUpICYmIHR5cGVvZiB0aGlzLiNjb25maWcuY2FsbCA9PT0gJ2Z1bmN0aW9uJyl7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbmZpZy5jYWxsKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvc3QodXJsLHBhcmFtcyxzdWNjZXNzLGVycil7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MucG9zdCh1cmwscGFyYW1zKS50aGVuKHJlcz0+e1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSh1cmwscGFyYW1zLHN1Y2Nlc3MsZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy51cGRhdGUodXJsLHBhcmFtcykudGhlbihyZXM9PntcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQodXJsLCBwYXJhbXMsIHN1Y2Nlc3MsIGVycil7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MuZ2V0KHVybCwgeyBwYXJhbXM6IHBhcmFtc30pLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUodXJsLCBwYXJhbXMsIHN1Y2Nlc3MsIGVycil7XHJcblx0XHR0aGlzLiNheGlvcy5kZWxldGUodXJsLCB7IHBhcmFtczogcGFyYW1zfSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHR0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuICAgIGRvd25Mb2FkKHVybCwgcGFyYW1zPXt9KXtcclxuICAgICAgICB0aGlzLiNheGlvcy5wb3N0KHVybCwgcGFyYW1zLCB7J3Jlc3BvbnNlVHlwZSc6ICdibG9iJ30pLnRoZW4ocmVzPT57XHJcblx0XHRcdGlmKHJlcyl7XHJcblx0XHRcdFx0bGV0IGZpbGVOYW1lID0gcGFyYW1zLmZpbGVOYW1lO1xyXG5cdFx0XHRcdGlmKCFmaWxlTmFtZSl7XHJcblx0XHRcdFx0XHRmaWxlTmFtZSA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJ2ZpbGVuYW1lPScpWzFdLnJlcGxhY2UoL1wiL2csICcnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuZGF0YV0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2NoYXJzZXQ9VVRGLTgnfSk7XHJcblx0XHRcdFx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuXHRcdFx0XHRsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0bGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblx0XHRcdFx0bGluay5kb3dubG9hZCA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSk7XHJcblx0XHRcdFx0bGluay5jbGljaygpO1xyXG5cdFx0XHRcdHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGxpbmsuaHJlZik7XHJcblx0XHRcdH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsInJlcXVpcmUoJy4vbWVzc2FnZS9pbmRleC5qcycpO1xyXG5pbXBvcnQgUGFnaW5hdGlvbiBmcm9tICcuL3BhZ2luYXRpb24vSW5kZXgudnVlJztcclxuaW1wb3J0IFBhZ2VUYWJsZSBmcm9tICcuL3BhZ2UtdGFibGUvSW5kZXgudnVlJztcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuL2RpYWxvZy9JbmRleC52dWUnO1xyXG5pbXBvcnQgQ2FyZCBmcm9tICcuL2NhcmQvSW5kZXgudnVlJztcclxuaW1wb3J0IFRyZWUgZnJvbSAnLi90cmVlL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBfSHR0cCBmcm9tICcuL2h0dHAvaW5kZXguanMnO1xyXG5jb25zdCBjb21zID0gW1BhZ2luYXRpb24sIFBhZ2VUYWJsZSwgRGlhbG9nLCBDYXJkLCBUcmVlXTtcclxuY29uc3QgaW5zdGFsbCA9IGZ1bmN0aW9uKFZ1ZSl7XHJcbiAgICBjb21zLmZvckVhY2goY29tID0+IHtcclxuICAgICAgICBWdWUuY29tcG9uZW50KGNvbS5uYW1lLCBjb20pO1xyXG4gICAgfSlcclxufVxyXG5cclxuLy8g5a+85Ye657uE5Lu2XHJcbmV4cG9ydCBkZWZhdWx0IGluc3RhbGw7XHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cCBleHRlbmRzIF9IdHRwe1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgJy4vc2V0UHVibGljUGF0aCdcbmltcG9ydCBtb2QgZnJvbSAnfmVudHJ5J1xuZXhwb3J0IGRlZmF1bHQgbW9kXG5leHBvcnQgKiBmcm9tICd+ZW50cnknXG4iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInRvdGFsIiwiX2IiLCJhdHRycyIsImN1cnJlbnRQYWdlIiwicGFnZVNpemUiLCJwYWdlU2l6ZXMiLCJvbiIsImhhbmRsZVNpemVDaGFuZ2UiLCJoYW5kbGVDdXJyZW50Q2hhbmdlIiwiJGF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJuYW1lIiwicHJvcHMiLCJyZXF1aXJlZCIsInR5cGUiLCJOdW1iZXIiLCJkZWZhdWx0IiwicGFnZSIsImxpbWl0IiwiQXJyYXkiLCJjb21wdXRlZCIsImdldCIsInNldCIsInZhbCIsIiRlbWl0IiwidG90YWxDb3VudCIsIm1ldGhvZHMiLCJzdGF0aWNDbGFzcyIsInRhYmxlSWQiLCJzdGF0aWNTdHlsZSIsInJlZiIsImxpc3QiLCJyb3dLZXkiLCJsb2FkIiwiaGxpZ2h0Q3VycmVudFJvdyIsImRlZmF1bHRFeHBhbmRBbGwiLCJoYW5kZWxTZWxlY3Rpb25DaGFuZ2UiLCJzZWxlY3RBbGwiLCJoYW5kbGVSb3dDbGljayIsInNob3dDaGVja0JveCIsInNvcnROdW0iLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJzY29wZSIsIl92IiwiX3MiLCJwYXJhbXMiLCIkaW5kZXgiLCJfdCIsInVwZGF0ZTpwYWdlIiwiJGV2ZW50IiwiJHNldCIsImdldExpc3QiLCJkYXRhIiwidXJsIiwiU3RyaW5nIiwibWV0aG9kIiwiQm9vbGVhbiIsImRlZmF1bHRQYXJhbXMiLCJPYmplY3QiLCJkZWZhdWx0U2VsZWN0IiwieXBlIiwid2F0Y2giLCJuZXdWYWwiLCJoYW5kbGVyIiwic2V0Q2hlY2tlZCIsImRlZXAiLCJvbGRWYWwiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJzZWxlY3REYXRhIiwic2VsZWN0SWRzIiwibW91bnRlZCIsIiRsaXN0ZW5lcnMiLCJpdGVtIiwicGFnZU9wdGlvbiIsInN0b3JhZ2VQYXJhbXMiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCIkcm91dGUiLCJwYXRoIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJodHRwIiwicmVzIiwiX3NldERhdGEiLCJwb3N0IiwicmVjb3JkcyIsImxlbmd0aCIsIm1hcCIsIiRuZXh0VGljayIsIiRyZWZzIiwiaW5jbHVkZXMiLCJ0b2dnbGVSb3dTZWxlY3Rpb24iLCJxdWVyeSIsImtleXMiLCJyb3ciLCJjb2x1bW4iLCJldmVudCIsIl8iLCJzZWxlY3Rpb25MaXN0IiwidmFsdWVzIiwic2VsZWN0aW9uIiwic2V0Q3VycmVudCIsImluZGV4Iiwic2V0Q3VycmVudFJvdyIsImdldERhdGEiLCJ0cmVlIiwidHJlZU5vZGUiLCJyZXNvbHZlIiwiZGlyZWN0aXZlcyIsInJhd05hbWUiLCJ0aXRsZSIsImRpYWxvZ1Zpc2libGUiLCJoYW5kbGVDbG9zZSIsInNob3dDbG9zZSIsInN0eWxlIiwibWF4SGVpZ2h0IiwibWluSGVpZ2h0Iiwic2xvdCIsIlZ1ZSIsImRpcmVjdGl2ZSIsImJpbmQiLCJlbCIsImRpYWxvZ0hlYWRlckVsIiwicXVlcnlTZWxlY3RvciIsImRyYWdEb20iLCJjdXJzb3IiLCJzdHkiLCJjdXJyZW50U3R5bGUiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwib25tb3VzZWRvd24iLCJkaXNYIiwiY2xpZW50WCIsIm9mZnNldExlZnQiLCJkaXNZIiwiY2xpZW50WSIsIm9mZnNldFRvcCIsInN0eUwiLCJzdHlUIiwibGVmdCIsImRvY3VtZW50IiwiYm9keSIsImNsaWVudFdpZHRoIiwicmVwbGFjZSIsImNsaWVudEhlaWdodCIsInRvcCIsIm9ubW91c2Vtb3ZlIiwiZSIsImwiLCJ0Iiwib25tb3VzZXVwIiwiYXJpYUVscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwicmVtb3ZlQXR0cmlidXRlIiwic2hhZG93IiwiJHNsb3RzIiwic2hvdyIsIl9sIiwiaWQiLCJvbkV4cGFuZCIsIm9uQ2hlY2tlZCIsImhhc0NoaWxkcmVuIiwiaXNBcnJheSIsImNoaWxkcmVuIiwicmVuZGVyTGFiZWwiLCJoIiwiY29udGV4dCIsImxpc3RlbmVycyIsImNsaWNrSGFuZGxlciIsImNoZWNrZWRIYW5kbGVyIiwibGFiZWwiLCJjaGlsZE5vZGVzIiwicHVzaCIsImljb0NsYXNzIiwiZXhwYW5kIiwiZG9tUHJvcHMiLCJjbGFzc05hbWUiLCJqb2luIiwibWFyZ2luTGVmdCIsIl9sZXZlIiwiZm9udFNpemUiLCJ0cmFuc2Zvcm0iLCJjb2xvciIsImNsaWNrIiwiY2hlY2tlZCIsInJlbmRlckNoaWxkcmVuIiwicmVuZGVyTm9kZSIsImNscyIsImNvbXBvbmVudHMiLCJBdXRoVHJlZSIsImZ1bmN0aW9uYWwiLCJpbml0IiwibGV2ZSIsImkiLCJyZWZyZXNoIiwidG9vbGVyQ2hlY2tlZCIsInNldFBhcmVudENoZWNrZWQiLCJub2RlIiwic2V0Q2hpbGRDaGVja2VkIiwiY2hpbGRJc0NoZWNrZWQiLCJzZXREZWZhdWx0Q2hlY2tlZCIsImRlZmF1bHRJZHMiLCJnZXRDaGVja2VkS2V5cyIsIl9nZXRDaGVja2VkS2V5cyIsImdldENoZWNrZWROb2RlcyIsIm5vZGVzIiwiX2dldENoZWNrZWROb2RlcyIsImltbWVkaWF0ZSIsIl9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIiwib2JqIiwicHJpdmF0ZUNvbGxlY3Rpb24iLCJoYXMiLCJUeXBlRXJyb3IiLCJjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIiwiX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMiLCJwcml2YXRlTWFwIiwidmFsdWUiLCJfYXNzZXJ0Q2xhc3NCcmFuZCIsIm4iLCJhcmd1bWVudHMiLCJhc3NlcnRDbGFzc0JyYW5kIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0MiIsInMiLCJhIiwiciIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldDIiLCJ0aGlzQXJnIiwid3JhcCIsImFwcGx5IiwicHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJraW5kT2YiLCJjYWNoZSIsInRoaW5nIiwic3RyIiwiY2FsbCIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJjcmVhdGUiLCJraW5kT2ZUZXN0IiwidHlwZU9mVGVzdCIsImlzVW5kZWZpbmVkIiwiaXNCdWZmZXIiLCJjb25zdHJ1Y3RvciIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJyZXN1bHQiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzQm9vbGVhbiIsImlzUGxhaW5PYmplY3QiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIml0ZXJhdG9yIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzU3RyZWFtIiwicGlwZSIsImlzRm9ybURhdGEiLCJraW5kIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJpc1VSTFNlYXJjaFBhcmFtcyIsInRyaW0iLCJhbGxPd25LZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbiIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImdsb2JhbFRoaXMiLCJzZWxmIiwiZ2xvYmFsIiwiaXNDb250ZXh0RGVmaW5lZCIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4dGVuZCIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwiZGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0eSIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwicHJvcCIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJ1bmRlZmluZWQiLCJsYXN0SW5kZXgiLCJpbmRleE9mIiwidG9BcnJheSIsImFyciIsImlzVHlwZWRBcnJheSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiZm9yRWFjaEVudHJ5IiwiZ2VuZXJhdG9yIiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImlzSFRNTEZvcm0iLCJ0b0NhbWVsQ2FzZSIsInJlcGxhY2VyIiwibSIsInAxIiwicDIiLCJ0b1VwcGVyQ2FzZSIsImhhc093blByb3BlcnR5IiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInJldCIsImRlZmluZVByb3BlcnRpZXMiLCJmcmVlemVNZXRob2RzIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiRXJyb3IiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJzcGxpdCIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBQkVUIiwiQUxQSEFfRElHSVQiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJhbHBoYWJldCIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJzdGFjayIsInZpc2l0Iiwic291cmNlIiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNBc3luY0ZuIiwiaXNUaGVuYWJsZSIsInRoZW4iLCJjYXRjaCIsImhhc093blByb3AiLCJ1dGlscyIsIkF4aW9zRXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsImNvbmZpZyIsInJlcXVlc3QiLCJyZXNwb25zZSIsImNhcHR1cmVTdGFja1RyYWNlIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGF0dXMiLCJmcm9tIiwiZXJyb3IiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsIlBsYXRmb3JtRm9ybURhdGEiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwiZG90cyIsImNvbmNhdCIsImVhY2giLCJ0b2tlbiIsImlzRmxhdEFycmF5Iiwic29tZSIsInByZWRpY2F0ZXMiLCJ0ZXN0IiwidG9Gb3JtRGF0YSIsImZvcm1EYXRhIiwib3B0aW9ucyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwiZGVmaW5lZCIsIm9wdGlvbiIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsIl9CbG9iIiwiQmxvYiIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJwb3AiLCJlbmNvZGUiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWF0Y2giLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsIl9wYWlycyIsImVuY29kZXIiLCJfZW5jb2RlIiwiYnVpbGRVUkwiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJmb3JFYWNoSGFuZGxlciIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwibmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwicGxhdGZvcm0iLCJ0b1VSTEVuY29kZWRGb3JtIiwiaGVscGVycyIsImlzTm9kZSIsInBhcnNlUHJvcFBhdGgiLCJhcnJheVRvT2JqZWN0IiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJlbnRyaWVzIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzdHJpbmdpZnlTYWZlbHkiLCJyYXdWYWx1ZSIsInBhcnNlciIsInBhcnNlIiwiZGVmYXVsdHMiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInRpbWVvdXQiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsImlnbm9yZUR1cGxpY2F0ZU9mIiwicmF3SGVhZGVycyIsInBhcnNlZCIsImxpbmUiLCJwYXJzZUhlYWRlcnMiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJwYXJzZVRva2VucyIsInRva2VucyIsInRva2Vuc1JFIiwiaXNWYWxpZEhlYWRlck5hbWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiZm9ybWF0SGVhZGVyIiwidyIsImNoYXIiLCJidWlsZEFjY2Vzc29ycyIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJjb25maWd1cmFibGUiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsIm1hdGNoZXIiLCJkZWxldGUiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwibm9ybWFsaXplIiwiZm9ybWF0Iiwibm9ybWFsaXplZCIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJmaXJzdCIsImFjY2Vzc29yIiwiaW50ZXJuYWxzIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsInRyYW5zZm9ybURhdGEiLCJmbnMiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJDYW5jZWxlZEVycm9yIiwiRVJSX0NBTkNFTEVEIiwic2V0dGxlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiZmxvb3IiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJyZWFkIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwiYmFzZVVSTCIsInJlbGF0aXZlVVJMIiwiYnVpbGRGdWxsUGF0aCIsInJlcXVlc3RlZFVSTCIsInN0YW5kYXJkQnJvd3NlckVudiIsIm1zaWUiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImNoYXJBdCIsImxvY2F0aW9uIiwiaXNVUkxTYW1lT3JpZ2luIiwicmVxdWVzdFVSTCIsIm5vblN0YW5kYXJkQnJvd3NlckVudiIsInBhcnNlUHJvdG9jb2wiLCJzcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImhlYWQiLCJ0YWlsIiwiZmlyc3RTYW1wbGVUUyIsImNodW5rTGVuZ3RoIiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInBhc3NlZCIsInJvdW5kIiwiY29va2llcyIsInByb2dyZXNzRXZlbnRSZWR1Y2VyIiwibGlzdGVuZXIiLCJpc0Rvd25sb2FkU3RyZWFtIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsImxvYWRlZCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsImluUmFuZ2UiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImlzWEhSQWRhcHRlclN1cHBvcnRlZCIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsImRpc3BhdGNoWGhyUmVxdWVzdCIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJ3aXRoWFNSRlRva2VuIiwib25DYW5jZWxlZCIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsImJ0b2EiLCJmdWxsUGF0aCIsIm9wZW4iLCJwYXJhbXNTZXJpYWxpemVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VEYXRhIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImVyciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsImhhbmRsZUxvYWQiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJzZXRUaW1lb3V0Iiwib25hYm9ydCIsImhhbmRsZUFib3J0IiwiRUNPTk5BQk9SVEVEIiwib25lcnJvciIsImhhbmRsZUVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJoYW5kbGVUaW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aXRoQ3JlZGVudGlhbHMiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInNlbmQiLCJodHRwQWRhcHRlciIsInhockFkYXB0ZXIiLCJrbm93bkFkYXB0ZXJzIiwieGhyIiwicmVuZGVyUmVhc29uIiwicmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImdldEFkYXB0ZXIiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsIm9uQWRhcHRlclJlc29sdXRpb24iLCJvbkFkYXB0ZXJSZWplY3Rpb24iLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInRpbWVvdXRNZXNzYWdlIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIiwiY29tcHV0ZUNvbmZpZ1ZhbHVlIiwiY29uZmlnVmFsdWUiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyIsInZhbGlkYXRvciIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJfcmVxdWVzdCIsImR1bW15IiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsInVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzIiwicHJvbWlzZSIsImNoYWluIiwibmV3Q29uZmlnIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZm9yRWFjaE1ldGhvZE5vRGF0YSIsImZvckVhY2hNZXRob2RXaXRoRGF0YSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImh0dHBNZXRob2QiLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJwcm9taXNlRXhlY3V0b3IiLCJfbGlzdGVuZXJzIiwib25mdWxmaWxsZWQiLCJzcGxpY2UiLCJjIiwic3ByZWFkIiwiY2FsbGJhY2siLCJpc0F4aW9zRXJyb3IiLCJwYXlsb2FkIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiYXhpb3MiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsImZvcm1Ub0pTT04iLCJfY2xhc3NQcml2YXRlRmllbGRTZXQiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQiLCJfYXhpb3MiLCJXZWFrTWFwIiwiX3JlcXVlc3RDb3VudCIsIl9sb2FkaW5nSW5zdGFuY2UiLCJfY29uZmlnIiwiSHR0cCIsInN1Y2Nlc3NDb2RlIiwiZXJyb3JDb2RlIiwiY2FsbEJhY2tDb2RlIiwiayIsIl90aGlzJHJlcXVlc3RDb3VudCIsIl90aGlzJHJlcXVlc3RDb3VudDIiLCJsb2FkaW5nIiwiYXV0aG9yaXphdGlvbiIsImxvY2FsU3RvcmFnZSIsIl90aGlzJHJlcXVlc3RDb3VudDMiLCJfdGhpcyRyZXF1ZXN0Q291bnQ0IiwiY2xvc2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQ1IiwiX3RoaXMkcmVxdWVzdENvdW50NiIsIl9oYW5kbGVSZXN1bHQiLCJzdWNjZXNzIiwibXNnIiwidXBkYXRlIiwiZG93bkxvYWQiLCJibG9iIiwibGluayIsImRpc3BsYXkiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJkb3dubG9hZCIsInJldm9rZU9iamVjdFVSTCIsInJlcXVpcmUiLCJQYWdpbmF0aW9uIiwiUGFnZVRhYmxlIiwiRGlhbG9nIiwiQ2FyZCIsIlRyZWUiLCJfSHR0cCIsImNvbXMiLCJpbnN0YWxsIiwiY29tIiwiY29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2601\n");
17
17
 
18
18
  /***/ }),
19
19
 
@@ -1997,7 +1997,7 @@ eval("\nvar DESCRIPTORS = __webpack_require__(3724);\nvar uncurryThis = __webpac
1997
1997
  /******/ // startup
1998
1998
  /******/ // Load entry module and return exports
1999
1999
  /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
2000
- /******/ var __webpack_exports__ = __webpack_require__(2634);
2000
+ /******/ var __webpack_exports__ = __webpack_require__(2601);
2001
2001
  /******/ module.exports = __webpack_exports__;
2002
2002
  /******/
2003
2003
  /******/ })()