123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- (global["webpackJsonp"] = global["webpackJsonp"] || []).push([["common/vendor"],[
- /* 0 */,
- /* 1 */
- /*!***********************************************************!*\
- !*** ./node_modules/@dcloudio/uni-app-plus/dist/index.js ***!
- \***********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(global) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.createApp = createApp;exports.createComponent = createComponent;exports.createPage = createPage;exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 3));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _slicedToArray(arr, i) {return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");}function _iterableToArrayLimit(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i[\"return\"] != null) _i[\"return\"]();} finally {if (_d) throw _e;}}return _arr;}function _arrayWithHoles(arr) {if (Array.isArray(arr)) return arr;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}function _toConsumableArray(arr) {return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();}function _nonIterableSpread() {throw new TypeError(\"Invalid attempt to spread non-iterable instance\");}function _iterableToArray(iter) {if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);}function _arrayWithoutHoles(arr) {if (Array.isArray(arr)) {for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {arr2[i] = arr[i];}return arr2;}}\n\nvar _toString = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isFn(fn) {\n return typeof fn === 'function';\n}\n\nfunction isStr(str) {\n return typeof str === 'string';\n}\n\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\n\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n\nfunction noop() {}\n\n/**\r\n * Create a cached version of a pure function.\r\n */\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\n/**\r\n * Camelize a hyphen-delimited string.\r\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : '';});\n});\n\nvar HOOKS = [\n'invoke',\n'success',\n'fail',\n'complete',\n'returnValue'];\n\n\nvar globalInterceptors = {};\nvar scopedInterceptors = {};\n\nfunction mergeHook(parentVal, childVal) {\n var res = childVal ?\n parentVal ?\n parentVal.concat(childVal) :\n Array.isArray(childVal) ?\n childVal : [childVal] :\n parentVal;\n return res ?\n dedupeHooks(res) :\n res;\n}\n\nfunction dedupeHooks(hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res;\n}\n\nfunction removeHook(hooks, hook) {\n var index = hooks.indexOf(hook);\n if (index !== -1) {\n hooks.splice(index, 1);\n }\n}\n\nfunction mergeInterceptorHook(interceptor, option) {\n Object.keys(option).forEach(function (hook) {\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\n interceptor[hook] = mergeHook(interceptor[hook], option[hook]);\n }\n });\n}\n\nfunction removeInterceptorHook(interceptor, option) {\n if (!interceptor || !option) {\n return;\n }\n Object.keys(option).forEach(function (hook) {\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\n removeHook(interceptor[hook], option[hook]);\n }\n });\n}\n\nfunction addInterceptor(method, option) {\n if (typeof method === 'string' && isPlainObject(option)) {\n mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);\n } else if (isPlainObject(method)) {\n mergeInterceptorHook(globalInterceptors, method);\n }\n}\n\nfunction removeInterceptor(method, option) {\n if (typeof method === 'string') {\n if (isPlainObject(option)) {\n removeInterceptorHook(scopedInterceptors[method], option);\n } else {\n delete scopedInterceptors[method];\n }\n } else if (isPlainObject(method)) {\n removeInterceptorHook(globalInterceptors, method);\n }\n}\n\nfunction wrapperHook(hook) {\n return function (data) {\n return hook(data) || data;\n };\n}\n\nfunction isPromise(obj) {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n\nfunction queue(hooks, data) {\n var promise = false;\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n if (promise) {\n promise = Promise.then(wrapperHook(hook));\n } else {\n var res = hook(data);\n if (isPromise(res)) {\n promise = Promise.resolve(res);\n }\n if (res === false) {\n return {\n then: function then() {} };\n\n }\n }\n }\n return promise || {\n then: function then(callback) {\n return callback(data);\n } };\n\n}\n\nfunction wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ['success', 'fail', 'complete'].forEach(function (name) {\n if (Array.isArray(interceptor[name])) {\n var oldCallback = options[name];\n options[name] = function callbackInterceptor(res) {\n queue(interceptor[name], res).then(function (res) {\n /* eslint-disable no-mixed-operators */\n return isFn(oldCallback) && oldCallback(res) || res;\n });\n };\n }\n });\n return options;\n}\n\nfunction wrapperReturnValue(method, returnValue) {\n var returnValueHooks = [];\n if (Array.isArray(globalInterceptors.returnValue)) {\n returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));\n }\n var interceptor = scopedInterceptors[method];\n if (interceptor && Array.isArray(interceptor.returnValue)) {\n returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));\n }\n returnValueHooks.forEach(function (hook) {\n returnValue = hook(returnValue) || returnValue;\n });\n return returnValue;\n}\n\nfunction getApiInterceptorHooks(method) {\n var interceptor = Object.create(null);\n Object.keys(globalInterceptors).forEach(function (hook) {\n if (hook !== 'returnValue') {\n interceptor[hook] = globalInterceptors[hook].slice();\n }\n });\n var scopedInterceptor = scopedInterceptors[method];\n if (scopedInterceptor) {\n Object.keys(scopedInterceptor).forEach(function (hook) {\n if (hook !== 'returnValue') {\n interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);\n }\n });\n }\n return interceptor;\n}\n\nfunction invokeApi(method, api, options) {for (var _len = arguments.length, params = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {params[_key - 3] = arguments[_key];}\n var interceptor = getApiInterceptorHooks(method);\n if (interceptor && Object.keys(interceptor).length) {\n if (Array.isArray(interceptor.invoke)) {\n var res = queue(interceptor.invoke, options);\n return res.then(function (options) {\n return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));\n });\n } else {\n return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));\n }\n }\n return api.apply(void 0, [options].concat(params));\n}\n\nvar promiseInterceptor = {\n returnValue: function returnValue(res) {\n if (!isPromise(res)) {\n return res;\n }\n return res.then(function (res) {\n return res[1];\n }).catch(function (res) {\n return res[0];\n });\n } };\n\n\nvar SYNC_API_RE =\n/^\\$|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;\n\nvar CONTEXT_API_RE = /^create|Manager$/;\n\nvar CALLBACK_API_RE = /^on/;\n\nfunction isContextApi(name) {\n return CONTEXT_API_RE.test(name);\n}\nfunction isSyncApi(name) {\n return SYNC_API_RE.test(name);\n}\n\nfunction isCallbackApi(name) {\n return CALLBACK_API_RE.test(name) && name !== 'onPush';\n}\n\nfunction handlePromise(promise) {\n return promise.then(function (data) {\n return [null, data];\n }).\n catch(function (err) {return [err];});\n}\n\nfunction shouldPromise(name) {\n if (\n isContextApi(name) ||\n isSyncApi(name) ||\n isCallbackApi(name))\n {\n return false;\n }\n return true;\n}\n\nfunction promisify(name, api) {\n if (!shouldPromise(name)) {\n return api;\n }\n return function promiseApi() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {params[_key2 - 1] = arguments[_key2];}\n if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {\n return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));\n }\n return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {\n invokeApi.apply(void 0, [name, api, Object.assign({}, options, {\n success: resolve,\n fail: reject })].concat(\n params));\n /* eslint-disable no-extend-native */\n if (!Promise.prototype.finally) {\n Promise.prototype.finally = function (callback) {\n var promise = this.constructor;\n return this.then(\n function (value) {return promise.resolve(callback()).then(function () {return value;});},\n function (reason) {return promise.resolve(callback()).then(function () {\n throw reason;\n });});\n\n };\n }\n })));\n };\n}\n\nvar EPS = 1e-4;\nvar BASE_DEVICE_WIDTH = 750;\nvar isIOS = false;\nvar deviceWidth = 0;\nvar deviceDPR = 0;\n\nfunction checkDeviceWidth() {var _wx$getSystemInfoSync =\n\n\n\n\n wx.getSystemInfoSync(),platform = _wx$getSystemInfoSync.platform,pixelRatio = _wx$getSystemInfoSync.pixelRatio,windowWidth = _wx$getSystemInfoSync.windowWidth; // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni\n\n deviceWidth = windowWidth;\n deviceDPR = pixelRatio;\n isIOS = platform === 'ios';\n}\n\nfunction upx2px(number, newDeviceWidth) {\n if (deviceWidth === 0) {\n checkDeviceWidth();\n }\n\n number = Number(number);\n if (number === 0) {\n return 0;\n }\n var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);\n if (result < 0) {\n result = -result;\n }\n result = Math.floor(result + EPS);\n if (result === 0) {\n if (deviceDPR === 1 || !isIOS) {\n return 1;\n } else {\n return 0.5;\n }\n }\n return number < 0 ? -result : result;\n}\n\nvar interceptors = {\n promiseInterceptor: promiseInterceptor };\n\n\n\n\nvar baseApi = /*#__PURE__*/Object.freeze({\n upx2px: upx2px,\n interceptors: interceptors,\n addInterceptor: addInterceptor,\n removeInterceptor: removeInterceptor });\n\n\nvar protocols = {};\nvar todos = [];\nvar canIUses = [];\n\nvar CALLBACKS = ['success', 'fail', 'cancel', 'complete'];\n\nfunction processCallback(methodName, method, returnValue) {\n return function (res) {\n return method(processReturnValue(methodName, res, returnValue));\n };\n}\n\nfunction processArgs(methodName, fromArgs) {var argsOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};var returnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};var keepFromArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (isPlainObject(fromArgs)) {// 一般 api 的参数解析\n var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值\n if (isFn(argsOption)) {\n argsOption = argsOption(fromArgs, toArgs) || {};\n }\n for (var key in fromArgs) {\n if (hasOwn(argsOption, key)) {\n var keyOption = argsOption[key];\n if (isFn(keyOption)) {\n keyOption = keyOption(fromArgs[key], fromArgs, toArgs);\n }\n if (!keyOption) {// 不支持的参数\n console.warn(\"app-plus \".concat(methodName, \"\\u6682\\u4E0D\\u652F\\u6301\").concat(key));\n } else if (isStr(keyOption)) {// 重写参数 key\n toArgs[keyOption] = fromArgs[key];\n } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value\n toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;\n }\n } else if (CALLBACKS.indexOf(key) !== -1) {\n toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);\n } else {\n if (!keepFromArgs) {\n toArgs[key] = fromArgs[key];\n }\n }\n }\n return toArgs;\n } else if (isFn(fromArgs)) {\n fromArgs = processCallback(methodName, fromArgs, returnValue);\n }\n return fromArgs;\n}\n\nfunction processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (isFn(protocols.returnValue)) {// 处理通用 returnValue\n res = protocols.returnValue(methodName, res);\n }\n return processArgs(methodName, res, returnValue, {}, keepReturnValue);\n}\n\nfunction wrapper(methodName, method) {\n if (hasOwn(protocols, methodName)) {\n var protocol = protocols[methodName];\n if (!protocol) {// 暂不支持的 api\n return function () {\n console.error(\"app-plus \\u6682\\u4E0D\\u652F\\u6301\".concat(methodName));\n };\n }\n return function (arg1, arg2) {// 目前 api 最多两个参数\n var options = protocol;\n if (isFn(protocol)) {\n options = protocol(arg1);\n }\n\n arg1 = processArgs(methodName, arg1, options.args, options.returnValue);\n\n var args = [arg1];\n if (typeof arg2 !== 'undefined') {\n args.push(arg2);\n }\n var returnValue = wx[options.name || methodName].apply(wx, args);\n if (isSyncApi(methodName)) {// 同步 api\n return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));\n }\n return returnValue;\n };\n }\n return method;\n}\n\nvar todoApis = Object.create(null);\n\nvar TODOS = [\n'onTabBarMidButtonTap',\n'subscribePush',\n'unsubscribePush',\n'onPush',\n'offPush',\n'share'];\n\n\nfunction createTodoApi(name) {\n return function todoApi(_ref)\n\n\n {var fail = _ref.fail,complete = _ref.complete;\n var res = {\n errMsg: \"\".concat(name, \":fail:\\u6682\\u4E0D\\u652F\\u6301 \").concat(name, \" \\u65B9\\u6CD5\") };\n\n isFn(fail) && fail(res);\n isFn(complete) && complete(res);\n };\n}\n\nTODOS.forEach(function (name) {\n todoApis[name] = createTodoApi(name);\n});\n\nvar getEmitter = function () {\n if (typeof getUniEmitter === 'function') {\n /* eslint-disable no-undef */\n return getUniEmitter;\n }\n var Emitter;\n return function getUniEmitter() {\n if (!Emitter) {\n Emitter = new _vue.default();\n }\n return Emitter;\n };\n}();\n\nfunction apply(ctx, method, args) {\n return ctx[method].apply(ctx, args);\n}\n\nfunction $on() {\n return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));\n}\nfunction $off() {\n return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));\n}\nfunction $once() {\n return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));\n}\nfunction $emit() {\n return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));\n}\n\nvar eventApi = /*#__PURE__*/Object.freeze({\n $on: $on,\n $off: $off,\n $once: $once,\n $emit: $emit });\n\n\nfunction requireNativePlugin(pluginName) {\n /* eslint-disable no-undef */\n if (typeof weex !== 'undefined') {\n return weex.requireModule(pluginName);\n }\n /* eslint-disable no-undef */\n return __requireNativePlugin__(pluginName);\n}\n\nfunction wrapper$1(webview) {\n webview.$processed = true;\n\n webview.postMessage = function (data) {\n plus.webview.postMessageToUniNView({\n type: 'UniAppSubNVue',\n data: data },\n webview.id);\n };\n var callbacks = [];\n webview.onMessage = function (callback) {\n callbacks.push(callback);\n };\n webview.$consumeMessage = function (e) {\n callbacks.forEach(function (callback) {return callback(e);});\n };\n\n if (!webview.__uniapp_mask_id) {\n return;\n }\n var maskColor = webview.__uniapp_mask;\n var maskWebview = webview.__uniapp_mask_id === '0' ? {\n setStyle: function setStyle(_ref2)\n\n {var mask = _ref2.mask;\n requireNativePlugin('uni-tabview').setMask({\n color: mask });\n\n } } :\n plus.webview.getWebviewById(webview.__uniapp_mask_id);\n var oldShow = webview.show;\n var oldHide = webview.hide;\n var oldClose = webview.close;\n\n var showMask = function showMask() {\n maskWebview.setStyle({\n mask: maskColor });\n\n };\n var closeMask = function closeMask() {\n maskWebview.setStyle({\n mask: 'none' });\n\n };\n webview.show = function () {\n showMask();for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {args[_key3] = arguments[_key3];}\n return oldShow.apply(webview, args);\n };\n webview.hide = function () {\n closeMask();for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {args[_key4] = arguments[_key4];}\n return oldHide.apply(webview, args);\n };\n webview.close = function () {\n closeMask();\n callbacks = [];for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {args[_key5] = arguments[_key5];}\n return oldClose.apply(webview, args);\n };\n}\n\nfunction getSubNVueById(id) {\n var webview = plus.webview.getWebviewById(id);\n if (webview && !webview.$processed) {\n wrapper$1(webview);\n }\n return webview;\n}\n\n\n\nvar api = /*#__PURE__*/Object.freeze({\n getSubNVueById: getSubNVueById,\n requireNativePlugin: requireNativePlugin });\n\n\nvar MPPage = Page;\nvar MPComponent = Component;\n\nvar customizeRE = /:/g;\n\nvar customize = cached(function (str) {\n return camelize(str.replace(customizeRE, '-'));\n});\n\nfunction initTriggerEvent(mpInstance) {\n {\n if (!wx.canIUse('nextTick')) {\n return;\n }\n }\n var oldTriggerEvent = mpInstance.triggerEvent;\n mpInstance.triggerEvent = function (event) {for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {args[_key6 - 1] = arguments[_key6];}\n return oldTriggerEvent.apply(mpInstance, [customize(event)].concat(args));\n };\n}\n\nfunction initHook(name, options) {\n var oldHook = options[name];\n if (!oldHook) {\n options[name] = function () {\n initTriggerEvent(this);\n };\n } else {\n options[name] = function () {\n initTriggerEvent(this);for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {args[_key7] = arguments[_key7];}\n return oldHook.apply(this, args);\n };\n }\n}\n\nPage = function Page() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n initHook('onLoad', options);\n return MPPage(options);\n};\n\nComponent = function Component() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n initHook('created', options);\n return MPComponent(options);\n};\n\nvar PAGE_EVENT_HOOKS = [\n'onPullDownRefresh',\n'onReachBottom',\n'onShareAppMessage',\n'onPageScroll',\n'onResize',\n'onTabItemTap'];\n\n\nfunction initMocks(vm, mocks) {\n var mpInstance = vm.$mp[vm.mpType];\n mocks.forEach(function (mock) {\n if (hasOwn(mpInstance, mock)) {\n vm[mock] = mpInstance[mock];\n }\n });\n}\n\nfunction hasHook(hook, vueOptions) {\n if (!vueOptions) {\n return true;\n }\n\n if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {\n return true;\n }\n\n vueOptions = vueOptions.default || vueOptions;\n\n if (isFn(vueOptions)) {\n if (isFn(vueOptions.extendOptions[hook])) {\n return true;\n }\n if (vueOptions.super &&\n vueOptions.super.options &&\n Array.isArray(vueOptions.super.options[hook])) {\n return true;\n }\n return false;\n }\n\n if (isFn(vueOptions[hook])) {\n return true;\n }\n var mixins = vueOptions.mixins;\n if (Array.isArray(mixins)) {\n return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});\n }\n}\n\nfunction initHooks(mpOptions, hooks, vueOptions) {\n hooks.forEach(function (hook) {\n if (hasHook(hook, vueOptions)) {\n mpOptions[hook] = function (args) {\n return this.$vm && this.$vm.__call_hook(hook, args);\n };\n }\n });\n}\n\nfunction initVueComponent(Vue, vueOptions) {\n vueOptions = vueOptions.default || vueOptions;\n var VueComponent;\n if (isFn(vueOptions)) {\n VueComponent = vueOptions;\n vueOptions = VueComponent.extendOptions;\n } else {\n VueComponent = Vue.extend(vueOptions);\n }\n return [VueComponent, vueOptions];\n}\n\nfunction initSlots(vm, vueSlots) {\n if (Array.isArray(vueSlots) && vueSlots.length) {\n var $slots = Object.create(null);\n vueSlots.forEach(function (slotName) {\n $slots[slotName] = true;\n });\n vm.$scopedSlots = vm.$slots = $slots;\n }\n}\n\nfunction initVueIds(vueIds, mpInstance) {\n vueIds = (vueIds || '').split(',');\n var len = vueIds.length;\n\n if (len === 1) {\n mpInstance._$vueId = vueIds[0];\n } else if (len === 2) {\n mpInstance._$vueId = vueIds[0];\n mpInstance._$vuePid = vueIds[1];\n }\n}\n\nfunction initData(vueOptions, context) {\n var data = vueOptions.data || {};\n var methods = vueOptions.methods || {};\n\n if (typeof data === 'function') {\n try {\n data = data.call(context); // 支持 Vue.prototype 上挂的数据\n } catch (e) {\n if (Object({\"VUE_APP_PLATFORM\":\"app-plus\",\"NODE_ENV\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_DEBUG) {\n console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);\n }\n }\n } else {\n try {\n // 对 data 格式化\n data = JSON.parse(JSON.stringify(data));\n } catch (e) {}\n }\n\n if (!isPlainObject(data)) {\n data = {};\n }\n\n Object.keys(methods).forEach(function (methodName) {\n if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {\n data[methodName] = methods[methodName];\n }\n });\n\n return data;\n}\n\nvar PROP_TYPES = [String, Number, Boolean, Object, Array, null];\n\nfunction createObserver(name) {\n return function observer(newVal, oldVal) {\n if (this.$vm) {\n this.$vm[name] = newVal; // 为了触发其他非 render watcher\n }\n };\n}\n\nfunction initBehaviors(vueOptions, initBehavior) {\n var vueBehaviors = vueOptions['behaviors'];\n var vueExtends = vueOptions['extends'];\n var vueMixins = vueOptions['mixins'];\n\n var vueProps = vueOptions['props'];\n\n if (!vueProps) {\n vueOptions['props'] = vueProps = [];\n }\n\n var behaviors = [];\n if (Array.isArray(vueBehaviors)) {\n vueBehaviors.forEach(function (behavior) {\n behaviors.push(behavior.replace('uni://', \"wx\".concat(\"://\")));\n if (behavior === 'uni://form-field') {\n if (Array.isArray(vueProps)) {\n vueProps.push('name');\n vueProps.push('value');\n } else {\n vueProps['name'] = {\n type: String,\n default: '' };\n\n vueProps['value'] = {\n type: [String, Number, Boolean, Array, Object, Date],\n default: '' };\n\n }\n }\n });\n }\n if (isPlainObject(vueExtends) && vueExtends.props) {\n behaviors.push(\n initBehavior({\n properties: initProperties(vueExtends.props, true) }));\n\n\n }\n if (Array.isArray(vueMixins)) {\n vueMixins.forEach(function (vueMixin) {\n if (isPlainObject(vueMixin) && vueMixin.props) {\n behaviors.push(\n initBehavior({\n properties: initProperties(vueMixin.props, true) }));\n\n\n }\n });\n }\n return behaviors;\n}\n\nfunction parsePropType(key, type, defaultValue, file) {\n // [String]=>String\n if (Array.isArray(type) && type.length === 1) {\n return type[0];\n }\n return type;\n}\n\nfunction initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var properties = {};\n if (!isBehavior) {\n properties.vueId = {\n type: String,\n value: '' };\n\n properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots\n type: null,\n value: [],\n observer: function observer(newVal, oldVal) {\n var $slots = Object.create(null);\n newVal.forEach(function (slotName) {\n $slots[slotName] = true;\n });\n this.setData({\n $slots: $slots });\n\n } };\n\n }\n if (Array.isArray(props)) {// ['title']\n props.forEach(function (key) {\n properties[key] = {\n type: null,\n observer: createObserver(key) };\n\n });\n } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}\n Object.keys(props).forEach(function (key) {\n var opts = props[key];\n if (isPlainObject(opts)) {// title:{type:String,default:''}\n var value = opts['default'];\n if (isFn(value)) {\n value = value();\n }\n\n opts.type = parsePropType(key, opts.type);\n\n properties[key] = {\n type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,\n value: value,\n observer: createObserver(key) };\n\n } else {// content:String\n var type = parsePropType(key, opts);\n properties[key] = {\n type: PROP_TYPES.indexOf(type) !== -1 ? type : null,\n observer: createObserver(key) };\n\n }\n });\n }\n return properties;\n}\n\nfunction wrapper$2(event) {\n // TODO 又得兼容 mpvue 的 mp 对象\n try {\n event.mp = JSON.parse(JSON.stringify(event));\n } catch (e) {}\n\n event.stopPropagation = noop;\n event.preventDefault = noop;\n\n event.target = event.target || {};\n\n if (!hasOwn(event, 'detail')) {\n event.detail = {};\n }\n\n if (isPlainObject(event.detail)) {\n event.target = Object.assign({}, event.target, event.detail);\n }\n\n return event;\n}\n\nfunction getExtraValue(vm, dataPathsArray) {\n var context = vm;\n dataPathsArray.forEach(function (dataPathArray) {\n var dataPath = dataPathArray[0];\n var value = dataPathArray[2];\n if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']\n var propPath = dataPathArray[1];\n var valuePath = dataPathArray[3];\n\n var vFor = dataPath ? vm.__get_value(dataPath, context) : context;\n\n if (Number.isInteger(vFor)) {\n context = value;\n } else if (!propPath) {\n context = vFor[value];\n } else {\n if (Array.isArray(vFor)) {\n context = vFor.find(function (vForItem) {\n return vm.__get_value(propPath, vForItem) === value;\n });\n } else if (isPlainObject(vFor)) {\n context = Object.keys(vFor).find(function (vForKey) {\n return vm.__get_value(propPath, vFor[vForKey]) === value;\n });\n } else {\n console.error('v-for 暂不支持循环数据:', vFor);\n }\n }\n\n if (valuePath) {\n context = vm.__get_value(valuePath, context);\n }\n }\n });\n return context;\n}\n\nfunction processEventExtra(vm, extra, event) {\n var extraObj = {};\n\n if (Array.isArray(extra) && extra.length) {\n /**\r\n *[\r\n * ['data.items', 'data.id', item.data.id],\r\n * ['metas', 'id', meta.id]\r\n *],\r\n *[\r\n * ['data.items', 'data.id', item.data.id],\r\n * ['metas', 'id', meta.id]\r\n *],\r\n *'test'\r\n */\n extra.forEach(function (dataPath, index) {\n if (typeof dataPath === 'string') {\n if (!dataPath) {// model,prop.sync\n extraObj['$' + index] = vm;\n } else {\n if (dataPath === '$event') {// $event\n extraObj['$' + index] = event;\n } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value\n extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);\n } else {\n extraObj['$' + index] = vm.__get_value(dataPath);\n }\n }\n } else {\n extraObj['$' + index] = getExtraValue(vm, dataPath);\n }\n });\n }\n\n return extraObj;\n}\n\nfunction getObjByArray(arr) {\n var obj = {};\n for (var i = 1; i < arr.length; i++) {\n var element = arr[i];\n obj[element[0]] = element[1];\n }\n return obj;\n}\n\nfunction processEventArgs(vm, event) {var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];var extra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];var isCustom = arguments.length > 4 ? arguments[4] : undefined;var methodName = arguments.length > 5 ? arguments[5] : undefined;\n var isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象\n if (isCustom) {// 自定义事件\n isCustomMPEvent = event.currentTarget &&\n event.currentTarget.dataset &&\n event.currentTarget.dataset.comType === 'wx';\n if (!args.length) {// 无参数,直接传入 event 或 detail 数组\n if (isCustomMPEvent) {\n return [event];\n }\n return event.detail.__args__ || event.detail;\n }\n }\n\n var extraObj = processEventExtra(vm, extra, event);\n\n var ret = [];\n args.forEach(function (arg) {\n if (arg === '$event') {\n if (methodName === '__set_model' && !isCustom) {// input v-model value\n ret.push(event.target.value);\n } else {\n if (isCustom && !isCustomMPEvent) {\n ret.push(event.detail.__args__[0]);\n } else {// wxcomponent 组件或内置组件\n ret.push(event);\n }\n }\n } else {\n if (Array.isArray(arg) && arg[0] === 'o') {\n ret.push(getObjByArray(arg));\n } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {\n ret.push(extraObj[arg]);\n } else {\n ret.push(arg);\n }\n }\n });\n\n return ret;\n}\n\nvar ONCE = '~';\nvar CUSTOM = '^';\n\nfunction isMatchEventType(eventType, optType) {\n return eventType === optType ||\n\n optType === 'regionchange' && (\n\n eventType === 'begin' ||\n eventType === 'end');\n\n\n}\n\nfunction handleEvent(event) {var _this = this;\n event = wrapper$2(event);\n\n // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]\n var dataset = (event.currentTarget || event.target).dataset;\n if (!dataset) {\n return console.warn(\"\\u4E8B\\u4EF6\\u4FE1\\u606F\\u4E0D\\u5B58\\u5728\");\n }\n var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰\n if (!eventOpts) {\n return console.warn(\"\\u4E8B\\u4EF6\\u4FE1\\u606F\\u4E0D\\u5B58\\u5728\");\n }\n\n // [['handle',[1,2,a]],['handle1',[1,2,a]]]\n var eventType = event.type;\n\n var ret = [];\n\n eventOpts.forEach(function (eventOpt) {\n var type = eventOpt[0];\n var eventsArray = eventOpt[1];\n\n var isCustom = type.charAt(0) === CUSTOM;\n type = isCustom ? type.slice(1) : type;\n var isOnce = type.charAt(0) === ONCE;\n type = isOnce ? type.slice(1) : type;\n\n if (eventsArray && isMatchEventType(eventType, type)) {\n eventsArray.forEach(function (eventArray) {\n var methodName = eventArray[0];\n if (methodName) {\n var handlerCtx = _this.$vm;\n if (\n handlerCtx.$options.generic &&\n handlerCtx.$parent &&\n handlerCtx.$parent.$parent)\n {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots\n handlerCtx = handlerCtx.$parent.$parent;\n }\n var handler = handlerCtx[methodName];\n if (!isFn(handler)) {\n throw new Error(\" _vm.\".concat(methodName, \" is not a function\"));\n }\n if (isOnce) {\n if (handler.once) {\n return;\n }\n handler.once = true;\n }\n ret.push(handler.apply(handlerCtx, processEventArgs(\n _this.$vm,\n event,\n eventArray[1],\n eventArray[2],\n isCustom,\n methodName)));\n\n }\n });\n }\n });\n\n if (\n eventType === 'input' &&\n ret.length === 1 &&\n typeof ret[0] !== 'undefined')\n {\n return ret[0];\n }\n}\n\nvar hooks = [\n'onShow',\n'onHide',\n'onError',\n'onPageNotFound'];\n\n\nfunction parseBaseApp(vm, _ref3)\n\n\n{var mocks = _ref3.mocks,initRefs = _ref3.initRefs;\n if (vm.$options.store) {\n _vue.default.prototype.$store = vm.$options.store;\n }\n\n _vue.default.prototype.mpHost = \"app-plus\";\n\n _vue.default.mixin({\n beforeCreate: function beforeCreate() {\n if (!this.$options.mpType) {\n return;\n }\n\n this.mpType = this.$options.mpType;\n\n this.$mp = _defineProperty({\n data: {} },\n this.mpType, this.$options.mpInstance);\n\n\n this.$scope = this.$options.mpInstance;\n\n delete this.$options.mpType;\n delete this.$options.mpInstance;\n\n if (this.mpType !== 'app') {\n initRefs(this);\n initMocks(this, mocks);\n }\n } });\n\n\n var appOptions = {\n onLaunch: function onLaunch(args) {\n if (this.$vm) {// 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前\n return;\n }\n\n this.$vm = vm;\n\n this.$vm.$mp = {\n app: this };\n\n\n this.$vm.$scope = this;\n // vm 上也挂载 globalData\n this.$vm.globalData = this.globalData;\n\n this.$vm._isMounted = true;\n this.$vm.__call_hook('mounted', args);\n\n this.$vm.__call_hook('onLaunch', args);\n } };\n\n\n // 兼容旧版本 globalData\n appOptions.globalData = vm.$options.globalData || {};\n\n initHooks(appOptions, hooks);\n\n return appOptions;\n}\n\nvar mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];\n\nfunction findVmByVueId(vm, vuePid) {\n var $children = vm.$children;\n // 优先查找直属\n var parentVm = $children.find(function (childVm) {return childVm.$scope._$vueId === vuePid;});\n if (parentVm) {\n return parentVm;\n }\n // 反向递归查找\n for (var i = $children.length - 1; i >= 0; i--) {\n parentVm = findVmByVueId($children[i], vuePid);\n if (parentVm) {\n return parentVm;\n }\n }\n}\n\nfunction initBehavior(options) {\n return Behavior(options);\n}\n\nfunction isPage() {\n return !!this.route;\n}\n\nfunction initRelation(detail) {\n this.triggerEvent('__l', detail);\n}\n\nfunction initRefs(vm) {\n var mpInstance = vm.$scope;\n Object.defineProperty(vm, '$refs', {\n get: function get() {\n var $refs = {};\n var components = mpInstance.selectAllComponents('.vue-ref');\n components.forEach(function (component) {\n var ref = component.dataset.ref;\n $refs[ref] = component.$vm || component;\n });\n var forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');\n forComponents.forEach(function (component) {\n var ref = component.dataset.ref;\n if (!$refs[ref]) {\n $refs[ref] = [];\n }\n $refs[ref].push(component.$vm || component);\n });\n return $refs;\n } });\n\n}\n\nfunction handleLink(event) {var _ref4 =\n\n\n\n event.detail || event.value,vuePid = _ref4.vuePid,vueOptions = _ref4.vueOptions; // detail 是微信,value 是百度(dipatch)\n\n var parentVm;\n\n if (vuePid) {\n parentVm = findVmByVueId(this.$vm, vuePid);\n }\n\n if (!parentVm) {\n parentVm = this.$vm;\n }\n\n vueOptions.parent = parentVm;\n}\n\nfunction parseApp(vm) {\n return parseBaseApp(vm, {\n mocks: mocks,\n initRefs: initRefs });\n\n}\n\nvar hooks$1 = [\n'onUniNViewMessage'];\n\n\nfunction parseApp$1(vm) {\n var appOptions = parseApp(vm);\n\n initHooks(appOptions, hooks$1);\n\n return appOptions;\n}\n\nfunction createApp(vm) {\n App(parseApp$1(vm));\n return vm;\n}\n\nfunction parseBaseComponent(vueComponentOptions)\n\n\n{var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},isPage = _ref5.isPage,initRelation = _ref5.initRelation;var _initVueComponent =\n initVueComponent(_vue.default, vueComponentOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];\n\n var options = {\n multipleSlots: true,\n addGlobalClass: true };\n\n\n var componentOptions = {\n options: options,\n data: initData(vueOptions, _vue.default.prototype),\n behaviors: initBehaviors(vueOptions, initBehavior),\n properties: initProperties(vueOptions.props, false, vueOptions.__file),\n lifetimes: {\n attached: function attached() {\n var properties = this.properties;\n\n var options = {\n mpType: isPage.call(this) ? 'page' : 'component',\n mpInstance: this,\n propsData: properties };\n\n\n initVueIds(properties.vueId, this);\n\n // 处理父子关系\n initRelation.call(this, {\n vuePid: this._$vuePid,\n vueOptions: options });\n\n\n // 初始化 vue 实例\n this.$vm = new VueComponent(options);\n\n // 处理$slots,$scopedSlots(暂不支持动态变化$slots)\n initSlots(this.$vm, properties.vueSlots);\n\n // 触发首次 setData\n this.$vm.$mount();\n },\n ready: function ready() {\n // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发\n // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800\n if (this.$vm) {\n this.$vm._isMounted = true;\n this.$vm.__call_hook('mounted');\n this.$vm.__call_hook('onReady');\n }\n },\n detached: function detached() {\n this.$vm.$destroy();\n } },\n\n pageLifetimes: {\n show: function show(args) {\n this.$vm && this.$vm.__call_hook('onPageShow', args);\n },\n hide: function hide() {\n this.$vm && this.$vm.__call_hook('onPageHide');\n },\n resize: function resize(size) {\n this.$vm && this.$vm.__call_hook('onPageResize', size);\n } },\n\n methods: {\n __l: handleLink,\n __e: handleEvent } };\n\n\n\n if (Array.isArray(vueOptions.wxsCallMethods)) {\n vueOptions.wxsCallMethods.forEach(function (callMethod) {\n componentOptions.methods[callMethod] = function (args) {\n return this.$vm[callMethod](args);\n };\n });\n }\n\n if (isPage) {\n return componentOptions;\n }\n return [componentOptions, VueComponent];\n}\n\nfunction parseComponent(vueComponentOptions) {\n return parseBaseComponent(vueComponentOptions, {\n isPage: isPage,\n initRelation: initRelation });\n\n}\n\nfunction parseComponent$1(vueComponentOptions) {\n var componentOptions = parseComponent(vueComponentOptions);\n\n componentOptions.methods.$getAppWebview = function () {\n return plus.webview.getWebviewById(\"\".concat(this.__wxWebviewId__));\n };\n return componentOptions;\n}\n\nvar hooks$2 = [\n'onShow',\n'onHide',\n'onUnload'];\n\n\nhooks$2.push.apply(hooks$2, PAGE_EVENT_HOOKS);\n\nfunction parseBasePage(vuePageOptions, _ref6)\n\n\n{var isPage = _ref6.isPage,initRelation = _ref6.initRelation;\n var pageOptions = parseComponent$1(vuePageOptions);\n\n initHooks(pageOptions.methods, hooks$2, vuePageOptions);\n\n pageOptions.methods.onLoad = function (args) {\n this.$vm.$mp.query = args; // 兼容 mpvue\n this.$vm.__call_hook('onLoad', args);\n };\n\n return pageOptions;\n}\n\nfunction parsePage(vuePageOptions) {\n return parseBasePage(vuePageOptions, {\n isPage: isPage,\n initRelation: initRelation });\n\n}\n\nvar hooks$3 = [\n'onBackPress',\n'onNavigationBarButtonTap',\n'onNavigationBarSearchInputChanged',\n'onNavigationBarSearchInputConfirmed',\n'onNavigationBarSearchInputClicked'];\n\n\nfunction parsePage$1(vuePageOptions) {\n var pageOptions = parsePage(vuePageOptions);\n\n initHooks(pageOptions.methods, hooks$3);\n\n return pageOptions;\n}\n\nfunction createPage(vuePageOptions) {\n {\n return Component(parsePage$1(vuePageOptions));\n }\n}\n\nfunction createComponent(vueOptions) {\n {\n return Component(parseComponent$1(vueOptions));\n }\n}\n\ntodos.forEach(function (todoApi) {\n protocols[todoApi] = false;\n});\n\ncanIUses.forEach(function (canIUseApi) {\n var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :\n canIUseApi;\n if (!wx.canIUse(apiName)) {\n protocols[canIUseApi] = false;\n }\n});\n\nvar uni = {};\n\nif (typeof Proxy !== 'undefined' && \"app-plus\" !== 'app-plus') {\n uni = new Proxy({}, {\n get: function get(target, name) {\n if (target[name]) {\n return target[name];\n }\n if (baseApi[name]) {\n return baseApi[name];\n }\n if (api[name]) {\n return promisify(name, api[name]);\n }\n if (eventApi[name]) {\n return eventApi[name];\n }\n if (!hasOwn(wx, name) && !hasOwn(protocols, name)) {\n return;\n }\n return promisify(name, wrapper(name, wx[name]));\n },\n set: function set(target, name, value) {\n target[name] = value;\n return true;\n } });\n\n} else {\n Object.keys(baseApi).forEach(function (name) {\n uni[name] = baseApi[name];\n });\n\n Object.keys(eventApi).forEach(function (name) {\n uni[name] = eventApi[name];\n });\n\n Object.keys(api).forEach(function (name) {\n uni[name] = promisify(name, api[name]);\n });\n\n Object.keys(wx).forEach(function (name) {\n if (hasOwn(wx, name) || hasOwn(protocols, name)) {\n uni[name] = promisify(name, wrapper(name, wx[name]));\n }\n });\n}\n\n{\n if (typeof global !== 'undefined') {\n global.uni = uni;\n global.UniEmitter = eventApi;\n }\n}\n\nwx.createApp = createApp;\nwx.createPage = createPage;\nwx.createComponent = createComponent;\n\nvar uni$1 = uni;var _default =\n\nuni$1;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ 2)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbIl90b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiaGFzT3duUHJvcGVydHkiLCJpc0ZuIiwiZm4iLCJpc1N0ciIsInN0ciIsImlzUGxhaW5PYmplY3QiLCJvYmoiLCJjYWxsIiwiaGFzT3duIiwia2V5Iiwibm9vcCIsImNhY2hlZCIsImNhY2hlIiwiY3JlYXRlIiwiY2FjaGVkRm4iLCJoaXQiLCJjYW1lbGl6ZVJFIiwiY2FtZWxpemUiLCJyZXBsYWNlIiwiXyIsImMiLCJ0b1VwcGVyQ2FzZSIsIkhPT0tTIiwiZ2xvYmFsSW50ZXJjZXB0b3JzIiwic2NvcGVkSW50ZXJjZXB0b3JzIiwibWVyZ2VIb29rIiwicGFyZW50VmFsIiwiY2hpbGRWYWwiLCJyZXMiLCJjb25jYXQiLCJBcnJheSIsImlzQXJyYXkiLCJkZWR1cGVIb29rcyIsImhvb2tzIiwiaSIsImxlbmd0aCIsImluZGV4T2YiLCJwdXNoIiwicmVtb3ZlSG9vayIsImhvb2siLCJpbmRleCIsInNwbGljZSIsIm1lcmdlSW50ZXJjZXB0b3JIb29rIiwiaW50ZXJjZXB0b3IiLCJvcHRpb24iLCJrZXlzIiwiZm9yRWFjaCIsInJlbW92ZUludGVyY2VwdG9ySG9vayIsImFkZEludGVyY2VwdG9yIiwibWV0aG9kIiwicmVtb3ZlSW50ZXJjZXB0b3IiLCJ3cmFwcGVySG9vayIsImRhdGEiLCJpc1Byb21pc2UiLCJ0aGVuIiwicXVldWUiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYWxsYmFjayIsIndyYXBwZXJPcHRpb25zIiwib3B0aW9ucyIsIm5hbWUiLCJvbGRDYWxsYmFjayIsImNhbGxiYWNrSW50ZXJjZXB0b3IiLCJ3cmFwcGVyUmV0dXJuVmFsdWUiLCJyZXR1cm5WYWx1ZSIsInJldHVyblZhbHVlSG9va3MiLCJnZXRBcGlJbnRlcmNlcHRvckhvb2tzIiwic2xpY2UiLCJzY29wZWRJbnRlcmNlcHRvciIsImludm9rZUFwaSIsImFwaSIsInBhcmFtcyIsImludm9rZSIsInByb21pc2VJbnRlcmNlcHRvciIsImNhdGNoIiwiU1lOQ19BUElfUkUiLCJDT05URVhUX0FQSV9SRSIsIkNBTExCQUNLX0FQSV9SRSIsImlzQ29udGV4dEFwaSIsInRlc3QiLCJpc1N5bmNBcGkiLCJpc0NhbGxiYWNrQXBpIiwiaGFuZGxlUHJvbWlzZSIsImVyciIsInNob3VsZFByb21pc2UiLCJwcm9taXNpZnkiLCJwcm9taXNlQXBpIiwic3VjY2VzcyIsImZhaWwiLCJjb21wbGV0ZSIsInJlamVjdCIsImFzc2lnbiIsImZpbmFsbHkiLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwicmVhc29uIiwiRVBTIiwiQkFTRV9ERVZJQ0VfV0lEVEgiLCJpc0lPUyIsImRldmljZVdpZHRoIiwiZGV2aWNlRFBSIiwiY2hlY2tEZXZpY2VXaWR0aCIsInd4IiwiZ2V0U3lzdGVtSW5mb1N5bmMiLCJwbGF0Zm9ybSIsInBpeGVsUmF0aW8iLCJ3aW5kb3dXaWR0aCIsInVweDJweCIsIm51bWJlciIsIm5ld0RldmljZVdpZHRoIiwiTnVtYmVyIiwicmVzdWx0IiwiTWF0aCIsImZsb29yIiwiaW50ZXJjZXB0b3JzIiwiYmFzZUFwaSIsImZyZWV6ZSIsInByb3RvY29scyIsInRvZG9zIiwiY2FuSVVzZXMiLCJDQUxMQkFDS1MiLCJwcm9jZXNzQ2FsbGJhY2siLCJtZXRob2ROYW1lIiwicHJvY2Vzc1JldHVyblZhbHVlIiwicHJvY2Vzc0FyZ3MiLCJmcm9tQXJncyIsImFyZ3NPcHRpb24iLCJrZWVwRnJvbUFyZ3MiLCJ0b0FyZ3MiLCJrZXlPcHRpb24iLCJjb25zb2xlIiwid2FybiIsImtlZXBSZXR1cm5WYWx1ZSIsIndyYXBwZXIiLCJwcm90b2NvbCIsImVycm9yIiwiYXJnMSIsImFyZzIiLCJhcmdzIiwiYXBwbHkiLCJ0b2RvQXBpcyIsIlRPRE9TIiwiY3JlYXRlVG9kb0FwaSIsInRvZG9BcGkiLCJlcnJNc2ciLCJnZXRFbWl0dGVyIiwiZ2V0VW5pRW1pdHRlciIsIkVtaXR0ZXIiLCJWdWUiLCJjdHgiLCIkb24iLCJhcmd1bWVudHMiLCIkb2ZmIiwiJG9uY2UiLCIkZW1pdCIsImV2ZW50QXBpIiwicmVxdWlyZU5hdGl2ZVBsdWdpbiIsInBsdWdpbk5hbWUiLCJ3ZWV4IiwicmVxdWlyZU1vZHVsZSIsIl9fcmVxdWlyZU5hdGl2ZVBsdWdpbl9fIiwid3JhcHBlciQxIiwid2VidmlldyIsIiRwcm9jZXNzZWQiLCJwb3N0TWVzc2FnZSIsInBsdXMiLCJwb3N0TWVzc2FnZVRvVW5pTlZpZXciLCJ0eXBlIiwiaWQiLCJjYWxsYmFja3MiLCJvbk1lc3NhZ2UiLCIkY29uc3VtZU1lc3NhZ2UiLCJlIiwiX191bmlhcHBfbWFza19pZCIsIm1hc2tDb2xvciIsIl9fdW5pYXBwX21hc2siLCJtYXNrV2VidmlldyIsInNldFN0eWxlIiwibWFzayIsInNldE1hc2siLCJjb2xvciIsImdldFdlYnZpZXdCeUlkIiwib2xkU2hvdyIsInNob3ciLCJvbGRIaWRlIiwiaGlkZSIsIm9sZENsb3NlIiwiY2xvc2UiLCJzaG93TWFzayIsImNsb3NlTWFzayIsImdldFN1Yk5WdWVCeUlkIiwiTVBQYWdlIiwiUGFnZSIsIk1QQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiY3VzdG9taXplUkUiLCJjdXN0b21pemUiLCJpbml0VHJpZ2dlckV2ZW50IiwibXBJbnN0YW5jZSIsImNhbklVc2UiLCJvbGRUcmlnZ2VyRXZlbnQiLCJ0cmlnZ2VyRXZlbnQiLCJldmVudCIsImluaXRIb29rIiwib2xkSG9vayIsIlBBR0VfRVZFTlRfSE9PS1MiLCJpbml0TW9ja3MiLCJ2bSIsIm1vY2tzIiwiJG1wIiwibXBUeXBlIiwibW9jayIsImhhc0hvb2siLCJ2dWVPcHRpb25zIiwiZGVmYXVsdCIsImV4dGVuZE9wdGlvbnMiLCJzdXBlciIsIm1peGlucyIsImZpbmQiLCJtaXhpbiIsImluaXRIb29rcyIsIm1wT3B0aW9ucyIsIiR2bSIsIl9fY2FsbF9ob29rIiwiaW5pdFZ1ZUNvbXBvbmVudCIsIlZ1ZUNvbXBvbmVudCIsImV4dGVuZCIsImluaXRTbG90cyIsInZ1ZVNsb3RzIiwiJHNsb3RzIiwic2xvdE5hbWUiLCIkc2NvcGVkU2xvdHMiLCJpbml0VnVlSWRzIiwidnVlSWRzIiwic3BsaXQiLCJsZW4iLCJfJHZ1ZUlkIiwiXyR2dWVQaWQiLCJpbml0RGF0YSIsImNvbnRleHQiLCJtZXRob2RzIiwicHJvY2VzcyIsIlZVRV9BUFBfREVCVUciLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJfX2xpZmVjeWNsZV9ob29rc19fIiwiUFJPUF9UWVBFUyIsIlN0cmluZyIsIkJvb2xlYW4iLCJjcmVhdGVPYnNlcnZlciIsIm9ic2VydmVyIiwibmV3VmFsIiwib2xkVmFsIiwiaW5pdEJlaGF2aW9ycyIsImluaXRCZWhhdmlvciIsInZ1ZUJlaGF2aW9ycyIsInZ1ZUV4dGVuZHMiLCJ2dWVNaXhpbnMiLCJ2dWVQcm9wcyIsImJlaGF2aW9ycyIsImJlaGF2aW9yIiwiRGF0ZSIsInByb3BzIiwicHJvcGVydGllcyIsImluaXRQcm9wZXJ0aWVzIiwidnVlTWl4aW4iLCJwYXJzZVByb3BUeXBlIiwiZGVmYXVsdFZhbHVlIiwiZmlsZSIsImlzQmVoYXZpb3IiLCJ2dWVJZCIsInNldERhdGEiLCJvcHRzIiwid3JhcHBlciQyIiwibXAiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsInRhcmdldCIsImRldGFpbCIsImdldEV4dHJhVmFsdWUiLCJkYXRhUGF0aHNBcnJheSIsImRhdGFQYXRoQXJyYXkiLCJkYXRhUGF0aCIsInByb3BQYXRoIiwidmFsdWVQYXRoIiwidkZvciIsIl9fZ2V0X3ZhbHVlIiwiaXNJbnRlZ2VyIiwidkZvckl0ZW0iLCJ2Rm9yS2V5IiwicHJvY2Vzc0V2ZW50RXh0cmEiLCJleHRyYSIsImV4dHJhT2JqIiwiZ2V0T2JqQnlBcnJheSIsImFyciIsImVsZW1lbnQiLCJwcm9jZXNzRXZlbnRBcmdzIiwiaXNDdXN0b20iLCJpc0N1c3RvbU1QRXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiZGF0YXNldCIsImNvbVR5cGUiLCJfX2FyZ3NfXyIsInJldCIsImFyZyIsIk9OQ0UiLCJDVVNUT00iLCJpc01hdGNoRXZlbnRUeXBlIiwiZXZlbnRUeXBlIiwib3B0VHlwZSIsImhhbmRsZUV2ZW50IiwiZXZlbnRPcHRzIiwiZXZlbnRPcHQiLCJldmVudHNBcnJheSIsImNoYXJBdCIsImlzT25jZSIsImV2ZW50QXJyYXkiLCJoYW5kbGVyQ3R4IiwiJG9wdGlvbnMiLCJnZW5lcmljIiwiJHBhcmVudCIsImhhbmRsZXIiLCJFcnJvciIsIm9uY2UiLCJwYXJzZUJhc2VBcHAiLCJpbml0UmVmcyIsInN0b3JlIiwiJHN0b3JlIiwibXBIb3N0IiwiYmVmb3JlQ3JlYXRlIiwiJHNjb3BlIiwiYXBwT3B0aW9ucyIsIm9uTGF1bmNoIiwiYXBwIiwiZ2xvYmFsRGF0YSIsIl9pc01vdW50ZWQiLCJmaW5kVm1CeVZ1ZUlkIiwidnVlUGlkIiwiJGNoaWxkcmVuIiwicGFyZW50Vm0iLCJjaGlsZFZtIiwiQmVoYXZpb3IiLCJpc1BhZ2UiLCJyb3V0ZSIsImluaXRSZWxhdGlvbiIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiJHJlZnMiLCJjb21wb25lbnRzIiwic2VsZWN0QWxsQ29tcG9uZW50cyIsImNvbXBvbmVudCIsInJlZiIsImZvckNvbXBvbmVudHMiLCJoYW5kbGVMaW5rIiwicGFyZW50IiwicGFyc2VBcHAiLCJob29rcyQxIiwicGFyc2VBcHAkMSIsImNyZWF0ZUFwcCIsIkFwcCIsInBhcnNlQmFzZUNvbXBvbmVudCIsInZ1ZUNvbXBvbmVudE9wdGlvbnMiLCJtdWx0aXBsZVNsb3RzIiwiYWRkR2xvYmFsQ2xhc3MiLCJjb21wb25lbnRPcHRpb25zIiwiX19maWxlIiwibGlmZXRpbWVzIiwiYXR0YWNoZWQiLCJwcm9wc0RhdGEiLCIkbW91bnQiLCJyZWFkeSIsImRldGFjaGVkIiwiJGRlc3Ryb3kiLCJwYWdlTGlmZXRpbWVzIiwicmVzaXplIiwic2l6ZSIsIl9fbCIsIl9fZSIsInd4c0NhbGxNZXRob2RzIiwiY2FsbE1ldGhvZCIsInBhcnNlQ29tcG9uZW50IiwicGFyc2VDb21wb25lbnQkMSIsIiRnZXRBcHBXZWJ2aWV3IiwiX193eFdlYnZpZXdJZF9fIiwiaG9va3MkMiIsInBhcnNlQmFzZVBhZ2UiLCJ2dWVQYWdlT3B0aW9ucyIsInBhZ2VPcHRpb25zIiwib25Mb2FkIiwicXVlcnkiLCJwYXJzZVBhZ2UiLCJob29rcyQzIiwicGFyc2VQYWdlJDEiLCJjcmVhdGVQYWdlIiwiY3JlYXRlQ29tcG9uZW50IiwiY2FuSVVzZUFwaSIsImFwaU5hbWUiLCJ1bmkiLCJQcm94eSIsInNldCIsImdsb2JhbCIsIlVuaUVtaXR0ZXIiLCJ1bmkkMSJdLCJtYXBwaW5ncyI6IjZPQUFBLHFFOztBQUVBLElBQU1BLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFuQztBQUNBLElBQU1DLGNBQWMsR0FBR0gsTUFBTSxDQUFDQyxTQUFQLENBQWlCRSxjQUF4Qzs7QUFFQSxTQUFTQyxJQUFULENBQWVDLEVBQWYsRUFBbUI7QUFDakIsU0FBTyxPQUFPQSxFQUFQLEtBQWMsVUFBckI7QUFDRDs7QUFFRCxTQUFTQyxLQUFULENBQWdCQyxHQUFoQixFQUFxQjtBQUNuQixTQUFPLE9BQU9BLEdBQVAsS0FBZSxRQUF0QjtBQUNEOztBQUVELFNBQVNDLGFBQVQsQ0FBd0JDLEdBQXhCLEVBQTZCO0FBQzNCLFNBQU9WLFNBQVMsQ0FBQ1csSUFBVixDQUFlRCxHQUFmLE1BQXdCLGlCQUEvQjtBQUNEOztBQUVELFNBQVNFLE1BQVQsQ0FBaUJGLEdBQWpCLEVBQXNCRyxHQUF0QixFQUEyQjtBQUN6QixTQUFPVCxjQUFjLENBQUNPLElBQWYsQ0FBb0JELEdBQXBCLEVBQXlCRyxHQUF6QixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0MsSUFBVCxHQUFpQixDQUFFOztBQUVuQjs7O0FBR0EsU0FBU0MsTUFBVCxDQUFpQlQsRUFBakIsRUFBcUI7QUFDbkIsTUFBTVUsS0FBSyxHQUFHZixNQUFNLENBQUNnQixNQUFQLENBQWMsSUFBZCxDQUFkO0FBQ0EsU0FBTyxTQUFTQyxRQUFULENBQW1CVixH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QUFDVixJQUFELENBQVYsQ0FBckI7QUFDRCxHQUZEOztBQUlBakUsUUFBTSxDQUFDZ0QsSUFBUCxDQUFZMkQsRUFBWixFQUFnQjFELE9BQWhCLENBQXdCLFVBQUFnQixJQUFJLEVBQUk7QUFDOUIsUUFBSXRELE1BQU0sQ0FBQ2dHLEVBQUQsRUFBSzFDLElBQUwsQ0FBTixJQUFvQnRELE1BQU0sQ0FBQytHLFNBQUQsRUFBWXpELElBQVosQ0FBOUIsRUFBaUQ7QUFDL0NrVixTQUFHLENBQUNsVixJQUFELENBQUgsR0FBWXlCLFNBQVMsQ0FBQ3pCLElBQUQsRUFBT3lFLE9BQU8sQ0FBQ3pFLElBQUQsRUFBTzBDLEVBQUUsQ0FBQzFDLElBQUQsQ0FBVCxDQUFkLENBQXJCO0FBQ0Q7QUFDRixHQUpEO0FBS0Q7O0FBRUQ7QUFDRSxNQUFJLE9BQU9xVixNQUFQLEtBQWtCLFdBQXRCLEVBQW1DO0FBQ2pDQSxVQUFNLENBQUNILEdBQVAsR0FBYUEsR0FBYjtBQUNBRyxVQUFNLENBQUNDLFVBQVAsR0FBb0J2UCxRQUFwQjtBQUNEO0FBQ0Y7O0FBRURyRCxFQUFFLENBQUNpUSxTQUFILEdBQWVBLFNBQWY7QUFDQWpRLEVBQUUsQ0FBQ29TLFVBQUgsR0FBZ0JBLFVBQWhCO0FBQ0FwUyxFQUFFLENBQUNxUyxlQUFILEdBQXFCQSxlQUFyQjs7QUFFQSxJQUFJUSxLQUFLLEdBQUdMLEdBQVosQzs7QUFFZUssSyIsImZpbGUiOiIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5cclxuY29uc3QgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcclxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxuZnVuY3Rpb24gaXNGbiAoZm4pIHtcclxuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3RyIChzdHIpIHtcclxuICByZXR1cm4gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZydcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XHJcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcclxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcclxufVxyXG5cclxuZnVuY3Rpb24gbm9vcCAoKSB7fVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcclxuICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcclxuICAgIGNvbnN0IGhpdCA9IGNhY2hlW3N0cl07XHJcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxyXG4gKi9cclxuY29uc3QgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcclxuY29uc3QgY2FtZWxpemUgPSBjYWNoZWQoKHN0cikgPT4ge1xyXG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCAoXywgYykgPT4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKVxyXG59KTtcclxuXHJcbmNvbnN0IEhPT0tTID0gW1xyXG4gICdpbnZva2UnLFxyXG4gICdzdWNjZXNzJyxcclxuICAnZmFpbCcsXHJcbiAgJ2NvbXBsZXRlJyxcclxuICAncmV0dXJuVmFsdWUnXHJcbl07XHJcblxyXG5jb25zdCBnbG9iYWxJbnRlcmNlcHRvcnMgPSB7fTtcclxuY29uc3Qgc2NvcGVkSW50ZXJjZXB0b3JzID0ge307XHJcblxyXG5mdW5jdGlvbiBtZXJnZUhvb2sgKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcclxuICBjb25zdCByZXMgPSBjaGlsZFZhbFxyXG4gICAgPyBwYXJlbnRWYWxcclxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxyXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXHJcbiAgICAgICAgPyBjaGlsZFZhbCA6IFtjaGlsZFZhbF1cclxuICAgIDogcGFyZW50VmFsO1xyXG4gIHJldHVybiByZXNcclxuICAgID8gZGVkdXBlSG9va3MocmVzKVxyXG4gICAgOiByZXNcclxufVxyXG5cclxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XHJcbiAgY29uc3QgcmVzID0gW107XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcclxuICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUhvb2sgKGhvb2tzLCBob29rKSB7XHJcbiAgY29uc3QgaW5kZXggPSBob29rcy5pbmRleE9mKGhvb2spO1xyXG4gIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgIGhvb2tzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtZXJnZUludGVyY2VwdG9ySG9vayAoaW50ZXJjZXB0b3IsIG9wdGlvbikge1xyXG4gIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaChob29rID0+IHtcclxuICAgIGlmIChIT09LUy5pbmRleE9mKGhvb2spICE9PSAtMSAmJiBpc0ZuKG9wdGlvbltob29rXSkpIHtcclxuICAgICAgaW50ZXJjZXB0b3JbaG9va10gPSBtZXJnZUhvb2soaW50ZXJjZXB0b3JbaG9va10sIG9wdGlvbltob29rXSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUludGVyY2VwdG9ySG9vayAoaW50ZXJjZXB0b3IsIG9wdGlvbikge1xyXG4gIGlmICghaW50ZXJjZXB0b3IgfHwgIW9wdGlvbikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaChob29rID0+IHtcclxuICAgIGlmIChIT09LUy5pbmRleE9mKGhvb2spICE9PSAtMSAmJiBpc0ZuKG9wdGlvbltob29rXSkpIHtcclxuICAgICAgcmVtb3ZlSG9vayhpbnRlcmNlcHRvcltob29rXSwgb3B0aW9uW2hvb2tdKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkSW50ZXJjZXB0b3IgKG1ldGhvZCwgb3B0aW9uKSB7XHJcbiAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdzdHJpbmcnICYmIGlzUGxhaW5PYmplY3Qob3B0aW9uKSkge1xyXG4gICAgbWVyZ2VJbnRlcmNlcHRvckhvb2soc2NvcGVkSW50ZXJjZXB0b3JzW21ldGhvZF0gfHwgKHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdID0ge30pLCBvcHRpb24pO1xyXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChtZXRob2QpKSB7XHJcbiAgICBtZXJnZUludGVyY2VwdG9ySG9vayhnbG9iYWxJbnRlcmNlcHRvcnMsIG1ldGhvZCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVJbnRlcmNlcHRvciAobWV0aG9kLCBvcHRpb24pIHtcclxuICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbikpIHtcclxuICAgICAgcmVtb3ZlSW50ZXJjZXB0b3JIb29rKHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdLCBvcHRpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChtZXRob2QpKSB7XHJcbiAgICByZW1vdmVJbnRlcmNlcHRvckhvb2soZ2xvYmFsSW50ZXJjZXB0b3JzLCBtZXRob2QpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gd3JhcHBlckhvb2sgKGhvb2spIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHJldHVybiBob29rKGRhdGEpIHx8IGRhdGFcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUHJvbWlzZSAob2JqKSB7XHJcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbidcclxufVxyXG5cclxuZnVuY3Rpb24gcXVldWUgKGhvb2tzLCBkYXRhKSB7XHJcbiAgbGV0IHByb21pc2UgPSBmYWxzZTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBob29rID0gaG9va3NbaV07XHJcbiAgICBpZiAocHJvbWlzZSkge1xyXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS50aGVuKHdyYXBwZXJIb29rKGhvb2spKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGhvb2soZGF0YSk7XHJcbiAgICAgIGlmIChpc1Byb21pc2UocmVzKSkge1xyXG4gICAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocmVzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0aGVuICgpIHt9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwcm9taXNlIHx8IHtcclxuICAgIHRoZW4gKGNhbGxiYWNrKSB7XHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhkYXRhKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gd3JhcHBlck9wdGlvbnMgKGludGVyY2VwdG9yLCBvcHRpb25zID0ge30pIHtcclxuICBbJ3N1Y2Nlc3MnLCAnZmFpbCcsICdjb21wbGV0ZSddLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcltuYW1lXSkpIHtcclxuICAgICAgY29uc3Qgb2xkQ2FsbGJhY2sgPSBvcHRpb25zW25hbWVdO1xyXG4gICAgICBvcHRpb25zW25hbWVdID0gZnVuY3Rpb24gY2FsbGJhY2tJbnRlcmNlcHRvciAocmVzKSB7XHJcbiAgICAgICAgcXVldWUoaW50ZXJjZXB0b3JbbmFtZV0sIHJlcykudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cclxuICAgICAgICAgIHJldHVybiBpc0ZuKG9sZENhbGxiYWNrKSAmJiBvbGRDYWxsYmFjayhyZXMpIHx8IHJlc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiBvcHRpb25zXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyYXBwZXJSZXR1cm5WYWx1ZSAobWV0aG9kLCByZXR1cm5WYWx1ZSkge1xyXG4gIGNvbnN0IHJldHVyblZhbHVlSG9va3MgPSBbXTtcclxuICBpZiAoQXJyYXkuaXNBcnJheShnbG9iYWxJbnRlcmNlcHRvcnMucmV0dXJuVmFsdWUpKSB7XHJcbiAgICByZXR1cm5WYWx1ZUhvb2tzLnB1c2goLi4uZ2xvYmFsSW50ZXJjZXB0b3JzLnJldHVyblZhbHVlKTtcclxuICB9XHJcbiAgY29uc3QgaW50ZXJjZXB0b3IgPSBzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXTtcclxuICBpZiAoaW50ZXJjZXB0b3IgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvci5yZXR1cm5WYWx1ZSkpIHtcclxuICAgIHJldHVyblZhbHVlSG9va3MucHVzaCguLi5pbnRlcmNlcHRvci5yZXR1cm5WYWx1ZSk7XHJcbiAgfVxyXG4gIHJldHVyblZhbHVlSG9va3MuZm9yRWFjaChob29rID0+IHtcclxuICAgIHJldHVyblZhbHVlID0gaG9vayhyZXR1cm5WYWx1ZSkgfHwgcmV0dXJuVmFsdWU7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIHJldHVyblZhbHVlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFwaUludGVyY2VwdG9ySG9va3MgKG1ldGhvZCkge1xyXG4gIGNvbnN0IGludGVyY2VwdG9yID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICBPYmplY3Qua2V5cyhnbG9iYWxJbnRlcmNlcHRvcnMpLmZvckVhY2goaG9vayA9PiB7XHJcbiAgICBpZiAoaG9vayAhPT0gJ3JldHVyblZhbHVlJykge1xyXG4gICAgICBpbnRlcmNlcHRvcltob29rXSA9IGdsb2JhbEludGVyY2VwdG9yc1tob29rXS5zbGljZSgpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIGNvbnN0IHNjb3BlZEludGVyY2VwdG9yID0gc2NvcGVkSW50ZXJjZXB0b3JzW21ldGhvZF07XHJcbiAgaWYgKHNjb3BlZEludGVyY2VwdG9yKSB7XHJcbiAgICBPYmplY3Qua2V5cyhzY29wZWRJbnRlcmNlcHRvcikuZm9yRWFjaChob29rID0+IHtcclxuICAgICAgaWYgKGhvb2sgIT09ICdyZXR1cm5WYWx1ZScpIHtcclxuICAgICAgICBpbnRlcmNlcHRvcltob29rXSA9IChpbnRlcmNlcHRvcltob29rXSB8fCBbXSkuY29uY2F0KHNjb3BlZEludGVyY2VwdG9yW2hvb2tdKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBpbnRlcmNlcHRvclxyXG59XHJcblxyXG5mdW5jdGlvbiBpbnZva2VBcGkgKG1ldGhvZCwgYXBpLCBvcHRpb25zLCAuLi5wYXJhbXMpIHtcclxuICBjb25zdCBpbnRlcmNlcHRvciA9IGdldEFwaUludGVyY2VwdG9ySG9va3MobWV0aG9kKTtcclxuICBpZiAoaW50ZXJjZXB0b3IgJiYgT2JqZWN0LmtleXMoaW50ZXJjZXB0b3IpLmxlbmd0aCkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3IuaW52b2tlKSkge1xyXG4gICAgICBjb25zdCByZXMgPSBxdWV1ZShpbnRlcmNlcHRvci5pbnZva2UsIG9wdGlvbnMpO1xyXG4gICAgICByZXR1cm4gcmVzLnRoZW4oKG9wdGlvbnMpID0+IHtcclxuICAgICAgICByZXR1cm4gYXBpKHdyYXBwZXJPcHRpb25zKGludGVyY2VwdG9yLCBvcHRpb25zKSwgLi4ucGFyYW1zKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGFwaSh3cmFwcGVyT3B0aW9ucyhpbnRlcmNlcHRvciwgb3B0aW9ucyksIC4uLnBhcmFtcylcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGFwaShvcHRpb25zLCAuLi5wYXJhbXMpXHJcbn1cclxuXHJcbmNvbnN0IHByb21pc2VJbnRlcmNlcHRvciA9IHtcclxuICByZXR1cm5WYWx1ZSAocmVzKSB7XHJcbiAgICBpZiAoIWlzUHJvbWlzZShyZXMpKSB7XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICAgIHJldHVybiByZXMudGhlbihyZXMgPT4ge1xyXG4gICAgICByZXR1cm4gcmVzWzFdXHJcbiAgICB9KS5jYXRjaChyZXMgPT4ge1xyXG4gICAgICByZXR1cm4gcmVzWzBdXHJcbiAgICB9KVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IFNZTkNfQVBJX1JFID1cclxuICAvXlxcJHxnZXRNZW51QnV0dG9uQm91bmRpbmdDbGllbnRSZWN0fF5yZXBvcnR8aW50ZXJjZXB0b3JzfEludGVyY2VwdG9yJHxnZXRTdWJOVnVlQnlJZHxyZXF1aXJlTmF0aXZlUGx1Z2lufHVweDJweHxoaWRlS2V5Ym9hcmR8Y2FuSVVzZXxeY3JlYXRlfFN5bmMkfE1hbmFnZXIkfGJhc2U2NFRvQXJyYXlCdWZmZXJ8YXJyYXlCdWZmZXJUb0Jhc2U2NC87XHJcblxyXG5jb25zdCBDT05URVhUX0FQSV9SRSA9IC9eY3JlYXRlfE1hbmFnZXIkLztcclxuXHJcbmNvbnN0IENBTExCQUNLX0FQSV9SRSA9IC9eb24vO1xyXG5cclxuZnVuY3Rpb24gaXNDb250ZXh0QXBpIChuYW1lKSB7XHJcbiAgcmV0dXJuIENPTlRFWFRfQVBJX1JFLnRlc3QobmFtZSlcclxufVxyXG5mdW5jdGlvbiBpc1N5bmNBcGkgKG5hbWUpIHtcclxuICByZXR1cm4gU1lOQ19BUElfUkUudGVzdChuYW1lKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0NhbGxiYWNrQXBpIChuYW1lKSB7XHJcbiAgcmV0dXJuIENBTExCQUNLX0FQSV9SRS50ZXN0KG5hbWUpICYmIG5hbWUgIT09ICdvblB1c2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVByb21pc2UgKHByb21pc2UpIHtcclxuICByZXR1cm4gcHJvbWlzZS50aGVuKGRhdGEgPT4ge1xyXG4gICAgcmV0dXJuIFtudWxsLCBkYXRhXVxyXG4gIH0pXHJcbiAgICAuY2F0Y2goZXJyID0+IFtlcnJdKVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG91bGRQcm9taXNlIChuYW1lKSB7XHJcbiAgaWYgKFxyXG4gICAgaXNDb250ZXh0QXBpKG5hbWUpIHx8XHJcbiAgICBpc1N5bmNBcGkobmFtZSkgfHxcclxuICAgIGlzQ2FsbGJhY2tBcGkobmFtZSlcclxuICApIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9taXNpZnkgKG5hbWUsIGFwaSkge1xyXG4gIGlmICghc2hvdWxkUHJvbWlzZShuYW1lKSkge1xyXG4gICAgcmV0dXJuIGFwaVxyXG4gIH1cclxuICByZXR1cm4gZnVuY3Rpb24gcHJvbWlzZUFwaSAob3B0aW9ucyA9IHt9LCAuLi5wYXJhbXMpIHtcclxuICAgIGlmIChpc0ZuKG9wdGlvbnMuc3VjY2VzcykgfHwgaXNGbihvcHRpb25zLmZhaWwpIHx8IGlzRm4ob3B0aW9ucy5jb21wbGV0ZSkpIHtcclxuICAgICAgcmV0dXJuIHdyYXBwZXJSZXR1cm5WYWx1ZShuYW1lLCBpbnZva2VBcGkobmFtZSwgYXBpLCBvcHRpb25zLCAuLi5wYXJhbXMpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdyYXBwZXJSZXR1cm5WYWx1ZShuYW1lLCBoYW5kbGVQcm9taXNlKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaW52b2tlQXBpKG5hbWUsIGFwaSwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHJlc29sdmUsXHJcbiAgICAgICAgZmFpbDogcmVqZWN0XHJcbiAgICAgIH0pLCAuLi5wYXJhbXMpO1xyXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1leHRlbmQtbmF0aXZlICovXHJcbiAgICAgIGlmICghUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSkge1xyXG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLmZpbmFsbHkgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmNvbnN0cnVjdG9yO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudGhlbihcclxuICAgICAgICAgICAgdmFsdWUgPT4gcHJvbWlzZS5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxyXG4gICAgICAgICAgICByZWFzb24gPT4gcHJvbWlzZS5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvblxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0pKSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEVQUyA9IDFlLTQ7XHJcbmNvbnN0IEJBU0VfREVWSUNFX1dJRFRIID0gNzUwO1xyXG5sZXQgaXNJT1MgPSBmYWxzZTtcclxubGV0IGRldmljZVdpZHRoID0gMDtcclxubGV0IGRldmljZURQUiA9IDA7XHJcblxyXG5mdW5jdGlvbiBjaGVja0RldmljZVdpZHRoICgpIHtcclxuICBjb25zdCB7XHJcbiAgICBwbGF0Zm9ybSxcclxuICAgIHBpeGVsUmF0aW8sXHJcbiAgICB3aW5kb3dXaWR0aFxyXG4gIH0gPSB3eC5nZXRTeXN0ZW1JbmZvU3luYygpOyAvLyB1bmk9Pnd4IHJ1bnRpbWUg57yW6K+R55uu5qCH5pivIHVuaSDlr7nosaHvvIzlhoXpg6jkuI3lhYHorrjnm7TmjqXkvb/nlKggdW5pXHJcblxyXG4gIGRldmljZVdpZHRoID0gd2luZG93V2lkdGg7XHJcbiAgZGV2aWNlRFBSID0gcGl4ZWxSYXRpbztcclxuICBpc0lPUyA9IHBsYXRmb3JtID09PSAnaW9zJztcclxufVxyXG5cclxuZnVuY3Rpb24gdXB4MnB4IChudW1iZXIsIG5ld0RldmljZVdpZHRoKSB7XHJcbiAgaWYgKGRldmljZVdpZHRoID09PSAwKSB7XHJcbiAgICBjaGVja0RldmljZVdpZHRoKCk7XHJcbiAgfVxyXG5cclxuICBudW1iZXIgPSBOdW1iZXIobnVtYmVyKTtcclxuICBpZiAobnVtYmVyID09PSAwKSB7XHJcbiAgICByZXR1cm4gMFxyXG4gIH1cclxuICBsZXQgcmVzdWx0ID0gKG51bWJlciAvIEJBU0VfREVWSUNFX1dJRFRIKSAqIChuZXdEZXZpY2VXaWR0aCB8fCBkZXZpY2VXaWR0aCk7XHJcbiAgaWYgKHJlc3VsdCA8IDApIHtcclxuICAgIHJlc3VsdCA9IC1yZXN1bHQ7XHJcbiAgfVxyXG4gIHJlc3VsdCA9IE1hdGguZmxvb3IocmVzdWx0ICsgRVBTKTtcclxuICBpZiAocmVzdWx0ID09PSAwKSB7XHJcbiAgICBpZiAoZGV2aWNlRFBSID09PSAxIHx8ICFpc0lPUykge1xyXG4gICAgICByZXR1cm4gMVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDAuNVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbnVtYmVyIDwgMCA/IC1yZXN1bHQgOiByZXN1bHRcclxufVxyXG5cclxuY29uc3QgaW50ZXJjZXB0b3JzID0ge1xyXG4gIHByb21pc2VJbnRlcmNlcHRvclxyXG59O1xyXG5cclxuXHJcblxyXG52YXIgYmFzZUFwaSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcclxuICB1cHgycHg6IHVweDJweCxcclxuICBpbnRlcmNlcHRvcnM6IGludGVyY2VwdG9ycyxcclxuICBhZGRJbnRlcmNlcHRvcjogYWRkSW50ZXJjZXB0b3IsXHJcbiAgcmVtb3ZlSW50ZXJjZXB0b3I6IHJlbW92ZUludGVyY2VwdG9yXHJcbn0pO1xyXG5cclxuY29uc3QgcHJvdG9jb2xzID0ge307XHJcbmNvbnN0IHRvZG9zID0gW107XHJcbmNvbnN0IGNhbklVc2VzID0gW107XHJcblxyXG5jb25zdCBDQUxMQkFDS1MgPSBbJ3N1Y2Nlc3MnLCAnZmFpbCcsICdjYW5jZWwnLCAnY29tcGxldGUnXTtcclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NDYWxsYmFjayAobWV0aG9kTmFtZSwgbWV0aG9kLCByZXR1cm5WYWx1ZSkge1xyXG4gIHJldHVybiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICByZXR1cm4gbWV0aG9kKHByb2Nlc3NSZXR1cm5WYWx1ZShtZXRob2ROYW1lLCByZXMsIHJldHVyblZhbHVlKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NBcmdzIChtZXRob2ROYW1lLCBmcm9tQXJncywgYXJnc09wdGlvbiA9IHt9LCByZXR1cm5WYWx1ZSA9IHt9LCBrZWVwRnJvbUFyZ3MgPSBmYWxzZSkge1xyXG4gIGlmIChpc1BsYWluT2JqZWN0KGZyb21BcmdzKSkgeyAvLyDkuIDoiKwgYXBpIOeahOWPguaVsOino+aekFxyXG4gICAgY29uc3QgdG9BcmdzID0ga2VlcEZyb21BcmdzID09PSB0cnVlID8gZnJvbUFyZ3MgOiB7fTsgLy8gcmV0dXJuVmFsdWUg5Li6IGZhbHNlIOaXtu+8jOivtOaYjuaYr+agvOW8j+WMlui/lOWbnuWAvO+8jOebtOaOpeWcqOi/lOWbnuWAvOWvueixoeS4iuS/ruaUuei1i+WAvFxyXG4gICAgaWYgKGlzRm4oYXJnc09wdGlvbikpIHtcclxuICAgICAgYXJnc09wdGlvbiA9IGFyZ3NPcHRpb24oZnJvbUFyZ3MsIHRvQXJncykgfHwge307XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gZnJvbUFyZ3MpIHtcclxuICAgICAgaWYgKGhhc093bihhcmdzT3B0aW9uLCBrZXkpKSB7XHJcbiAgICAgICAgbGV0IGtleU9wdGlvbiA9IGFyZ3NPcHRpb25ba2V5XTtcclxuICAgICAgICBpZiAoaXNGbihrZXlPcHRpb24pKSB7XHJcbiAgICAgICAgICBrZXlPcHRpb24gPSBrZXlPcHRpb24oZnJvbUFyZ3Nba2V5XSwgZnJvbUFyZ3MsIHRvQXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgha2V5T3B0aW9uKSB7IC8vIOS4jeaUr+aMgeeahOWPguaVsFxyXG4gICAgICAgICAgY29uc29sZS53YXJuKGBhcHAtcGx1cyAke21ldGhvZE5hbWV95pqC5LiN5pSv5oyBJHtrZXl9YCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc1N0cihrZXlPcHRpb24pKSB7IC8vIOmHjeWGmeWPguaVsCBrZXlcclxuICAgICAgICAgIHRvQXJnc1trZXlPcHRpb25dID0gZnJvbUFyZ3Nba2V5XTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoa2V5T3B0aW9uKSkgeyAvLyB7bmFtZTpuZXdOYW1lLHZhbHVlOnZhbHVlfeWPr+mHjeaWsOaMh+WumuWPguaVsCBrZXk6dmFsdWVcclxuICAgICAgICAgIHRvQXJnc1trZXlPcHRpb24ubmFtZSA/IGtleU9wdGlvbi5uYW1lIDoga2V5XSA9IGtleU9wdGlvbi52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoQ0FMTEJBQ0tTLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcclxuICAgICAgICB0b0FyZ3Nba2V5XSA9IHByb2Nlc3NDYWxsYmFjayhtZXRob2ROYW1lLCBmcm9tQXJnc1trZXldLCByZXR1cm5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFrZWVwRnJvbUFyZ3MpIHtcclxuICAgICAgICAgIHRvQXJnc1trZXldID0gZnJvbUFyZ3Nba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0b0FyZ3NcclxuICB9IGVsc2UgaWYgKGlzRm4oZnJvbUFyZ3MpKSB7XHJcbiAgICBmcm9tQXJncyA9IHByb2Nlc3NDYWxsYmFjayhtZXRob2ROYW1lLCBmcm9tQXJncywgcmV0dXJuVmFsdWUpO1xyXG4gIH1cclxuICByZXR1cm4gZnJvbUFyZ3NcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc1JldHVyblZhbHVlIChtZXRob2ROYW1lLCByZXMsIHJldHVyblZhbHVlLCBrZWVwUmV0dXJuVmFsdWUgPSBmYWxzZSkge1xyXG4gIGlmIChpc0ZuKHByb3RvY29scy5yZXR1cm5WYWx1ZSkpIHsgLy8g5aSE55CG6YCa55SoIHJldHVyblZhbHVlXHJcbiAgICByZXMgPSBwcm90b2NvbHMucmV0dXJuVmFsdWUobWV0aG9kTmFtZSwgcmVzKTtcclxuICB9XHJcbiAgcmV0dXJuIHByb2Nlc3NBcmdzKG1ldGhvZE5hbWUsIHJlcywgcmV0dXJuVmFsdWUsIHt9LCBrZWVwUmV0dXJuVmFsdWUpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyYXBwZXIgKG1ldGhvZE5hbWUsIG1ldGhvZCkge1xyXG4gIGlmIChoYXNPd24ocHJvdG9jb2xzLCBtZXRob2ROYW1lKSkge1xyXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwcm90b2NvbHNbbWV0aG9kTmFtZV07XHJcbiAgICBpZiAoIXByb3RvY29sKSB7IC8vIOaaguS4jeaUr+aMgeeahCBhcGlcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBhcHAtcGx1cyDmmoLkuI3mlK/mjIEke21ldGhvZE5hbWV9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMSwgYXJnMikgeyAvLyDnm67liY0gYXBpIOacgOWkmuS4pOS4quWPguaVsFxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHByb3RvY29sO1xyXG4gICAgICBpZiAoaXNGbihwcm90b2NvbCkpIHtcclxuICAgICAgICBvcHRpb25zID0gcHJvdG9jb2woYXJnMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFyZzEgPSBwcm9jZXNzQXJncyhtZXRob2ROYW1lLCBhcmcxLCBvcHRpb25zLmFyZ3MsIG9wdGlvbnMucmV0dXJuVmFsdWUpO1xyXG5cclxuICAgICAgY29uc3QgYXJncyA9IFthcmcxXTtcclxuICAgICAgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGFyZ3MucHVzaChhcmcyKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHd4W29wdGlvbnMubmFtZSB8fCBtZXRob2ROYW1lXS5hcHBseSh3eCwgYXJncyk7XHJcbiAgICAgIGlmIChpc1N5bmNBcGkobWV0aG9kTmFtZSkpIHsgLy8g5ZCM5q2lIGFwaVxyXG4gICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuVmFsdWUobWV0aG9kTmFtZSwgcmV0dXJuVmFsdWUsIG9wdGlvbnMucmV0dXJuVmFsdWUsIGlzQ29udGV4dEFwaShtZXRob2ROYW1lKSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWVcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG1ldGhvZFxyXG59XHJcblxyXG5jb25zdCB0b2RvQXBpcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcblxyXG5jb25zdCBUT0RPUyA9IFtcclxuICAnb25UYWJCYXJNaWRCdXR0b25UYXAnLFxyXG4gICdzdWJzY3JpYmVQdXNoJyxcclxuICAndW5zdWJzY3JpYmVQdXNoJyxcclxuICAnb25QdXNoJyxcclxuICAnb2ZmUHVzaCcsXHJcbiAgJ3NoYXJlJ1xyXG5dO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlVG9kb0FwaSAobmFtZSkge1xyXG4gIHJldHVybiBmdW5jdGlvbiB0b2RvQXBpICh7XHJcbiAgICBmYWlsLFxyXG4gICAgY29tcGxldGVcclxuICB9KSB7XHJcbiAgICBjb25zdCByZXMgPSB7XHJcbiAgICAgIGVyck1zZzogYCR7bmFtZX06ZmFpbDrmmoLkuI3mlK/mjIEgJHtuYW1lfSDmlrnms5VgXHJcbiAgICB9O1xyXG4gICAgaXNGbihmYWlsKSAmJiBmYWlsKHJlcyk7XHJcbiAgICBpc0ZuKGNvbXBsZXRlKSAmJiBjb21wbGV0ZShyZXMpO1xyXG4gIH1cclxufVxyXG5cclxuVE9ET1MuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xyXG4gIHRvZG9BcGlzW25hbWVdID0gY3JlYXRlVG9kb0FwaShuYW1lKTtcclxufSk7XHJcblxyXG5jb25zdCBnZXRFbWl0dGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICBpZiAodHlwZW9mIGdldFVuaUVtaXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcbiAgICByZXR1cm4gZ2V0VW5pRW1pdHRlclxyXG4gIH1cclxuICBsZXQgRW1pdHRlcjtcclxuICByZXR1cm4gZnVuY3Rpb24gZ2V0VW5pRW1pdHRlciAoKSB7XHJcbiAgICBpZiAoIUVtaXR0ZXIpIHtcclxuICAgICAgRW1pdHRlciA9IG5ldyBWdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBFbWl0dGVyXHJcbiAgfVxyXG59KSgpO1xyXG5cclxuZnVuY3Rpb24gYXBwbHkgKGN0eCwgbWV0aG9kLCBhcmdzKSB7XHJcbiAgcmV0dXJuIGN0eFttZXRob2RdLmFwcGx5KGN0eCwgYXJncylcclxufVxyXG5cclxuZnVuY3Rpb24gJG9uICgpIHtcclxuICByZXR1cm4gYXBwbHkoZ2V0RW1pdHRlcigpLCAnJG9uJywgWy4uLmFyZ3VtZW50c10pXHJcbn1cclxuZnVuY3Rpb24gJG9mZiAoKSB7XHJcbiAgcmV0dXJuIGFwcGx5KGdldEVtaXR0ZXIoKSwgJyRvZmYnLCBbLi4uYXJndW1lbnRzXSlcclxufVxyXG5mdW5jdGlvbiAkb25jZSAoKSB7XHJcbiAgcmV0dXJuIGFwcGx5KGdldEVtaXR0ZXIoKSwgJyRvbmNlJywgWy4uLmFyZ3VtZW50c10pXHJcbn1cclxuZnVuY3Rpb24gJGVtaXQgKCkge1xyXG4gIHJldHVybiBhcHBseShnZXRFbWl0dGVyKCksICckZW1pdCcsIFsuLi5hcmd1bWVudHNdKVxyXG59XHJcblxyXG52YXIgZXZlbnRBcGkgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XHJcbiAgJG9uOiAkb24sXHJcbiAgJG9mZjogJG9mZixcclxuICAkb25jZTogJG9uY2UsXHJcbiAgJGVtaXQ6ICRlbWl0XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gcmVxdWlyZU5hdGl2ZVBsdWdpbiAocGx1Z2luTmFtZSkge1xyXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcbiAgaWYgKHR5cGVvZiB3ZWV4ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgcmV0dXJuIHdlZXgucmVxdWlyZU1vZHVsZShwbHVnaW5OYW1lKVxyXG4gIH1cclxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xyXG4gIHJldHVybiBfX3JlcXVpcmVOYXRpdmVQbHVnaW5fXyhwbHVnaW5OYW1lKVxyXG59XHJcblxyXG5mdW5jdGlvbiB3cmFwcGVyJDEgKHdlYnZpZXcpIHtcclxuICB3ZWJ2aWV3LiRwcm9jZXNzZWQgPSB0cnVlO1xyXG5cclxuICB3ZWJ2aWV3LnBvc3RNZXNzYWdlID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHBsdXMud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcoe1xyXG4gICAgICB0eXBlOiAnVW5pQXBwU3ViTlZ1ZScsXHJcbiAgICAgIGRhdGFcclxuICAgIH0sIHdlYnZpZXcuaWQpO1xyXG4gIH07XHJcbiAgbGV0IGNhbGxiYWNrcyA9IFtdO1xyXG4gIHdlYnZpZXcub25NZXNzYWdlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfTtcclxuICB3ZWJ2aWV3LiRjb25zdW1lTWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBjYWxsYmFja3MuZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjayhlKSk7XHJcbiAgfTtcclxuXHJcbiAgaWYgKCF3ZWJ2aWV3Ll9fdW5pYXBwX21hc2tfaWQpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBjb25zdCBtYXNrQ29sb3IgPSB3ZWJ2aWV3Ll9fdW5pYXBwX21hc2s7XHJcbiAgbGV0IG1hc2tXZWJ2aWV3ID0gd2Vidmlldy5fX3VuaWFwcF9tYXNrX2lkID09PSAnMCcgPyB7XHJcbiAgICBzZXRTdHlsZSAoe1xyXG4gICAgICBtYXNrXHJcbiAgICB9KSB7XHJcbiAgICAgIHJlcXVpcmVOYXRpdmVQbHVnaW4oJ3VuaS10YWJ2aWV3Jykuc2V0TWFzayh7XHJcbiAgICAgICAgY29sb3I6IG1hc2tcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSA6IHBsdXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh3ZWJ2aWV3Ll9fdW5pYXBwX21hc2tfaWQpO1xyXG4gIGNvbnN0IG9sZFNob3cgPSB3ZWJ2aWV3LnNob3c7XHJcbiAgY29uc3Qgb2xkSGlkZSA9IHdlYnZpZXcuaGlkZTtcclxuICBjb25zdCBvbGRDbG9zZSA9IHdlYnZpZXcuY2xvc2U7XHJcblxyXG4gIGNvbnN0IHNob3dNYXNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgbWFza1dlYnZpZXcuc2V0U3R5bGUoe1xyXG4gICAgICBtYXNrOiBtYXNrQ29sb3JcclxuICAgIH0pO1xyXG4gIH07XHJcbiAgY29uc3QgY2xvc2VNYXNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgbWFza1dlYnZpZXcuc2V0U3R5bGUoe1xyXG4gICAgICBtYXNrOiAnbm9uZSdcclxuICAgIH0pO1xyXG4gIH07XHJcbiAgd2Vidmlldy5zaG93ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgIHNob3dNYXNrKCk7XHJcbiAgICByZXR1cm4gb2xkU2hvdy5hcHBseSh3ZWJ2aWV3LCBhcmdzKVxyXG4gIH07XHJcbiAgd2Vidmlldy5oaWRlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgIGNsb3NlTWFzaygpO1xyXG4gICAgcmV0dXJuIG9sZEhpZGUuYXBwbHkod2VidmlldywgYXJncylcclxuICB9O1xyXG4gIHdlYnZpZXcuY2xvc2UgPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgY2xvc2VNYXNrKCk7XHJcbiAgICBjYWxsYmFja3MgPSBbXTtcclxuICAgIHJldHVybiBvbGRDbG9zZS5hcHBseSh3ZWJ2aWV3LCBhcmdzKVxyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFN1Yk5WdWVCeUlkIChpZCkge1xyXG4gIGNvbnN0IHdlYnZpZXcgPSBwbHVzLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQoaWQpO1xyXG4gIGlmICh3ZWJ2aWV3ICYmICF3ZWJ2aWV3LiRwcm9jZXNzZWQpIHtcclxuICAgIHdyYXBwZXIkMSh3ZWJ2aWV3KTtcclxuICB9XHJcbiAgcmV0dXJuIHdlYnZpZXdcclxufVxyXG5cclxuXHJcblxyXG52YXIgYXBpID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xyXG4gIGdldFN1Yk5WdWVCeUlkOiBnZXRTdWJOVnVlQnlJZCxcclxuICByZXF1aXJlTmF0aXZlUGx1Z2luOiByZXF1aXJlTmF0aXZlUGx1Z2luXHJcbn0pO1xyXG5cclxuY29uc3QgTVBQYWdlID0gUGFnZTtcclxuY29uc3QgTVBDb21wb25lbnQgPSBDb21wb25lbnQ7XHJcblxyXG5jb25zdCBjdXN0b21pemVSRSA9IC86L2c7XHJcblxyXG5jb25zdCBjdXN0b21pemUgPSBjYWNoZWQoKHN0cikgPT4ge1xyXG4gIHJldHVybiBjYW1lbGl6ZShzdHIucmVwbGFjZShjdXN0b21pemVSRSwgJy0nKSlcclxufSk7XHJcblxyXG5mdW5jdGlvbiBpbml0VHJpZ2dlckV2ZW50IChtcEluc3RhbmNlKSB7XHJcbiAge1xyXG4gICAgaWYgKCF3eC5jYW5JVXNlKCduZXh0VGljaycpKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCBvbGRUcmlnZ2VyRXZlbnQgPSBtcEluc3RhbmNlLnRyaWdnZXJFdmVudDtcclxuICBtcEluc3RhbmNlLnRyaWdnZXJFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgLi4uYXJncykge1xyXG4gICAgcmV0dXJuIG9sZFRyaWdnZXJFdmVudC5hcHBseShtcEluc3RhbmNlLCBbY3VzdG9taXplKGV2ZW50KSwgLi4uYXJnc10pXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdEhvb2sgKG5hbWUsIG9wdGlvbnMpIHtcclxuICBjb25zdCBvbGRIb29rID0gb3B0aW9uc1tuYW1lXTtcclxuICBpZiAoIW9sZEhvb2spIHtcclxuICAgIG9wdGlvbnNbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGluaXRUcmlnZ2VyRXZlbnQodGhpcyk7XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICBvcHRpb25zW25hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgaW5pdFRyaWdnZXJFdmVudCh0aGlzKTtcclxuICAgICAgcmV0dXJuIG9sZEhvb2suYXBwbHkodGhpcywgYXJncylcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5QYWdlID0gZnVuY3Rpb24gKG9wdGlvbnMgPSB7fSkge1xyXG4gIGluaXRIb29rKCdvbkxvYWQnLCBvcHRpb25zKTtcclxuICByZXR1cm4gTVBQYWdlKG9wdGlvbnMpXHJcbn07XHJcblxyXG5Db21wb25lbnQgPSBmdW5jdGlvbiAob3B0aW9ucyA9IHt9KSB7XHJcbiAgaW5pdEhvb2soJ2NyZWF0ZWQnLCBvcHRpb25zKTtcclxuICByZXR1cm4gTVBDb21wb25lbnQob3B0aW9ucylcclxufTtcclxuXHJcbmNvbnN0IFBBR0VfRVZFTlRfSE9PS1MgPSBbXHJcbiAgJ29uUHVsbERvd25SZWZyZXNoJyxcclxuICAnb25SZWFjaEJvdHRvbScsXHJcbiAgJ29uU2hhcmVBcHBNZXNzYWdlJyxcclxuICAnb25QYWdlU2Nyb2xsJyxcclxuICAnb25SZXNpemUnLFxyXG4gICdvblRhYkl0ZW1UYXAnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBpbml0TW9ja3MgKHZtLCBtb2Nrcykge1xyXG4gIGNvbnN0IG1wSW5zdGFuY2UgPSB2bS4kbXBbdm0ubXBUeXBlXTtcclxuICBtb2Nrcy5mb3JFYWNoKG1vY2sgPT4ge1xyXG4gICAgaWYgKGhhc093bihtcEluc3RhbmNlLCBtb2NrKSkge1xyXG4gICAgICB2bVttb2NrXSA9IG1wSW5zdGFuY2VbbW9ja107XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc0hvb2sgKGhvb2ssIHZ1ZU9wdGlvbnMpIHtcclxuICBpZiAoIXZ1ZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBpZiAoVnVlLm9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShWdWUub3B0aW9uc1tob29rXSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICB2dWVPcHRpb25zID0gdnVlT3B0aW9ucy5kZWZhdWx0IHx8IHZ1ZU9wdGlvbnM7XHJcblxyXG4gIGlmIChpc0ZuKHZ1ZU9wdGlvbnMpKSB7XHJcbiAgICBpZiAoaXNGbih2dWVPcHRpb25zLmV4dGVuZE9wdGlvbnNbaG9va10pKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodnVlT3B0aW9ucy5zdXBlciAmJlxyXG4gICAgICB2dWVPcHRpb25zLnN1cGVyLm9wdGlvbnMgJiZcclxuICAgICAgQXJyYXkuaXNBcnJheSh2dWVPcHRpb25zLnN1cGVyLm9wdGlvbnNbaG9va10pKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmIChpc0ZuKHZ1ZU9wdGlvbnNbaG9va10pKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBjb25zdCBtaXhpbnMgPSB2dWVPcHRpb25zLm1peGlucztcclxuICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbnMpKSB7XHJcbiAgICByZXR1cm4gISFtaXhpbnMuZmluZChtaXhpbiA9PiBoYXNIb29rKGhvb2ssIG1peGluKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRIb29rcyAobXBPcHRpb25zLCBob29rcywgdnVlT3B0aW9ucykge1xyXG4gIGhvb2tzLmZvckVhY2goaG9vayA9PiB7XHJcbiAgICBpZiAoaGFzSG9vayhob29rLCB2dWVPcHRpb25zKSkge1xyXG4gICAgICBtcE9wdGlvbnNbaG9va10gPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR2bSAmJiB0aGlzLiR2bS5fX2NhbGxfaG9vayhob29rLCBhcmdzKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0VnVlQ29tcG9uZW50IChWdWUsIHZ1ZU9wdGlvbnMpIHtcclxuICB2dWVPcHRpb25zID0gdnVlT3B0aW9ucy5kZWZhdWx0IHx8IHZ1ZU9wdGlvbnM7XHJcbiAgbGV0IFZ1ZUNvbXBvbmVudDtcclxuICBpZiAoaXNGbih2dWVPcHRpb25zKSkge1xyXG4gICAgVnVlQ29tcG9uZW50ID0gdnVlT3B0aW9ucztcclxuICAgIHZ1ZU9wdGlvbnMgPSBWdWVDb21wb25lbnQuZXh0ZW5kT3B0aW9ucztcclxuICB9IGVsc2Uge1xyXG4gICAgVnVlQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh2dWVPcHRpb25zKTtcclxuICB9XHJcbiAgcmV0dXJuIFtWdWVDb21wb25lbnQsIHZ1ZU9wdGlvbnNdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRTbG90cyAodm0sIHZ1ZVNsb3RzKSB7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodnVlU2xvdHMpICYmIHZ1ZVNsb3RzLmxlbmd0aCkge1xyXG4gICAgY29uc3QgJHNsb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIHZ1ZVNsb3RzLmZvckVhY2goc2xvdE5hbWUgPT4ge1xyXG4gICAgICAkc2xvdHNbc2xvdE5hbWVdID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdm0uJHNjb3BlZFNsb3RzID0gdm0uJHNsb3RzID0gJHNsb3RzO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFZ1ZUlkcyAodnVlSWRzLCBtcEluc3RhbmNlKSB7XHJcbiAgdnVlSWRzID0gKHZ1ZUlkcyB8fCAnJykuc3BsaXQoJywnKTtcclxuICBjb25zdCBsZW4gPSB2dWVJZHMubGVuZ3RoO1xyXG5cclxuICBpZiAobGVuID09PSAxKSB7XHJcbiAgICBtcEluc3RhbmNlLl8kdnVlSWQgPSB2dWVJZHNbMF07XHJcbiAgfSBlbHNlIGlmIChsZW4gPT09IDIpIHtcclxuICAgIG1wSW5zdGFuY2UuXyR2dWVJZCA9IHZ1ZUlkc1swXTtcclxuICAgIG1wSW5zdGFuY2UuXyR2dWVQaWQgPSB2dWVJZHNbMV07XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0RGF0YSAodnVlT3B0aW9ucywgY29udGV4dCkge1xyXG4gIGxldCBkYXRhID0gdnVlT3B0aW9ucy5kYXRhIHx8IHt9O1xyXG4gIGNvbnN0IG1ldGhvZHMgPSB2dWVPcHRpb25zLm1ldGhvZHMgfHwge307XHJcblxyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZGF0YSA9IGRhdGEuY2FsbChjb250ZXh0KTsgLy8g5pSv5oyBIFZ1ZS5wcm90b3R5cGUg5LiK5oyC55qE5pWw5o2uXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WVUVfQVBQX0RFQlVHKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCfmoLnmja4gVnVlIOeahCBkYXRhIOWHveaVsOWIneWni+WMluWwj+eoi+W6jyBkYXRhIOWksei0pe+8jOivt+WwvemHj+ehruS/nSBkYXRhIOWHveaVsOS4reS4jeiuv+mXriB2bSDlr7nosaHvvIzlkKbliJnlj6/og73lvbHlk43pppbmrKHmlbDmja7muLLmn5PpgJ/luqbjgIInLCBkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyDlr7kgZGF0YSDmoLzlvI/ljJZcclxuICAgICAgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuICB9XHJcblxyXG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xyXG4gICAgZGF0YSA9IHt9O1xyXG4gIH1cclxuXHJcbiAgT2JqZWN0LmtleXMobWV0aG9kcykuZm9yRWFjaChtZXRob2ROYW1lID0+IHtcclxuICAgIGlmIChjb250ZXh0Ll9fbGlmZWN5Y2xlX2hvb2tzX18uaW5kZXhPZihtZXRob2ROYW1lKSA9PT0gLTEgJiYgIWhhc093bihkYXRhLCBtZXRob2ROYW1lKSkge1xyXG4gICAgICBkYXRhW21ldGhvZE5hbWVdID0gbWV0aG9kc1ttZXRob2ROYW1lXTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGRhdGFcclxufVxyXG5cclxuY29uc3QgUFJPUF9UWVBFUyA9IFtTdHJpbmcsIE51bWJlciwgQm9vbGVhbiwgT2JqZWN0LCBBcnJheSwgbnVsbF07XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZlciAobmFtZSkge1xyXG4gIHJldHVybiBmdW5jdGlvbiBvYnNlcnZlciAobmV3VmFsLCBvbGRWYWwpIHtcclxuICAgIGlmICh0aGlzLiR2bSkge1xyXG4gICAgICB0aGlzLiR2bVtuYW1lXSA9IG5ld1ZhbDsgLy8g5Li65LqG6Kem5Y+R5YW25LuW6Z2eIHJlbmRlciB3YXRjaGVyXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0QmVoYXZpb3JzICh2dWVPcHRpb25zLCBpbml0QmVoYXZpb3IpIHtcclxuICBjb25zdCB2dWVCZWhhdmlvcnMgPSB2dWVPcHRpb25zWydiZWhhdmlvcnMnXTtcclxuICBjb25zdCB2dWVFeHRlbmRzID0gdnVlT3B0aW9uc1snZXh0ZW5kcyddO1xyXG4gIGNvbnN0IHZ1ZU1peGlucyA9IHZ1ZU9wdGlvbnNbJ21peGlucyddO1xyXG5cclxuICBsZXQgdnVlUHJvcHMgPSB2dWVPcHRpb25zWydwcm9wcyddO1xyXG5cclxuICBpZiAoIXZ1ZVByb3BzKSB7XHJcbiAgICB2dWVPcHRpb25zWydwcm9wcyddID0gdnVlUHJvcHMgPSBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGJlaGF2aW9ycyA9IFtdO1xyXG4gIGlmIChBcnJheS5pc0FycmF5KHZ1ZUJlaGF2aW9ycykpIHtcclxuICAgIHZ1ZUJlaGF2aW9ycy5mb3JFYWNoKGJlaGF2aW9yID0+IHtcclxuICAgICAgYmVoYXZpb3JzLnB1c2goYmVoYXZpb3IucmVwbGFjZSgndW5pOi8vJywgYCR7XCJ3eFwifTovL2ApKTtcclxuICAgICAgaWYgKGJlaGF2aW9yID09PSAndW5pOi8vZm9ybS1maWVsZCcpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2dWVQcm9wcykpIHtcclxuICAgICAgICAgIHZ1ZVByb3BzLnB1c2goJ25hbWUnKTtcclxuICAgICAgICAgIHZ1ZVByb3BzLnB1c2goJ3ZhbHVlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZ1ZVByb3BzWyduYW1lJ10gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB2dWVQcm9wc1sndmFsdWUnXSA9IHtcclxuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyLCBCb29sZWFuLCBBcnJheSwgT2JqZWN0LCBEYXRlXSxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaWYgKGlzUGxhaW5PYmplY3QodnVlRXh0ZW5kcykgJiYgdnVlRXh0ZW5kcy5wcm9wcykge1xyXG4gICAgYmVoYXZpb3JzLnB1c2goXHJcbiAgICAgIGluaXRCZWhhdmlvcih7XHJcbiAgICAgICAgcHJvcGVydGllczogaW5pdFByb3BlcnRpZXModnVlRXh0ZW5kcy5wcm9wcywgdHJ1ZSlcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGlmIChBcnJheS5pc0FycmF5KHZ1ZU1peGlucykpIHtcclxuICAgIHZ1ZU1peGlucy5mb3JFYWNoKHZ1ZU1peGluID0+IHtcclxuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodnVlTWl4aW4pICYmIHZ1ZU1peGluLnByb3BzKSB7XHJcbiAgICAgICAgYmVoYXZpb3JzLnB1c2goXHJcbiAgICAgICAgICBpbml0QmVoYXZpb3Ioe1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBpbml0UHJvcGVydGllcyh2dWVNaXhpbi5wcm9wcywgdHJ1ZSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBiZWhhdmlvcnNcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VQcm9wVHlwZSAoa2V5LCB0eXBlLCBkZWZhdWx0VmFsdWUsIGZpbGUpIHtcclxuICAvLyBbU3RyaW5nXT0+U3RyaW5nXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkgJiYgdHlwZS5sZW5ndGggPT09IDEpIHtcclxuICAgIHJldHVybiB0eXBlWzBdXHJcbiAgfVxyXG4gIHJldHVybiB0eXBlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzIChwcm9wcywgaXNCZWhhdmlvciA9IGZhbHNlLCBmaWxlID0gJycpIHtcclxuICBjb25zdCBwcm9wZXJ0aWVzID0ge307XHJcbiAgaWYgKCFpc0JlaGF2aW9yKSB7XHJcbiAgICBwcm9wZXJ0aWVzLnZ1ZUlkID0ge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICAgIHByb3BlcnRpZXMudnVlU2xvdHMgPSB7IC8vIOWwj+eoi+W6j+S4jeiDveebtOaOpeWumuS5iSAkc2xvdHMg55qEIHByb3Bz77yM5omA5Lul6YCa6L+HIHZ1ZVNsb3RzIOi9rOaNouWIsCAkc2xvdHNcclxuICAgICAgdHlwZTogbnVsbCxcclxuICAgICAgdmFsdWU6IFtdLFxyXG4gICAgICBvYnNlcnZlcjogZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgICAgY29uc3QgJHNsb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICBuZXdWYWwuZm9yRWFjaChzbG90TmFtZSA9PiB7XHJcbiAgICAgICAgICAkc2xvdHNbc2xvdE5hbWVdID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgJHNsb3RzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkgeyAvLyBbJ3RpdGxlJ11cclxuICAgIHByb3BzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgcHJvcGVydGllc1trZXldID0ge1xyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHsgLy8ge3RpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSxjb250ZW50OlN0cmluZ31cclxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGNvbnN0IG9wdHMgPSBwcm9wc1trZXldO1xyXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChvcHRzKSkgeyAvLyB0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ31cclxuICAgICAgICBsZXQgdmFsdWUgPSBvcHRzWydkZWZhdWx0J107XHJcbiAgICAgICAgaWYgKGlzRm4odmFsdWUpKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvcHRzLnR5cGUgPSBwYXJzZVByb3BUeXBlKGtleSwgb3B0cy50eXBlKTtcclxuXHJcbiAgICAgICAgcHJvcGVydGllc1trZXldID0ge1xyXG4gICAgICAgICAgdHlwZTogUFJPUF9UWVBFUy5pbmRleE9mKG9wdHMudHlwZSkgIT09IC0xID8gb3B0cy50eXBlIDogbnVsbCxcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2UgeyAvLyBjb250ZW50OlN0cmluZ1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZVByb3BUeXBlKGtleSwgb3B0cyk7XHJcbiAgICAgICAgcHJvcGVydGllc1trZXldID0ge1xyXG4gICAgICAgICAgdHlwZTogUFJPUF9UWVBFUy5pbmRleE9mKHR5cGUpICE9PSAtMSA/IHR5cGUgOiBudWxsLFxyXG4gICAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIHByb3BlcnRpZXNcclxufVxyXG5cclxuZnVuY3Rpb24gd3JhcHBlciQyIChldmVudCkge1xyXG4gIC8vIFRPRE8g5Y+I5b6X5YW85a65IG1wdnVlIOeahCBtcCDlr7nosaFcclxuICB0cnkge1xyXG4gICAgZXZlbnQubXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XHJcbiAgfSBjYXRjaCAoZSkge31cclxuXHJcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gbm9vcDtcclxuICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IG5vb3A7XHJcblxyXG4gIGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCB7fTtcclxuXHJcbiAgaWYgKCFoYXNPd24oZXZlbnQsICdkZXRhaWwnKSkge1xyXG4gICAgZXZlbnQuZGV0YWlsID0ge307XHJcbiAgfVxyXG5cclxuICBpZiAoaXNQbGFpbk9iamVjdChldmVudC5kZXRhaWwpKSB7XHJcbiAgICBldmVudC50YXJnZXQgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC50YXJnZXQsIGV2ZW50LmRldGFpbCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnRcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXh0cmFWYWx1ZSAodm0sIGRhdGFQYXRoc0FycmF5KSB7XHJcbiAgbGV0IGNvbnRleHQgPSB2bTtcclxuICBkYXRhUGF0aHNBcnJheS5mb3JFYWNoKGRhdGFQYXRoQXJyYXkgPT4ge1xyXG4gICAgY29uc3QgZGF0YVBhdGggPSBkYXRhUGF0aEFycmF5WzBdO1xyXG4gICAgY29uc3QgdmFsdWUgPSBkYXRhUGF0aEFycmF5WzJdO1xyXG4gICAgaWYgKGRhdGFQYXRoIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gWycnLCcnLGluZGV4LCdkaXNhYmxlJ11cclxuICAgICAgY29uc3QgcHJvcFBhdGggPSBkYXRhUGF0aEFycmF5WzFdO1xyXG4gICAgICBjb25zdCB2YWx1ZVBhdGggPSBkYXRhUGF0aEFycmF5WzNdO1xyXG5cclxuICAgICAgY29uc3QgdkZvciA9IGRhdGFQYXRoID8gdm0uX19nZXRfdmFsdWUoZGF0YVBhdGgsIGNvbnRleHQpIDogY29udGV4dDtcclxuXHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZGb3IpKSB7XHJcbiAgICAgICAgY29udGV4dCA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFwcm9wUGF0aCkge1xyXG4gICAgICAgIGNvbnRleHQgPSB2Rm9yW3ZhbHVlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2Rm9yKSkge1xyXG4gICAgICAgICAgY29udGV4dCA9IHZGb3IuZmluZCh2Rm9ySXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB2bS5fX2dldF92YWx1ZShwcm9wUGF0aCwgdkZvckl0ZW0pID09PSB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZGb3IpKSB7XHJcbiAgICAgICAgICBjb250ZXh0ID0gT2JqZWN0LmtleXModkZvcikuZmluZCh2Rm9yS2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZtLl9fZ2V0X3ZhbHVlKHByb3BQYXRoLCB2Rm9yW3ZGb3JLZXldKSA9PT0gdmFsdWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd2LWZvciDmmoLkuI3mlK/mjIHlvqrnjq/mlbDmja7vvJonLCB2Rm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZVBhdGgpIHtcclxuICAgICAgICBjb250ZXh0ID0gdm0uX19nZXRfdmFsdWUodmFsdWVQYXRoLCBjb250ZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiBjb250ZXh0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NFdmVudEV4dHJhICh2bSwgZXh0cmEsIGV2ZW50KSB7XHJcbiAgY29uc3QgZXh0cmFPYmogPSB7fTtcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXh0cmEpICYmIGV4dHJhLmxlbmd0aCkge1xyXG4gICAgLyoqXHJcbiAgICAgKltcclxuICAgICAqICAgIFsnZGF0YS5pdGVtcycsICdkYXRhLmlkJywgaXRlbS5kYXRhLmlkXSxcclxuICAgICAqICAgIFsnbWV0YXMnLCAnaWQnLCBtZXRhLmlkXVxyXG4gICAgICpdLFxyXG4gICAgICpbXHJcbiAgICAgKiAgICBbJ2RhdGEuaXRlbXMnLCAnZGF0YS5pZCcsIGl0ZW0uZGF0YS5pZF0sXHJcbiAgICAgKiAgICBbJ21ldGFzJywgJ2lkJywgbWV0YS5pZF1cclxuICAgICAqXSxcclxuICAgICAqJ3Rlc3QnXHJcbiAgICAgKi9cclxuICAgIGV4dHJhLmZvckVhY2goKGRhdGFQYXRoLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRhdGFQYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICghZGF0YVBhdGgpIHsgLy8gbW9kZWwscHJvcC5zeW5jXHJcbiAgICAgICAgICBleHRyYU9ialsnJCcgKyBpbmRleF0gPSB2bTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGRhdGFQYXRoID09PSAnJGV2ZW50JykgeyAvLyAkZXZlbnRcclxuICAgICAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gZXZlbnQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoLmluZGV4T2YoJyRldmVudC4nKSA9PT0gMCkgeyAvLyAkZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IHZtLl9fZ2V0X3ZhbHVlKGRhdGFQYXRoLnJlcGxhY2UoJyRldmVudC4nLCAnJyksIGV2ZW50KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IHZtLl9fZ2V0X3ZhbHVlKGRhdGFQYXRoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gZ2V0RXh0cmFWYWx1ZSh2bSwgZGF0YVBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBleHRyYU9ialxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPYmpCeUFycmF5IChhcnIpIHtcclxuICBjb25zdCBvYmogPSB7fTtcclxuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGFycltpXTtcclxuICAgIG9ialtlbGVtZW50WzBdXSA9IGVsZW1lbnRbMV07XHJcbiAgfVxyXG4gIHJldHVybiBvYmpcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0V2ZW50QXJncyAodm0sIGV2ZW50LCBhcmdzID0gW10sIGV4dHJhID0gW10sIGlzQ3VzdG9tLCBtZXRob2ROYW1lKSB7XHJcbiAgbGV0IGlzQ3VzdG9tTVBFdmVudCA9IGZhbHNlOyAvLyB3eGNvbXBvbmVudCDnu4Tku7bvvIzkvKDpgJLljp/lp4sgZXZlbnQg5a+56LGhXHJcbiAgaWYgKGlzQ3VzdG9tKSB7IC8vIOiHquWumuS5ieS6i+S7tlxyXG4gICAgaXNDdXN0b21NUEV2ZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCAmJlxyXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQgJiZcclxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNvbVR5cGUgPT09ICd3eCc7XHJcbiAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7IC8vIOaXoOWPguaVsO+8jOebtOaOpeS8oOWFpSBldmVudCDmiJYgZGV0YWlsIOaVsOe7hFxyXG4gICAgICBpZiAoaXNDdXN0b21NUEV2ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIFtldmVudF1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXZlbnQuZGV0YWlsLl9fYXJnc19fIHx8IGV2ZW50LmRldGFpbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZXh0cmFPYmogPSBwcm9jZXNzRXZlbnRFeHRyYSh2bSwgZXh0cmEsIGV2ZW50KTtcclxuXHJcbiAgY29uc3QgcmV0ID0gW107XHJcbiAgYXJncy5mb3JFYWNoKGFyZyA9PiB7XHJcbiAgICBpZiAoYXJnID09PSAnJGV2ZW50Jykge1xyXG4gICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ19fc2V0X21vZGVsJyAmJiAhaXNDdXN0b20pIHsgLy8gaW5wdXQgdi1tb2RlbCB2YWx1ZVxyXG4gICAgICAgIHJldC5wdXNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzQ3VzdG9tICYmICFpc0N1c3RvbU1QRXZlbnQpIHtcclxuICAgICAgICAgIHJldC5wdXNoKGV2ZW50LmRldGFpbC5fX2FyZ3NfX1swXSk7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gd3hjb21wb25lbnQg57uE5Lu25oiW5YaF572u57uE5Lu2XHJcbiAgICAgICAgICByZXQucHVzaChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpICYmIGFyZ1swXSA9PT0gJ28nKSB7XHJcbiAgICAgICAgcmV0LnB1c2goZ2V0T2JqQnlBcnJheShhcmcpKTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyAmJiBoYXNPd24oZXh0cmFPYmosIGFyZykpIHtcclxuICAgICAgICByZXQucHVzaChleHRyYU9ialthcmddKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXQucHVzaChhcmcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZXRcclxufVxyXG5cclxuY29uc3QgT05DRSA9ICd+JztcclxuY29uc3QgQ1VTVE9NID0gJ14nO1xyXG5cclxuZnVuY3Rpb24gaXNNYXRjaEV2ZW50VHlwZSAoZXZlbnRUeXBlLCBvcHRUeXBlKSB7XHJcbiAgcmV0dXJuIChldmVudFR5cGUgPT09IG9wdFR5cGUpIHx8XHJcbiAgICAoXHJcbiAgICAgIG9wdFR5cGUgPT09ICdyZWdpb25jaGFuZ2UnICYmXHJcbiAgICAgIChcclxuICAgICAgICBldmVudFR5cGUgPT09ICdiZWdpbicgfHxcclxuICAgICAgICBldmVudFR5cGUgPT09ICdlbmQnXHJcbiAgICAgIClcclxuICAgIClcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlRXZlbnQgKGV2ZW50KSB7XHJcbiAgZXZlbnQgPSB3cmFwcGVyJDIoZXZlbnQpO1xyXG5cclxuICAvLyBbWyd0YXAnLFtbJ2hhbmRsZScsWzEsMixhXV0sWydoYW5kbGUxJyxbMSwyLGFdXV1dXVxyXG4gIGNvbnN0IGRhdGFzZXQgPSAoZXZlbnQuY3VycmVudFRhcmdldCB8fCBldmVudC50YXJnZXQpLmRhdGFzZXQ7XHJcbiAgaWYgKCFkYXRhc2V0KSB7XHJcbiAgICByZXR1cm4gY29uc29sZS53YXJuKGDkuovku7bkv6Hmga/kuI3lrZjlnKhgKVxyXG4gIH1cclxuICBjb25zdCBldmVudE9wdHMgPSBkYXRhc2V0LmV2ZW50T3B0cyB8fCBkYXRhc2V0WydldmVudC1vcHRzJ107IC8vIOaUr+S7mOWunSB3ZWItdmlldyDnu4Tku7YgZGF0YXNldCDpnZ7pqbzls7BcclxuICBpZiAoIWV2ZW50T3B0cykge1xyXG4gICAgcmV0dXJuIGNvbnNvbGUud2Fybihg5LqL5Lu25L+h5oGv5LiN5a2Y5ZyoYClcclxuICB9XHJcblxyXG4gIC8vIFtbJ2hhbmRsZScsWzEsMixhXV0sWydoYW5kbGUxJyxbMSwyLGFdXV1cclxuICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICBjb25zdCByZXQgPSBbXTtcclxuXHJcbiAgZXZlbnRPcHRzLmZvckVhY2goZXZlbnRPcHQgPT4ge1xyXG4gICAgbGV0IHR5cGUgPSBldmVudE9wdFswXTtcclxuICAgIGNvbnN0IGV2ZW50c0FycmF5ID0gZXZlbnRPcHRbMV07XHJcblxyXG4gICAgY29uc3QgaXNDdXN0b20gPSB0eXBlLmNoYXJBdCgwKSA9PT0gQ1VTVE9NO1xyXG4gICAgdHlwZSA9IGlzQ3VzdG9tID8gdHlwZS5zbGljZSgxKSA6IHR5cGU7XHJcbiAgICBjb25zdCBpc09uY2UgPSB0eXBlLmNoYXJBdCgwKSA9PT0gT05DRTtcclxuICAgIHR5cGUgPSBpc09uY2UgPyB0eXBlLnNsaWNlKDEpIDogdHlwZTtcclxuXHJcbiAgICBpZiAoZXZlbnRzQXJyYXkgJiYgaXNNYXRjaEV2ZW50VHlwZShldmVudFR5cGUsIHR5cGUpKSB7XHJcbiAgICAgIGV2ZW50c0FycmF5LmZvckVhY2goZXZlbnRBcnJheSA9PiB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGV2ZW50QXJyYXlbMF07XHJcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUpIHtcclxuICAgICAgICAgIGxldCBoYW5kbGVyQ3R4ID0gdGhpcy4kdm07XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGhhbmRsZXJDdHguJG9wdGlvbnMuZ2VuZXJpYyAmJlxyXG4gICAgICAgICAgICBoYW5kbGVyQ3R4LiRwYXJlbnQgJiZcclxuICAgICAgICAgICAgaGFuZGxlckN0eC4kcGFyZW50LiRwYXJlbnRcclxuICAgICAgICAgICkgeyAvLyBtcC13ZWl4aW4sbXAtdG91dGlhbyDmir3osaHoioLngrnmqKHmi58gc2NvcGVkIHNsb3RzXHJcbiAgICAgICAgICAgIGhhbmRsZXJDdHggPSBoYW5kbGVyQ3R4LiRwYXJlbnQuJHBhcmVudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyQ3R4W21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgaWYgKCFpc0ZuKGhhbmRsZXIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgIF92bS4ke21ldGhvZE5hbWV9IGlzIG5vdCBhIGZ1bmN0aW9uYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpc09uY2UpIHtcclxuICAgICAgICAgICAgaWYgKGhhbmRsZXIub25jZSkge1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGhhbmRsZXIub25jZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXQucHVzaChoYW5kbGVyLmFwcGx5KGhhbmRsZXJDdHgsIHByb2Nlc3NFdmVudEFyZ3MoXHJcbiAgICAgICAgICAgIHRoaXMuJHZtLFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgZXZlbnRBcnJheVsxXSxcclxuICAgICAgICAgICAgZXZlbnRBcnJheVsyXSxcclxuICAgICAgICAgICAgaXNDdXN0b20sXHJcbiAgICAgICAgICAgIG1ldGhvZE5hbWVcclxuICAgICAgICAgICkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoXHJcbiAgICBldmVudFR5cGUgPT09ICdpbnB1dCcgJiZcclxuICAgIHJldC5sZW5ndGggPT09IDEgJiZcclxuICAgIHR5cGVvZiByZXRbMF0gIT09ICd1bmRlZmluZWQnXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gcmV0WzBdXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBob29rcyA9IFtcclxuICAnb25TaG93JyxcclxuICAnb25IaWRlJyxcclxuICAnb25FcnJvcicsXHJcbiAgJ29uUGFnZU5vdEZvdW5kJ1xyXG5dO1xyXG5cclxuZnVuY3Rpb24gcGFyc2VCYXNlQXBwICh2bSwge1xyXG4gIG1vY2tzLFxyXG4gIGluaXRSZWZzXHJcbn0pIHtcclxuICBpZiAodm0uJG9wdGlvbnMuc3RvcmUpIHtcclxuICAgIFZ1ZS5wcm90b3R5cGUuJHN0b3JlID0gdm0uJG9wdGlvbnMuc3RvcmU7XHJcbiAgfVxyXG5cclxuICBWdWUucHJvdG90eXBlLm1wSG9zdCA9IFwiYXBwLXBsdXNcIjtcclxuXHJcbiAgVnVlLm1peGluKHtcclxuICAgIGJlZm9yZUNyZWF0ZSAoKSB7XHJcbiAgICAgIGlmICghdGhpcy4kb3B0aW9ucy5tcFR5cGUpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5tcFR5cGUgPSB0aGlzLiRvcHRpb25zLm1wVHlwZTtcclxuXHJcbiAgICAgIHRoaXMuJG1wID0ge1xyXG4gICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgIFt0aGlzLm1wVHlwZV06IHRoaXMuJG9wdGlvbnMubXBJbnN0YW5jZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy4kc2NvcGUgPSB0aGlzLiRvcHRpb25zLm1wSW5zdGFuY2U7XHJcblxyXG4gICAgICBkZWxldGUgdGhpcy4kb3B0aW9ucy5tcFR5cGU7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLiRvcHRpb25zLm1wSW5zdGFuY2U7XHJcblxyXG4gICAgICBpZiAodGhpcy5tcFR5cGUgIT09ICdhcHAnKSB7XHJcbiAgICAgICAgaW5pdFJlZnModGhpcyk7XHJcbiAgICAgICAgaW5pdE1vY2tzKHRoaXMsIG1vY2tzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBjb25zdCBhcHBPcHRpb25zID0ge1xyXG4gICAgb25MYXVuY2ggKGFyZ3MpIHtcclxuICAgICAgaWYgKHRoaXMuJHZtKSB7IC8vIOW3sue7j+WIneWni+WMlui/h+S6hu+8jOS4u+imgeaYr+S4uuS6hueZvuW6pu+8jOeZvuW6piBvblNob3cg5ZyoIG9uTGF1bmNoIOS5i+WJjVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLiR2bSA9IHZtO1xyXG5cclxuICAgICAgdGhpcy4kdm0uJG1wID0ge1xyXG4gICAgICAgIGFwcDogdGhpc1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy4kdm0uJHNjb3BlID0gdGhpcztcclxuICAgICAgLy8gdm0g5LiK5Lmf5oyC6L29IGdsb2JhbERhdGFcclxuICAgICAgdGhpcy4kdm0uZ2xvYmFsRGF0YSA9IHRoaXMuZ2xvYmFsRGF0YTtcclxuXHJcbiAgICAgIHRoaXMuJHZtLl9pc01vdW50ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLiR2bS5fX2NhbGxfaG9vaygnbW91bnRlZCcsIGFyZ3MpO1xyXG5cclxuICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uTGF1bmNoJywgYXJncyk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8g5YW85a655pen54mI5pysIGdsb2JhbERhdGFcclxuICBhcHBPcHRpb25zLmdsb2JhbERhdGEgPSB2bS4kb3B0aW9ucy5nbG9iYWxEYXRhIHx8IHt9O1xyXG5cclxuICBpbml0SG9va3MoYXBwT3B0aW9ucywgaG9va3MpO1xyXG5cclxuICByZXR1cm4gYXBwT3B0aW9uc1xyXG59XHJcblxyXG5jb25zdCBtb2NrcyA9IFsnX19yb3V0ZV9fJywgJ19fd3hFeHBhcnNlck5vZGVJZF9fJywgJ19fd3hXZWJ2aWV3SWRfXyddO1xyXG5cclxuZnVuY3Rpb24gZmluZFZtQnlWdWVJZCAodm0sIHZ1ZVBpZCkge1xyXG4gIGNvbnN0ICRjaGlsZHJlbiA9IHZtLiRjaGlsZHJlbjtcclxuICAvLyDkvJjlhYjmn6Xmib7nm7TlsZ5cclxuICBsZXQgcGFyZW50Vm0gPSAkY2hpbGRyZW4uZmluZChjaGlsZFZtID0+IGNoaWxkVm0uJHNjb3BlLl8kdnVlSWQgPT09IHZ1ZVBpZCk7XHJcbiAgaWYgKHBhcmVudFZtKSB7XHJcbiAgICByZXR1cm4gcGFyZW50Vm1cclxuICB9XHJcbiAgLy8g5Y+N5ZCR6YCS5b2S5p+l5om+XHJcbiAgZm9yIChsZXQgaSA9ICRjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgcGFyZW50Vm0gPSBmaW5kVm1CeVZ1ZUlkKCRjaGlsZHJlbltpXSwgdnVlUGlkKTtcclxuICAgIGlmIChwYXJlbnRWbSkge1xyXG4gICAgICByZXR1cm4gcGFyZW50Vm1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRCZWhhdmlvciAob3B0aW9ucykge1xyXG4gIHJldHVybiBCZWhhdmlvcihvcHRpb25zKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BhZ2UgKCkge1xyXG4gIHJldHVybiAhIXRoaXMucm91dGVcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFJlbGF0aW9uIChkZXRhaWwpIHtcclxuICB0aGlzLnRyaWdnZXJFdmVudCgnX19sJywgZGV0YWlsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFJlZnMgKHZtKSB7XHJcbiAgY29uc3QgbXBJbnN0YW5jZSA9IHZtLiRzY29wZTtcclxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodm0sICckcmVmcycsIHtcclxuICAgIGdldCAoKSB7XHJcbiAgICAgIGNvbnN0ICRyZWZzID0ge307XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBtcEluc3RhbmNlLnNlbGVjdEFsbENvbXBvbmVudHMoJy52dWUtcmVmJyk7XHJcbiAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlZiA9IGNvbXBvbmVudC5kYXRhc2V0LnJlZjtcclxuICAgICAgICAkcmVmc1tyZWZdID0gY29tcG9uZW50LiR2bSB8fCBjb21wb25lbnQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmb3JDb21wb25lbnRzID0gbXBJbnN0YW5jZS5zZWxlY3RBbGxDb21wb25lbnRzKCcudnVlLXJlZi1pbi1mb3InKTtcclxuICAgICAgZm9yQ29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmID0gY29tcG9uZW50LmRhdGFzZXQucmVmO1xyXG4gICAgICAgIGlmICghJHJlZnNbcmVmXSkge1xyXG4gICAgICAgICAgJHJlZnNbcmVmXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkcmVmc1tyZWZdLnB1c2goY29tcG9uZW50LiR2bSB8fCBjb21wb25lbnQpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuICRyZWZzXHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUxpbmsgKGV2ZW50KSB7XHJcbiAgY29uc3Qge1xyXG4gICAgdnVlUGlkLFxyXG4gICAgdnVlT3B0aW9uc1xyXG4gIH0gPSBldmVudC5kZXRhaWwgfHwgZXZlbnQudmFsdWU7IC8vIGRldGFpbCDmmK/lvq7kv6EsdmFsdWUg5piv55m+5bqmKGRpcGF0Y2gpXHJcblxyXG4gIGxldCBwYXJlbnRWbTtcclxuXHJcbiAgaWYgKHZ1ZVBpZCkge1xyXG4gICAgcGFyZW50Vm0gPSBmaW5kVm1CeVZ1ZUlkKHRoaXMuJHZtLCB2dWVQaWQpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFwYXJlbnRWbSkge1xyXG4gICAgcGFyZW50Vm0gPSB0aGlzLiR2bTtcclxuICB9XHJcblxyXG4gIHZ1ZU9wdGlvbnMucGFyZW50ID0gcGFyZW50Vm07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQXBwICh2bSkge1xyXG4gIHJldHVybiBwYXJzZUJhc2VBcHAodm0sIHtcclxuICAgIG1vY2tzLFxyXG4gICAgaW5pdFJlZnNcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBob29rcyQxID0gW1xyXG4gICdvblVuaU5WaWV3TWVzc2FnZSdcclxuXTtcclxuXHJcbmZ1bmN0aW9uIHBhcnNlQXBwJDEgKHZtKSB7XHJcbiAgY29uc3QgYXBwT3B0aW9ucyA9IHBhcnNlQXBwKHZtKTtcclxuXHJcbiAgaW5pdEhvb2tzKGFwcE9wdGlvbnMsIGhvb2tzJDEpO1xyXG5cclxuICByZXR1cm4gYXBwT3B0aW9uc1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBcHAgKHZtKSB7XHJcbiAgQXBwKHBhcnNlQXBwJDEodm0pKTtcclxuICByZXR1cm4gdm1cclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VCYXNlQ29tcG9uZW50ICh2dWVDb21wb25lbnRPcHRpb25zLCB7XHJcbiAgaXNQYWdlLFxyXG4gIGluaXRSZWxhdGlvblxyXG59ID0ge30pIHtcclxuICBsZXQgW1Z1ZUNvbXBvbmVudCwgdnVlT3B0aW9uc10gPSBpbml0VnVlQ29tcG9uZW50KFZ1ZSwgdnVlQ29tcG9uZW50T3B0aW9ucyk7XHJcblxyXG4gIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICBtdWx0aXBsZVNsb3RzOiB0cnVlLFxyXG4gICAgYWRkR2xvYmFsQ2xhc3M6IHRydWVcclxuICB9O1xyXG5cclxuICBjb25zdCBjb21wb25lbnRPcHRpb25zID0ge1xyXG4gICAgb3B0aW9ucyxcclxuICAgIGRhdGE6IGluaXREYXRhKHZ1ZU9wdGlvbnMsIFZ1ZS5wcm90b3R5cGUpLFxyXG4gICAgYmVoYXZpb3JzOiBpbml0QmVoYXZpb3JzKHZ1ZU9wdGlvbnMsIGluaXRCZWhhdmlvciksXHJcbiAgICBwcm9wZXJ0aWVzOiBpbml0UHJvcGVydGllcyh2dWVPcHRpb25zLnByb3BzLCBmYWxzZSwgdnVlT3B0aW9ucy5fX2ZpbGUpLFxyXG4gICAgbGlmZXRpbWVzOiB7XHJcbiAgICAgIGF0dGFjaGVkICgpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xyXG5cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgbXBUeXBlOiBpc1BhZ2UuY2FsbCh0aGlzKSA/ICdwYWdlJyA6ICdjb21wb25lbnQnLFxyXG4gICAgICAgICAgbXBJbnN0YW5jZTogdGhpcyxcclxuICAgICAgICAgIHByb3BzRGF0YTogcHJvcGVydGllc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGluaXRWdWVJZHMocHJvcGVydGllcy52dWVJZCwgdGhpcyk7XHJcblxyXG4gICAgICAgIC8vIOWkhOeQhueItuWtkOWFs+ezu1xyXG4gICAgICAgIGluaXRSZWxhdGlvbi5jYWxsKHRoaXMsIHtcclxuICAgICAgICAgIHZ1ZVBpZDogdGhpcy5fJHZ1ZVBpZCxcclxuICAgICAgICAgIHZ1ZU9wdGlvbnM6IG9wdGlvbnNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g5Yid5aeL5YyWIHZ1ZSDlrp7kvotcclxuICAgICAgICB0aGlzLiR2bSA9IG5ldyBWdWVDb21wb25lbnQob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vIOWkhOeQhiRzbG90cywkc2NvcGVkU2xvdHPvvIjmmoLkuI3mlK/mjIHliqjmgIHlj5jljJYkc2xvdHPvvIlcclxuICAgICAgICBpbml0U2xvdHModGhpcy4kdm0sIHByb3BlcnRpZXMudnVlU2xvdHMpO1xyXG5cclxuICAgICAgICAvLyDop6blj5HpppbmrKEgc2V0RGF0YVxyXG4gICAgICAgIHRoaXMuJHZtLiRtb3VudCgpO1xyXG4gICAgICB9LFxyXG4gICAgICByZWFkeSAoKSB7XHJcbiAgICAgICAgLy8g5b2T57uE5Lu2IHByb3BzIOm7mOiupOWAvOS4uiB0cnVl77yM5Yid5aeL5YyW5pe25Lyg5YWlIGZhbHNlIOS8muWvvOiHtCBjcmVhdGVkLHJlYWR5IOinpuWPkSwg5L2GIGF0dGFjaGVkIOS4jeinpuWPkVxyXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy53ZWl4aW4ucXEuY29tL2NvbW11bml0eS9kZXZlbG9wL2RvYy8wMDA2NmFlMjg0NGNjMGY4ZWI4ODNlMmE1NTc4MDBcclxuICAgICAgICBpZiAodGhpcy4kdm0pIHtcclxuICAgICAgICAgIHRoaXMuJHZtLl9pc01vdW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ21vdW50ZWQnKTtcclxuICAgICAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdvblJlYWR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBkZXRhY2hlZCAoKSB7XHJcbiAgICAgICAgdGhpcy4kdm0uJGRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHBhZ2VMaWZldGltZXM6IHtcclxuICAgICAgc2hvdyAoYXJncykge1xyXG4gICAgICAgIHRoaXMuJHZtICYmIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdvblBhZ2VTaG93JywgYXJncyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGhpZGUgKCkge1xyXG4gICAgICAgIHRoaXMuJHZtICYmIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdvblBhZ2VIaWRlJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc2l6ZSAoc2l6ZSkge1xyXG4gICAgICAgIHRoaXMuJHZtICYmIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdvblBhZ2VSZXNpemUnLCBzaXplKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgX19sOiBoYW5kbGVMaW5rLFxyXG4gICAgICBfX2U6IGhhbmRsZUV2ZW50XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodnVlT3B0aW9ucy53eHNDYWxsTWV0aG9kcykpIHtcclxuICAgIHZ1ZU9wdGlvbnMud3hzQ2FsbE1ldGhvZHMuZm9yRWFjaChjYWxsTWV0aG9kID0+IHtcclxuICAgICAgY29tcG9uZW50T3B0aW9ucy5tZXRob2RzW2NhbGxNZXRob2RdID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdm1bY2FsbE1ldGhvZF0oYXJncylcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzUGFnZSkge1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudE9wdGlvbnNcclxuICB9XHJcbiAgcmV0dXJuIFtjb21wb25lbnRPcHRpb25zLCBWdWVDb21wb25lbnRdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ29tcG9uZW50ICh2dWVDb21wb25lbnRPcHRpb25zKSB7XHJcbiAgcmV0dXJuIHBhcnNlQmFzZUNvbXBvbmVudCh2dWVDb21wb25lbnRPcHRpb25zLCB7XHJcbiAgICBpc1BhZ2UsXHJcbiAgICBpbml0UmVsYXRpb25cclxuICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNvbXBvbmVudCQxICh2dWVDb21wb25lbnRPcHRpb25zKSB7XHJcbiAgY29uc3QgY29tcG9uZW50T3B0aW9ucyA9IHBhcnNlQ29tcG9uZW50KHZ1ZUNvbXBvbmVudE9wdGlvbnMpO1xyXG5cclxuICBjb21wb25lbnRPcHRpb25zLm1ldGhvZHMuJGdldEFwcFdlYnZpZXcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gcGx1cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGAke3RoaXMuX193eFdlYnZpZXdJZF9ffWApXHJcbiAgfTtcclxuICByZXR1cm4gY29tcG9uZW50T3B0aW9uc1xyXG59XHJcblxyXG5jb25zdCBob29rcyQyID0gW1xyXG4gICdvblNob3cnLFxyXG4gICdvbkhpZGUnLFxyXG4gICdvblVubG9hZCdcclxuXTtcclxuXHJcbmhvb2tzJDIucHVzaCguLi5QQUdFX0VWRU5UX0hPT0tTKTtcclxuXHJcbmZ1bmN0aW9uIHBhcnNlQmFzZVBhZ2UgKHZ1ZVBhZ2VPcHRpb25zLCB7XHJcbiAgaXNQYWdlLFxyXG4gIGluaXRSZWxhdGlvblxyXG59KSB7XHJcbiAgY29uc3QgcGFnZU9wdGlvbnMgPSBwYXJzZUNvbXBvbmVudCQxKHZ1ZVBhZ2VPcHRpb25zKTtcclxuXHJcbiAgaW5pdEhvb2tzKHBhZ2VPcHRpb25zLm1ldGhvZHMsIGhvb2tzJDIsIHZ1ZVBhZ2VPcHRpb25zKTtcclxuXHJcbiAgcGFnZU9wdGlvbnMubWV0aG9kcy5vbkxvYWQgPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgdGhpcy4kdm0uJG1wLnF1ZXJ5ID0gYXJnczsgLy8g5YW85a65IG1wdnVlXHJcbiAgICB0aGlzLiR2bS5fX2NhbGxfaG9vaygnb25Mb2FkJywgYXJncyk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIHBhZ2VPcHRpb25zXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlUGFnZSAodnVlUGFnZU9wdGlvbnMpIHtcclxuICByZXR1cm4gcGFyc2VCYXNlUGFnZSh2dWVQYWdlT3B0aW9ucywge1xyXG4gICAgaXNQYWdlLFxyXG4gICAgaW5pdFJlbGF0aW9uXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgaG9va3MkMyA9IFtcclxuICAnb25CYWNrUHJlc3MnLFxyXG4gICdvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAnLFxyXG4gICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQnLFxyXG4gICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENvbmZpcm1lZCcsXHJcbiAgJ29uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2xpY2tlZCdcclxuXTtcclxuXHJcbmZ1bmN0aW9uIHBhcnNlUGFnZSQxICh2dWVQYWdlT3B0aW9ucykge1xyXG4gIGNvbnN0IHBhZ2VPcHRpb25zID0gcGFyc2VQYWdlKHZ1ZVBhZ2VPcHRpb25zKTtcclxuXHJcbiAgaW5pdEhvb2tzKHBhZ2VPcHRpb25zLm1ldGhvZHMsIGhvb2tzJDMpO1xyXG5cclxuICByZXR1cm4gcGFnZU9wdGlvbnNcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlUGFnZSAodnVlUGFnZU9wdGlvbnMpIHtcclxuICB7XHJcbiAgICByZXR1cm4gQ29tcG9uZW50KHBhcnNlUGFnZSQxKHZ1ZVBhZ2VPcHRpb25zKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodnVlT3B0aW9ucykge1xyXG4gIHtcclxuICAgIHJldHVybiBDb21wb25lbnQocGFyc2VDb21wb25lbnQkMSh2dWVPcHRpb25zKSlcclxuICB9XHJcbn1cclxuXHJcbnRvZG9zLmZvckVhY2godG9kb0FwaSA9PiB7XHJcbiAgcHJvdG9jb2xzW3RvZG9BcGldID0gZmFsc2U7XHJcbn0pO1xyXG5cclxuY2FuSVVzZXMuZm9yRWFjaChjYW5JVXNlQXBpID0+IHtcclxuICBjb25zdCBhcGlOYW1lID0gcHJvdG9jb2xzW2NhbklVc2VBcGldICYmIHByb3RvY29sc1tjYW5JVXNlQXBpXS5uYW1lID8gcHJvdG9jb2xzW2NhbklVc2VBcGldLm5hbWVcclxuICAgIDogY2FuSVVzZUFwaTtcclxuICBpZiAoIXd4LmNhbklVc2UoYXBpTmFtZSkpIHtcclxuICAgIHByb3RvY29sc1tjYW5JVXNlQXBpXSA9IGZhbHNlO1xyXG4gIH1cclxufSk7XHJcblxyXG5sZXQgdW5pID0ge307XHJcblxyXG5pZiAodHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBcImFwcC1wbHVzXCIgIT09ICdhcHAtcGx1cycpIHtcclxuICB1bmkgPSBuZXcgUHJveHkoe30sIHtcclxuICAgIGdldCAodGFyZ2V0LCBuYW1lKSB7XHJcbiAgICAgIGlmICh0YXJnZXRbbmFtZV0pIHtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0W25hbWVdXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJhc2VBcGlbbmFtZV0pIHtcclxuICAgICAgICByZXR1cm4gYmFzZUFwaVtuYW1lXVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChhcGlbbmFtZV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5KG5hbWUsIGFwaVtuYW1lXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXZlbnRBcGlbbmFtZV0pIHtcclxuICAgICAgICByZXR1cm4gZXZlbnRBcGlbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhc093bih3eCwgbmFtZSkgJiYgIWhhc093bihwcm90b2NvbHMsIG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByb21pc2lmeShuYW1lLCB3cmFwcGVyKG5hbWUsIHd4W25hbWVdKSlcclxuICAgIH0sXHJcbiAgICBzZXQgKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfSk7XHJcbn0gZWxzZSB7XHJcbiAgT2JqZWN0LmtleXMoYmFzZUFwaSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIHVuaVtuYW1lXSA9IGJhc2VBcGlbbmFtZV07XHJcbiAgfSk7XHJcblxyXG4gIE9iamVjdC5rZXlzKGV2ZW50QXBpKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgdW5pW25hbWVdID0gZXZlbnRBcGlbbmFtZV07XHJcbiAgfSk7XHJcblxyXG4gIE9iamVjdC5rZXlzKGFwaSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIHVuaVtuYW1lXSA9IHByb21pc2lmeShuYW1lLCBhcGlbbmFtZV0pO1xyXG4gIH0pO1xyXG5cclxuICBPYmplY3Qua2V5cyh3eCkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmIChoYXNPd24od3gsIG5hbWUpIHx8IGhhc093bihwcm90b2NvbHMsIG5hbWUpKSB7XHJcbiAgICAgIHVuaVtuYW1lXSA9IHByb21pc2lmeShuYW1lLCB3cmFwcGVyKG5hbWUsIHd4W25hbWVdKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbntcclxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGdsb2JhbC51bmkgPSB1bmk7XHJcbiAgICBnbG9iYWwuVW5pRW1pdHRlciA9IGV2ZW50QXBpO1xyXG4gIH1cclxufVxyXG5cclxud3guY3JlYXRlQXBwID0gY3JlYXRlQXBwO1xyXG53eC5jcmVhdGVQYWdlID0gY3JlYXRlUGFnZTtcclxud3guY3JlYXRlQ29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50O1xyXG5cclxudmFyIHVuaSQxID0gdW5pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdW5pJDE7XHJcbmV4cG9ydCB7IGNyZWF0ZUFwcCwgY3JlYXRlQ29tcG9uZW50LCBjcmVhdGVQYWdlIH07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n");
- /***/ }),
- /* 2 */
- /*!***********************************!*\
- !*** (webpack)/buildin/global.js ***!
- \***********************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n");
- /***/ }),
- /* 3 */
- /*!******************************************************************************************!*\
- !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***!
- \******************************************************************************************/
- /*! exports provided: default */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"development\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"development\" !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (true) {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n {\n if(vm.$scope && vm.$scope.is){\n return vm.$scope.is\n }\n }\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.SharedObject.target) {\n Dep.SharedObject.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if ( true && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\n// fixed by xxxxxx (nvue shared vuex)\n/* eslint-disable no-undef */\nDep.SharedObject = typeof SharedObject !== 'undefined' ? SharedObject : {};\nDep.SharedObject.target = null;\nDep.SharedObject.targetStack = [];\n\nfunction pushTarget (target) {\n Dep.SharedObject.targetStack.push(target);\n Dep.SharedObject.target = target;\n}\n\nfunction popTarget () {\n Dep.SharedObject.targetStack.pop();\n Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑\n if(value.push !== value.__proto__.push){\n copyAugment(value, arrayMethods, arrayKeys);\n } else {\n protoAugment(value, arrayMethods);\n }\n }\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.SharedObject.target) { // fixed by xxxxxx\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if ( true && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if ( true &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n true && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if ( true &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n true && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (true) {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n true && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n true && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (true) {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && \"development\" !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (true) {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (true) {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (true) {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (true) {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if ( true && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n true\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if ( true && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (true) {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Techinically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (true) {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (true) {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n true && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (true) {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (true) {\n defineReactive$$1(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n } else {}\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject)\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // #6574 in case the inject object is observed...\n if (key === '__ob__') { continue }\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else if (true) {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n if (!children || !children.length) {\n return {}\n }\n var slots = {};\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page\n if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){\n (slots['page'] || (slots['page'] = [])).push(child);\n }else{\n (slots.default || (slots.default = [])).push(child);\n }\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/* */\n\nfunction normalizeScopedSlots (\n slots,\n normalSlots,\n prevSlots\n) {\n var res;\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\n var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n var key = slots && slots.$key;\n if (!slots) {\n res = {};\n } else if (slots._normalized) {\n // fast path 1: child component re-render only, parent did not change\n return slots._normalized\n } else if (\n isStable &&\n prevSlots &&\n prevSlots !== emptyObject &&\n key === prevSlots.$key &&\n !hasNormalSlots &&\n !prevSlots.$hasNormal\n ) {\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\n // only need to normalize once\n return prevSlots\n } else {\n res = {};\n for (var key$1 in slots) {\n if (slots[key$1] && key$1[0] !== '$') {\n res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n }\n }\n }\n // expose normal slots on scopedSlots\n for (var key$2 in normalSlots) {\n if (!(key$2 in res)) {\n res[key$2] = proxyNormalSlot(normalSlots, key$2);\n }\n }\n // avoriaz seems to mock a non-extensible $scopedSlots object\n // and when that is passed down this would cause an error\n if (slots && Object.isExtensible(slots)) {\n (slots)._normalized = res;\n }\n def(res, '$stable', isStable);\n def(res, '$key', key);\n def(res, '$hasNormal', hasNormalSlots);\n return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n var normalized = function () {\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\n res = res && typeof res === 'object' && !Array.isArray(res)\n ? [res] // single vnode\n : normalizeChildren(res);\n return res && (\n res.length === 0 ||\n (res.length === 1 && res[0].isComment) // #9658\n ) ? undefined\n : res\n };\n // this is a slot using the new v-slot syntax without scope. although it is\n // compiled as a scoped slot, render fn users would expect it to be present\n // on this.$slots because the usage is semantically a normal slot.\n if (fn.proxy) {\n Object.defineProperty(normalSlots, key, {\n get: normalized,\n enumerable: true,\n configurable: true\n });\n }\n return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n return function () { return slots[key]; }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n if (hasSymbol && val[Symbol.iterator]) {\n ret = [];\n var iterator = val[Symbol.iterator]();\n var result = iterator.next();\n while (!result.done) {\n ret.push(render(result.value, ret.length));\n result = iterator.next();\n }\n } else {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n }\n if (!isDef(ret)) {\n ret = [];\n }\n (ret)._isVList = true;\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if ( true && !isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || fallback;\n } else {\n nodes = this.$slots[name] || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n true && warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n var camelizedKey = camelize(key);\n var hyphenatedKey = hyphenate(key);\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n true && warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res,\n // the following are added in 2.6\n hasDynamicKeys,\n contentHashKey\n) {\n res = res || { $stable: !hasDynamicKeys };\n for (var i = 0; i < fns.length; i++) {\n var slot = fns[i];\n if (Array.isArray(slot)) {\n resolveScopedSlots(slot, res, hasDynamicKeys);\n } else if (slot) {\n // marker for reverse proxying v-slot without scope on this.$slots\n if (slot.proxy) {\n slot.fn.proxy = true;\n }\n res[slot.key] = slot.fn;\n }\n }\n if (contentHashKey) {\n (res).$key = contentHashKey;\n }\n return res\n}\n\n/* */\n\nfunction bindDynamicKeys (baseObj, values) {\n for (var i = 0; i < values.length; i += 2) {\n var key = values[i];\n if (typeof key === 'string' && key) {\n baseObj[values[i]] = values[i + 1];\n } else if ( true && key !== '' && key !== null) {\n // null is a speical value for explicitly removing a binding\n warn(\n (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n this\n );\n }\n }\n return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n return typeof value === 'string' ? symbol + value : value\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n target._d = bindDynamicKeys;\n target._p = prependModifier;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var this$1 = this;\n\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () {\n if (!this$1.$slots) {\n normalizeScopedSlots(\n data.scopedSlots,\n this$1.$slots = resolveSlots(children, parent)\n );\n }\n return this$1.$slots\n };\n\n Object.defineProperty(this, 'scopedSlots', ({\n enumerable: true,\n get: function get () {\n return normalizeScopedSlots(data.scopedSlots, this.slots())\n }\n }));\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n if (true) {\n (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n }\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n/* */\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (vnode, hydrating) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (true) {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent // activeInstance in lifecycle state\n) {\n var options = {\n _isComponent: true,\n _parentVnode: vnode,\n parent: parent\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var existing = hooks[key];\n var toMerge = componentVNodeHooks[key];\n if (existing !== toMerge && !(existing && existing._merged)) {\n hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n }\n }\n}\n\nfunction mergeHook$1 (f1, f2) {\n var merged = function (a, b) {\n // flow complains about extra args which is why we use any\n f1(a, b);\n f2(a, b);\n };\n merged._merged = true;\n return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input'\n ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n var existing = on[event];\n var callback = data.model.callback;\n if (isDef(existing)) {\n if (\n Array.isArray(existing)\n ? existing.indexOf(callback) === -1\n : existing !== callback\n ) {\n on[event] = [callback].concat(existing);\n }\n } else {\n on[event] = callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n true && warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if ( true &&\n isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n if (true) {\n defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n } else {}\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n if (_parentVnode) {\n vm.$scopedSlots = normalizeScopedSlots(\n _parentVnode.data.scopedSlots,\n vm.$slots,\n vm.$scopedSlots\n );\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n // There's no need to maintain a stack becaues all render fns are called\n // separately from one another. Nested component's render fns are called\n // when parent component is patched.\n currentRenderingInstance = vm;\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if ( true && vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } finally {\n currentRenderingInstance = null;\n }\n // if the returned array contains only a single node, allow it\n if (Array.isArray(vnode) && vnode.length === 1) {\n vnode = vnode[0];\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if ( true && Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n var owner = currentRenderingInstance;\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n // already pending\n factory.owners.push(owner);\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (owner && !isDef(factory.owners)) {\n var owners = factory.owners = [owner];\n var sync = true;\n var timerLoading = null;\n var timerTimeout = null\n\n ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n var forceRender = function (renderCompleted) {\n for (var i = 0, l = owners.length; i < l; i++) {\n (owners[i]).$forceUpdate();\n }\n\n if (renderCompleted) {\n owners.length = 0;\n if (timerLoading !== null) {\n clearTimeout(timerLoading);\n timerLoading = null;\n }\n if (timerTimeout !== null) {\n clearTimeout(timerTimeout);\n timerTimeout = null;\n }\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender(true);\n } else {\n owners.length = 0;\n }\n });\n\n var reject = once(function (reason) {\n true && warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender(true);\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (isPromise(res)) {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isPromise(res.component)) {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n timerLoading = setTimeout(function () {\n timerLoading = null;\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender(false);\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n timerTimeout = setTimeout(function () {\n timerTimeout = null;\n if (isUndef(factory.resolved)) {\n reject(\n true\n ? (\"timeout (\" + (res.timeout) + \"ms)\")\n : undefined\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn) {\n target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n var _target = target;\n return function onceHandler () {\n var res = fn.apply(null, arguments);\n if (res !== null) {\n _target.$off(event, onceHandler);\n }\n }\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n vm.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n vm.$off(event[i$1], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n // specific handler\n var cb;\n var i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (true) {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n var info = \"event handler for \\\"\" + event + \"\\\"\";\n for (var i = 0, l = cbs.length; i < l; i++) {\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n }\n }\n return vm\n };\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n return function () {\n activeInstance = prevActiveInstance;\n }\n}\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var restoreActiveInstance = setActiveInstance(vm);\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n restoreActiveInstance();\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n if (true) {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren.\n\n // check if there are dynamic scopedSlots (hand-written or compiled but with\n // dynamic slot names). Static scoped slots compiled from template has the\n // \"$stable\" marker.\n var newScopedSlots = parentVnode.data.scopedSlots;\n var oldScopedSlots = vm.$scopedSlots;\n var hasDynamicScopedSlot = !!(\n (newScopedSlots && !newScopedSlots.$stable) ||\n (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n );\n\n // Any static slot children from the parent may have changed during parent's\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\n // update is necessary to ensure correctness.\n var needsForceUpdate = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n hasDynamicScopedSlot\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (needsForceUpdate) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n if (true) {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n var info = hook + \" hook\";\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (true) {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n var performance = window.performance;\n if (\n performance &&\n typeof performance.now === 'function' &&\n getNow() > document.createEvent('Event').timeStamp\n ) {\n // if the event timestamp, although evaluated AFTER the Date.now(), is\n // smaller than it, it means the event is using a hi-res timestamp,\n // and we need to use the hi-res version for event listener timestamps as\n // well.\n getNow = function () { return performance.now(); };\n }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n currentFlushTimestamp = getNow();\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n if (watcher.before) {\n watcher.before();\n }\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if ( true && has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n\n if ( true && !config.async) {\n flushSchedulerQueue();\n return\n }\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n this.before = options.before;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$2; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = true\n ? expOrFn.toString()\n : undefined;\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = noop;\n true && warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (true) {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive$$1(props, key, value, function () {\n if (!isRoot && !isUpdatingChildComponent) {\n {\n if(vm.mpHost === 'mp-baidu'){//百度 observer 在 setData callback 之后触发,直接忽略该 warn\n return\n }\n //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警\n if(\n key === 'value' && \n Array.isArray(vm.$options.behaviors) &&\n vm.$options.behaviors.indexOf('uni://form-field') !== -1\n ){\n return\n }\n if(vm._getFormData){\n return\n }\n var $parent = vm.$parent;\n while($parent){\n if($parent.__next_tick_pending){\n return \n }\n $parent = $parent.$parent;\n }\n }\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n } else {}\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n true && warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (true) {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n true && warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if ( true && getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (true) {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : createGetterInvoker(userDef);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : createGetterInvoker(userDef.get)\n : noop;\n sharedPropertyDefinition.set = userDef.set || noop;\n }\n if ( true &&\n sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.SharedObject.target) {// fixed by xxxxxx\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction createGetterInvoker(fn) {\n return function computedGetter () {\n return fn.call(this, this)\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (true) {\n if (typeof methods[key] !== 'function') {\n warn(\n \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n if (true) {\n dataDef.set = function () {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n try {\n cb.call(vm, watcher.value);\n } catch (error) {\n handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n }\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n if (true) {\n initProxy(vm);\n } else {}\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n vm.mpHost !== 'mp-toutiao' && initInjections(vm); // resolve injections before data/props \n initState(vm);\n vm.mpHost !== 'mp-toutiao' && initProvide(vm); // resolve provide after data/props\n vm.mpHost !== 'mp-toutiao' && callHook(vm, 'created'); \n\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = latest[key];\n }\n }\n return modified\n}\n\nfunction Vue (options) {\n if ( true &&\n !(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if ( true && name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if ( true && type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\n\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n for (var key in this.cache) {\n pruneCacheEntry(this.cache, key, this.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n};\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n if (true) {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive$$1\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n // 2.6 explicit observable API\n Vue.observable = function (obj) {\n observe(obj);\n return obj\n };\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/**\n * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js\n */\nvar ARRAYTYPE = '[object Array]';\nvar OBJECTTYPE = '[object Object]';\n// const FUNCTIONTYPE = '[object Function]'\n\nfunction diff(current, pre) {\n var result = {};\n syncKeys(current, pre);\n _diff(current, pre, '', result);\n return result\n}\n\nfunction syncKeys(current, pre) {\n if (current === pre) { return }\n var rootCurrentType = type(current);\n var rootPreType = type(pre);\n if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {\n if(Object.keys(current).length >= Object.keys(pre).length){\n for (var key in pre) {\n var currentValue = current[key];\n if (currentValue === undefined) {\n current[key] = null;\n } else {\n syncKeys(currentValue, pre[key]);\n }\n }\n }\n } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {\n if (current.length >= pre.length) {\n pre.forEach(function (item, index) {\n syncKeys(current[index], item);\n });\n }\n }\n}\n\nfunction _diff(current, pre, path, result) {\n if (current === pre) { return }\n var rootCurrentType = type(current);\n var rootPreType = type(pre);\n if (rootCurrentType == OBJECTTYPE) {\n if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {\n setResult(result, path, current);\n } else {\n var loop = function ( key ) {\n var currentValue = current[key];\n var preValue = pre[key];\n var currentType = type(currentValue);\n var preType = type(preValue);\n if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {\n if (currentValue != pre[key]) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n }\n } else if (currentType == ARRAYTYPE) {\n if (preType != ARRAYTYPE) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n } else {\n if (currentValue.length < preValue.length) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n } else {\n currentValue.forEach(function (item, index) {\n _diff(item, preValue[index], (path == '' ? '' : path + \".\") + key + '[' + index + ']', result);\n });\n }\n }\n } else if (currentType == OBJECTTYPE) {\n if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n } else {\n for (var subKey in currentValue) {\n _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + \".\") + key + '.' + subKey, result);\n }\n }\n }\n };\n\n for (var key in current) loop( key );\n }\n } else if (rootCurrentType == ARRAYTYPE) {\n if (rootPreType != ARRAYTYPE) {\n setResult(result, path, current);\n } else {\n if (current.length < pre.length) {\n setResult(result, path, current);\n } else {\n current.forEach(function (item, index) {\n _diff(item, pre[index], path + '[' + index + ']', result);\n });\n }\n }\n } else {\n setResult(result, path, current);\n }\n}\n\nfunction setResult(result, k, v) {\n // if (type(v) != FUNCTIONTYPE) {\n result[k] = v;\n // }\n}\n\nfunction type(obj) {\n return Object.prototype.toString.call(obj)\n}\n\n/* */\r\n\r\nfunction flushCallbacks$1(vm) {\r\n if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {\r\n if (Object({\"VUE_APP_PLATFORM\":\"app-plus\",\"NODE_ENV\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_DEBUG) {\r\n var mpInstance = vm.$scope;\r\n console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +\r\n ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');\r\n }\r\n var copies = vm.__next_tick_callbacks.slice(0);\r\n vm.__next_tick_callbacks.length = 0;\r\n for (var i = 0; i < copies.length; i++) {\r\n copies[i]();\r\n }\r\n }\r\n}\r\n\r\nfunction hasRenderWatcher(vm) {\r\n return queue.find(function (watcher) { return vm._watcher === watcher; })\r\n}\r\n\r\nfunction nextTick$1(vm, cb) {\r\n //1.nextTick 之前 已 setData 且 setData 还未回调完成\r\n //2.nextTick 之前存在 render watcher\r\n if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {\n if(Object({\"VUE_APP_PLATFORM\":\"app-plus\",\"NODE_ENV\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_DEBUG){\n var mpInstance = vm.$scope;\n console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +\n ']:nextVueTick');\n }\r\n return nextTick(cb, vm)\r\n }else{\n if(Object({\"VUE_APP_PLATFORM\":\"app-plus\",\"NODE_ENV\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_DEBUG){\n var mpInstance$1 = vm.$scope;\n console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +\n ']:nextMPTick');\n }\n }\r\n var _resolve;\r\n if (!vm.__next_tick_callbacks) {\r\n vm.__next_tick_callbacks = [];\r\n }\r\n vm.__next_tick_callbacks.push(function () {\r\n if (cb) {\r\n try {\r\n cb.call(vm);\r\n } catch (e) {\r\n handleError(e, vm, 'nextTick');\r\n }\r\n } else if (_resolve) {\r\n _resolve(vm);\r\n }\r\n });\r\n // $flow-disable-line\r\n if (!cb && typeof Promise !== 'undefined') {\r\n return new Promise(function (resolve) {\r\n _resolve = resolve;\r\n })\r\n }\r\n}\n\n/* */\r\n\r\nfunction cloneWithData(vm) {\r\n // 确保当前 vm 所有数据被同步\r\n var ret = Object.create(null);\r\n var dataKeys = [].concat(\r\n Object.keys(vm._data || {}),\r\n Object.keys(vm._computedWatchers || {}));\r\n\r\n dataKeys.reduce(function(ret, key) {\r\n ret[key] = vm[key];\r\n return ret\r\n }, ret);\r\n //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据\r\n Object.assign(ret, vm.$mp.data || {});\r\n if (\r\n Array.isArray(vm.$options.behaviors) &&\r\n vm.$options.behaviors.indexOf('uni://form-field') !== -1\r\n ) { //form-field\r\n ret['name'] = vm.name;\r\n ret['value'] = vm.value;\r\n }\r\n\r\n return JSON.parse(JSON.stringify(ret))\r\n}\r\n\r\nvar patch = function(oldVnode, vnode) {\n var this$1 = this;\n\r\n if (vnode === null) { //destroy\r\n return\r\n }\r\n if (this.mpType === 'page' || this.mpType === 'component') {\r\n var mpInstance = this.$scope;\r\n var data = Object.create(null);\r\n try {\r\n data = cloneWithData(this);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n data.__webviewId__ = mpInstance.data.__webviewId__;\r\n var mpData = Object.create(null);\r\n Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据\r\n mpData[key] = mpInstance.data[key];\r\n });\r\n var diffData = diff(data, mpData);\r\n if (Object.keys(diffData).length) {\r\n if (Object({\"VUE_APP_PLATFORM\":\"app-plus\",\"NODE_ENV\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_DEBUG) {\r\n console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +\r\n ']差量更新',\r\n JSON.stringify(diffData));\r\n }\r\n this.__next_tick_pending = true;\r\n mpInstance.setData(diffData, function () {\r\n this$1.__next_tick_pending = false;\r\n flushCallbacks$1(this$1);\r\n });\r\n } else {\r\n flushCallbacks$1(this);\r\n }\r\n }\r\n};\n\n/* */\n\nfunction createEmptyRender() {\n\n}\n\nfunction mountComponent$1(\n vm,\n el,\n hydrating\n) {\n if (!vm.mpType) {//main.js 中的 new Vue\n return vm\n }\n if (vm.mpType === 'app') {\n vm.$options.render = createEmptyRender;\n }\n if (!vm.$options.render) {\n vm.$options.render = createEmptyRender;\n if (true) {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n \n vm.mpHost !== 'mp-toutiao' && callHook(vm, 'beforeMount');\n\n var updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, {\n before: function before() {\n if (vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'beforeUpdate');\n }\n }\n }, true /* isRenderWatcher */);\n hydrating = false;\n return vm\n}\n\n/* */\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/* */\r\n\r\nvar MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];\r\n\r\nfunction getTarget(obj, path) {\r\n var parts = path.split('.');\r\n var key = parts[0];\r\n if (key.indexOf('__$n') === 0) { //number index\r\n key = parseInt(key.replace('__$n', ''));\r\n }\r\n if (parts.length === 1) {\r\n return obj[key]\r\n }\r\n return getTarget(obj[key], parts.slice(1).join('.'))\r\n}\r\n\r\nfunction internalMixin(Vue) {\r\n\r\n Vue.config.errorHandler = function(err) {\r\n console.error(err);\r\n };\r\n\r\n var oldEmit = Vue.prototype.$emit;\r\n\r\n Vue.prototype.$emit = function(event) {\r\n if (this.$scope && event) {\r\n this.$scope['triggerEvent'](event, {\r\n __args__: toArray(arguments, 1)\r\n });\r\n }\r\n return oldEmit.apply(this, arguments)\r\n };\r\n\r\n Vue.prototype.$nextTick = function(fn) {\r\n return nextTick$1(this, fn)\r\n };\r\n\r\n MP_METHODS.forEach(function (method) {\r\n Vue.prototype[method] = function(args) {\r\n if (this.$scope) {\r\n return this.$scope[method](args)\r\n }\r\n };\r\n });\r\n\r\n Vue.prototype.__init_provide = initProvide;\r\n\r\n Vue.prototype.__init_injections = initInjections;\r\n\r\n Vue.prototype.__call_hook = function(hook, args) {\r\n var vm = this;\r\n // #7573 disable dep collection when invoking lifecycle hooks\r\n pushTarget();\r\n var handlers = vm.$options[hook];\r\n var info = hook + \" hook\";\r\n var ret;\r\n if (handlers) {\r\n for (var i = 0, j = handlers.length; i < j; i++) {\r\n ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);\r\n }\r\n }\r\n if (vm._hasHookEvent) {\r\n vm.$emit('hook:' + hook);\r\n }\r\n popTarget();\r\n return ret\r\n };\r\n\r\n Vue.prototype.__set_model = function(target, key, value, modifiers) {\r\n if (Array.isArray(modifiers)) {\r\n if (modifiers.indexOf('trim') !== -1) {\r\n value = value.trim();\r\n }\r\n if (modifiers.indexOf('number') !== -1) {\r\n value = this._n(value);\r\n }\r\n }\r\n if (!target) {\r\n target = this;\r\n }\r\n target[key] = value;\r\n };\r\n\r\n Vue.prototype.__set_sync = function(target, key, value) {\r\n if (!target) {\r\n target = this;\r\n }\r\n target[key] = value;\r\n };\r\n\r\n Vue.prototype.__get_orig = function(item) {\r\n if (isPlainObject(item)) {\r\n return item['$orig'] || item\r\n }\r\n return item\r\n };\r\n\r\n Vue.prototype.__get_value = function(dataPath, target) {\r\n return getTarget(target || this, dataPath)\r\n };\r\n\r\n\r\n Vue.prototype.__get_class = function(dynamicClass, staticClass) {\r\n return renderClass(staticClass, dynamicClass)\r\n };\r\n\r\n Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {\r\n if (!dynamicStyle && !staticStyle) {\r\n return ''\r\n }\r\n var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);\r\n var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;\r\n return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + \":\" + (styleObj[name])); }).join(';')\r\n };\r\n\r\n Vue.prototype.__map = function(val, iteratee) {\r\n //TODO 暂不考虑 string,number\r\n var ret, i, l, keys, key;\r\n if (Array.isArray(val)) {\r\n ret = new Array(val.length);\r\n for (i = 0, l = val.length; i < l; i++) {\r\n ret[i] = iteratee(val[i], i);\r\n }\r\n return ret\r\n } else if (isObject(val)) {\r\n keys = Object.keys(val);\r\n ret = Object.create(null);\r\n for (i = 0, l = keys.length; i < l; i++) {\r\n key = keys[i];\r\n ret[key] = iteratee(val[key], key, i);\r\n }\r\n return ret\r\n }\r\n return []\r\n };\r\n\r\n}\n\n/* */\r\n\r\nvar LIFECYCLE_HOOKS$1 = [\r\n //App\r\n 'onLaunch',\r\n 'onShow',\r\n 'onHide',\r\n 'onUniNViewMessage',\n 'onError',\r\n //Page\r\n 'onLoad',\r\n // 'onShow',\r\n 'onReady',\r\n // 'onHide',\r\n 'onUnload',\r\n 'onPullDownRefresh',\r\n 'onReachBottom',\r\n 'onTabItemTap',\r\n 'onShareAppMessage',\n 'onResize',\r\n 'onPageScroll',\r\n 'onNavigationBarButtonTap',\r\n 'onBackPress',\r\n 'onNavigationBarSearchInputChanged',\r\n 'onNavigationBarSearchInputConfirmed',\r\n 'onNavigationBarSearchInputClicked',\r\n //Component\r\n // 'onReady', // 兼容旧版本,应该移除该事件\r\n 'onPageShow',\r\n 'onPageHide',\r\n 'onPageResize'\r\n];\r\nfunction lifecycleMixin$1(Vue) {\r\n\r\n //fixed vue-class-component\r\n var oldExtend = Vue.extend;\r\n Vue.extend = function(extendOptions) {\r\n extendOptions = extendOptions || {};\r\n\r\n var methods = extendOptions.methods;\r\n if (methods) {\r\n Object.keys(methods).forEach(function (methodName) {\r\n if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {\r\n extendOptions[methodName] = methods[methodName];\r\n delete methods[methodName];\r\n }\r\n });\r\n }\r\n\r\n return oldExtend.call(this, extendOptions)\r\n };\r\n\r\n var strategies = Vue.config.optionMergeStrategies;\r\n var mergeHook = strategies.created;\r\n LIFECYCLE_HOOKS$1.forEach(function (hook) {\r\n strategies[hook] = mergeHook;\r\n });\r\n\r\n Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;\r\n}\n\n/* */\r\n\n// install platform patch function\r\nVue.prototype.__patch__ = patch;\r\n\r\n// public mount method\r\nVue.prototype.$mount = function(\r\n el ,\r\n hydrating \r\n) {\r\n return mountComponent$1(this, el, hydrating)\r\n};\r\n\r\nlifecycleMixin$1(Vue);\r\ninternalMixin(Vue);\n\n/* */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ 2)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsYUFBb0I7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLFlBQVksYUFBb0I7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRztBQUNSO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHVDQUF1Qyx3QkFBd0IsRUFBRTtBQUNqRSwwQkFBMEI7O0FBRTFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZO0FBQ3BDLGtCQUFrQixZQUFZO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLG9CQUFvQixFQUFFO0FBQ3JEO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLFNBQVMscUJBQXFCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBLG9DQUFvQztBQUNwQztBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBRVE7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxJQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxQkFBcUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFP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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xELDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix5QkFBeUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMEJBQTBCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixvQkFBb0IsRUFBRTs7QUFFcEQ7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsS0FBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEtBQXFDO0FBQ3pEO0FBQ0EsTUFBTSxTQUFFO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDLHFCQUFxQiwrQkFBK0I7QUFDcEQ7QUFDQTtBQUNBLEdBQUc7QUFDSCx5QkFBeUI7QUFDekI7QUFDQSxzQkFBc0IsaUNBQWlDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssTUFBTSxFQUVOO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsSUFBcUM7QUFDcEQ7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQkFBb0I7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLDhCQUE4QjtBQUM5QixNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0EsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQSxrREFBa0Q7QUFDbEQsMEQ7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixlQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QscURBQXFELEVBQUUsU0FBUztBQUN0SDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFZSxrRUFBRyxFQUFDIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFZ1ZS5qcyB2Mi42LjEwXG4gKiAoYykgMjAxNC0yMDE5IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbi8qICAqL1xuXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuZnVuY3Rpb24gaXNVbmRlZiAodikge1xuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZWYgKHYpIHtcbiAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZSAodikge1xuICByZXR1cm4gdiA9PT0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlICh2KSB7XG4gIHJldHVybiB2ID09PSBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgKVxufVxuXG4vKipcbiAqIFF1aWNrIG9iamVjdCBjaGVjayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxuICogT2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICogaXMgYSBKU09OLWNvbXBsaWFudCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJhdyB0eXBlIHN0cmluZyBvZiBhIHZhbHVlLCBlLmcuLCBbb2JqZWN0IE9iamVjdF0uXG4gKi9cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiB0b1Jhd1R5cGUgKHZhbHVlKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNoZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCAodikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4ICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbClcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIChcbiAgICBpc0RlZih2YWwpICYmXG4gICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHZhbC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogQXJyYXkuaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBfdG9TdHJpbmcpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAgIDogU3RyaW5nKHZhbClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0b051bWJlciAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gaXNOYU4obikgPyB2YWwgOiBuXG59XG5cbi8qKlxuICogTWFrZSBhIG1hcCBhbmQgcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEga2V5XG4gKiBpcyBpbiB0aGF0IG1hcC5cbiAqL1xuZnVuY3Rpb24gbWFrZU1hcCAoXG4gIHN0cixcbiAgZXhwZWN0c0xvd2VyQ2FzZVxuKSB7XG4gIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgbGlzdCA9IHN0ci5zcGxpdCgnLCcpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICB9XG4gIHJldHVybiBleHBlY3RzTG93ZXJDYXNlXG4gICAgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9XG4gICAgOiBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsXTsgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICovXG52YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICovXG5mdW5jdGlvbiByZW1vdmUgKGFyciwgaXRlbSkge1xuICBpZiAoYXJyLmxlbmd0aCkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJzsgfSlcbn0pO1xuXG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufSk7XG5cbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG59KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gKiBlLmcuLCBQaGFudG9tSlMgMS54LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcbiAqIHNpbmNlIG5hdGl2ZSBiaW5kIGlzIG5vdyBwZXJmb3JtYW50IGVub3VnaCBpbiBtb3N0IGJyb3dzZXJzLlxuICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICogUGhhbnRvbUpTIDEueCwgc28gdGhpcyBtdXN0IGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHBvbHlmaWxsQmluZCAoZm4sIGN0eCkge1xuICBmdW5jdGlvbiBib3VuZEZuIChhKSB7XG4gICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBsXG4gICAgICA/IGwgPiAxXG4gICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgIDogZm4uY2FsbChjdHgsIGEpXG4gICAgICA6IGZuLmNhbGwoY3R4KVxuICB9XG5cbiAgYm91bmRGbi5fbGVuZ3RoID0gZm4ubGVuZ3RoO1xuICByZXR1cm4gYm91bmRGblxufVxuXG5mdW5jdGlvbiBuYXRpdmVCaW5kIChmbiwgY3R4KSB7XG4gIHJldHVybiBmbi5iaW5kKGN0eClcbn1cblxudmFyIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICA/IG5hdGl2ZUJpbmRcbiAgOiBwb2x5ZmlsbEJpbmQ7XG5cbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkgKGxpc3QsIHN0YXJ0KSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyoqXG4gKiBNaXggcHJvcGVydGllcyBpbnRvIHRhcmdldCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCAodG8sIF9mcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0IChhcnIpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRyYW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxuICovXG5mdW5jdGlvbiBub29wIChhLCBiLCBjKSB7fVxuXG4vKipcbiAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gKi9cbnZhciBubyA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmYWxzZTsgfTtcblxuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIHZhbHVlcyBhcmUgbG9vc2VseSBlcXVhbCAtIHRoYXQgaXMsXG4gKiBpZiB0aGV5IGFyZSBwbGFpbiBvYmplY3RzLCBkbyB0aGV5IGhhdmUgdGhlIHNhbWUgc2hhcGU/XG4gKi9cbmZ1bmN0aW9uIGxvb3NlRXF1YWwgKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaXNPYmplY3RBID0gaXNPYmplY3QoYSk7XG4gIHZhciBpc09iamVjdEIgPSBpc09iamVjdChiKTtcbiAgaWYgKGlzT2JqZWN0QSAmJiBpc09iamVjdEIpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGlzQXJyYXlBID0gQXJyYXkuaXNBcnJheShhKTtcbiAgICAgIHZhciBpc0FycmF5QiA9IEFycmF5LmlzQXJyYXkoYik7XG4gICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJheUIpIHtcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoZSwgYltpXSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKVxuICAgICAgfSBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgICAgcmV0dXJuIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChhW2tleV0sIGJba2V5XSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XG4gICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IGF0IHdoaWNoIGEgbG9vc2VseSBlcXVhbCB2YWx1ZSBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBhcnJheSAoaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QsIHRoZSBhcnJheSBtdXN0XG4gKiBjb250YWluIGFuIG9iamVjdCBvZiB0aGUgc2FtZSBzaGFwZSksIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LlxuICovXG5mdW5jdGlvbiBsb29zZUluZGV4T2YgKGFyciwgdmFsKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKSB7IHJldHVybiBpIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBvbmNlLlxuICovXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgQVNTRVRfVFlQRVMgPSBbXG4gICdjb21wb25lbnQnLFxuICAnZGlyZWN0aXZlJyxcbiAgJ2ZpbHRlcidcbl07XG5cbnZhciBMSUZFQ1lDTEVfSE9PS1MgPSBbXG4gICdiZWZvcmVDcmVhdGUnLFxuICAnY3JlYXRlZCcsXG4gICdiZWZvcmVNb3VudCcsXG4gICdtb3VudGVkJyxcbiAgJ2JlZm9yZVVwZGF0ZScsXG4gICd1cGRhdGVkJyxcbiAgJ2JlZm9yZURlc3Ryb3knLFxuICAnZGVzdHJveWVkJyxcbiAgJ2FjdGl2YXRlZCcsXG4gICdkZWFjdGl2YXRlZCcsXG4gICdlcnJvckNhcHR1cmVkJyxcbiAgJ3NlcnZlclByZWZldGNoJ1xuXTtcblxuLyogICovXG5cblxuXG52YXIgY29uZmlnID0gKHtcbiAgLyoqXG4gICAqIE9wdGlvbiBtZXJnZSBzdHJhdGVnaWVzICh1c2VkIGluIGNvcmUvdXRpbC9vcHRpb25zKVxuICAgKi9cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIG9wdGlvbk1lcmdlU3RyYXRlZ2llczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogV2hldGhlciB0byBzdXBwcmVzcyB3YXJuaW5ncy5cbiAgICovXG4gIHNpbGVudDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFNob3cgcHJvZHVjdGlvbiBtb2RlIHRpcCBtZXNzYWdlIG9uIGJvb3Q/XG4gICAqL1xuICBwcm9kdWN0aW9uVGlwOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBkZXZ0b29sc1xuICAgKi9cbiAgZGV2dG9vbHM6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb3JkIHBlcmZcbiAgICovXG4gIHBlcmZvcm1hbmNlOiBmYWxzZSxcblxuICAvKipcbiAgICogRXJyb3IgaGFuZGxlciBmb3Igd2F0Y2hlciBlcnJvcnNcbiAgICovXG4gIGVycm9ySGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogV2FybiBoYW5kbGVyIGZvciB3YXRjaGVyIHdhcm5zXG4gICAqL1xuICB3YXJuSGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogSWdub3JlIGNlcnRhaW4gY3VzdG9tIGVsZW1lbnRzXG4gICAqL1xuICBpZ25vcmVkRWxlbWVudHM6IFtdLFxuXG4gIC8qKlxuICAgKiBDdXN0b20gdXNlciBrZXkgYWxpYXNlcyBmb3Igdi1vblxuICAgKi9cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGtleUNvZGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICogY29tcG9uZW50LiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZFRhZzogbm8sXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29tcG9uZW50XG4gICAqIHByb3AuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkQXR0cjogbm8sXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIGFuIHVua25vd24gZWxlbWVudC5cbiAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgaXNVbmtub3duRWxlbWVudDogbm8sXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICovXG4gIGdldFRhZ05hbWVzcGFjZTogbm9vcCxcblxuICAvKipcbiAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9yIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICovXG4gIHBhcnNlUGxhdGZvcm1UYWdOYW1lOiBpZGVudGl0eSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIG11c3QgYmUgYm91bmQgdXNpbmcgcHJvcGVydHksIGUuZy4gdmFsdWVcbiAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgbXVzdFVzZVByb3A6IG5vLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkuIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgVnVlIFRlc3QgVXRpbHNcbiAgICogVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgcmVkdWNlIHBlcmZvcm1hbmNlIGlmIHNldCB0byBmYWxzZS5cbiAgICovXG4gIGFzeW5jOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciBsZWdhY3kgcmVhc29uc1xuICAgKi9cbiAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1Ncbn0pO1xuXG4vKiAgKi9cblxuLyoqXG4gKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gKiB1c2luZyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUzL3NlbWFudGljcy1zY3JpcHRpbmcuaHRtbCNwb3RlbnRpYWxjdXN0b21lbGVtZW50bmFtZVxuICogc2tpcHBpbmcgXFx1MTAwMDAtXFx1RUZGRkYgZHVlIHRvIGl0IGZyZWV6aW5nIHVwIFBoYW50b21KU1xuICovXG52YXIgdW5pY29kZVJlZ0V4cCA9IC9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztcblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCAkIG9yIF9cbiAqL1xuZnVuY3Rpb24gaXNSZXNlcnZlZCAoc3RyKSB7XG4gIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICByZXR1cm4gYyA9PT0gMHgyNCB8fCBjID09PSAweDVGXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGRlZiAob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICB2YWx1ZTogdmFsLFxuICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gKi9cbnZhciBiYWlsUkUgPSBuZXcgUmVnRXhwKChcIlteXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCIuJF9cXFxcZF1cIikpO1xuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIGlmIChiYWlsUkUudGVzdChwYXRoKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW9iaikgeyByZXR1cm4gfVxuICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9XG59XG5cbi8qICAqL1xuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuXG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgaW5XZWV4ID0gdHlwZW9mIFdYRW52aXJvbm1lbnQgIT09ICd1bmRlZmluZWQnICYmICEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybTtcbnZhciB3ZWV4UGxhdGZvcm0gPSBpbldlZXggJiYgV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpO1xudmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xudmFyIGlzSUU5ID0gVUEgJiYgVUEuaW5kZXhPZignbXNpZSA5LjAnKSA+IDA7XG52YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XG52YXIgaXNBbmRyb2lkID0gKFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDApIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdhbmRyb2lkJyk7XG52YXIgaXNJT1MgPSAoVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KFVBKSkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2lvcycpO1xudmFyIGlzQ2hyb21lID0gVUEgJiYgL2Nocm9tZVxcL1xcZCsvLnRlc3QoVUEpICYmICFpc0VkZ2U7XG52YXIgaXNQaGFudG9tSlMgPSBVQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbnZhciBpc0ZGID0gVUEgJiYgVUEubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKTtcblxuLy8gRmlyZWZveCBoYXMgYSBcIndhdGNoXCIgZnVuY3Rpb24gb24gT2JqZWN0LnByb3RvdHlwZS4uLlxudmFyIG5hdGl2ZVdhdGNoID0gKHt9KS53YXRjaDtcbmlmIChpbkJyb3dzZXIpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICB9XG4gICAgfSkpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbi8vIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgY2FuIHNldCBWVUVfRU5WXG52YXIgX2lzU2VydmVyO1xudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBfaXNTZXJ2ZXJcbn07XG5cbi8vIGRldGVjdCBkZXZ0b29sc1xudmFyIGRldnRvb2xzID0gaW5Ccm93c2VyICYmIHdpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUgKEN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTeW1ib2wpICYmXG4gIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbmlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxuICBfU2V0ID0gU2V0O1xufSBlbHNlIHtcbiAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICBfU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIHRyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICB7XG4gICAgICBpZih2bS4kc2NvcGUgJiYgdm0uJHNjb3BlLmlzKXtcbiAgICAgICAgcmV0dXJuIHZtLiRzY29wZS5pc1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm07XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkID0gMDtcblxuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKi9cbnZhciBEZXAgPSBmdW5jdGlvbiBEZXAgKCkge1xuICB0aGlzLmlkID0gdWlkKys7XG4gIHRoaXMuc3VicyA9IFtdO1xufTtcblxuRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiBhZGRTdWIgKHN1Yikge1xuICB0aGlzLnN1YnMucHVzaChzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiByZW1vdmVTdWIgKHN1Yikge1xuICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICBpZiAoRGVwLlNoYXJlZE9iamVjdC50YXJnZXQpIHtcbiAgICBEZXAuU2hhcmVkT2JqZWN0LnRhcmdldC5hZGREZXAodGhpcyk7XG4gIH1cbn07XG5cbkRlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5ICgpIHtcbiAgLy8gc3RhYmlsaXplIHRoZSBzdWJzY3JpYmVyIGxpc3QgZmlyc3RcbiAgdmFyIHN1YnMgPSB0aGlzLnN1YnMuc2xpY2UoKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgIC8vIHN1YnMgYXJlbid0IHNvcnRlZCBpbiBzY2hlZHVsZXIgaWYgbm90IHJ1bm5pbmcgYXN5bmNcbiAgICAvLyB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBub3cgdG8gbWFrZSBzdXJlIHRoZXkgZmlyZSBpbiBjb3JyZWN0XG4gICAgLy8gb3JkZXJcbiAgICBzdWJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbCA9IHN1YnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgc3Vic1tpXS51cGRhdGUoKTtcbiAgfVxufTtcblxuLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuLy8gVGhpcyBpcyBnbG9iYWxseSB1bmlxdWUgYmVjYXVzZSBvbmx5IG9uZSB3YXRjaGVyXG4vLyBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgdGltZS5cbi8vIGZpeGVkIGJ5IHh4eHh4eCAobnZ1ZSBzaGFyZWQgdnVleClcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5EZXAuU2hhcmVkT2JqZWN0ID0gdHlwZW9mIFNoYXJlZE9iamVjdCAhPT0gJ3VuZGVmaW5lZCcgPyBTaGFyZWRPYmplY3QgOiB7fTtcbkRlcC5TaGFyZWRPYmplY3QudGFyZ2V0ID0gbnVsbDtcbkRlcC5TaGFyZWRPYmplY3QudGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIERlcC5TaGFyZWRPYmplY3QudGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICBEZXAuU2hhcmVkT2JqZWN0LnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgRGVwLlNoYXJlZE9iamVjdC50YXJnZXRTdGFjay5wb3AoKTtcbiAgRGVwLlNoYXJlZE9iamVjdC50YXJnZXQgPSBEZXAuU2hhcmVkT2JqZWN0LnRhcmdldFN0YWNrW0RlcC5TaGFyZWRPYmplY3QudGFyZ2V0U3RhY2subGVuZ3RoIC0gMV07XG59XG5cbi8qICAqL1xuXG52YXIgVk5vZGUgPSBmdW5jdGlvbiBWTm9kZSAoXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIGVsbSxcbiAgY29udGV4dCxcbiAgY29tcG9uZW50T3B0aW9ucyxcbiAgYXN5bmNGYWN0b3J5XG4pIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgdGhpcy5lbG0gPSBlbG07XG4gIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcbiAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gIHRoaXMucmF3ID0gZmFsc2U7XG4gIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xuICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gIHRoaXMuaXNPbmNlID0gZmFsc2U7XG4gIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGNoaWxkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbi8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgaWYgKCB0ZXh0ID09PSB2b2lkIDAgKSB0ZXh0ID0gJyc7XG5cbiAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICByZXR1cm4gbm9kZVxufTtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlICh2YWwpIHtcbiAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSlcbn1cblxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNsb25lVk5vZGUgKHZub2RlKSB7XG4gIHZhciBjbG9uZWQgPSBuZXcgVk5vZGUoXG4gICAgdm5vZGUudGFnLFxuICAgIHZub2RlLmRhdGEsXG4gICAgLy8gIzc5NzVcbiAgICAvLyBjbG9uZSBjaGlsZHJlbiBhcnJheSB0byBhdm9pZCBtdXRhdGluZyBvcmlnaW5hbCBpbiBjYXNlIG9mIGNsb25pbmdcbiAgICAvLyBhIGNoaWxkLlxuICAgIHZub2RlLmNoaWxkcmVuICYmIHZub2RlLmNoaWxkcmVuLnNsaWNlKCksXG4gICAgdm5vZGUudGV4dCxcbiAgICB2bm9kZS5lbG0sXG4gICAgdm5vZGUuY29udGV4dCxcbiAgICB2bm9kZS5jb21wb25lbnRPcHRpb25zLFxuICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICApO1xuICBjbG9uZWQubnMgPSB2bm9kZS5ucztcbiAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gIGNsb25lZC5rZXkgPSB2bm9kZS5rZXk7XG4gIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4gIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gIGNsb25lZC5mbk9wdGlvbnMgPSB2bm9kZS5mbk9wdGlvbnM7XG4gIGNsb25lZC5mblNjb3BlSWQgPSB2bm9kZS5mblNjb3BlSWQ7XG4gIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gIGNsb25lZC5pc0Nsb25lZCA9IHRydWU7XG4gIHJldHVybiBjbG9uZWRcbn1cblxuLypcbiAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gKi9cblxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcblxudmFyIG1ldGhvZHNUb1BhdGNoID0gW1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXTtcblxuLyoqXG4gKiBJbnRlcmNlcHQgbXV0YXRpbmcgbWV0aG9kcyBhbmQgZW1pdCBldmVudHNcbiAqL1xubWV0aG9kc1RvUGF0Y2guZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIC8vIGNhY2hlIG9yaWdpbmFsIG1ldGhvZFxuICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gIGRlZihhcnJheU1ldGhvZHMsIG1ldGhvZCwgZnVuY3Rpb24gbXV0YXRvciAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIHZhciBvYiA9IHRoaXMuX19vYl9fO1xuICAgIHZhciBpbnNlcnRlZDtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAncHVzaCc6XG4gICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzLnNsaWNlKDIpO1xuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpZiAoaW5zZXJ0ZWQpIHsgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTsgfVxuICAgIC8vIG5vdGlmeSBjaGFuZ2VcbiAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KTtcbn0pO1xuXG4vKiAgKi9cblxudmFyIGFycmF5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFycmF5TWV0aG9kcyk7XG5cbi8qKlxuICogSW4gc29tZSBjYXNlcyB3ZSBtYXkgd2FudCB0byBkaXNhYmxlIG9ic2VydmF0aW9uIGluc2lkZSBhIGNvbXBvbmVudCdzXG4gKiB1cGRhdGUgY29tcHV0YXRpb24uXG4gKi9cbnZhciBzaG91bGRPYnNlcnZlID0gdHJ1ZTtcblxuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nICh2YWx1ZSkge1xuICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG59XG5cbi8qKlxuICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0aGUgdGFyZ2V0XG4gKiBvYmplY3QncyBwcm9wZXJ0eSBrZXlzIGludG8gZ2V0dGVyL3NldHRlcnMgdGhhdFxuICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gKi9cbnZhciBPYnNlcnZlciA9IGZ1bmN0aW9uIE9ic2VydmVyICh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMuZGVwID0gbmV3IERlcCgpO1xuICB0aGlzLnZtQ291bnQgPSAwO1xuICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKGhhc1Byb3RvKSB7XG4gICAgICB7Ly8gZml4ZWQgYnkgeHh4eHh4IOW+ruS/oeWwj+eoi+W6j+S9v+eUqCBwbHVnaW5zIOS5i+WQju+8jOaVsOe7hOaWueazleiiq+ebtOaOpeaMgui9veWIsOS6huaVsOe7hOWvueixoeS4iu+8jOmcgOimgeaJp+ihjCBjb3B5QXVnbWVudCDpgLvovpFcbiAgICAgICAgaWYodmFsdWUucHVzaCAhPT0gdmFsdWUuX19wcm90b19fLnB1c2gpe1xuICAgICAgICAgIGNvcHlBdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMsIGFycmF5S2V5cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvdG9BdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvcHlBdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMsIGFycmF5S2V5cyk7XG4gICAgfVxuICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndhbGsodmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFdhbGsgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBhbmQgY29udmVydCB0aGVtIGludG9cbiAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlblxuICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS53YWxrID0gZnVuY3Rpb24gd2FsayAob2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEob2JqLCBrZXlzW2ldKTtcbiAgfVxufTtcblxuLyoqXG4gKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLm9ic2VydmVBcnJheSA9IGZ1bmN0aW9uIG9ic2VydmVBcnJheSAoaXRlbXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvYnNlcnZlKGl0ZW1zW2ldKTtcbiAgfVxufTtcblxuLy8gaGVscGVyc1xuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHByb3RvdHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuICB0YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG59XG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgZGVmaW5pbmdcbiAqIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gY29weUF1Z21lbnQgKHRhcmdldCwgc3JjLCBrZXlzKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBkZWYodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHQgdG8gY3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlIGZvciBhIHZhbHVlLFxuICogcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGlmIHN1Y2Nlc3NmdWxseSBvYnNlcnZlZCxcbiAqIG9yIHRoZSBleGlzdGluZyBvYnNlcnZlciBpZiB0aGUgdmFsdWUgYWxyZWFkeSBoYXMgb25lLlxuICovXG5mdW5jdGlvbiBvYnNlcnZlICh2YWx1ZSwgYXNSb290RGF0YSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9iO1xuICBpZiAoaGFzT3duKHZhbHVlLCAnX19vYl9fJykgJiYgdmFsdWUuX19vYl9fIGluc3RhbmNlb2YgT2JzZXJ2ZXIpIHtcbiAgICBvYiA9IHZhbHVlLl9fb2JfXztcbiAgfSBlbHNlIGlmIChcbiAgICBzaG91bGRPYnNlcnZlICYmXG4gICAgIWlzU2VydmVyUmVuZGVyaW5nKCkgJiZcbiAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkgJiZcbiAgICAhdmFsdWUuX2lzVnVlXG4gICkge1xuICAgIG9iID0gbmV3IE9ic2VydmVyKHZhbHVlKTtcbiAgfVxuICBpZiAoYXNSb290RGF0YSAmJiBvYikge1xuICAgIG9iLnZtQ291bnQrKztcbiAgfVxuICByZXR1cm4gb2Jcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlJCQxIChcbiAgb2JqLFxuICBrZXksXG4gIHZhbCxcbiAgY3VzdG9tU2V0dGVyLFxuICBzaGFsbG93XG4pIHtcbiAgdmFyIGRlcCA9IG5ldyBEZXAoKTtcblxuICB2YXIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICB2YXIgc2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuc2V0O1xuICBpZiAoKCFnZXR0ZXIgfHwgc2V0dGVyKSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFsID0gb2JqW2tleV07XG4gIH1cblxuICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiByZWFjdGl2ZUdldHRlciAoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgaWYgKERlcC5TaGFyZWRPYmplY3QudGFyZ2V0KSB7IC8vIGZpeGVkIGJ5IHh4eHh4eFxuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXG4gICAgICBpZiAoZ2V0dGVyICYmICFzZXR0ZXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICA/IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2NoaWxkVmFsXVxuICAgIDogcGFyZW50VmFsO1xuICByZXR1cm4gcmVzXG4gICAgPyBkZWR1cGVIb29rcyhyZXMpXG4gICAgOiByZXNcbn1cblxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XG4gICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5ldyBSZWdFeHAoKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICdpZDogJyArIG5hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIGFsbCBwcm9wcyBvcHRpb24gc3ludGF4IGFyZSBub3JtYWxpemVkIGludG8gdGhlXG4gKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyAob3B0aW9ucywgdm0pIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWwsIG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiQkMSA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmJCQxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuXG4gIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXG4gIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxuICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGZvciB3ZWV4IHJlY3ljbGUtbGlzdCBjaGlsZCBjb21wb25lbnQgcHJvcHNcbiAgICAhKGZhbHNlKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgY2FsbGJhY2tzID0gW107XG52YXIgcGVuZGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyAoKSB7XG4gIHBlbmRpbmcgPSBmYWxzZTtcbiAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29waWVzW2ldKCk7XG4gIH1cbn1cblxuLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuLy8gSW4gMi41IHdlIHVzZWQgKG1hY3JvKSB0YXNrcyAoaW4gY29tYmluYXRpb24gd2l0aCBtaWNyb3Rhc2tzKS5cbi8vIEhvd2V2ZXIsIGl0IGhhcyBzdWJ0bGUgcHJvYmxlbXMgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSByZXBhaW50XG4vLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbi8vIEFsc28sIHVzaW5nIChtYWNybykgdGFza3MgaW4gZXZlbnQgaGFuZGxlciB3b3VsZCBjYXVzZSBzb21lIHdlaXJkIGJlaGF2aW9yc1xuLy8gdGhhdCBjYW5ub3QgYmUgY2lyY3VtdmVudGVkIChlLmcuICM3MTA5LCAjNzE1MywgIzc1NDYsICM3ODM0LCAjODEwOSkuXG4vLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4vLyBBIG1ham9yIGRyYXdiYWNrIG9mIHRoaXMgdHJhZGVvZmYgaXMgdGhhdCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3Ncbi8vIHdoZXJlIG1pY3JvdGFza3MgaGF2ZSB0b28gaGlnaCBhIHByaW9yaXR5IGFuZCBmaXJlIGluIGJldHdlZW4gc3VwcG9zZWRseVxuLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuLy8gb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lIGV2ZW50ICgjNjU2NikuXG52YXIgdGltZXJGdW5jO1xuXG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gIHZhciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgaWYgKGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgfTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG59IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKHNldEltbWVkaWF0ZSkpIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0SW1tZWRpYXRlLlxuICAvLyBUZWNoaW5pY2FsbHkgaXQgbGV2ZXJhZ2VzIHRoZSAobWFjcm8pIHRhc2sgcXVldWUsXG4gIC8vIGJ1dCBpdCBpcyBzdGlsbCBhIGJldHRlciBjaG9pY2UgdGhhbiBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KGZsdXNoQ2FsbGJhY2tzLCAwKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV4dFRpY2sgKGNiLCBjdHgpIHtcbiAgdmFyIF9yZXNvbHZlO1xuICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKGN0eCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoIXBlbmRpbmcpIHtcbiAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICB0aW1lckZ1bmMoKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUHJveHkgKi9cblxudmFyIGluaXRQcm94eTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGFsbG93ZWRHbG9iYWxzID0gbWFrZU1hcChcbiAgICAnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTiwnICtcbiAgICAncGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsJyArXG4gICAgJ01hdGgsTnVtYmVyLERhdGUsQXJyYXksT2JqZWN0LEJvb2xlYW4sU3RyaW5nLFJlZ0V4cCxNYXAsU2V0LEpTT04sSW50bCwnICtcbiAgICAncmVxdWlyZScgLy8gZm9yIFdlYnBhY2svQnJvd3NlcmlmeVxuICApO1xuXG4gIHZhciB3YXJuTm9uUHJlc2VudCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHdhcm4oXG4gICAgICBcIlByb3BlcnR5IG9yIG1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgb24gdGhlIGluc3RhbmNlIGJ1dCBcIiArXG4gICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcbiAgICAgICdlaXRoZXIgaW4gdGhlIGRhdGEgb3B0aW9uLCBvciBmb3IgY2xhc3MtYmFzZWQgY29tcG9uZW50cywgYnkgJyArXG4gICAgICAnaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eS4gJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIHdhcm5SZXNlcnZlZFByZWZpeCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHdhcm4oXG4gICAgICBcIlByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggXFxcIiRkYXRhLlwiICsga2V5ICsgXCJcXFwiIGJlY2F1c2UgXCIgK1xuICAgICAgJ3Byb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCBcIiRcIiBvciBcIl9cIiBhcmUgbm90IHByb3hpZWQgaW4gdGhlIFZ1ZSBpbnN0YW5jZSB0byAnICtcbiAgICAgICdwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIFZ1ZSBpbnRlcm5hbHMnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2FwaS8jZGF0YScsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciBoYXNQcm94eSA9XG4gICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG5cbiAgaWYgKGhhc1Byb3h5KSB7XG4gICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyID0gbWFrZU1hcCgnc3RvcCxwcmV2ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCcpO1xuICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzQnVpbHRJbk1vZGlmaWVyKGtleSkpIHtcbiAgICAgICAgICB3YXJuKChcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiICsga2V5KSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgaGFzSGFuZGxlciA9IHtcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzKGtleSkgfHxcbiAgICAgICAgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5jaGFyQXQoMCkgPT09ICdfJyAmJiAhKGtleSBpbiB0YXJnZXQuJGRhdGEpKTtcbiAgICAgIGlmICghaGFzICYmICFpc0FsbG93ZWQpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWRcbiAgICB9XG4gIH07XG5cbiAgdmFyIGdldEhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKHRhcmdldCwga2V5KSB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYgIShrZXkgaW4gdGFyZ2V0KSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgIH1cbiAgfTtcblxuICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkgKHZtKSB7XG4gICAgaWYgKGhhc1Byb3h5KSB7XG4gICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggcHJveHkgaGFuZGxlciB0byB1c2VcbiAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICB2YXIgaGFuZGxlcnMgPSBvcHRpb25zLnJlbmRlciAmJiBvcHRpb25zLnJlbmRlci5fd2l0aFN0cmlwcGVkXG4gICAgICAgID8gZ2V0SGFuZGxlclxuICAgICAgICA6IGhhc0hhbmRsZXI7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSBuZXcgUHJveHkodm0sIGhhbmRsZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHNlZW5PYmplY3RzID0gbmV3IF9TZXQoKTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBvYmplY3QgdG8gZXZva2UgYWxsIGNvbnZlcnRlZFxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBvYmplY3RcbiAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlICh2YWwpIHtcbiAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xuICBzZWVuT2JqZWN0cy5jbGVhcigpO1xufVxuXG5mdW5jdGlvbiBfdHJhdmVyc2UgKHZhbCwgc2Vlbikge1xuICB2YXIgaSwga2V5cztcbiAgdmFyIGlzQSA9IEFycmF5LmlzQXJyYXkodmFsKTtcbiAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fCBPYmplY3QuaXNGcm96ZW4odmFsKSB8fCB2YWwgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWwuX19vYl9fKSB7XG4gICAgdmFyIGRlcElkID0gdmFsLl9fb2JfXy5kZXAuaWQ7XG4gICAgaWYgKHNlZW4uaGFzKGRlcElkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNlZW4uYWRkKGRlcElkKTtcbiAgfVxuICBpZiAoaXNBKSB7XG4gICAgaSA9IHZhbC5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTsgfVxuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pOyB9XG4gIH1cbn1cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHBlcmYgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAgIHBlcmYgJiZcbiAgICBwZXJmLm1hcmsgJiZcbiAgICBwZXJmLm1lYXN1cmUgJiZcbiAgICBwZXJmLmNsZWFyTWFya3MgJiZcbiAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgKSB7XG4gICAgbWFyayA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHBlcmYubWFyayh0YWcpOyB9O1xuICAgIG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgcGVyZi5tZWFzdXJlKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgLy8gcGVyZi5jbGVhck1lYXN1cmVzKG5hbWUpXG4gICAgfTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG5vcm1hbGl6ZUV2ZW50ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQoMCkgPT09ICcmJztcbiAgbmFtZSA9IHBhc3NpdmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIG9uY2UkJDEgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBjaGVja2VkIGZpcnN0XG4gIG5hbWUgPSBvbmNlJCQxID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHZhciBjYXB0dXJlID0gbmFtZS5jaGFyQXQoMCkgPT09ICchJztcbiAgbmFtZSA9IGNhcHR1cmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIG9uY2U6IG9uY2UkJDEsXG4gICAgY2FwdHVyZTogY2FwdHVyZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVGbkludm9rZXIgKGZucywgdm0pIHtcbiAgZnVuY3Rpb24gaW52b2tlciAoKSB7XG4gICAgdmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG4gICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZucykpIHtcbiAgICAgIHZhciBjbG9uZWQgPSBmbnMuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNsb25lZFtpXSwgbnVsbCwgYXJndW1lbnRzJDEsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGhhbmRsZXIgcmV0dXJuIHZhbHVlIGZvciBzaW5nbGUgaGFuZGxlcnNcbiAgICAgIHJldHVybiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhmbnMsIG51bGwsIGFyZ3VtZW50cywgdm0sIFwidi1vbiBoYW5kbGVyXCIpXG4gICAgfVxuICB9XG4gIGludm9rZXIuZm5zID0gZm5zO1xuICByZXR1cm4gaW52b2tlclxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcnMgKFxuICBvbixcbiAgb2xkT24sXG4gIGFkZCxcbiAgcmVtb3ZlJCQxLFxuICBjcmVhdGVPbmNlSGFuZGxlcixcbiAgdm1cbikge1xuICB2YXIgbmFtZSwgZGVmJCQxLCBjdXIsIG9sZCwgZXZlbnQ7XG4gIGZvciAobmFtZSBpbiBvbikge1xuICAgIGRlZiQkMSA9IGN1ciA9IG9uW25hbWVdO1xuICAgIG9sZCA9IG9sZE9uW25hbWVdO1xuICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgaWYgKGlzVW5kZWYoY3VyKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkludmFsaWQgaGFuZGxlciBmb3IgZXZlbnQgXFxcIlwiICsgKGV2ZW50Lm5hbWUpICsgXCJcXFwiOiBnb3QgXCIgKyBTdHJpbmcoY3VyKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZCkpIHtcbiAgICAgIGlmIChpc1VuZGVmKGN1ci5mbnMpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICB9XG4gICAgICBhZGQoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlLCBldmVudC5wYXNzaXZlLCBldmVudC5wYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgcmVtb3ZlJCQxKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZml4ZWQgYnkgeHh4eHh4IOS4tOaXtiBoYWNrIOaOiSB1bmktYXBwIOS4reeahOW8guatpSBuYW1lIHNsb3QgcGFnZVxuICAgICAgaWYoY2hpbGQuYXN5bmNNZXRhICYmIGNoaWxkLmFzeW5jTWV0YS5kYXRhICYmIGNoaWxkLmFzeW5jTWV0YS5kYXRhLnNsb3QgPT09ICdwYWdlJyl7XG4gICAgICAgIChzbG90c1sncGFnZSddIHx8IChzbG90c1sncGFnZSddID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICAgIH1lbHNle1xuICAgICAgICAoc2xvdHMuZGVmYXVsdCB8fCAoc2xvdHMuZGVmYXVsdCA9IFtdKSkucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGlnbm9yZSBzbG90cyB0aGF0IGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZVxuICBmb3IgKHZhciBuYW1lJDEgaW4gc2xvdHMpIHtcbiAgICBpZiAoc2xvdHNbbmFtZSQxXS5ldmVyeShpc1doaXRlc3BhY2UpKSB7XG4gICAgICBkZWxldGUgc2xvdHNbbmFtZSQxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNsb3RzXG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAobm9kZSkge1xuICByZXR1cm4gKG5vZGUuaXNDb21tZW50ICYmICFub2RlLmFzeW5jRmFjdG9yeSkgfHwgbm9kZS50ZXh0ID09PSAnICdcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3RzIChcbiAgc2xvdHMsXG4gIG5vcm1hbFNsb3RzLFxuICBwcmV2U2xvdHNcbikge1xuICB2YXIgcmVzO1xuICB2YXIgaGFzTm9ybWFsU2xvdHMgPSBPYmplY3Qua2V5cyhub3JtYWxTbG90cykubGVuZ3RoID4gMDtcbiAgdmFyIGlzU3RhYmxlID0gc2xvdHMgPyAhIXNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gIHZhciBrZXkgPSBzbG90cyAmJiBzbG90cy4ka2V5O1xuICBpZiAoIXNsb3RzKSB7XG4gICAgcmVzID0ge307XG4gIH0gZWxzZSBpZiAoc2xvdHMuX25vcm1hbGl6ZWQpIHtcbiAgICAvLyBmYXN0IHBhdGggMTogY2hpbGQgY29tcG9uZW50IHJlLXJlbmRlciBvbmx5LCBwYXJlbnQgZGlkIG5vdCBjaGFuZ2VcbiAgICByZXR1cm4gc2xvdHMuX25vcm1hbGl6ZWRcbiAgfSBlbHNlIGlmIChcbiAgICBpc1N0YWJsZSAmJlxuICAgIHByZXZTbG90cyAmJlxuICAgIHByZXZTbG90cyAhPT0gZW1wdHlPYmplY3QgJiZcbiAgICBrZXkgPT09IHByZXZTbG90cy4ka2V5ICYmXG4gICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgIXByZXZTbG90cy4kaGFzTm9ybWFsXG4gICkge1xuICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAvLyBvbmx5IG5lZWQgdG8gbm9ybWFsaXplIG9uY2VcbiAgICByZXR1cm4gcHJldlNsb3RzXG4gIH0gZWxzZSB7XG4gICAgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5JDEgaW4gc2xvdHMpIHtcbiAgICAgIGlmIChzbG90c1trZXkkMV0gJiYga2V5JDFbMF0gIT09ICckJykge1xuICAgICAgICByZXNba2V5JDFdID0gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5JDEsIHNsb3RzW2tleSQxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGV4cG9zZSBub3JtYWwgc2xvdHMgb24gc2NvcGVkU2xvdHNcbiAgZm9yICh2YXIga2V5JDIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICBpZiAoIShrZXkkMiBpbiByZXMpKSB7XG4gICAgICByZXNba2V5JDJdID0gcHJveHlOb3JtYWxTbG90KG5vcm1hbFNsb3RzLCBrZXkkMik7XG4gICAgfVxuICB9XG4gIC8vIGF2b3JpYXogc2VlbXMgdG8gbW9jayBhIG5vbi1leHRlbnNpYmxlICRzY29wZWRTbG90cyBvYmplY3RcbiAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gIGlmIChzbG90cyAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKHNsb3RzKSkge1xuICAgIChzbG90cykuX25vcm1hbGl6ZWQgPSByZXM7XG4gIH1cbiAgZGVmKHJlcywgJyRzdGFibGUnLCBpc1N0YWJsZSk7XG4gIGRlZihyZXMsICcka2V5Jywga2V5KTtcbiAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5LCBmbikge1xuICB2YXIgbm9ybWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzID0gYXJndW1lbnRzLmxlbmd0aCA/IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cykgOiBmbih7fSk7XG4gICAgcmVzID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlcylcbiAgICAgID8gW3Jlc10gLy8gc2luZ2xlIHZub2RlXG4gICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XG4gICAgcmV0dXJuIHJlcyAmJiAoXG4gICAgICByZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAocmVzLmxlbmd0aCA9PT0gMSAmJiByZXNbMF0uaXNDb21tZW50KSAvLyAjOTY1OFxuICAgICkgPyB1bmRlZmluZWRcbiAgICAgIDogcmVzXG4gIH07XG4gIC8vIHRoaXMgaXMgYSBzbG90IHVzaW5nIHRoZSBuZXcgdi1zbG90IHN5bnRheCB3aXRob3V0IHNjb3BlLiBhbHRob3VnaCBpdCBpc1xuICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgLy8gb24gdGhpcy4kc2xvdHMgYmVjYXVzZSB0aGUgdXNhZ2UgaXMgc2VtYW50aWNhbGx5IGEgbm9ybWFsIHNsb3QuXG4gIGlmIChmbi5wcm94eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub3JtYWxTbG90cywga2V5LCB7XG4gICAgICBnZXQ6IG5vcm1hbGl6ZWQsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNsb3RzW2tleV07IH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyB2LWZvciBsaXN0cy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyTGlzdCAoXG4gIHZhbCxcbiAgcmVuZGVyXG4pIHtcbiAgdmFyIHJldCwgaSwgbCwga2V5cywga2V5O1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcihpICsgMSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBbXTtcbiAgICAgIHZhciBpdGVyYXRvciA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XG4gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFpc0RlZihyZXQpKSB7XG4gICAgcmV0ID0gW107XG4gIH1cbiAgKHJldCkuX2lzVkxpc3QgPSB0cnVlO1xuICByZXR1cm4gcmV0XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QgKFxuICBuYW1lLFxuICBmYWxsYmFjayxcbiAgcHJvcHMsXG4gIGJpbmRPYmplY3Rcbikge1xuICB2YXIgc2NvcGVkU2xvdEZuID0gdGhpcy4kc2NvcGVkU2xvdHNbbmFtZV07XG4gIHZhciBub2RlcztcbiAgaWYgKHNjb3BlZFNsb3RGbikgeyAvLyBzY29wZWQgc2xvdFxuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFjaztcbiAgfSBlbHNlIHtcbiAgICBub2RlcyA9IHRoaXMuJHNsb3RzW25hbWVdIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzIChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgaGFzaDtcbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICBrZXkgPT09ICdzdHlsZScgfHxcbiAgICAgICAgICBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICBoYXNoID0gYXNQcm9wIHx8IGNvbmZpZy5tdXN0VXNlUHJvcCh0YWcsIHR5cGUsIGtleSlcbiAgICAgICAgICAgID8gZGF0YS5kb21Qcm9wcyB8fCAoZGF0YS5kb21Qcm9wcyA9IHt9KVxuICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW1lbGl6ZWRLZXkgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICBpZiAoIShjYW1lbGl6ZWRLZXkgaW4gaGFzaCkgJiYgIShoeXBoZW5hdGVkS2V5IGluIGhhc2gpKSB7XG4gICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcblxuICAgICAgICAgIGlmIChpc1N5bmMpIHtcbiAgICAgICAgICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgICAgICAgICBvblsoXCJ1cGRhdGU6XCIgKyBrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFsdWVba2V5XSA9ICRldmVudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIGxvb3AoIGtleSApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU3RhdGljIChcbiAgaW5kZXgsXG4gIGlzSW5Gb3Jcbikge1xuICB2YXIgY2FjaGVkID0gdGhpcy5fc3RhdGljVHJlZXMgfHwgKHRoaXMuX3N0YXRpY1RyZWVzID0gW10pO1xuICB2YXIgdHJlZSA9IGNhY2hlZFtpbmRleF07XG4gIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZS5cbiAgaWYgKHRyZWUgJiYgIWlzSW5Gb3IpIHtcbiAgICByZXR1cm4gdHJlZVxuICB9XG4gIC8vIG90aGVyd2lzZSwgcmVuZGVyIGEgZnJlc2ggdHJlZS5cbiAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbChcbiAgICB0aGlzLl9yZW5kZXJQcm94eSxcbiAgICBudWxsLFxuICAgIHRoaXMgLy8gZm9yIHJlbmRlciBmbnMgZ2VuZXJhdGVkIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCB0ZW1wbGF0ZXNcbiAgKTtcbiAgbWFya1N0YXRpYyh0cmVlLCAoXCJfX3N0YXRpY19fXCIgKyBpbmRleCksIGZhbHNlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3Igdi1vbmNlLlxuICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1hcmtPbmNlIChcbiAgdHJlZSxcbiAgaW5kZXgsXG4gIGtleVxuKSB7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19vbmNlX19cIiArIGluZGV4ICsgKGtleSA/IChcIl9cIiArIGtleSkgOiBcIlwiKSksIHRydWUpO1xuICByZXR1cm4gdHJlZVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljIChcbiAgdHJlZSxcbiAga2V5LFxuICBpc09uY2Vcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0cmVlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRyZWVbaV0gJiYgdHlwZW9mIHRyZWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWVbaV0sIChrZXkgKyBcIl9cIiArIGkpLCBpc09uY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtYXJrU3RhdGljTm9kZSh0cmVlLCBrZXksIGlzT25jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpY05vZGUgKG5vZGUsIGtleSwgaXNPbmNlKSB7XG4gIG5vZGUuaXNTdGF0aWMgPSB0cnVlO1xuICBub2RlLmtleSA9IGtleTtcbiAgbm9kZS5pc09uY2UgPSBpc09uY2U7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kT2JqZWN0TGlzdGVuZXJzIChkYXRhLCB2YWx1ZSkge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICd2LW9uIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb24gPSBkYXRhLm9uID0gZGF0YS5vbiA/IGV4dGVuZCh7fSwgZGF0YS5vbikgOiB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBvbltrZXldO1xuICAgICAgICB2YXIgb3VycyA9IHZhbHVlW2tleV07XG4gICAgICAgIG9uW2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgb3VycykgOiBvdXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVNjb3BlZFNsb3RzIChcbiAgZm5zLCAvLyBzZWUgZmxvdy92bm9kZVxuICByZXMsXG4gIC8vIHRoZSBmb2xsb3dpbmcgYXJlIGFkZGVkIGluIDIuNlxuICBoYXNEeW5hbWljS2V5cyxcbiAgY29udGVudEhhc2hLZXlcbikge1xuICByZXMgPSByZXMgfHwgeyAkc3RhYmxlOiAhaGFzRHluYW1pY0tleXMgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2xvdCA9IGZuc1tpXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzbG90KSkge1xuICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgIH0gZWxzZSBpZiAoc2xvdCkge1xuICAgICAgLy8gbWFya2VyIGZvciByZXZlcnNlIHByb3h5aW5nIHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICBzbG90LmZuLnByb3h5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJlc1tzbG90LmtleV0gPSBzbG90LmZuO1xuICAgIH1cbiAgfVxuICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAocmVzKS4ka2V5ID0gY29udGVudEhhc2hLZXk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzIChiYXNlT2JqLCB2YWx1ZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIga2V5ID0gdmFsdWVzW2ldO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgIGJhc2VPYmpbdmFsdWVzW2ldXSA9IHZhbHVlc1tpICsgMV07XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGlzIGEgc3BlaWNhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiICsga2V5KSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhc2VPYmpcbn1cblxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyICh2YWx1ZSwgc3ltYm9sKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgdGFyZ2V0Ll9uID0gdG9OdW1iZXI7XG4gIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICB0YXJnZXQuX3QgPSByZW5kZXJTbG90O1xuICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gIHRhcmdldC5fbSA9IHJlbmRlclN0YXRpYztcbiAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgdGFyZ2V0Ll9iID0gYmluZE9iamVjdFByb3BzO1xuICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gIHRhcmdldC5fdSA9IHJlc29sdmVTY29wZWRTbG90cztcbiAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICB0YXJnZXQuX3AgPSBwcmVwZW5kTW9kaWZpZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCAoXG4gIGRhdGEsXG4gIHByb3BzLFxuICBjaGlsZHJlbixcbiAgcGFyZW50LFxuICBDdG9yXG4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2YXIgY29udGV4dFZtO1xuICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgfVxuICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcyQxLiRzbG90cykge1xuICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIGRhdGEuc2NvcGVkU2xvdHMsXG4gICAgICAgIHRoaXMkMS4kc2xvdHMgPSByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIHBhcmVudClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzJDEuJHNsb3RzXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsICh7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKVxuICAgIH1cbiAgfSkpO1xuXG4gIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgdmFyIHZub2RlID0gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0ID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7IH07XG4gIH1cbn1cblxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCAoXG4gIEN0b3IsXG4gIHByb3BzRGF0YSxcbiAgZGF0YSxcbiAgY29udGV4dFZtLFxuICBjaGlsZHJlblxuKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWYoZGF0YS5hdHRycykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgfVxuXG4gIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGV4dFZtLFxuICAgIEN0b3JcbiAgKTtcblxuICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAvLyAoZS5nLiBpdCB3YXMgZnJvbSBhIGNhY2hlZCBub3JtYWwgc2xvdCkgdGhlIGZuQ29udGV4dCBjYXVzZXMgbmFtZWQgc2xvdHNcbiAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICBjbG9uZS5mbkNvbnRleHQgPSBjb250ZXh0Vm07XG4gIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9IHJlbmRlckNvbnRleHQ7XG4gIH1cbiAgaWYgKGRhdGEuc2xvdCkge1xuICAgIChjbG9uZS5kYXRhIHx8IChjbG9uZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5zbG90O1xuICB9XG4gIHJldHVybiBjbG9uZVxufVxuXG5mdW5jdGlvbiBtZXJnZVByb3BzICh0bywgZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBpbmxpbmUgaG9va3MgdG8gYmUgaW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQgKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxuICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmVcbiAgICApIHtcbiAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgdmFyIG1vdW50ZWROb2RlID0gdm5vZGU7IC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgIGNvbXBvbmVudFZOb2RlSG9va3MucHJlcGF0Y2gobW91bnRlZE5vZGUsIG1vdW50ZWROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgYWN0aXZlSW5zdGFuY2VcbiAgICAgICk7XG4gICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBoeWRyYXRpbmcpO1xuICAgIH1cbiAgfSxcblxuICBwcmVwYXRjaDogZnVuY3Rpb24gcHJlcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIHVwZGF0ZUNoaWxkQ29tcG9uZW50KFxuICAgICAgY2hpbGQsXG4gICAgICBvcHRpb25zLnByb3BzRGF0YSwgLy8gdXBkYXRlZCBwcm9wc1xuICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgb3B0aW9ucy5jaGlsZHJlbiAvLyBuZXcgY2hpbGRyZW5cbiAgICApO1xuICB9LFxuXG4gIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0ICh2bm9kZSkge1xuICAgIHZhciBjb250ZXh0ID0gdm5vZGUuY29udGV4dDtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAvLyB2dWUtcm91dGVyIzEyMTJcbiAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgLy8gb24gaW5jb3JyZWN0IGNoaWxkcmVuLiBJbnN0ZWFkIHdlIHB1c2ggdGhlbSBpbnRvIGEgcXVldWUgd2hpY2ggd2lsbFxuICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXG4gICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gIEN0b3IsXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICBpZiAoaXNVbmRlZihDdG9yKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcblxuICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgfVxuXG4gIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgLy8gcmVqZWN0LlxuICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybigoXCJJbnZhbGlkIENvbXBvbmVudCBkZWZpbml0aW9uOiBcIiArIChTdHJpbmcoQ3RvcikpKSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gYXN5bmMgY29tcG9uZW50XG4gIHZhciBhc3luY0ZhY3Rvcnk7XG4gIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9yKTtcbiAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICBhc3luY0ZhY3RvcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0YWdcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcbiAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgfVxuXG4gIC8vIGV4dHJhY3QgcHJvcHNcbiAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pXG4gIH1cblxuICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUgdHJlYXRlZCBhc1xuICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICB2YXIgbGlzdGVuZXJzID0gZGF0YS5vbjtcbiAgLy8gcmVwbGFjZSB3aXRoIGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gIGRhdGEub24gPSBkYXRhLm5hdGl2ZU9uO1xuXG4gIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAvLyBvdGhlciB0aGFuIHByb3BzICYgbGlzdGVuZXJzICYgc2xvdFxuXG4gICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgIGRhdGEgPSB7fTtcbiAgICBpZiAoc2xvdCkge1xuICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xuXG4gIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUgfHwgdGFnO1xuICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgKFwidnVlLWNvbXBvbmVudC1cIiArIChDdG9yLmNpZCkgKyAobmFtZSA/IChcIi1cIiArIG5hbWUpIDogJycpKSxcbiAgICBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgIHsgQ3RvcjogQ3RvciwgcHJvcHNEYXRhOiBwcm9wc0RhdGEsIGxpc3RlbmVyczogbGlzdGVuZXJzLCB0YWc6IHRhZywgY2hpbGRyZW46IGNoaWxkcmVuIH0sXG4gICAgYXN5bmNGYWN0b3J5XG4gICk7XG5cbiAgcmV0dXJuIHZub2RlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUgKFxuICB2bm9kZSwgLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG4gIHBhcmVudCAvLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbikge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBfaXNDb21wb25lbnQ6IHRydWUsXG4gICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICBwYXJlbnQ6IHBhcmVudFxuICB9O1xuICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICB2YXIgaW5saW5lVGVtcGxhdGUgPSB2bm9kZS5kYXRhLmlubGluZVRlbXBsYXRlO1xuICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gIH1cbiAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucylcbn1cblxuZnVuY3Rpb24gaW5zdGFsbENvbXBvbmVudEhvb2tzIChkYXRhKSB7XG4gIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9NZXJnZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAgdmFyIGV4aXN0aW5nID0gaG9va3Nba2V5XTtcbiAgICB2YXIgdG9NZXJnZSA9IGNvbXBvbmVudFZOb2RlSG9va3Nba2V5XTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IHRvTWVyZ2UgJiYgIShleGlzdGluZyAmJiBleGlzdGluZy5fbWVyZ2VkKSkge1xuICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rJDEodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VIb29rJDEgKGYxLCBmMikge1xuICB2YXIgbWVyZ2VkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAvLyBmbG93IGNvbXBsYWlucyBhYm91dCBleHRyYSBhcmdzIHdoaWNoIGlzIHdoeSB3ZSB1c2UgYW55XG4gICAgZjEoYSwgYik7XG4gICAgZjIoYSwgYik7XG4gIH07XG4gIG1lcmdlZC5fbWVyZ2VkID0gdHJ1ZTtcbiAgcmV0dXJuIG1lcmdlZFxufVxuXG4vLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgaW5mbyAodmFsdWUgYW5kIGNhbGxiYWNrKSBpbnRvXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3RpdmVseS5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsIChvcHRpb25zLCBkYXRhKSB7XG4gIHZhciBwcm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xuICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAnaW5wdXQnXG4gIDsoZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KSlbcHJvcF0gPSBkYXRhLm1vZGVsLnZhbHVlO1xuICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICB2YXIgZXhpc3RpbmcgPSBvbltldmVudF07XG4gIHZhciBjYWxsYmFjayA9IGRhdGEubW9kZWwuY2FsbGJhY2s7XG4gIGlmIChpc0RlZihleGlzdGluZykpIHtcbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICA/IGV4aXN0aW5nLmluZGV4T2YoY2FsbGJhY2spID09PSAtMVxuICAgICAgICA6IGV4aXN0aW5nICE9PSBjYWxsYmFja1xuICAgICkge1xuICAgICAgb25bZXZlbnRdID0gW2NhbGxiYWNrXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvbltldmVudF0gPSBjYWxsYmFjaztcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgY29udGV4dCxcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgbm9ybWFsaXphdGlvblR5cGUsXG4gIGFsd2F5c05vcm1hbGl6ZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNUcnVlKGFsd2F5c05vcm1hbGl6ZSkpIHtcbiAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlXG4pIHtcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChkYXRhKS5fX29iX18pKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCJBdm9pZCB1c2luZyBvYnNlcnZlZCBkYXRhIG9iamVjdCBhcyB2bm9kZSBkYXRhOiBcIiArIChKU09OLnN0cmluZ2lmeShkYXRhKSkgKyBcIlxcblwiICtcbiAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgIHRhZyA9IGRhdGEuaXM7XG4gIH1cbiAgaWYgKCF0YWcpIHtcbiAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICkge1xuICAgIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdBdm9pZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9uIGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgfVxuICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9XG4gIHZhciB2bm9kZSwgbnM7XG4gIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgIHZhciBDdG9yO1xuICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCghZGF0YSB8fCAhZGF0YS5wcmUpICYmIGlzRGVmKEN0b3IgPSByZXNvbHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkge1xuICAgICAgLy8gY29tcG9uZW50XG4gICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICB0YWcsIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudCh0YWcsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcbiAgICBpZiAoaXNEZWYobnMpKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgIGlmIChpc0RlZihkYXRhKSkgeyByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTsgfVxuICAgIHJldHVybiB2bm9kZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseU5TICh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gIHZub2RlLm5zID0gbnM7XG4gIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxuICAgIG5zID0gdW5kZWZpbmVkO1xuICAgIGZvcmNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiYgKFxuICAgICAgICBpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgYXBwbHlOUyhjaGlsZCwgbnMsIGZvcmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gcmVmICM1MzE4XG4vLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuLy8gOmNsYXNzIGFyZSB1c2VkIG9uIHNsb3Qgbm9kZXNcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzIChkYXRhKSB7XG4gIGlmIChpc09iamVjdChkYXRhLnN0eWxlKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xuICB9XG4gIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuY2xhc3MpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gIHZhciBwYXJlbnRWbm9kZSA9IHZtLiR2bm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICB2YXIgcmVuZGVyQ29udGV4dCA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmNvbnRleHQ7XG4gIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gIHZtLiRzY29wZWRTbG90cyA9IGVtcHR5T2JqZWN0O1xuICAvLyBiaW5kIHRoZSBjcmVhdGVFbGVtZW50IGZuIHRvIHRoaXMgaW5zdGFuY2VcbiAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAvLyBpbnRlcm5hbCB2ZXJzaW9uIGlzIHVzZWQgYnkgcmVuZGVyIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIHRlbXBsYXRlc1xuICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAvLyB1c2VyLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucy5cbiAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgLy8gJGF0dHJzICYgJGxpc3RlbmVycyBhcmUgZXhwb3NlZCBmb3IgZWFzaWVyIEhPQyBjcmVhdGlvbi5cbiAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gIH1cbn1cblxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgIHZhciBfcGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgIHZtLiRzY29wZWRTbG90c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcGFyZW50IHZub2RlLiB0aGlzIGFsbG93cyByZW5kZXIgZnVuY3Rpb25zIHRvIGhhdmUgYWNjZXNzXG4gICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgIC8vIHJlbmRlciBzZWxmXG4gICAgdmFyIHZub2RlO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gbWFpbnRhaW4gYSBzdGFjayBiZWNhdWVzIGFsbCByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSB2bTtcbiAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyRXJyb3JcIik7XG4gICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgY29udGFpbnMgb25seSBhIHNpbmdsZSBub2RlLCBhbGxvdyBpdFxuICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSAmJiB2bm9kZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZub2RlID0gdm5vZGVbMF07XG4gICAgfVxuICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICBpZiAoISh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcmVudFxuICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtcbiAgICByZXR1cm4gdm5vZGVcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVuc3VyZUN0b3IgKGNvbXAsIGJhc2UpIHtcbiAgaWYgKFxuICAgIGNvbXAuX19lc01vZHVsZSB8fFxuICAgIChoYXNTeW1ib2wgJiYgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbiAgKSB7XG4gICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QoY29tcClcbiAgICA/IGJhc2UuZXh0ZW5kKGNvbXApXG4gICAgOiBjb21wXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIgKFxuICBmYWN0b3J5LFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gIG5vZGUuYXN5bmNGYWN0b3J5ID0gZmFjdG9yeTtcbiAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgcmV0dXJuIG5vZGVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgZmFjdG9yeSxcbiAgYmFzZUN0b3Jcbikge1xuICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmVycm9yQ29tcFxuICB9XG5cbiAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxuXG4gIHZhciBvd25lciA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgaWYgKG93bmVyICYmIGlzRGVmKGZhY3Rvcnkub3duZXJzKSAmJiBmYWN0b3J5Lm93bmVycy5pbmRleE9mKG93bmVyKSA9PT0gLTEpIHtcbiAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICBmYWN0b3J5Lm93bmVycy5wdXNoKG93bmVyKTtcbiAgfVxuXG4gIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wXG4gIH1cblxuICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgIHZhciBvd25lcnMgPSBmYWN0b3J5Lm93bmVycyA9IFtvd25lcl07XG4gICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgIHZhciB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgIHZhciB0aW1lclRpbWVvdXQgPSBudWxsXG5cbiAgICA7KG93bmVyKS4kb24oJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKG93bmVycywgb3duZXIpOyB9KTtcblxuICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3duZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAob3duZXJzW2ldKS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgICBvd25lcnMubGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKHRpbWVyTG9hZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lckxvYWRpbmcpO1xuICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVyVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lclRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIC8vIGNhY2hlIHJlc29sdmVkXG4gICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9ub3VzIHJlc29sdmVcbiAgICAgIC8vIChhc3luYyByZXNvbHZlcyBhcmUgc2hpbW1lZCBhcyBzeW5jaHJvbm91cyBkdXJpbmcgU1NSKVxuICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBcIiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjogXCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzKSkge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UocmVzLmNvbXBvbmVudCkpIHtcbiAgICAgICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZXMuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLnRpbWVvdXQpKSB7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICAgICAgICAgID8gKFwidGltZW91dCAoXCIgKyAocmVzLnRpbWVvdXQpICsgXCJtcylcIilcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHJlcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN5bmMgPSBmYWxzZTtcbiAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ1xuICAgICAgPyBmYWN0b3J5LmxvYWRpbmdDb21wXG4gICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCAoY2hpbGRyZW4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgIHJldHVybiBjXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyAodm0pIHtcbiAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciB0YXJnZXQ7XG5cbmZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb24oZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9mZihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0O1xuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICB2bSxcbiAgbGlzdGVuZXJzLFxuICBvbGRMaXN0ZW5lcnNcbikge1xuICB0YXJnZXQgPSB2bTtcbiAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGFsbFxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpJDEgPCBsOyBpJDErKykge1xuICAgICAgICB2bS4kb2ZmKGV2ZW50W2kkMV0sIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIGlmICghZm4pIHtcbiAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgdmFyIGNiO1xuICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjYiA9IGNic1tpXTtcbiAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICB0aXAoXG4gICAgICAgICAgXCJFdmVudCBcXFwiXCIgKyBsb3dlckNhc2VFdmVudCArIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgIFwidi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtcbiAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIChoeXBoZW5hdGUoZXZlbnQpKSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoY2JzKSB7XG4gICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGluZm8gPSBcImV2ZW50IGhhbmRsZXIgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiXCI7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gIHZhciBwcmV2QWN0aXZlSW5zdGFuY2UgPSBhY3RpdmVJbnN0YW5jZTtcbiAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBhY3RpdmVJbnN0YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TGlmZWN5Y2xlICh2bSkge1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuXG4gIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gIHZhciBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgaWYgKHBhcmVudCAmJiAhb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cbiAgICBwYXJlbnQuJGNoaWxkcmVuLnB1c2godm0pO1xuICB9XG5cbiAgdm0uJHBhcmVudCA9IHBhcmVudDtcbiAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcblxuICB2bS4kY2hpbGRyZW4gPSBbXTtcbiAgdm0uJHJlZnMgPSB7fTtcblxuICB2bS5fd2F0Y2hlciA9IG51bGw7XG4gIHZtLl9pbmFjdGl2ZSA9IG51bGw7XG4gIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICB2bS5faXNNb3VudGVkID0gZmFsc2U7XG4gIHZtLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHZtKTtcbiAgICB2bS5fdm5vZGUgPSB2bm9kZTtcbiAgICAvLyBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyBpcyBpbmplY3RlZCBpbiBlbnRyeSBwb2ludHNcbiAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5cbiAgICBpZiAoIXByZXZWbm9kZSkge1xuICAgICAgLy8gaW5pdGlhbCByZW5kZXJcbiAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGVzXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgfVxuICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmIChwcmV2RWwpIHtcbiAgICAgIHByZXZFbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHZtLiRlbCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSB2bTtcbiAgICB9XG4gICAgLy8gaWYgcGFyZW50IGlzIGFuIEhPQywgdXBkYXRlIGl0cyAkZWwgYXMgd2VsbFxuICAgIGlmICh2bS4kdm5vZGUgJiYgdm0uJHBhcmVudCAmJiB2bS4kdm5vZGUgPT09IHZtLiRwYXJlbnQuX3Zub2RlKSB7XG4gICAgICB2bS4kcGFyZW50LiRlbCA9IHZtLiRlbDtcbiAgICB9XG4gICAgLy8gdXBkYXRlZCBob29rIGlzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGVuc3VyZSB0aGF0IGNoaWxkcmVuIGFyZVxuICAgIC8vIHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVEZXN0cm95Jyk7XG4gICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IHZtLiRwYXJlbnQ7XG4gICAgaWYgKHBhcmVudCAmJiAhcGFyZW50Ll9pc0JlaW5nRGVzdHJveWVkICYmICF2bS4kb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgcmVtb3ZlKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICB9XG4gICAgLy8gdGVhcmRvd24gd2F0Y2hlcnNcbiAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIHZhciBpID0gdm0uX3dhdGNoZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2bS5fd2F0Y2hlcnNbaV0udGVhcmRvd24oKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcbiAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cbiAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICB2bS5fZGF0YS5fX29iX18udm1Db3VudC0tO1xuICAgIH1cbiAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICB2bS5faXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIGludm9rZSBkZXN0cm95IGhvb2tzIG9uIGN1cnJlbnQgcmVuZGVyZWQgdHJlZVxuICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgIC8vIGZpcmUgZGVzdHJveWVkIGhvb2tcbiAgICBjYWxsSG9vayh2bSwgJ2Rlc3Ryb3llZCcpO1xuICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgdm0uJG9mZigpO1xuICAgIC8vIHJlbW92ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgIGlmICh2bS4kdm5vZGUpIHtcbiAgICAgIHZtLiR2bm9kZS5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQgKFxuICB2bSxcbiAgcHJvcHNEYXRhLFxuICBsaXN0ZW5lcnMsXG4gIHBhcmVudFZub2RlLFxuICByZW5kZXJDaGlsZHJlblxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRldGVybWluZSB3aGV0aGVyIGNvbXBvbmVudCBoYXMgc2xvdCBjaGlsZHJlblxuICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIG92ZXJ3cml0aW5nICRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbi5cblxuICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgZHluYW1pYyBzY29wZWRTbG90cyAoaGFuZC13cml0dGVuIG9yIGNvbXBpbGVkIGJ1dCB3aXRoXG4gIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gIC8vIFwiJHN0YWJsZVwiIG1hcmtlci5cbiAgdmFyIG5ld1Njb3BlZFNsb3RzID0gcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cztcbiAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICB2YXIgaGFzRHluYW1pY1Njb3BlZFNsb3QgPSAhIShcbiAgICAobmV3U2NvcGVkU2xvdHMgJiYgIW5ld1Njb3BlZFNsb3RzLiRzdGFibGUpIHx8XG4gICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAobmV3U2NvcGVkU2xvdHMgJiYgdm0uJHNjb3BlZFNsb3RzLiRrZXkgIT09IG5ld1Njb3BlZFNsb3RzLiRrZXkpXG4gICk7XG5cbiAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xuICAvLyB1cGRhdGUuIER5bmFtaWMgc2NvcGVkIHNsb3RzIG1heSBhbHNvIGhhdmUgY2hhbmdlZC4gSW4gc3VjaCBjYXNlcywgYSBmb3JjZWRcbiAgLy8gdXBkYXRlIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG4gIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEoXG4gICAgcmVuZGVyQ2hpbGRyZW4gfHwgICAgICAgICAgICAgICAvLyBoYXMgbmV3IHN0YXRpYyBzbG90c1xuICAgIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiB8fCAgLy8gaGFzIG9sZCBzdGF0aWMgc2xvdHNcbiAgICBoYXNEeW5hbWljU2NvcGVkU2xvdFxuICApO1xuXG4gIHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICB2bS4kdm5vZGUgPSBwYXJlbnRWbm9kZTsgLy8gdXBkYXRlIHZtJ3MgcGxhY2Vob2xkZXIgbm9kZSB3aXRob3V0IHJlLXJlbmRlclxuXG4gIGlmICh2bS5fdm5vZGUpIHsgLy8gdXBkYXRlIGNoaWxkIHRyZWUncyBwYXJlbnRcbiAgICB2bS5fdm5vZGUucGFyZW50ID0gcGFyZW50Vm5vZGU7XG4gIH1cbiAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuID0gcmVuZGVyQ2hpbGRyZW47XG5cbiAgLy8gdXBkYXRlICRhdHRycyBhbmQgJGxpc3RlbmVycyBoYXNoXG4gIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAvLyB1c2VkIHRoZW0gZHVyaW5nIHJlbmRlclxuICB2bS4kYXR0cnMgPSBwYXJlbnRWbm9kZS5kYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0O1xuICB2bS4kbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuXG4gIC8vIHVwZGF0ZSBwcm9wc1xuICBpZiAocHJvcHNEYXRhICYmIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICB2YXIgcHJvcHMgPSB2bS5fcHJvcHM7XG4gICAgdmFyIHByb3BLZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzIHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wS2V5c1tpXTtcbiAgICAgIHZhciBwcm9wT3B0aW9ucyA9IHZtLiRvcHRpb25zLnByb3BzOyAvLyB3dGYgZmxvdz9cbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgfVxuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAvLyBrZWVwIGEgY29weSBvZiByYXcgcHJvcHNEYXRhXG4gICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhID0gcHJvcHNEYXRhO1xuICB9XG5cbiAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZhciBvbGRMaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgb2xkTGlzdGVuZXJzKTtcblxuICAvLyByZXNvbHZlIHNsb3RzICsgZm9yY2UgdXBkYXRlIGlmIGhhcyBjaGlsZHJlblxuICBpZiAobmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhyZW5kZXJDaGlsZHJlbiwgcGFyZW50Vm5vZGUuY29udGV4dCk7XG4gICAgdm0uJGZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUgKHZtKSB7XG4gIHdoaWxlICh2bSAmJiAodm0gPSB2bS4kcGFyZW50KSkge1xuICAgIGlmICh2bS5faW5hY3RpdmUpIHsgcmV0dXJuIHRydWUgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gIGlmIChkaXJlY3QpIHtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gIGlmIChkaXJlY3QpIHtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSB0cnVlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG4gIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgdm0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnZGVhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsSG9vayAodm0sIGhvb2spIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGxpZmVjeWNsZSBob29rc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICB2YXIgaW5mbyA9IGhvb2sgKyBcIiBob29rXCI7XG4gIGlmIChoYW5kbGVycykge1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhoYW5kbGVyc1tpXSwgdm0sIG51bGwsIHZtLCBpbmZvKTtcbiAgICB9XG4gIH1cbiAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICB2bS4kZW1pdCgnaG9vazonICsgaG9vayk7XG4gIH1cbiAgcG9wVGFyZ2V0KCk7XG59XG5cbi8qICAqL1xuXG52YXIgTUFYX1VQREFURV9DT1VOVCA9IDEwMDtcblxudmFyIHF1ZXVlID0gW107XG52YXIgYWN0aXZhdGVkQ2hpbGRyZW4gPSBbXTtcbnZhciBoYXMgPSB7fTtcbnZhciBjaXJjdWxhciA9IHt9O1xudmFyIHdhaXRpbmcgPSBmYWxzZTtcbnZhciBmbHVzaGluZyA9IGZhbHNlO1xudmFyIGluZGV4ID0gMDtcblxuLyoqXG4gKiBSZXNldCB0aGUgc2NoZWR1bGVyJ3Mgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlc2V0U2NoZWR1bGVyU3RhdGUgKCkge1xuICBpbmRleCA9IHF1ZXVlLmxlbmd0aCA9IGFjdGl2YXRlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIGhhcyA9IHt9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNpcmN1bGFyID0ge307XG4gIH1cbiAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG59XG5cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcblxuLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cbnZhciBnZXROb3cgPSBEYXRlLm5vdztcblxuLy8gRGV0ZXJtaW5lIHdoYXQgZXZlbnQgdGltZXN0YW1wIHRoZSBicm93c2VyIGlzIHVzaW5nLiBBbm5veWluZ2x5LCB0aGVcbi8vIHRpbWVzdGFtcCBjYW4gZWl0aGVyIGJlIGhpLXJlcyAocmVsYXRpdmUgdG8gcGFnZSBsb2FkKSBvciBsb3ctcmVzXG4vLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbi8vIHNhbWUgdGltZXN0YW1wIHR5cGUgd2hlbiBzYXZpbmcgdGhlIGZsdXNoIHRpbWVzdGFtcC5cbi8vIEFsbCBJRSB2ZXJzaW9ucyB1c2UgbG93LXJlcyBldmVudCB0aW1lc3RhbXBzLCBhbmQgaGF2ZSBwcm9ibGVtYXRpYyBjbG9ja1xuLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbmlmIChpbkJyb3dzZXIgJiYgIWlzSUUpIHtcbiAgdmFyIHBlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICBpZiAoXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nICYmXG4gICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXBcbiAgKSB7XG4gICAgLy8gaWYgdGhlIGV2ZW50IHRpbWVzdGFtcCwgYWx0aG91Z2ggZXZhbHVhdGVkIEFGVEVSIHRoZSBEYXRlLm5vdygpLCBpc1xuICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lciB0aW1lc3RhbXBzIGFzXG4gICAgLy8gd2VsbC5cbiAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgY3VycmVudEZsdXNoVGltZXN0YW1wID0gZ2V0Tm93KCk7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgIH1cbiAgICBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaGFzW2lkXSA9IG51bGw7XG4gICAgd2F0Y2hlci5ydW4oKTtcbiAgICAvLyBpbiBkZXYgYnVpbGQsIGNoZWNrIGFuZCBzdG9wIGNpcmN1bGFyIHVwZGF0ZXMuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcbiAgICAgIGlmIChjaXJjdWxhcltpZF0gPiBNQVhfVVBEQVRFX0NPVU5UKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCAnICsgKFxuICAgICAgICAgICAgd2F0Y2hlci51c2VyXG4gICAgICAgICAgICAgID8gKFwiaW4gd2F0Y2hlciB3aXRoIGV4cHJlc3Npb24gXFxcIlwiICsgKHdhdGNoZXIuZXhwcmVzc2lvbikgKyBcIlxcXCJcIilcbiAgICAgICAgICAgICAgOiBcImluIGEgY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbi5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgd2F0Y2hlci52bVxuICAgICAgICApO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGtlZXAgY29waWVzIG9mIHBvc3QgcXVldWVzIGJlZm9yZSByZXNldHRpbmcgc3RhdGVcbiAgdmFyIGFjdGl2YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgdmFyIHVwZGF0ZWRRdWV1ZSA9IHF1ZXVlLnNsaWNlKCk7XG5cbiAgcmVzZXRTY2hlZHVsZXJTdGF0ZSgpO1xuXG4gIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICBjYWxsQWN0aXZhdGVkSG9va3MoYWN0aXZhdGVkUXVldWUpO1xuICBjYWxsVXBkYXRlZEhvb2tzKHVwZGF0ZWRRdWV1ZSk7XG5cbiAgLy8gZGV2dG9vbCBob29rXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZGV2dG9vbHMgJiYgY29uZmlnLmRldnRvb2xzKSB7XG4gICAgZGV2dG9vbHMuZW1pdCgnZmx1c2gnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsVXBkYXRlZEhvb2tzIChxdWV1ZSkge1xuICB2YXIgaSA9IHF1ZXVlLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciB3YXRjaGVyID0gcXVldWVbaV07XG4gICAgdmFyIHZtID0gd2F0Y2hlci52bTtcbiAgICBpZiAodm0uX3dhdGNoZXIgPT09IHdhdGNoZXIgJiYgdm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICBjYWxsSG9vayh2bSwgJ3VwZGF0ZWQnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBRdWV1ZSBhIGtlcHQtYWxpdmUgY29tcG9uZW50IHRoYXQgd2FzIGFjdGl2YXRlZCBkdXJpbmcgcGF0Y2guXG4gKiBUaGUgcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIGVudGlyZSB0cmVlIGhhcyBiZWVuIHBhdGNoZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50ICh2bSkge1xuICAvLyBzZXR0aW5nIF9pbmFjdGl2ZSB0byBmYWxzZSBoZXJlIHNvIHRoYXQgYSByZW5kZXIgZnVuY3Rpb24gY2FuXG4gIC8vIHJlbHkgb24gY2hlY2tpbmcgd2hldGhlciBpdCdzIGluIGFuIGluYWN0aXZlIHRyZWUgKGUuZy4gcm91dGVyLXZpZXcpXG4gIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICBhY3RpdmF0ZWRDaGlsZHJlbi5wdXNoKHZtKTtcbn1cblxuZnVuY3Rpb24gY2FsbEFjdGl2YXRlZEhvb2tzIChxdWV1ZSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgcXVldWVbaV0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHF1ZXVlW2ldLCB0cnVlIC8qIHRydWUgKi8pO1xuICB9XG59XG5cbi8qKlxuICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAqIEpvYnMgd2l0aCBkdXBsaWNhdGUgSURzIHdpbGwgYmUgc2tpcHBlZCB1bmxlc3MgaXQnc1xuICogcHVzaGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGJlaW5nIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlV2F0Y2hlciAod2F0Y2hlcikge1xuICB2YXIgaWQgPSB3YXRjaGVyLmlkO1xuICBpZiAoaGFzW2lkXSA9PSBudWxsKSB7XG4gICAgaGFzW2lkXSA9IHRydWU7XG4gICAgaWYgKCFmbHVzaGluZykge1xuICAgICAgcXVldWUucHVzaCh3YXRjaGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgYWxyZWFkeSBmbHVzaGluZywgc3BsaWNlIHRoZSB3YXRjaGVyIGJhc2VkIG9uIGl0cyBpZFxuICAgICAgLy8gaWYgYWxyZWFkeSBwYXN0IGl0cyBpZCwgaXQgd2lsbCBiZSBydW4gbmV4dCBpbW1lZGlhdGVseS5cbiAgICAgIHZhciBpID0gcXVldWUubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpID4gaW5kZXggJiYgcXVldWVbaV0uaWQgPiB3YXRjaGVyLmlkKSB7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICAgIHF1ZXVlLnNwbGljZShpICsgMSwgMCwgd2F0Y2hlcik7XG4gICAgfVxuICAgIC8vIHF1ZXVlIHRoZSBmbHVzaFxuICAgIGlmICghd2FpdGluZykge1xuICAgICAgd2FpdGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgZmx1c2hTY2hlZHVsZXJRdWV1ZSgpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIG5leHRUaWNrKGZsdXNoU2NoZWR1bGVyUXVldWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuXG5cbnZhciB1aWQkMiA9IDA7XG5cbi8qKlxuICogQSB3YXRjaGVyIHBhcnNlcyBhbiBleHByZXNzaW9uLCBjb2xsZWN0cyBkZXBlbmRlbmNpZXMsXG4gKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICogVGhpcyBpcyB1c2VkIGZvciBib3RoIHRoZSAkd2F0Y2goKSBhcGkgYW5kIGRpcmVjdGl2ZXMuXG4gKi9cbnZhciBXYXRjaGVyID0gZnVuY3Rpb24gV2F0Y2hlciAoXG4gIHZtLFxuICBleHBPckZuLFxuICBjYixcbiAgb3B0aW9ucyxcbiAgaXNSZW5kZXJXYXRjaGVyXG4pIHtcbiAgdGhpcy52bSA9IHZtO1xuICBpZiAoaXNSZW5kZXJXYXRjaGVyKSB7XG4gICAgdm0uX3dhdGNoZXIgPSB0aGlzO1xuICB9XG4gIHZtLl93YXRjaGVycy5wdXNoKHRoaXMpO1xuICAvLyBvcHRpb25zXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdGhpcy5kZWVwID0gISFvcHRpb25zLmRlZXA7XG4gICAgdGhpcy51c2VyID0gISFvcHRpb25zLnVzZXI7XG4gICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XG4gICAgdGhpcy5zeW5jID0gISFvcHRpb25zLnN5bmM7XG4gICAgdGhpcy5iZWZvcmUgPSBvcHRpb25zLmJlZm9yZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRlZXAgPSB0aGlzLnVzZXIgPSB0aGlzLmxhenkgPSB0aGlzLnN5bmMgPSBmYWxzZTtcbiAgfVxuICB0aGlzLmNiID0gY2I7XG4gIHRoaXMuaWQgPSArK3VpZCQyOyAvLyB1aWQgZm9yIGJhdGNoaW5nXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5kaXJ0eSA9IHRoaXMubGF6eTsgLy8gZm9yIGxhenkgd2F0Y2hlcnNcbiAgdGhpcy5kZXBzID0gW107XG4gIHRoaXMubmV3RGVwcyA9IFtdO1xuICB0aGlzLmRlcElkcyA9IG5ldyBfU2V0KCk7XG4gIHRoaXMubmV3RGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5leHByZXNzaW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgID8gZXhwT3JGbi50b1N0cmluZygpXG4gICAgOiAnJztcbiAgLy8gcGFyc2UgZXhwcmVzc2lvbiBmb3IgZ2V0dGVyXG4gIGlmICh0eXBlb2YgZXhwT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuZ2V0dGVyID0gZXhwT3JGbjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmdldHRlciA9IHBhcnNlUGF0aChleHBPckZuKTtcbiAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XG4gICAgICB0aGlzLmdldHRlciA9IG5vb3A7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIiArIGV4cE9yRm4gKyBcIlxcXCIgXCIgK1xuICAgICAgICAnV2F0Y2hlciBvbmx5IGFjY2VwdHMgc2ltcGxlIGRvdC1kZWxpbWl0ZWQgcGF0aHMuICcgK1xuICAgICAgICAnRm9yIGZ1bGwgY29udHJvbCwgdXNlIGEgZnVuY3Rpb24gaW5zdGVhZC4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgdGhpcy52YWx1ZSA9IHRoaXMubGF6eVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiB0aGlzLmdldCgpO1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoKSB7XG4gIHB1c2hUYXJnZXQodGhpcyk7XG4gIHZhciB2YWx1ZTtcbiAgdmFyIHZtID0gdGhpcy52bTtcbiAgdHJ5IHtcbiAgICB2YWx1ZSA9IHRoaXMuZ2V0dGVyLmNhbGwodm0sIHZtKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAoXCJnZXR0ZXIgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRoaXMuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgIC8vIGRlcGVuZGVuY2llcyBmb3IgZGVlcCB3YXRjaGluZ1xuICAgIGlmICh0aGlzLmRlZXApIHtcbiAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgcG9wVGFyZ2V0KCk7XG4gICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufTtcblxuLyoqXG4gKiBBZGQgYSBkZXBlbmRlbmN5IHRvIHRoaXMgZGlyZWN0aXZlLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5hZGREZXAgPSBmdW5jdGlvbiBhZGREZXAgKGRlcCkge1xuICB2YXIgaWQgPSBkZXAuaWQ7XG4gIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgIHRoaXMubmV3RGVwSWRzLmFkZChpZCk7XG4gICAgdGhpcy5uZXdEZXBzLnB1c2goZGVwKTtcbiAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgIGRlcC5hZGRTdWIodGhpcyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmNsZWFudXBEZXBzID0gZnVuY3Rpb24gY2xlYW51cERlcHMgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgZGVwID0gdGhpcy5kZXBzW2ldO1xuICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgIGRlcC5yZW1vdmVTdWIodGhpcyk7XG4gICAgfVxuICB9XG4gIHZhciB0bXAgPSB0aGlzLmRlcElkcztcbiAgdGhpcy5kZXBJZHMgPSB0aGlzLm5ld0RlcElkcztcbiAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gIHRoaXMubmV3RGVwSWRzLmNsZWFyKCk7XG4gIHRtcCA9IHRoaXMuZGVwcztcbiAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICB0aGlzLm5ld0RlcHMgPSB0bXA7XG4gIHRoaXMubmV3RGVwcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBTdWJzY3JpYmVyIGludGVyZmFjZS5cbiAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aGlzLmxhenkpIHtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICB0aGlzLnJ1bigpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTY2hlZHVsZXIgam9iIGludGVyZmFjZS5cbiAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIHJ1biAoKSB7XG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgIT09IHRoaXMudmFsdWUgfHxcbiAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgLy8gd2hlbiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUsIGJlY2F1c2UgdGhlIHZhbHVlIG1heVxuICAgICAgLy8gaGF2ZSBtdXRhdGVkLlxuICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICB0aGlzLmRlZXBcbiAgICApIHtcbiAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBoYW5kbGVFcnJvcihlLCB0aGlzLnZtLCAoXCJjYWxsYmFjayBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIHdhdGNoZXIuXG4gKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUgKCkge1xuICB0aGlzLnZhbHVlID0gdGhpcy5nZXQoKTtcbiAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdGhpcy5kZXBzW2ldLmRlcGVuZCgpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uIHRlYXJkb3duICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSB2bSdzIHdhdGNoZXIgbGlzdFxuICAgIC8vIHRoaXMgaXMgYSBzb21ld2hhdCBleHBlbnNpdmUgb3BlcmF0aW9uIHNvIHdlIHNraXAgaXRcbiAgICAvLyBpZiB0aGUgdm0gaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgIGlmICghdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmVtb3ZlKHRoaXMudm0uX3dhdGNoZXJzLCB0aGlzKTtcbiAgICB9XG4gICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogbm9vcCxcbiAgc2V0OiBub29wXG59O1xuXG5mdW5jdGlvbiBwcm94eSAodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gZnVuY3Rpb24gcHJveHlHZXR0ZXIgKCkge1xuICAgIHJldHVybiB0aGlzW3NvdXJjZUtleV1ba2V5XVxuICB9O1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIgKHZhbCkge1xuICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGluaXRTdGF0ZSAodm0pIHtcbiAgdm0uX3dhdGNoZXJzID0gW107XG4gIHZhciBvcHRzID0gdm0uJG9wdGlvbnM7XG4gIGlmIChvcHRzLnByb3BzKSB7IGluaXRQcm9wcyh2bSwgb3B0cy5wcm9wcyk7IH1cbiAgaWYgKG9wdHMubWV0aG9kcykgeyBpbml0TWV0aG9kcyh2bSwgb3B0cy5tZXRob2RzKTsgfVxuICBpZiAob3B0cy5kYXRhKSB7XG4gICAgaW5pdERhdGEodm0pO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmUodm0uX2RhdGEgPSB7fSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbiAgfVxuICBpZiAob3B0cy5jb21wdXRlZCkgeyBpbml0Q29tcHV0ZWQodm0sIG9wdHMuY29tcHV0ZWQpOyB9XG4gIGlmIChvcHRzLndhdGNoICYmIG9wdHMud2F0Y2ggIT09IG5hdGl2ZVdhdGNoKSB7XG4gICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMgKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgdmFyIHByb3BzRGF0YSA9IHZtLiRvcHRpb25zLnByb3BzRGF0YSB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm0uX3Byb3BzID0ge307XG4gIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICB2YXIga2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdO1xuICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gIC8vIHJvb3QgaW5zdGFuY2UgcHJvcHMgc2hvdWxkIGJlIGNvbnZlcnRlZFxuICBpZiAoIWlzUm9vdCkge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gIH1cbiAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGtleSApIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBoeXBoZW5hdGVkS2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxuICAgICAgICAgIGNvbmZpZy5pc1Jlc2VydmVkQXR0cihoeXBoZW5hdGVkS2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIlxcXCJcIiArIGh5cGhlbmF0ZWRLZXkgKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jvb3QgJiYgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZtLm1wSG9zdCA9PT0gJ21wLWJhaWR1Jyl7Ly/nmb7luqYgb2JzZXJ2ZXIg5ZyoIHNldERhdGEgY2FsbGJhY2sg5LmL5ZCO6Kem5Y+R77yM55u05o6l5b+955Wl6K+lIHdhcm5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZml4ZWQgYnkgeHh4eHh4IF9fbmV4dF90aWNrX3BlbmRpbmcsdW5pOi8vZm9ybS1maWVsZCDml7bkuI3lkYroraZcbiAgICAgICAgICAgIGlmKFxuICAgICAgICAgICAgICAgIGtleSA9PT0gJ3ZhbHVlJyAmJiBcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHZtLiRvcHRpb25zLmJlaGF2aW9ycykgJiZcbiAgICAgICAgICAgICAgICB2bS4kb3B0aW9ucy5iZWhhdmlvcnMuaW5kZXhPZigndW5pOi8vZm9ybS1maWVsZCcpICE9PSAtMVxuICAgICAgICAgICAgICApe1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHZtLl9nZXRGb3JtRGF0YSl7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyICRwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgd2hpbGUoJHBhcmVudCl7XG4gICAgICAgICAgICAgIGlmKCRwYXJlbnQuX19uZXh0X3RpY2tfcGVuZGluZyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkcGFyZW50ID0gJHBhcmVudC4kcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvLyBzdGF0aWMgcHJvcHMgYXJlIGFscmVhZHkgcHJveGllZCBvbiB0aGUgY29tcG9uZW50J3MgcHJvdG90eXBlXG4gICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgcHJveHkodm0sIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wc09wdGlvbnMpIGxvb3AoIGtleSApO1xuICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhICh2bSkge1xuICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gIGRhdGEgPSB2bS5fZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nXG4gICAgPyBnZXREYXRhKGRhdGEsIHZtKVxuICAgIDogZGF0YSB8fCB7fTtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgZGF0YSA9IHt9O1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICdodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIC8vIHByb3h5IGRhdGEgb24gaW5zdGFuY2VcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIHZhciBtZXRob2RzID0gdm0uJG9wdGlvbnMubWV0aG9kcztcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAobWV0aG9kcyAmJiBoYXNPd24obWV0aG9kcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgZGF0YSBwcm9wZXJ0eS5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIlRoZSBkYXRhIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlY2xhcmVkIGFzIGEgcHJvcC4gXCIgK1xuICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIixcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICBwcm94eSh2bSwgXCJfZGF0YVwiLCBrZXkpO1xuICAgIH1cbiAgfVxuICAvLyBvYnNlcnZlIGRhdGFcbiAgb2JzZXJ2ZShkYXRhLCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhIChkYXRhLCB2bSkge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgZGF0YSBnZXR0ZXJzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICByZXR1cm4ge31cbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQgKHZtLCBjb21wdXRlZCkge1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHdhdGNoZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBqdXN0IGdldHRlcnMgZHVyaW5nIFNTUlxuICB2YXIgaXNTU1IgPSBpc1NlcnZlclJlbmRlcmluZygpO1xuXG4gIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIHZhciB1c2VyRGVmID0gY29tcHV0ZWRba2V5XTtcbiAgICB2YXIgZ2V0dGVyID0gdHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicgPyB1c2VyRGVmIDogdXNlckRlZi5nZXQ7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKFxuICAgICAgICB2bSxcbiAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgIG5vb3AsXG4gICAgICAgIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29tcG9uZW50LWRlZmluZWQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZVxuICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICB9IGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3BzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29tcHV0ZWQgKFxuICB0YXJnZXQsXG4gIGtleSxcbiAgdXNlckRlZlxuKSB7XG4gIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICBpZiAodHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcbiAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYpO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICB9IGVsc2Uge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSB1c2VyRGVmLmdldFxuICAgICAgPyBzaG91bGRDYWNoZSAmJiB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgOiBub29wO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldCB8fCBub29wO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlciAoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICBpZiAod2F0Y2hlcikge1xuICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKERlcC5TaGFyZWRPYmplY3QudGFyZ2V0KSB7Ly8gZml4ZWQgYnkgeHh4eHh4XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgdm0ubXBIb3N0ICE9PSAnbXAtdG91dGlhbycgJiYgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHMgIFxuICAgIGluaXRTdGF0ZSh2bSk7XG4gICAgdm0ubXBIb3N0ICE9PSAnbXAtdG91dGlhbycgJiYgaW5pdFByb3ZpZGUodm0pOyAvLyByZXNvbHZlIHByb3ZpZGUgYWZ0ZXIgZGF0YS9wcm9wc1xuICAgIHZtLm1wSG9zdCAhPT0gJ21wLXRvdXRpYW8nICYmIGNhbGxIb29rKHZtLCAnY3JlYXRlZCcpOyAgICAgIFxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdEludGVybmFsQ29tcG9uZW50ICh2bSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKTtcbiAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG5cbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0KSB7XG4gICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgaWYgKCFtb2RpZmllZCkgeyBtb2RpZmllZCA9IHt9OyB9XG4gICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBtb2RpZmllZFxufVxuXG5mdW5jdGlvbiBWdWUgKG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAhKHRoaXMgaW5zdGFuY2VvZiBWdWUpXG4gICkge1xuICAgIHdhcm4oJ1Z1ZSBpcyBhIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGBuZXdgIGtleXdvcmQnKTtcbiAgfVxuICB0aGlzLl9pbml0KG9wdGlvbnMpO1xufVxuXG5pbml0TWl4aW4oVnVlKTtcbnN0YXRlTWl4aW4oVnVlKTtcbmV2ZW50c01peGluKFZ1ZSk7XG5saWZlY3ljbGVNaXhpbihWdWUpO1xucmVuZGVyTWl4aW4oVnVlKTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRVc2UgKFZ1ZSkge1xuICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgfHwgKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgPSBbXSkpO1xuICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5pbnN0YWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdE1peGluJDEgKFZ1ZSkge1xuICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFeHRlbmQgKFZ1ZSkge1xuICAvKipcbiAgICogRWFjaCBpbnN0YW5jZSBjb25zdHJ1Y3RvciwgaW5jbHVkaW5nIFZ1ZSwgaGFzIGEgdW5pcXVlXG4gICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRcbiAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hlIHRoZW0uXG4gICAqL1xuICBWdWUuY2lkID0gMDtcbiAgdmFyIGNpZCA9IDE7XG5cbiAgLyoqXG4gICAqIENsYXNzIGluaGVyaXRhbmNlXG4gICAqL1xuICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24gKGV4dGVuZE9wdGlvbnMpIHtcbiAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgIHZhciBTdXBlcklkID0gU3VwZXIuY2lkO1xuICAgIHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMuX0N0b3IgPSB7fSk7XG4gICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICByZXR1cm4gY2FjaGVkQ3RvcnNbU3VwZXJJZF1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IGV4dGVuZE9wdGlvbnMubmFtZSB8fCBTdXBlci5vcHRpb25zLm5hbWU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSkge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICApO1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcbiAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8gYmVlbiB1cGRhdGVkLlxuICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEgKENvbXApIHtcbiAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChkZWZpbml0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uID0geyBiaW5kOiBkZWZpbml0aW9uLCB1cGRhdGU6IGRlZmluaXRpb24gfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25cbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lIChvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVzIChwYXR0ZXJuLCBuYW1lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgfSBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZSAoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZTtcbiAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICB2YXIgX3Zub2RlID0ga2VlcEFsaXZlSW5zdGFuY2UuX3Zub2RlO1xuICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICB2YXIgY2FjaGVkTm9kZSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGNhY2hlZE5vZGUpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjYWNoZWROb2RlLmNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgX3Zub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgY2FjaGUsXG4gIGtleSxcbiAga2V5cyxcbiAgY3VycmVudFxuKSB7XG4gIHZhciBjYWNoZWQkJDEgPSBjYWNoZVtrZXldO1xuICBpZiAoY2FjaGVkJCQxICYmICghY3VycmVudCB8fCBjYWNoZWQkJDEudGFnICE9PSBjdXJyZW50LnRhZykpIHtcbiAgICBjYWNoZWQkJDEuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgfVxuICBjYWNoZVtrZXldID0gbnVsbDtcbiAgcmVtb3ZlKGtleXMsIGtleSk7XG59XG5cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcblxudmFyIEtlZXBBbGl2ZSA9IHtcbiAgbmFtZTogJ2tlZXAtYWxpdmUnLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGluY2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICBleGNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCAoKSB7XG4gICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5rZXlzID0gW107XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQgKCkge1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICBwcnVuZUNhY2hlRW50cnkodGhpcy5jYWNoZSwga2V5LCB0aGlzLmtleXMpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH0pO1xuICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICB2YXIgZXhjbHVkZSA9IHJlZi5leGNsdWRlO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWUpKSkgfHxcbiAgICAgICAgLy8gZXhjbHVkZWRcbiAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2bm9kZVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVmJDEgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmJDEuY2FjaGU7XG4gICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5ID09IG51bGxcbiAgICAgICAgLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICA/IGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgKyAoY29tcG9uZW50T3B0aW9ucy50YWcgPyAoXCI6OlwiICsgKGNvbXBvbmVudE9wdGlvbnMudGFnKSkgOiAnJylcbiAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNhY2hlW2tleV0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIC8vIG1ha2UgY3VycmVudCBrZXkgZnJlc2hlc3RcbiAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XG4gICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pXG4gIH1cbn07XG5cbnZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgS2VlcEFsaXZlOiBLZWVwQWxpdmVcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0R2xvYmFsQVBJIChWdWUpIHtcbiAgLy8gY29uZmlnXG4gIHZhciBjb25maWdEZWYgPSB7fTtcbiAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuXG4gIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgVnVlLnV0aWwgPSB7XG4gICAgd2Fybjogd2FybixcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgfTtcblxuICBWdWUuc2V0ID0gc2V0O1xuICBWdWUuZGVsZXRlID0gZGVsO1xuICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcblxuICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgb2JzZXJ2ZShvYmopO1xuICAgIHJldHVybiBvYmpcbiAgfTtcblxuICBWdWUub3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH0pO1xuXG4gIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gIFZ1ZS5vcHRpb25zLl9iYXNlID0gVnVlO1xuXG4gIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG5cbiAgaW5pdFVzZShWdWUpO1xuICBpbml0TWl4aW4kMShWdWUpO1xuICBpbml0RXh0ZW5kKFZ1ZSk7XG4gIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgfVxufSk7XG5cbi8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ0Z1bmN0aW9uYWxSZW5kZXJDb250ZXh0Jywge1xuICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuXG5WdWUudmVyc2lvbiA9ICcyLjYuMTAnO1xuXG4vKipcbiAqIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9UZW5jZW50L3dlc3RvcmUvbWFzdGVyL3BhY2thZ2VzL3dlc3RvcmUvdXRpbHMvZGlmZi5qc1xuICovXG52YXIgQVJSQVlUWVBFID0gJ1tvYmplY3QgQXJyYXldJztcbnZhciBPQkpFQ1RUWVBFID0gJ1tvYmplY3QgT2JqZWN0XSc7XG4vLyBjb25zdCBGVU5DVElPTlRZUEUgPSAnW29iamVjdCBGdW5jdGlvbl0nXG5cbmZ1bmN0aW9uIGRpZmYoY3VycmVudCwgcHJlKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHN5bmNLZXlzKGN1cnJlbnQsIHByZSk7XG4gICAgX2RpZmYoY3VycmVudCwgcHJlLCAnJywgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHN5bmNLZXlzKGN1cnJlbnQsIHByZSkge1xuICAgIGlmIChjdXJyZW50ID09PSBwcmUpIHsgcmV0dXJuIH1cbiAgICB2YXIgcm9vdEN1cnJlbnRUeXBlID0gdHlwZShjdXJyZW50KTtcbiAgICB2YXIgcm9vdFByZVR5cGUgPSB0eXBlKHByZSk7XG4gICAgaWYgKHJvb3RDdXJyZW50VHlwZSA9PSBPQkpFQ1RUWVBFICYmIHJvb3RQcmVUeXBlID09IE9CSkVDVFRZUEUpIHtcbiAgICAgICAgaWYoT2JqZWN0LmtleXMoY3VycmVudCkubGVuZ3RoID49IE9iamVjdC5rZXlzKHByZSkubGVuZ3RoKXtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwcmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gY3VycmVudFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN5bmNLZXlzKGN1cnJlbnRWYWx1ZSwgcHJlW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAocm9vdEN1cnJlbnRUeXBlID09IEFSUkFZVFlQRSAmJiByb290UHJlVHlwZSA9PSBBUlJBWVRZUEUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoID49IHByZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHN5bmNLZXlzKGN1cnJlbnRbaW5kZXhdLCBpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZGlmZihjdXJyZW50LCBwcmUsIHBhdGgsIHJlc3VsdCkge1xuICAgIGlmIChjdXJyZW50ID09PSBwcmUpIHsgcmV0dXJuIH1cbiAgICB2YXIgcm9vdEN1cnJlbnRUeXBlID0gdHlwZShjdXJyZW50KTtcbiAgICB2YXIgcm9vdFByZVR5cGUgPSB0eXBlKHByZSk7XG4gICAgaWYgKHJvb3RDdXJyZW50VHlwZSA9PSBPQkpFQ1RUWVBFKSB7XG4gICAgICAgIGlmIChyb290UHJlVHlwZSAhPSBPQkpFQ1RUWVBFIHx8IE9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCA8IE9iamVjdC5rZXlzKHByZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0LCBwYXRoLCBjdXJyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRba2V5XTtcbiAgICAgICAgICAgICAgICB2YXIgcHJlVmFsdWUgPSBwcmVba2V5XTtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFR5cGUgPSB0eXBlKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFyIHByZVR5cGUgPSB0eXBlKHByZVZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFR5cGUgIT0gQVJSQVlUWVBFICYmIGN1cnJlbnRUeXBlICE9IE9CSkVDVFRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBwcmVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdCwgKHBhdGggPT0gJycgPyAnJyA6IHBhdGggKyBcIi5cIikgKyBrZXksIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUeXBlID09IEFSUkFZVFlQRSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlVHlwZSAhPSBBUlJBWVRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHQsIChwYXRoID09ICcnID8gJycgOiBwYXRoICsgXCIuXCIpICsga2V5LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGggPCBwcmVWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0LCAocGF0aCA9PSAnJyA/ICcnIDogcGF0aCArIFwiLlwiKSArIGtleSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWZmKGl0ZW0sIHByZVZhbHVlW2luZGV4XSwgKHBhdGggPT0gJycgPyAnJyA6IHBhdGggKyBcIi5cIikgKyBrZXkgKyAnWycgKyBpbmRleCArICddJywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFR5cGUgPT0gT0JKRUNUVFlQRSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlVHlwZSAhPSBPQkpFQ1RUWVBFIHx8IE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkubGVuZ3RoIDwgT2JqZWN0LmtleXMocHJlVmFsdWUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdCwgKHBhdGggPT0gJycgPyAnJyA6IHBhdGggKyBcIi5cIikgKyBrZXksIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWJLZXkgaW4gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZmYoY3VycmVudFZhbHVlW3N1YktleV0sIHByZVZhbHVlW3N1YktleV0sIChwYXRoID09ICcnID8gJycgOiBwYXRoICsgXCIuXCIpICsga2V5ICsgJy4nICsgc3ViS2V5LCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGN1cnJlbnQpIGxvb3AoIGtleSApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChyb290Q3VycmVudFR5cGUgPT0gQVJSQVlUWVBFKSB7XG4gICAgICAgIGlmIChyb290UHJlVHlwZSAhPSBBUlJBWVRZUEUpIHtcbiAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHQsIHBhdGgsIGN1cnJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoIDwgcHJlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHQsIHBhdGgsIGN1cnJlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIF9kaWZmKGl0ZW0sIHByZVtpbmRleF0sIHBhdGggKyAnWycgKyBpbmRleCArICddJywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFJlc3VsdChyZXN1bHQsIHBhdGgsIGN1cnJlbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdWx0KHJlc3VsdCwgaywgdikge1xuICAgIC8vIGlmICh0eXBlKHYpICE9IEZVTkNUSU9OVFlQRSkge1xuICAgICAgICByZXN1bHRba10gPSB2O1xuICAgIC8vIH1cbn1cblxuZnVuY3Rpb24gdHlwZShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iailcbn1cblxuLyogICovXHJcblxyXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyQxKHZtKSB7XHJcbiAgICBpZiAodm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzICYmIHZtLl9fbmV4dF90aWNrX2NhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRykge1xyXG4gICAgICAgICAgICB2YXIgbXBJbnN0YW5jZSA9IHZtLiRzY29wZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1snICsgKCtuZXcgRGF0ZSkgKyAnXVsnICsgKG1wSW5zdGFuY2UuaXMgfHwgbXBJbnN0YW5jZS5yb3V0ZSkgKyAnXVsnICsgdm0uX3VpZCArXHJcbiAgICAgICAgICAgICAgICAnXTpmbHVzaENhbGxiYWNrc1snICsgdm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzLmxlbmd0aCArICddJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb3BpZXMgPSB2bS5fX25leHRfdGlja19jYWxsYmFja3Muc2xpY2UoMCk7XHJcbiAgICAgICAgdm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29waWVzW2ldKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNSZW5kZXJXYXRjaGVyKHZtKSB7XHJcbiAgICByZXR1cm4gcXVldWUuZmluZChmdW5jdGlvbiAod2F0Y2hlcikgeyByZXR1cm4gdm0uX3dhdGNoZXIgPT09IHdhdGNoZXI7IH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5leHRUaWNrJDEodm0sIGNiKSB7XHJcbiAgICAvLzEubmV4dFRpY2sg5LmL5YmNIOW3siBzZXREYXRhIOS4lCBzZXREYXRhIOi/mOacquWbnuiwg+WujOaIkFxyXG4gICAgLy8yLm5leHRUaWNrIOS5i+WJjeWtmOWcqCByZW5kZXIgd2F0Y2hlclxyXG4gICAgaWYgKCF2bS5fX25leHRfdGlja19wZW5kaW5nICYmICFoYXNSZW5kZXJXYXRjaGVyKHZtKSkge1xuICAgICAgICBpZihwcm9jZXNzLmVudi5WVUVfQVBQX0RFQlVHKXtcbiAgICAgICAgICAgIHZhciBtcEluc3RhbmNlID0gdm0uJHNjb3BlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1snICsgKCtuZXcgRGF0ZSkgKyAnXVsnICsgKG1wSW5zdGFuY2UuaXMgfHwgbXBJbnN0YW5jZS5yb3V0ZSkgKyAnXVsnICsgdm0uX3VpZCArXG4gICAgICAgICAgICAgICAgJ106bmV4dFZ1ZVRpY2snKTtcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXh0VGljayhjYiwgdm0pXHJcbiAgICB9ZWxzZXtcbiAgICAgICAgaWYocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRyl7XG4gICAgICAgICAgICB2YXIgbXBJbnN0YW5jZSQxID0gdm0uJHNjb3BlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1snICsgKCtuZXcgRGF0ZSkgKyAnXVsnICsgKG1wSW5zdGFuY2UkMS5pcyB8fCBtcEluc3RhbmNlJDEucm91dGUpICsgJ11bJyArIHZtLl91aWQgK1xuICAgICAgICAgICAgICAgICddOm5leHRNUFRpY2snKTtcbiAgICAgICAgfVxuICAgIH1cclxuICAgIHZhciBfcmVzb2x2ZTtcclxuICAgIGlmICghdm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgdm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzID0gW107XHJcbiAgICB9XHJcbiAgICB2bS5fX25leHRfdGlja19jYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHZtKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sICduZXh0VGljaycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBfcmVzb2x2ZSh2bSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XG5cbi8qICAqL1xyXG5cclxuZnVuY3Rpb24gY2xvbmVXaXRoRGF0YSh2bSkge1xyXG4gIC8vIOehruS/neW9k+WJjSB2bSDmiYDmnInmlbDmja7ooqvlkIzmraVcclxuICB2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICB2YXIgZGF0YUtleXMgPSBbXS5jb25jYXQoXHJcbiAgICBPYmplY3Qua2V5cyh2bS5fZGF0YSB8fCB7fSksXHJcbiAgICBPYmplY3Qua2V5cyh2bS5fY29tcHV0ZWRXYXRjaGVycyB8fCB7fSkpO1xyXG5cclxuICBkYXRhS2V5cy5yZWR1Y2UoZnVuY3Rpb24ocmV0LCBrZXkpIHtcclxuICAgIHJldFtrZXldID0gdm1ba2V5XTtcclxuICAgIHJldHVybiByZXRcclxuICB9LCByZXQpO1xyXG4gIC8vVE9ETyDpnIDopoHmiorml6DnlKjmlbDmja7lpITnkIbmjonvvIzmr5TlpoIgbGlzdD0+bDAg5YiZIGxpc3Qg6ZyA6KaB56e76Zmk77yM5ZCm5YiZ5aSa5Lyg6L6T5LiA5Lu95pWw5o2uXHJcbiAgT2JqZWN0LmFzc2lnbihyZXQsIHZtLiRtcC5kYXRhIHx8IHt9KTtcclxuICBpZiAoXHJcbiAgICBBcnJheS5pc0FycmF5KHZtLiRvcHRpb25zLmJlaGF2aW9ycykgJiZcclxuICAgIHZtLiRvcHRpb25zLmJlaGF2aW9ycy5pbmRleE9mKCd1bmk6Ly9mb3JtLWZpZWxkJykgIT09IC0xXHJcbiAgKSB7IC8vZm9ybS1maWVsZFxyXG4gICAgcmV0WyduYW1lJ10gPSB2bS5uYW1lO1xyXG4gICAgcmV0Wyd2YWx1ZSddID0gdm0udmFsdWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXQpKVxyXG59XHJcblxyXG52YXIgcGF0Y2ggPSBmdW5jdGlvbihvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cclxuICBpZiAodm5vZGUgPT09IG51bGwpIHsgLy9kZXN0cm95XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKHRoaXMubXBUeXBlID09PSAncGFnZScgfHwgdGhpcy5tcFR5cGUgPT09ICdjb21wb25lbnQnKSB7XHJcbiAgICB2YXIgbXBJbnN0YW5jZSA9IHRoaXMuJHNjb3BlO1xyXG4gICAgdmFyIGRhdGEgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZGF0YSA9IGNsb25lV2l0aERhdGEodGhpcyk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG4gICAgZGF0YS5fX3dlYnZpZXdJZF9fID0gbXBJbnN0YW5jZS5kYXRhLl9fd2Vidmlld0lkX187XHJcbiAgICB2YXIgbXBEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyAvL+S7heWQjOatpSBkYXRhIOS4reacieeahOaVsOaNrlxyXG4gICAgICBtcERhdGFba2V5XSA9IG1wSW5zdGFuY2UuZGF0YVtrZXldO1xyXG4gICAgfSk7XHJcbiAgICB2YXIgZGlmZkRhdGEgPSBkaWZmKGRhdGEsIG1wRGF0YSk7XHJcbiAgICBpZiAoT2JqZWN0LmtleXMoZGlmZkRhdGEpLmxlbmd0aCkge1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdbJyArICgrbmV3IERhdGUpICsgJ11bJyArIChtcEluc3RhbmNlLmlzIHx8IG1wSW5zdGFuY2Uucm91dGUpICsgJ11bJyArIHRoaXMuX3VpZCArXHJcbiAgICAgICAgICAnXeW3rumHj+abtOaWsCcsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkaWZmRGF0YSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX19uZXh0X3RpY2tfcGVuZGluZyA9IHRydWU7XHJcbiAgICAgIG1wSW5zdGFuY2Uuc2V0RGF0YShkaWZmRGF0YSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMkMS5fX25leHRfdGlja19wZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgZmx1c2hDYWxsYmFja3MkMSh0aGlzJDEpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZsdXNoQ2FsbGJhY2tzJDEodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlRW1wdHlSZW5kZXIoKSB7XG5cbn1cblxuZnVuY3Rpb24gbW91bnRDb21wb25lbnQkMShcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBpZiAoIXZtLm1wVHlwZSkgey8vbWFpbi5qcyDkuK3nmoQgbmV3IFZ1ZVxuICAgIHJldHVybiB2bVxuICB9XG4gIGlmICh2bS5tcFR5cGUgPT09ICdhcHAnKSB7XG4gICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlSZW5kZXI7XG4gIH1cbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVJlbmRlcjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICB2bS4kb3B0aW9ucy5lbCB8fCBlbCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBydW50aW1lLW9ubHkgYnVpbGQgb2YgVnVlIHdoZXJlIHRoZSB0ZW1wbGF0ZSAnICtcbiAgICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0ZXMgaW50byAnICtcbiAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdGYWlsZWQgdG8gbW91bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgdm0ubXBIb3N0ICE9PSAnbXAtdG91dGlhbycgJiYgY2FsbEhvb2sodm0sICdiZWZvcmVNb3VudCcpO1xuXG4gIHZhciB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdm0uX3VwZGF0ZSh2bS5fcmVuZGVyKCksIGh5ZHJhdGluZyk7XG4gIH07XG5cbiAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgLy8gc2luY2UgdGhlIHdhdGNoZXIncyBpbml0aWFsIHBhdGNoIG1heSBjYWxsICRmb3JjZVVwZGF0ZSAoZS5nLiBpbnNpZGUgY2hpbGRcbiAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgYmVmb3JlOiBmdW5jdGlvbiBiZWZvcmUoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuICByZXR1cm4gdm1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlbmRlckNsYXNzIChcbiAgc3RhdGljQ2xhc3MsXG4gIGR5bmFtaWNDbGFzc1xuKSB7XG4gIGlmIChpc0RlZihzdGF0aWNDbGFzcykgfHwgaXNEZWYoZHluYW1pY0NsYXNzKSkge1xuICAgIHJldHVybiBjb25jYXQoc3RhdGljQ2xhc3MsIHN0cmluZ2lmeUNsYXNzKGR5bmFtaWNDbGFzcykpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnXG59XG5cbmZ1bmN0aW9uIGNvbmNhdCAoYSwgYikge1xuICByZXR1cm4gYSA/IGIgPyAoYSArICcgJyArIGIpIDogYSA6IChiIHx8ICcnKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDbGFzcyAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeUFycmF5KHZhbHVlKVxuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5ICh2YWx1ZSkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBzdHJpbmdpZmllZDtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoaXNEZWYoc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlDbGFzcyh2YWx1ZVtpXSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0gc3RyaW5naWZpZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0ICh2YWx1ZSkge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZVtrZXldKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVCaW5kaW5nIChiaW5kaW5nU3R5bGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmluZGluZ1N0eWxlKSkge1xuICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgaWYgKHR5cGVvZiBiaW5kaW5nU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICByZXR1cm4gYmluZGluZ1N0eWxlXG59XG5cbi8qICAqL1xyXG5cclxudmFyIE1QX01FVEhPRFMgPSBbJ2NyZWF0ZVNlbGVjdG9yUXVlcnknLCAnY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCAnc2VsZWN0QWxsQ29tcG9uZW50cycsICdzZWxlY3RDb21wb25lbnQnXTtcclxuXHJcbmZ1bmN0aW9uIGdldFRhcmdldChvYmosIHBhdGgpIHtcclxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgdmFyIGtleSA9IHBhcnRzWzBdO1xyXG4gIGlmIChrZXkuaW5kZXhPZignX18kbicpID09PSAwKSB7IC8vbnVtYmVyIGluZGV4XHJcbiAgICBrZXkgPSBwYXJzZUludChrZXkucmVwbGFjZSgnX18kbicsICcnKSk7XHJcbiAgfVxyXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcclxuICAgIHJldHVybiBvYmpba2V5XVxyXG4gIH1cclxuICByZXR1cm4gZ2V0VGFyZ2V0KG9ialtrZXldLCBwYXJ0cy5zbGljZSgxKS5qb2luKCcuJykpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludGVybmFsTWl4aW4oVnVlKSB7XHJcblxyXG4gIFZ1ZS5jb25maWcuZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oZXJyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgfTtcclxuXHJcbiAgdmFyIG9sZEVtaXQgPSBWdWUucHJvdG90eXBlLiRlbWl0O1xyXG5cclxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLiRzY29wZSAmJiBldmVudCkge1xyXG4gICAgICB0aGlzLiRzY29wZVsndHJpZ2dlckV2ZW50J10oZXZlbnQsIHtcclxuICAgICAgICBfX2FyZ3NfXzogdG9BcnJheShhcmd1bWVudHMsIDEpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9sZEVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gIH07XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24oZm4pIHtcclxuICAgIHJldHVybiBuZXh0VGljayQxKHRoaXMsIGZuKVxyXG4gIH07XHJcblxyXG4gIE1QX01FVEhPRFMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XHJcbiAgICBWdWUucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmdzKSB7XHJcbiAgICAgIGlmICh0aGlzLiRzY29wZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZVttZXRob2RdKGFyZ3MpXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUuX19pbml0X3Byb3ZpZGUgPSBpbml0UHJvdmlkZTtcclxuXHJcbiAgVnVlLnByb3RvdHlwZS5fX2luaXRfaW5qZWN0aW9ucyA9IGluaXRJbmplY3Rpb25zO1xyXG5cclxuICBWdWUucHJvdG90eXBlLl9fY2FsbF9ob29rID0gZnVuY3Rpb24oaG9vaywgYXJncykge1xyXG4gICAgdmFyIHZtID0gdGhpcztcclxuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcclxuICAgIHB1c2hUYXJnZXQoKTtcclxuICAgIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xyXG4gICAgdmFyIGluZm8gPSBob29rICsgXCIgaG9va1wiO1xyXG4gICAgdmFyIHJldDtcclxuICAgIGlmIChoYW5kbGVycykge1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgIHJldCA9IGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgYXJncyA/IFthcmdzXSA6IG51bGwsIHZtLCBpbmZvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcclxuICAgICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xyXG4gICAgfVxyXG4gICAgcG9wVGFyZ2V0KCk7XHJcbiAgICByZXR1cm4gcmV0XHJcbiAgfTtcclxuXHJcbiAgVnVlLnByb3RvdHlwZS5fX3NldF9tb2RlbCA9IGZ1bmN0aW9uKHRhcmdldCwga2V5LCB2YWx1ZSwgbW9kaWZpZXJzKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RpZmllcnMpKSB7XHJcbiAgICAgIGlmIChtb2RpZmllcnMuaW5kZXhPZigndHJpbScpICE9PSAtMSkge1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtb2RpZmllcnMuaW5kZXhPZignbnVtYmVyJykgIT09IC0xKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9uKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0YXJnZXQpIHtcclxuICAgICAgdGFyZ2V0ID0gdGhpcztcclxuICAgIH1cclxuICAgIHRhcmdldFtrZXldID0gdmFsdWU7XHJcbiAgfTtcclxuXHJcbiAgVnVlLnByb3RvdHlwZS5fX3NldF9zeW5jID0gZnVuY3Rpb24odGFyZ2V0LCBrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICB0YXJnZXQgPSB0aGlzO1xyXG4gICAgfVxyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxuICB9O1xyXG5cclxuICBWdWUucHJvdG90eXBlLl9fZ2V0X29yaWcgPSBmdW5jdGlvbihpdGVtKSB7XHJcbiAgICBpZiAoaXNQbGFpbk9iamVjdChpdGVtKSkge1xyXG4gICAgICByZXR1cm4gaXRlbVsnJG9yaWcnXSB8fCBpdGVtXHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbVxyXG4gIH07XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUuX19nZXRfdmFsdWUgPSBmdW5jdGlvbihkYXRhUGF0aCwgdGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gZ2V0VGFyZ2V0KHRhcmdldCB8fCB0aGlzLCBkYXRhUGF0aClcclxuICB9O1xyXG5cclxuXHJcbiAgVnVlLnByb3RvdHlwZS5fX2dldF9jbGFzcyA9IGZ1bmN0aW9uKGR5bmFtaWNDbGFzcywgc3RhdGljQ2xhc3MpIHtcclxuICAgIHJldHVybiByZW5kZXJDbGFzcyhzdGF0aWNDbGFzcywgZHluYW1pY0NsYXNzKVxyXG4gIH07XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUuX19nZXRfc3R5bGUgPSBmdW5jdGlvbihkeW5hbWljU3R5bGUsIHN0YXRpY1N0eWxlKSB7XHJcbiAgICBpZiAoIWR5bmFtaWNTdHlsZSAmJiAhc3RhdGljU3R5bGUpIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgICB2YXIgZHluYW1pY1N0eWxlT2JqID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGR5bmFtaWNTdHlsZSk7XHJcbiAgICB2YXIgc3R5bGVPYmogPSBzdGF0aWNTdHlsZSA/IGV4dGVuZChzdGF0aWNTdHlsZSwgZHluYW1pY1N0eWxlT2JqKSA6IGR5bmFtaWNTdHlsZU9iajtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdHlsZU9iaikubWFwKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAoKGh5cGhlbmF0ZShuYW1lKSkgKyBcIjpcIiArIChzdHlsZU9ialtuYW1lXSkpOyB9KS5qb2luKCc7JylcclxuICB9O1xyXG5cclxuICBWdWUucHJvdG90eXBlLl9fbWFwID0gZnVuY3Rpb24odmFsLCBpdGVyYXRlZSkge1xyXG4gICAgLy9UT0RPIOaaguS4jeiAg+iZkSBzdHJpbmcsbnVtYmVyXHJcbiAgICB2YXIgcmV0LCBpLCBsLCBrZXlzLCBrZXk7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcclxuICAgICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICByZXRbaV0gPSBpdGVyYXRlZSh2YWxbaV0sIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXRcclxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xyXG4gICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcclxuICAgICAgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICByZXRba2V5XSA9IGl0ZXJhdGVlKHZhbFtrZXldLCBrZXksIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXRcclxuICAgIH1cclxuICAgIHJldHVybiBbXVxyXG4gIH07XHJcblxyXG59XG5cbi8qICAqL1xyXG5cclxudmFyIExJRkVDWUNMRV9IT09LUyQxID0gW1xyXG4gICAgLy9BcHBcclxuICAgICdvbkxhdW5jaCcsXHJcbiAgICAnb25TaG93JyxcclxuICAgICdvbkhpZGUnLFxyXG4gICAgJ29uVW5pTlZpZXdNZXNzYWdlJyxcbiAgICAnb25FcnJvcicsXHJcbiAgICAvL1BhZ2VcclxuICAgICdvbkxvYWQnLFxyXG4gICAgLy8gJ29uU2hvdycsXHJcbiAgICAnb25SZWFkeScsXHJcbiAgICAvLyAnb25IaWRlJyxcclxuICAgICdvblVubG9hZCcsXHJcbiAgICAnb25QdWxsRG93blJlZnJlc2gnLFxyXG4gICAgJ29uUmVhY2hCb3R0b20nLFxyXG4gICAgJ29uVGFiSXRlbVRhcCcsXHJcbiAgICAnb25TaGFyZUFwcE1lc3NhZ2UnLFxuICAgICdvblJlc2l6ZScsXHJcbiAgICAnb25QYWdlU2Nyb2xsJyxcclxuICAgICdvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAnLFxyXG4gICAgJ29uQmFja1ByZXNzJyxcclxuICAgICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQnLFxyXG4gICAgJ29uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q29uZmlybWVkJyxcclxuICAgICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENsaWNrZWQnLFxyXG4gICAgLy9Db21wb25lbnRcclxuICAgIC8vICdvblJlYWR5JywgLy8g5YW85a655pen54mI5pys77yM5bqU6K+l56e76Zmk6K+l5LqL5Lu2XHJcbiAgICAnb25QYWdlU2hvdycsXHJcbiAgICAnb25QYWdlSGlkZScsXHJcbiAgICAnb25QYWdlUmVzaXplJ1xyXG5dO1xyXG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbiQxKFZ1ZSkge1xyXG5cclxuICAgIC8vZml4ZWQgdnVlLWNsYXNzLWNvbXBvbmVudFxyXG4gICAgdmFyIG9sZEV4dGVuZCA9IFZ1ZS5leHRlbmQ7XHJcbiAgICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24oZXh0ZW5kT3B0aW9ucykge1xyXG4gICAgICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xyXG5cclxuICAgICAgICB2YXIgbWV0aG9kcyA9IGV4dGVuZE9wdGlvbnMubWV0aG9kcztcclxuICAgICAgICBpZiAobWV0aG9kcykge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRob2RzKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoTElGRUNZQ0xFX0hPT0tTJDEuaW5kZXhPZihtZXRob2ROYW1lKSE9PS0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kT3B0aW9uc1ttZXRob2ROYW1lXSA9IG1ldGhvZHNbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1ldGhvZHNbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9sZEV4dGVuZC5jYWxsKHRoaXMsIGV4dGVuZE9wdGlvbnMpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBzdHJhdGVnaWVzID0gVnVlLmNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XHJcbiAgICB2YXIgbWVyZ2VIb29rID0gc3RyYXRlZ2llcy5jcmVhdGVkO1xyXG4gICAgTElGRUNZQ0xFX0hPT0tTJDEuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xyXG4gICAgICAgIHN0cmF0ZWdpZXNbaG9va10gPSBtZXJnZUhvb2s7XHJcbiAgICB9KTtcclxuXHJcbiAgICBWdWUucHJvdG90eXBlLl9fbGlmZWN5Y2xlX2hvb2tzX18gPSBMSUZFQ1lDTEVfSE9PS1MkMTtcclxufVxuXG4vKiAgKi9cclxuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXHJcblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gcGF0Y2g7XHJcblxyXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXHJcblZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24oXHJcbiAgICBlbCAsXHJcbiAgICBoeWRyYXRpbmcgXHJcbikge1xyXG4gICAgcmV0dXJuIG1vdW50Q29tcG9uZW50JDEodGhpcywgZWwsIGh5ZHJhdGluZylcclxufTtcclxuXHJcbmxpZmVjeWNsZU1peGluJDEoVnVlKTtcclxuaW50ZXJuYWxNaXhpbihWdWUpO1xuXG4vKiAgKi9cblxuZXhwb3J0IGRlZmF1bHQgVnVlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3\n");
- /***/ }),
- /* 4 */
- /*!***********************************!*\
- !*** E:/sheverAPP/APP/pages.json ***!
- \***********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiI0LmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4\n");
- /***/ }),
- /* 5 */
- /*!*******************************************************!*\
- !*** ./node_modules/@dcloudio/uni-stat/dist/index.js ***!
- \*******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(uni) {var _package = __webpack_require__(/*! ../package.json */ 6);function _possibleConstructorReturn(self, call) {if (call && (typeof call === \"object\" || typeof call === \"function\")) {return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self) {if (self === void 0) {throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return self;}function _getPrototypeOf(o) {_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {return o.__proto__ || Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass, superClass) {if (typeof superClass !== \"function\" && superClass !== null) {throw new TypeError(\"Super expression must either be null or a function\");}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });if (superClass) _setPrototypeOf(subClass, superClass);}function _setPrototypeOf(o, p) {_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {o.__proto__ = p;return o;};return _setPrototypeOf(o, p);}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError(\"Cannot call a class as a function\");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if (\"value\" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}\n\nvar STAT_VERSION = _package.version;\nvar STAT_URL = 'https://tongji.dcloud.io/uni/stat';\nvar STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif';\nvar PAGE_PVER_TIME = 1800;\nvar APP_PVER_TIME = 300;\nvar OPERATING_TIME = 10;\n\nvar UUID_KEY = '__DC_STAT_UUID';\nvar UUID_VALUE = '__DC_UUID_VALUE';\n\nfunction getUuid() {\n var uuid = '';\n if (getPlatformName() === 'n') {\n try {\n uuid = plus.runtime.getDCloudId();\n } catch (e) {\n uuid = '';\n }\n return uuid;\n }\n\n try {\n uuid = uni.getStorageSync(UUID_KEY);\n } catch (e) {\n uuid = UUID_VALUE;\n }\n\n if (!uuid) {\n uuid = Date.now() + '' + Math.floor(Math.random() * 1e7);\n try {\n uni.setStorageSync(UUID_KEY, uuid);\n } catch (e) {\n uni.setStorageSync(UUID_KEY, UUID_VALUE);\n }\n }\n return uuid;\n}\n\nvar getSgin = function getSgin(statData) {\n var arr = Object.keys(statData);\n var sortArr = arr.sort();\n var sgin = {};\n var sginStr = '';\n for (var i in sortArr) {\n sgin[sortArr[i]] = statData[sortArr[i]];\n sginStr += sortArr[i] + '=' + statData[sortArr[i]] + '&';\n }\n // const options = sginStr.substr(0, sginStr.length - 1)\n // sginStr = sginStr.substr(0, sginStr.length - 1) + '&key=' + STAT_KEY;\n // const si = crypto.createHash('md5').update(sginStr).digest('hex');\n return {\n sign: '',\n options: sginStr.substr(0, sginStr.length - 1) };\n\n};\n\nvar getSplicing = function getSplicing(data) {\n var str = '';\n for (var i in data) {\n str += i + '=' + data[i] + '&';\n }\n return str.substr(0, str.length - 1);\n};\n\nvar getTime = function getTime() {\n return parseInt(new Date().getTime() / 1000);\n};\n\nvar getPlatformName = function getPlatformName() {\n var platformList = {\n 'app-plus': 'n',\n 'h5': 'h5',\n 'mp-weixin': 'wx',\n 'mp-alipay': 'ali',\n 'mp-baidu': 'bd',\n 'mp-toutiao': 'tt',\n 'mp-qq': 'qq' };\n\n return platformList[\"app-plus\"];\n};\n\nvar getPackName = function getPackName() {\n var packName = '';\n if (getPlatformName() === 'wx' || getPlatformName() === 'qq') {\n // 兼容微信小程序低版本基础库\n if (uni.canIUse('getAccountInfoSync')) {\n packName = uni.getAccountInfoSync().miniProgram.appId || '';\n }\n }\n return packName;\n};\n\nvar getVersion = function getVersion() {\n return getPlatformName() === 'n' ? plus.runtime.version : '';\n};\n\nvar getChannel = function getChannel() {\n var platformName = getPlatformName();\n var channel = '';\n if (platformName === 'n') {\n channel = plus.runtime.channel;\n }\n return channel;\n};\n\nvar getScene = function getScene(options) {\n var platformName = getPlatformName();\n var scene = '';\n if (options) {\n return options;\n }\n if (platformName === 'wx') {\n scene = uni.getLaunchOptionsSync().scene;\n }\n return scene;\n};\nvar First__Visit__Time__KEY = 'First__Visit__Time';\nvar Last__Visit__Time__KEY = 'Last__Visit__Time';\n\nvar getFirstVisitTime = function getFirstVisitTime() {\n var timeStorge = uni.getStorageSync(First__Visit__Time__KEY);\n var time = 0;\n if (timeStorge) {\n time = timeStorge;\n } else {\n time = getTime();\n uni.setStorageSync(First__Visit__Time__KEY, time);\n uni.removeStorageSync(Last__Visit__Time__KEY);\n }\n return time;\n};\n\nvar getLastVisitTime = function getLastVisitTime() {\n var timeStorge = uni.getStorageSync(Last__Visit__Time__KEY);\n var time = 0;\n if (timeStorge) {\n time = timeStorge;\n } else {\n time = '';\n }\n uni.setStorageSync(Last__Visit__Time__KEY, getTime());\n return time;\n};\n\n\nvar PAGE_RESIDENCE_TIME = '__page__residence__time';\nvar First_Page_residence_time = 0;\nvar Last_Page_residence_time = 0;\n\n\nvar setPageResidenceTime = function setPageResidenceTime() {\n First_Page_residence_time = getTime();\n if (getPlatformName() === 'n') {\n uni.setStorageSync(PAGE_RESIDENCE_TIME, getTime());\n }\n return First_Page_residence_time;\n};\n\nvar getPageResidenceTime = function getPageResidenceTime() {\n Last_Page_residence_time = getTime();\n if (getPlatformName() === 'n') {\n First_Page_residence_time = uni.getStorageSync(PAGE_RESIDENCE_TIME);\n }\n return Last_Page_residence_time - First_Page_residence_time;\n};\nvar TOTAL__VISIT__COUNT = 'Total__Visit__Count';\nvar getTotalVisitCount = function getTotalVisitCount() {\n var timeStorge = uni.getStorageSync(TOTAL__VISIT__COUNT);\n var count = 1;\n if (timeStorge) {\n count = timeStorge;\n count++;\n }\n uni.setStorageSync(TOTAL__VISIT__COUNT, count);\n return count;\n};\n\nvar GetEncodeURIComponentOptions = function GetEncodeURIComponentOptions(statData) {\n var data = {};\n for (var prop in statData) {\n data[prop] = encodeURIComponent(statData[prop]);\n }\n return data;\n};\n\nvar Set__First__Time = 0;\nvar Set__Last__Time = 0;\n\nvar getFirstTime = function getFirstTime() {\n var time = new Date().getTime();\n Set__First__Time = time;\n Set__Last__Time = 0;\n return time;\n};\n\n\nvar getLastTime = function getLastTime() {\n var time = new Date().getTime();\n Set__Last__Time = time;\n return time;\n};\n\n\nvar getResidenceTime = function getResidenceTime(type) {\n var residenceTime = 0;\n if (Set__First__Time !== 0) {\n residenceTime = Set__Last__Time - Set__First__Time;\n }\n\n residenceTime = parseInt(residenceTime / 1000);\n residenceTime = residenceTime < 1 ? 1 : residenceTime;\n if (type === 'app') {\n var overtime = residenceTime > APP_PVER_TIME ? true : false;\n return {\n residenceTime: residenceTime,\n overtime: overtime };\n\n }\n if (type === 'page') {\n var _overtime = residenceTime > PAGE_PVER_TIME ? true : false;\n return {\n residenceTime: residenceTime,\n overtime: _overtime };\n\n }\n\n return {\n residenceTime: residenceTime };\n\n\n};\n\nvar getRoute = function getRoute() {\n var pages = getCurrentPages();\n var page = pages[pages.length - 1];\n var _self = page.$vm;\n\n if (getPlatformName() === 'bd') {\n return _self.$mp && _self.$mp.page.is;\n } else {\n return _self.$scope && _self.$scope.route || _self.$mp && _self.$mp.page.route;\n }\n};\n\nvar getPageRoute = function getPageRoute(self) {\n var pages = getCurrentPages();\n var page = pages[pages.length - 1];\n var _self = page.$vm;\n var query = self._query;\n var str = query && JSON.stringify(query) !== '{}' ? '?' + JSON.stringify(query) : '';\n // clear\n self._query = '';\n if (getPlatformName() === 'bd') {\n return _self.$mp && _self.$mp.page.is + str;\n } else {\n return _self.$scope && _self.$scope.route + str || _self.$mp && _self.$mp.page.route + str;\n }\n};\n\nvar getPageTypes = function getPageTypes(self) {\n if (self.mpType === 'page' || self.$mp && self.$mp.mpType === 'page' || self.$options.mpType === 'page') {\n return true;\n }\n return false;\n};\n\nvar calibration = function calibration(eventName, options) {\n // login 、 share 、pay_success 、pay_fail 、register 、title\n if (!eventName) {\n console.error(\"uni.report \\u7F3A\\u5C11 [eventName] \\u53C2\\u6570\");\n return true;\n }\n if (typeof eventName !== 'string') {\n console.error(\"uni.report [eventName] \\u53C2\\u6570\\u7C7B\\u578B\\u9519\\u8BEF,\\u53EA\\u80FD\\u4E3A String \\u7C7B\\u578B\");\n return true;\n }\n if (eventName.length > 255) {\n console.error(\"uni.report [eventName] \\u53C2\\u6570\\u957F\\u5EA6\\u4E0D\\u80FD\\u5927\\u4E8E 255\");\n return true;\n }\n\n if (typeof options !== 'string' && typeof options !== 'object') {\n console.error(\"uni.report [options] \\u53C2\\u6570\\u7C7B\\u578B\\u9519\\u8BEF,\\u53EA\\u80FD\\u4E3A String \\u6216 Object \\u7C7B\\u578B\");\n return true;\n }\n\n if (typeof options === 'string' && options.length > 255) {\n console.error(\"uni.report [options] \\u53C2\\u6570\\u957F\\u5EA6\\u4E0D\\u80FD\\u5927\\u4E8E 255\");\n return true;\n }\n\n if (eventName === 'title' && typeof options !== 'string') {\n console.error('uni.report [eventName] 参数为 title 时,[options] 参数只能为 String 类型');\n return true;\n }\n};\n\nvar PagesJson = __webpack_require__(/*! uni-pages?{\"type\":\"style\"} */ 7).default;\nvar statConfig = __webpack_require__(/*! uni-stat-config */ 8).default || __webpack_require__(/*! uni-stat-config */ 8);\n\nvar resultOptions = uni.getSystemInfoSync();var\n\nUtil = /*#__PURE__*/function () {\n function Util() {_classCallCheck(this, Util);\n this.self = '';\n this._retry = 0;\n this._platform = '';\n this._query = {};\n this._navigationBarTitle = {\n config: '',\n page: '',\n report: '',\n lt: '' };\n\n this._operatingTime = 0;\n this._reportingRequestData = {\n '1': [],\n '11': [] };\n\n this.__prevent_triggering = false;\n\n this.__licationHide = false;\n this.__licationShow = false;\n this._lastPageRoute = '';\n this.statData = {\n uuid: getUuid(),\n ut: getPlatformName(),\n mpn: getPackName(),\n ak: statConfig.appid,\n usv: STAT_VERSION,\n v: getVersion(),\n ch: getChannel(),\n cn: '',\n pn: '',\n ct: '',\n t: getTime(),\n tt: '',\n p: resultOptions.platform === 'android' ? 'a' : 'i',\n brand: resultOptions.brand || '',\n md: resultOptions.model,\n sv: resultOptions.system.replace(/(Android|iOS)\\s/, ''),\n mpsdk: resultOptions.SDKVersion || '',\n mpv: resultOptions.version || '',\n lang: resultOptions.language,\n pr: resultOptions.pixelRatio,\n ww: resultOptions.windowWidth,\n wh: resultOptions.windowHeight,\n sw: resultOptions.screenWidth,\n sh: resultOptions.screenHeight };\n\n\n }_createClass(Util, [{ key: \"_applicationShow\", value: function _applicationShow()\n\n {\n if (this.__licationHide) {\n getLastTime();\n var time = getResidenceTime('app');\n if (time.overtime) {\n var options = {\n path: this._lastPageRoute,\n scene: this.statData.sc };\n\n this._sendReportRequest(options);\n }\n this.__licationHide = false;\n }\n } }, { key: \"_applicationHide\", value: function _applicationHide(\n\n self, type) {\n\n this.__licationHide = true;\n getLastTime();\n var time = getResidenceTime();\n getFirstTime();\n var route = getPageRoute(this);\n this._sendHideRequest({\n urlref: route,\n urlref_ts: time.residenceTime },\n type);\n } }, { key: \"_pageShow\", value: function _pageShow()\n\n {\n var route = getPageRoute(this);\n var routepath = getRoute();\n this._navigationBarTitle.config = PagesJson &&\n PagesJson.pages[routepath] &&\n PagesJson.pages[routepath].titleNView &&\n PagesJson.pages[routepath].titleNView.titleText ||\n PagesJson &&\n PagesJson.pages[routepath] &&\n PagesJson.pages[routepath].navigationBarTitleText || '';\n\n if (this.__licationShow) {\n getFirstTime();\n this.__licationShow = false;\n // console.log('这是 onLauch 之后执行的第一次 pageShow ,为下次记录时间做准备');\n this._lastPageRoute = route;\n return;\n }\n\n getLastTime();\n this._lastPageRoute = route;\n var time = getResidenceTime('page');\n if (time.overtime) {\n var options = {\n path: this._lastPageRoute,\n scene: this.statData.sc };\n\n this._sendReportRequest(options);\n }\n getFirstTime();\n } }, { key: \"_pageHide\", value: function _pageHide()\n\n {\n if (!this.__licationHide) {\n getLastTime();\n var time = getResidenceTime('page');\n this._sendPageRequest({\n url: this._lastPageRoute,\n urlref: this._lastPageRoute,\n urlref_ts: time.residenceTime });\n\n this._navigationBarTitle = {\n config: '',\n page: '',\n report: '',\n lt: '' };\n\n return;\n }\n } }, { key: \"_login\", value: function _login()\n\n {\n this._sendEventRequest({\n key: 'login' },\n 0);\n } }, { key: \"_share\", value: function _share()\n\n {\n this._sendEventRequest({\n key: 'share' },\n 0);\n } }, { key: \"_payment\", value: function _payment(\n key) {\n this._sendEventRequest({\n key: key },\n 0);\n } }, { key: \"_sendReportRequest\", value: function _sendReportRequest(\n options) {\n\n this._navigationBarTitle.lt = '1';\n var query = options.query && JSON.stringify(options.query) !== '{}' ? '?' + JSON.stringify(options.query) : '';\n this.statData.lt = '1';\n this.statData.url = options.path + query || '';\n this.statData.t = getTime();\n this.statData.sc = getScene(options.scene);\n this.statData.fvts = getFirstVisitTime();\n this.statData.lvts = getLastVisitTime();\n this.statData.tvc = getTotalVisitCount();\n if (getPlatformName() === 'n') {\n this.getProperty();\n } else {\n this.getNetworkInfo();\n }\n } }, { key: \"_sendPageRequest\", value: function _sendPageRequest(\n\n opt) {var\n\n url =\n\n\n opt.url,urlref = opt.urlref,urlref_ts = opt.urlref_ts;\n this._navigationBarTitle.lt = '11';\n var options = {\n ak: this.statData.ak,\n uuid: this.statData.uuid,\n lt: '11',\n ut: this.statData.ut,\n url: url,\n tt: this.statData.tt,\n urlref: urlref,\n urlref_ts: urlref_ts,\n ch: this.statData.ch,\n usv: this.statData.usv,\n t: getTime(),\n p: this.statData.p };\n\n this.request(options);\n } }, { key: \"_sendHideRequest\", value: function _sendHideRequest(\n\n opt, type) {var\n\n urlref =\n\n opt.urlref,urlref_ts = opt.urlref_ts;\n var options = {\n ak: this.statData.ak,\n uuid: this.statData.uuid,\n lt: '3',\n ut: this.statData.ut,\n urlref: urlref,\n urlref_ts: urlref_ts,\n ch: this.statData.ch,\n usv: this.statData.usv,\n t: getTime(),\n p: this.statData.p };\n\n this.request(options, type);\n } }, { key: \"_sendEventRequest\", value: function _sendEventRequest()\n\n\n\n {var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},_ref$key = _ref.key,key = _ref$key === void 0 ? '' : _ref$key,_ref$value = _ref.value,value = _ref$value === void 0 ? \"\" : _ref$value;\n var route = this._lastPageRoute;\n var options = {\n ak: this.statData.ak,\n uuid: this.statData.uuid,\n lt: '21',\n ut: this.statData.ut,\n url: route,\n ch: this.statData.ch,\n e_n: key,\n e_v: typeof value === 'object' ? JSON.stringify(value) : value.toString(),\n usv: this.statData.usv,\n t: getTime(),\n p: this.statData.p };\n\n this.request(options);\n } }, { key: \"getNetworkInfo\", value: function getNetworkInfo()\n\n {var _this = this;\n uni.getNetworkType({\n success: function success(result) {\n _this.statData.net = result.networkType;\n _this.getLocation();\n } });\n\n } }, { key: \"getProperty\", value: function getProperty()\n\n {var _this2 = this;\n plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {\n _this2.statData.v = wgtinfo.version || '';\n _this2.getNetworkInfo();\n });\n } }, { key: \"getLocation\", value: function getLocation()\n\n {var _this3 = this;\n if (statConfig.getLocation) {\n uni.getLocation({\n type: 'wgs84',\n geocode: true,\n success: function success(result) {\n if (result.address) {\n _this3.statData.cn = result.address.country;\n _this3.statData.pn = result.address.province;\n _this3.statData.ct = result.address.city;\n }\n\n _this3.statData.lat = result.latitude;\n _this3.statData.lng = result.longitude;\n _this3.request(_this3.statData);\n } });\n\n } else {\n this.statData.lat = 0;\n this.statData.lng = 0;\n this.request(this.statData);\n }\n } }, { key: \"request\", value: function request(\n\n data, type) {var _this4 = this;\n var time = getTime();\n var title = this._navigationBarTitle;\n data.ttn = title.page;\n data.ttpj = title.config;\n data.ttc = title.report;\n\n var requestData = this._reportingRequestData;\n if (getPlatformName() === 'n') {\n requestData = uni.getStorageSync('__UNI__STAT__DATA') || {};\n }\n if (!requestData[data.lt]) {\n requestData[data.lt] = [];\n }\n requestData[data.lt].push(data);\n\n if (getPlatformName() === 'n') {\n uni.setStorageSync('__UNI__STAT__DATA', requestData);\n }\n if (getPageResidenceTime() < OPERATING_TIME && !type) {\n return;\n }\n var uniStatData = this._reportingRequestData;\n if (getPlatformName() === 'n') {\n uniStatData = uni.getStorageSync('__UNI__STAT__DATA');\n }\n // 时间超过,重新获取时间戳\n setPageResidenceTime();\n var firstArr = [];\n var contentArr = [];\n var lastArr = [];var _loop = function _loop(\n\n i) {\n var rd = uniStatData[i];\n rd.forEach(function (elm) {\n var newData = getSplicing(elm);\n if (i === 0) {\n firstArr.push(newData);\n } else if (i === 3) {\n lastArr.push(newData);\n } else {\n contentArr.push(newData);\n }\n });};for (var i in uniStatData) {_loop(i);\n }\n\n firstArr.push.apply(firstArr, contentArr.concat(lastArr));\n var optionsData = {\n usv: STAT_VERSION, //统计 SDK 版本号\n t: time, //发送请求时的时间戮\n requests: JSON.stringify(firstArr) };\n\n\n this._reportingRequestData = {};\n if (getPlatformName() === 'n') {\n uni.removeStorageSync('__UNI__STAT__DATA');\n }\n\n if (data.ut === 'h5') {\n this.imageRequest(optionsData);\n return;\n }\n\n if (getPlatformName() === 'n' && this.statData.p === 'a') {\n setTimeout(function () {\n _this4._sendRequest(optionsData);\n }, 200);\n return;\n }\n this._sendRequest(optionsData);\n } }, { key: \"_sendRequest\", value: function _sendRequest(\n optionsData) {var _this5 = this;\n uni.request({\n url: STAT_URL,\n method: 'POST',\n // header: {\n // 'content-type': 'application/json' // 默认值\n // },\n data: optionsData,\n success: function success() {\n // if (process.env.NODE_ENV === 'development') {\n // console.log('stat request success');\n // }\n },\n fail: function fail(e) {\n if (++_this5._retry < 3) {\n setTimeout(function () {\n _this5._sendRequest(optionsData);\n }, 1000);\n }\n } });\n\n }\n /**\r\n * h5 请求\r\n */ }, { key: \"imageRequest\", value: function imageRequest(\n data) {\n var image = new Image();\n var options = getSgin(GetEncodeURIComponentOptions(data)).options;\n image.src = STAT_H5_URL + '?' + options;\n } }, { key: \"sendEvent\", value: function sendEvent(\n\n key, value) {\n // 校验 type 参数\n if (calibration(key, value)) return;\n\n if (key === 'title') {\n this._navigationBarTitle.report = value;\n return;\n }\n this._sendEventRequest({\n key: key,\n value: typeof value === 'object' ? JSON.stringify(value) : value },\n 1);\n } }]);return Util;}();var\n\n\n\nStat = /*#__PURE__*/function (_Util) {_inherits(Stat, _Util);_createClass(Stat, null, [{ key: \"getInstance\", value: function getInstance()\n {\n if (!this.instance) {\n this.instance = new Stat();\n }\n return this.instance;\n } }]);\n function Stat() {var _this6;_classCallCheck(this, Stat);\n _this6 = _possibleConstructorReturn(this, _getPrototypeOf(Stat).call(this));\n _this6.instance = null;\n // 注册拦截器\n if (typeof uni.addInterceptor === 'function' && \"development\" !== 'development') {\n _this6.addInterceptorInit();\n _this6.interceptLogin();\n _this6.interceptShare(true);\n _this6.interceptRequestPayment();\n }return _this6;\n }_createClass(Stat, [{ key: \"addInterceptorInit\", value: function addInterceptorInit()\n\n {\n var self = this;\n uni.addInterceptor('setNavigationBarTitle', {\n invoke: function invoke(args) {\n self._navigationBarTitle.page = args.title;\n } });\n\n } }, { key: \"interceptLogin\", value: function interceptLogin()\n\n {\n var self = this;\n uni.addInterceptor('login', {\n complete: function complete() {\n self._login();\n } });\n\n } }, { key: \"interceptShare\", value: function interceptShare(\n\n type) {\n var self = this;\n if (!type) {\n self._share();\n return;\n }\n uni.addInterceptor('share', {\n success: function success() {\n self._share();\n },\n fail: function fail() {\n self._share();\n } });\n\n } }, { key: \"interceptRequestPayment\", value: function interceptRequestPayment()\n\n {\n var self = this;\n uni.addInterceptor('requestPayment', {\n success: function success() {\n self._payment('pay_success');\n },\n fail: function fail() {\n self._payment('pay_fail');\n } });\n\n } }, { key: \"report\", value: function report(\n\n options, self) {\n this.self = self;\n // if (process.env.NODE_ENV === 'development') {\n // console.log('report init');\n // }\n setPageResidenceTime();\n this.__licationShow = true;\n this._sendReportRequest(options, true);\n } }, { key: \"load\", value: function load(\n\n options, self) {\n if (!self.$scope && !self.$mp) {\n var page = getCurrentPages();\n self.$scope = page[page.length - 1];\n }\n this.self = self;\n this._query = options;\n } }, { key: \"show\", value: function show(\n\n self) {\n this.self = self;\n if (getPageTypes(self)) {\n this._pageShow(self);\n } else {\n this._applicationShow(self);\n }\n } }, { key: \"ready\", value: function ready(\n\n self) {\n // this.self = self;\n // if (getPageTypes(self)) {\n // this._pageShow(self);\n // }\n } }, { key: \"hide\", value: function hide(\n self) {\n this.self = self;\n if (getPageTypes(self)) {\n this._pageHide(self);\n } else {\n this._applicationHide(self, true);\n }\n } }, { key: \"error\", value: function error(\n em) {\n if (this._platform === 'devtools') {\n if (true) {\n console.info('当前运行环境为开发者工具,不上报数据。');\n }\n // return;\n }\n var emVal = '';\n if (!em.message) {\n emVal = JSON.stringify(em);\n } else {\n emVal = em.stack;\n }\n var options = {\n ak: this.statData.ak,\n uuid: this.statData.uuid,\n lt: '31',\n ut: this.statData.ut,\n ch: this.statData.ch,\n mpsdk: this.statData.mpsdk,\n mpv: this.statData.mpv,\n v: this.statData.v,\n em: emVal,\n usv: this.statData.usv,\n t: getTime(),\n p: this.statData.p };\n\n this.request(options);\n } }]);return Stat;}(Util);\n\n\nvar stat = Stat.getInstance();\nvar isHide = false;\nvar lifecycle = {\n onLaunch: function onLaunch(options) {\n stat.report(options, this);\n },\n onReady: function onReady() {\n stat.ready(this);\n },\n onLoad: function onLoad(options) {\n stat.load(options, this);\n // 重写分享,获取分享上报事件\n if (this.$scope && this.$scope.onShareAppMessage) {\n var oldShareAppMessage = this.$scope.onShareAppMessage;\n this.$scope.onShareAppMessage = function (options) {\n stat.interceptShare(false);\n return oldShareAppMessage.call(this, options);\n };\n }\n },\n onShow: function onShow() {\n isHide = false;\n stat.show(this);\n },\n onHide: function onHide() {\n isHide = true;\n stat.hide(this);\n },\n onUnload: function onUnload() {\n if (isHide) {\n isHide = false;\n return;\n }\n stat.hide(this);\n },\n onError: function onError(e) {\n stat.error(e);\n } };\n\n\nfunction main() {\n if (true) {\n uni.report = function (type, options) {};\n } else { var Vue; }\n}\n\nmain();\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbIlNUQVRfVkVSU0lPTiIsInZlcnNpb24iLCJTVEFUX1VSTCIsIlNUQVRfSDVfVVJMIiwiUEFHRV9QVkVSX1RJTUUiLCJBUFBfUFZFUl9USU1FIiwiT1BFUkFUSU5HX1RJTUUiLCJVVUlEX0tFWSIsIlVVSURfVkFMVUUiLCJnZXRVdWlkIiwidXVpZCIsImdldFBsYXRmb3JtTmFtZSIsInBsdXMiLCJydW50aW1lIiwiZ2V0RENsb3VkSWQiLCJlIiwidW5pIiwiZ2V0U3RvcmFnZVN5bmMiLCJEYXRlIiwibm93IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2V0U3RvcmFnZVN5bmMiLCJnZXRTZ2luIiwic3RhdERhdGEiLCJhcnIiLCJPYmplY3QiLCJrZXlzIiwic29ydEFyciIsInNvcnQiLCJzZ2luIiwic2dpblN0ciIsImkiLCJzaWduIiwib3B0aW9ucyIsInN1YnN0ciIsImxlbmd0aCIsImdldFNwbGljaW5nIiwiZGF0YSIsInN0ciIsImdldFRpbWUiLCJwYXJzZUludCIsInBsYXRmb3JtTGlzdCIsInByb2Nlc3MiLCJnZXRQYWNrTmFtZSIsInBhY2tOYW1lIiwiY2FuSVVzZSIsImdldEFjY291bnRJbmZvU3luYyIsIm1pbmlQcm9ncmFtIiwiYXBwSWQiLCJnZXRWZXJzaW9uIiwiZ2V0Q2hhbm5lbCIsInBsYXRmb3JtTmFtZSIsImNoYW5uZWwiLCJnZXRTY2VuZSIsInNjZW5lIiwiZ2V0TGF1bmNoT3B0aW9uc1N5bmMiLCJGaXJzdF9fVmlzaXRfX1RpbWVfX0tFWSIsIkxhc3RfX1Zpc2l0X19UaW1lX19LRVkiLCJnZXRGaXJzdFZpc2l0VGltZSIsInRpbWVTdG9yZ2UiLCJ0aW1lIiwicmVtb3ZlU3RvcmFnZVN5bmMiLCJnZXRMYXN0VmlzaXRUaW1lIiwiUEFHRV9SRVNJREVOQ0VfVElNRSIsIkZpcnN0X1BhZ2VfcmVzaWRlbmNlX3RpbWUiLCJMYXN0X1BhZ2VfcmVzaWRlbmNlX3RpbWUiLCJzZXRQYWdlUmVzaWRlbmNlVGltZSIsImdldFBhZ2VSZXNpZGVuY2VUaW1lIiwiVE9UQUxfX1ZJU0lUX19DT1VOVCIsImdldFRvdGFsVmlzaXRDb3VudCIsImNvdW50IiwiR2V0RW5jb2RlVVJJQ29tcG9uZW50T3B0aW9ucyIsInByb3AiLCJlbmNvZGVVUklDb21wb25lbnQiLCJTZXRfX0ZpcnN0X19UaW1lIiwiU2V0X19MYXN0X19UaW1lIiwiZ2V0Rmlyc3RUaW1lIiwiZ2V0TGFzdFRpbWUiLCJnZXRSZXNpZGVuY2VUaW1lIiwidHlwZSIsInJlc2lkZW5jZVRpbWUiLCJvdmVydGltZSIsImdldFJvdXRlIiwicGFnZXMiLCJnZXRDdXJyZW50UGFnZXMiLCJwYWdlIiwiX3NlbGYiLCIkdm0iLCIkbXAiLCJpcyIsIiRzY29wZSIsInJvdXRlIiwiZ2V0UGFnZVJvdXRlIiwic2VsZiIsInF1ZXJ5IiwiX3F1ZXJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFBhZ2VUeXBlcyIsIm1wVHlwZSIsIiRvcHRpb25zIiwiY2FsaWJyYXRpb24iLCJldmVudE5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJQYWdlc0pzb24iLCJyZXF1aXJlIiwiZGVmYXVsdCIsInN0YXRDb25maWciLCJyZXN1bHRPcHRpb25zIiwiZ2V0U3lzdGVtSW5mb1N5bmMiLCJVdGlsIiwiX3JldHJ5IiwiX3BsYXRmb3JtIiwiX25hdmlnYXRpb25CYXJUaXRsZSIsImNvbmZpZyIsInJlcG9ydCIsImx0IiwiX29wZXJhdGluZ1RpbWUiLCJfcmVwb3J0aW5nUmVxdWVzdERhdGEiLCJfX3ByZXZlbnRfdHJpZ2dlcmluZyIsIl9fbGljYXRpb25IaWRlIiwiX19saWNhdGlvblNob3ciLCJfbGFzdFBhZ2VSb3V0ZSIsInV0IiwibXBuIiwiYWsiLCJhcHBpZCIsInVzdiIsInYiLCJjaCIsImNuIiwicG4iLCJjdCIsInQiLCJ0dCIsInAiLCJwbGF0Zm9ybSIsImJyYW5kIiwibWQiLCJtb2RlbCIsInN2Iiwic3lzdGVtIiwicmVwbGFjZSIsIm1wc2RrIiwiU0RLVmVyc2lvbiIsIm1wdiIsImxhbmciLCJsYW5ndWFnZSIsInByIiwicGl4ZWxSYXRpbyIsInd3Iiwid2luZG93V2lkdGgiLCJ3aCIsIndpbmRvd0hlaWdodCIsInN3Iiwic2NyZWVuV2lkdGgiLCJzaCIsInNjcmVlbkhlaWdodCIsInBhdGgiLCJzYyIsIl9zZW5kUmVwb3J0UmVxdWVzdCIsIl9zZW5kSGlkZVJlcXVlc3QiLCJ1cmxyZWYiLCJ1cmxyZWZfdHMiLCJyb3V0ZXBhdGgiLCJ0aXRsZU5WaWV3IiwidGl0bGVUZXh0IiwibmF2aWdhdGlvbkJhclRpdGxlVGV4dCIsIl9zZW5kUGFnZVJlcXVlc3QiLCJ1cmwiLCJfc2VuZEV2ZW50UmVxdWVzdCIsImtleSIsImZ2dHMiLCJsdnRzIiwidHZjIiwiZ2V0UHJvcGVydHkiLCJnZXROZXR3b3JrSW5mbyIsIm9wdCIsInJlcXVlc3QiLCJ2YWx1ZSIsImVfbiIsImVfdiIsInRvU3RyaW5nIiwiZ2V0TmV0d29ya1R5cGUiLCJzdWNjZXNzIiwicmVzdWx0IiwibmV0IiwibmV0d29ya1R5cGUiLCJnZXRMb2NhdGlvbiIsIndndGluZm8iLCJnZW9jb2RlIiwiYWRkcmVzcyIsImNvdW50cnkiLCJwcm92aW5jZSIsImNpdHkiLCJsYXQiLCJsYXRpdHVkZSIsImxuZyIsImxvbmdpdHVkZSIsInRpdGxlIiwidHRuIiwidHRwaiIsInR0YyIsInJlcXVlc3REYXRhIiwicHVzaCIsInVuaVN0YXREYXRhIiwiZmlyc3RBcnIiLCJjb250ZW50QXJyIiwibGFzdEFyciIsInJkIiwiZm9yRWFjaCIsImVsbSIsIm5ld0RhdGEiLCJvcHRpb25zRGF0YSIsInJlcXVlc3RzIiwiaW1hZ2VSZXF1ZXN0Iiwic2V0VGltZW91dCIsIl9zZW5kUmVxdWVzdCIsIm1ldGhvZCIsImZhaWwiLCJpbWFnZSIsIkltYWdlIiwic3JjIiwiU3RhdCIsImluc3RhbmNlIiwiYWRkSW50ZXJjZXB0b3IiLCJhZGRJbnRlcmNlcHRvckluaXQiLCJpbnRlcmNlcHRMb2dpbiIsImludGVyY2VwdFNoYXJlIiwiaW50ZXJjZXB0UmVxdWVzdFBheW1lbnQiLCJpbnZva2UiLCJhcmdzIiwiY29tcGxldGUiLCJfbG9naW4iLCJfc2hhcmUiLCJfcGF5bWVudCIsIl9wYWdlU2hvdyIsIl9hcHBsaWNhdGlvblNob3ciLCJfcGFnZUhpZGUiLCJfYXBwbGljYXRpb25IaWRlIiwiZW0iLCJpbmZvIiwiZW1WYWwiLCJtZXNzYWdlIiwic3RhY2siLCJzdGF0IiwiZ2V0SW5zdGFuY2UiLCJpc0hpZGUiLCJsaWZlY3ljbGUiLCJvbkxhdW5jaCIsIm9uUmVhZHkiLCJyZWFkeSIsIm9uTG9hZCIsImxvYWQiLCJvblNoYXJlQXBwTWVzc2FnZSIsIm9sZFNoYXJlQXBwTWVzc2FnZSIsImNhbGwiLCJvblNob3ciLCJzaG93Iiwib25IaWRlIiwiaGlkZSIsIm9uVW5sb2FkIiwib25FcnJvciIsIm1haW4iXSwibWFwcGluZ3MiOiIyQ0FBQSw2RDs7QUFFQSxJQUFNQSxZQUFZLEdBQUdDLGdCQUFyQjtBQUNBLElBQU1DLFFBQVEsR0FBRyxtQ0FBakI7QUFDQSxJQUFNQyxXQUFXLEdBQUcsdUNBQXBCO0FBQ0EsSUFBTUMsY0FBYyxHQUFHLElBQXZCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLEdBQXRCO0FBQ0EsSUFBTUMsY0FBYyxHQUFHLEVBQXZCOztBQUVBLElBQU1DLFFBQVEsR0FBRyxnQkFBakI7QUFDQSxJQUFNQyxVQUFVLEdBQUcsaUJBQW5COztBQUVBLFNBQVNDLE9BQVQsR0FBbUI7QUFDakIsTUFBSUMsSUFBSSxHQUFHLEVBQVg7QUFDQSxNQUFJQyxlQUFlLE9BQU8sR0FBMUIsRUFBK0I7QUFDN0IsUUFBSTtBQUNGRCxVQUFJLEdBQUdFLElBQUksQ0FBQ0MsT0FBTCxDQUFhQyxXQUFiLEVBQVA7QUFDRCxLQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1ZMLFVBQUksR0FBRyxFQUFQO0FBQ0Q7QUFDRCxXQUFPQSxJQUFQO0FBQ0Q7O0FBRUQsTUFBSTtBQUNGQSxRQUFJLEdBQUdNLEdBQUcsQ0FBQ0MsY0FBSixDQUFtQlYsUUFBbkIsQ0FBUDtBQUNELEdBRkQsQ0FFRSxP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LENBQUNqQixjQUFMLENBQW9CLEtBQXBCO0FBQ0EsZUFBTzJCLGtCQUFrQixDQUFDQyxJQUFuQixDQUF3QixJQUF4QixFQUE4QmhPLE9BQTlCLENBQVA7QUFDRCxPQUhEO0FBSUQ7QUFDRixHQWpCZTtBQWtCaEJpTyxRQWxCZ0Isb0JBa0JQO0FBQ1BWLFVBQU0sR0FBRyxLQUFUO0FBQ0FGLFFBQUksQ0FBQ2EsSUFBTCxDQUFVLElBQVY7QUFDRCxHQXJCZTtBQXNCaEJDLFFBdEJnQixvQkFzQlA7QUFDUFosVUFBTSxHQUFHLElBQVQ7QUFDQUYsUUFBSSxDQUFDZSxJQUFMLENBQVUsSUFBVjtBQUNELEdBekJlO0FBMEJoQkMsVUExQmdCLHNCQTBCTDtBQUNULFFBQUlkLE1BQUosRUFBWTtBQUNWQSxZQUFNLEdBQUcsS0FBVDtBQUNBO0FBQ0Q7QUFDREYsUUFBSSxDQUFDZSxJQUFMLENBQVUsSUFBVjtBQUNELEdBaENlO0FBaUNoQkUsU0FqQ2dCLG1CQWlDUjFQLENBakNRLEVBaUNMO0FBQ1R5TyxRQUFJLENBQUM5SSxLQUFMLENBQVczRixDQUFYO0FBQ0QsR0FuQ2UsRUFBbEI7OztBQXNDQSxTQUFTMlAsSUFBVCxHQUFnQjtBQUNkLE1BQUk5TixJQUFKLEVBQTRDO0FBQzFDNUIsT0FBRyxDQUFDc0csTUFBSixHQUFhLFVBQVNyQyxJQUFULEVBQWU5QyxPQUFmLEVBQXdCLENBQUUsQ0FBdkM7QUFDRCxHQUZELE1BRUssWUFNSjtBQUNGOztBQUVEdU8sSUFBSSxHIiwiZmlsZSI6IjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcclxuXHJcbmNvbnN0IFNUQVRfVkVSU0lPTiA9IHZlcnNpb247XHJcbmNvbnN0IFNUQVRfVVJMID0gJ2h0dHBzOi8vdG9uZ2ppLmRjbG91ZC5pby91bmkvc3RhdCc7XHJcbmNvbnN0IFNUQVRfSDVfVVJMID0gJ2h0dHBzOi8vdG9uZ2ppLmRjbG91ZC5pby91bmkvc3RhdC5naWYnOyBcclxuY29uc3QgUEFHRV9QVkVSX1RJTUUgPSAxODAwO1xyXG5jb25zdCBBUFBfUFZFUl9USU1FID0gMzAwO1xyXG5jb25zdCBPUEVSQVRJTkdfVElNRSA9IDEwO1xyXG5cclxuY29uc3QgVVVJRF9LRVkgPSAnX19EQ19TVEFUX1VVSUQnO1xyXG5jb25zdCBVVUlEX1ZBTFVFID0gJ19fRENfVVVJRF9WQUxVRSc7XHJcblxyXG5mdW5jdGlvbiBnZXRVdWlkKCkge1xyXG4gIGxldCB1dWlkID0gJyc7XHJcbiAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnbicpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHV1aWQgPSBwbHVzLnJ1bnRpbWUuZ2V0RENsb3VkSWQoKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdXVpZCA9ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHV1aWRcclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICB1dWlkID0gdW5pLmdldFN0b3JhZ2VTeW5jKFVVSURfS0VZKTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICB1dWlkID0gVVVJRF9WQUxVRTtcclxuICB9XHJcblxyXG4gIGlmICghdXVpZCkge1xyXG4gICAgdXVpZCA9IERhdGUubm93KCkgKyAnJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlNyk7XHJcbiAgICB0cnkge1xyXG4gICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoVVVJRF9LRVksIHV1aWQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoVVVJRF9LRVksIFVVSURfVkFMVUUpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdXVpZDtcclxufVxyXG5cclxuY29uc3QgZ2V0U2dpbiA9IChzdGF0RGF0YSkgPT4ge1xyXG4gIGxldCBhcnIgPSBPYmplY3Qua2V5cyhzdGF0RGF0YSk7XHJcbiAgbGV0IHNvcnRBcnIgPSBhcnIuc29ydCgpO1xyXG4gIGxldCBzZ2luID0ge307XHJcbiAgbGV0IHNnaW5TdHIgPSAnJztcclxuICBmb3IgKHZhciBpIGluIHNvcnRBcnIpIHtcclxuICAgIHNnaW5bc29ydEFycltpXV0gPSBzdGF0RGF0YVtzb3J0QXJyW2ldXTtcclxuICAgIHNnaW5TdHIgKz0gc29ydEFycltpXSArICc9JyArIHN0YXREYXRhW3NvcnRBcnJbaV1dICsgJyYnO1xyXG4gIH1cclxuICAvLyBjb25zdCBvcHRpb25zID0gc2dpblN0ci5zdWJzdHIoMCwgc2dpblN0ci5sZW5ndGggLSAxKVxyXG4gIC8vIHNnaW5TdHIgPSBzZ2luU3RyLnN1YnN0cigwLCBzZ2luU3RyLmxlbmd0aCAtIDEpICsgJyZrZXk9JyArIFNUQVRfS0VZO1xyXG4gIC8vIGNvbnN0IHNpID0gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShzZ2luU3RyKS5kaWdlc3QoJ2hleCcpO1xyXG4gIHJldHVybiB7XHJcbiAgICBzaWduOiAnJyxcclxuICAgIG9wdGlvbnM6IHNnaW5TdHIuc3Vic3RyKDAsIHNnaW5TdHIubGVuZ3RoIC0gMSlcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgZ2V0U3BsaWNpbmcgPSAoZGF0YSkgPT4ge1xyXG4gIGxldCBzdHIgPSAnJztcclxuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcclxuICAgIHN0ciArPSBpICsgJz0nICsgZGF0YVtpXSArICcmJztcclxuICB9XHJcbiAgcmV0dXJuIHN0ci5zdWJzdHIoMCwgc3RyLmxlbmd0aCAtIDEpXHJcbn07XHJcblxyXG5jb25zdCBnZXRUaW1lID0gKCkgPT4ge1xyXG4gIHJldHVybiBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0UGxhdGZvcm1OYW1lID0gKCkgPT4ge1xyXG4gIGNvbnN0IHBsYXRmb3JtTGlzdCA9IHtcclxuICAgICdhcHAtcGx1cyc6ICduJyxcclxuICAgICdoNSc6ICdoNScsXHJcbiAgICAnbXAtd2VpeGluJzogJ3d4JyxcclxuICAgICdtcC1hbGlwYXknOiAnYWxpJyxcclxuICAgICdtcC1iYWlkdSc6ICdiZCcsXHJcbiAgICAnbXAtdG91dGlhbyc6ICd0dCcsXHJcbiAgICAnbXAtcXEnOiAncXEnXHJcbiAgfTtcclxuICByZXR1cm4gcGxhdGZvcm1MaXN0W3Byb2Nlc3MuZW52LlZVRV9BUFBfUExBVEZPUk1dO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0UGFja05hbWUgPSAoKSA9PiB7XHJcbiAgbGV0IHBhY2tOYW1lID0gJyc7XHJcbiAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnd3gnIHx8IGdldFBsYXRmb3JtTmFtZSgpID09PSAncXEnKSB7XHJcbiAgICAvLyDlhbzlrrnlvq7kv6HlsI/nqIvluo/kvY7niYjmnKzln7rnoYDlupNcclxuICAgIGlmKHVuaS5jYW5JVXNlKCdnZXRBY2NvdW50SW5mb1N5bmMnKSl7XHJcbiAgICAgIHBhY2tOYW1lID0gdW5pLmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtLmFwcElkIHx8ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcGFja05hbWVcclxufTtcclxuXHJcbmNvbnN0IGdldFZlcnNpb24gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIGdldFBsYXRmb3JtTmFtZSgpID09PSAnbicgPyBwbHVzLnJ1bnRpbWUudmVyc2lvbiA6ICcnO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0Q2hhbm5lbCA9ICgpID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybU5hbWUgPSBnZXRQbGF0Zm9ybU5hbWUoKTtcclxuICBsZXQgY2hhbm5lbCA9ICcnO1xyXG4gIGlmIChwbGF0Zm9ybU5hbWUgPT09ICduJykge1xyXG4gICAgY2hhbm5lbCA9IHBsdXMucnVudGltZS5jaGFubmVsO1xyXG4gIH1cclxuICByZXR1cm4gY2hhbm5lbDtcclxufTtcclxuXHJcbmNvbnN0IGdldFNjZW5lID0gKG9wdGlvbnMpID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybU5hbWUgPSBnZXRQbGF0Zm9ybU5hbWUoKTtcclxuICBsZXQgc2NlbmUgPSAnJztcclxuICBpZiAob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG4gIGlmIChwbGF0Zm9ybU5hbWUgPT09ICd3eCcpIHtcclxuICAgIHNjZW5lID0gdW5pLmdldExhdW5jaE9wdGlvbnNTeW5jKCkuc2NlbmU7XHJcbiAgfVxyXG4gIHJldHVybiBzY2VuZTtcclxufTtcclxuY29uc3QgRmlyc3RfX1Zpc2l0X19UaW1lX19LRVkgPSAnRmlyc3RfX1Zpc2l0X19UaW1lJztcclxuY29uc3QgTGFzdF9fVmlzaXRfX1RpbWVfX0tFWSA9ICdMYXN0X19WaXNpdF9fVGltZSc7XHJcblxyXG5jb25zdCBnZXRGaXJzdFZpc2l0VGltZSA9ICgpID0+IHtcclxuICBjb25zdCB0aW1lU3RvcmdlID0gdW5pLmdldFN0b3JhZ2VTeW5jKEZpcnN0X19WaXNpdF9fVGltZV9fS0VZKTtcclxuICBsZXQgdGltZSA9IDA7XHJcbiAgaWYgKHRpbWVTdG9yZ2UpIHtcclxuICAgIHRpbWUgPSB0aW1lU3RvcmdlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aW1lID0gZ2V0VGltZSgpO1xyXG4gICAgdW5pLnNldFN0b3JhZ2VTeW5jKEZpcnN0X19WaXNpdF9fVGltZV9fS0VZLCB0aW1lKTtcclxuICAgIHVuaS5yZW1vdmVTdG9yYWdlU3luYyhMYXN0X19WaXNpdF9fVGltZV9fS0VZKTtcclxuICB9XHJcbiAgcmV0dXJuIHRpbWU7XHJcbn07XHJcblxyXG5jb25zdCBnZXRMYXN0VmlzaXRUaW1lID0gKCkgPT4ge1xyXG4gIGNvbnN0IHRpbWVTdG9yZ2UgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoTGFzdF9fVmlzaXRfX1RpbWVfX0tFWSk7XHJcbiAgbGV0IHRpbWUgPSAwO1xyXG4gIGlmICh0aW1lU3RvcmdlKSB7XHJcbiAgICB0aW1lID0gdGltZVN0b3JnZTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGltZSA9ICcnO1xyXG4gIH1cclxuICB1bmkuc2V0U3RvcmFnZVN5bmMoTGFzdF9fVmlzaXRfX1RpbWVfX0tFWSwgZ2V0VGltZSgpKTtcclxuICByZXR1cm4gdGltZTtcclxufTtcclxuXHJcblxyXG5jb25zdCBQQUdFX1JFU0lERU5DRV9USU1FID0gJ19fcGFnZV9fcmVzaWRlbmNlX190aW1lJztcclxubGV0IEZpcnN0X1BhZ2VfcmVzaWRlbmNlX3RpbWUgPSAwO1xyXG5sZXQgTGFzdF9QYWdlX3Jlc2lkZW5jZV90aW1lID0gMDtcclxuXHJcblxyXG5jb25zdCBzZXRQYWdlUmVzaWRlbmNlVGltZSA9ICgpID0+IHtcclxuICBGaXJzdF9QYWdlX3Jlc2lkZW5jZV90aW1lID0gZ2V0VGltZSgpO1xyXG4gIGlmIChnZXRQbGF0Zm9ybU5hbWUoKSA9PT0gJ24nKSB7XHJcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoUEFHRV9SRVNJREVOQ0VfVElNRSwgZ2V0VGltZSgpKTtcclxuICB9XHJcbiAgcmV0dXJuIEZpcnN0X1BhZ2VfcmVzaWRlbmNlX3RpbWVcclxufTtcclxuXHJcbmNvbnN0IGdldFBhZ2VSZXNpZGVuY2VUaW1lID0gKCkgPT4ge1xyXG4gIExhc3RfUGFnZV9yZXNpZGVuY2VfdGltZSA9IGdldFRpbWUoKTtcclxuICBpZiAoZ2V0UGxhdGZvcm1OYW1lKCkgPT09ICduJykge1xyXG4gICAgRmlyc3RfUGFnZV9yZXNpZGVuY2VfdGltZSA9IHVuaS5nZXRTdG9yYWdlU3luYyhQQUdFX1JFU0lERU5DRV9USU1FKTtcclxuICB9XHJcbiAgcmV0dXJuIExhc3RfUGFnZV9yZXNpZGVuY2VfdGltZSAtIEZpcnN0X1BhZ2VfcmVzaWRlbmNlX3RpbWVcclxufTtcclxuY29uc3QgVE9UQUxfX1ZJU0lUX19DT1VOVCA9ICdUb3RhbF9fVmlzaXRfX0NvdW50JztcclxuY29uc3QgZ2V0VG90YWxWaXNpdENvdW50ID0gKCkgPT4ge1xyXG4gIGNvbnN0IHRpbWVTdG9yZ2UgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoVE9UQUxfX1ZJU0lUX19DT1VOVCk7XHJcbiAgbGV0IGNvdW50ID0gMTtcclxuICBpZiAodGltZVN0b3JnZSkge1xyXG4gICAgY291bnQgPSB0aW1lU3RvcmdlO1xyXG4gICAgY291bnQrKztcclxuICB9XHJcbiAgdW5pLnNldFN0b3JhZ2VTeW5jKFRPVEFMX19WSVNJVF9fQ09VTlQsIGNvdW50KTtcclxuICByZXR1cm4gY291bnQ7XHJcbn07XHJcblxyXG5jb25zdCBHZXRFbmNvZGVVUklDb21wb25lbnRPcHRpb25zID0gKHN0YXREYXRhKSA9PiB7XHJcbiAgbGV0IGRhdGEgPSB7fTtcclxuICBmb3IgKGxldCBwcm9wIGluIHN0YXREYXRhKSB7XHJcbiAgICBkYXRhW3Byb3BdID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0YXREYXRhW3Byb3BdKTtcclxuICB9XHJcbiAgcmV0dXJuIGRhdGE7XHJcbn07XHJcblxyXG5sZXQgU2V0X19GaXJzdF9fVGltZSA9IDA7XHJcbmxldCBTZXRfX0xhc3RfX1RpbWUgPSAwO1xyXG5cclxuY29uc3QgZ2V0Rmlyc3RUaW1lID0gKCkgPT4ge1xyXG4gIGxldCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgU2V0X19GaXJzdF9fVGltZSA9IHRpbWU7XHJcbiAgU2V0X19MYXN0X19UaW1lID0gMDtcclxuICByZXR1cm4gdGltZTtcclxufTtcclxuXHJcblxyXG5jb25zdCBnZXRMYXN0VGltZSA9ICgpID0+IHtcclxuICBsZXQgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gIFNldF9fTGFzdF9fVGltZSA9IHRpbWU7XHJcbiAgcmV0dXJuIHRpbWU7XHJcbn07XHJcblxyXG5cclxuY29uc3QgZ2V0UmVzaWRlbmNlVGltZSA9ICh0eXBlKSA9PiB7XHJcbiAgbGV0IHJlc2lkZW5jZVRpbWUgPSAwO1xyXG4gIGlmIChTZXRfX0ZpcnN0X19UaW1lICE9PSAwKSB7XHJcbiAgICByZXNpZGVuY2VUaW1lID0gU2V0X19MYXN0X19UaW1lIC0gU2V0X19GaXJzdF9fVGltZTtcclxuICB9XHJcblxyXG4gIHJlc2lkZW5jZVRpbWUgPSBwYXJzZUludChyZXNpZGVuY2VUaW1lIC8gMTAwMCk7XHJcbiAgcmVzaWRlbmNlVGltZSA9IHJlc2lkZW5jZVRpbWUgPCAxID8gMSA6IHJlc2lkZW5jZVRpbWU7XHJcbiAgaWYgKHR5cGUgPT09ICdhcHAnKSB7XHJcbiAgICBsZXQgb3ZlcnRpbWUgPSByZXNpZGVuY2VUaW1lID4gQVBQX1BWRVJfVElNRSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc2lkZW5jZVRpbWUsXHJcbiAgICAgIG92ZXJ0aW1lXHJcbiAgICB9O1xyXG4gIH1cclxuICBpZiAodHlwZSA9PT0gJ3BhZ2UnKSB7XHJcbiAgICBsZXQgb3ZlcnRpbWUgPSByZXNpZGVuY2VUaW1lID4gUEFHRV9QVkVSX1RJTUUgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXNpZGVuY2VUaW1lLFxyXG4gICAgICBvdmVydGltZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZXNpZGVuY2VUaW1lXHJcbiAgfTtcclxuXHJcbn07XHJcblxyXG5jb25zdCBnZXRSb3V0ZSA9ICgpID0+IHtcclxuICB2YXIgcGFnZXMgPSBnZXRDdXJyZW50UGFnZXMoKTtcclxuICB2YXIgcGFnZSA9IHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdO1xyXG4gIGxldCBfc2VsZiA9IHBhZ2UuJHZtO1xyXG5cclxuICBpZiAoZ2V0UGxhdGZvcm1OYW1lKCkgPT09ICdiZCcpIHtcclxuICAgIHJldHVybiBfc2VsZi4kbXAgJiYgX3NlbGYuJG1wLnBhZ2UuaXM7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAoX3NlbGYuJHNjb3BlICYmIF9zZWxmLiRzY29wZS5yb3V0ZSkgfHwgKF9zZWxmLiRtcCAmJiBfc2VsZi4kbXAucGFnZS5yb3V0ZSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0UGFnZVJvdXRlID0gKHNlbGYpID0+IHtcclxuICB2YXIgcGFnZXMgPSBnZXRDdXJyZW50UGFnZXMoKTtcclxuICB2YXIgcGFnZSA9IHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdO1xyXG4gIGxldCBfc2VsZiA9IHBhZ2UuJHZtO1xyXG4gIGxldCBxdWVyeSA9IHNlbGYuX3F1ZXJ5O1xyXG4gIGxldCBzdHIgPSBxdWVyeSAmJiBKU09OLnN0cmluZ2lmeShxdWVyeSkgIT09ICd7fScgPyAnPycgKyBKU09OLnN0cmluZ2lmeShxdWVyeSkgOiAnJztcclxuICAvLyBjbGVhclxyXG4gIHNlbGYuX3F1ZXJ5ID0gJyc7XHJcbiAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnYmQnKSB7XHJcbiAgICByZXR1cm4gX3NlbGYuJG1wICYmIF9zZWxmLiRtcC5wYWdlLmlzICsgc3RyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gKF9zZWxmLiRzY29wZSAmJiBfc2VsZi4kc2NvcGUucm91dGUgKyBzdHIgKXx8IChfc2VsZi4kbXAgJiYgX3NlbGYuJG1wLnBhZ2Uucm91dGUgKyBzdHIpO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldFBhZ2VUeXBlcyA9IChzZWxmKSA9PiB7XHJcbiAgaWYgKHNlbGYubXBUeXBlID09PSAncGFnZScgfHwgKHNlbGYuJG1wICYmIHNlbGYuJG1wLm1wVHlwZSA9PT0gJ3BhZ2UnKSB8fCBzZWxmLiRvcHRpb25zLm1wVHlwZSA9PT0gJ3BhZ2UnKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgY2FsaWJyYXRpb24gPSAoZXZlbnROYW1lLCBvcHRpb25zKSA9PiB7XHJcbiAgLy8gIGxvZ2luIOOAgSBzaGFyZSDjgIFwYXlfc3VjY2VzcyDjgIFwYXlfZmFpbCDjgIFyZWdpc3RlciDjgIF0aXRsZVxyXG4gIGlmKCFldmVudE5hbWUpe1xyXG4gICAgY29uc29sZS5lcnJvcihgdW5pLnJlcG9ydCDnvLrlsJEgW2V2ZW50TmFtZV0g5Y+C5pWwYCk7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYHVuaS5yZXBvcnQgW2V2ZW50TmFtZV0g5Y+C5pWw57G75Z6L6ZSZ6K+vLOWPquiDveS4uiBTdHJpbmcg57G75Z6LYCk7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoZXZlbnROYW1lLmxlbmd0aCA+IDI1NSkge1xyXG4gICAgY29uc29sZS5lcnJvcihgdW5pLnJlcG9ydCBbZXZlbnROYW1lXSDlj4LmlbDplb/luqbkuI3og73lpKfkuo4gMjU1YCk7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYHVuaS5yZXBvcnQgW29wdGlvbnNdIOWPguaVsOexu+Wei+mUmeivryzlj6rog73kuLogU3RyaW5nIOaIliBPYmplY3Qg57G75Z6LYCk7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmxlbmd0aCA+IDI1NSkge1xyXG4gICAgY29uc29sZS5lcnJvcihgdW5pLnJlcG9ydCBbb3B0aW9uc10g5Y+C5pWw6ZW/5bqm5LiN6IO95aSn5LqOIDI1NWApO1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGlmIChldmVudE5hbWUgPT09ICd0aXRsZScgJiYgdHlwZW9mIG9wdGlvbnMgIT09ICdzdHJpbmcnKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmkucmVwb3J0IFtldmVudE5hbWVdIOWPguaVsOS4uiB0aXRsZSDml7bvvIxbb3B0aW9uc10g5Y+C5pWw5Y+q6IO95Li6IFN0cmluZyDnsbvlnosnKTtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgUGFnZXNKc29uID0gcmVxdWlyZSgndW5pLXBhZ2VzP3tcInR5cGVcIjpcInN0eWxlXCJ9JykuZGVmYXVsdDtcclxuY29uc3Qgc3RhdENvbmZpZyA9IHJlcXVpcmUoJ3VuaS1zdGF0LWNvbmZpZycpLmRlZmF1bHQgfHwgcmVxdWlyZSgndW5pLXN0YXQtY29uZmlnJyk7XHJcblxyXG5jb25zdCByZXN1bHRPcHRpb25zID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKCk7XHJcblxyXG5jbGFzcyBVdGlsIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc2VsZiA9ICcnO1xyXG4gICAgdGhpcy5fcmV0cnkgPSAwO1xyXG4gICAgdGhpcy5fcGxhdGZvcm0gPSAnJztcclxuICAgIHRoaXMuX3F1ZXJ5ID0ge307XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyVGl0bGUgPSB7XHJcbiAgICAgIGNvbmZpZzogJycsXHJcbiAgICAgIHBhZ2U6ICcnLFxyXG4gICAgICByZXBvcnQ6ICcnLFxyXG4gICAgICBsdDogJydcclxuICAgIH07XHJcbiAgICB0aGlzLl9vcGVyYXRpbmdUaW1lID0gMDtcclxuICAgIHRoaXMuX3JlcG9ydGluZ1JlcXVlc3REYXRhID0ge1xyXG4gICAgICAnMSc6IFtdLFxyXG4gICAgICAnMTEnOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuX19wcmV2ZW50X3RyaWdnZXJpbmcgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9fbGljYXRpb25IaWRlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9fbGljYXRpb25TaG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXN0UGFnZVJvdXRlID0gJyc7XHJcbiAgICB0aGlzLnN0YXREYXRhID0ge1xyXG4gICAgICB1dWlkOiBnZXRVdWlkKCksXHJcbiAgICAgIHV0OiBnZXRQbGF0Zm9ybU5hbWUoKSxcclxuICAgICAgbXBuOiBnZXRQYWNrTmFtZSgpLFxyXG4gICAgICBhazogc3RhdENvbmZpZy5hcHBpZCxcclxuICAgICAgdXN2OiBTVEFUX1ZFUlNJT04sXHJcbiAgICAgIHY6IGdldFZlcnNpb24oKSxcclxuICAgICAgY2g6IGdldENoYW5uZWwoKSxcclxuICAgICAgY246ICcnLFxyXG4gICAgICBwbjogJycsXHJcbiAgICAgIGN0OiAnJyxcclxuICAgICAgdDogZ2V0VGltZSgpLFxyXG4gICAgICB0dDogJycsXHJcbiAgICAgIHA6IHJlc3VsdE9wdGlvbnMucGxhdGZvcm0gPT09ICdhbmRyb2lkJyA/ICdhJyA6ICdpJyxcclxuICAgICAgYnJhbmQ6IHJlc3VsdE9wdGlvbnMuYnJhbmQgfHwgJycsXHJcbiAgICAgIG1kOiByZXN1bHRPcHRpb25zLm1vZGVsLFxyXG4gICAgICBzdjogcmVzdWx0T3B0aW9ucy5zeXN0ZW0ucmVwbGFjZSgvKEFuZHJvaWR8aU9TKVxccy8sICcnKSxcclxuICAgICAgbXBzZGs6IHJlc3VsdE9wdGlvbnMuU0RLVmVyc2lvbiB8fCAnJyxcclxuICAgICAgbXB2OiByZXN1bHRPcHRpb25zLnZlcnNpb24gfHwgJycsXHJcbiAgICAgIGxhbmc6IHJlc3VsdE9wdGlvbnMubGFuZ3VhZ2UsXHJcbiAgICAgIHByOiByZXN1bHRPcHRpb25zLnBpeGVsUmF0aW8sXHJcbiAgICAgIHd3OiByZXN1bHRPcHRpb25zLndpbmRvd1dpZHRoLFxyXG4gICAgICB3aDogcmVzdWx0T3B0aW9ucy53aW5kb3dIZWlnaHQsXHJcbiAgICAgIHN3OiByZXN1bHRPcHRpb25zLnNjcmVlbldpZHRoLFxyXG4gICAgICBzaDogcmVzdWx0T3B0aW9ucy5zY3JlZW5IZWlnaHRcclxuICAgIH07XHJcblxyXG4gIH1cclxuXHJcbiAgX2FwcGxpY2F0aW9uU2hvdygpIHtcclxuICAgIGlmICh0aGlzLl9fbGljYXRpb25IaWRlKSB7XHJcbiAgICAgIGdldExhc3RUaW1lKCk7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSBnZXRSZXNpZGVuY2VUaW1lKCdhcHAnKTtcclxuICAgICAgaWYgKHRpbWUub3ZlcnRpbWUpIHtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHBhdGg6IHRoaXMuX2xhc3RQYWdlUm91dGUsXHJcbiAgICAgICAgICBzY2VuZTogdGhpcy5zdGF0RGF0YS5zY1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fc2VuZFJlcG9ydFJlcXVlc3Qob3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fX2xpY2F0aW9uSGlkZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2FwcGxpY2F0aW9uSGlkZShzZWxmLCB0eXBlKSB7XHJcblxyXG4gICAgdGhpcy5fX2xpY2F0aW9uSGlkZSA9IHRydWU7XHJcbiAgICBnZXRMYXN0VGltZSgpO1xyXG4gICAgY29uc3QgdGltZSA9IGdldFJlc2lkZW5jZVRpbWUoKTtcclxuICAgIGdldEZpcnN0VGltZSgpO1xyXG4gICAgY29uc3Qgcm91dGUgPSBnZXRQYWdlUm91dGUodGhpcyk7XHJcbiAgICB0aGlzLl9zZW5kSGlkZVJlcXVlc3Qoe1xyXG4gICAgICB1cmxyZWY6IHJvdXRlLFxyXG4gICAgICB1cmxyZWZfdHM6IHRpbWUucmVzaWRlbmNlVGltZVxyXG4gICAgfSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBfcGFnZVNob3coKSB7XHJcbiAgICBjb25zdCByb3V0ZSA9IGdldFBhZ2VSb3V0ZSh0aGlzKTtcclxuICAgIGNvbnN0IHJvdXRlcGF0aCA9IGdldFJvdXRlKCk7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyVGl0bGUuY29uZmlnID0gUGFnZXNKc29uICYmXHJcbiAgICAgIFBhZ2VzSnNvbi5wYWdlc1tyb3V0ZXBhdGhdICYmXHJcbiAgICAgIFBhZ2VzSnNvbi5wYWdlc1tyb3V0ZXBhdGhdLnRpdGxlTlZpZXcgJiZcclxuICAgICAgUGFnZXNKc29uLnBhZ2VzW3JvdXRlcGF0aF0udGl0bGVOVmlldy50aXRsZVRleHQgfHxcclxuICAgICAgUGFnZXNKc29uICYmXHJcbiAgICAgIFBhZ2VzSnNvbi5wYWdlc1tyb3V0ZXBhdGhdICYmXHJcbiAgICAgIFBhZ2VzSnNvbi5wYWdlc1tyb3V0ZXBhdGhdLm5hdmlnYXRpb25CYXJUaXRsZVRleHQgfHwgJyc7XHJcblxyXG4gICAgaWYgKHRoaXMuX19saWNhdGlvblNob3cpIHtcclxuICAgICAgZ2V0Rmlyc3RUaW1lKCk7XHJcbiAgICAgIHRoaXMuX19saWNhdGlvblNob3cgPSBmYWxzZTtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ+i/meaYryBvbkxhdWNoIOS5i+WQjuaJp+ihjOeahOesrOS4gOasoSBwYWdlU2hvdyDvvIzkuLrkuIvmrKHorrDlvZXml7bpl7TlgZrlh4blpIcnKTtcclxuICAgICAgdGhpcy5fbGFzdFBhZ2VSb3V0ZSA9IHJvdXRlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdFRpbWUoKTtcclxuICAgIHRoaXMuX2xhc3RQYWdlUm91dGUgPSByb3V0ZTtcclxuICAgIGNvbnN0IHRpbWUgPSBnZXRSZXNpZGVuY2VUaW1lKCdwYWdlJyk7XHJcbiAgICBpZiAodGltZS5vdmVydGltZSkge1xyXG4gICAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgICBwYXRoOiB0aGlzLl9sYXN0UGFnZVJvdXRlLFxyXG4gICAgICAgIHNjZW5lOiB0aGlzLnN0YXREYXRhLnNjXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuX3NlbmRSZXBvcnRSZXF1ZXN0KG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgZ2V0Rmlyc3RUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBfcGFnZUhpZGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuX19saWNhdGlvbkhpZGUpIHtcclxuICAgICAgZ2V0TGFzdFRpbWUoKTtcclxuICAgICAgY29uc3QgdGltZSA9IGdldFJlc2lkZW5jZVRpbWUoJ3BhZ2UnKTtcclxuICAgICAgdGhpcy5fc2VuZFBhZ2VSZXF1ZXN0KHtcclxuICAgICAgICB1cmw6IHRoaXMuX2xhc3RQYWdlUm91dGUsXHJcbiAgICAgICAgdXJscmVmOiB0aGlzLl9sYXN0UGFnZVJvdXRlLFxyXG4gICAgICAgIHVybHJlZl90czogdGltZS5yZXNpZGVuY2VUaW1lXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyVGl0bGUgPSB7XHJcbiAgICAgICAgY29uZmlnOiAnJyxcclxuICAgICAgICBwYWdlOiAnJyxcclxuICAgICAgICByZXBvcnQ6ICcnLFxyXG4gICAgICAgIGx0OiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfbG9naW4oKSB7XHJcbiAgICB0aGlzLl9zZW5kRXZlbnRSZXF1ZXN0KHtcclxuICAgICAga2V5OiAnbG9naW4nXHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIF9zaGFyZSgpIHtcclxuICAgIHRoaXMuX3NlbmRFdmVudFJlcXVlc3Qoe1xyXG4gICAgICBrZXk6ICdzaGFyZSdcclxuICAgIH0sIDApO1xyXG4gIH1cclxuICBfcGF5bWVudChrZXkpIHtcclxuICAgIHRoaXMuX3NlbmRFdmVudFJlcXVlc3Qoe1xyXG4gICAgICBrZXlcclxuICAgIH0sIDApO1xyXG4gIH1cclxuICBfc2VuZFJlcG9ydFJlcXVlc3Qob3B0aW9ucykge1xyXG5cclxuICAgIHRoaXMuX25hdmlnYXRpb25CYXJUaXRsZS5sdCA9ICcxJztcclxuICAgIGxldCBxdWVyeSA9IG9wdGlvbnMucXVlcnkgJiYgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSkgIT09ICd7fScgPyAnPycgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5KSA6ICcnO1xyXG4gICAgdGhpcy5zdGF0RGF0YS5sdCA9ICcxJztcclxuICAgIHRoaXMuc3RhdERhdGEudXJsID0gKG9wdGlvbnMucGF0aCArIHF1ZXJ5KSB8fCAnJztcclxuICAgIHRoaXMuc3RhdERhdGEudCA9IGdldFRpbWUoKTtcclxuICAgIHRoaXMuc3RhdERhdGEuc2MgPSBnZXRTY2VuZShvcHRpb25zLnNjZW5lKTtcclxuICAgIHRoaXMuc3RhdERhdGEuZnZ0cyA9IGdldEZpcnN0VmlzaXRUaW1lKCk7XHJcbiAgICB0aGlzLnN0YXREYXRhLmx2dHMgPSBnZXRMYXN0VmlzaXRUaW1lKCk7XHJcbiAgICB0aGlzLnN0YXREYXRhLnR2YyA9IGdldFRvdGFsVmlzaXRDb3VudCgpO1xyXG4gICAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnbicpIHtcclxuICAgICAgdGhpcy5nZXRQcm9wZXJ0eSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXROZXR3b3JrSW5mbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3NlbmRQYWdlUmVxdWVzdChvcHQpIHtcclxuICAgIGxldCB7XHJcbiAgICAgIHVybCxcclxuICAgICAgdXJscmVmLFxyXG4gICAgICB1cmxyZWZfdHNcclxuICAgIH0gPSBvcHQ7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyVGl0bGUubHQgPSAnMTEnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgIGFrOiB0aGlzLnN0YXREYXRhLmFrLFxyXG4gICAgICB1dWlkOiB0aGlzLnN0YXREYXRhLnV1aWQsXHJcbiAgICAgIGx0OiAnMTEnLFxyXG4gICAgICB1dDogdGhpcy5zdGF0RGF0YS51dCxcclxuICAgICAgdXJsLFxyXG4gICAgICB0dDogdGhpcy5zdGF0RGF0YS50dCxcclxuICAgICAgdXJscmVmLFxyXG4gICAgICB1cmxyZWZfdHMsXHJcbiAgICAgIGNoOiB0aGlzLnN0YXREYXRhLmNoLFxyXG4gICAgICB1c3Y6IHRoaXMuc3RhdERhdGEudXN2LFxyXG4gICAgICB0OiBnZXRUaW1lKCksXHJcbiAgICAgIHA6IHRoaXMuc3RhdERhdGEucFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVxdWVzdChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIF9zZW5kSGlkZVJlcXVlc3Qob3B0LCB0eXBlKSB7XHJcbiAgICBsZXQge1xyXG4gICAgICB1cmxyZWYsXHJcbiAgICAgIHVybHJlZl90c1xyXG4gICAgfSA9IG9wdDtcclxuICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICBhazogdGhpcy5zdGF0RGF0YS5hayxcclxuICAgICAgdXVpZDogdGhpcy5zdGF0RGF0YS51dWlkLFxyXG4gICAgICBsdDogJzMnLFxyXG4gICAgICB1dDogdGhpcy5zdGF0RGF0YS51dCxcclxuICAgICAgdXJscmVmLFxyXG4gICAgICB1cmxyZWZfdHMsXHJcbiAgICAgIGNoOiB0aGlzLnN0YXREYXRhLmNoLFxyXG4gICAgICB1c3Y6IHRoaXMuc3RhdERhdGEudXN2LFxyXG4gICAgICB0OiBnZXRUaW1lKCksXHJcbiAgICAgIHA6IHRoaXMuc3RhdERhdGEucFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVxdWVzdChvcHRpb25zLCB0eXBlKTtcclxuICB9XHJcbiAgX3NlbmRFdmVudFJlcXVlc3Qoe1xyXG4gICAga2V5ID0gJycsXHJcbiAgICB2YWx1ZSA9IFwiXCJcclxuICB9ID0ge30pIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbGFzdFBhZ2VSb3V0ZTtcclxuICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICBhazogdGhpcy5zdGF0RGF0YS5hayxcclxuICAgICAgdXVpZDogdGhpcy5zdGF0RGF0YS51dWlkLFxyXG4gICAgICBsdDogJzIxJyxcclxuICAgICAgdXQ6IHRoaXMuc3RhdERhdGEudXQsXHJcbiAgICAgIHVybDogcm91dGUsXHJcbiAgICAgIGNoOiB0aGlzLnN0YXREYXRhLmNoLFxyXG4gICAgICBlX246IGtleSxcclxuICAgICAgZV92OiB0eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IHZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgIHVzdjogdGhpcy5zdGF0RGF0YS51c3YsXHJcbiAgICAgIHQ6IGdldFRpbWUoKSxcclxuICAgICAgcDogdGhpcy5zdGF0RGF0YS5wXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV0d29ya0luZm8oKSB7XHJcbiAgICB1bmkuZ2V0TmV0d29ya1R5cGUoe1xyXG4gICAgICBzdWNjZXNzOiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0RGF0YS5uZXQgPSByZXN1bHQubmV0d29ya1R5cGU7XHJcbiAgICAgICAgdGhpcy5nZXRMb2NhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFByb3BlcnR5KCkge1xyXG4gICAgcGx1cy5ydW50aW1lLmdldFByb3BlcnR5KHBsdXMucnVudGltZS5hcHBpZCwgKHdndGluZm8pID0+IHtcclxuICAgICAgdGhpcy5zdGF0RGF0YS52ID0gd2d0aW5mby52ZXJzaW9uIHx8ICcnO1xyXG4gICAgICB0aGlzLmdldE5ldHdvcmtJbmZvKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExvY2F0aW9uKCkge1xyXG4gICAgaWYgKHN0YXRDb25maWcuZ2V0TG9jYXRpb24pIHtcclxuICAgICAgdW5pLmdldExvY2F0aW9uKHtcclxuICAgICAgICB0eXBlOiAnd2dzODQnLFxyXG4gICAgICAgIGdlb2NvZGU6IHRydWUsXHJcbiAgICAgICAgc3VjY2VzczogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5hZGRyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdERhdGEuY24gPSByZXN1bHQuYWRkcmVzcy5jb3VudHJ5O1xyXG4gICAgICAgICAgICB0aGlzLnN0YXREYXRhLnBuID0gcmVzdWx0LmFkZHJlc3MucHJvdmluY2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdERhdGEuY3QgPSByZXN1bHQuYWRkcmVzcy5jaXR5O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdERhdGEubGF0ID0gcmVzdWx0LmxhdGl0dWRlO1xyXG4gICAgICAgICAgdGhpcy5zdGF0RGF0YS5sbmcgPSByZXN1bHQubG9uZ2l0dWRlO1xyXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0KHRoaXMuc3RhdERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXREYXRhLmxhdCA9IDA7XHJcbiAgICAgIHRoaXMuc3RhdERhdGEubG5nID0gMDtcclxuICAgICAgdGhpcy5yZXF1ZXN0KHRoaXMuc3RhdERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVxdWVzdChkYXRhLCB0eXBlKSB7XHJcbiAgICBsZXQgdGltZSA9IGdldFRpbWUoKTtcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbmF2aWdhdGlvbkJhclRpdGxlO1xyXG4gICAgZGF0YS50dG4gPSB0aXRsZS5wYWdlO1xyXG4gICAgZGF0YS50dHBqID0gdGl0bGUuY29uZmlnO1xyXG4gICAgZGF0YS50dGMgPSB0aXRsZS5yZXBvcnQ7XHJcblxyXG4gICAgbGV0IHJlcXVlc3REYXRhID0gdGhpcy5fcmVwb3J0aW5nUmVxdWVzdERhdGE7XHJcbiAgICBpZiAoZ2V0UGxhdGZvcm1OYW1lKCkgPT09ICduJykge1xyXG4gICAgICByZXF1ZXN0RGF0YSA9IHVuaS5nZXRTdG9yYWdlU3luYygnX19VTklfX1NUQVRfX0RBVEEnKSB8fCB7fTtcclxuICAgIH1cclxuICAgIGlmICghcmVxdWVzdERhdGFbZGF0YS5sdF0pIHtcclxuICAgICAgcmVxdWVzdERhdGFbZGF0YS5sdF0gPSBbXTtcclxuICAgIH1cclxuICAgIHJlcXVlc3REYXRhW2RhdGEubHRdLnB1c2goZGF0YSk7XHJcblxyXG4gICAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnbicpIHtcclxuICAgICAgdW5pLnNldFN0b3JhZ2VTeW5jKCdfX1VOSV9fU1RBVF9fREFUQScsIHJlcXVlc3REYXRhKTtcclxuICAgIH1cclxuICAgIGlmIChnZXRQYWdlUmVzaWRlbmNlVGltZSgpIDwgT1BFUkFUSU5HX1RJTUUgJiYgIXR5cGUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgdW5pU3RhdERhdGEgPSB0aGlzLl9yZXBvcnRpbmdSZXF1ZXN0RGF0YTtcclxuICAgIGlmIChnZXRQbGF0Zm9ybU5hbWUoKSA9PT0gJ24nKSB7XHJcbiAgICAgIHVuaVN0YXREYXRhID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdfX1VOSV9fU1RBVF9fREFUQScpO1xyXG4gICAgfVxyXG4gICAgLy8g5pe26Ze06LaF6L+H77yM6YeN5paw6I635Y+W5pe26Ze05oizXHJcbiAgICBzZXRQYWdlUmVzaWRlbmNlVGltZSgpO1xyXG4gICAgbGV0IGZpcnN0QXJyID0gW107XHJcbiAgICBsZXQgY29udGVudEFyciA9IFtdO1xyXG4gICAgbGV0IGxhc3RBcnIgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBpIGluIHVuaVN0YXREYXRhKSB7XHJcbiAgICAgIGNvbnN0IHJkID0gdW5pU3RhdERhdGFbaV07XHJcbiAgICAgIHJkLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBnZXRTcGxpY2luZyhlbG0pO1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICBmaXJzdEFyci5wdXNoKG5ld0RhdGEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xyXG4gICAgICAgICAgbGFzdEFyci5wdXNoKG5ld0RhdGEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb250ZW50QXJyLnB1c2gobmV3RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJzdEFyci5wdXNoKC4uLmNvbnRlbnRBcnIsIC4uLmxhc3RBcnIpO1xyXG4gICAgbGV0IG9wdGlvbnNEYXRhID0ge1xyXG4gICAgICB1c3Y6IFNUQVRfVkVSU0lPTiwgLy/nu5/orqEgU0RLIOeJiOacrOWPt1xyXG4gICAgICB0OiB0aW1lLCAvL+WPkemAgeivt+axguaXtueahOaXtumXtOaIrlxyXG4gICAgICByZXF1ZXN0czogSlNPTi5zdHJpbmdpZnkoZmlyc3RBcnIpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9yZXBvcnRpbmdSZXF1ZXN0RGF0YSA9IHt9O1xyXG4gICAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnbicpIHtcclxuICAgICAgdW5pLnJlbW92ZVN0b3JhZ2VTeW5jKCdfX1VOSV9fU1RBVF9fREFUQScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhLnV0ID09PSAnaDUnKSB7XHJcbiAgICAgIHRoaXMuaW1hZ2VSZXF1ZXN0KG9wdGlvbnNEYXRhKTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGdldFBsYXRmb3JtTmFtZSgpID09PSAnbicgJiYgdGhpcy5zdGF0RGF0YS5wID09PSAnYScpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VuZFJlcXVlc3Qob3B0aW9uc0RhdGEpO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuX3NlbmRSZXF1ZXN0KG9wdGlvbnNEYXRhKTtcclxuICB9XHJcbiAgX3NlbmRSZXF1ZXN0KG9wdGlvbnNEYXRhKSB7XHJcbiAgICB1bmkucmVxdWVzdCh7XHJcbiAgICAgIHVybDogU1RBVF9VUkwsXHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAvLyBoZWFkZXI6IHtcclxuICAgICAgLy8gICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIC8vIOm7mOiupOWAvFxyXG4gICAgICAvLyB9LFxyXG4gICAgICBkYXRhOiBvcHRpb25zRGF0YSxcclxuICAgICAgc3VjY2VzczogKCkgPT4ge1xyXG4gICAgICAgIC8vIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xyXG4gICAgICAgIC8vICAgY29uc29sZS5sb2coJ3N0YXQgcmVxdWVzdCBzdWNjZXNzJyk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9LFxyXG4gICAgICBmYWlsOiAoZSkgPT4ge1xyXG4gICAgICAgIGlmICgrK3RoaXMuX3JldHJ5IDwgMykge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KG9wdGlvbnNEYXRhKTtcclxuICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGg1IOivt+axglxyXG4gICAqL1xyXG4gIGltYWdlUmVxdWVzdChkYXRhKSB7XHJcbiAgICBsZXQgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGxldCBvcHRpb25zID0gZ2V0U2dpbihHZXRFbmNvZGVVUklDb21wb25lbnRPcHRpb25zKGRhdGEpKS5vcHRpb25zO1xyXG4gICAgaW1hZ2Uuc3JjID0gU1RBVF9INV9VUkwgKyAnPycgKyBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgc2VuZEV2ZW50KGtleSwgdmFsdWUpIHtcclxuICAgIC8vIOagoemqjCB0eXBlIOWPguaVsFxyXG4gICAgaWYgKGNhbGlicmF0aW9uKGtleSwgdmFsdWUpKSByZXR1cm5cclxuXHJcbiAgICBpZiAoa2V5ID09PSAndGl0bGUnKSB7XHJcbiAgICAgIHRoaXMuX25hdmlnYXRpb25CYXJUaXRsZS5yZXBvcnQgPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZW5kRXZlbnRSZXF1ZXN0KHtcclxuICAgICAga2V5LFxyXG4gICAgICB2YWx1ZTogdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiB2YWx1ZVxyXG4gICAgfSwgMSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuY2xhc3MgU3RhdCBleHRlbmRzIFV0aWwge1xyXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHtcclxuICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmluc3RhbmNlID0gbmV3IFN0YXQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmluc3RhbmNlID0gbnVsbDtcclxuICAgIC8vIOazqOWGjOaLpuaIquWZqFxyXG4gICAgaWYgKHR5cGVvZiB1bmkuYWRkSW50ZXJjZXB0b3IgPT09ICdmdW5jdGlvbicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcpIHtcclxuICAgICAgdGhpcy5hZGRJbnRlcmNlcHRvckluaXQoKTtcclxuICAgICAgdGhpcy5pbnRlcmNlcHRMb2dpbigpO1xyXG4gICAgICB0aGlzLmludGVyY2VwdFNoYXJlKHRydWUpO1xyXG4gICAgICB0aGlzLmludGVyY2VwdFJlcXVlc3RQYXltZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJbnRlcmNlcHRvckluaXQoKSB7XHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICB1bmkuYWRkSW50ZXJjZXB0b3IoJ3NldE5hdmlnYXRpb25CYXJUaXRsZScsIHtcclxuICAgICAgaW52b2tlKGFyZ3MpIHtcclxuICAgICAgICBzZWxmLl9uYXZpZ2F0aW9uQmFyVGl0bGUucGFnZSA9IGFyZ3MudGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJjZXB0TG9naW4oKSB7XHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICB1bmkuYWRkSW50ZXJjZXB0b3IoJ2xvZ2luJywge1xyXG4gICAgICBjb21wbGV0ZSgpIHtcclxuICAgICAgICBzZWxmLl9sb2dpbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGludGVyY2VwdFNoYXJlKHR5cGUpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIGlmICghdHlwZSkge1xyXG4gICAgICBzZWxmLl9zaGFyZSgpO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHVuaS5hZGRJbnRlcmNlcHRvcignc2hhcmUnLCB7XHJcbiAgICAgIHN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgc2VsZi5fc2hhcmUoKTtcclxuICAgICAgfSxcclxuICAgICAgZmFpbCgpIHtcclxuICAgICAgICBzZWxmLl9zaGFyZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGludGVyY2VwdFJlcXVlc3RQYXltZW50KCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgdW5pLmFkZEludGVyY2VwdG9yKCdyZXF1ZXN0UGF5bWVudCcsIHtcclxuICAgICAgc3VjY2VzcygpIHtcclxuICAgICAgICBzZWxmLl9wYXltZW50KCdwYXlfc3VjY2VzcycpO1xyXG4gICAgICB9LFxyXG4gICAgICBmYWlsKCkge1xyXG4gICAgICAgIHNlbGYuX3BheW1lbnQoJ3BheV9mYWlsJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVwb3J0KG9wdGlvbnMsIHNlbGYpIHtcclxuICAgIHRoaXMuc2VsZiA9IHNlbGY7XHJcbiAgICAvLyBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ3JlcG9ydCBpbml0Jyk7XHJcbiAgICAvLyB9XHJcbiAgICBzZXRQYWdlUmVzaWRlbmNlVGltZSgpO1xyXG4gICAgdGhpcy5fX2xpY2F0aW9uU2hvdyA9IHRydWU7XHJcbiAgICB0aGlzLl9zZW5kUmVwb3J0UmVxdWVzdChvcHRpb25zLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIGxvYWQob3B0aW9ucywgc2VsZikge1xyXG4gICAgaWYgKCFzZWxmLiRzY29wZSAmJiAhc2VsZi4kbXApIHtcclxuICAgICAgY29uc3QgcGFnZSA9IGdldEN1cnJlbnRQYWdlcygpO1xyXG4gICAgICBzZWxmLiRzY29wZSA9IHBhZ2VbcGFnZS5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZiA9IHNlbGY7XHJcbiAgICB0aGlzLl9xdWVyeSA9IG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzaG93KHNlbGYpIHtcclxuICAgIHRoaXMuc2VsZiA9IHNlbGY7XHJcbiAgICBpZiAoZ2V0UGFnZVR5cGVzKHNlbGYpKSB7XHJcbiAgICAgIHRoaXMuX3BhZ2VTaG93KHNlbGYpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXBwbGljYXRpb25TaG93KHNlbGYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVhZHkoc2VsZikge1xyXG4gICAgLy8gdGhpcy5zZWxmID0gc2VsZjtcclxuICAgIC8vIGlmIChnZXRQYWdlVHlwZXMoc2VsZikpIHtcclxuICAgIC8vICAgdGhpcy5fcGFnZVNob3coc2VsZik7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGhpZGUoc2VsZikge1xyXG4gICAgdGhpcy5zZWxmID0gc2VsZjtcclxuICAgIGlmIChnZXRQYWdlVHlwZXMoc2VsZikpIHtcclxuICAgICAgdGhpcy5fcGFnZUhpZGUoc2VsZik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkhpZGUoc2VsZiwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGVycm9yKGVtKSB7XHJcbiAgICBpZiAodGhpcy5fcGxhdGZvcm0gPT09ICdkZXZ0b29scycpIHtcclxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKCflvZPliY3ov5DooYznjq/looPkuLrlvIDlj5HogIXlt6XlhbfvvIzkuI3kuIrmiqXmlbDmja7jgIInKTtcclxuICAgICAgfVxyXG4gICAgICAvLyByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZW1WYWwgPSAnJztcclxuICAgIGlmICghZW0ubWVzc2FnZSkge1xyXG4gICAgICBlbVZhbCA9IEpTT04uc3RyaW5naWZ5KGVtKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVtVmFsID0gZW0uc3RhY2s7XHJcbiAgICB9XHJcbiAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgYWs6IHRoaXMuc3RhdERhdGEuYWssXHJcbiAgICAgIHV1aWQ6IHRoaXMuc3RhdERhdGEudXVpZCxcclxuICAgICAgbHQ6ICczMScsXHJcbiAgICAgIHV0OiB0aGlzLnN0YXREYXRhLnV0LFxyXG4gICAgICBjaDogdGhpcy5zdGF0RGF0YS5jaCxcclxuICAgICAgbXBzZGs6IHRoaXMuc3RhdERhdGEubXBzZGssXHJcbiAgICAgIG1wdjogdGhpcy5zdGF0RGF0YS5tcHYsXHJcbiAgICAgIHY6IHRoaXMuc3RhdERhdGEudixcclxuICAgICAgZW06IGVtVmFsLFxyXG4gICAgICB1c3Y6IHRoaXMuc3RhdERhdGEudXN2LFxyXG4gICAgICB0OiBnZXRUaW1lKCksXHJcbiAgICAgIHA6IHRoaXMuc3RhdERhdGEucFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVxdWVzdChvcHRpb25zKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHN0YXQgPSBTdGF0LmdldEluc3RhbmNlKCk7XHJcbmxldCBpc0hpZGUgPSBmYWxzZTtcclxuY29uc3QgbGlmZWN5Y2xlID0ge1xyXG4gIG9uTGF1bmNoKG9wdGlvbnMpIHtcclxuICAgIHN0YXQucmVwb3J0KG9wdGlvbnMsIHRoaXMpO1xyXG4gIH0sXHJcbiAgb25SZWFkeSgpIHtcclxuICAgIHN0YXQucmVhZHkodGhpcyk7XHJcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG4gICAgc3RhdC5sb2FkKG9wdGlvbnMsIHRoaXMpO1xyXG4gICAgLy8g6YeN5YaZ5YiG5Lqr77yM6I635Y+W5YiG5Lqr5LiK5oql5LqL5Lu2XHJcbiAgICBpZiAodGhpcy4kc2NvcGUgJiYgdGhpcy4kc2NvcGUub25TaGFyZUFwcE1lc3NhZ2UpIHtcclxuICAgICAgbGV0IG9sZFNoYXJlQXBwTWVzc2FnZSA9IHRoaXMuJHNjb3BlLm9uU2hhcmVBcHBNZXNzYWdlO1xyXG4gICAgICB0aGlzLiRzY29wZS5vblNoYXJlQXBwTWVzc2FnZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBzdGF0LmludGVyY2VwdFNoYXJlKGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gb2xkU2hhcmVBcHBNZXNzYWdlLmNhbGwodGhpcywgb3B0aW9ucylcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9LFxyXG4gIG9uU2hvdygpIHtcclxuICAgIGlzSGlkZSA9IGZhbHNlO1xyXG4gICAgc3RhdC5zaG93KHRoaXMpO1xyXG4gIH0sXHJcbiAgb25IaWRlKCkge1xyXG4gICAgaXNIaWRlID0gdHJ1ZTtcclxuICAgIHN0YXQuaGlkZSh0aGlzKTtcclxuICB9LFxyXG4gIG9uVW5sb2FkKCkge1xyXG4gICAgaWYgKGlzSGlkZSkge1xyXG4gICAgICBpc0hpZGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzdGF0LmhpZGUodGhpcyk7XHJcbiAgfSxcclxuICBvbkVycm9yKGUpIHtcclxuICAgIHN0YXQuZXJyb3IoZSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gbWFpbigpIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcclxuICAgIHVuaS5yZXBvcnQgPSBmdW5jdGlvbih0eXBlLCBvcHRpb25zKSB7fTtcclxuICB9ZWxzZXtcclxuICAgIGNvbnN0IFZ1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xyXG4gICAgKFZ1ZS5kZWZhdWx0IHx8IFZ1ZSkubWl4aW4obGlmZWN5Y2xlKTtcclxuICAgIHVuaS5yZXBvcnQgPSBmdW5jdGlvbih0eXBlLCBvcHRpb25zKSB7XHJcbiAgICAgIHN0YXQuc2VuZEV2ZW50KHR5cGUsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbm1haW4oKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5\n");
- /***/ }),
- /* 6 */
- /*!******************************************************!*\
- !*** ./node_modules/@dcloudio/uni-stat/package.json ***!
- \******************************************************/
- /*! exports provided: _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _shasum, _spec, _where, author, bugs, bundleDependencies, deprecated, description, devDependencies, files, gitHead, homepage, license, main, name, repository, scripts, version, default */
- /***/ (function(module) {
- eval("module.exports = {\"_from\":\"@dcloudio/uni-stat@next\",\"_id\":\"@dcloudio/uni-stat@2.0.0-24220191115004\",\"_inBundle\":false,\"_integrity\":\"sha512-UKnpiHSP7h9c5IFpJFkWkpm1KyWz9iHj1hchrQSUxPhChx+KPOmunnQcKGiQvvBz9CeSi7Se/eauJYha5ch0kw==\",\"_location\":\"/@dcloudio/uni-stat\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"tag\",\"registry\":true,\"raw\":\"@dcloudio/uni-stat@next\",\"name\":\"@dcloudio/uni-stat\",\"escapedName\":\"@dcloudio%2funi-stat\",\"scope\":\"@dcloudio\",\"rawSpec\":\"next\",\"saveSpec\":null,\"fetchSpec\":\"next\"},\"_requiredBy\":[\"#USER\",\"/\",\"/@dcloudio/vue-cli-plugin-uni\"],\"_resolved\":\"https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-2.0.0-24220191115004.tgz\",\"_shasum\":\"5848f2204f37daaf8c340fb27d9f76b16fcbfdeb\",\"_spec\":\"@dcloudio/uni-stat@next\",\"_where\":\"/Users/guoshengqiang/Documents/dcloud-plugins/release/uniapp-cli\",\"author\":\"\",\"bugs\":{\"url\":\"https://github.com/dcloudio/uni-app/issues\"},\"bundleDependencies\":false,\"deprecated\":false,\"description\":\"\",\"devDependencies\":{\"@babel/core\":\"^7.5.5\",\"@babel/preset-env\":\"^7.5.5\",\"eslint\":\"^6.1.0\",\"rollup\":\"^1.19.3\",\"rollup-plugin-babel\":\"^4.3.3\",\"rollup-plugin-clear\":\"^2.0.7\",\"rollup-plugin-commonjs\":\"^10.0.2\",\"rollup-plugin-copy\":\"^3.1.0\",\"rollup-plugin-eslint\":\"^7.0.0\",\"rollup-plugin-json\":\"^4.0.0\",\"rollup-plugin-node-resolve\":\"^5.2.0\",\"rollup-plugin-replace\":\"^2.2.0\",\"rollup-plugin-uglify\":\"^6.0.2\"},\"files\":[\"dist\",\"package.json\",\"LICENSE\"],\"gitHead\":\"bcf65737c5111d47398695d3db8ed87305df346e\",\"homepage\":\"https://github.com/dcloudio/uni-app#readme\",\"license\":\"Apache-2.0\",\"main\":\"dist/index.js\",\"name\":\"@dcloudio/uni-stat\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/dcloudio/uni-app.git\",\"directory\":\"packages/uni-stat\"},\"scripts\":{\"build\":\"NODE_ENV=production rollup -c rollup.config.js\",\"dev\":\"NODE_ENV=development rollup -w -c rollup.config.js\"},\"version\":\"2.0.0-24220191115004\"};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiI2LmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6\n");
- /***/ }),
- /* 7 */
- /*!****************************************************!*\
- !*** E:/sheverAPP/APP/pages.json?{"type":"style"} ***!
- \****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _default = { \"pages\": { \"pages/Login/Login\": { \"navigationStyle\": \"custom\", \"disableScroll\": true }, \"pages/Login/loginWeixin\": { \"navigationStyle\": \"custom\" }, \"pages/Charts/mainStatistics\": { \"navigationBarTitleText\": \"统计图表\" }, \"pages/User/merchantList\": { \"navigationBarTitleText\": \"机器销售\", \"enablePullDownRefresh\": true }, \"pages/User/equipmentSratisticsList\": { \"navigationBarTitleText\": \"机器排行\", \"enablePullDownRefresh\": true }, \"pages/User/equipmentStatusList\": { \"navigationBarTitleText\": \"机器状态\", \"enablePullDownRefresh\": true }, \"pages/User/user\": { \"navigationBarTitleText\": \"我的\" }, \"pages/User/promoCode\": { \"navigationBarTitleText\": \"优惠码\" }, \"pages/User/buyPromo\": { \"navigationBarTitleText\": \"购买优惠码\" }, \"pages/User/equipmentName\": { \"navigationBarTitleText\": \"修改设备名称\" }, \"pages/Charts/elseStatistics\": { \"navigationBarTitleText\": \"统计图表\" }, \"pages/Charts/equipmentStatistics\": { \"navigationBarTitleText\": \"销售排行\" }, \"pages/WeixinSwicth/WeixinSwicth\": { \"navigationBarTitleText\": \"微信绑定\", \"menuSrc\": \"static/img/leftTriangle.png\", \"enablePullDownRefresh\": true } }, \"globalStyle\": { \"navigationBarTextStyle\": \"white\", \"navigationBarTitleText\": \"\", \"navigationBarBackgroundColor\": \"#206DC3\", \"backgroundColor\": \"#F8F8F8\", \"animationType\": \"slide-in-right\", \"animationDuration\": 200 } };exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJzR0FBZSxFQUFDLFNBQVEsRUFBQyxxQkFBb0IsRUFBQyxtQkFBa0IsUUFBbkIsRUFBNEIsaUJBQWdCLElBQTVDLEVBQXJCLEVBQXVFLDJCQUEwQixFQUFDLG1CQUFrQixRQUFuQixFQUFqRyxFQUE4SCwrQkFBOEIsRUFBQywwQkFBeUIsTUFBMUIsRUFBNUosRUFBOEwsMkJBQTBCLEVBQUMsMEJBQXlCLE1BQTFCLEVBQWlDLHlCQUF3QixJQUF6RCxFQUF4TixFQUF1UixzQ0FBcUMsRUFBQywwQkFBeUIsTUFBMUIsRUFBaUMseUJBQXdCLElBQXpELEVBQTVULEVBQTJYLGtDQUFpQyxFQUFDLDBCQUF5QixNQUExQixFQUFpQyx5QkFBd0IsSUFBekQsRUFBNVosRUFBMmQsbUJBQWtCLEVBQUMsMEJBQXlCLElBQTFCLEVBQTdlLEVBQTZnQix3QkFBdUIsRUFBQywwQkFBeUIsS0FBMUIsRUFBcGlCLEVBQXFrQix1QkFBc0IsRUFBQywwQkFBeUIsT0FBMUIsRUFBM2xCLEVBQThuQiw0QkFBMkIsRUFBQywwQkFBeUIsUUFBMUIsRUFBenBCLEVBQTZyQiwrQkFBOEIsRUFBQywwQkFBeUIsTUFBMUIsRUFBM3RCLEVBQTZ2QixvQ0FBbUMsRUFBQywwQkFBeUIsTUFBMUIsRUFBaHlCLEVBQWswQixtQ0FBa0MsRUFBQywwQkFBeUIsTUFBMUIsRUFBaUMsV0FBVSw2QkFBM0MsRUFBeUUseUJBQXdCLElBQWpHLEVBQXAyQixFQUFULEVBQXE5QixlQUFjLEVBQUMsMEJBQXlCLE9BQTFCLEVBQWtDLDBCQUF5QixFQUEzRCxFQUE4RCxnQ0FBK0IsU0FBN0YsRUFBdUcsbUJBQWtCLFNBQXpILEVBQW1JLGlCQUFnQixnQkFBbkosRUFBb0sscUJBQW9CLEdBQXhMLEVBQW4rQixFIiwiZmlsZSI6IjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XCJwYWdlc1wiOntcInBhZ2VzL0xvZ2luL0xvZ2luXCI6e1wibmF2aWdhdGlvblN0eWxlXCI6XCJjdXN0b21cIixcImRpc2FibGVTY3JvbGxcIjp0cnVlfSxcInBhZ2VzL0xvZ2luL2xvZ2luV2VpeGluXCI6e1wibmF2aWdhdGlvblN0eWxlXCI6XCJjdXN0b21cIn0sXCJwYWdlcy9DaGFydHMvbWFpblN0YXRpc3RpY3NcIjp7XCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6XCLnu5/orqHlm77ooahcIn0sXCJwYWdlcy9Vc2VyL21lcmNoYW50TGlzdFwiOntcIm5hdmlnYXRpb25CYXJUaXRsZVRleHRcIjpcIuacuuWZqOmUgOWUrlwiLFwiZW5hYmxlUHVsbERvd25SZWZyZXNoXCI6dHJ1ZX0sXCJwYWdlcy9Vc2VyL2VxdWlwbWVudFNyYXRpc3RpY3NMaXN0XCI6e1wibmF2aWdhdGlvbkJhclRpdGxlVGV4dFwiOlwi5py65Zmo5o6S6KGMXCIsXCJlbmFibGVQdWxsRG93blJlZnJlc2hcIjp0cnVlfSxcInBhZ2VzL1VzZXIvZXF1aXBtZW50U3RhdHVzTGlzdFwiOntcIm5hdmlnYXRpb25CYXJUaXRsZVRleHRcIjpcIuacuuWZqOeKtuaAgVwiLFwiZW5hYmxlUHVsbERvd25SZWZyZXNoXCI6dHJ1ZX0sXCJwYWdlcy9Vc2VyL3VzZXJcIjp7XCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6XCLmiJHnmoRcIn0sXCJwYWdlcy9Vc2VyL3Byb21vQ29kZVwiOntcIm5hdmlnYXRpb25CYXJUaXRsZVRleHRcIjpcIuS8mOaDoOeggVwifSxcInBhZ2VzL1VzZXIvYnV5UHJvbW9cIjp7XCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6XCLotK3kubDkvJjmg6DnoIFcIn0sXCJwYWdlcy9Vc2VyL2VxdWlwbWVudE5hbWVcIjp7XCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6XCLkv67mlLnorr7lpIflkI3np7BcIn0sXCJwYWdlcy9DaGFydHMvZWxzZVN0YXRpc3RpY3NcIjp7XCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6XCLnu5/orqHlm77ooahcIn0sXCJwYWdlcy9DaGFydHMvZXF1aXBtZW50U3RhdGlzdGljc1wiOntcIm5hdmlnYXRpb25CYXJUaXRsZVRleHRcIjpcIumUgOWUruaOkuihjFwifSxcInBhZ2VzL1dlaXhpblN3aWN0aC9XZWl4aW5Td2ljdGhcIjp7XCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6XCLlvq7kv6Hnu5HlrppcIixcIm1lbnVTcmNcIjpcInN0YXRpYy9pbWcvbGVmdFRyaWFuZ2xlLnBuZ1wiLFwiZW5hYmxlUHVsbERvd25SZWZyZXNoXCI6dHJ1ZX19LFwiZ2xvYmFsU3R5bGVcIjp7XCJuYXZpZ2F0aW9uQmFyVGV4dFN0eWxlXCI6XCJ3aGl0ZVwiLFwibmF2aWdhdGlvbkJhclRpdGxlVGV4dFwiOlwiXCIsXCJuYXZpZ2F0aW9uQmFyQmFja2dyb3VuZENvbG9yXCI6XCIjMjA2REMzXCIsXCJiYWNrZ3JvdW5kQ29sb3JcIjpcIiNGOEY4RjhcIixcImFuaW1hdGlvblR5cGVcIjpcInNsaWRlLWluLXJpZ2h0XCIsXCJhbmltYXRpb25EdXJhdGlvblwiOjIwMH19Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n");
- /***/ }),
- /* 8 */
- /*!***************************************************!*\
- !*** E:/sheverAPP/APP/pages.json?{"type":"stat"} ***!
- \***************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _default = { \"appid\": \"__UNI__C9DE28D\" };exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJzR0FBZSxFQUFDLFNBQVEsZ0JBQVQsRSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1wiYXBwaWRcIjpcIl9fVU5JX19DOURFMjhEXCJ9Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8\n");
- /***/ }),
- /* 9 */
- /*!*******************************************************************!*\
- !*** E:/sheverAPP/APP/node_modules/vue-i18n/dist/vue-i18n.esm.js ***!
- \*******************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(__f__) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0; /*!\n * vue-i18n v8.15.1 \n * (c) 2019 kazuya kawaguchi\n * Released under the MIT License.\n */\n/* */\n\n/**\n * constants\n */\n\nvar numberFormatKeys = [\n'style',\n'currency',\n'currencyDisplay',\n'useGrouping',\n'minimumIntegerDigits',\n'minimumFractionDigits',\n'maximumFractionDigits',\n'minimumSignificantDigits',\n'maximumSignificantDigits',\n'localeMatcher',\n'formatMatcher'];\n\n\n/**\n * utilities\n */\n\nfunction warn(msg, err) {\n if (typeof console !== 'undefined') {\n console.warn(__f__('[vue-i18n] ' + msg, \" at node_modules\\\\vue-i18n\\\\dist\\\\vue-i18n.esm.js:32\"));\n /* istanbul ignore if */\n if (err) {\n console.warn(__f__(err.stack, \" at node_modules\\\\vue-i18n\\\\dist\\\\vue-i18n.esm.js:35\"));\n }\n }\n}\n\nfunction error(msg, err) {\n if (typeof console !== 'undefined') {\n console.error(__f__('[vue-i18n] ' + msg, \" at node_modules\\\\vue-i18n\\\\dist\\\\vue-i18n.esm.js:42\"));\n /* istanbul ignore if */\n if (err) {\n console.error(__f__(err.stack, \" at node_modules\\\\vue-i18n\\\\dist\\\\vue-i18n.esm.js:45\"));\n }\n }\n}\n\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object';\n}\n\nvar toString = Object.prototype.toString;\nvar OBJECT_STRING = '[object Object]';\nfunction isPlainObject(obj) {\n return toString.call(obj) === OBJECT_STRING;\n}\n\nfunction isNull(val) {\n return val === null || val === undefined;\n}\n\nfunction parseArgs() {\n var args = [],len = arguments.length;\n while (len--) {args[len] = arguments[len];}\n\n var locale = null;\n var params = null;\n if (args.length === 1) {\n if (isObject(args[0]) || Array.isArray(args[0])) {\n params = args[0];\n } else if (typeof args[0] === 'string') {\n locale = args[0];\n }\n } else if (args.length === 2) {\n if (typeof args[0] === 'string') {\n locale = args[0];\n }\n /* istanbul ignore if */\n if (isObject(args[1]) || Array.isArray(args[1])) {\n params = args[1];\n }\n }\n\n return { locale: locale, params: params };\n}\n\nfunction looseClone(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nfunction remove(arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1);\n }\n }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n\nfunction merge(target) {\n var arguments$1 = arguments;\n\n var output = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments$1[i];\n if (source !== undefined && source !== null) {\n var key = void 0;\n for (key in source) {\n if (hasOwn(source, key)) {\n if (isObject(source[key])) {\n output[key] = merge(output[key], source[key]);\n } else {\n output[key] = source[key];\n }\n }\n }\n }\n }\n return output;\n}\n\nfunction looseEqual(a, b) {\n if (a === b) {return true;}\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i]);\n });\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key]);\n });\n } else {\n /* istanbul ignore next */\n return false;\n }\n } catch (e) {\n /* istanbul ignore next */\n return false;\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n } else {\n return false;\n }\n}\n\n/* */\n\nfunction extend(Vue) {\n if (!Vue.prototype.hasOwnProperty('$i18n')) {\n // $FlowFixMe\n Object.defineProperty(Vue.prototype, '$i18n', {\n get: function get() {return this._i18n;} });\n\n }\n\n Vue.prototype.$t = function (key) {\n var values = [],len = arguments.length - 1;\n while (len-- > 0) {values[len] = arguments[len + 1];}\n\n var i18n = this.$i18n;\n return i18n._t.apply(i18n, [key, i18n.locale, i18n._getMessages(), this].concat(values));\n };\n\n Vue.prototype.$tc = function (key, choice) {\n var values = [],len = arguments.length - 2;\n while (len-- > 0) {values[len] = arguments[len + 2];}\n\n var i18n = this.$i18n;\n return i18n._tc.apply(i18n, [key, i18n.locale, i18n._getMessages(), this, choice].concat(values));\n };\n\n Vue.prototype.$te = function (key, locale) {\n var i18n = this.$i18n;\n return i18n._te(key, i18n.locale, i18n._getMessages(), locale);\n };\n\n Vue.prototype.$d = function (value) {\n var ref;\n\n var args = [],len = arguments.length - 1;\n while (len-- > 0) {args[len] = arguments[len + 1];}\n return (ref = this.$i18n).d.apply(ref, [value].concat(args));\n };\n\n Vue.prototype.$n = function (value) {\n var ref;\n\n var args = [],len = arguments.length - 1;\n while (len-- > 0) {args[len] = arguments[len + 1];}\n return (ref = this.$i18n).n.apply(ref, [value].concat(args));\n };\n}\n\n/* */\n\nvar mixin = {\n beforeCreate: function beforeCreate() {\n var options = this.$options;\n options.i18n = options.i18n || (options.__i18n ? {} : null);\n\n if (options.i18n) {\n if (options.i18n instanceof VueI18n) {\n // init locale messages via custom blocks\n if (options.__i18n) {\n try {\n var localeMessages = {};\n options.__i18n.forEach(function (resource) {\n localeMessages = merge(localeMessages, JSON.parse(resource));\n });\n Object.keys(localeMessages).forEach(function (locale) {\n options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);\n });\n } catch (e) {\n if (true) {\n error(\"Cannot parse locale messages via custom blocks.\", e);\n }\n }\n }\n this._i18n = options.i18n;\n this._i18nWatcher = this._i18n.watchI18nData();\n } else if (isPlainObject(options.i18n)) {\n // component local i18n\n if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n options.i18n.root = this.$root;\n options.i18n.formatter = this.$root.$i18n.formatter;\n options.i18n.fallbackLocale = this.$root.$i18n.fallbackLocale;\n options.i18n.formatFallbackMessages = this.$root.$i18n.formatFallbackMessages;\n options.i18n.silentTranslationWarn = this.$root.$i18n.silentTranslationWarn;\n options.i18n.silentFallbackWarn = this.$root.$i18n.silentFallbackWarn;\n options.i18n.pluralizationRules = this.$root.$i18n.pluralizationRules;\n options.i18n.preserveDirectiveContent = this.$root.$i18n.preserveDirectiveContent;\n }\n\n // init locale messages via custom blocks\n if (options.__i18n) {\n try {\n var localeMessages$1 = {};\n options.__i18n.forEach(function (resource) {\n localeMessages$1 = merge(localeMessages$1, JSON.parse(resource));\n });\n options.i18n.messages = localeMessages$1;\n } catch (e) {\n if (true) {\n warn(\"Cannot parse locale messages via custom blocks.\", e);\n }\n }\n }\n\n var ref = options.i18n;\n var sharedMessages = ref.sharedMessages;\n if (sharedMessages && isPlainObject(sharedMessages)) {\n options.i18n.messages = merge(options.i18n.messages, sharedMessages);\n }\n\n this._i18n = new VueI18n(options.i18n);\n this._i18nWatcher = this._i18n.watchI18nData();\n\n if (options.i18n.sync === undefined || !!options.i18n.sync) {\n this._localeWatcher = this.$i18n.watchLocale();\n }\n } else {\n if (true) {\n warn(\"Cannot be interpreted 'i18n' option.\");\n }\n }\n } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n // root i18n\n this._i18n = this.$root.$i18n;\n } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {\n // parent i18n\n this._i18n = options.parent.$i18n;\n }\n },\n\n beforeMount: function beforeMount() {\n var options = this.$options;\n options.i18n = options.i18n || (options.__i18n ? {} : null);\n\n if (options.i18n) {\n if (options.i18n instanceof VueI18n) {\n // init locale messages via custom blocks\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n } else if (isPlainObject(options.i18n)) {\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n } else {\n if (true) {\n warn(\"Cannot be interpreted 'i18n' option.\");\n }\n }\n } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n if (!this._i18n) {return;}\n\n var self = this;\n this.$nextTick(function () {\n if (self._subscribing) {\n self._i18n.unsubscribeDataChanging(self);\n delete self._subscribing;\n }\n\n if (self._i18nWatcher) {\n self._i18nWatcher();\n self._i18n.destroyVM();\n delete self._i18nWatcher;\n }\n\n if (self._localeWatcher) {\n self._localeWatcher();\n delete self._localeWatcher;\n }\n\n self._i18n = null;\n });\n } };\n\n\n/* */\n\nvar interpolationComponent = {\n name: 'i18n',\n functional: true,\n props: {\n tag: {\n type: String },\n\n path: {\n type: String,\n required: true },\n\n locale: {\n type: String },\n\n places: {\n type: [Array, Object] } },\n\n\n render: function render(h, ref) {\n var data = ref.data;\n var parent = ref.parent;\n var props = ref.props;\n var slots = ref.slots;\n\n var $i18n = parent.$i18n;\n if (!$i18n) {\n if (true) {\n warn('Cannot find VueI18n instance!');\n }\n return;\n }\n\n var path = props.path;\n var locale = props.locale;\n var places = props.places;\n var params = slots();\n var children = $i18n.i(\n path,\n locale,\n onlyHasDefaultPlace(params) || places ?\n useLegacyPlaces(params.default, places) :\n params);\n\n\n var tag = props.tag || 'span';\n return tag ? h(tag, data, children) : children;\n } };\n\n\nfunction onlyHasDefaultPlace(params) {\n var prop;\n for (prop in params) {\n if (prop !== 'default') {return false;}\n }\n return Boolean(prop);\n}\n\nfunction useLegacyPlaces(children, places) {\n var params = places ? createParamsFromPlaces(places) : {};\n\n if (!children) {return params;}\n\n // Filter empty text nodes\n children = children.filter(function (child) {\n return child.tag || child.text.trim() !== '';\n });\n\n var everyPlace = children.every(vnodeHasPlaceAttribute);\n if ( true && everyPlace) {\n warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.');\n }\n\n return children.reduce(\n everyPlace ? assignChildPlace : assignChildIndex,\n params);\n\n}\n\nfunction createParamsFromPlaces(places) {\n if (true) {\n warn('`places` prop is deprecated in next major version. Please switch to Vue slots.');\n }\n\n return Array.isArray(places) ?\n places.reduce(assignChildIndex, {}) :\n Object.assign({}, places);\n}\n\nfunction assignChildPlace(params, child) {\n if (child.data && child.data.attrs && child.data.attrs.place) {\n params[child.data.attrs.place] = child;\n }\n return params;\n}\n\nfunction assignChildIndex(params, child, index) {\n params[index] = child;\n return params;\n}\n\nfunction vnodeHasPlaceAttribute(vnode) {\n return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place);\n}\n\n/* */\n\nvar numberComponent = {\n name: 'i18n-n',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'span' },\n\n value: {\n type: Number,\n required: true },\n\n format: {\n type: [String, Object] },\n\n locale: {\n type: String } },\n\n\n render: function render(h, ref) {\n var props = ref.props;\n var parent = ref.parent;\n var data = ref.data;\n\n var i18n = parent.$i18n;\n\n if (!i18n) {\n if (true) {\n warn('Cannot find VueI18n instance!');\n }\n return null;\n }\n\n var key = null;\n var options = null;\n\n if (typeof props.format === 'string') {\n key = props.format;\n } else if (isObject(props.format)) {\n if (props.format.key) {\n key = props.format.key;\n }\n\n // Filter out number format options only\n options = Object.keys(props.format).reduce(function (acc, prop) {\n var obj;\n\n if (numberFormatKeys.includes(prop)) {\n return Object.assign({}, acc, (obj = {}, obj[prop] = props.format[prop], obj));\n }\n return acc;\n }, null);\n }\n\n var locale = props.locale || i18n.locale;\n var parts = i18n._ntp(props.value, locale, key, options);\n\n var values = parts.map(function (part, index) {\n var obj;\n\n var slot = data.scopedSlots && data.scopedSlots[part.type];\n return slot ? slot((obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj)) : part.value;\n });\n\n return h(props.tag, {\n attrs: data.attrs,\n 'class': data['class'],\n staticClass: data.staticClass },\n values);\n } };\n\n\n/* */\n\nfunction bind(el, binding, vnode) {\n if (!assert(el, vnode)) {return;}\n\n t(el, binding, vnode);\n}\n\nfunction update(el, binding, vnode, oldVNode) {\n if (!assert(el, vnode)) {return;}\n\n var i18n = vnode.context.$i18n;\n if (localeEqual(el, vnode) &&\n looseEqual(binding.value, binding.oldValue) &&\n looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale))) {return;}\n\n t(el, binding, vnode);\n}\n\nfunction unbind(el, binding, vnode, oldVNode) {\n var vm = vnode.context;\n if (!vm) {\n warn('Vue instance does not exists in VNode context');\n return;\n }\n\n var i18n = vnode.context.$i18n || {};\n if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) {\n el.textContent = '';\n }\n el._vt = undefined;\n delete el['_vt'];\n el._locale = undefined;\n delete el['_locale'];\n el._localeMessage = undefined;\n delete el['_localeMessage'];\n}\n\nfunction assert(el, vnode) {\n var vm = vnode.context;\n if (!vm) {\n warn('Vue instance does not exists in VNode context');\n return false;\n }\n\n if (!vm.$i18n) {\n warn('VueI18n instance does not exists in Vue instance');\n return false;\n }\n\n return true;\n}\n\nfunction localeEqual(el, vnode) {\n var vm = vnode.context;\n return el._locale === vm.$i18n.locale;\n}\n\nfunction t(el, binding, vnode) {\n var ref$1, ref$2;\n\n var value = binding.value;\n\n var ref = parseValue(value);\n var path = ref.path;\n var locale = ref.locale;\n var args = ref.args;\n var choice = ref.choice;\n if (!path && !locale && !args) {\n warn('value type not supported');\n return;\n }\n\n if (!path) {\n warn('`path` is required in v-t directive');\n return;\n }\n\n var vm = vnode.context;\n if (choice) {\n el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [path, choice].concat(makeParams(locale, args)));\n } else {\n el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [path].concat(makeParams(locale, args)));\n }\n el._locale = vm.$i18n.locale;\n el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale);\n}\n\nfunction parseValue(value) {\n var path;\n var locale;\n var args;\n var choice;\n\n if (typeof value === 'string') {\n path = value;\n } else if (isPlainObject(value)) {\n path = value.path;\n locale = value.locale;\n args = value.args;\n choice = value.choice;\n }\n\n return { path: path, locale: locale, args: args, choice: choice };\n}\n\nfunction makeParams(locale, args) {\n var params = [];\n\n locale && params.push(locale);\n if (args && (Array.isArray(args) || isPlainObject(args))) {\n params.push(args);\n }\n\n return params;\n}\n\nvar Vue;\n\nfunction install(_Vue) {\n /* istanbul ignore if */\n if ( true && install.installed && _Vue === Vue) {\n warn('already installed.');\n return;\n }\n install.installed = true;\n\n Vue = _Vue;\n\n var version = Vue.version && Number(Vue.version.split('.')[0]) || -1;\n /* istanbul ignore if */\n if ( true && version < 2) {\n warn(\"vue-i18n (\" + install.version + \") need to use Vue 2.0 or later (Vue: \" + Vue.version + \").\");\n return;\n }\n\n extend(Vue);\n Vue.mixin(mixin);\n Vue.directive('t', { bind: bind, update: update, unbind: unbind });\n Vue.component(interpolationComponent.name, interpolationComponent);\n Vue.component(numberComponent.name, numberComponent);\n\n // use simple mergeStrategies to prevent i18n instance lose '__proto__'\n var strats = Vue.config.optionMergeStrategies;\n strats.i18n = function (parentVal, childVal) {\n return childVal === undefined ?\n parentVal :\n childVal;\n };\n}\n\n/* */\n\nvar BaseFormatter = function BaseFormatter() {\n this._caches = Object.create(null);\n};\n\nBaseFormatter.prototype.interpolate = function interpolate(message, values) {\n if (!values) {\n return [message];\n }\n var tokens = this._caches[message];\n if (!tokens) {\n tokens = parse(message);\n this._caches[message] = tokens;\n }\n return compile(tokens, values);\n};\n\n\n\nvar RE_TOKEN_LIST_VALUE = /^(?:\\d)+/;\nvar RE_TOKEN_NAMED_VALUE = /^(?:\\w)+/;\n\nfunction parse(format) {\n var tokens = [];\n var position = 0;\n\n var text = '';\n while (position < format.length) {\n var char = format[position++];\n if (char === '{') {\n if (text) {\n tokens.push({ type: 'text', value: text });\n }\n\n text = '';\n var sub = '';\n char = format[position++];\n while (char !== undefined && char !== '}') {\n sub += char;\n char = format[position++];\n }\n var isClosed = char === '}';\n\n var type = RE_TOKEN_LIST_VALUE.test(sub) ?\n 'list' :\n isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ?\n 'named' :\n 'unknown';\n tokens.push({ value: sub, type: type });\n } else if (char === '%') {\n // when found rails i18n syntax, skip text capture\n if (format[position] !== '{') {\n text += char;\n }\n } else {\n text += char;\n }\n }\n\n text && tokens.push({ type: 'text', value: text });\n\n return tokens;\n}\n\nfunction compile(tokens, values) {\n var compiled = [];\n var index = 0;\n\n var mode = Array.isArray(values) ?\n 'list' :\n isObject(values) ?\n 'named' :\n 'unknown';\n if (mode === 'unknown') {return compiled;}\n\n while (index < tokens.length) {\n var token = tokens[index];\n switch (token.type) {\n case 'text':\n compiled.push(token.value);\n break;\n case 'list':\n compiled.push(values[parseInt(token.value, 10)]);\n break;\n case 'named':\n if (mode === 'named') {\n compiled.push(values[token.value]);\n } else {\n if (true) {\n warn(\"Type of token '\" + token.type + \"' and format of value '\" + mode + \"' don't match!\");\n }\n }\n break;\n case 'unknown':\n if (true) {\n warn(\"Detect 'unknown' type of token!\");\n }\n break;}\n\n index++;\n }\n\n return compiled;\n}\n\n/* */\n\n/**\n * Path parser\n * - Inspired:\n * Vue.js Path parser\n */\n\n// actions\nvar APPEND = 0;\nvar PUSH = 1;\nvar INC_SUB_PATH_DEPTH = 2;\nvar PUSH_SUB_PATH = 3;\n\n// states\nvar BEFORE_PATH = 0;\nvar IN_PATH = 1;\nvar BEFORE_IDENT = 2;\nvar IN_IDENT = 3;\nvar IN_SUB_PATH = 4;\nvar IN_SINGLE_QUOTE = 5;\nvar IN_DOUBLE_QUOTE = 6;\nvar AFTER_PATH = 7;\nvar ERROR = 8;\n\nvar pathStateMachine = [];\n\npathStateMachine[BEFORE_PATH] = {\n 'ws': [BEFORE_PATH],\n 'ident': [IN_IDENT, APPEND],\n '[': [IN_SUB_PATH],\n 'eof': [AFTER_PATH] };\n\n\npathStateMachine[IN_PATH] = {\n 'ws': [IN_PATH],\n '.': [BEFORE_IDENT],\n '[': [IN_SUB_PATH],\n 'eof': [AFTER_PATH] };\n\n\npathStateMachine[BEFORE_IDENT] = {\n 'ws': [BEFORE_IDENT],\n 'ident': [IN_IDENT, APPEND],\n '0': [IN_IDENT, APPEND],\n 'number': [IN_IDENT, APPEND] };\n\n\npathStateMachine[IN_IDENT] = {\n 'ident': [IN_IDENT, APPEND],\n '0': [IN_IDENT, APPEND],\n 'number': [IN_IDENT, APPEND],\n 'ws': [IN_PATH, PUSH],\n '.': [BEFORE_IDENT, PUSH],\n '[': [IN_SUB_PATH, PUSH],\n 'eof': [AFTER_PATH, PUSH] };\n\n\npathStateMachine[IN_SUB_PATH] = {\n \"'\": [IN_SINGLE_QUOTE, APPEND],\n '\"': [IN_DOUBLE_QUOTE, APPEND],\n '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],\n ']': [IN_PATH, PUSH_SUB_PATH],\n 'eof': ERROR,\n 'else': [IN_SUB_PATH, APPEND] };\n\n\npathStateMachine[IN_SINGLE_QUOTE] = {\n \"'\": [IN_SUB_PATH, APPEND],\n 'eof': ERROR,\n 'else': [IN_SINGLE_QUOTE, APPEND] };\n\n\npathStateMachine[IN_DOUBLE_QUOTE] = {\n '\"': [IN_SUB_PATH, APPEND],\n 'eof': ERROR,\n 'else': [IN_DOUBLE_QUOTE, APPEND] };\n\n\n/**\n * Check if an expression is a literal value.\n */\n\nvar literalValueRE = /^\\s?(?:true|false|-?[\\d.]+|'[^']*'|\"[^\"]*\")\\s?$/;\nfunction isLiteral(exp) {\n return literalValueRE.test(exp);\n}\n\n/**\n * Strip quotes from a string\n */\n\nfunction stripQuotes(str) {\n var a = str.charCodeAt(0);\n var b = str.charCodeAt(str.length - 1);\n return a === b && (a === 0x22 || a === 0x27) ?\n str.slice(1, -1) :\n str;\n}\n\n/**\n * Determine the type of a character in a keypath.\n */\n\nfunction getPathCharType(ch) {\n if (ch === undefined || ch === null) {return 'eof';}\n\n var code = ch.charCodeAt(0);\n\n switch (code) {\n case 0x5B: // [\n case 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n return ch;\n\n case 0x5F: // _\n case 0x24: // $\n case 0x2D: // -\n return 'ident';\n\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n return 'ws';}\n\n\n return 'ident';\n}\n\n/**\n * Format a subPath, return its plain form if it is\n * a literal string or number. Otherwise prepend the\n * dynamic indicator (*).\n */\n\nfunction formatSubPath(path) {\n var trimmed = path.trim();\n // invalid leading 0\n if (path.charAt(0) === '0' && isNaN(path)) {return false;}\n\n return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed;\n}\n\n/**\n * Parse a string path into an array of segments\n */\n\nfunction parse$1(path) {\n var keys = [];\n var index = -1;\n var mode = BEFORE_PATH;\n var subPathDepth = 0;\n var c;\n var key;\n var newChar;\n var type;\n var transition;\n var action;\n var typeMap;\n var actions = [];\n\n actions[PUSH] = function () {\n if (key !== undefined) {\n keys.push(key);\n key = undefined;\n }\n };\n\n actions[APPEND] = function () {\n if (key === undefined) {\n key = newChar;\n } else {\n key += newChar;\n }\n };\n\n actions[INC_SUB_PATH_DEPTH] = function () {\n actions[APPEND]();\n subPathDepth++;\n };\n\n actions[PUSH_SUB_PATH] = function () {\n if (subPathDepth > 0) {\n subPathDepth--;\n mode = IN_SUB_PATH;\n actions[APPEND]();\n } else {\n subPathDepth = 0;\n if (key === undefined) {return false;}\n key = formatSubPath(key);\n if (key === false) {\n return false;\n } else {\n actions[PUSH]();\n }\n }\n };\n\n function maybeUnescapeQuote() {\n var nextChar = path[index + 1];\n if (mode === IN_SINGLE_QUOTE && nextChar === \"'\" ||\n mode === IN_DOUBLE_QUOTE && nextChar === '\"') {\n index++;\n newChar = '\\\\' + nextChar;\n actions[APPEND]();\n return true;\n }\n }\n\n while (mode !== null) {\n index++;\n c = path[index];\n\n if (c === '\\\\' && maybeUnescapeQuote()) {\n continue;\n }\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mode];\n transition = typeMap[type] || typeMap['else'] || ERROR;\n\n if (transition === ERROR) {\n return; // parse error\n }\n\n mode = transition[0];\n action = actions[transition[1]];\n if (action) {\n newChar = transition[2];\n newChar = newChar === undefined ?\n c :\n newChar;\n if (action() === false) {\n return;\n }\n }\n\n if (mode === AFTER_PATH) {\n return keys;\n }\n }\n}\n\n\n\n\n\nvar I18nPath = function I18nPath() {\n this._cache = Object.create(null);\n};\n\n/**\n * External parse that check for a cache hit first\n */\nI18nPath.prototype.parsePath = function parsePath(path) {\n var hit = this._cache[path];\n if (!hit) {\n hit = parse$1(path);\n if (hit) {\n this._cache[path] = hit;\n }\n }\n return hit || [];\n};\n\n/**\n * Get path value from path string\n */\nI18nPath.prototype.getPathValue = function getPathValue(obj, path) {\n if (!isObject(obj)) {return null;}\n\n var paths = this.parsePath(path);\n if (paths.length === 0) {\n return null;\n } else {\n var length = paths.length;\n var last = obj;\n var i = 0;\n while (i < length) {\n var value = last[paths[i]];\n if (value === undefined) {\n return null;\n }\n last = value;\n i++;\n }\n\n return last;\n }\n};\n\n/* */\n\n\n\nvar htmlTagMatcher = /<\\/?[\\w\\s=\"/.':;#-\\/]+>/;\nvar linkKeyMatcher = /(?:@(?:\\.[a-z]+)?:(?:[\\w\\-_|.]+|\\([\\w\\-_|.]+\\)))/g;\nvar linkKeyPrefixMatcher = /^@(?:\\.([a-z]+))?:/;\nvar bracketsMatcher = /[()]/g;\nvar defaultModifiers = {\n 'upper': function upper(str) {return str.toLocaleUpperCase();},\n 'lower': function lower(str) {return str.toLocaleLowerCase();} };\n\n\nvar defaultFormatter = new BaseFormatter();\n\nvar VueI18n = function VueI18n(options) {\n var this$1 = this;\n if (options === void 0) options = {};\n\n // Auto install if it is not done yet and `window` has `Vue`.\n // To allow users to avoid auto-installation in some cases,\n // this code should be placed here. See #290\n /* istanbul ignore if */\n if (!Vue && typeof window !== 'undefined' && window.Vue) {\n install(window.Vue);\n }\n\n var locale = options.locale || 'en-US';\n var fallbackLocale = options.fallbackLocale || 'en-US';\n var messages = options.messages || {};\n var dateTimeFormats = options.dateTimeFormats || {};\n var numberFormats = options.numberFormats || {};\n\n this._vm = null;\n this._formatter = options.formatter || defaultFormatter;\n this._modifiers = options.modifiers || {};\n this._missing = options.missing || null;\n this._root = options.root || null;\n this._sync = options.sync === undefined ? true : !!options.sync;\n this._fallbackRoot = options.fallbackRoot === undefined ?\n true :\n !!options.fallbackRoot;\n this._formatFallbackMessages = options.formatFallbackMessages === undefined ?\n false :\n !!options.formatFallbackMessages;\n this._silentTranslationWarn = options.silentTranslationWarn === undefined ?\n false :\n options.silentTranslationWarn;\n this._silentFallbackWarn = options.silentFallbackWarn === undefined ?\n false :\n !!options.silentFallbackWarn;\n this._dateTimeFormatters = {};\n this._numberFormatters = {};\n this._path = new I18nPath();\n this._dataListeners = [];\n this._preserveDirectiveContent = options.preserveDirectiveContent === undefined ?\n false :\n !!options.preserveDirectiveContent;\n this.pluralizationRules = options.pluralizationRules || {};\n this._warnHtmlInMessage = options.warnHtmlInMessage || 'off';\n\n this._exist = function (message, key) {\n if (!message || !key) {return false;}\n if (!isNull(this$1._path.getPathValue(message, key))) {return true;}\n // fallback for flat key\n if (message[key]) {return true;}\n return false;\n };\n\n if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n Object.keys(messages).forEach(function (locale) {\n this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);\n });\n }\n\n this._initVM({\n locale: locale,\n fallbackLocale: fallbackLocale,\n messages: messages,\n dateTimeFormats: dateTimeFormats,\n numberFormats: numberFormats });\n\n};\n\nvar prototypeAccessors = { vm: { configurable: true }, messages: { configurable: true }, dateTimeFormats: { configurable: true }, numberFormats: { configurable: true }, availableLocales: { configurable: true }, locale: { configurable: true }, fallbackLocale: { configurable: true }, formatFallbackMessages: { configurable: true }, missing: { configurable: true }, formatter: { configurable: true }, silentTranslationWarn: { configurable: true }, silentFallbackWarn: { configurable: true }, preserveDirectiveContent: { configurable: true }, warnHtmlInMessage: { configurable: true } };\n\nVueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage(locale, level, message) {\n var paths = [];\n\n var fn = function fn(level, locale, message, paths) {\n if (isPlainObject(message)) {\n Object.keys(message).forEach(function (key) {\n var val = message[key];\n if (isPlainObject(val)) {\n paths.push(key);\n paths.push('.');\n fn(level, locale, val, paths);\n paths.pop();\n paths.pop();\n } else {\n paths.push(key);\n fn(level, locale, val, paths);\n paths.pop();\n }\n });\n } else if (Array.isArray(message)) {\n message.forEach(function (item, index) {\n if (isPlainObject(item)) {\n paths.push(\"[\" + index + \"]\");\n paths.push('.');\n fn(level, locale, item, paths);\n paths.pop();\n paths.pop();\n } else {\n paths.push(\"[\" + index + \"]\");\n fn(level, locale, item, paths);\n paths.pop();\n }\n });\n } else if (typeof message === 'string') {\n var ret = htmlTagMatcher.test(message);\n if (ret) {\n var msg = \"Detected HTML in message '\" + message + \"' of keypath '\" + paths.join('') + \"' at '\" + locale + \"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp\";\n if (level === 'warn') {\n warn(msg);\n } else if (level === 'error') {\n error(msg);\n }\n }\n }\n };\n\n fn(level, locale, message, paths);\n};\n\nVueI18n.prototype._initVM = function _initVM(data) {\n var silent = Vue.config.silent;\n Vue.config.silent = true;\n this._vm = new Vue({ data: data });\n Vue.config.silent = silent;\n};\n\nVueI18n.prototype.destroyVM = function destroyVM() {\n this._vm.$destroy();\n};\n\nVueI18n.prototype.subscribeDataChanging = function subscribeDataChanging(vm) {\n this._dataListeners.push(vm);\n};\n\nVueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging(vm) {\n remove(this._dataListeners, vm);\n};\n\nVueI18n.prototype.watchI18nData = function watchI18nData() {\n var self = this;\n return this._vm.$watch('$data', function () {\n var i = self._dataListeners.length;\n while (i--) {\n Vue.nextTick(function () {\n self._dataListeners[i] && self._dataListeners[i].$forceUpdate();\n });\n }\n }, { deep: true });\n};\n\nVueI18n.prototype.watchLocale = function watchLocale() {\n /* istanbul ignore if */\n if (!this._sync || !this._root) {return null;}\n var target = this._vm;\n return this._root.$i18n.vm.$watch('locale', function (val) {\n target.$set(target, 'locale', val);\n target.$forceUpdate();\n }, { immediate: true });\n};\n\nprototypeAccessors.vm.get = function () {return this._vm;};\n\nprototypeAccessors.messages.get = function () {return looseClone(this._getMessages());};\nprototypeAccessors.dateTimeFormats.get = function () {return looseClone(this._getDateTimeFormats());};\nprototypeAccessors.numberFormats.get = function () {return looseClone(this._getNumberFormats());};\nprototypeAccessors.availableLocales.get = function () {return Object.keys(this.messages).sort();};\n\nprototypeAccessors.locale.get = function () {return this._vm.locale;};\nprototypeAccessors.locale.set = function (locale) {\n this._vm.$set(this._vm, 'locale', locale);\n};\n\nprototypeAccessors.fallbackLocale.get = function () {return this._vm.fallbackLocale;};\nprototypeAccessors.fallbackLocale.set = function (locale) {\n this._vm.$set(this._vm, 'fallbackLocale', locale);\n};\n\nprototypeAccessors.formatFallbackMessages.get = function () {return this._formatFallbackMessages;};\nprototypeAccessors.formatFallbackMessages.set = function (fallback) {this._formatFallbackMessages = fallback;};\n\nprototypeAccessors.missing.get = function () {return this._missing;};\nprototypeAccessors.missing.set = function (handler) {this._missing = handler;};\n\nprototypeAccessors.formatter.get = function () {return this._formatter;};\nprototypeAccessors.formatter.set = function (formatter) {this._formatter = formatter;};\n\nprototypeAccessors.silentTranslationWarn.get = function () {return this._silentTranslationWarn;};\nprototypeAccessors.silentTranslationWarn.set = function (silent) {this._silentTranslationWarn = silent;};\n\nprototypeAccessors.silentFallbackWarn.get = function () {return this._silentFallbackWarn;};\nprototypeAccessors.silentFallbackWarn.set = function (silent) {this._silentFallbackWarn = silent;};\n\nprototypeAccessors.preserveDirectiveContent.get = function () {return this._preserveDirectiveContent;};\nprototypeAccessors.preserveDirectiveContent.set = function (preserve) {this._preserveDirectiveContent = preserve;};\n\nprototypeAccessors.warnHtmlInMessage.get = function () {return this._warnHtmlInMessage;};\nprototypeAccessors.warnHtmlInMessage.set = function (level) {\n var this$1 = this;\n\n var orgLevel = this._warnHtmlInMessage;\n this._warnHtmlInMessage = level;\n if (orgLevel !== level && (level === 'warn' || level === 'error')) {\n var messages = this._getMessages();\n Object.keys(messages).forEach(function (locale) {\n this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);\n });\n }\n};\n\nVueI18n.prototype._getMessages = function _getMessages() {return this._vm.messages;};\nVueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats() {return this._vm.dateTimeFormats;};\nVueI18n.prototype._getNumberFormats = function _getNumberFormats() {return this._vm.numberFormats;};\n\nVueI18n.prototype._warnDefault = function _warnDefault(locale, key, result, vm, values) {\n if (!isNull(result)) {return result;}\n if (this._missing) {\n var missingRet = this._missing.apply(null, [locale, key, vm, values]);\n if (typeof missingRet === 'string') {\n return missingRet;\n }\n } else {\n if ( true && !this._isSilentTranslationWarn(key)) {\n warn(\n \"Cannot translate the value of keypath '\" + key + \"'. \" +\n 'Use the value of keypath as default.');\n\n }\n }\n\n if (this._formatFallbackMessages) {\n var parsedArgs = parseArgs.apply(void 0, values);\n return this._render(key, 'string', parsedArgs.params, key);\n } else {\n return key;\n }\n};\n\nVueI18n.prototype._isFallbackRoot = function _isFallbackRoot(val) {\n return !val && !isNull(this._root) && this._fallbackRoot;\n};\n\nVueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn(key) {\n return this._silentFallbackWarn instanceof RegExp ?\n this._silentFallbackWarn.test(key) :\n this._silentFallbackWarn;\n};\n\nVueI18n.prototype._isSilentFallback = function _isSilentFallback(locale, key) {\n return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale);\n};\n\nVueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn(key) {\n return this._silentTranslationWarn instanceof RegExp ?\n this._silentTranslationWarn.test(key) :\n this._silentTranslationWarn;\n};\n\nVueI18n.prototype._interpolate = function _interpolate(\nlocale,\nmessage,\nkey,\nhost,\ninterpolateMode,\nvalues,\nvisitedLinkStack)\n{\n if (!message) {return null;}\n\n var pathRet = this._path.getPathValue(message, key);\n if (Array.isArray(pathRet) || isPlainObject(pathRet)) {return pathRet;}\n\n var ret;\n if (isNull(pathRet)) {\n /* istanbul ignore else */\n if (isPlainObject(message)) {\n ret = message[key];\n if (typeof ret !== 'string') {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {\n warn(\"Value of key '\" + key + \"' is not a string!\");\n }\n return null;\n }\n } else {\n return null;\n }\n } else {\n /* istanbul ignore else */\n if (typeof pathRet === 'string') {\n ret = pathRet;\n } else {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {\n warn(\"Value of key '\" + key + \"' is not a string!\");\n }\n return null;\n }\n }\n\n // Check for the existence of links within the translated string\n if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) {\n ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack);\n }\n\n return this._render(ret, interpolateMode, values, key);\n};\n\nVueI18n.prototype._link = function _link(\nlocale,\nmessage,\nstr,\nhost,\ninterpolateMode,\nvalues,\nvisitedLinkStack)\n{\n var ret = str;\n\n // Match all the links within the local\n // We are going to replace each of\n // them with its translation\n var matches = ret.match(linkKeyMatcher);\n for (var idx in matches) {\n // ie compatible: filter custom array\n // prototype method\n if (!matches.hasOwnProperty(idx)) {\n continue;\n }\n var link = matches[idx];\n var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher);\n var linkPrefix = linkKeyPrefixMatches[0];\n var formatterName = linkKeyPrefixMatches[1];\n\n // Remove the leading @:, @.case: and the brackets\n var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, '');\n\n if (visitedLinkStack.includes(linkPlaceholder)) {\n if (true) {\n warn(\"Circular reference found. \\\"\" + link + \"\\\" is already visited in the chain of \" + visitedLinkStack.reverse().join(' <- '));\n }\n return ret;\n }\n visitedLinkStack.push(linkPlaceholder);\n\n // Translate the link\n var translated = this._interpolate(\n locale, message, linkPlaceholder, host,\n interpolateMode === 'raw' ? 'string' : interpolateMode,\n interpolateMode === 'raw' ? undefined : values,\n visitedLinkStack);\n\n\n if (this._isFallbackRoot(translated)) {\n if ( true && !this._isSilentTranslationWarn(linkPlaceholder)) {\n warn(\"Fall back to translate the link placeholder '\" + linkPlaceholder + \"' with root locale.\");\n }\n /* istanbul ignore if */\n if (!this._root) {throw Error('unexpected error');}\n var root = this._root.$i18n;\n translated = root._translate(\n root._getMessages(), root.locale, root.fallbackLocale,\n linkPlaceholder, host, interpolateMode, values);\n\n }\n translated = this._warnDefault(\n locale, linkPlaceholder, translated, host,\n Array.isArray(values) ? values : [values]);\n\n\n if (this._modifiers.hasOwnProperty(formatterName)) {\n translated = this._modifiers[formatterName](translated);\n } else if (defaultModifiers.hasOwnProperty(formatterName)) {\n translated = defaultModifiers[formatterName](translated);\n }\n\n visitedLinkStack.pop();\n\n // Replace the link with the translated\n ret = !translated ? ret : ret.replace(link, translated);\n }\n\n return ret;\n};\n\nVueI18n.prototype._render = function _render(message, interpolateMode, values, path) {\n var ret = this._formatter.interpolate(message, values, path);\n\n // If the custom formatter refuses to work - apply the default one\n if (!ret) {\n ret = defaultFormatter.interpolate(message, values, path);\n }\n\n // if interpolateMode is **not** 'string' ('row'),\n // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter\n return interpolateMode === 'string' ? ret.join('') : ret;\n};\n\nVueI18n.prototype._translate = function _translate(\nmessages,\nlocale,\nfallback,\nkey,\nhost,\ninterpolateMode,\nargs)\n{\n var res =\n this._interpolate(locale, messages[locale], key, host, interpolateMode, args, [key]);\n if (!isNull(res)) {return res;}\n\n res = this._interpolate(fallback, messages[fallback], key, host, interpolateMode, args, [key]);\n if (!isNull(res)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn(\"Fall back to translate the keypath '\" + key + \"' with '\" + fallback + \"' locale.\");\n }\n return res;\n } else {\n return null;\n }\n};\n\nVueI18n.prototype._t = function _t(key, _locale, messages, host) {\n var ref;\n\n var values = [],len = arguments.length - 4;\n while (len-- > 0) {values[len] = arguments[len + 4];}\n if (!key) {return '';}\n\n var parsedArgs = parseArgs.apply(void 0, values);\n var locale = parsedArgs.locale || _locale;\n\n var ret = this._translate(\n messages, locale, this.fallbackLocale, key,\n host, 'string', parsedArgs.params);\n\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn(\"Fall back to translate the keypath '\" + key + \"' with root locale.\");\n }\n /* istanbul ignore if */\n if (!this._root) {throw Error('unexpected error');}\n return (ref = this._root).$t.apply(ref, [key].concat(values));\n } else {\n return this._warnDefault(locale, key, ret, host, values);\n }\n};\n\nVueI18n.prototype.t = function t(key) {\n var ref;\n\n var values = [],len = arguments.length - 1;\n while (len-- > 0) {values[len] = arguments[len + 1];}\n return (ref = this)._t.apply(ref, [key, this.locale, this._getMessages(), null].concat(values));\n};\n\nVueI18n.prototype._i = function _i(key, locale, messages, host, values) {\n var ret =\n this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key)) {\n warn(\"Fall back to interpolate the keypath '\" + key + \"' with root locale.\");\n }\n if (!this._root) {throw Error('unexpected error');}\n return this._root.$i18n.i(key, locale, values);\n } else {\n return this._warnDefault(locale, key, ret, host, [values]);\n }\n};\n\nVueI18n.prototype.i = function i(key, locale, values) {\n /* istanbul ignore if */\n if (!key) {return '';}\n\n if (typeof locale !== 'string') {\n locale = this.locale;\n }\n\n return this._i(key, locale, this._getMessages(), null, values);\n};\n\nVueI18n.prototype._tc = function _tc(\nkey,\n_locale,\nmessages,\nhost,\nchoice)\n{\n var ref;\n\n var values = [],len = arguments.length - 5;\n while (len-- > 0) {values[len] = arguments[len + 5];}\n if (!key) {return '';}\n if (choice === undefined) {\n choice = 1;\n }\n\n var predefined = { 'count': choice, 'n': choice };\n var parsedArgs = parseArgs.apply(void 0, values);\n parsedArgs.params = Object.assign(predefined, parsedArgs.params);\n values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params];\n return this.fetchChoice((ref = this)._t.apply(ref, [key, _locale, messages, host].concat(values)), choice);\n};\n\nVueI18n.prototype.fetchChoice = function fetchChoice(message, choice) {\n /* istanbul ignore if */\n if (!message && typeof message !== 'string') {return null;}\n var choices = message.split('|');\n\n choice = this.getChoiceIndex(choice, choices.length);\n if (!choices[choice]) {return message;}\n return choices[choice].trim();\n};\n\n/**\n * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)`\n * @param choicesLength {number} an overall amount of available choices\n * @returns a final choice index\n */\nVueI18n.prototype.getChoiceIndex = function getChoiceIndex(choice, choicesLength) {\n // Default (old) getChoiceIndex implementation - english-compatible\n var defaultImpl = function defaultImpl(_choice, _choicesLength) {\n _choice = Math.abs(_choice);\n\n if (_choicesLength === 2) {\n return _choice ?\n _choice > 1 ?\n 1 :\n 0 :\n 1;\n }\n\n return _choice ? Math.min(_choice, 2) : 0;\n };\n\n if (this.locale in this.pluralizationRules) {\n return this.pluralizationRules[this.locale].apply(this, [choice, choicesLength]);\n } else {\n return defaultImpl(choice, choicesLength);\n }\n};\n\nVueI18n.prototype.tc = function tc(key, choice) {\n var ref;\n\n var values = [],len = arguments.length - 2;\n while (len-- > 0) {values[len] = arguments[len + 2];}\n return (ref = this)._tc.apply(ref, [key, this.locale, this._getMessages(), null, choice].concat(values));\n};\n\nVueI18n.prototype._te = function _te(key, locale, messages) {\n var args = [],len = arguments.length - 3;\n while (len-- > 0) {args[len] = arguments[len + 3];}\n\n var _locale = parseArgs.apply(void 0, args).locale || locale;\n return this._exist(messages[_locale], key);\n};\n\nVueI18n.prototype.te = function te(key, locale) {\n return this._te(key, this.locale, this._getMessages(), locale);\n};\n\nVueI18n.prototype.getLocaleMessage = function getLocaleMessage(locale) {\n return looseClone(this._vm.messages[locale] || {});\n};\n\nVueI18n.prototype.setLocaleMessage = function setLocaleMessage(locale, message) {\n if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);\n if (this._warnHtmlInMessage === 'error') {return;}\n }\n this._vm.$set(this._vm.messages, locale, message);\n};\n\nVueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage(locale, message) {\n if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);\n if (this._warnHtmlInMessage === 'error') {return;}\n }\n this._vm.$set(this._vm.messages, locale, merge(this._vm.messages[locale] || {}, message));\n};\n\nVueI18n.prototype.getDateTimeFormat = function getDateTimeFormat(locale) {\n return looseClone(this._vm.dateTimeFormats[locale] || {});\n};\n\nVueI18n.prototype.setDateTimeFormat = function setDateTimeFormat(locale, format) {\n this._vm.$set(this._vm.dateTimeFormats, locale, format);\n};\n\nVueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat(locale, format) {\n this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format));\n};\n\nVueI18n.prototype._localizeDateTime = function _localizeDateTime(\nvalue,\nlocale,\nfallback,\ndateTimeFormats,\nkey)\n{\n var _locale = locale;\n var formats = dateTimeFormats[_locale];\n\n // fallback locale\n if (isNull(formats) || isNull(formats[key])) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn(\"Fall back to '\" + fallback + \"' datetime formats from '\" + locale + \"' datetime formats.\");\n }\n _locale = fallback;\n formats = dateTimeFormats[_locale];\n }\n\n if (isNull(formats) || isNull(formats[key])) {\n return null;\n } else {\n var format = formats[key];\n var id = _locale + \"__\" + key;\n var formatter = this._dateTimeFormatters[id];\n if (!formatter) {\n formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format);\n }\n return formatter.format(value);\n }\n};\n\nVueI18n.prototype._d = function _d(value, locale, key) {\n /* istanbul ignore if */\n if ( true && !VueI18n.availabilities.dateTimeFormat) {\n warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.');\n return '';\n }\n\n if (!key) {\n return new Intl.DateTimeFormat(locale).format(value);\n }\n\n var ret =\n this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn(\"Fall back to datetime localization of root: key '\" + key + \"'.\");\n }\n /* istanbul ignore if */\n if (!this._root) {throw Error('unexpected error');}\n return this._root.$i18n.d(value, key, locale);\n } else {\n return ret || '';\n }\n};\n\nVueI18n.prototype.d = function d(value) {\n var args = [],len = arguments.length - 1;\n while (len-- > 0) {args[len] = arguments[len + 1];}\n\n var locale = this.locale;\n var key = null;\n\n if (args.length === 1) {\n if (typeof args[0] === 'string') {\n key = args[0];\n } else if (isObject(args[0])) {\n if (args[0].locale) {\n locale = args[0].locale;\n }\n if (args[0].key) {\n key = args[0].key;\n }\n }\n } else if (args.length === 2) {\n if (typeof args[0] === 'string') {\n key = args[0];\n }\n if (typeof args[1] === 'string') {\n locale = args[1];\n }\n }\n\n return this._d(value, locale, key);\n};\n\nVueI18n.prototype.getNumberFormat = function getNumberFormat(locale) {\n return looseClone(this._vm.numberFormats[locale] || {});\n};\n\nVueI18n.prototype.setNumberFormat = function setNumberFormat(locale, format) {\n this._vm.$set(this._vm.numberFormats, locale, format);\n};\n\nVueI18n.prototype.mergeNumberFormat = function mergeNumberFormat(locale, format) {\n this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format));\n};\n\nVueI18n.prototype._getNumberFormatter = function _getNumberFormatter(\nvalue,\nlocale,\nfallback,\nnumberFormats,\nkey,\noptions)\n{\n var _locale = locale;\n var formats = numberFormats[_locale];\n\n // fallback locale\n if (isNull(formats) || isNull(formats[key])) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn(\"Fall back to '\" + fallback + \"' number formats from '\" + locale + \"' number formats.\");\n }\n _locale = fallback;\n formats = numberFormats[_locale];\n }\n\n if (isNull(formats) || isNull(formats[key])) {\n return null;\n } else {\n var format = formats[key];\n\n var formatter;\n if (options) {\n // If options specified - create one time number formatter\n formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options));\n } else {\n var id = _locale + \"__\" + key;\n formatter = this._numberFormatters[id];\n if (!formatter) {\n formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format);\n }\n }\n return formatter;\n }\n};\n\nVueI18n.prototype._n = function _n(value, locale, key, options) {\n /* istanbul ignore if */\n if (!VueI18n.availabilities.numberFormat) {\n if (true) {\n warn('Cannot format a Number value due to not supported Intl.NumberFormat.');\n }\n return '';\n }\n\n if (!key) {\n var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);\n return nf.format(value);\n }\n\n var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);\n var ret = formatter && formatter.format(value);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn(\"Fall back to number localization of root: key '\" + key + \"'.\");\n }\n /* istanbul ignore if */\n if (!this._root) {throw Error('unexpected error');}\n return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options));\n } else {\n return ret || '';\n }\n};\n\nVueI18n.prototype.n = function n(value) {\n var args = [],len = arguments.length - 1;\n while (len-- > 0) {args[len] = arguments[len + 1];}\n\n var locale = this.locale;\n var key = null;\n var options = null;\n\n if (args.length === 1) {\n if (typeof args[0] === 'string') {\n key = args[0];\n } else if (isObject(args[0])) {\n if (args[0].locale) {\n locale = args[0].locale;\n }\n if (args[0].key) {\n key = args[0].key;\n }\n\n // Filter out number format options only\n options = Object.keys(args[0]).reduce(function (acc, key) {\n var obj;\n\n if (numberFormatKeys.includes(key)) {\n return Object.assign({}, acc, (obj = {}, obj[key] = args[0][key], obj));\n }\n return acc;\n }, null);\n }\n } else if (args.length === 2) {\n if (typeof args[0] === 'string') {\n key = args[0];\n }\n if (typeof args[1] === 'string') {\n locale = args[1];\n }\n }\n\n return this._n(value, locale, key, options);\n};\n\nVueI18n.prototype._ntp = function _ntp(value, locale, key, options) {\n /* istanbul ignore if */\n if (!VueI18n.availabilities.numberFormat) {\n if (true) {\n warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.');\n }\n return [];\n }\n\n if (!key) {\n var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);\n return nf.formatToParts(value);\n }\n\n var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);\n var ret = formatter && formatter.formatToParts(value);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key)) {\n warn(\"Fall back to format number to parts of root: key '\" + key + \"' .\");\n }\n /* istanbul ignore if */\n if (!this._root) {throw Error('unexpected error');}\n return this._root.$i18n._ntp(value, locale, key, options);\n } else {\n return ret || [];\n }\n};\n\nObject.defineProperties(VueI18n.prototype, prototypeAccessors);\n\nvar availabilities;\n// $FlowFixMe\nObject.defineProperty(VueI18n, 'availabilities', {\n get: function get() {\n if (!availabilities) {\n var intlDefined = typeof Intl !== 'undefined';\n availabilities = {\n dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',\n numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined' };\n\n }\n\n return availabilities;\n } });\n\n\nVueI18n.install = install;\nVueI18n.version = '8.15.1';var _default =\n\nVueI18n;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 10)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vbm9kZV9tb2R1bGVzL3Z1ZS1pMThuL2Rpc3QvdnVlLWkxOG4uZXNtLmpzIl0sIm5hbWVzIjpbIm51bWJlckZvcm1hdEtleXMiLCJ3YXJuIiwibXNnIiwiZXJyIiwiY29uc29sZSIsInN0YWNrIiwiZXJyb3IiLCJpc09iamVjdCIsIm9iaiIsInRvU3RyaW5nIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiT0JKRUNUX1NUUklORyIsImlzUGxhaW5PYmplY3QiLCJjYWxsIiwiaXNOdWxsIiwidmFsIiwidW5kZWZpbmVkIiwicGFyc2VBcmdzIiwiYXJncyIsImxlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImxvY2FsZSIsInBhcmFtcyIsIkFycmF5IiwiaXNBcnJheSIsImxvb3NlQ2xvbmUiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJyZW1vdmUiLCJhcnIiLCJpdGVtIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwiaGFzT3duUHJvcGVydHkiLCJoYXNPd24iLCJrZXkiLCJtZXJnZSIsInRhcmdldCIsImFyZ3VtZW50cyQxIiwib3V0cHV0IiwiaSIsInNvdXJjZSIsImxvb3NlRXF1YWwiLCJhIiwiYiIsImlzT2JqZWN0QSIsImlzT2JqZWN0QiIsImlzQXJyYXlBIiwiaXNBcnJheUIiLCJldmVyeSIsImUiLCJrZXlzQSIsImtleXMiLCJrZXlzQiIsIlN0cmluZyIsImV4dGVuZCIsIlZ1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiX2kxOG4iLCIkdCIsInZhbHVlcyIsImkxOG4iLCIkaTE4biIsIl90IiwiYXBwbHkiLCJfZ2V0TWVzc2FnZXMiLCJjb25jYXQiLCIkdGMiLCJjaG9pY2UiLCJfdGMiLCIkdGUiLCJfdGUiLCIkZCIsInZhbHVlIiwicmVmIiwiZCIsIiRuIiwibiIsIm1peGluIiwiYmVmb3JlQ3JlYXRlIiwib3B0aW9ucyIsIiRvcHRpb25zIiwiX19pMThuIiwiVnVlSTE4biIsImxvY2FsZU1lc3NhZ2VzIiwiZm9yRWFjaCIsInJlc291cmNlIiwibWVyZ2VMb2NhbGVNZXNzYWdlIiwicHJvY2VzcyIsIl9pMThuV2F0Y2hlciIsIndhdGNoSTE4bkRhdGEiLCIkcm9vdCIsInJvb3QiLCJmb3JtYXR0ZXIiLCJmYWxsYmFja0xvY2FsZSIsImZvcm1hdEZhbGxiYWNrTWVzc2FnZXMiLCJzaWxlbnRUcmFuc2xhdGlvbldhcm4iLCJzaWxlbnRGYWxsYmFja1dhcm4iLCJwbHVyYWxpemF0aW9uUnVsZXMiLCJwcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQiLCJsb2NhbGVNZXNzYWdlcyQxIiwibWVzc2FnZXMiLCJzaGFyZWRNZXNzYWdlcyIsInN5bmMiLCJfbG9jYWxlV2F0Y2hlciIsIndhdGNoTG9jYWxlIiwicGFyZW50IiwiYmVmb3JlTW91bnQiLCJzdWJzY3JpYmVEYXRhQ2hhbmdpbmciLCJfc3Vic2NyaWJpbmciLCJiZWZvcmVEZXN0cm95Iiwic2VsZiIsIiRuZXh0VGljayIsInVuc3Vic2NyaWJlRGF0YUNoYW5naW5nIiwiZGVzdHJveVZNIiwiaW50ZXJwb2xhdGlvbkNvbXBvbmVudCIsIm5hbWUiLCJmdW5jdGlvbmFsIiwicHJvcHMiLCJ0YWciLCJ0eXBlIiwicGF0aCIsInJlcXVpcmVkIiwicGxhY2VzIiwicmVuZGVyIiwiaCIsImRhdGEiLCJzbG90cyIsImNoaWxkcmVuIiwib25seUhhc0RlZmF1bHRQbGFjZSIsInVzZUxlZ2FjeVBsYWNlcyIsImRlZmF1bHQiLCJwcm9wIiwiQm9vbGVhbiIsImNyZWF0ZVBhcmFtc0Zyb21QbGFjZXMiLCJmaWx0ZXIiLCJjaGlsZCIsInRleHQiLCJ0cmltIiwiZXZlcnlQbGFjZSIsInZub2RlSGFzUGxhY2VBdHRyaWJ1dGUiLCJyZWR1Y2UiLCJhc3NpZ25DaGlsZFBsYWNlIiwiYXNzaWduQ2hpbGRJbmRleCIsImFzc2lnbiIsImF0dHJzIiwicGxhY2UiLCJ2bm9kZSIsIm51bWJlckNvbXBvbmVudCIsIk51bWJlciIsImZvcm1hdCIsImFjYyIsImluY2x1ZGVzIiwicGFydHMiLCJfbnRwIiwibWFwIiwicGFydCIsInNsb3QiLCJzY29wZWRTbG90cyIsInN0YXRpY0NsYXNzIiwiYmluZCIsImVsIiwiYmluZGluZyIsImFzc2VydCIsInQiLCJ1cGRhdGUiLCJvbGRWTm9kZSIsImNvbnRleHQiLCJsb2NhbGVFcXVhbCIsIm9sZFZhbHVlIiwiX2xvY2FsZU1lc3NhZ2UiLCJnZXRMb2NhbGVNZXNzYWdlIiwidW5iaW5kIiwidm0iLCJtb2RpZmllcnMiLCJwcmVzZXJ2ZSIsInRleHRDb250ZW50IiwiX3Z0IiwiX2xvY2FsZSIsInJlZiQxIiwicmVmJDIiLCJwYXJzZVZhbHVlIiwidGMiLCJtYWtlUGFyYW1zIiwicHVzaCIsImluc3RhbGwiLCJfVnVlIiwiaW5zdGFsbGVkIiwidmVyc2lvbiIsInNwbGl0IiwiZGlyZWN0aXZlIiwiY29tcG9uZW50Iiwic3RyYXRzIiwiY29uZmlnIiwib3B0aW9uTWVyZ2VTdHJhdGVnaWVzIiwicGFyZW50VmFsIiwiY2hpbGRWYWwiLCJCYXNlRm9ybWF0dGVyIiwiX2NhY2hlcyIsImNyZWF0ZSIsImludGVycG9sYXRlIiwibWVzc2FnZSIsInRva2VucyIsImNvbXBpbGUiLCJSRV9UT0tFTl9MSVNUX1ZBTFVFIiwiUkVfVE9LRU5fTkFNRURfVkFMVUUiLCJwb3NpdGlvbiIsImNoYXIiLCJzdWIiLCJpc0Nsb3NlZCIsInRlc3QiLCJjb21waWxlZCIsIm1vZGUiLCJ0b2tlbiIsInBhcnNlSW50IiwiQVBQRU5EIiwiUFVTSCIsIklOQ19TVUJfUEFUSF9ERVBUSCIsIlBVU0hfU1VCX1BBVEgiLCJCRUZPUkVfUEFUSCIsIklOX1BBVEgiLCJCRUZPUkVfSURFTlQiLCJJTl9JREVOVCIsIklOX1NVQl9QQVRIIiwiSU5fU0lOR0xFX1FVT1RFIiwiSU5fRE9VQkxFX1FVT1RFIiwiQUZURVJfUEFUSCIsIkVSUk9SIiwicGF0aFN0YXRlTWFjaGluZSIsImxpdGVyYWxWYWx1ZVJFIiwiaXNMaXRlcmFsIiwiZXhwIiwic3RyaXBRdW90ZXMiLCJzdHIiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJnZXRQYXRoQ2hhclR5cGUiLCJjaCIsImNvZGUiLCJmb3JtYXRTdWJQYXRoIiwidHJpbW1lZCIsImNoYXJBdCIsImlzTmFOIiwicGFyc2UkMSIsInN1YlBhdGhEZXB0aCIsImMiLCJuZXdDaGFyIiwidHJhbnNpdGlvbiIsImFjdGlvbiIsInR5cGVNYXAiLCJhY3Rpb25zIiwibWF5YmVVbmVzY2FwZVF1b3RlIiwibmV4dENoYXIiLCJJMThuUGF0aCIsIl9jYWNoZSIsInBhcnNlUGF0aCIsImhpdCIsImdldFBhdGhWYWx1ZSIsInBhdGhzIiwibGFzdCIsImh0bWxUYWdNYXRjaGVyIiwibGlua0tleU1hdGNoZXIiLCJsaW5rS2V5UHJlZml4TWF0Y2hlciIsImJyYWNrZXRzTWF0Y2hlciIsImRlZmF1bHRNb2RpZmllcnMiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZGVmYXVsdEZvcm1hdHRlciIsInRoaXMkMSIsIndpbmRvdyIsImRhdGVUaW1lRm9ybWF0cyIsIm51bWJlckZvcm1hdHMiLCJfdm0iLCJfZm9ybWF0dGVyIiwiX21vZGlmaWVycyIsIl9taXNzaW5nIiwibWlzc2luZyIsIl9yb290IiwiX3N5bmMiLCJfZmFsbGJhY2tSb290IiwiZmFsbGJhY2tSb290IiwiX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMiLCJfc2lsZW50VHJhbnNsYXRpb25XYXJuIiwiX3NpbGVudEZhbGxiYWNrV2FybiIsIl9kYXRlVGltZUZvcm1hdHRlcnMiLCJfbnVtYmVyRm9ybWF0dGVycyIsIl9wYXRoIiwiX2RhdGFMaXN0ZW5lcnMiLCJfcHJlc2VydmVEaXJlY3RpdmVDb250ZW50IiwiX3dhcm5IdG1sSW5NZXNzYWdlIiwid2Fybkh0bWxJbk1lc3NhZ2UiLCJfZXhpc3QiLCJfY2hlY2tMb2NhbGVNZXNzYWdlIiwiX2luaXRWTSIsInByb3RvdHlwZUFjY2Vzc29ycyIsImNvbmZpZ3VyYWJsZSIsImF2YWlsYWJsZUxvY2FsZXMiLCJsZXZlbCIsImZuIiwicG9wIiwicmV0Iiwiam9pbiIsInNpbGVudCIsIiRkZXN0cm95IiwiJHdhdGNoIiwibmV4dFRpY2siLCIkZm9yY2VVcGRhdGUiLCJkZWVwIiwiJHNldCIsImltbWVkaWF0ZSIsIl9nZXREYXRlVGltZUZvcm1hdHMiLCJfZ2V0TnVtYmVyRm9ybWF0cyIsInNvcnQiLCJzZXQiLCJmYWxsYmFjayIsImhhbmRsZXIiLCJvcmdMZXZlbCIsIl93YXJuRGVmYXVsdCIsInJlc3VsdCIsIm1pc3NpbmdSZXQiLCJfaXNTaWxlbnRUcmFuc2xhdGlvbldhcm4iLCJwYXJzZWRBcmdzIiwiX3JlbmRlciIsIl9pc0ZhbGxiYWNrUm9vdCIsIl9pc1NpbGVudEZhbGxiYWNrV2FybiIsIlJlZ0V4cCIsIl9pc1NpbGVudEZhbGxiYWNrIiwiX2ludGVycG9sYXRlIiwiaG9zdCIsImludGVycG9sYXRlTW9kZSIsInZpc2l0ZWRMaW5rU3RhY2siLCJwYXRoUmV0IiwiX2xpbmsiLCJtYXRjaGVzIiwibWF0Y2giLCJpZHgiLCJsaW5rIiwibGlua0tleVByZWZpeE1hdGNoZXMiLCJsaW5rUHJlZml4IiwiZm9ybWF0dGVyTmFtZSIsImxpbmtQbGFjZWhvbGRlciIsInJlcGxhY2UiLCJyZXZlcnNlIiwidHJhbnNsYXRlZCIsIkVycm9yIiwiX3RyYW5zbGF0ZSIsInJlcyIsIl9pIiwicHJlZGVmaW5lZCIsImZldGNoQ2hvaWNlIiwiY2hvaWNlcyIsImdldENob2ljZUluZGV4IiwiY2hvaWNlc0xlbmd0aCIsImRlZmF1bHRJbXBsIiwiX2Nob2ljZSIsIl9jaG9pY2VzTGVuZ3RoIiwiTWF0aCIsImFicyIsIm1pbiIsInRlIiwic2V0TG9jYWxlTWVzc2FnZSIsImdldERhdGVUaW1lRm9ybWF0Iiwic2V0RGF0ZVRpbWVGb3JtYXQiLCJtZXJnZURhdGVUaW1lRm9ybWF0IiwiX2xvY2FsaXplRGF0ZVRpbWUiLCJmb3JtYXRzIiwiaWQiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJfZCIsImF2YWlsYWJpbGl0aWVzIiwiZGF0ZVRpbWVGb3JtYXQiLCJnZXROdW1iZXJGb3JtYXQiLCJzZXROdW1iZXJGb3JtYXQiLCJtZXJnZU51bWJlckZvcm1hdCIsIl9nZXROdW1iZXJGb3JtYXR0ZXIiLCJOdW1iZXJGb3JtYXQiLCJfbiIsIm51bWJlckZvcm1hdCIsIm5mIiwiZm9ybWF0VG9QYXJ0cyIsImRlZmluZVByb3BlcnRpZXMiLCJpbnRsRGVmaW5lZCJdLCJtYXBwaW5ncyI6InFJQUFBOzs7OztBQUtBOztBQUVBOzs7O0FBSUEsSUFBSUEsZ0JBQWdCLEdBQUc7QUFDckIsT0FEcUI7QUFFckIsVUFGcUI7QUFHckIsaUJBSHFCO0FBSXJCLGFBSnFCO0FBS3JCLHNCQUxxQjtBQU1yQix1QkFOcUI7QUFPckIsdUJBUHFCO0FBUXJCLDBCQVJxQjtBQVNyQiwwQkFUcUI7QUFVckIsZUFWcUI7QUFXckIsZUFYcUIsQ0FBdkI7OztBQWNBOzs7O0FBSUEsU0FBU0MsSUFBVCxDQUFlQyxHQUFmLEVBQW9CQyxHQUFwQixFQUF5QjtBQUN2QixNQUFJLE9BQU9DLE9BQVAsS0FBbUIsV0FBdkIsRUFBb0M7QUFDbENBLFdBQU8sQ0FBQ0gsSUFBUixPQUFhLGdCQUFnQkMsR0FBN0I7QUFDQTtBQUNBLFFBQUlDLEdBQUosRUFBUztBQUNQQyxhQUFPLENBQUNILElBQVIsT0FBYUUsR0FBRyxDQUFDRSxLQUFqQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTQyxLQUFULENBQWdCSixHQUFoQixFQUFxQkMsR0FBckIsRUFBMEI7QUFDeEIsTUFBSSxPQUFPQyxPQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDQSxXQUFPLENBQUNFLEtBQVIsT0FBYyxnQkFBZ0JKLEdBQTlCO0FBQ0E7QUFDQSxRQUFJQyxHQUFKLEVBQVM7QUFDUEMsYUFBTyxDQUFDRSxLQUFSLE9BQWNILEdBQUcsQ0FBQ0UsS0FBbEI7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBU0UsUUFBVCxDQUFtQkMsR0FBbkIsRUFBd0I7QUFDdEIsU0FBT0EsR0FBRyxLQUFLLElBQVIsSUFBZ0IsT0FBT0EsR0FBUCxLQUFlLFFBQXRDO0FBQ0Q7O0FBRUQsSUFBSUMs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IjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogdnVlLWkxOG4gdjguMTUuMSBcbiAqIChjKSAyMDE5IGthenV5YSBrYXdhZ3VjaGlcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuLyogICovXG5cbi8qKlxuICogY29uc3RhbnRzXG4gKi9cblxudmFyIG51bWJlckZvcm1hdEtleXMgPSBbXG4gICdzdHlsZScsXG4gICdjdXJyZW5jeScsXG4gICdjdXJyZW5jeURpc3BsYXknLFxuICAndXNlR3JvdXBpbmcnLFxuICAnbWluaW11bUludGVnZXJEaWdpdHMnLFxuICAnbWluaW11bUZyYWN0aW9uRGlnaXRzJyxcbiAgJ21heGltdW1GcmFjdGlvbkRpZ2l0cycsXG4gICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnLFxuICAnbWF4aW11bVNpZ25pZmljYW50RGlnaXRzJyxcbiAgJ2xvY2FsZU1hdGNoZXInLFxuICAnZm9ybWF0TWF0Y2hlcidcbl07XG5cbi8qKlxuICogdXRpbGl0aWVzXG4gKi9cblxuZnVuY3Rpb24gd2FybiAobXNnLCBlcnIpIHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUud2FybignW3Z1ZS1pMThuXSAnICsgbXNnKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXJyb3IgKG1zZywgZXJyKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVlLWkxOG5dICcgKyBtc2cpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgT0JKRUNUX1NUUklORyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09IE9CSkVDVF9TVFJJTkdcbn1cblxuZnVuY3Rpb24gaXNOdWxsICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MgKCkge1xuICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHZhciBsb2NhbGUgPSBudWxsO1xuICB2YXIgcGFyYW1zID0gbnVsbDtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKGlzT2JqZWN0KGFyZ3NbMF0pIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgIHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxvY2FsZSA9IGFyZ3NbMF07XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1swXTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzT2JqZWN0KGFyZ3NbMV0pIHx8IEFycmF5LmlzQXJyYXkoYXJnc1sxXSkpIHtcbiAgICAgIHBhcmFtcyA9IGFyZ3NbMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbG9jYWxlOiBsb2NhbGUsIHBhcmFtczogcGFyYW1zIH1cbn1cblxuZnVuY3Rpb24gbG9vc2VDbG9uZSAob2JqKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXG59XG5cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuZnVuY3Rpb24gbWVyZ2UgKHRhcmdldCkge1xuICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHMkMVtpXTtcbiAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgICB2YXIga2V5ID0gKHZvaWQgMCk7XG4gICAgICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc093bihzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3Qoc291cmNlW2tleV0pKSB7XG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IG1lcmdlKG91dHB1dFtrZXldLCBzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXRcbn1cblxuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgICAgcmV0dXJuIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChhW2tleV0sIGJba2V5XSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XG4gICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGV4dGVuZCAoVnVlKSB7XG4gIGlmICghVnVlLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnJGkxOG4nKSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpMThuJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5faTE4biB9XG4gICAgfSk7XG4gIH1cblxuICBWdWUucHJvdG90eXBlLiR0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICB2YXIgaTE4biA9IHRoaXMuJGkxOG47XG4gICAgcmV0dXJuIGkxOG4uX3QuYXBwbHkoaTE4biwgWyBrZXksIGkxOG4ubG9jYWxlLCBpMThuLl9nZXRNZXNzYWdlcygpLCB0aGlzIF0uY29uY2F0KCB2YWx1ZXMgKSlcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiR0YyA9IGZ1bmN0aW9uIChrZXksIGNob2ljZSkge1xuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cbiAgICB2YXIgaTE4biA9IHRoaXMuJGkxOG47XG4gICAgcmV0dXJuIGkxOG4uX3RjLmFwcGx5KGkxOG4sIFsga2V5LCBpMThuLmxvY2FsZSwgaTE4bi5fZ2V0TWVzc2FnZXMoKSwgdGhpcywgY2hvaWNlIF0uY29uY2F0KCB2YWx1ZXMgKSlcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiR0ZSA9IGZ1bmN0aW9uIChrZXksIGxvY2FsZSkge1xuICAgIHZhciBpMThuID0gdGhpcy4kaTE4bjtcbiAgICByZXR1cm4gaTE4bi5fdGUoa2V5LCBpMThuLmxvY2FsZSwgaTE4bi5fZ2V0TWVzc2FnZXMoKSwgbG9jYWxlKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuICAgIHJldHVybiAocmVmID0gdGhpcy4kaTE4bikuZC5hcHBseShyZWYsIFsgdmFsdWUgXS5jb25jYXQoIGFyZ3MgKSlcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcbiAgICByZXR1cm4gKHJlZiA9IHRoaXMuJGkxOG4pLm4uYXBwbHkocmVmLCBbIHZhbHVlIF0uY29uY2F0KCBhcmdzICkpXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgbWl4aW4gPSB7XG4gIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgb3B0aW9ucy5pMThuID0gb3B0aW9ucy5pMThuIHx8IChvcHRpb25zLl9faTE4biA/IHt9IDogbnVsbCk7XG5cbiAgICBpZiAob3B0aW9ucy5pMThuKSB7XG4gICAgICBpZiAob3B0aW9ucy5pMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgICAvLyBpbml0IGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrc1xuICAgICAgICBpZiAob3B0aW9ucy5fX2kxOG4pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZU1lc3NhZ2VzID0ge307XG4gICAgICAgICAgICBvcHRpb25zLl9faTE4bi5mb3JFYWNoKGZ1bmN0aW9uIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgICBsb2NhbGVNZXNzYWdlcyA9IG1lcmdlKGxvY2FsZU1lc3NhZ2VzLCBKU09OLnBhcnNlKHJlc291cmNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGxvY2FsZU1lc3NhZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5pMThuLm1lcmdlTG9jYWxlTWVzc2FnZShsb2NhbGUsIGxvY2FsZU1lc3NhZ2VzW2xvY2FsZV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoXCJDYW5ub3QgcGFyc2UgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzLlwiLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgICAgICAgdGhpcy5faTE4bldhdGNoZXIgPSB0aGlzLl9pMThuLndhdGNoSTE4bkRhdGEoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChvcHRpb25zLmkxOG4pKSB7XG4gICAgICAgIC8vIGNvbXBvbmVudCBsb2NhbCBpMThuXG4gICAgICAgIGlmICh0aGlzLiRyb290ICYmIHRoaXMuJHJvb3QuJGkxOG4gJiYgdGhpcy4kcm9vdC4kaTE4biBpbnN0YW5jZW9mIFZ1ZUkxOG4pIHtcbiAgICAgICAgICBvcHRpb25zLmkxOG4ucm9vdCA9IHRoaXMuJHJvb3Q7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLmZvcm1hdHRlciA9IHRoaXMuJHJvb3QuJGkxOG4uZm9ybWF0dGVyO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mYWxsYmFja0xvY2FsZSA9IHRoaXMuJHJvb3QuJGkxOG4uZmFsbGJhY2tMb2NhbGU7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLmZvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPSB0aGlzLiRyb290LiRpMThuLmZvcm1hdEZhbGxiYWNrTWVzc2FnZXM7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnNpbGVudFRyYW5zbGF0aW9uV2FybiA9IHRoaXMuJHJvb3QuJGkxOG4uc2lsZW50VHJhbnNsYXRpb25XYXJuO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5zaWxlbnRGYWxsYmFja1dhcm4gPSB0aGlzLiRyb290LiRpMThuLnNpbGVudEZhbGxiYWNrV2FybjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4ucGx1cmFsaXphdGlvblJ1bGVzID0gdGhpcy4kcm9vdC4kaTE4bi5wbHVyYWxpemF0aW9uUnVsZXM7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudCA9IHRoaXMuJHJvb3QuJGkxOG4ucHJlc2VydmVEaXJlY3RpdmVDb250ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5pdCBsb2NhbGUgbWVzc2FnZXMgdmlhIGN1c3RvbSBibG9ja3NcbiAgICAgICAgaWYgKG9wdGlvbnMuX19pMThuKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBsb2NhbGVNZXNzYWdlcyQxID0ge307XG4gICAgICAgICAgICBvcHRpb25zLl9faTE4bi5mb3JFYWNoKGZ1bmN0aW9uIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgICBsb2NhbGVNZXNzYWdlcyQxID0gbWVyZ2UobG9jYWxlTWVzc2FnZXMkMSwgSlNPTi5wYXJzZShyZXNvdXJjZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvcHRpb25zLmkxOG4ubWVzc2FnZXMgPSBsb2NhbGVNZXNzYWdlcyQxO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIHdhcm4oXCJDYW5ub3QgcGFyc2UgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzLlwiLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVmID0gb3B0aW9ucy5pMThuO1xuICAgICAgICB2YXIgc2hhcmVkTWVzc2FnZXMgPSByZWYuc2hhcmVkTWVzc2FnZXM7XG4gICAgICAgIGlmIChzaGFyZWRNZXNzYWdlcyAmJiBpc1BsYWluT2JqZWN0KHNoYXJlZE1lc3NhZ2VzKSkge1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5tZXNzYWdlcyA9IG1lcmdlKG9wdGlvbnMuaTE4bi5tZXNzYWdlcywgc2hhcmVkTWVzc2FnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faTE4biA9IG5ldyBWdWVJMThuKG9wdGlvbnMuaTE4bik7XG4gICAgICAgIHRoaXMuX2kxOG5XYXRjaGVyID0gdGhpcy5faTE4bi53YXRjaEkxOG5EYXRhKCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaTE4bi5zeW5jID09PSB1bmRlZmluZWQgfHwgISFvcHRpb25zLmkxOG4uc3luYykge1xuICAgICAgICAgIHRoaXMuX2xvY2FsZVdhdGNoZXIgPSB0aGlzLiRpMThuLndhdGNoTG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcIkNhbm5vdCBiZSBpbnRlcnByZXRlZCAnaTE4bicgb3B0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAvLyByb290IGkxOG5cbiAgICAgIHRoaXMuX2kxOG4gPSB0aGlzLiRyb290LiRpMThuO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJlbnQgJiYgb3B0aW9ucy5wYXJlbnQuJGkxOG4gJiYgb3B0aW9ucy5wYXJlbnQuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAvLyBwYXJlbnQgaTE4blxuICAgICAgdGhpcy5faTE4biA9IG9wdGlvbnMucGFyZW50LiRpMThuO1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVNb3VudDogZnVuY3Rpb24gYmVmb3JlTW91bnQgKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICBvcHRpb25zLmkxOG4gPSBvcHRpb25zLmkxOG4gfHwgKG9wdGlvbnMuX19pMThuID8ge30gOiBudWxsKTtcblxuICAgIGlmIChvcHRpb25zLmkxOG4pIHtcbiAgICAgIGlmIChvcHRpb25zLmkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAgIC8vIGluaXQgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzXG4gICAgICAgIHRoaXMuX2kxOG4uc3Vic2NyaWJlRGF0YUNoYW5naW5nKHRoaXMpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmluZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy5pMThuKSkge1xuICAgICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKFwiQ2Fubm90IGJlIGludGVycHJldGVkICdpMThuJyBvcHRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLiRyb290ICYmIHRoaXMuJHJvb3QuJGkxOG4gJiYgdGhpcy4kcm9vdC4kaTE4biBpbnN0YW5jZW9mIFZ1ZUkxOG4pIHtcbiAgICAgIHRoaXMuX2kxOG4uc3Vic2NyaWJlRGF0YUNoYW5naW5nKHRoaXMpO1xuICAgICAgdGhpcy5fc3Vic2NyaWJpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJlbnQgJiYgb3B0aW9ucy5wYXJlbnQuJGkxOG4gJiYgb3B0aW9ucy5wYXJlbnQuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSAoKSB7XG4gICAgaWYgKCF0aGlzLl9pMThuKSB7IHJldHVybiB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuX3N1YnNjcmliaW5nKSB7XG4gICAgICAgIHNlbGYuX2kxOG4udW5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcoc2VsZik7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9zdWJzY3JpYmluZztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuX2kxOG5XYXRjaGVyKSB7XG4gICAgICAgIHNlbGYuX2kxOG5XYXRjaGVyKCk7XG4gICAgICAgIHNlbGYuX2kxOG4uZGVzdHJveVZNKCk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9pMThuV2F0Y2hlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuX2xvY2FsZVdhdGNoZXIpIHtcbiAgICAgICAgc2VsZi5fbG9jYWxlV2F0Y2hlcigpO1xuICAgICAgICBkZWxldGUgc2VsZi5fbG9jYWxlV2F0Y2hlcjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5faTE4biA9IG51bGw7XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgaW50ZXJwb2xhdGlvbkNvbXBvbmVudCA9IHtcbiAgbmFtZTogJ2kxOG4nLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICBwcm9wczoge1xuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBwYXRoOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgbG9jYWxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9LFxuICAgIHBsYWNlczoge1xuICAgICAgdHlwZTogW0FycmF5LCBPYmplY3RdXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCwgcmVmKSB7XG4gICAgdmFyIGRhdGEgPSByZWYuZGF0YTtcbiAgICB2YXIgcGFyZW50ID0gcmVmLnBhcmVudDtcbiAgICB2YXIgcHJvcHMgPSByZWYucHJvcHM7XG4gICAgdmFyIHNsb3RzID0gcmVmLnNsb3RzO1xuXG4gICAgdmFyICRpMThuID0gcGFyZW50LiRpMThuO1xuICAgIGlmICghJGkxOG4pIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ0Nhbm5vdCBmaW5kIFZ1ZUkxOG4gaW5zdGFuY2UhJyk7XG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgcGF0aCA9IHByb3BzLnBhdGg7XG4gICAgdmFyIGxvY2FsZSA9IHByb3BzLmxvY2FsZTtcbiAgICB2YXIgcGxhY2VzID0gcHJvcHMucGxhY2VzO1xuICAgIHZhciBwYXJhbXMgPSBzbG90cygpO1xuICAgIHZhciBjaGlsZHJlbiA9ICRpMThuLmkoXG4gICAgICBwYXRoLFxuICAgICAgbG9jYWxlLFxuICAgICAgb25seUhhc0RlZmF1bHRQbGFjZShwYXJhbXMpIHx8IHBsYWNlc1xuICAgICAgICA/IHVzZUxlZ2FjeVBsYWNlcyhwYXJhbXMuZGVmYXVsdCwgcGxhY2VzKVxuICAgICAgICA6IHBhcmFtc1xuICAgICk7XG5cbiAgICB2YXIgdGFnID0gcHJvcHMudGFnIHx8ICdzcGFuJztcbiAgICByZXR1cm4gdGFnID8gaCh0YWcsIGRhdGEsIGNoaWxkcmVuKSA6IGNoaWxkcmVuXG4gIH1cbn07XG5cbmZ1bmN0aW9uIG9ubHlIYXNEZWZhdWx0UGxhY2UgKHBhcmFtcykge1xuICB2YXIgcHJvcDtcbiAgZm9yIChwcm9wIGluIHBhcmFtcykge1xuICAgIGlmIChwcm9wICE9PSAnZGVmYXVsdCcpIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gQm9vbGVhbihwcm9wKVxufVxuXG5mdW5jdGlvbiB1c2VMZWdhY3lQbGFjZXMgKGNoaWxkcmVuLCBwbGFjZXMpIHtcbiAgdmFyIHBhcmFtcyA9IHBsYWNlcyA/IGNyZWF0ZVBhcmFtc0Zyb21QbGFjZXMocGxhY2VzKSA6IHt9O1xuXG4gIGlmICghY2hpbGRyZW4pIHsgcmV0dXJuIHBhcmFtcyB9XG5cbiAgLy8gRmlsdGVyIGVtcHR5IHRleHQgbm9kZXNcbiAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLnRhZyB8fCBjaGlsZC50ZXh0LnRyaW0oKSAhPT0gJydcbiAgfSk7XG5cbiAgdmFyIGV2ZXJ5UGxhY2UgPSBjaGlsZHJlbi5ldmVyeSh2bm9kZUhhc1BsYWNlQXR0cmlidXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXZlcnlQbGFjZSkge1xuICAgIHdhcm4oJ2BwbGFjZWAgYXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiBQbGVhc2Ugc3dpdGNoIHRvIFZ1ZSBzbG90cy4nKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbi5yZWR1Y2UoXG4gICAgZXZlcnlQbGFjZSA/IGFzc2lnbkNoaWxkUGxhY2UgOiBhc3NpZ25DaGlsZEluZGV4LFxuICAgIHBhcmFtc1xuICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBhcmFtc0Zyb21QbGFjZXMgKHBsYWNlcykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oJ2BwbGFjZXNgIHByb3AgaXMgZGVwcmVjYXRlZCBpbiBuZXh0IG1ham9yIHZlcnNpb24uIFBsZWFzZSBzd2l0Y2ggdG8gVnVlIHNsb3RzLicpO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGxhY2VzKVxuICAgID8gcGxhY2VzLnJlZHVjZShhc3NpZ25DaGlsZEluZGV4LCB7fSlcbiAgICA6IE9iamVjdC5hc3NpZ24oe30sIHBsYWNlcylcbn1cblxuZnVuY3Rpb24gYXNzaWduQ2hpbGRQbGFjZSAocGFyYW1zLCBjaGlsZCkge1xuICBpZiAoY2hpbGQuZGF0YSAmJiBjaGlsZC5kYXRhLmF0dHJzICYmIGNoaWxkLmRhdGEuYXR0cnMucGxhY2UpIHtcbiAgICBwYXJhbXNbY2hpbGQuZGF0YS5hdHRycy5wbGFjZV0gPSBjaGlsZDtcbiAgfVxuICByZXR1cm4gcGFyYW1zXG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNoaWxkSW5kZXggKHBhcmFtcywgY2hpbGQsIGluZGV4KSB7XG4gIHBhcmFtc1tpbmRleF0gPSBjaGlsZDtcbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiB2bm9kZUhhc1BsYWNlQXR0cmlidXRlICh2bm9kZSkge1xuICByZXR1cm4gQm9vbGVhbih2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEuYXR0cnMgJiYgdm5vZGUuZGF0YS5hdHRycy5wbGFjZSlcbn1cblxuLyogICovXG5cbnZhciBudW1iZXJDb21wb25lbnQgPSB7XG4gIG5hbWU6ICdpMThuLW4nLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICBwcm9wczoge1xuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3NwYW4nXG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XVxuICAgIH0sXG4gICAgbG9jYWxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoLCByZWYpIHtcbiAgICB2YXIgcHJvcHMgPSByZWYucHJvcHM7XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIGRhdGEgPSByZWYuZGF0YTtcblxuICAgIHZhciBpMThuID0gcGFyZW50LiRpMThuO1xuXG4gICAgaWYgKCFpMThuKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKCdDYW5ub3QgZmluZCBWdWVJMThuIGluc3RhbmNlIScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgb3B0aW9ucyA9IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmZvcm1hdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGtleSA9IHByb3BzLmZvcm1hdDtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHByb3BzLmZvcm1hdCkpIHtcbiAgICAgIGlmIChwcm9wcy5mb3JtYXQua2V5KSB7XG4gICAgICAgIGtleSA9IHByb3BzLmZvcm1hdC5rZXk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbHRlciBvdXQgbnVtYmVyIGZvcm1hdCBvcHRpb25zIG9ubHlcbiAgICAgIG9wdGlvbnMgPSBPYmplY3Qua2V5cyhwcm9wcy5mb3JtYXQpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwcm9wKSB7XG4gICAgICAgIHZhciBvYmo7XG5cbiAgICAgICAgaWYgKG51bWJlckZvcm1hdEtleXMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYWNjLCAoIG9iaiA9IHt9LCBvYmpbcHJvcF0gPSBwcm9wcy5mb3JtYXRbcHJvcF0sIG9iaiApKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIG51bGwpO1xuICAgIH1cblxuICAgIHZhciBsb2NhbGUgPSBwcm9wcy5sb2NhbGUgfHwgaTE4bi5sb2NhbGU7XG4gICAgdmFyIHBhcnRzID0gaTE4bi5fbnRwKHByb3BzLnZhbHVlLCBsb2NhbGUsIGtleSwgb3B0aW9ucyk7XG5cbiAgICB2YXIgdmFsdWVzID0gcGFydHMubWFwKGZ1bmN0aW9uIChwYXJ0LCBpbmRleCkge1xuICAgICAgdmFyIG9iajtcblxuICAgICAgdmFyIHNsb3QgPSBkYXRhLnNjb3BlZFNsb3RzICYmIGRhdGEuc2NvcGVkU2xvdHNbcGFydC50eXBlXTtcbiAgICAgIHJldHVybiBzbG90ID8gc2xvdCgoIG9iaiA9IHt9LCBvYmpbcGFydC50eXBlXSA9IHBhcnQudmFsdWUsIG9iai5pbmRleCA9IGluZGV4LCBvYmoucGFydHMgPSBwYXJ0cywgb2JqICkpIDogcGFydC52YWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGgocHJvcHMudGFnLCB7XG4gICAgICBhdHRyczogZGF0YS5hdHRycyxcbiAgICAgICdjbGFzcyc6IGRhdGFbJ2NsYXNzJ10sXG4gICAgICBzdGF0aWNDbGFzczogZGF0YS5zdGF0aWNDbGFzc1xuICAgIH0sIHZhbHVlcylcbiAgfVxufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICBpZiAoIWFzc2VydChlbCwgdm5vZGUpKSB7IHJldHVybiB9XG5cbiAgdChlbCwgYmluZGluZywgdm5vZGUpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVk5vZGUpIHtcbiAgaWYgKCFhc3NlcnQoZWwsIHZub2RlKSkgeyByZXR1cm4gfVxuXG4gIHZhciBpMThuID0gdm5vZGUuY29udGV4dC4kaTE4bjtcbiAgaWYgKGxvY2FsZUVxdWFsKGVsLCB2bm9kZSkgJiZcbiAgICAobG9vc2VFcXVhbChiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLm9sZFZhbHVlKSAmJlxuICAgICBsb29zZUVxdWFsKGVsLl9sb2NhbGVNZXNzYWdlLCBpMThuLmdldExvY2FsZU1lc3NhZ2UoaTE4bi5sb2NhbGUpKSkpIHsgcmV0dXJuIH1cblxuICB0KGVsLCBiaW5kaW5nLCB2bm9kZSk7XG59XG5cbmZ1bmN0aW9uIHVuYmluZCAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWTm9kZSkge1xuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICBpZiAoIXZtKSB7XG4gICAgd2FybignVnVlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0cyBpbiBWTm9kZSBjb250ZXh0Jyk7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgaTE4biA9IHZub2RlLmNvbnRleHQuJGkxOG4gfHwge307XG4gIGlmICghYmluZGluZy5tb2RpZmllcnMucHJlc2VydmUgJiYgIWkxOG4ucHJlc2VydmVEaXJlY3RpdmVDb250ZW50KSB7XG4gICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgfVxuICBlbC5fdnQgPSB1bmRlZmluZWQ7XG4gIGRlbGV0ZSBlbFsnX3Z0J107XG4gIGVsLl9sb2NhbGUgPSB1bmRlZmluZWQ7XG4gIGRlbGV0ZSBlbFsnX2xvY2FsZSddO1xuICBlbC5fbG9jYWxlTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgZGVsZXRlIGVsWydfbG9jYWxlTWVzc2FnZSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnQgKGVsLCB2bm9kZSkge1xuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICBpZiAoIXZtKSB7XG4gICAgd2FybignVnVlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0cyBpbiBWTm9kZSBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoIXZtLiRpMThuKSB7XG4gICAgd2FybignVnVlSTE4biBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdHMgaW4gVnVlIGluc3RhbmNlJyk7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBsb2NhbGVFcXVhbCAoZWwsIHZub2RlKSB7XG4gIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gIHJldHVybiBlbC5fbG9jYWxlID09PSB2bS4kaTE4bi5sb2NhbGVcbn1cblxuZnVuY3Rpb24gdCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gIHZhciByZWYkMSwgcmVmJDI7XG5cbiAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcblxuICB2YXIgcmVmID0gcGFyc2VWYWx1ZSh2YWx1ZSk7XG4gIHZhciBwYXRoID0gcmVmLnBhdGg7XG4gIHZhciBsb2NhbGUgPSByZWYubG9jYWxlO1xuICB2YXIgYXJncyA9IHJlZi5hcmdzO1xuICB2YXIgY2hvaWNlID0gcmVmLmNob2ljZTtcbiAgaWYgKCFwYXRoICYmICFsb2NhbGUgJiYgIWFyZ3MpIHtcbiAgICB3YXJuKCd2YWx1ZSB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHdhcm4oJ2BwYXRoYCBpcyByZXF1aXJlZCBpbiB2LXQgZGlyZWN0aXZlJyk7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICBpZiAoY2hvaWNlKSB7XG4gICAgZWwuX3Z0ID0gZWwudGV4dENvbnRlbnQgPSAocmVmJDEgPSB2bS4kaTE4bikudGMuYXBwbHkocmVmJDEsIFsgcGF0aCwgY2hvaWNlIF0uY29uY2F0KCBtYWtlUGFyYW1zKGxvY2FsZSwgYXJncykgKSk7XG4gIH0gZWxzZSB7XG4gICAgZWwuX3Z0ID0gZWwudGV4dENvbnRlbnQgPSAocmVmJDIgPSB2bS4kaTE4bikudC5hcHBseShyZWYkMiwgWyBwYXRoIF0uY29uY2F0KCBtYWtlUGFyYW1zKGxvY2FsZSwgYXJncykgKSk7XG4gIH1cbiAgZWwuX2xvY2FsZSA9IHZtLiRpMThuLmxvY2FsZTtcbiAgZWwuX2xvY2FsZU1lc3NhZ2UgPSB2bS4kaTE4bi5nZXRMb2NhbGVNZXNzYWdlKHZtLiRpMThuLmxvY2FsZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUgKHZhbHVlKSB7XG4gIHZhciBwYXRoO1xuICB2YXIgbG9jYWxlO1xuICB2YXIgYXJncztcbiAgdmFyIGNob2ljZTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHBhdGggPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHBhdGggPSB2YWx1ZS5wYXRoO1xuICAgIGxvY2FsZSA9IHZhbHVlLmxvY2FsZTtcbiAgICBhcmdzID0gdmFsdWUuYXJncztcbiAgICBjaG9pY2UgPSB2YWx1ZS5jaG9pY2U7XG4gIH1cblxuICByZXR1cm4geyBwYXRoOiBwYXRoLCBsb2NhbGU6IGxvY2FsZSwgYXJnczogYXJncywgY2hvaWNlOiBjaG9pY2UgfVxufVxuXG5mdW5jdGlvbiBtYWtlUGFyYW1zIChsb2NhbGUsIGFyZ3MpIHtcbiAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gIGxvY2FsZSAmJiBwYXJhbXMucHVzaChsb2NhbGUpO1xuICBpZiAoYXJncyAmJiAoQXJyYXkuaXNBcnJheShhcmdzKSB8fCBpc1BsYWluT2JqZWN0KGFyZ3MpKSkge1xuICAgIHBhcmFtcy5wdXNoKGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtc1xufVxuXG52YXIgVnVlO1xuXG5mdW5jdGlvbiBpbnN0YWxsIChfVnVlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnN0YWxsLmluc3RhbGxlZCAmJiBfVnVlID09PSBWdWUpIHtcbiAgICB3YXJuKCdhbHJlYWR5IGluc3RhbGxlZC4nKTtcbiAgICByZXR1cm5cbiAgfVxuICBpbnN0YWxsLmluc3RhbGxlZCA9IHRydWU7XG5cbiAgVnVlID0gX1Z1ZTtcblxuICB2YXIgdmVyc2lvbiA9IChWdWUudmVyc2lvbiAmJiBOdW1iZXIoVnVlLnZlcnNpb24uc3BsaXQoJy4nKVswXSkpIHx8IC0xO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdmVyc2lvbiA8IDIpIHtcbiAgICB3YXJuKChcInZ1ZS1pMThuIChcIiArIChpbnN0YWxsLnZlcnNpb24pICsgXCIpIG5lZWQgdG8gdXNlIFZ1ZSAyLjAgb3IgbGF0ZXIgKFZ1ZTogXCIgKyAoVnVlLnZlcnNpb24pICsgXCIpLlwiKSk7XG4gICAgcmV0dXJuXG4gIH1cblxuICBleHRlbmQoVnVlKTtcbiAgVnVlLm1peGluKG1peGluKTtcbiAgVnVlLmRpcmVjdGl2ZSgndCcsIHsgYmluZDogYmluZCwgdXBkYXRlOiB1cGRhdGUsIHVuYmluZDogdW5iaW5kIH0pO1xuICBWdWUuY29tcG9uZW50KGludGVycG9sYXRpb25Db21wb25lbnQubmFtZSwgaW50ZXJwb2xhdGlvbkNvbXBvbmVudCk7XG4gIFZ1ZS5jb21wb25lbnQobnVtYmVyQ29tcG9uZW50Lm5hbWUsIG51bWJlckNvbXBvbmVudCk7XG5cbiAgLy8gdXNlIHNpbXBsZSBtZXJnZVN0cmF0ZWdpZXMgdG8gcHJldmVudCBpMThuIGluc3RhbmNlIGxvc2UgJ19fcHJvdG9fXydcbiAgdmFyIHN0cmF0cyA9IFZ1ZS5jb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuICBzdHJhdHMuaTE4biA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICAgID8gcGFyZW50VmFsXG4gICAgICA6IGNoaWxkVmFsXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgQmFzZUZvcm1hdHRlciA9IGZ1bmN0aW9uIEJhc2VGb3JtYXR0ZXIgKCkge1xuICB0aGlzLl9jYWNoZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufTtcblxuQmFzZUZvcm1hdHRlci5wcm90b3R5cGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBpbnRlcnBvbGF0ZSAobWVzc2FnZSwgdmFsdWVzKSB7XG4gIGlmICghdmFsdWVzKSB7XG4gICAgcmV0dXJuIFttZXNzYWdlXVxuICB9XG4gIHZhciB0b2tlbnMgPSB0aGlzLl9jYWNoZXNbbWVzc2FnZV07XG4gIGlmICghdG9rZW5zKSB7XG4gICAgdG9rZW5zID0gcGFyc2UobWVzc2FnZSk7XG4gICAgdGhpcy5fY2FjaGVzW21lc3NhZ2VdID0gdG9rZW5zO1xuICB9XG4gIHJldHVybiBjb21waWxlKHRva2VucywgdmFsdWVzKVxufTtcblxuXG5cbnZhciBSRV9UT0tFTl9MSVNUX1ZBTFVFID0gL14oPzpcXGQpKy87XG52YXIgUkVfVE9LRU5fTkFNRURfVkFMVUUgPSAvXig/OlxcdykrLztcblxuZnVuY3Rpb24gcGFyc2UgKGZvcm1hdCkge1xuICB2YXIgdG9rZW5zID0gW107XG4gIHZhciBwb3NpdGlvbiA9IDA7XG5cbiAgdmFyIHRleHQgPSAnJztcbiAgd2hpbGUgKHBvc2l0aW9uIDwgZm9ybWF0Lmxlbmd0aCkge1xuICAgIHZhciBjaGFyID0gZm9ybWF0W3Bvc2l0aW9uKytdO1xuICAgIGlmIChjaGFyID09PSAneycpIHtcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdGV4dCB9KTtcbiAgICAgIH1cblxuICAgICAgdGV4dCA9ICcnO1xuICAgICAgdmFyIHN1YiA9ICcnO1xuICAgICAgY2hhciA9IGZvcm1hdFtwb3NpdGlvbisrXTtcbiAgICAgIHdoaWxlIChjaGFyICE9PSB1bmRlZmluZWQgJiYgY2hhciAhPT0gJ30nKSB7XG4gICAgICAgIHN1YiArPSBjaGFyO1xuICAgICAgICBjaGFyID0gZm9ybWF0W3Bvc2l0aW9uKytdO1xuICAgICAgfVxuICAgICAgdmFyIGlzQ2xvc2VkID0gY2hhciA9PT0gJ30nO1xuXG4gICAgICB2YXIgdHlwZSA9IFJFX1RPS0VOX0xJU1RfVkFMVUUudGVzdChzdWIpXG4gICAgICAgID8gJ2xpc3QnXG4gICAgICAgIDogaXNDbG9zZWQgJiYgUkVfVE9LRU5fTkFNRURfVkFMVUUudGVzdChzdWIpXG4gICAgICAgICAgPyAnbmFtZWQnXG4gICAgICAgICAgOiAndW5rbm93bic7XG4gICAgICB0b2tlbnMucHVzaCh7IHZhbHVlOiBzdWIsIHR5cGU6IHR5cGUgfSk7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnJScpIHtcbiAgICAgIC8vIHdoZW4gZm91bmQgcmFpbHMgaTE4biBzeW50YXgsIHNraXAgdGV4dCBjYXB0dXJlXG4gICAgICBpZiAoZm9ybWF0Wyhwb3NpdGlvbildICE9PSAneycpIHtcbiAgICAgICAgdGV4dCArPSBjaGFyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0ICs9IGNoYXI7XG4gICAgfVxuICB9XG5cbiAgdGV4dCAmJiB0b2tlbnMucHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHRleHQgfSk7XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG5mdW5jdGlvbiBjb21waWxlICh0b2tlbnMsIHZhbHVlcykge1xuICB2YXIgY29tcGlsZWQgPSBbXTtcbiAgdmFyIGluZGV4ID0gMDtcblxuICB2YXIgbW9kZSA9IEFycmF5LmlzQXJyYXkodmFsdWVzKVxuICAgID8gJ2xpc3QnXG4gICAgOiBpc09iamVjdCh2YWx1ZXMpXG4gICAgICA/ICduYW1lZCdcbiAgICAgIDogJ3Vua25vd24nO1xuICBpZiAobW9kZSA9PT0gJ3Vua25vd24nKSB7IHJldHVybiBjb21waWxlZCB9XG5cbiAgd2hpbGUgKGluZGV4IDwgdG9rZW5zLmxlbmd0aCkge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpbmRleF07XG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgY29tcGlsZWQucHVzaCh0b2tlbi52YWx1ZSk7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgY29tcGlsZWQucHVzaCh2YWx1ZXNbcGFyc2VJbnQodG9rZW4udmFsdWUsIDEwKV0pO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbmFtZWQnOlxuICAgICAgICBpZiAobW9kZSA9PT0gJ25hbWVkJykge1xuICAgICAgICAgIGNvbXBpbGVkLnB1c2goKHZhbHVlcylbdG9rZW4udmFsdWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybigoXCJUeXBlIG9mIHRva2VuICdcIiArICh0b2tlbi50eXBlKSArIFwiJyBhbmQgZm9ybWF0IG9mIHZhbHVlICdcIiArIG1vZGUgKyBcIicgZG9uJ3QgbWF0Y2ghXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXCJEZXRlY3QgJ3Vua25vd24nIHR5cGUgb2YgdG9rZW4hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGluZGV4Kys7XG4gIH1cblxuICByZXR1cm4gY29tcGlsZWRcbn1cblxuLyogICovXG5cbi8qKlxuICogIFBhdGggcGFyc2VyXG4gKiAgLSBJbnNwaXJlZDpcbiAqICAgIFZ1ZS5qcyBQYXRoIHBhcnNlclxuICovXG5cbi8vIGFjdGlvbnNcbnZhciBBUFBFTkQgPSAwO1xudmFyIFBVU0ggPSAxO1xudmFyIElOQ19TVUJfUEFUSF9ERVBUSCA9IDI7XG52YXIgUFVTSF9TVUJfUEFUSCA9IDM7XG5cbi8vIHN0YXRlc1xudmFyIEJFRk9SRV9QQVRIID0gMDtcbnZhciBJTl9QQVRIID0gMTtcbnZhciBCRUZPUkVfSURFTlQgPSAyO1xudmFyIElOX0lERU5UID0gMztcbnZhciBJTl9TVUJfUEFUSCA9IDQ7XG52YXIgSU5fU0lOR0xFX1FVT1RFID0gNTtcbnZhciBJTl9ET1VCTEVfUVVPVEUgPSA2O1xudmFyIEFGVEVSX1BBVEggPSA3O1xudmFyIEVSUk9SID0gODtcblxudmFyIHBhdGhTdGF0ZU1hY2hpbmUgPSBbXTtcblxucGF0aFN0YXRlTWFjaGluZVtCRUZPUkVfUEFUSF0gPSB7XG4gICd3cyc6IFtCRUZPUkVfUEFUSF0sXG4gICdpZGVudCc6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJ1snOiBbSU5fU1VCX1BBVEhdLFxuICAnZW9mJzogW0FGVEVSX1BBVEhdXG59O1xuXG5wYXRoU3RhdGVNYWNoaW5lW0lOX1BBVEhdID0ge1xuICAnd3MnOiBbSU5fUEFUSF0sXG4gICcuJzogW0JFRk9SRV9JREVOVF0sXG4gICdbJzogW0lOX1NVQl9QQVRIXSxcbiAgJ2VvZic6IFtBRlRFUl9QQVRIXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtCRUZPUkVfSURFTlRdID0ge1xuICAnd3MnOiBbQkVGT1JFX0lERU5UXSxcbiAgJ2lkZW50JzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnMCc6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJ251bWJlcic6IFtJTl9JREVOVCwgQVBQRU5EXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9JREVOVF0gPSB7XG4gICdpZGVudCc6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJzAnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICdudW1iZXInOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICd3cyc6IFtJTl9QQVRILCBQVVNIXSxcbiAgJy4nOiBbQkVGT1JFX0lERU5ULCBQVVNIXSxcbiAgJ1snOiBbSU5fU1VCX1BBVEgsIFBVU0hdLFxuICAnZW9mJzogW0FGVEVSX1BBVEgsIFBVU0hdXG59O1xuXG5wYXRoU3RhdGVNYWNoaW5lW0lOX1NVQl9QQVRIXSA9IHtcbiAgXCInXCI6IFtJTl9TSU5HTEVfUVVPVEUsIEFQUEVORF0sXG4gICdcIic6IFtJTl9ET1VCTEVfUVVPVEUsIEFQUEVORF0sXG4gICdbJzogW0lOX1NVQl9QQVRILCBJTkNfU1VCX1BBVEhfREVQVEhdLFxuICAnXSc6IFtJTl9QQVRILCBQVVNIX1NVQl9QQVRIXSxcbiAgJ2VvZic6IEVSUk9SLFxuICAnZWxzZSc6IFtJTl9TVUJfUEFUSCwgQVBQRU5EXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9TSU5HTEVfUVVPVEVdID0ge1xuICBcIidcIjogW0lOX1NVQl9QQVRILCBBUFBFTkRdLFxuICAnZW9mJzogRVJST1IsXG4gICdlbHNlJzogW0lOX1NJTkdMRV9RVU9URSwgQVBQRU5EXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9ET1VCTEVfUVVPVEVdID0ge1xuICAnXCInOiBbSU5fU1VCX1BBVEgsIEFQUEVORF0sXG4gICdlb2YnOiBFUlJPUixcbiAgJ2Vsc2UnOiBbSU5fRE9VQkxFX1FVT1RFLCBBUFBFTkRdXG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIGV4cHJlc3Npb24gaXMgYSBsaXRlcmFsIHZhbHVlLlxuICovXG5cbnZhciBsaXRlcmFsVmFsdWVSRSA9IC9eXFxzPyg/OnRydWV8ZmFsc2V8LT9bXFxkLl0rfCdbXiddKid8XCJbXlwiXSpcIilcXHM/JC87XG5mdW5jdGlvbiBpc0xpdGVyYWwgKGV4cCkge1xuICByZXR1cm4gbGl0ZXJhbFZhbHVlUkUudGVzdChleHApXG59XG5cbi8qKlxuICogU3RyaXAgcXVvdGVzIGZyb20gYSBzdHJpbmdcbiAqL1xuXG5mdW5jdGlvbiBzdHJpcFF1b3RlcyAoc3RyKSB7XG4gIHZhciBhID0gc3RyLmNoYXJDb2RlQXQoMCk7XG4gIHZhciBiID0gc3RyLmNoYXJDb2RlQXQoc3RyLmxlbmd0aCAtIDEpO1xuICByZXR1cm4gYSA9PT0gYiAmJiAoYSA9PT0gMHgyMiB8fCBhID09PSAweDI3KVxuICAgID8gc3RyLnNsaWNlKDEsIC0xKVxuICAgIDogc3RyXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGEgY2hhcmFjdGVyIGluIGEga2V5cGF0aC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRQYXRoQ2hhclR5cGUgKGNoKSB7XG4gIGlmIChjaCA9PT0gdW5kZWZpbmVkIHx8IGNoID09PSBudWxsKSB7IHJldHVybiAnZW9mJyB9XG5cbiAgdmFyIGNvZGUgPSBjaC5jaGFyQ29kZUF0KDApO1xuXG4gIHN3aXRjaCAoY29kZSkge1xuICAgIGNhc2UgMHg1QjogLy8gW1xuICAgIGNhc2UgMHg1RDogLy8gXVxuICAgIGNhc2UgMHgyRTogLy8gLlxuICAgIGNhc2UgMHgyMjogLy8gXCJcbiAgICBjYXNlIDB4Mjc6IC8vICdcbiAgICAgIHJldHVybiBjaFxuXG4gICAgY2FzZSAweDVGOiAvLyBfXG4gICAgY2FzZSAweDI0OiAvLyAkXG4gICAgY2FzZSAweDJEOiAvLyAtXG4gICAgICByZXR1cm4gJ2lkZW50J1xuXG4gICAgY2FzZSAweDA5OiAvLyBUYWJcbiAgICBjYXNlIDB4MEE6IC8vIE5ld2xpbmVcbiAgICBjYXNlIDB4MEQ6IC8vIFJldHVyblxuICAgIGNhc2UgMHhBMDogIC8vIE5vLWJyZWFrIHNwYWNlXG4gICAgY2FzZSAweEZFRkY6ICAvLyBCeXRlIE9yZGVyIE1hcmtcbiAgICBjYXNlIDB4MjAyODogIC8vIExpbmUgU2VwYXJhdG9yXG4gICAgY2FzZSAweDIwMjk6ICAvLyBQYXJhZ3JhcGggU2VwYXJhdG9yXG4gICAgICByZXR1cm4gJ3dzJ1xuICB9XG5cbiAgcmV0dXJuICdpZGVudCdcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBzdWJQYXRoLCByZXR1cm4gaXRzIHBsYWluIGZvcm0gaWYgaXQgaXNcbiAqIGEgbGl0ZXJhbCBzdHJpbmcgb3IgbnVtYmVyLiBPdGhlcndpc2UgcHJlcGVuZCB0aGVcbiAqIGR5bmFtaWMgaW5kaWNhdG9yICgqKS5cbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRTdWJQYXRoIChwYXRoKSB7XG4gIHZhciB0cmltbWVkID0gcGF0aC50cmltKCk7XG4gIC8vIGludmFsaWQgbGVhZGluZyAwXG4gIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJzAnICYmIGlzTmFOKHBhdGgpKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgcmV0dXJuIGlzTGl0ZXJhbCh0cmltbWVkKSA/IHN0cmlwUXVvdGVzKHRyaW1tZWQpIDogJyonICsgdHJpbW1lZFxufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHBhdGggaW50byBhbiBhcnJheSBvZiBzZWdtZW50c1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlJDEgKHBhdGgpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBtb2RlID0gQkVGT1JFX1BBVEg7XG4gIHZhciBzdWJQYXRoRGVwdGggPSAwO1xuICB2YXIgYztcbiAgdmFyIGtleTtcbiAgdmFyIG5ld0NoYXI7XG4gIHZhciB0eXBlO1xuICB2YXIgdHJhbnNpdGlvbjtcbiAgdmFyIGFjdGlvbjtcbiAgdmFyIHR5cGVNYXA7XG4gIHZhciBhY3Rpb25zID0gW107XG5cbiAgYWN0aW9uc1tQVVNIXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAga2V5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBhY3Rpb25zW0FQUEVORF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXkgPSBuZXdDaGFyO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgKz0gbmV3Q2hhcjtcbiAgICB9XG4gIH07XG5cbiAgYWN0aW9uc1tJTkNfU1VCX1BBVEhfREVQVEhdID0gZnVuY3Rpb24gKCkge1xuICAgIGFjdGlvbnNbQVBQRU5EXSgpO1xuICAgIHN1YlBhdGhEZXB0aCsrO1xuICB9O1xuXG4gIGFjdGlvbnNbUFVTSF9TVUJfUEFUSF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHN1YlBhdGhEZXB0aCA+IDApIHtcbiAgICAgIHN1YlBhdGhEZXB0aC0tO1xuICAgICAgbW9kZSA9IElOX1NVQl9QQVRIO1xuICAgICAgYWN0aW9uc1tBUFBFTkRdKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YlBhdGhEZXB0aCA9IDA7XG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGtleSA9IGZvcm1hdFN1YlBhdGgoa2V5KTtcbiAgICAgIGlmIChrZXkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uc1tQVVNIXSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBtYXliZVVuZXNjYXBlUXVvdGUgKCkge1xuICAgIHZhciBuZXh0Q2hhciA9IHBhdGhbaW5kZXggKyAxXTtcbiAgICBpZiAoKG1vZGUgPT09IElOX1NJTkdMRV9RVU9URSAmJiBuZXh0Q2hhciA9PT0gXCInXCIpIHx8XG4gICAgICAobW9kZSA9PT0gSU5fRE9VQkxFX1FVT1RFICYmIG5leHRDaGFyID09PSAnXCInKSkge1xuICAgICAgaW5kZXgrKztcbiAgICAgIG5ld0NoYXIgPSAnXFxcXCcgKyBuZXh0Q2hhcjtcbiAgICAgIGFjdGlvbnNbQVBQRU5EXSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICB3aGlsZSAobW9kZSAhPT0gbnVsbCkge1xuICAgIGluZGV4Kys7XG4gICAgYyA9IHBhdGhbaW5kZXhdO1xuXG4gICAgaWYgKGMgPT09ICdcXFxcJyAmJiBtYXliZVVuZXNjYXBlUXVvdGUoKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB0eXBlID0gZ2V0UGF0aENoYXJUeXBlKGMpO1xuICAgIHR5cGVNYXAgPSBwYXRoU3RhdGVNYWNoaW5lW21vZGVdO1xuICAgIHRyYW5zaXRpb24gPSB0eXBlTWFwW3R5cGVdIHx8IHR5cGVNYXBbJ2Vsc2UnXSB8fCBFUlJPUjtcblxuICAgIGlmICh0cmFuc2l0aW9uID09PSBFUlJPUikge1xuICAgICAgcmV0dXJuIC8vIHBhcnNlIGVycm9yXG4gICAgfVxuXG4gICAgbW9kZSA9IHRyYW5zaXRpb25bMF07XG4gICAgYWN0aW9uID0gYWN0aW9uc1t0cmFuc2l0aW9uWzFdXTtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICBuZXdDaGFyID0gdHJhbnNpdGlvblsyXTtcbiAgICAgIG5ld0NoYXIgPSBuZXdDaGFyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBjXG4gICAgICAgIDogbmV3Q2hhcjtcbiAgICAgIGlmIChhY3Rpb24oKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZGUgPT09IEFGVEVSX1BBVEgpIHtcbiAgICAgIHJldHVybiBrZXlzXG4gICAgfVxuICB9XG59XG5cblxuXG5cblxudmFyIEkxOG5QYXRoID0gZnVuY3Rpb24gSTE4blBhdGggKCkge1xuICB0aGlzLl9jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59O1xuXG4vKipcbiAqIEV4dGVybmFsIHBhcnNlIHRoYXQgY2hlY2sgZm9yIGEgY2FjaGUgaGl0IGZpcnN0XG4gKi9cbkkxOG5QYXRoLnByb3RvdHlwZS5wYXJzZVBhdGggPSBmdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgdmFyIGhpdCA9IHRoaXMuX2NhY2hlW3BhdGhdO1xuICBpZiAoIWhpdCkge1xuICAgIGhpdCA9IHBhcnNlJDEocGF0aCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgdGhpcy5fY2FjaGVbcGF0aF0gPSBoaXQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBoaXQgfHwgW11cbn07XG5cbi8qKlxuICogR2V0IHBhdGggdmFsdWUgZnJvbSBwYXRoIHN0cmluZ1xuICovXG5JMThuUGF0aC5wcm90b3R5cGUuZ2V0UGF0aFZhbHVlID0gZnVuY3Rpb24gZ2V0UGF0aFZhbHVlIChvYmosIHBhdGgpIHtcbiAgaWYgKCFpc09iamVjdChvYmopKSB7IHJldHVybiBudWxsIH1cblxuICB2YXIgcGF0aHMgPSB0aGlzLnBhcnNlUGF0aChwYXRoKTtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgICB2YXIgbGFzdCA9IG9iajtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGxhc3RbcGF0aHNbaV1dO1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGxhc3QgPSB2YWx1ZTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFxuICB9XG59O1xuXG4vKiAgKi9cblxuXG5cbnZhciBodG1sVGFnTWF0Y2hlciA9IC88XFwvP1tcXHdcXHM9XCIvLic6OyMtXFwvXSs+LztcbnZhciBsaW5rS2V5TWF0Y2hlciA9IC8oPzpAKD86XFwuW2Etel0rKT86KD86W1xcd1xcLV98Ll0rfFxcKFtcXHdcXC1ffC5dK1xcKSkpL2c7XG52YXIgbGlua0tleVByZWZpeE1hdGNoZXIgPSAvXkAoPzpcXC4oW2Etel0rKSk/Oi87XG52YXIgYnJhY2tldHNNYXRjaGVyID0gL1soKV0vZztcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0ge1xuICAndXBwZXInOiBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIudG9Mb2NhbGVVcHBlckNhc2UoKTsgfSxcbiAgJ2xvd2VyJzogZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnRvTG9jYWxlTG93ZXJDYXNlKCk7IH1cbn07XG5cbnZhciBkZWZhdWx0Rm9ybWF0dGVyID0gbmV3IEJhc2VGb3JtYXR0ZXIoKTtcblxudmFyIFZ1ZUkxOG4gPSBmdW5jdGlvbiBWdWVJMThuIChvcHRpb25zKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAvLyBBdXRvIGluc3RhbGwgaWYgaXQgaXMgbm90IGRvbmUgeWV0IGFuZCBgd2luZG93YCBoYXMgYFZ1ZWAuXG4gIC8vIFRvIGFsbG93IHVzZXJzIHRvIGF2b2lkIGF1dG8taW5zdGFsbGF0aW9uIGluIHNvbWUgY2FzZXMsXG4gIC8vIHRoaXMgY29kZSBzaG91bGQgYmUgcGxhY2VkIGhlcmUuIFNlZSAjMjkwXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIVZ1ZSAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gICAgaW5zdGFsbCh3aW5kb3cuVnVlKTtcbiAgfVxuXG4gIHZhciBsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSB8fCAnZW4tVVMnO1xuICB2YXIgZmFsbGJhY2tMb2NhbGUgPSBvcHRpb25zLmZhbGxiYWNrTG9jYWxlIHx8ICdlbi1VUyc7XG4gIHZhciBtZXNzYWdlcyA9IG9wdGlvbnMubWVzc2FnZXMgfHwge307XG4gIHZhciBkYXRlVGltZUZvcm1hdHMgPSBvcHRpb25zLmRhdGVUaW1lRm9ybWF0cyB8fCB7fTtcbiAgdmFyIG51bWJlckZvcm1hdHMgPSBvcHRpb25zLm51bWJlckZvcm1hdHMgfHwge307XG5cbiAgdGhpcy5fdm0gPSBudWxsO1xuICB0aGlzLl9mb3JtYXR0ZXIgPSBvcHRpb25zLmZvcm1hdHRlciB8fCBkZWZhdWx0Rm9ybWF0dGVyO1xuICB0aGlzLl9tb2RpZmllcnMgPSBvcHRpb25zLm1vZGlmaWVycyB8fCB7fTtcbiAgdGhpcy5fbWlzc2luZyA9IG9wdGlvbnMubWlzc2luZyB8fCBudWxsO1xuICB0aGlzLl9yb290ID0gb3B0aW9ucy5yb290IHx8IG51bGw7XG4gIHRoaXMuX3N5bmMgPSBvcHRpb25zLnN5bmMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMuc3luYztcbiAgdGhpcy5fZmFsbGJhY2tSb290ID0gb3B0aW9ucy5mYWxsYmFja1Jvb3QgPT09IHVuZGVmaW5lZFxuICAgID8gdHJ1ZVxuICAgIDogISFvcHRpb25zLmZhbGxiYWNrUm9vdDtcbiAgdGhpcy5fZm9ybWF0RmFsbGJhY2tNZXNzYWdlcyA9IG9wdGlvbnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcyA9PT0gdW5kZWZpbmVkXG4gICAgPyBmYWxzZVxuICAgIDogISFvcHRpb25zLmZvcm1hdEZhbGxiYWNrTWVzc2FnZXM7XG4gIHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2FybiA9IG9wdGlvbnMuc2lsZW50VHJhbnNsYXRpb25XYXJuID09PSB1bmRlZmluZWRcbiAgICA/IGZhbHNlXG4gICAgOiBvcHRpb25zLnNpbGVudFRyYW5zbGF0aW9uV2FybjtcbiAgdGhpcy5fc2lsZW50RmFsbGJhY2tXYXJuID0gb3B0aW9ucy5zaWxlbnRGYWxsYmFja1dhcm4gPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5zaWxlbnRGYWxsYmFja1dhcm47XG4gIHRoaXMuX2RhdGVUaW1lRm9ybWF0dGVycyA9IHt9O1xuICB0aGlzLl9udW1iZXJGb3JtYXR0ZXJzID0ge307XG4gIHRoaXMuX3BhdGggPSBuZXcgSTE4blBhdGgoKTtcbiAgdGhpcy5fZGF0YUxpc3RlbmVycyA9IFtdO1xuICB0aGlzLl9wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPSBvcHRpb25zLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudCA9PT0gdW5kZWZpbmVkXG4gICAgPyBmYWxzZVxuICAgIDogISFvcHRpb25zLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudDtcbiAgdGhpcy5wbHVyYWxpemF0aW9uUnVsZXMgPSBvcHRpb25zLnBsdXJhbGl6YXRpb25SdWxlcyB8fCB7fTtcbiAgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPSBvcHRpb25zLndhcm5IdG1sSW5NZXNzYWdlIHx8ICdvZmYnO1xuXG4gIHRoaXMuX2V4aXN0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGtleSkge1xuICAgIGlmICghbWVzc2FnZSB8fCAha2V5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgaWYgKCFpc051bGwodGhpcyQxLl9wYXRoLmdldFBhdGhWYWx1ZShtZXNzYWdlLCBrZXkpKSkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgLy8gZmFsbGJhY2sgZm9yIGZsYXQga2V5XG4gICAgaWYgKG1lc3NhZ2Vba2V5XSkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnd2FybicgfHwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICdlcnJvcicpIHtcbiAgICBPYmplY3Qua2V5cyhtZXNzYWdlcykuZm9yRWFjaChmdW5jdGlvbiAobG9jYWxlKSB7XG4gICAgICB0aGlzJDEuX2NoZWNrTG9jYWxlTWVzc2FnZShsb2NhbGUsIHRoaXMkMS5fd2Fybkh0bWxJbk1lc3NhZ2UsIG1lc3NhZ2VzW2xvY2FsZV0pO1xuICAgIH0pO1xuICB9XG5cbiAgdGhpcy5faW5pdFZNKHtcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBmYWxsYmFja0xvY2FsZTogZmFsbGJhY2tMb2NhbGUsXG4gICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxuICAgIGRhdGVUaW1lRm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIG51bWJlckZvcm1hdHM6IG51bWJlckZvcm1hdHNcbiAgfSk7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyB2bTogeyBjb25maWd1cmFibGU6IHRydWUgfSxtZXNzYWdlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxkYXRlVGltZUZvcm1hdHM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sbnVtYmVyRm9ybWF0czogeyBjb25maWd1cmFibGU6IHRydWUgfSxhdmFpbGFibGVMb2NhbGVzOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGxvY2FsZTogeyBjb25maWd1cmFibGU6IHRydWUgfSxmYWxsYmFja0xvY2FsZTogeyBjb25maWd1cmFibGU6IHRydWUgfSxmb3JtYXRGYWxsYmFja01lc3NhZ2VzOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LG1pc3Npbmc6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZm9ybWF0dGVyOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LHNpbGVudFRyYW5zbGF0aW9uV2FybjogeyBjb25maWd1cmFibGU6IHRydWUgfSxzaWxlbnRGYWxsYmFja1dhcm46IHsgY29uZmlndXJhYmxlOiB0cnVlIH0scHJlc2VydmVEaXJlY3RpdmVDb250ZW50OiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LHdhcm5IdG1sSW5NZXNzYWdlOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9jaGVja0xvY2FsZU1lc3NhZ2UgPSBmdW5jdGlvbiBfY2hlY2tMb2NhbGVNZXNzYWdlIChsb2NhbGUsIGxldmVsLCBtZXNzYWdlKSB7XG4gIHZhciBwYXRocyA9IFtdO1xuXG4gIHZhciBmbiA9IGZ1bmN0aW9uIChsZXZlbCwgbG9jYWxlLCBtZXNzYWdlLCBwYXRocykge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG1lc3NhZ2UpKSB7XG4gICAgICBPYmplY3Qua2V5cyhtZXNzYWdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG1lc3NhZ2Vba2V5XTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgICAgIHBhdGhzLnB1c2goa2V5KTtcbiAgICAgICAgICBwYXRocy5wdXNoKCcuJyk7XG4gICAgICAgICAgZm4obGV2ZWwsIGxvY2FsZSwgdmFsLCBwYXRocyk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0aHMucHVzaChrZXkpO1xuICAgICAgICAgIGZuKGxldmVsLCBsb2NhbGUsIHZhbCwgcGF0aHMpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcbiAgICAgIG1lc3NhZ2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICBwYXRocy5wdXNoKChcIltcIiArIGluZGV4ICsgXCJdXCIpKTtcbiAgICAgICAgICBwYXRocy5wdXNoKCcuJyk7XG4gICAgICAgICAgZm4obGV2ZWwsIGxvY2FsZSwgaXRlbSwgcGF0aHMpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGhzLnB1c2goKFwiW1wiICsgaW5kZXggKyBcIl1cIikpO1xuICAgICAgICAgIGZuKGxldmVsLCBsb2NhbGUsIGl0ZW0sIHBhdGhzKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciByZXQgPSBodG1sVGFnTWF0Y2hlci50ZXN0KG1lc3NhZ2UpO1xuICAgICAgaWYgKHJldCkge1xuICAgICAgICB2YXIgbXNnID0gXCJEZXRlY3RlZCBIVE1MIGluIG1lc3NhZ2UgJ1wiICsgbWVzc2FnZSArIFwiJyBvZiBrZXlwYXRoICdcIiArIChwYXRocy5qb2luKCcnKSkgKyBcIicgYXQgJ1wiICsgbG9jYWxlICsgXCInLiBDb25zaWRlciBjb21wb25lbnQgaW50ZXJwb2xhdGlvbiB3aXRoICc8aTE4bj4nIHRvIGF2b2lkIFhTUy4gU2VlIGh0dHBzOi8vYml0Lmx5LzJacUp6a3BcIjtcbiAgICAgICAgaWYgKGxldmVsID09PSAnd2FybicpIHtcbiAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBlcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZuKGxldmVsLCBsb2NhbGUsIG1lc3NhZ2UsIHBhdGhzKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pbml0Vk0gPSBmdW5jdGlvbiBfaW5pdFZNIChkYXRhKSB7XG4gIHZhciBzaWxlbnQgPSBWdWUuY29uZmlnLnNpbGVudDtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSB0cnVlO1xuICB0aGlzLl92bSA9IG5ldyBWdWUoeyBkYXRhOiBkYXRhIH0pO1xuICBWdWUuY29uZmlnLnNpbGVudCA9IHNpbGVudDtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmRlc3Ryb3lWTSA9IGZ1bmN0aW9uIGRlc3Ryb3lWTSAoKSB7XG4gIHRoaXMuX3ZtLiRkZXN0cm95KCk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcgPSBmdW5jdGlvbiBzdWJzY3JpYmVEYXRhQ2hhbmdpbmcgKHZtKSB7XG4gIHRoaXMuX2RhdGFMaXN0ZW5lcnMucHVzaCh2bSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS51bnN1YnNjcmliZURhdGFDaGFuZ2luZyA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlRGF0YUNoYW5naW5nICh2bSkge1xuICByZW1vdmUodGhpcy5fZGF0YUxpc3RlbmVycywgdm0pO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUud2F0Y2hJMThuRGF0YSA9IGZ1bmN0aW9uIHdhdGNoSTE4bkRhdGEgKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHJldHVybiB0aGlzLl92bS4kd2F0Y2goJyRkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gc2VsZi5fZGF0YUxpc3RlbmVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5fZGF0YUxpc3RlbmVyc1tpXSAmJiBzZWxmLl9kYXRhTGlzdGVuZXJzW2ldLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7IGRlZXA6IHRydWUgfSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLndhdGNoTG9jYWxlID0gZnVuY3Rpb24gd2F0Y2hMb2NhbGUgKCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCF0aGlzLl9zeW5jIHx8ICF0aGlzLl9yb290KSB7IHJldHVybiBudWxsIH1cbiAgdmFyIHRhcmdldCA9IHRoaXMuX3ZtO1xuICByZXR1cm4gdGhpcy5fcm9vdC4kaTE4bi52bS4kd2F0Y2goJ2xvY2FsZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICB0YXJnZXQuJHNldCh0YXJnZXQsICdsb2NhbGUnLCB2YWwpO1xuICAgIHRhcmdldC4kZm9yY2VVcGRhdGUoKTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSlcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy52bS5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl92bSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMubWVzc2FnZXMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl9nZXRNZXNzYWdlcygpKSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmRhdGVUaW1lRm9ybWF0cy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBsb29zZUNsb25lKHRoaXMuX2dldERhdGVUaW1lRm9ybWF0cygpKSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLm51bWJlckZvcm1hdHMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl9nZXROdW1iZXJGb3JtYXRzKCkpIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuYXZhaWxhYmxlTG9jYWxlcy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lc3NhZ2VzKS5zb3J0KCkgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmxvY2FsZS5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl92bS5sb2NhbGUgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5sb2NhbGUuc2V0ID0gZnVuY3Rpb24gKGxvY2FsZSkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLCAnbG9jYWxlJywgbG9jYWxlKTtcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5mYWxsYmFja0xvY2FsZS5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl92bS5mYWxsYmFja0xvY2FsZSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmZhbGxiYWNrTG9jYWxlLnNldCA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bSwgJ2ZhbGxiYWNrTG9jYWxlJywgbG9jYWxlKTtcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzLnNldCA9IGZ1bmN0aW9uIChmYWxsYmFjaykgeyB0aGlzLl9mb3JtYXRGYWxsYmFja01lc3NhZ2VzID0gZmFsbGJhY2s7IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5taXNzaW5nLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX21pc3NpbmcgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5taXNzaW5nLnNldCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7IHRoaXMuX21pc3NpbmcgPSBoYW5kbGVyOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0dGVyLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlciB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmZvcm1hdHRlci5zZXQgPSBmdW5jdGlvbiAoZm9ybWF0dGVyKSB7IHRoaXMuX2Zvcm1hdHRlciA9IGZvcm1hdHRlcjsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnNpbGVudFRyYW5zbGF0aW9uV2Fybi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5zaWxlbnRUcmFuc2xhdGlvbldhcm4uc2V0ID0gZnVuY3Rpb24gKHNpbGVudCkgeyB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSBzaWxlbnQ7IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5zaWxlbnRGYWxsYmFja1dhcm4uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2lsZW50RmFsbGJhY2tXYXJuIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50RmFsbGJhY2tXYXJuLnNldCA9IGZ1bmN0aW9uIChzaWxlbnQpIHsgdGhpcy5fc2lsZW50RmFsbGJhY2tXYXJuID0gc2lsZW50OyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMucHJlc2VydmVEaXJlY3RpdmVDb250ZW50LmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3ByZXNlcnZlRGlyZWN0aXZlQ29udGVudCB9O1xucHJvdG90eXBlQWNjZXNzb3JzLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudC5zZXQgPSBmdW5jdGlvbiAocHJlc2VydmUpIHsgdGhpcy5fcHJlc2VydmVEaXJlY3RpdmVDb250ZW50ID0gcHJlc2VydmU7IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy53YXJuSHRtbEluTWVzc2FnZS5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLndhcm5IdG1sSW5NZXNzYWdlLnNldCA9IGZ1bmN0aW9uIChsZXZlbCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcmdMZXZlbCA9IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlO1xuICB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9IGxldmVsO1xuICBpZiAob3JnTGV2ZWwgIT09IGxldmVsICYmIChsZXZlbCA9PT0gJ3dhcm4nIHx8IGxldmVsID09PSAnZXJyb3InKSkge1xuICAgIHZhciBtZXNzYWdlcyA9IHRoaXMuX2dldE1lc3NhZ2VzKCk7XG4gICAgT2JqZWN0LmtleXMobWVzc2FnZXMpLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgdGhpcyQxLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzJDEuX3dhcm5IdG1sSW5NZXNzYWdlLCBtZXNzYWdlc1tsb2NhbGVdKTtcbiAgICB9KTtcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2dldE1lc3NhZ2VzID0gZnVuY3Rpb24gX2dldE1lc3NhZ2VzICgpIHsgcmV0dXJuIHRoaXMuX3ZtLm1lc3NhZ2VzIH07XG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0RGF0ZVRpbWVGb3JtYXRzID0gZnVuY3Rpb24gX2dldERhdGVUaW1lRm9ybWF0cyAoKSB7IHJldHVybiB0aGlzLl92bS5kYXRlVGltZUZvcm1hdHMgfTtcblZ1ZUkxOG4ucHJvdG90eXBlLl9nZXROdW1iZXJGb3JtYXRzID0gZnVuY3Rpb24gX2dldE51bWJlckZvcm1hdHMgKCkgeyByZXR1cm4gdGhpcy5fdm0ubnVtYmVyRm9ybWF0cyB9O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fd2FybkRlZmF1bHQgPSBmdW5jdGlvbiBfd2FybkRlZmF1bHQgKGxvY2FsZSwga2V5LCByZXN1bHQsIHZtLCB2YWx1ZXMpIHtcbiAgaWYgKCFpc051bGwocmVzdWx0KSkgeyByZXR1cm4gcmVzdWx0IH1cbiAgaWYgKHRoaXMuX21pc3NpbmcpIHtcbiAgICB2YXIgbWlzc2luZ1JldCA9IHRoaXMuX21pc3NpbmcuYXBwbHkobnVsbCwgW2xvY2FsZSwga2V5LCB2bSwgdmFsdWVzXSk7XG4gICAgaWYgKHR5cGVvZiBtaXNzaW5nUmV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1pc3NpbmdSZXRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiQ2Fubm90IHRyYW5zbGF0ZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCAnXCIgKyBrZXkgKyBcIicuIFwiICtcbiAgICAgICAgJ1VzZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCBhcyBkZWZhdWx0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMpIHtcbiAgICB2YXIgcGFyc2VkQXJncyA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcihrZXksICdzdHJpbmcnLCBwYXJzZWRBcmdzLnBhcmFtcywga2V5KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBrZXlcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2lzRmFsbGJhY2tSb290ID0gZnVuY3Rpb24gX2lzRmFsbGJhY2tSb290ICh2YWwpIHtcbiAgcmV0dXJuICF2YWwgJiYgIWlzTnVsbCh0aGlzLl9yb290KSAmJiB0aGlzLl9mYWxsYmFja1Jvb3Rcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudEZhbGxiYWNrV2FybiA9IGZ1bmN0aW9uIF9pc1NpbGVudEZhbGxiYWNrV2FybiAoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm4gaW5zdGFuY2VvZiBSZWdFeHBcbiAgICA/IHRoaXMuX3NpbGVudEZhbGxiYWNrV2Fybi50ZXN0KGtleSlcbiAgICA6IHRoaXMuX3NpbGVudEZhbGxiYWNrV2FyblxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2lzU2lsZW50RmFsbGJhY2sgPSBmdW5jdGlvbiBfaXNTaWxlbnRGYWxsYmFjayAobG9jYWxlLCBrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkgJiYgKHRoaXMuX2lzRmFsbGJhY2tSb290KCkgfHwgbG9jYWxlICE9PSB0aGlzLmZhbGxiYWNrTG9jYWxlKVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuID0gZnVuY3Rpb24gX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuIChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2FybiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgID8gdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuLnRlc3Qoa2V5KVxuICAgIDogdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBfaW50ZXJwb2xhdGUgKFxuICBsb2NhbGUsXG4gIG1lc3NhZ2UsXG4gIGtleSxcbiAgaG9zdCxcbiAgaW50ZXJwb2xhdGVNb2RlLFxuICB2YWx1ZXMsXG4gIHZpc2l0ZWRMaW5rU3RhY2tcbikge1xuICBpZiAoIW1lc3NhZ2UpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHZhciBwYXRoUmV0ID0gdGhpcy5fcGF0aC5nZXRQYXRoVmFsdWUobWVzc2FnZSwga2V5KTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aFJldCkgfHwgaXNQbGFpbk9iamVjdChwYXRoUmV0KSkgeyByZXR1cm4gcGF0aFJldCB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKGlzTnVsbChwYXRoUmV0KSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzUGxhaW5PYmplY3QobWVzc2FnZSkpIHtcbiAgICAgIHJldCA9IG1lc3NhZ2Vba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgcmV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFjayhsb2NhbGUsIGtleSkpIHtcbiAgICAgICAgICB3YXJuKChcIlZhbHVlIG9mIGtleSAnXCIgKyBrZXkgKyBcIicgaXMgbm90IGEgc3RyaW5nIVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIHBhdGhSZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXQgPSBwYXRoUmV0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFjayhsb2NhbGUsIGtleSkpIHtcbiAgICAgICAgd2FybigoXCJWYWx1ZSBvZiBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhIHN0cmluZyFcIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBsaW5rcyB3aXRoaW4gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nXG4gIGlmIChyZXQuaW5kZXhPZignQDonKSA+PSAwIHx8IHJldC5pbmRleE9mKCdALicpID49IDApIHtcbiAgICByZXQgPSB0aGlzLl9saW5rKGxvY2FsZSwgbWVzc2FnZSwgcmV0LCBob3N0LCAncmF3JywgdmFsdWVzLCB2aXNpdGVkTGlua1N0YWNrKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9yZW5kZXIocmV0LCBpbnRlcnBvbGF0ZU1vZGUsIHZhbHVlcywga2V5KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2xpbmsgPSBmdW5jdGlvbiBfbGluayAoXG4gIGxvY2FsZSxcbiAgbWVzc2FnZSxcbiAgc3RyLFxuICBob3N0LFxuICBpbnRlcnBvbGF0ZU1vZGUsXG4gIHZhbHVlcyxcbiAgdmlzaXRlZExpbmtTdGFja1xuKSB7XG4gIHZhciByZXQgPSBzdHI7XG5cbiAgLy8gTWF0Y2ggYWxsIHRoZSBsaW5rcyB3aXRoaW4gdGhlIGxvY2FsXG4gIC8vIFdlIGFyZSBnb2luZyB0byByZXBsYWNlIGVhY2ggb2ZcbiAgLy8gdGhlbSB3aXRoIGl0cyB0cmFuc2xhdGlvblxuICB2YXIgbWF0Y2hlcyA9IHJldC5tYXRjaChsaW5rS2V5TWF0Y2hlcik7XG4gIGZvciAodmFyIGlkeCBpbiBtYXRjaGVzKSB7XG4gICAgLy8gaWUgY29tcGF0aWJsZTogZmlsdGVyIGN1c3RvbSBhcnJheVxuICAgIC8vIHByb3RvdHlwZSBtZXRob2RcbiAgICBpZiAoIW1hdGNoZXMuaGFzT3duUHJvcGVydHkoaWR4KSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgdmFyIGxpbmsgPSBtYXRjaGVzW2lkeF07XG4gICAgdmFyIGxpbmtLZXlQcmVmaXhNYXRjaGVzID0gbGluay5tYXRjaChsaW5rS2V5UHJlZml4TWF0Y2hlcik7XG4gICAgdmFyIGxpbmtQcmVmaXggPSBsaW5rS2V5UHJlZml4TWF0Y2hlc1swXTtcbiAgICAgIHZhciBmb3JtYXR0ZXJOYW1lID0gbGlua0tleVByZWZpeE1hdGNoZXNbMV07XG5cbiAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgQDosIEAuY2FzZTogYW5kIHRoZSBicmFja2V0c1xuICAgIHZhciBsaW5rUGxhY2Vob2xkZXIgPSBsaW5rLnJlcGxhY2UobGlua1ByZWZpeCwgJycpLnJlcGxhY2UoYnJhY2tldHNNYXRjaGVyLCAnJyk7XG5cbiAgICBpZiAodmlzaXRlZExpbmtTdGFjay5pbmNsdWRlcyhsaW5rUGxhY2Vob2xkZXIpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKChcIkNpcmN1bGFyIHJlZmVyZW5jZSBmb3VuZC4gXFxcIlwiICsgbGluayArIFwiXFxcIiBpcyBhbHJlYWR5IHZpc2l0ZWQgaW4gdGhlIGNoYWluIG9mIFwiICsgKHZpc2l0ZWRMaW5rU3RhY2sucmV2ZXJzZSgpLmpvaW4oJyA8LSAnKSkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gICAgdmlzaXRlZExpbmtTdGFjay5wdXNoKGxpbmtQbGFjZWhvbGRlcik7XG5cbiAgICAvLyBUcmFuc2xhdGUgdGhlIGxpbmtcbiAgICB2YXIgdHJhbnNsYXRlZCA9IHRoaXMuX2ludGVycG9sYXRlKFxuICAgICAgbG9jYWxlLCBtZXNzYWdlLCBsaW5rUGxhY2Vob2xkZXIsIGhvc3QsXG4gICAgICBpbnRlcnBvbGF0ZU1vZGUgPT09ICdyYXcnID8gJ3N0cmluZycgOiBpbnRlcnBvbGF0ZU1vZGUsXG4gICAgICBpbnRlcnBvbGF0ZU1vZGUgPT09ICdyYXcnID8gdW5kZWZpbmVkIDogdmFsdWVzLFxuICAgICAgdmlzaXRlZExpbmtTdGFja1xuICAgICk7XG5cbiAgICBpZiAodGhpcy5faXNGYWxsYmFja1Jvb3QodHJhbnNsYXRlZCkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihsaW5rUGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvIHRyYW5zbGF0ZSB0aGUgbGluayBwbGFjZWhvbGRlciAnXCIgKyBsaW5rUGxhY2Vob2xkZXIgKyBcIicgd2l0aCByb290IGxvY2FsZS5cIikpO1xuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXRoaXMuX3Jvb3QpIHsgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3InKSB9XG4gICAgICB2YXIgcm9vdCA9IHRoaXMuX3Jvb3QuJGkxOG47XG4gICAgICB0cmFuc2xhdGVkID0gcm9vdC5fdHJhbnNsYXRlKFxuICAgICAgICByb290Ll9nZXRNZXNzYWdlcygpLCByb290LmxvY2FsZSwgcm9vdC5mYWxsYmFja0xvY2FsZSxcbiAgICAgICAgbGlua1BsYWNlaG9sZGVyLCBob3N0LCBpbnRlcnBvbGF0ZU1vZGUsIHZhbHVlc1xuICAgICAgKTtcbiAgICB9XG4gICAgdHJhbnNsYXRlZCA9IHRoaXMuX3dhcm5EZWZhdWx0KFxuICAgICAgbG9jYWxlLCBsaW5rUGxhY2Vob2xkZXIsIHRyYW5zbGF0ZWQsIGhvc3QsXG4gICAgICBBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBbdmFsdWVzXVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5fbW9kaWZpZXJzLmhhc093blByb3BlcnR5KGZvcm1hdHRlck5hbWUpKSB7XG4gICAgICB0cmFuc2xhdGVkID0gdGhpcy5fbW9kaWZpZXJzW2Zvcm1hdHRlck5hbWVdKHRyYW5zbGF0ZWQpO1xuICAgIH0gZWxzZSBpZiAoZGVmYXVsdE1vZGlmaWVycy5oYXNPd25Qcm9wZXJ0eShmb3JtYXR0ZXJOYW1lKSkge1xuICAgICAgdHJhbnNsYXRlZCA9IGRlZmF1bHRNb2RpZmllcnNbZm9ybWF0dGVyTmFtZV0odHJhbnNsYXRlZCk7XG4gICAgfVxuXG4gICAgdmlzaXRlZExpbmtTdGFjay5wb3AoKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGxpbmsgd2l0aCB0aGUgdHJhbnNsYXRlZFxuICAgIHJldCA9ICF0cmFuc2xhdGVkID8gcmV0IDogcmV0LnJlcGxhY2UobGluaywgdHJhbnNsYXRlZCk7XG4gIH1cblxuICByZXR1cm4gcmV0XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gX3JlbmRlciAobWVzc2FnZSwgaW50ZXJwb2xhdGVNb2RlLCB2YWx1ZXMsIHBhdGgpIHtcbiAgdmFyIHJldCA9IHRoaXMuX2Zvcm1hdHRlci5pbnRlcnBvbGF0ZShtZXNzYWdlLCB2YWx1ZXMsIHBhdGgpO1xuXG4gIC8vIElmIHRoZSBjdXN0b20gZm9ybWF0dGVyIHJlZnVzZXMgdG8gd29yayAtIGFwcGx5IHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoIXJldCkge1xuICAgIHJldCA9IGRlZmF1bHRGb3JtYXR0ZXIuaW50ZXJwb2xhdGUobWVzc2FnZSwgdmFsdWVzLCBwYXRoKTtcbiAgfVxuXG4gIC8vIGlmIGludGVycG9sYXRlTW9kZSBpcyAqKm5vdCoqICdzdHJpbmcnICgncm93JyksXG4gIC8vIHJldHVybiB0aGUgY29tcGlsZWQgZGF0YSAoZS5nLiBbJ2ZvbycsIFZOb2RlLCAnYmFyJ10pIHdpdGggZm9ybWF0dGVyXG4gIHJldHVybiBpbnRlcnBvbGF0ZU1vZGUgPT09ICdzdHJpbmcnID8gcmV0LmpvaW4oJycpIDogcmV0XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdHJhbnNsYXRlID0gZnVuY3Rpb24gX3RyYW5zbGF0ZSAoXG4gIG1lc3NhZ2VzLFxuICBsb2NhbGUsXG4gIGZhbGxiYWNrLFxuICBrZXksXG4gIGhvc3QsXG4gIGludGVycG9sYXRlTW9kZSxcbiAgYXJnc1xuKSB7XG4gIHZhciByZXMgPVxuICAgIHRoaXMuX2ludGVycG9sYXRlKGxvY2FsZSwgbWVzc2FnZXNbbG9jYWxlXSwga2V5LCBob3N0LCBpbnRlcnBvbGF0ZU1vZGUsIGFyZ3MsIFtrZXldKTtcbiAgaWYgKCFpc051bGwocmVzKSkgeyByZXR1cm4gcmVzIH1cblxuICByZXMgPSB0aGlzLl9pbnRlcnBvbGF0ZShmYWxsYmFjaywgbWVzc2FnZXNbZmFsbGJhY2tdLCBrZXksIGhvc3QsIGludGVycG9sYXRlTW9kZSwgYXJncywgW2tleV0pO1xuICBpZiAoIWlzTnVsbChyZXMpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvIHRyYW5zbGF0ZSB0aGUga2V5cGF0aCAnXCIgKyBrZXkgKyBcIicgd2l0aCAnXCIgKyBmYWxsYmFjayArIFwiJyBsb2NhbGUuXCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl90ID0gZnVuY3Rpb24gX3QgKGtleSwgX2xvY2FsZSwgbWVzc2FnZXMsIGhvc3QpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gNDtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDQgXTtcbiAgaWYgKCFrZXkpIHsgcmV0dXJuICcnIH1cblxuICB2YXIgcGFyc2VkQXJncyA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIHZhbHVlcyk7XG4gIHZhciBsb2NhbGUgPSBwYXJzZWRBcmdzLmxvY2FsZSB8fCBfbG9jYWxlO1xuXG4gIHZhciByZXQgPSB0aGlzLl90cmFuc2xhdGUoXG4gICAgbWVzc2FnZXMsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwga2V5LFxuICAgIGhvc3QsICdzdHJpbmcnLCBwYXJzZWRBcmdzLnBhcmFtc1xuICApO1xuICBpZiAodGhpcy5faXNGYWxsYmFja1Jvb3QocmV0KSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byB0cmFuc2xhdGUgdGhlIGtleXBhdGggJ1wiICsga2V5ICsgXCInIHdpdGggcm9vdCBsb2NhbGUuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiAocmVmID0gdGhpcy5fcm9vdCkuJHQuYXBwbHkocmVmLCBbIGtleSBdLmNvbmNhdCggdmFsdWVzICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3dhcm5EZWZhdWx0KGxvY2FsZSwga2V5LCByZXQsIGhvc3QsIHZhbHVlcylcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudCA9IGZ1bmN0aW9uIHQgKGtleSkge1xuICAgIHZhciByZWY7XG5cbiAgICB2YXIgdmFsdWVzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgdmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuICByZXR1cm4gKHJlZiA9IHRoaXMpLl90LmFwcGx5KHJlZiwgWyBrZXksIHRoaXMubG9jYWxlLCB0aGlzLl9nZXRNZXNzYWdlcygpLCBudWxsIF0uY29uY2F0KCB2YWx1ZXMgKSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pID0gZnVuY3Rpb24gX2kgKGtleSwgbG9jYWxlLCBtZXNzYWdlcywgaG9zdCwgdmFsdWVzKSB7XG4gIHZhciByZXQgPVxuICAgIHRoaXMuX3RyYW5zbGF0ZShtZXNzYWdlcywgbG9jYWxlLCB0aGlzLmZhbGxiYWNrTG9jYWxlLCBrZXksIGhvc3QsICdyYXcnLCB2YWx1ZXMpO1xuICBpZiAodGhpcy5faXNGYWxsYmFja1Jvb3QocmV0KSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byBpbnRlcnBvbGF0ZSB0aGUga2V5cGF0aCAnXCIgKyBrZXkgKyBcIicgd2l0aCByb290IGxvY2FsZS5cIikpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3Jvb3QpIHsgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3InKSB9XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4uaShrZXksIGxvY2FsZSwgdmFsdWVzKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl93YXJuRGVmYXVsdChsb2NhbGUsIGtleSwgcmV0LCBob3N0LCBbdmFsdWVzXSlcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuaSA9IGZ1bmN0aW9uIGkgKGtleSwgbG9jYWxlLCB2YWx1ZXMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICgha2V5KSB7IHJldHVybiAnJyB9XG5cbiAgaWYgKHR5cGVvZiBsb2NhbGUgIT09ICdzdHJpbmcnKSB7XG4gICAgbG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5faShrZXksIGxvY2FsZSwgdGhpcy5fZ2V0TWVzc2FnZXMoKSwgbnVsbCwgdmFsdWVzKVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3RjID0gZnVuY3Rpb24gX3RjIChcbiAga2V5LFxuICBfbG9jYWxlLFxuICBtZXNzYWdlcyxcbiAgaG9zdCxcbiAgY2hvaWNlXG4pIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gNTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDUgXTtcbiAgaWYgKCFrZXkpIHsgcmV0dXJuICcnIH1cbiAgaWYgKGNob2ljZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2hvaWNlID0gMTtcbiAgfVxuXG4gIHZhciBwcmVkZWZpbmVkID0geyAnY291bnQnOiBjaG9pY2UsICduJzogY2hvaWNlIH07XG4gIHZhciBwYXJzZWRBcmdzID0gcGFyc2VBcmdzLmFwcGx5KHZvaWQgMCwgdmFsdWVzKTtcbiAgcGFyc2VkQXJncy5wYXJhbXMgPSBPYmplY3QuYXNzaWduKHByZWRlZmluZWQsIHBhcnNlZEFyZ3MucGFyYW1zKTtcbiAgdmFsdWVzID0gcGFyc2VkQXJncy5sb2NhbGUgPT09IG51bGwgPyBbcGFyc2VkQXJncy5wYXJhbXNdIDogW3BhcnNlZEFyZ3MubG9jYWxlLCBwYXJzZWRBcmdzLnBhcmFtc107XG4gIHJldHVybiB0aGlzLmZldGNoQ2hvaWNlKChyZWYgPSB0aGlzKS5fdC5hcHBseShyZWYsIFsga2V5LCBfbG9jYWxlLCBtZXNzYWdlcywgaG9zdCBdLmNvbmNhdCggdmFsdWVzICkpLCBjaG9pY2UpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5mZXRjaENob2ljZSA9IGZ1bmN0aW9uIGZldGNoQ2hvaWNlIChtZXNzYWdlLCBjaG9pY2UpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghbWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgcmV0dXJuIG51bGwgfVxuICB2YXIgY2hvaWNlcyA9IG1lc3NhZ2Uuc3BsaXQoJ3wnKTtcblxuICBjaG9pY2UgPSB0aGlzLmdldENob2ljZUluZGV4KGNob2ljZSwgY2hvaWNlcy5sZW5ndGgpO1xuICBpZiAoIWNob2ljZXNbY2hvaWNlXSkgeyByZXR1cm4gbWVzc2FnZSB9XG4gIHJldHVybiBjaG9pY2VzW2Nob2ljZV0udHJpbSgpXG59O1xuXG4vKipcbiAqIEBwYXJhbSBjaG9pY2Uge251bWJlcn0gYSBjaG9pY2UgaW5kZXggZ2l2ZW4gYnkgdGhlIGlucHV0IHRvICR0YzogYCR0YygncGF0aC50by5ydWxlJywgY2hvaWNlSW5kZXgpYFxuICogQHBhcmFtIGNob2ljZXNMZW5ndGgge251bWJlcn0gYW4gb3ZlcmFsbCBhbW91bnQgb2YgYXZhaWxhYmxlIGNob2ljZXNcbiAqIEByZXR1cm5zIGEgZmluYWwgY2hvaWNlIGluZGV4XG4qL1xuVnVlSTE4bi5wcm90b3R5cGUuZ2V0Q2hvaWNlSW5kZXggPSBmdW5jdGlvbiBnZXRDaG9pY2VJbmRleCAoY2hvaWNlLCBjaG9pY2VzTGVuZ3RoKSB7XG4gIC8vIERlZmF1bHQgKG9sZCkgZ2V0Q2hvaWNlSW5kZXggaW1wbGVtZW50YXRpb24gLSBlbmdsaXNoLWNvbXBhdGlibGVcbiAgdmFyIGRlZmF1bHRJbXBsID0gZnVuY3Rpb24gKF9jaG9pY2UsIF9jaG9pY2VzTGVuZ3RoKSB7XG4gICAgX2Nob2ljZSA9IE1hdGguYWJzKF9jaG9pY2UpO1xuXG4gICAgaWYgKF9jaG9pY2VzTGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm4gX2Nob2ljZVxuICAgICAgICA/IF9jaG9pY2UgPiAxXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwXG4gICAgICAgIDogMVxuICAgIH1cblxuICAgIHJldHVybiBfY2hvaWNlID8gTWF0aC5taW4oX2Nob2ljZSwgMikgOiAwXG4gIH07XG5cbiAgaWYgKHRoaXMubG9jYWxlIGluIHRoaXMucGx1cmFsaXphdGlvblJ1bGVzKSB7XG4gICAgcmV0dXJuIHRoaXMucGx1cmFsaXphdGlvblJ1bGVzW3RoaXMubG9jYWxlXS5hcHBseSh0aGlzLCBbY2hvaWNlLCBjaG9pY2VzTGVuZ3RoXSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGVmYXVsdEltcGwoY2hvaWNlLCBjaG9pY2VzTGVuZ3RoKVxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS50YyA9IGZ1bmN0aW9uIHRjIChrZXksIGNob2ljZSkge1xuICAgIHZhciByZWY7XG5cbiAgICB2YXIgdmFsdWVzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgdmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuICByZXR1cm4gKHJlZiA9IHRoaXMpLl90Yy5hcHBseShyZWYsIFsga2V5LCB0aGlzLmxvY2FsZSwgdGhpcy5fZ2V0TWVzc2FnZXMoKSwgbnVsbCwgY2hvaWNlIF0uY29uY2F0KCB2YWx1ZXMgKSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl90ZSA9IGZ1bmN0aW9uIF90ZSAoa2V5LCBsb2NhbGUsIG1lc3NhZ2VzKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDM7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMyBdO1xuXG4gIHZhciBfbG9jYWxlID0gcGFyc2VBcmdzLmFwcGx5KHZvaWQgMCwgYXJncykubG9jYWxlIHx8IGxvY2FsZTtcbiAgcmV0dXJuIHRoaXMuX2V4aXN0KG1lc3NhZ2VzW19sb2NhbGVdLCBrZXkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS50ZSA9IGZ1bmN0aW9uIHRlIChrZXksIGxvY2FsZSkge1xuICByZXR1cm4gdGhpcy5fdGUoa2V5LCB0aGlzLmxvY2FsZSwgdGhpcy5fZ2V0TWVzc2FnZXMoKSwgbG9jYWxlKVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZ2V0TG9jYWxlTWVzc2FnZSA9IGZ1bmN0aW9uIGdldExvY2FsZU1lc3NhZ2UgKGxvY2FsZSkge1xuICByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl92bS5tZXNzYWdlc1tsb2NhbGVdIHx8IHt9KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuc2V0TG9jYWxlTWVzc2FnZSA9IGZ1bmN0aW9uIHNldExvY2FsZU1lc3NhZ2UgKGxvY2FsZSwgbWVzc2FnZSkge1xuICBpZiAodGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICd3YXJuJyB8fCB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ2Vycm9yJykge1xuICAgIHRoaXMuX2NoZWNrTG9jYWxlTWVzc2FnZShsb2NhbGUsIHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlLCBtZXNzYWdlKTtcbiAgICBpZiAodGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICdlcnJvcicpIHsgcmV0dXJuIH1cbiAgfVxuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLm1lc3NhZ2VzLCBsb2NhbGUsIG1lc3NhZ2UpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUubWVyZ2VMb2NhbGVNZXNzYWdlID0gZnVuY3Rpb24gbWVyZ2VMb2NhbGVNZXNzYWdlIChsb2NhbGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnd2FybicgfHwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICdlcnJvcicpIHtcbiAgICB0aGlzLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7IHJldHVybiB9XG4gIH1cbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5tZXNzYWdlcywgbG9jYWxlLCBtZXJnZSh0aGlzLl92bS5tZXNzYWdlc1tsb2NhbGVdIHx8IHt9LCBtZXNzYWdlKSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5nZXREYXRlVGltZUZvcm1hdCA9IGZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0IChsb2NhbGUpIHtcbiAgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fdm0uZGF0ZVRpbWVGb3JtYXRzW2xvY2FsZV0gfHwge30pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zZXREYXRlVGltZUZvcm1hdCA9IGZ1bmN0aW9uIHNldERhdGVUaW1lRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0cywgbG9jYWxlLCBmb3JtYXQpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUubWVyZ2VEYXRlVGltZUZvcm1hdCA9IGZ1bmN0aW9uIG1lcmdlRGF0ZVRpbWVGb3JtYXQgKGxvY2FsZSwgZm9ybWF0KSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0uZGF0ZVRpbWVGb3JtYXRzLCBsb2NhbGUsIG1lcmdlKHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0c1tsb2NhbGVdIHx8IHt9LCBmb3JtYXQpKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9sb2NhbGl6ZURhdGVUaW1lID0gZnVuY3Rpb24gX2xvY2FsaXplRGF0ZVRpbWUgKFxuICB2YWx1ZSxcbiAgbG9jYWxlLFxuICBmYWxsYmFjayxcbiAgZGF0ZVRpbWVGb3JtYXRzLFxuICBrZXlcbikge1xuICB2YXIgX2xvY2FsZSA9IGxvY2FsZTtcbiAgdmFyIGZvcm1hdHMgPSBkYXRlVGltZUZvcm1hdHNbX2xvY2FsZV07XG5cbiAgLy8gZmFsbGJhY2sgbG9jYWxlXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gJ1wiICsgZmFsbGJhY2sgKyBcIicgZGF0ZXRpbWUgZm9ybWF0cyBmcm9tICdcIiArIGxvY2FsZSArIFwiJyBkYXRldGltZSBmb3JtYXRzLlwiKSk7XG4gICAgfVxuICAgIF9sb2NhbGUgPSBmYWxsYmFjaztcbiAgICBmb3JtYXRzID0gZGF0ZVRpbWVGb3JtYXRzW19sb2NhbGVdO1xuICB9XG5cbiAgaWYgKGlzTnVsbChmb3JtYXRzKSB8fCBpc051bGwoZm9ybWF0c1trZXldKSkge1xuICAgIHJldHVybiBudWxsXG4gIH0gZWxzZSB7XG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNba2V5XTtcbiAgICB2YXIgaWQgPSBfbG9jYWxlICsgXCJfX1wiICsga2V5O1xuICAgIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9kYXRlVGltZUZvcm1hdHRlcnNbaWRdO1xuICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXIgPSB0aGlzLl9kYXRlVGltZUZvcm1hdHRlcnNbaWRdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoX2xvY2FsZSwgZm9ybWF0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsdWUpXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9kID0gZnVuY3Rpb24gX2QgKHZhbHVlLCBsb2NhbGUsIGtleSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIVZ1ZUkxOG4uYXZhaWxhYmlsaXRpZXMuZGF0ZVRpbWVGb3JtYXQpIHtcbiAgICB3YXJuKCdDYW5ub3QgZm9ybWF0IGEgRGF0ZSB2YWx1ZSBkdWUgdG8gbm90IHN1cHBvcnRlZCBJbnRsLkRhdGVUaW1lRm9ybWF0LicpO1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFrZXkpIHtcbiAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlKS5mb3JtYXQodmFsdWUpXG4gIH1cblxuICB2YXIgcmV0ID1cbiAgICB0aGlzLl9sb2NhbGl6ZURhdGVUaW1lKHZhbHVlLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIHRoaXMuX2dldERhdGVUaW1lRm9ybWF0cygpLCBrZXkpO1xuICBpZiAodGhpcy5faXNGYWxsYmFja1Jvb3QocmV0KSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byBkYXRldGltZSBsb2NhbGl6YXRpb24gb2Ygcm9vdDoga2V5ICdcIiArIGtleSArIFwiJy5cIikpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXRoaXMuX3Jvb3QpIHsgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3InKSB9XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4uZCh2YWx1ZSwga2V5LCBsb2NhbGUpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJldCB8fCAnJ1xuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5kID0gZnVuY3Rpb24gZCAodmFsdWUpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgdmFyIGxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICB2YXIga2V5ID0gbnVsbDtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBhcmdzWzBdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoYXJnc1swXSkpIHtcbiAgICAgIGlmIChhcmdzWzBdLmxvY2FsZSkge1xuICAgICAgICBsb2NhbGUgPSBhcmdzWzBdLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzWzBdLmtleSkge1xuICAgICAgICBrZXkgPSBhcmdzWzBdLmtleTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBhcmdzWzBdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBsb2NhbGUgPSBhcmdzWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzLl9kKHZhbHVlLCBsb2NhbGUsIGtleSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmdldE51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGdldE51bWJlckZvcm1hdCAobG9jYWxlKSB7XG4gIHJldHVybiBsb29zZUNsb25lKHRoaXMuX3ZtLm51bWJlckZvcm1hdHNbbG9jYWxlXSB8fCB7fSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnNldE51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIHNldE51bWJlckZvcm1hdCAobG9jYWxlLCBmb3JtYXQpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5udW1iZXJGb3JtYXRzLCBsb2NhbGUsIGZvcm1hdCk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5tZXJnZU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIG1lcmdlTnVtYmVyRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLm51bWJlckZvcm1hdHMsIGxvY2FsZSwgbWVyZ2UodGhpcy5fdm0ubnVtYmVyRm9ybWF0c1tsb2NhbGVdIHx8IHt9LCBmb3JtYXQpKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9nZXROdW1iZXJGb3JtYXR0ZXIgPSBmdW5jdGlvbiBfZ2V0TnVtYmVyRm9ybWF0dGVyIChcbiAgdmFsdWUsXG4gIGxvY2FsZSxcbiAgZmFsbGJhY2ssXG4gIG51bWJlckZvcm1hdHMsXG4gIGtleSxcbiAgb3B0aW9uc1xuKSB7XG4gIHZhciBfbG9jYWxlID0gbG9jYWxlO1xuICB2YXIgZm9ybWF0cyA9IG51bWJlckZvcm1hdHNbX2xvY2FsZV07XG5cbiAgLy8gZmFsbGJhY2sgbG9jYWxlXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gJ1wiICsgZmFsbGJhY2sgKyBcIicgbnVtYmVyIGZvcm1hdHMgZnJvbSAnXCIgKyBsb2NhbGUgKyBcIicgbnVtYmVyIGZvcm1hdHMuXCIpKTtcbiAgICB9XG4gICAgX2xvY2FsZSA9IGZhbGxiYWNrO1xuICAgIGZvcm1hdHMgPSBudW1iZXJGb3JtYXRzW19sb2NhbGVdO1xuICB9XG5cbiAgaWYgKGlzTnVsbChmb3JtYXRzKSB8fCBpc051bGwoZm9ybWF0c1trZXldKSkge1xuICAgIHJldHVybiBudWxsXG4gIH0gZWxzZSB7XG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNba2V5XTtcblxuICAgIHZhciBmb3JtYXR0ZXI7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIC8vIElmIG9wdGlvbnMgc3BlY2lmaWVkIC0gY3JlYXRlIG9uZSB0aW1lIG51bWJlciBmb3JtYXR0ZXJcbiAgICAgIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChfbG9jYWxlLCBPYmplY3QuYXNzaWduKHt9LCBmb3JtYXQsIG9wdGlvbnMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlkID0gX2xvY2FsZSArIFwiX19cIiArIGtleTtcbiAgICAgIGZvcm1hdHRlciA9IHRoaXMuX251bWJlckZvcm1hdHRlcnNbaWRdO1xuICAgICAgaWYgKCFmb3JtYXR0ZXIpIHtcbiAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5fbnVtYmVyRm9ybWF0dGVyc1tpZF0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoX2xvY2FsZSwgZm9ybWF0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlclxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uIF9uICh2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghVnVlSTE4bi5hdmFpbGFiaWxpdGllcy5udW1iZXJGb3JtYXQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybignQ2Fubm90IGZvcm1hdCBhIE51bWJlciB2YWx1ZSBkdWUgdG8gbm90IHN1cHBvcnRlZCBJbnRsLk51bWJlckZvcm1hdC4nKTtcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWtleSkge1xuICAgIHZhciBuZiA9ICFvcHRpb25zID8gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSkgOiBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmYuZm9ybWF0KHZhbHVlKVxuICB9XG5cbiAgdmFyIGZvcm1hdHRlciA9IHRoaXMuX2dldE51bWJlckZvcm1hdHRlcih2YWx1ZSwgbG9jYWxlLCB0aGlzLmZhbGxiYWNrTG9jYWxlLCB0aGlzLl9nZXROdW1iZXJGb3JtYXRzKCksIGtleSwgb3B0aW9ucyk7XG4gIHZhciByZXQgPSBmb3JtYXR0ZXIgJiYgZm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSk7XG4gIGlmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdChyZXQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvIG51bWJlciBsb2NhbGl6YXRpb24gb2Ygcm9vdDoga2V5ICdcIiArIGtleSArIFwiJy5cIikpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXRoaXMuX3Jvb3QpIHsgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3InKSB9XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4ubih2YWx1ZSwgT2JqZWN0LmFzc2lnbih7fSwgeyBrZXk6IGtleSwgbG9jYWxlOiBsb2NhbGUgfSwgb3B0aW9ucykpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJldCB8fCAnJ1xuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5uID0gZnVuY3Rpb24gbiAodmFsdWUpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgdmFyIGxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIG9wdGlvbnMgPSBudWxsO1xuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGtleSA9IGFyZ3NbMF07XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChhcmdzWzBdKSkge1xuICAgICAgaWYgKGFyZ3NbMF0ubG9jYWxlKSB7XG4gICAgICAgIGxvY2FsZSA9IGFyZ3NbMF0ubG9jYWxlO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3NbMF0ua2V5KSB7XG4gICAgICAgIGtleSA9IGFyZ3NbMF0ua2V5O1xuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IG51bWJlciBmb3JtYXQgb3B0aW9ucyBvbmx5XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmtleXMoYXJnc1swXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICAgIHZhciBvYmo7XG5cbiAgICAgICAgaWYgKG51bWJlckZvcm1hdEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhY2MsICggb2JqID0ge30sIG9ialtrZXldID0gYXJnc1swXVtrZXldLCBvYmogKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBudWxsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBhcmdzWzBdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBsb2NhbGUgPSBhcmdzWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzLl9uKHZhbHVlLCBsb2NhbGUsIGtleSwgb3B0aW9ucylcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9udHAgPSBmdW5jdGlvbiBfbnRwICh2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghVnVlSTE4bi5hdmFpbGFiaWxpdGllcy5udW1iZXJGb3JtYXQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybignQ2Fubm90IGZvcm1hdCB0byBwYXJ0cyBhIE51bWJlciB2YWx1ZSBkdWUgdG8gbm90IHN1cHBvcnRlZCBJbnRsLk51bWJlckZvcm1hdC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBpZiAoIWtleSkge1xuICAgIHZhciBuZiA9ICFvcHRpb25zID8gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSkgOiBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmYuZm9ybWF0VG9QYXJ0cyh2YWx1ZSlcbiAgfVxuXG4gIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9nZXROdW1iZXJGb3JtYXR0ZXIodmFsdWUsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwgdGhpcy5fZ2V0TnVtYmVyRm9ybWF0cygpLCBrZXksIG9wdGlvbnMpO1xuICB2YXIgcmV0ID0gZm9ybWF0dGVyICYmIGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKHZhbHVlKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gZm9ybWF0IG51bWJlciB0byBwYXJ0cyBvZiByb290OiBrZXkgJ1wiICsga2V5ICsgXCInIC5cIikpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXRoaXMuX3Jvb3QpIHsgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3InKSB9XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4uX250cCh2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJldCB8fCBbXVxuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVnVlSTE4bi5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgYXZhaWxhYmlsaXRpZXM7XG4vLyAkRmxvd0ZpeE1lXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlSTE4biwgJ2F2YWlsYWJpbGl0aWVzJywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgaWYgKCFhdmFpbGFiaWxpdGllcykge1xuICAgICAgdmFyIGludGxEZWZpbmVkID0gdHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnO1xuICAgICAgYXZhaWxhYmlsaXRpZXMgPSB7XG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBpbnRsRGVmaW5lZCAmJiB0eXBlb2YgSW50bC5EYXRlVGltZUZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgIG51bWJlckZvcm1hdDogaW50bERlZmluZWQgJiYgdHlwZW9mIEludGwuTnVtYmVyRm9ybWF0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXZhaWxhYmlsaXRpZXNcbiAgfVxufSk7XG5cblZ1ZUkxOG4uaW5zdGFsbCA9IGluc3RhbGw7XG5WdWVJMThuLnZlcnNpb24gPSAnOC4xNS4xJztcblxuZXhwb3J0IGRlZmF1bHQgVnVlSTE4bjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9\n");
- /***/ }),
- /* 10 */
- /*!*********************************************************************!*\
- !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js ***!
- \*********************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = formatLog;function typof(v) {\n var s = Object.prototype.toString.call(v);\n return s.substring(8, s.length - 1);\n}\n\nfunction formatLog() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var msgs = args.map(function (v) {\n var type = Object.prototype.toString.call(v);\n\n if (type.toLowerCase() === '[object object]') {\n try {\n v = '---BEGIN:JSON---' + JSON.stringify(v) + '---END:JSON---';\n } catch (e) {\n v = '[object object]';\n }\n } else {\n if (v === null) {\n v = '---NULL---';\n } else if (v === undefined) {\n v = '---UNDEFINED---';\n } else {\n var vType = typof(v).toUpperCase();\n\n if (vType === 'NUMBER' || vType === 'BOOLEAN') {\n v = '---BEGIN:' + vType + '---' + v + '---END:' + vType + '---';\n } else {\n v = String(v);\n }\n }\n }\n\n return v;\n });\n var msg = '';\n\n if (msgs.length > 1) {\n var lastMsg = msgs.pop();\n msg = msgs.join('---COMMA---');\n\n if (lastMsg.indexOf(' at ') === 0) {\n msg += lastMsg;\n } else {\n msg += '---COMMA---' + lastMsg;\n }\n } else {\n msg = msgs[0];\n }\n\n return msg;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbInR5cG9mIiwidiIsInMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJmb3JtYXRMb2ciLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIkFycmF5IiwiX2tleSIsIm1zZ3MiLCJtYXAiLCJ0eXBlIiwidG9Mb3dlckNhc2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZSIsInVuZGVmaW5lZCIsInZUeXBlIiwidG9VcHBlckNhc2UiLCJTdHJpbmciLCJtc2ciLCJsYXN0TXNnIiwicG9wIiwiam9pbiIsImluZGV4T2YiXSwibWFwcGluZ3MiOiIwRkFBQSxTQUFTQSxLQUFULENBQWdCQyxDQUFoQixFQUFtQjtBQUNqQixNQUFJQyxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsUUFBakIsQ0FBMEJDLElBQTFCLENBQStCTCxDQUEvQixDQUFSO0FBQ0EsU0FBT0MsQ0FBQyxDQUFDSyxTQUFGLENBQVksQ0FBWixFQUFlTCxDQUFDLENBQUNNLE1BQUYsR0FBVyxDQUExQixDQUFQO0FBQ0Q7O0FBRWMsU0FBU0MsU0FBVCxHQUFzQjtBQUNuQyxPQUFLLElBQUlDLElBQUksR0FBR0MsU0FBUyxDQUFDSCxNQUFyQixFQUE2QkksSUFBSSxHQUFHLElBQUlDLEtBQUosQ0FBVUgsSUFBVixDQUFwQyxFQUFxREksSUFBSSxHQUFHLENBQWpFLEVBQW9FQSxJQUFJLEdBQUdKLElBQTNFLEVBQWlGSSxJQUFJLEVBQXJGLEVBQXlGO0FBQ3ZGRixRQUFJLENBQUNFLElBQUQsQ0FBSixHQUFhSCxTQUFTLENBQUNHLElBQUQsQ0FBdEI7QUFDRDs7QUFFRCxNQUFJQyxJQUFJLEdBQUdILElBQUksQ0FBQ0ksR0FBTCxDQUFTLFVBQVVmLENBQVYsRUFBYTtBQUMvQixRQUFJZ0IsSUFBSSxHQUFHZCxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLFFBQWpCLENBQTBCQyxJQUExQixDQUErQkwsQ0FBL0IsQ0FBWDs7QUFFQSxRQUFJZ0IsSUFBSSxDQUFDQyxXQUFMLE9BQXVCLGlCQUEzQixFQUE4QztBQUM1QyxVQUFJO0FBQ0ZqQixTQUFDLEdBQUcscUJBQXFCa0IsSUFBSSxDQUFDQyxTQUFMLENBQWVuQixDQUFmLENBQXJCLEdBQXlDLGdCQUE3QztBQUNELE9BRkQsQ0FFRSxPQUFPb0IsQ0FBUCxFQUFVO0FBQ1ZwQixTQUFDLEdBQUcsaUJBQUo7QUFDRDtBQUNGLEtBTkQsTUFNTztBQUNMLFVBQUlBLENBQUMsS0FBSyxJQUFWLEVBQWdCO0FBQ2RBLFNBQUMsR0FBRyxZQUFKO0FBQ0QsT0FGRCxNQUVPLElBQUlBLENBQUMsS0FBS3FCLFNBQVYsRUFBcUI7QUFDMUJyQixTQUFDLEdBQUcsaUJBQUo7QUFDRCxPQUZNLE1BRUE7QUFDTCxZQUFJc0IsS0FBSyxHQUFHdkIsS0FBSyxDQUFDQyxDQUFELENBQUwsQ0FBU3VCLFdBQVQsRUFBWjs7QUFFQSxZQUFJRCxLQUFLLEtBQUssUUFBVixJQUFzQkEsS0FBSyxLQUFLLFNBQXBDLEVBQStDO0FBQzdDdEIsV0FBQyxHQUFHLGNBQWNzQixLQUFkLEdBQXNCLEtBQXRCLEdBQThCdEIsQ0FBOUIsR0FBa0MsU0FBbEMsR0FBOENzQixLQUE5QyxHQUFzRCxLQUExRDtBQUNELFNBRkQsTUFFTztBQUNMdEIsV0FBQyxHQUFHd0IsTUFBTSxDQUFDeEIsQ0FBRCxDQUFWO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFdBQU9BLENBQVA7QUFDRCxHQTFCVSxDQUFYO0FBMkJBLE1BQUl5QixHQUFHLEdBQUcsRUFBVjs7QUFFQSxNQUFJWCxJQUFJLENBQUNQLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQixRQUFJbUIsT0FBTyxHQUFHWixJQUFJLENBQUNhLEdBQUwsRUFBZDtBQUNBRixPQUFHLEdBQUdYLElBQUksQ0FBQ2MsSUFBTCxDQUFVLGFBQVYsQ0FBTjs7QUFFQSxRQUFJRixPQUFPLENBQUNHLE9BQVIsQ0FBZ0IsTUFBaEIsTUFBNEIsQ0FBaEMsRUFBbUM7QUFDakNKLFNBQUcsSUFBSUMsT0FBUDtBQUNELEtBRkQsTUFFTztBQUNMRCxTQUFHLElBQUksZ0JBQWdCQyxPQUF2QjtBQUNEO0FBQ0YsR0FURCxNQVNPO0FBQ0xELE9BQUcsR0FBR1gsSUFBSSxDQUFDLENBQUQsQ0FBVjtBQUNEOztBQUVELFNBQU9XLEdBQVA7QUFDRCIsImZpbGUiOiIxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHR5cG9mICh2KSB7XHJcbiAgdmFyIHMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodilcclxuICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2cgKCkge1xyXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xyXG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XVxyXG4gIH1cclxuXHJcbiAgdmFyIG1zZ3MgPSBhcmdzLm1hcChmdW5jdGlvbiAodikge1xyXG4gICAgdmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodilcclxuXHJcbiAgICBpZiAodHlwZS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHYgPSAnLS0tQkVHSU46SlNPTi0tLScgKyBKU09OLnN0cmluZ2lmeSh2KSArICctLS1FTkQ6SlNPTi0tLSdcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHYgPSAnW29iamVjdCBvYmplY3RdJ1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHYgPSAnLS0tTlVMTC0tLSdcclxuICAgICAgfSBlbHNlIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB2ID0gJy0tLVVOREVGSU5FRC0tLSdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgdlR5cGUgPSB0eXBvZih2KS50b1VwcGVyQ2FzZSgpXHJcblxyXG4gICAgICAgIGlmICh2VHlwZSA9PT0gJ05VTUJFUicgfHwgdlR5cGUgPT09ICdCT09MRUFOJykge1xyXG4gICAgICAgICAgdiA9ICctLS1CRUdJTjonICsgdlR5cGUgKyAnLS0tJyArIHYgKyAnLS0tRU5EOicgKyB2VHlwZSArICctLS0nXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHYgPSBTdHJpbmcodilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdlxyXG4gIH0pXHJcbiAgdmFyIG1zZyA9ICcnXHJcblxyXG4gIGlmIChtc2dzLmxlbmd0aCA+IDEpIHtcclxuICAgIHZhciBsYXN0TXNnID0gbXNncy5wb3AoKVxyXG4gICAgbXNnID0gbXNncy5qb2luKCctLS1DT01NQS0tLScpXHJcblxyXG4gICAgaWYgKGxhc3RNc2cuaW5kZXhPZignIGF0ICcpID09PSAwKSB7XHJcbiAgICAgIG1zZyArPSBsYXN0TXNnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtc2cgKz0gJy0tLUNPTU1BLS0tJyArIGxhc3RNc2dcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgbXNnID0gbXNnc1swXVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1zZ1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///10\n");
- /***/ }),
- /* 11 */,
- /* 12 */,
- /* 13 */,
- /* 14 */,
- /* 15 */,
- /* 16 */
- /*!********************************************************************!*\
- !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
- \********************************************************************/
- /*! exports provided: default */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return normalizeComponent; });\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 = typeof scriptExports === 'function'\n ? scriptExports.options\n : 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) { // 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 () { injectStyles.call(this, this.$root.$options.shadowRoot) }\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 functioal 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\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16\n");
- /***/ }),
- /* 17 */
- /*!****************************************!*\
- !*** E:/sheverAPP/APP/configs/http.js ***!
- \****************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(__f__, uni) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _env = _interopRequireDefault(__webpack_require__(/*! @/configs/env */ 18));\nvar _whitelist = __webpack_require__(/*! @/configs/whitelist */ 19);\nvar _constant = _interopRequireDefault(__webpack_require__(/*! @/configs/constant */ 20));\nvar _Http = _interopRequireDefault(__webpack_require__(/*! @/utils/Http/Http */ 21));\nvar _md = _interopRequireDefault(__webpack_require__(/*! @/assets/scripts/md5 */ 26));\nvar _store = _interopRequireDefault(__webpack_require__(/*! @/store */ 30));\n\nvar _NavFuncs = __webpack_require__(/*! @/common/NavFuncs */ 33);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};var ownKeys = Object.keys(source);if (typeof Object.getOwnPropertySymbols === 'function') {ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {return Object.getOwnPropertyDescriptor(source, sym).enumerable;}));}ownKeys.forEach(function (key) {_defineProperty(target, key, source[key]);});}return target;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}\n\n// TOKEN request拦截器\nvar add_token_to_request_interceptor = function add_token_to_request_interceptor(res) {\n var url = \"\".concat(res.baseUrl).concat(res.url).replace(_env.default.baseUrl, '');\n var inWhitelist = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {\n for (var _iterator = _whitelist.tokenList[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var whiteUrl = _step.value;\n if (url.indexOf(whiteUrl) > -1) {\n inWhitelist = true;\n return res;\n }\n }\n // in white list\n } catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator.return != null) {_iterator.return();}} finally {if (_didIteratorError) {throw _iteratorError;}}}if (inWhitelist) {\n return res;\n }\n // not in white list\n // const token = uni.getStorageSync(Constants.TOKEN);\n var token = _store.default.state.token;\n // console.log(`token: `, token);\n if (!token) {\n (0, _NavFuncs.redirectToLogin)();\n throw new Error('请登录');\n }\n var header = res.header || {};\n res.header = _objectSpread({ 'Authorization': \"Bearer \".concat(token) }, header);\n return res;\n};\n\n// params加密拦截器\nvar params_encryption_request_interceptor = function params_encryption_request_interceptor(res) {\n var url = \"\".concat(res.baseUrl).concat(res.url).replace(_env.default.baseUrl, '');var\n data = res.data;\n var keys = [],values = [];\n if (data) {var _arr =\n Object.keys(data);for (var _i = 0; _i < _arr.length; _i++) {var key = _arr[_i];\n keys.push(key);\n }\n keys.sort();\n keys.forEach(function (key) {\n var value = data[key];\n if (typeof value === 'string' ||\n typeof value === 'number') {\n // do nothing\n } else if (typeof value === 'boolean') {\n value = \"\".concat(value);\n } else {\n value = '';\n }\n values.push(value);\n });\n }\n var encryptList = [url, keys, values];\n var VALIDATE = (0, _md.default)(JSON.stringify(encryptList));\n // console.log(`encrypt=${JSON.stringify(encryptList)}, MD5=${VALIDATE}`);\n var header = res.header || {};\n res.header = _objectSpread({ VALIDATE: VALIDATE, 'ifLogResponse': '1' }, header);\n return res;\n};\n\n// 基础响应成功拦截器\nvar base_res_resolve_interceptor = function base_res_resolve_interceptor(res) {\n console.log(__f__(\"http ok: \", \" at configs\\\\http.js:70\"));\n if (res.data && !res.data.code) {\n if (res.data && res.data.message) {\n uni.showToast({\n title: res.data.message,\n icon: 'none',\n position: 'bottom' });\n\n }\n return Promise.reject(res);\n }\n return res.data;\n};\n// 基础响应拒绝拦截器\nvar base_res_reject_interceptor = function base_res_reject_interceptor(err) {\n console.log(__f__(\"http error: \", \" at configs\\\\http.js:85\"));\n if (err.data && err.data.message) {\n uni.showToast({\n title: err.data.message,\n icon: 'none',\n position: 'bottom' });\n\n } else {\n var errMsg = err.message || '系统错误';\n if (err && err.errMsg) {\n if (err.errMsg.indexOf('fail timeout') > -1) {\n errMsg = '连接超时';\n } else if (err.errMsg === 'request:fail') {\n errMsg = '网络连接失败';\n }\n }\n uni.showToast({\n title: errMsg,\n icon: 'none',\n position: 'bottom' });\n\n }\n return Promise.reject(err);\n};\n\nvar apis = Object.keys(_env.default.apis).reduce(function (res, key) {\n res[key] = new _Http.default({\n baseUrl: \"\".concat(_env.default.baseUrl).concat(_env.default.apis[key]) });\n\n //res[key].interceptors.request.add(add_token_to_request_interceptor);\n //res[key].interceptors.request.add(params_encryption_request_interceptor);\n res[key].interceptors.response.add(base_res_resolve_interceptor, base_res_reject_interceptor);\n return res;\n}, {});var _default =\n\napis;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 10)[\"default\"], __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlncy9odHRwLmpzIl0sIm5hbWVzIjpbImFkZF90b2tlbl90b19yZXF1ZXN0X2ludGVyY2VwdG9yIiwicmVzIiwidXJsIiwiYmFzZVVybCIsInJlcGxhY2UiLCJjb25maWdzIiwiaW5XaGl0ZWxpc3QiLCJ0b2tlbkxpc3QiLCJ3aGl0ZVVybCIsImluZGV4T2YiLCJ0b2tlbiIsInN0b3JlIiwic3RhdGUiLCJFcnJvciIsImhlYWRlciIsInBhcmFtc19lbmNyeXB0aW9uX3JlcXVlc3RfaW50ZXJjZXB0b3IiLCJkYXRhIiwia2V5cyIsInZhbHVlcyIsIk9iamVjdCIsImtleSIsInB1c2giLCJzb3J0IiwiZm9yRWFjaCIsInZhbHVlIiwiZW5jcnlwdExpc3QiLCJWQUxJREFURSIsIkpTT04iLCJzdHJpbmdpZnkiLCJiYXNlX3Jlc19yZXNvbHZlX2ludGVyY2VwdG9yIiwiY29uc29sZSIsImxvZyIsImNvZGUiLCJtZXNzYWdlIiwidW5pIiwic2hvd1RvYXN0IiwidGl0bGUiLCJpY29uIiwicG9zaXRpb24iLCJQcm9taXNlIiwicmVqZWN0IiwiYmFzZV9yZXNfcmVqZWN0X2ludGVyY2VwdG9yIiwiZXJyIiwiZXJyTXNnIiwiYXBpcyIsInJlZHVjZSIsIkh0dHAiLCJpbnRlcmNlcHRvcnMiLCJyZXNwb25zZSIsImFkZCJdLCJtYXBwaW5ncyI6InlJQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRTs7QUFFQTtBQUNBLElBQU1BLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBbUMsQ0FBVUMsR0FBVixFQUFlO0FBQ3ZELE1BQU1DLEdBQUcsR0FBRyxVQUFHRCxHQUFHLENBQUNFLE9BQVAsU0FBaUJGLEdBQUcsQ0FBQ0MsR0FBckIsRUFBMkJFLE9BQTNCLENBQW1DQyxhQUFRRixPQUEzQyxFQUFvRCxFQUFwRCxDQUFaO0FBQ0EsTUFBSUcsV0FBVyxHQUFHLEtBQWxCLENBRnVEO0FBR3ZELHlCQUFxQkMsb0JBQXJCLDhIQUFnQyxL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Q0FBWVosYUFBUXVDLElBQXBCLEVBQTBCQyxNQUExQixDQUFpQyxVQUFDNUMsR0FBRCxFQUFNbUIsR0FBTixFQUFjO0FBQzNEbkIsS0FBRyxDQUFDbUIsR0FBRCxDQUFILEdBQVcsSUFBSTBCLGFBQUosQ0FBUztBQUNuQjNDLFdBQU8sWUFBS0UsYUFBUUYsT0FBYixTQUF1QkUsYUFBUXVDLElBQVIsQ0FBYXhCLEdBQWIsQ0FBdkIsQ0FEWSxFQUFULENBQVg7O0FBR0E7QUFDQTtBQUNBbkIsS0FBRyxDQUFDbUIsR0FBRCxDQUFILENBQVMyQixZQUFULENBQXNCQyxRQUF0QixDQUErQkMsR0FBL0IsQ0FBbUNwQiw0QkFBbkMsRUFBaUVZLDJCQUFqRTtBQUNBLFNBQU94QyxHQUFQO0FBQ0EsQ0FSWSxFQVFWLEVBUlUsQ0FBYixDOztBQVVlMkMsSSIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWdzIGZyb20gJ0AvY29uZmlncy9lbnYnO1xyXG5pbXBvcnQgeyB0b2tlbkxpc3QgfSBmcm9tICdAL2NvbmZpZ3Mvd2hpdGVsaXN0JztcclxuaW1wb3J0IENvbnN0YW50cyBmcm9tICdAL2NvbmZpZ3MvY29uc3RhbnQnO1xyXG5pbXBvcnQgSHR0cCBmcm9tICdAL3V0aWxzL0h0dHAvSHR0cCc7XHJcbmltcG9ydCBNRDUgZnJvbSAnQC9hc3NldHMvc2NyaXB0cy9tZDUnO1xyXG5pbXBvcnQgc3RvcmUgZnJvbSAnQC9zdG9yZSc7XHJcblxyXG5pbXBvcnQgeyByZWRpcmVjdFRvTG9naW4gfSBmcm9tICdAL2NvbW1vbi9OYXZGdW5jcyc7XHJcblxyXG4vLyBUT0tFTiByZXF1ZXN05oum5oiq5ZmoXHJcbmNvbnN0IGFkZF90b2tlbl90b19yZXF1ZXN0X2ludGVyY2VwdG9yID0gZnVuY3Rpb24gKHJlcykge1xyXG5cdGNvbnN0IHVybCA9IGAke3Jlcy5iYXNlVXJsfSR7cmVzLnVybH1gLnJlcGxhY2UoY29uZmlncy5iYXNlVXJsLCAnJyk7XHJcblx0bGV0IGluV2hpdGVsaXN0ID0gZmFsc2U7XHJcblx0Zm9yIChsZXQgd2hpdGVVcmwgb2YgdG9rZW5MaXN0KSB7XHJcblx0XHRpZiAodXJsLmluZGV4T2Yod2hpdGVVcmwpID4gLTEpIHtcclxuXHRcdFx0aW5XaGl0ZWxpc3QgPSB0cnVlO1xyXG5cdFx0XHRyZXR1cm4gcmVzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyBpbiB3aGl0ZSBsaXN0XHJcblx0aWYgKGluV2hpdGVsaXN0KSB7XHJcblx0XHRyZXR1cm4gcmVzO1xyXG5cdH1cclxuXHQvLyBub3QgaW4gd2hpdGUgbGlzdFxyXG5cdC8vIGNvbnN0IHRva2VuID0gdW5pLmdldFN0b3JhZ2VTeW5jKENvbnN0YW50cy5UT0tFTik7XHJcblx0Y29uc3QgdG9rZW4gPSBzdG9yZS5zdGF0ZS50b2tlbjtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG9rZW46IGAsIHRva2VuKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICByZWRpcmVjdFRvTG9naW4oKTtcclxuXHRcdHRocm93IG5ldyBFcnJvcign6K+355m75b2VJyk7XHJcbiAgICB9XHJcblx0Y29uc3QgaGVhZGVyID0gcmVzLmhlYWRlciB8fCB7fTtcclxuXHRyZXMuaGVhZGVyID0geyAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLCAuLi5oZWFkZXIgfTtcclxuXHRyZXR1cm4gcmVzO1xyXG59XHJcblxyXG4vLyBwYXJhbXPliqDlr4bmi6bmiKrlmahcclxuY29uc3QgcGFyYW1zX2VuY3J5cHRpb25fcmVxdWVzdF9pbnRlcmNlcHRvciA9IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRjb25zdCB1cmwgPSBgJHtyZXMuYmFzZVVybH0ke3Jlcy51cmx9YC5yZXBsYWNlKGNvbmZpZ3MuYmFzZVVybCwgJycpO1xyXG5cdGNvbnN0IHsgZGF0YSB9ID0gcmVzO1xyXG5cdGNvbnN0IGtleXMgPSBbXSwgdmFsdWVzID0gW107XHJcblx0aWYgKGRhdGEpIHtcclxuXHRcdGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xyXG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcclxuXHRcdH1cclxuXHRcdGtleXMuc29ydCgpO1xyXG5cdFx0a2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGxldCB2YWx1ZSA9IGRhdGFba2V5XTtcclxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcclxuXHRcdFx0XHR8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcblx0XHRcdFx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHZhbHVlID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGNvbnN0IGVuY3J5cHRMaXN0ID0gW3VybCwga2V5cywgdmFsdWVzXTtcclxuXHRjb25zdCBWQUxJREFURSA9IE1ENShKU09OLnN0cmluZ2lmeShlbmNyeXB0TGlzdCkpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBlbmNyeXB0PSR7SlNPTi5zdHJpbmdpZnkoZW5jcnlwdExpc3QpfSwgTUQ1PSR7VkFMSURBVEV9YCk7XHJcblx0Y29uc3QgaGVhZGVyID0gcmVzLmhlYWRlciB8fCB7fTtcclxuXHRyZXMuaGVhZGVyID0geyBWQUxJREFURSwgJ2lmTG9nUmVzcG9uc2UnOiAnMScsIC4uLmhlYWRlciB9O1xyXG5cdHJldHVybiByZXM7XHJcbn1cclxuXHJcbi8vIOWfuuehgOWTjeW6lOaIkOWKn+aLpuaIquWZqFxyXG5jb25zdCBiYXNlX3Jlc19yZXNvbHZlX2ludGVyY2VwdG9yID0gZnVuY3Rpb24gKHJlcykge1xyXG5cdGNvbnNvbGUubG9nKGBodHRwIG9rOiBgKTtcclxuICAgIGlmIChyZXMuZGF0YSAmJiAhcmVzLmRhdGEuY29kZSkge1xyXG4gICAgICAgIGlmIChyZXMuZGF0YSAmJiByZXMuZGF0YS5tZXNzYWdlKSB7XHJcbiAgICBcdFx0dW5pLnNob3dUb2FzdCh7XHJcbiAgICBcdFx0XHR0aXRsZTogcmVzLmRhdGEubWVzc2FnZSxcclxuXHRcdFx0XHRpY29uOidub25lJyxcclxuICAgIFx0XHRcdHBvc2l0aW9uOidib3R0b20nXHJcbiAgICBcdFx0fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXMpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzLmRhdGE7XHJcbn1cclxuLy8g5Z+656GA5ZON5bqU5ouS57ud5oum5oiq5ZmoXHJcbmNvbnN0IGJhc2VfcmVzX3JlamVjdF9pbnRlcmNlcHRvciA9IGZ1bmN0aW9uIChlcnIpIHtcclxuXHRjb25zb2xlLmxvZyhgaHR0cCBlcnJvcjogYCk7XHJcbiAgICBpZiAoZXJyLmRhdGEgJiYgZXJyLmRhdGEubWVzc2FnZSkge1xyXG4gICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHR0aXRsZTogZXJyLmRhdGEubWVzc2FnZSxcclxuXHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRwb3NpdGlvbjonYm90dG9tJ1xyXG5cdFx0fSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cdFx0bGV0IGVyck1zZyA9IGVyci5tZXNzYWdlIHx8ICfns7vnu5/plJnor68nO1xyXG5cdFx0aWYgKGVyciAmJiBlcnIuZXJyTXNnKSB7XHJcblx0XHRcdGlmIChlcnIuZXJyTXNnLmluZGV4T2YoJ2ZhaWwgdGltZW91dCcpID4gLTEpIHtcclxuXHRcdFx0XHRlcnJNc2cgPSAn6L+e5o6l6LaF5pe2JztcclxuXHRcdFx0fSBlbHNlIGlmIChlcnIuZXJyTXNnID09PSAncmVxdWVzdDpmYWlsJykge1xyXG5cdFx0XHRcdGVyck1zZyA9ICfnvZHnu5zov57mjqXlpLHotKUnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdHRpdGxlOiBlcnJNc2csXHJcblx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0cG9zaXRpb246J2JvdHRvbSdcclxuXHRcdH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcclxufVxyXG5cclxuY29uc3QgYXBpcyA9IE9iamVjdC5rZXlzKGNvbmZpZ3MuYXBpcykucmVkdWNlKChyZXMsIGtleSkgPT4ge1xyXG5cdHJlc1trZXldID0gbmV3IEh0dHAoe1xyXG5cdFx0YmFzZVVybDogYCR7Y29uZmlncy5iYXNlVXJsfSR7Y29uZmlncy5hcGlzW2tleV19YFxyXG5cdH0pO1xyXG5cdC8vcmVzW2tleV0uaW50ZXJjZXB0b3JzLnJlcXVlc3QuYWRkKGFkZF90b2tlbl90b19yZXF1ZXN0X2ludGVyY2VwdG9yKTtcclxuXHQvL3Jlc1trZXldLmludGVyY2VwdG9ycy5yZXF1ZXN0LmFkZChwYXJhbXNfZW5jcnlwdGlvbl9yZXF1ZXN0X2ludGVyY2VwdG9yKTtcclxuXHRyZXNba2V5XS5pbnRlcmNlcHRvcnMucmVzcG9uc2UuYWRkKGJhc2VfcmVzX3Jlc29sdmVfaW50ZXJjZXB0b3IsIGJhc2VfcmVzX3JlamVjdF9pbnRlcmNlcHRvcik7XHJcblx0cmV0dXJuIHJlcztcclxufSwge30pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgYXBpczsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///17\n");
- /***/ }),
- /* 18 */
- /*!***************************************!*\
- !*** E:/sheverAPP/APP/configs/env.js ***!
- \***************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var configs = {\n baseUrl: 'localhost',\n isProduction: false,\n apis: {\n sz: '' } };\n\n\n\nif (true) {\n // 测试环境\n configs = Object.assign(configs, {\n baseUrl: 'https://app.sunzee.com.cn/ShenzeeServer'\n // baseUrl: 'http://127.0.0.1:8090',\n });\n}\n\nif (false) {}var _default =\n\nconfigs;exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlncy9lbnYuanMiXSwibmFtZXMiOlsiY29uZmlncyIsImJhc2VVcmwiLCJpc1Byb2R1Y3Rpb24iLCJhcGlzIiwic3oiLCJwcm9jZXNzIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoidUZBQUEsSUFBSUEsT0FBTyxHQUFHO0FBQ2JDLFNBQU8sRUFBRSxXQURJO0FBRWJDLGNBQVksRUFBRSxLQUZEO0FBR2JDLE1BQUksRUFBRTtBQUNMQyxNQUFFLEVBQUUsRUFEQyxFQUhPLEVBQWQ7Ozs7QUFRQSxJQUFJQyxJQUFKLEVBQTRDO0FBQzNDO0FBQ0FMLFNBQU8sR0FBR00sTUFBTSxDQUFDQyxNQUFQLENBQWNQLE9BQWQsRUFBdUI7QUFDaENDLFdBQU8sRUFBRTtBQUNUO0FBRmdDLEdBQXZCLENBQVY7QUFJQTs7QUFFRCxJQUFJSSxLQUFKLEVBQTJDLEU7O0FBUTVCTCxPIiwiZmlsZSI6IjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IGNvbmZpZ3MgPSB7XHJcblx0YmFzZVVybDogJ2xvY2FsaG9zdCcsXHJcblx0aXNQcm9kdWN0aW9uOiBmYWxzZSxcclxuXHRhcGlzOiB7XHJcblx0XHRzejogJycsXHJcblx0fVxyXG59O1xyXG5cclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XHJcblx0Ly8g5rWL6K+V546v5aKDXHJcblx0Y29uZmlncyA9IE9iamVjdC5hc3NpZ24oY29uZmlncywge1xyXG5cdFx0YmFzZVVybDogJ2h0dHBzOi8vYXBwLnN1bnplZS5jb20uY24vU2hlbnplZVNlcnZlcicsXHJcblx0XHQvLyBiYXNlVXJsOiAnaHR0cDovLzEyNy4wLjAuMTo4MDkwJyxcclxuXHR9KTtcclxufVxyXG5cclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIC8vIOeUn+S6p+eOr+Wig1xyXG5cdGNvbmZpZ3MgPSBPYmplY3QuYXNzaWduKGNvbmZpZ3MsIHtcclxuXHRcdGJhc2VVcmw6ICdodHRwczovL2FwcC5zdW56ZWUuY29tLmNuL1NoZW56ZWVTZXJ2ZXInLFxyXG5cdFx0Ly8gaXNQcm9kdWN0aW9uOiB0cnVlLFxyXG5cdH0pO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18\n");
- /***/ }),
- /* 19 */
- /*!*********************************************!*\
- !*** E:/sheverAPP/APP/configs/whitelist.js ***!
- \*********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.tokenList = void 0;var tokenList = [\n'User/HrPotUser/userAppLogin',\n'User/HrPotUser/userLogin'];exports.tokenList = tokenList;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlncy93aGl0ZWxpc3QuanMiXSwibmFtZXMiOlsidG9rZW5MaXN0Il0sIm1hcHBpbmdzIjoieUZBQUEsSUFBTUEsU0FBUyxHQUFHO0FBQ2pCLDZCQURpQjtBQUVqQiwwQkFGaUIsQ0FBbEIsQyIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHRva2VuTGlzdCA9IFtcclxuXHQnVXNlci9IclBvdFVzZXIvdXNlckFwcExvZ2luJyxcclxuXHQnVXNlci9IclBvdFVzZXIvdXNlckxvZ2luJ1xyXG5dO1xyXG5cclxuZXhwb3J0IHtcclxuXHR0b2tlbkxpc3QsXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///19\n");
- /***/ }),
- /* 20 */
- /*!********************************************!*\
- !*** E:/sheverAPP/APP/configs/constant.js ***!
- \********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0; // 常量, 一些key什么的\nvar _default =\n{\n // 登录后后台返回的TOKEN在storage中的key\n TOKEN: 'TOKEN_STORAGE_KEY' };exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlncy9jb25zdGFudC5qcyJdLCJuYW1lcyI6WyJUT0tFTiJdLCJtYXBwaW5ncyI6IndGQUFBOztBQUVlO0FBQ2Q7QUFDQUEsT0FBSyxFQUFFLG1CQUZPLEUiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDluLjph48sIOS4gOS6m2tleeS7gOS5iOeahFxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG5cdC8vIOeZu+W9leWQjuWQjuWPsOi/lOWbnueahFRPS0VO5Zyoc3RvcmFnZeS4reeahGtleVxyXG5cdFRPS0VOOiAnVE9LRU5fU1RPUkFHRV9LRVknLFxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///20\n");
- /***/ }),
- /* 21 */
- /*!*******************************************!*\
- !*** E:/sheverAPP/APP/utils/Http/Http.js ***!
- \*******************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _InterceptorManager = _interopRequireDefault(__webpack_require__(/*! @/utils/Http/InterceptorManager */ 22));\nvar _dispatchRequest = _interopRequireDefault(__webpack_require__(/*! @/utils/Http/dispatchRequest */ 25));\nvar _lodash = _interopRequireDefault(__webpack_require__(/*! @/assets/scripts/lodash */ 23));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}\n\nfunction Http(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new _InterceptorManager.default(),\n response: new _InterceptorManager.default() };\n\n}\n\nHttp.prototype.request = function (config) {\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = Object.assign(this.defaults, config);\n config.method = config.method ? config.method.toUpperCase() : 'GET';\n\n var promise = Promise.resolve(config);\n var chain = [_dispatchRequest.default, undefined];\n\n this.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.resolve, interceptor.reject);\n });\n\n this.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.resolve, interceptor.reject);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n_lodash.default.forEach(['get', 'delete'], function (method) {\n Http.prototype[method] = function (url, config) {\n var params = config && config.params;\n if (params) {\n config.data = params;\n }\n return this.request(Object.assign(config || {}, {\n method: method.toUpperCase(),\n url: url,\n dataType: 'json' }));\n\n };\n});\n\n_lodash.default.forEach(['post', 'put'], function (method) {\n Http.prototype[method] = function (url, data, config) {\n return this.request(Object.assign(config || {}, {\n method: method.toUpperCase(),\n url: url,\n data: data,\n dataType: 'json' }));\n\n };\n});var _default =\n\nHttp;exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdXRpbHMvSHR0cC9IdHRwLmpzIl0sIm5hbWVzIjpbIkh0dHAiLCJpbnN0YW5jZUNvbmZpZyIsImRlZmF1bHRzIiwiaW50ZXJjZXB0b3JzIiwicmVxdWVzdCIsIkludGVyY2VwdG9yTWFuYWdlciIsInJlc3BvbnNlIiwicHJvdG90eXBlIiwiY29uZmlnIiwiYXJndW1lbnRzIiwidXJsIiwiT2JqZWN0IiwiYXNzaWduIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGFpbiIsImRpc3BhdGNoUmVxdWVzdCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZWplY3QiLCJwdXNoIiwibGVuZ3RoIiwidGhlbiIsInNoaWZ0IiwiXyIsInBhcmFtcyIsImRhdGEiLCJkYXRhVHlwZSJdLCJtYXBwaW5ncyI6InVGQUFBO0FBQ0E7QUFDQSw2Rjs7QUFFQSxTQUFTQSxJQUFULENBQWNDLGNBQWQsRUFBOEI7QUFDN0IsT0FBS0MsUUFBTCxHQUFnQkQsY0FBaEI7QUFDQSxPQUFLRSxZQUFMLEdBQW9CO0FBQ25CQyxXQUFPLEVBQUUsSUFBSUMsMkJBQUosRUFEVTtBQUVuQkMsWUFBUSxFQUFFLElBQUlELDJCQUFKLEVBRlMsRUFBcEI7O0FBSUE7O0FBRURMLElBQUksQ0FBQ08sU0FBTCxDQUFlSCxPQUFmLEdBQXlCLFVBQVVJLE1BQVYsRUFBa0I7QUFDMUMsTUFBSSxPQUFPQSxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQy9CQSxVQUFNLEdBQUdDLFNBQVMsQ0FBQyxDQUFELENBQVQsSUFBZ0IsRUFBekI7QUFDQUQsVUFBTSxDQUFDRSxHQUFQLEdBQWFELFNBQVMsQ0FBQyxDQUFELENBQXRCO0FBQ0EsR0FIRCxNQUdPO0FBQ05ELFVBQU0sR0FBR0EsTUFBTSxJQUFJLEVBQW5CO0FBQ0E7O0FBRURBLFFBQU0sR0FBR0csTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS1YsUUFBbkIsRUFBNkJNLE1BQTdCLENBQVQ7QUFDQUEsUUFBTSxDQUFDSyxNQUFQLEdBQWdCTCxNQUFNLENBQUNLLE1BQVAsR0FBZ0JMLE1BQU0sQ0FBQ0ssTUFBUCxDQUFjQyxXQUFkLEVBQWhCLEdBQThDLEtBQTlEOztBQUVBLE1BQUlDLE9BQU8sR0FBR0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCVCxNQUFoQixDQUFkO0FBQ0EsTUFBTVUsS0FBSyxHQUFHLENBQUNDLHdCQUFELEVBQWtCQyxTQUFsQixDQUFkOztBQUVBLE9BQUtqQixZQUFMLENBQWtCQyxPQUFsQixDQUEwQmlCLE9BQTFCLENBQWtDLFVBQUFDLFdBQVcsRUFBSTtBQUNoREosU0FBSyxDQUFDSyxPQUFOLENBQWNELFdBQVcsQ0FBQ0wsT0FBMUIsRUFBbUNLLFdBQVcsQ0FBQ0UsTUFBL0M7QUFDQSxHQUZEOztBQUlBLE9BQUtyQixZQUFMLENBQWtCRyxRQUFsQixDQUEyQmUsT0FBM0IsQ0FBbUMsVUFBQUMsV0FBVyxFQUFJO0FBQ2pESixTQUFLLENBQUNPLElBQU4sQ0FBV0gsV0FBVyxDQUFDTCxPQUF2QixFQUFnQ0ssV0FBVyxDQUFDRSxNQUE1QztBQUNBLEdBRkQ7O0FBSUEsU0FBTU4sS0FBSyxDQUFDUSxNQUFaLEVBQW9CO0FBQ25CWCxXQUFPLEdBQUdBLE9BQU8sQ0FBQ1ksSUFBUixDQUFhVCxLQUFLLENBQUNVLEtBQU4sRUFBYixFQUE0QlYsS0FBSyxDQUFDVSxLQUFOLEVBQTVCLENBQVY7QUFDQTs7QUFFRCxTQUFPYixPQUFQO0FBQ0EsQ0EzQkQ7O0FBNkJBYyxnQkFBRVIsT0FBRixDQUFVLENBQUMsS0FBRCxFQUFRLFFBQVIsQ0FBVixFQUE2QixVQUFDUixNQUFELEVBQVk7QUFDeENiLE1BQUksQ0FBQ08sU0FBTCxDQUFlTSxNQUFmLElBQXlCLFVBQVVILEdBQVYsRUFBZUYsTUFBZixFQUF1QjtBQUMvQyxRQUFNc0IsTUFBTSxHQUFHdEIsTUFBTSxJQUFJQSxNQUFNLENBQUNzQixNQUFoQztBQUNBLFFBQUlBLE1BQUosRUFBWTtBQUNYdEIsWUFBTSxDQUFDdUIsSUFBUCxHQUFjRCxNQUFkO0FBQ0E7QUFDRCxXQUFPLEtBQUsxQixPQUFMLENBQWFPLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSixNQUFNLElBQUksRUFBeEIsRUFBNEI7QUFDL0NLLFlBQU0sRUFBRUEsTUFBTSxDQUFDQyxXQUFQLEVBRHVDO0FBRS9DSixTQUFHLEVBQUhBLEdBRitDO0FBRy9Dc0IsY0FBUSxFQUFFLE1BSHFDLEVBQTVCLENBQWIsQ0FBUDs7QUFLQSxHQVZEO0FBV0EsQ0FaRDs7QUFjQUgsZ0JBQUVSLE9BQUYsQ0FBVSxDQUFDLE1BQUQsRUFBUyxLQUFULENBQVYsRUFBMkIsVUFBQ1IsTUFBRCxFQUFZO0FBQ3RDYixNQUFJLENBQUNPLFNBQUwsQ0FBZU0sTUFBZixJQUF5QixVQUFVSCxHQUFWLEVBQWVxQixJQUFmLEVBQXFCdkIsTUFBckIsRUFBNkI7QUFDckQsV0FBTyxLQUFLSixPQUFMLENBQWFPLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSixNQUFNLElBQUksRUFBeEIsRUFBNEI7QUFDL0NLLFlBQU0sRUFBRUEsTUFBTSxDQUFDQyxXQUFQLEVBRHVDO0FBRS9DSixTQUFHLEVBQUhBLEdBRitDO0FBRy9DcUIsVUFBSSxFQUFKQSxJQUgrQztBQUkvQ0MsY0FBUSxFQUFFLE1BSnFDLEVBQTVCLENBQWIsQ0FBUDs7QUFNQSxHQVBEO0FBUUEsQ0FURCxFOztBQVdlaEMsSSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnQC91dGlscy9IdHRwL0ludGVyY2VwdG9yTWFuYWdlcidcclxuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICdAL3V0aWxzL0h0dHAvZGlzcGF0Y2hSZXF1ZXN0JztcclxuaW1wb3J0IF8gZnJvbSAnQC9hc3NldHMvc2NyaXB0cy9sb2Rhc2gnO1xyXG5cclxuZnVuY3Rpb24gSHR0cChpbnN0YW5jZUNvbmZpZykge1xyXG5cdHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcclxuXHR0aGlzLmludGVyY2VwdG9ycyA9IHtcclxuXHRcdHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcclxuXHRcdHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcclxuXHR9O1xyXG59XHJcblxyXG5IdHRwLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG5cdGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xyXG5cdFx0Y29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xyXG5cdFx0Y29uZmlnLnVybCA9IGFyZ3VtZW50c1swXTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y29uZmlnID0gY29uZmlnIHx8IHt9O1xyXG5cdH1cclxuXHRcclxuXHRjb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XHJcblx0Y29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QgPyBjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCkgOiAnR0VUJztcclxuXHRcclxuXHRsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xyXG5cdGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcclxuXHRcclxuXHR0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goaW50ZXJjZXB0b3IgPT4ge1xyXG5cdFx0Y2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5yZXNvbHZlLCBpbnRlcmNlcHRvci5yZWplY3QpO1xyXG5cdH0pO1xyXG5cdFxyXG5cdHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goaW50ZXJjZXB0b3IgPT4ge1xyXG5cdFx0Y2hhaW4ucHVzaChpbnRlcmNlcHRvci5yZXNvbHZlLCBpbnRlcmNlcHRvci5yZWplY3QpO1xyXG5cdH0pO1xyXG5cdFxyXG5cdHdoaWxlKGNoYWluLmxlbmd0aCkge1xyXG5cdFx0cHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcclxuXHR9XHJcblx0XHJcblx0cmV0dXJuIHByb21pc2U7XHJcbn1cclxuXHJcbl8uZm9yRWFjaChbJ2dldCcsICdkZWxldGUnXSwgKG1ldGhvZCkgPT4ge1xyXG5cdEh0dHAucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAodXJsLCBjb25maWcpIHtcclxuXHRcdGNvbnN0IHBhcmFtcyA9IGNvbmZpZyAmJiBjb25maWcucGFyYW1zO1xyXG5cdFx0aWYgKHBhcmFtcykge1xyXG5cdFx0XHRjb25maWcuZGF0YSA9IHBhcmFtcztcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoT2JqZWN0LmFzc2lnbihjb25maWcgfHwge30sIHtcclxuXHRcdFx0bWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcclxuXHRcdFx0dXJsLFxyXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nXHJcblx0XHR9KSk7XHJcblx0fVxyXG59KTtcclxuXHJcbl8uZm9yRWFjaChbJ3Bvc3QnLCAncHV0J10sIChtZXRob2QpID0+IHtcclxuXHRIdHRwLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKHVybCwgZGF0YSwgY29uZmlnKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oY29uZmlnIHx8IHt9LCB7XHJcblx0XHRcdG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXHJcblx0XHRcdHVybCxcclxuXHRcdFx0ZGF0YSxcclxuXHRcdFx0ZGF0YVR5cGU6ICdqc29uJ1xyXG5cdFx0fSkpO1xyXG5cdH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIdHRwOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///21\n");
- /***/ }),
- /* 22 */
- /*!*********************************************************!*\
- !*** E:/sheverAPP/APP/utils/Http/InterceptorManager.js ***!
- \*********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _lodash = _interopRequireDefault(__webpack_require__(/*! @/assets/scripts/lodash */ 23));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\nInterceptorManager.prototype.add = function (resolveFn, rejectFn) {\n this.handlers.push({\n resolve: resolveFn,\n reject: rejectFn });\n\n return this.handlers.length - 1;\n};\n\nInterceptorManager.prototype.remove = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\nInterceptorManager.prototype.forEach = function (fn) {\n _lodash.default.forEach(this.handlers, function (handler) {\n if (handler !== null) {\n fn(handler);\n }\n });\n};var _default =\n\nInterceptorManager;exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdXRpbHMvSHR0cC9JbnRlcmNlcHRvck1hbmFnZXIuanMiXSwibmFtZXMiOlsiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJwcm90b3R5cGUiLCJhZGQiLCJyZXNvbHZlRm4iLCJyZWplY3RGbiIsInB1c2giLCJyZXNvbHZlIiwicmVqZWN0IiwibGVuZ3RoIiwicmVtb3ZlIiwiaWQiLCJmb3JFYWNoIiwiZm4iLCJfIiwiaGFuZGxlciJdLCJtYXBwaW5ncyI6InVGQUFBLDZGOztBQUVBLFNBQVNBLGtCQUFULEdBQThCO0FBQzdCLE9BQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQTs7QUFFREQsa0JBQWtCLENBQUNFLFNBQW5CLENBQTZCQyxHQUE3QixHQUFtQyxVQUFVQyxTQUFWLEVBQXFCQyxRQUFyQixFQUErQjtBQUNqRSxPQUFLSixRQUFMLENBQWNLLElBQWQsQ0FBbUI7QUFDbEJDLFdBQU8sRUFBRUgsU0FEUztBQUVsQkksVUFBTSxFQUFFSCxRQUZVLEVBQW5COztBQUlBLFNBQU8sS0FBS0osUUFBTCxDQUFjUSxNQUFkLEdBQXVCLENBQTlCO0FBQ0EsQ0FORDs7QUFRQVQsa0JBQWtCLENBQUNFLFNBQW5CLENBQTZCUSxNQUE3QixHQUFzQyxVQUFVQyxFQUFWLEVBQWM7QUFDbkQsTUFBSSxLQUFLVixRQUFMLENBQWNVLEVBQWQsQ0FBSixFQUF1QjtBQUN0QixTQUFLVixRQUFMLENBQWNVLEVBQWQsSUFBb0IsSUFBcEI7QUFDQTtBQUNELENBSkQ7O0FBTUFYLGtCQUFrQixDQUFDRSxTQUFuQixDQUE2QlUsT0FBN0IsR0FBdUMsVUFBVUMsRUFBVixFQUFjO0FBQ3BEQyxrQkFBRUYsT0FBRixDQUFVLEtBQUtYLFFBQWYsRUFBeUIsVUFBQ2MsT0FBRCxFQUFhO0FBQ3JDLFFBQUlBLE9BQU8sS0FBSyxJQUFoQixFQUFzQjtBQUNyQkYsUUFBRSxDQUFDRSxPQUFELENBQUY7QUFDQTtBQUNELEdBSkQ7QUFLQSxDQU5ELEM7O0FBUWVmLGtCIiwiZmlsZSI6IjIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnQC9hc3NldHMvc2NyaXB0cy9sb2Rhc2gnO1xyXG5cclxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xyXG5cdHRoaXMuaGFuZGxlcnMgPSBbXTtcclxufVxyXG5cclxuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocmVzb2x2ZUZuLCByZWplY3RGbikge1xyXG5cdHRoaXMuaGFuZGxlcnMucHVzaCh7XHJcblx0XHRyZXNvbHZlOiByZXNvbHZlRm4sXHJcblx0XHRyZWplY3Q6IHJlamVjdEZuXHJcblx0fSk7XHJcblx0cmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcclxufVxyXG5cclxuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaWQpIHtcclxuXHRpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcclxuXHRcdHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcclxuXHR9XHJcbn1cclxuXHJcbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChmbikge1xyXG5cdF8uZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCAoaGFuZGxlcikgPT4ge1xyXG5cdFx0aWYgKGhhbmRsZXIgIT09IG51bGwpIHtcclxuXHRcdFx0Zm4oaGFuZGxlcik7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22\n");
- /***/ }),
- /* 23 */
- /*!*************************************************!*\
- !*** E:/sheverAPP/APP/assets/scripts/lodash.js ***!
- \*************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__; /**\r\n * @license\r\n * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE\r\n */\n;(function () {function n(n, t, r) {switch (r.length) {case 0:return n.call(t);case 1:return n.call(t, r[0]);case 2:return n.call(t, r[0], r[1]);case 3:return n.call(t, r[0], r[1], r[2]);}return n.apply(t, r);}function t(n, t, r, e) {for (var u = -1, i = null == n ? 0 : n.length; ++u < i;) {var o = n[u];t(e, o, r(o), n);}return e;}function r(n, t) {for (var r = -1, e = null == n ? 0 : n.length; ++r < e && false !== t(n[r], r, n);) {;}return n;}function e(n, t) {for (var r = null == n ? 0 : n.length; r-- && false !== t(n[r], r, n);) {;}return n;}function u(n, t) {for (var r = -1, e = null == n ? 0 : n.length; ++r < e;) {if (!t(n[r], r, n)) return false;}\n return true;}function i(n, t) {for (var r = -1, e = null == n ? 0 : n.length, u = 0, i = []; ++r < e;) {var o = n[r];t(o, r, n) && (i[u++] = o);}return i;}function o(n, t) {return !(null == n || !n.length) && -1 < v(n, t, 0);}function f(n, t, r) {for (var e = -1, u = null == n ? 0 : n.length; ++e < u;) {if (r(t, n[e])) return true;}return false;}function c(n, t) {for (var r = -1, e = null == n ? 0 : n.length, u = Array(e); ++r < e;) {u[r] = t(n[r], r, n);}return u;}function a(n, t) {for (var r = -1, e = t.length, u = n.length; ++r < e;) {n[u + r] = t[r];}return n;}function l(n, t, r, e) {var u = -1,i = null == n ? 0 : n.length;for (e && i && (r = n[++u]); ++u < i;) {r = t(r, n[u], u, n);}\n return r;}function s(n, t, r, e) {var u = null == n ? 0 : n.length;for (e && u && (r = n[--u]); u--;) {r = t(r, n[u], u, n);}return r;}function h(n, t) {for (var r = -1, e = null == n ? 0 : n.length; ++r < e;) {if (t(n[r], r, n)) return true;}return false;}function p(n, t, r) {var e;return r(n, function (n, r, u) {if (t(n, r, u)) return e = r, false;}), e;}function _(n, t, r, e) {var u = n.length;for (r += e ? 1 : -1; e ? r-- : ++r < u;) {if (t(n[r], r, n)) return r;}return -1;}function v(n, t, r) {if (t === t) n: {--r;for (var e = n.length; ++r < e;) {if (n[r] === t) {n = r;break n;}}n = -1;} else n = _(n, d, r);return n;}function g(n, t, r, e) {\n --r;for (var u = n.length; ++r < u;) {if (e(n[r], t)) return r;}return -1;}function d(n) {return n !== n;}function y(n, t) {var r = null == n ? 0 : n.length;return r ? m(n, t) / r : F;}function b(n) {return function (t) {return null == t ? T : t[n];};}function x(n) {return function (t) {return null == n ? T : n[t];};}function j(n, t, r, e, u) {return u(n, function (n, u, i) {r = e ? (e = false, n) : t(r, n, u, i);}), r;}function w(n, t) {var r = n.length;for (n.sort(t); r--;) {n[r] = n[r].c;}return n;}function m(n, t) {for (var r, e = -1, u = n.length; ++e < u;) {var i = t(n[e]);i !== T && (r = r === T ? i : r + i);}return r;\n }function A(n, t) {for (var r = -1, e = Array(n); ++r < n;) {e[r] = t(r);}return e;}function k(n, t) {return c(t, function (t) {return [t, n[t]];});}function E(n) {return function (t) {return n(t);};}function S(n, t) {return c(t, function (t) {return n[t];});}function O(n, t) {return n.has(t);}function I(n, t) {for (var r = -1, e = n.length; ++r < e && -1 < v(t, n[r], 0);) {;}return r;}function R(n, t) {for (var r = n.length; r-- && -1 < v(t, n[r], 0);) {;}return r;}function z(n) {return \"\\\\\" + Ln[n];}function W(n) {var t = -1,r = Array(n.size);return n.forEach(function (n, e) {r[++t] = [e, n];\n }), r;}function U(n, t) {return function (r) {return n(t(r));};}function B(n, t) {for (var r = -1, e = n.length, u = 0, i = []; ++r < e;) {var o = n[r];o !== t && \"__lodash_placeholder__\" !== o || (n[r] = \"__lodash_placeholder__\", i[u++] = r);}return i;}function L(n) {var t = -1,r = Array(n.size);return n.forEach(function (n) {r[++t] = n;}), r;}function C(n) {var t = -1,r = Array(n.size);return n.forEach(function (n) {r[++t] = [n, n];}), r;}function D(n) {if (Rn.test(n)) {for (var t = On.lastIndex = 0; On.test(n);) {++t;}n = t;} else n = Qn(n);return n;}function M(n) {return Rn.test(n) ? n.match(On) || [] : n.split(\"\");\n }var T,$ = 1 / 0,F = NaN,N = [[\"ary\", 128], [\"bind\", 1], [\"bindKey\", 2], [\"curry\", 8], [\"curryRight\", 16], [\"flip\", 512], [\"partial\", 32], [\"partialRight\", 64], [\"rearg\", 256]],P = /\\b__p\\+='';/g,Z = /\\b(__p\\+=)''\\+/g,q = /(__e\\(.*?\\)|\\b__t\\))\\+'';/g,V = /&(?:amp|lt|gt|quot|#39);/g,K = /[&<>\"']/g,G = RegExp(V.source),H = RegExp(K.source),J = /<%-([\\s\\S]+?)%>/g,Y = /<%([\\s\\S]+?)%>/g,Q = /<%=([\\s\\S]+?)%>/g,X = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,nn = /^\\w*$/,tn = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,rn = /[\\\\^$.*+?()[\\]{}|]/g,en = RegExp(rn.source),un = /^\\s+|\\s+$/g,on = /^\\s+/,fn = /\\s+$/,cn = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,an = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ln = /,? & /,sn = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,hn = /\\\\(\\\\)?/g,pn = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,_n = /\\w*$/,vn = /^[-+]0x[0-9a-f]+$/i,gn = /^0b[01]+$/i,dn = /^\\[object .+?Constructor\\]$/,yn = /^0o[0-7]+$/i,bn = /^(?:0|[1-9]\\d*)$/,xn = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,jn = /($^)/,wn = /['\\n\\r\\u2028\\u2029\\\\]/g,mn = \"[\\\\ufe0e\\\\ufe0f]?(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?(?:\\\\u200d(?:[^\\\\ud800-\\\\udfff]|(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff])[\\\\ufe0e\\\\ufe0f]?(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?)*\",An = \"(?:[\\\\u2700-\\\\u27bf]|(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff])\" + mn,kn = \"(?:[^\\\\ud800-\\\\udfff][\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]?|[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]|[\\\\ud800-\\\\udfff])\",En = RegExp(\"['\\u2019]\", \"g\"),Sn = RegExp(\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\", \"g\"),On = RegExp(\"\\\\ud83c[\\\\udffb-\\\\udfff](?=\\\\ud83c[\\\\udffb-\\\\udfff])|\" + kn + mn, \"g\"),In = RegExp([\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]?[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+(?:['\\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000]|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]|$)|(?:[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])+(?:['\\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000]|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde](?:[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])|$)|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]?(?:[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])+(?:['\\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]+(?:['\\u2019](?:D|LL|M|RE|S|T|VE))?|\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])|\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])|\\\\d+\", An].join(\"|\"), \"g\"),Rn = RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\"),zn = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn = \"Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout\".split(\" \"),Un = {};\n Un[\"[object Float32Array]\"] = Un[\"[object Float64Array]\"] = Un[\"[object Int8Array]\"] = Un[\"[object Int16Array]\"] = Un[\"[object Int32Array]\"] = Un[\"[object Uint8Array]\"] = Un[\"[object Uint8ClampedArray]\"] = Un[\"[object Uint16Array]\"] = Un[\"[object Uint32Array]\"] = true, Un[\"[object Arguments]\"] = Un[\"[object Array]\"] = Un[\"[object ArrayBuffer]\"] = Un[\"[object Boolean]\"] = Un[\"[object DataView]\"] = Un[\"[object Date]\"] = Un[\"[object Error]\"] = Un[\"[object Function]\"] = Un[\"[object Map]\"] = Un[\"[object Number]\"] = Un[\"[object Object]\"] = Un[\"[object RegExp]\"] = Un[\"[object Set]\"] = Un[\"[object String]\"] = Un[\"[object WeakMap]\"] = false;\n var Bn = {};Bn[\"[object Arguments]\"] = Bn[\"[object Array]\"] = Bn[\"[object ArrayBuffer]\"] = Bn[\"[object DataView]\"] = Bn[\"[object Boolean]\"] = Bn[\"[object Date]\"] = Bn[\"[object Float32Array]\"] = Bn[\"[object Float64Array]\"] = Bn[\"[object Int8Array]\"] = Bn[\"[object Int16Array]\"] = Bn[\"[object Int32Array]\"] = Bn[\"[object Map]\"] = Bn[\"[object Number]\"] = Bn[\"[object Object]\"] = Bn[\"[object RegExp]\"] = Bn[\"[object Set]\"] = Bn[\"[object String]\"] = Bn[\"[object Symbol]\"] = Bn[\"[object Uint8Array]\"] = Bn[\"[object Uint8ClampedArray]\"] = Bn[\"[object Uint16Array]\"] = Bn[\"[object Uint32Array]\"] = true,\n Bn[\"[object Error]\"] = Bn[\"[object Function]\"] = Bn[\"[object WeakMap]\"] = false;var Ln = { \"\\\\\": \"\\\\\", \"'\": \"'\", \"\\n\": \"n\", \"\\r\": \"r\", \"\\u2028\": \"u2028\", \"\\u2029\": \"u2029\" },Cn = parseFloat,Dn = parseInt,Mn = typeof global == \"object\" && global && global.Object === Object && global,Tn = typeof self == \"object\" && self && self.Object === Object && self,$n = Mn || Tn || Function(\"return this\")(),Fn = true && exports && !exports.nodeType && exports,Nn = Fn && typeof module == \"object\" && module && !module.nodeType && module,Pn = Nn && Nn.exports === Fn,Zn = Pn && Mn.process,qn = function () {\n try {var n = Nn && Nn.require && Nn.require(\"util\").types;return n ? n : Zn && Zn.binding && Zn.binding(\"util\");} catch (n) {}}(),Vn = qn && qn.isArrayBuffer,Kn = qn && qn.isDate,Gn = qn && qn.isMap,Hn = qn && qn.isRegExp,Jn = qn && qn.isSet,Yn = qn && qn.isTypedArray,Qn = b(\"length\"),Xn = x({ \"\\xc0\": \"A\", \"\\xc1\": \"A\", \"\\xc2\": \"A\", \"\\xc3\": \"A\", \"\\xc4\": \"A\", \"\\xc5\": \"A\", \"\\xe0\": \"a\", \"\\xe1\": \"a\", \"\\xe2\": \"a\", \"\\xe3\": \"a\", \"\\xe4\": \"a\", \"\\xe5\": \"a\", \"\\xc7\": \"C\", \"\\xe7\": \"c\", \"\\xd0\": \"D\", \"\\xf0\": \"d\", \"\\xc8\": \"E\", \"\\xc9\": \"E\", \"\\xca\": \"E\", \"\\xcb\": \"E\", \"\\xe8\": \"e\", \"\\xe9\": \"e\", \"\\xea\": \"e\", \"\\xeb\": \"e\",\n \"\\xcc\": \"I\", \"\\xcd\": \"I\", \"\\xce\": \"I\", \"\\xcf\": \"I\", \"\\xec\": \"i\", \"\\xed\": \"i\", \"\\xee\": \"i\", \"\\xef\": \"i\", \"\\xd1\": \"N\", \"\\xf1\": \"n\", \"\\xd2\": \"O\", \"\\xd3\": \"O\", \"\\xd4\": \"O\", \"\\xd5\": \"O\", \"\\xd6\": \"O\", \"\\xd8\": \"O\", \"\\xf2\": \"o\", \"\\xf3\": \"o\", \"\\xf4\": \"o\", \"\\xf5\": \"o\", \"\\xf6\": \"o\", \"\\xf8\": \"o\", \"\\xd9\": \"U\", \"\\xda\": \"U\", \"\\xdb\": \"U\", \"\\xdc\": \"U\", \"\\xf9\": \"u\", \"\\xfa\": \"u\", \"\\xfb\": \"u\", \"\\xfc\": \"u\", \"\\xdd\": \"Y\", \"\\xfd\": \"y\", \"\\xff\": \"y\", \"\\xc6\": \"Ae\", \"\\xe6\": \"ae\", \"\\xde\": \"Th\", \"\\xfe\": \"th\", \"\\xdf\": \"ss\", \"\\u0100\": \"A\", \"\\u0102\": \"A\", \"\\u0104\": \"A\", \"\\u0101\": \"a\", \"\\u0103\": \"a\", \"\\u0105\": \"a\",\n \"\\u0106\": \"C\", \"\\u0108\": \"C\", \"\\u010A\": \"C\", \"\\u010C\": \"C\", \"\\u0107\": \"c\", \"\\u0109\": \"c\", \"\\u010B\": \"c\", \"\\u010D\": \"c\", \"\\u010E\": \"D\", \"\\u0110\": \"D\", \"\\u010F\": \"d\", \"\\u0111\": \"d\", \"\\u0112\": \"E\", \"\\u0114\": \"E\", \"\\u0116\": \"E\", \"\\u0118\": \"E\", \"\\u011A\": \"E\", \"\\u0113\": \"e\", \"\\u0115\": \"e\", \"\\u0117\": \"e\", \"\\u0119\": \"e\", \"\\u011B\": \"e\", \"\\u011C\": \"G\", \"\\u011E\": \"G\", \"\\u0120\": \"G\", \"\\u0122\": \"G\", \"\\u011D\": \"g\", \"\\u011F\": \"g\", \"\\u0121\": \"g\", \"\\u0123\": \"g\", \"\\u0124\": \"H\", \"\\u0126\": \"H\", \"\\u0125\": \"h\", \"\\u0127\": \"h\", \"\\u0128\": \"I\", \"\\u012A\": \"I\", \"\\u012C\": \"I\", \"\\u012E\": \"I\", \"\\u0130\": \"I\",\n \"\\u0129\": \"i\", \"\\u012B\": \"i\", \"\\u012D\": \"i\", \"\\u012F\": \"i\", \"\\u0131\": \"i\", \"\\u0134\": \"J\", \"\\u0135\": \"j\", \"\\u0136\": \"K\", \"\\u0137\": \"k\", \"\\u0138\": \"k\", \"\\u0139\": \"L\", \"\\u013B\": \"L\", \"\\u013D\": \"L\", \"\\u013F\": \"L\", \"\\u0141\": \"L\", \"\\u013A\": \"l\", \"\\u013C\": \"l\", \"\\u013E\": \"l\", \"\\u0140\": \"l\", \"\\u0142\": \"l\", \"\\u0143\": \"N\", \"\\u0145\": \"N\", \"\\u0147\": \"N\", \"\\u014A\": \"N\", \"\\u0144\": \"n\", \"\\u0146\": \"n\", \"\\u0148\": \"n\", \"\\u014B\": \"n\", \"\\u014C\": \"O\", \"\\u014E\": \"O\", \"\\u0150\": \"O\", \"\\u014D\": \"o\", \"\\u014F\": \"o\", \"\\u0151\": \"o\", \"\\u0154\": \"R\", \"\\u0156\": \"R\", \"\\u0158\": \"R\", \"\\u0155\": \"r\", \"\\u0157\": \"r\",\n \"\\u0159\": \"r\", \"\\u015A\": \"S\", \"\\u015C\": \"S\", \"\\u015E\": \"S\", \"\\u0160\": \"S\", \"\\u015B\": \"s\", \"\\u015D\": \"s\", \"\\u015F\": \"s\", \"\\u0161\": \"s\", \"\\u0162\": \"T\", \"\\u0164\": \"T\", \"\\u0166\": \"T\", \"\\u0163\": \"t\", \"\\u0165\": \"t\", \"\\u0167\": \"t\", \"\\u0168\": \"U\", \"\\u016A\": \"U\", \"\\u016C\": \"U\", \"\\u016E\": \"U\", \"\\u0170\": \"U\", \"\\u0172\": \"U\", \"\\u0169\": \"u\", \"\\u016B\": \"u\", \"\\u016D\": \"u\", \"\\u016F\": \"u\", \"\\u0171\": \"u\", \"\\u0173\": \"u\", \"\\u0174\": \"W\", \"\\u0175\": \"w\", \"\\u0176\": \"Y\", \"\\u0177\": \"y\", \"\\u0178\": \"Y\", \"\\u0179\": \"Z\", \"\\u017B\": \"Z\", \"\\u017D\": \"Z\", \"\\u017A\": \"z\", \"\\u017C\": \"z\", \"\\u017E\": \"z\", \"\\u0132\": \"IJ\",\n \"\\u0133\": \"ij\", \"\\u0152\": \"Oe\", \"\\u0153\": \"oe\", \"\\u0149\": \"'n\", \"\\u017F\": \"s\" }),nt = x({ \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\" }),tt = x({ \"&\": \"&\", \"<\": \"<\", \">\": \">\", \""\": '\"', \"'\": \"'\" }),rt = function x(mn) {function An(n) {if (yu(n) && !ff(n) && !(n instanceof Ln)) {if (n instanceof On) return n;if (oi.call(n, \"__wrapped__\")) return Fe(n);}return new On(n);}function kn() {}function On(n, t) {this.__wrapped__ = n, this.__actions__ = [], this.__chain__ = !!t, this.__index__ = 0, this.__values__ = T;}function Ln(n) {\n this.__wrapped__ = n, this.__actions__ = [], this.__dir__ = 1, this.__filtered__ = false, this.__iteratees__ = [], this.__takeCount__ = 4294967295, this.__views__ = [];}function Mn(n) {var t = -1,r = null == n ? 0 : n.length;for (this.clear(); ++t < r;) {var e = n[t];this.set(e[0], e[1]);}}function Tn(n) {var t = -1,r = null == n ? 0 : n.length;for (this.clear(); ++t < r;) {var e = n[t];this.set(e[0], e[1]);}}function Fn(n) {var t = -1,r = null == n ? 0 : n.length;for (this.clear(); ++t < r;) {var e = n[t];this.set(e[0], e[1]);}}function Nn(n) {var t = -1,r = null == n ? 0 : n.length;for (this.__data__ = new Fn(); ++t < r;) {this.add(n[t]);}\n }function Zn(n) {this.size = (this.__data__ = new Tn(n)).size;}function qn(n, t) {var r,e = ff(n),u = !e && of(n),i = !e && !u && af(n),o = !e && !u && !i && _f(n),u = (e = e || u || i || o) ? A(n.length, ni) : [],f = u.length;for (r in n) {!t && !oi.call(n, r) || e && (\"length\" == r || i && (\"offset\" == r || \"parent\" == r) || o && (\"buffer\" == r || \"byteLength\" == r || \"byteOffset\" == r) || Se(r, f)) || u.push(r);}return u;}function Qn(n) {var t = n.length;return t ? n[ir(0, t - 1)] : T;}function et(n, t) {return De(Lr(n), pt(t, 0, n.length));}function ut(n) {return De(Lr(n));}function it(n, t, r) {(r === T || lu(n[t], r)) && (r !== T || t in n) || st(n, t, r);\n }function ot(n, t, r) {var e = n[t];oi.call(n, t) && lu(e, r) && (r !== T || t in n) || st(n, t, r);}function ft(n, t) {for (var r = n.length; r--;) {if (lu(n[r][0], t)) return r;}return -1;}function ct(n, t, r, e) {return uo(n, function (n, u, i) {t(e, n, r(n), i);}), e;}function at(n, t) {return n && Cr(t, Wu(t), n);}function lt(n, t) {return n && Cr(t, Uu(t), n);}function st(n, t, r) {\"__proto__\" == t && Ai ? Ai(n, t, { configurable: true, enumerable: true, value: r, writable: true }) : n[t] = r;}function ht(n, t) {for (var r = -1, e = t.length, u = Ku(e), i = null == n; ++r < e;) {u[r] = i ? T : Ru(n, t[r]);}return u;\n }function pt(n, t, r) {return n === n && (r !== T && (n = n <= r ? n : r), t !== T && (n = n >= t ? n : t)), n;}function _t(n, t, e, u, i, o) {var f,c = 1 & t,a = 2 & t,l = 4 & t;if (e && (f = i ? e(n, u, i, o) : e(n)), f !== T) return f;if (!du(n)) return n;if (u = ff(n)) {if (f = me(n), !c) return Lr(n, f);} else {var s = vo(n),h = \"[object Function]\" == s || \"[object GeneratorFunction]\" == s;if (af(n)) return Ir(n, c);if (\"[object Object]\" == s || \"[object Arguments]\" == s || h && !i) {if (f = a || h ? {} : Ae(n), !c) return a ? Mr(n, lt(f, n)) : Dr(n, at(f, n));} else {if (!Bn[s]) return i ? n : {};f = ke(n, s, c);}}if (o || (o = new Zn()),\n i = o.get(n)) return i;if (o.set(n, f), pf(n)) return n.forEach(function (r) {f.add(_t(r, t, e, r, n, o));}), f;if (sf(n)) return n.forEach(function (r, u) {f.set(u, _t(r, t, e, u, n, o));}), f;var a = l ? a ? ve : _e : a ? Uu : Wu,p = u ? T : a(n);return r(p || n, function (r, u) {p && (u = r, r = n[u]), ot(f, u, _t(r, t, e, u, n, o));}), f;}function vt(n) {var t = Wu(n);return function (r) {return gt(r, n, t);};}function gt(n, t, r) {var e = r.length;if (null == n) return !e;for (n = Qu(n); e--;) {var u = r[e],i = t[u],o = n[u];if (o === T && !(u in n) || !i(o)) return false;}return true;}function dt(n, t, r) {if (typeof n != \"function\") throw new ti(\"Expected a function\");\n return bo(function () {n.apply(T, r);}, t);}function yt(n, t, r, e) {var u = -1,i = o,a = true,l = n.length,s = [],h = t.length;if (!l) return s;r && (t = c(t, E(r))), e ? (i = f, a = false) : 200 <= t.length && (i = O, a = false, t = new Nn(t));n: for (; ++u < l;) {var p = n[u],_ = null == r ? p : r(p),p = e || 0 !== p ? p : 0;if (a && _ === _) {for (var v = h; v--;) {if (t[v] === _) continue n;}s.push(p);} else i(t, _, e) || s.push(p);}return s;}function bt(n, t) {var r = true;return uo(n, function (n, e, u) {return r = !!t(n, e, u);}), r;}function xt(n, t, r) {for (var e = -1, u = n.length; ++e < u;) {var i = n[e],o = t(i);if (null != o && (f === T ? o === o && !wu(o) : r(o, f))) var f = o,c = i;\n }return c;}function jt(n, t) {var r = [];return uo(n, function (n, e, u) {t(n, e, u) && r.push(n);}), r;}function wt(n, t, r, e, u) {var i = -1,o = n.length;for (r || (r = Ee), u || (u = []); ++i < o;) {var f = n[i];0 < t && r(f) ? 1 < t ? wt(f, t - 1, r, e, u) : a(u, f) : e || (u[u.length] = f);}return u;}function mt(n, t) {return n && oo(n, t, Wu);}function At(n, t) {return n && fo(n, t, Wu);}function kt(n, t) {return i(t, function (t) {return _u(n[t]);});}function Et(n, t) {t = Sr(t, n);for (var r = 0, e = t.length; null != n && r < e;) {n = n[Me(t[r++])];}return r && r == e ? n : T;}function St(n, t, r) {return t = t(n),\n ff(n) ? t : a(t, r(n));}function Ot(n) {if (null == n) return n === T ? \"[object Undefined]\" : \"[object Null]\";if (mi && mi in Qu(n)) {var t = oi.call(n, mi),r = n[mi];try {n[mi] = T;var e = true;} catch (n) {}var u = ai.call(n);e && (t ? n[mi] = r : delete n[mi]), n = u;} else n = ai.call(n);return n;}function It(n, t) {return n > t;}function Rt(n, t) {return null != n && oi.call(n, t);}function zt(n, t) {return null != n && t in Qu(n);}function Wt(n, t, r) {for (var e = r ? f : o, u = n[0].length, i = n.length, a = i, l = Ku(i), s = 1 / 0, h = []; a--;) {var p = n[a];a && t && (p = c(p, E(t))), s = Ci(p.length, s),\n l[a] = !r && (t || 120 <= u && 120 <= p.length) ? new Nn(a && p) : T;}var p = n[0],_ = -1,v = l[0];n: for (; ++_ < u && h.length < s;) {var g = p[_],d = t ? t(g) : g,g = r || 0 !== g ? g : 0;if (v ? !O(v, d) : !e(h, d, r)) {for (a = i; --a;) {var y = l[a];if (y ? !O(y, d) : !e(n[a], d, r)) continue n;}v && v.push(d), h.push(g);}}return h;}function Ut(n, t, r, e) {return mt(n, function (n, u, i) {t(e, r(n), u, i);}), e;}function Bt(t, r, e) {return r = Sr(r, t), t = 2 > r.length ? t : Et(t, hr(r, 0, -1)), r = null == t ? t : t[Me(Ve(r))], null == r ? T : n(r, t, e);}function Lt(n) {return yu(n) && \"[object Arguments]\" == Ot(n);}function Ct(n) {\n return yu(n) && \"[object ArrayBuffer]\" == Ot(n);}function Dt(n) {return yu(n) && \"[object Date]\" == Ot(n);}function Mt(n, t, r, e, u) {if (n === t) return true;if (null == n || null == t || !yu(n) && !yu(t)) return n !== n && t !== t;n: {var i = ff(n),o = ff(t),f = i ? \"[object Array]\" : vo(n),c = o ? \"[object Array]\" : vo(t),f = \"[object Arguments]\" == f ? \"[object Object]\" : f,c = \"[object Arguments]\" == c ? \"[object Object]\" : c,a = \"[object Object]\" == f,o = \"[object Object]\" == c;if ((c = f == c) && af(n)) {if (!af(t)) {t = false;break n;}i = true, a = false;}if (c && !a) u || (u = new Zn()), t = i || _f(n) ? se(n, t, r, e, Mt, u) : he(n, t, f, r, e, Mt, u);else {\n if (!(1 & r) && (i = a && oi.call(n, \"__wrapped__\"), f = o && oi.call(t, \"__wrapped__\"), i || f)) {n = i ? n.value() : n, t = f ? t.value() : t, u || (u = new Zn()), t = Mt(n, t, r, e, u);break n;}if (c) {t: if (u || (u = new Zn()), i = 1 & r, f = _e(n), o = f.length, c = _e(t).length, o == c || i) {for (a = o; a--;) {var l = f[a];if (!(i ? l in t : oi.call(t, l))) {t = false;break t;}}if ((c = u.get(n)) && u.get(t)) t = c == t;else {c = true, u.set(n, t), u.set(t, n);for (var s = i; ++a < o;) {var l = f[a],h = n[l],p = t[l];if (e) var _ = i ? e(p, h, l, t, n, u) : e(h, p, l, n, t, u);if (_ === T ? h !== p && !Mt(h, p, r, e, u) : !_) {c = false;break;}s || (s = \"constructor\" == l);\n }c && !s && (r = n.constructor, e = t.constructor, r != e && \"constructor\" in n && \"constructor\" in t && !(typeof r == \"function\" && r instanceof r && typeof e == \"function\" && e instanceof e) && (c = false)), u.delete(n), u.delete(t), t = c;}} else t = false;} else t = false;}}return t;}function Tt(n) {return yu(n) && \"[object Map]\" == vo(n);}function $t(n, t, r, e) {var u = r.length,i = u,o = !e;if (null == n) return !i;for (n = Qu(n); u--;) {var f = r[u];if (o && f[2] ? f[1] !== n[f[0]] : !(f[0] in n)) return false;}for (; ++u < i;) {var f = r[u],c = f[0],a = n[c],l = f[1];if (o && f[2]) {if (a === T && !(c in n)) return false;\n } else {if (f = new Zn(), e) var s = e(a, l, c, n, t, f);if (s === T ? !Mt(l, a, 3, e, f) : !s) return false;}}return true;}function Ft(n) {return !(!du(n) || ci && ci in n) && (_u(n) ? hi : dn).test(Te(n));}function Nt(n) {return yu(n) && \"[object RegExp]\" == Ot(n);}function Pt(n) {return yu(n) && \"[object Set]\" == vo(n);}function Zt(n) {return yu(n) && gu(n.length) && !!Un[Ot(n)];}function qt(n) {return typeof n == \"function\" ? n : null == n ? $u : typeof n == \"object\" ? ff(n) ? Jt(n[0], n[1]) : Ht(n) : Zu(n);}function Vt(n) {if (!ze(n)) return Bi(n);var t,r = [];for (t in Qu(n)) {oi.call(n, t) && \"constructor\" != t && r.push(t);}\n return r;}function Kt(n, t) {return n < t;}function Gt(n, t) {var r = -1,e = su(n) ? Ku(n.length) : [];return uo(n, function (n, u, i) {e[++r] = t(n, u, i);}), e;}function Ht(n) {var t = xe(n);return 1 == t.length && t[0][2] ? We(t[0][0], t[0][1]) : function (r) {return r === n || $t(r, n, t);};}function Jt(n, t) {return Ie(n) && t === t && !du(t) ? We(Me(n), t) : function (r) {var e = Ru(r, n);return e === T && e === t ? zu(r, n) : Mt(t, e, 3);};}function Yt(n, t, r, e, u) {n !== t && oo(t, function (i, o) {if (du(i)) {u || (u = new Zn());var f = u,c = Be(n, o),a = Be(t, o),l = f.get(a);if (!l) {var l = e ? e(c, a, o + \"\", n, t, f) : T,s = l === T;\n if (s) {var h = ff(a),p = !h && af(a),_ = !h && !p && _f(a),l = a;h || p || _ ? ff(c) ? l = c : hu(c) ? l = Lr(c) : p ? (s = false, l = Ir(a, true)) : _ ? (s = false, l = zr(a, true)) : l = [] : xu(a) || of(a) ? (l = c, of(c) ? l = Ou(c) : du(c) && !_u(c) || (l = Ae(a))) : s = false;}s && (f.set(a, l), Yt(l, a, r, e, f), f.delete(a));}it(n, o, l);} else f = e ? e(Be(n, o), i, o + \"\", n, t, u) : T, f === T && (f = i), it(n, o, f);}, Uu);}function Qt(n, t) {var r = n.length;if (r) return t += 0 > t ? r : 0, Se(t, r) ? n[t] : T;}function Xt(n, t, r) {var e = -1;return t = c(t.length ? t : [$u], E(ye())), n = Gt(n, function (n, r, u) {return { a: c(t, function (t) {return t(n);}),\n b: ++e, c: n };}), w(n, function (n, t) {var e;n: {e = -1;for (var u = n.a, i = t.a, o = u.length, f = r.length; ++e < o;) {var c = Wr(u[e], i[e]);if (c) {if (e >= f) {e = c;break n;}e = c * (\"desc\" == r[e] ? -1 : 1);break n;}}e = n.b - t.b;}return e;});}function nr(n, t) {return tr(n, t, function (t, r) {return zu(n, r);});}function tr(n, t, r) {for (var e = -1, u = t.length, i = {}; ++e < u;) {var o = t[e],f = Et(n, o);r(f, o) && lr(i, Sr(o, n), f);}return i;}function rr(n) {return function (t) {return Et(t, n);};}function er(n, t, r, e) {var u = e ? g : v,i = -1,o = t.length,f = n;for (n === t && (t = Lr(t)), r && (f = c(n, E(r))); ++i < o;) {for (var a = 0, l = t[i], l = r ? r(l) : l; -1 < (a = u(f, l, a, e));) {f !== n && xi.call(f, a, 1),\n xi.call(n, a, 1);}}return n;}function ur(n, t) {for (var r = n ? t.length : 0, e = r - 1; r--;) {var u = t[r];if (r == e || u !== i) {var i = u;Se(u) ? xi.call(n, u, 1) : xr(n, u);}}return n;}function ir(n, t) {return n + Ii(Ti() * (t - n + 1));}function or(n, t) {var r = \"\";if (!n || 1 > t || 9007199254740991 < t) return r;do {t % 2 && (r += n), (t = Ii(t / 2)) && (n += n);} while (t);return r;}function fr(n, t) {return xo(Ue(n, t, $u), n + \"\");}function cr(n) {return Qn(Lu(n));}function ar(n, t) {var r = Lu(n);return De(r, pt(t, 0, r.length));}function lr(n, t, r, e) {if (!du(n)) return n;t = Sr(t, n);for (var u = -1, i = t.length, o = i - 1, f = n; null != f && ++u < i;) {\n var c = Me(t[u]),a = r;if (u != o) {var l = f[c],a = e ? e(l, c, f) : T;a === T && (a = du(l) ? l : Se(t[u + 1]) ? [] : {});}ot(f, c, a), f = f[c];}return n;}function sr(n) {return De(Lu(n));}function hr(n, t, r) {var e = -1,u = n.length;for (0 > t && (t = -t > u ? 0 : u + t), r = r > u ? u : r, 0 > r && (r += u), u = t > r ? 0 : r - t >>> 0, t >>>= 0, r = Ku(u); ++e < u;) {r[e] = n[e + t];}return r;}function pr(n, t) {var r;return uo(n, function (n, e, u) {return r = t(n, e, u), !r;}), !!r;}function _r(n, t, r) {var e = 0,u = null == n ? e : n.length;if (typeof t == \"number\" && t === t && 2147483647 >= u) {for (; e < u;) {var i = e + u >>> 1,o = n[i];null !== o && !wu(o) && (r ? o <= t : o < t) ? e = i + 1 : u = i;\n }return u;}return vr(n, t, $u, r);}function vr(n, t, r, e) {t = r(t);for (var u = 0, i = null == n ? 0 : n.length, o = t !== t, f = null === t, c = wu(t), a = t === T; u < i;) {var l = Ii((u + i) / 2),s = r(n[l]),h = s !== T,p = null === s,_ = s === s,v = wu(s);(o ? e || _ : a ? _ && (e || h) : f ? _ && h && (e || !p) : c ? _ && h && !p && (e || !v) : p || v ? 0 : e ? s <= t : s < t) ? u = l + 1 : i = l;}return Ci(i, 4294967294);}function gr(n, t) {for (var r = -1, e = n.length, u = 0, i = []; ++r < e;) {var o = n[r],f = t ? t(o) : o;if (!r || !lu(f, c)) {var c = f;i[u++] = 0 === o ? 0 : o;}}return i;}function dr(n) {return typeof n == \"number\" ? n : wu(n) ? F : +n;}function yr(n) {\n if (typeof n == \"string\") return n;if (ff(n)) return c(n, yr) + \"\";if (wu(n)) return ro ? ro.call(n) : \"\";var t = n + \"\";return \"0\" == t && 1 / n == -$ ? \"-0\" : t;}function br(n, t, r) {var e = -1,u = o,i = n.length,c = true,a = [],l = a;if (r) c = false, u = f;else if (200 <= i) {if (u = t ? null : so(n)) return L(u);c = false, u = O, l = new Nn();} else l = t ? [] : a;n: for (; ++e < i;) {var s = n[e],h = t ? t(s) : s,s = r || 0 !== s ? s : 0;if (c && h === h) {for (var p = l.length; p--;) {if (l[p] === h) continue n;}t && l.push(h), a.push(s);} else u(l, h, r) || (l !== a && l.push(h), a.push(s));}return a;}function xr(n, t) {return t = Sr(t, n),\n n = 2 > t.length ? n : Et(n, hr(t, 0, -1)), null == n || delete n[Me(Ve(t))];}function jr(n, t, r, e) {for (var u = n.length, i = e ? u : -1; (e ? i-- : ++i < u) && t(n[i], i, n);) {;}return r ? hr(n, e ? 0 : i, e ? i + 1 : u) : hr(n, e ? i + 1 : 0, e ? u : i);}function wr(n, t) {var r = n;return r instanceof Ln && (r = r.value()), l(t, function (n, t) {return t.func.apply(t.thisArg, a([n], t.args));}, r);}function mr(n, t, r) {var e = n.length;if (2 > e) return e ? br(n[0]) : [];for (var u = -1, i = Ku(e); ++u < e;) {for (var o = n[u], f = -1; ++f < e;) {f != u && (i[u] = yt(i[u] || o, n[f], t, r));}}return br(wt(i, 1), t, r);}function Ar(n, t, r) {\n for (var e = -1, u = n.length, i = t.length, o = {}; ++e < u;) {r(o, n[e], e < i ? t[e] : T);}return o;}function kr(n) {return hu(n) ? n : [];}function Er(n) {return typeof n == \"function\" ? n : $u;}function Sr(n, t) {return ff(n) ? n : Ie(n, t) ? [n] : jo(Iu(n));}function Or(n, t, r) {var e = n.length;return r = r === T ? e : r, !t && r >= e ? n : hr(n, t, r);}function Ir(n, t) {if (t) return n.slice();var r = n.length,r = gi ? gi(r) : new n.constructor(r);return n.copy(r), r;}function Rr(n) {var t = new n.constructor(n.byteLength);return new vi(t).set(new vi(n)), t;}function zr(n, t) {return new n.constructor(t ? Rr(n.buffer) : n.buffer, n.byteOffset, n.length);\n }function Wr(n, t) {if (n !== t) {var r = n !== T,e = null === n,u = n === n,i = wu(n),o = t !== T,f = null === t,c = t === t,a = wu(t);if (!f && !a && !i && n > t || i && o && c && !f && !a || e && o && c || !r && c || !u) return 1;if (!e && !i && !a && n < t || a && r && u && !e && !i || f && r && u || !o && u || !c) return -1;}return 0;}function Ur(n, t, r, e) {var u = -1,i = n.length,o = r.length,f = -1,c = t.length,a = Li(i - o, 0),l = Ku(c + a);for (e = !e; ++f < c;) {l[f] = t[f];}for (; ++u < o;) {(e || u < i) && (l[r[u]] = n[u]);}for (; a--;) {l[f++] = n[u++];}return l;}function Br(n, t, r, e) {var u = -1,i = n.length,o = -1,f = r.length,c = -1,a = t.length,l = Li(i - f, 0),s = Ku(l + a);\n for (e = !e; ++u < l;) {s[u] = n[u];}for (l = u; ++c < a;) {s[l + c] = t[c];}for (; ++o < f;) {(e || u < i) && (s[l + r[o]] = n[u++]);}return s;}function Lr(n, t) {var r = -1,e = n.length;for (t || (t = Ku(e)); ++r < e;) {t[r] = n[r];}return t;}function Cr(n, t, r, e) {var u = !r;r || (r = {});for (var i = -1, o = t.length; ++i < o;) {var f = t[i],c = e ? e(r[f], n[f], f, r, n) : T;c === T && (c = n[f]), u ? st(r, f, c) : ot(r, f, c);}return r;}function Dr(n, t) {return Cr(n, po(n), t);}function Mr(n, t) {return Cr(n, _o(n), t);}function Tr(n, r) {return function (e, u) {var i = ff(e) ? t : ct,o = r ? r() : {};return i(e, n, ye(u, 2), o);\n };}function $r(n) {return fr(function (t, r) {var e = -1,u = r.length,i = 1 < u ? r[u - 1] : T,o = 2 < u ? r[2] : T,i = 3 < n.length && typeof i == \"function\" ? (u--, i) : T;for (o && Oe(r[0], r[1], o) && (i = 3 > u ? T : i, u = 1), t = Qu(t); ++e < u;) {(o = r[e]) && n(t, o, e, i);}return t;});}function Fr(n, t) {return function (r, e) {if (null == r) return r;if (!su(r)) return n(r, e);for (var u = r.length, i = t ? u : -1, o = Qu(r); (t ? i-- : ++i < u) && false !== e(o[i], i, o);) {;}return r;};}function Nr(n) {return function (t, r, e) {var u = -1,i = Qu(t);e = e(t);for (var o = e.length; o--;) {var f = e[n ? o : ++u];if (false === r(i[f], f, i)) break;\n }return t;};}function Pr(n, t, r) {function e() {return (this && this !== $n && this instanceof e ? i : n).apply(u ? r : this, arguments);}var u = 1 & t,i = Vr(n);return e;}function Zr(n) {return function (t) {t = Iu(t);var r = Rn.test(t) ? M(t) : T,e = r ? r[0] : t.charAt(0);return t = r ? Or(r, 1).join(\"\") : t.slice(1), e[n]() + t;};}function qr(n) {return function (t) {return l(Mu(Du(t).replace(En, \"\")), n, \"\");};}function Vr(n) {return function () {var t = arguments;switch (t.length) {case 0:return new n();case 1:return new n(t[0]);case 2:return new n(t[0], t[1]);case 3:\n return new n(t[0], t[1], t[2]);case 4:return new n(t[0], t[1], t[2], t[3]);case 5:return new n(t[0], t[1], t[2], t[3], t[4]);case 6:return new n(t[0], t[1], t[2], t[3], t[4], t[5]);case 7:return new n(t[0], t[1], t[2], t[3], t[4], t[5], t[6]);}var r = eo(n.prototype),t = n.apply(r, t);return du(t) ? t : r;};}function Kr(t, r, e) {function u() {for (var o = arguments.length, f = Ku(o), c = o, a = de(u); c--;) {f[c] = arguments[c];}return c = 3 > o && f[0] !== a && f[o - 1] !== a ? [] : B(f, a), o -= c.length, o < e ? ue(t, r, Jr, u.placeholder, T, f, c, T, T, e - o) : n(this && this !== $n && this instanceof u ? i : t, this, f);\n }var i = Vr(t);return u;}function Gr(n) {return function (t, r, e) {var u = Qu(t);if (!su(t)) {var i = ye(r, 3);t = Wu(t), r = function r(n) {return i(u[n], n, u);};}return r = n(t, r, e), -1 < r ? u[i ? t[r] : r] : T;};}function Hr(n) {return pe(function (t) {var r = t.length,e = r,u = On.prototype.thru;for (n && t.reverse(); e--;) {var i = t[e];if (typeof i != \"function\") throw new ti(\"Expected a function\");if (u && !o && \"wrapper\" == ge(i)) var o = new On([], true);}for (e = o ? e : r; ++e < r;) {var i = t[e],u = ge(i),f = \"wrapper\" == u ? ho(i) : T,o = f && Re(f[0]) && 424 == f[1] && !f[4].length && 1 == f[9] ? o[ge(f[0])].apply(o, f[3]) : 1 == i.length && Re(i) ? o[u]() : o.thru(i);}\n return function () {var n = arguments,e = n[0];if (o && 1 == n.length && ff(e)) return o.plant(e).value();for (var u = 0, n = r ? t[u].apply(this, n) : e; ++u < r;) {n = t[u].call(this, n);}return n;};});}function Jr(n, t, r, e, u, i, o, f, c, a) {function l() {for (var d = arguments.length, y = Ku(d), b = d; b--;) {y[b] = arguments[b];}if (_) {var x,j = de(l),b = y.length;for (x = 0; b--;) {y[b] === j && ++x;}}if (e && (y = Ur(y, e, u, _)), i && (y = Br(y, i, o, _)), d -= x, _ && d < a) return j = B(y, j), ue(n, t, Jr, l.placeholder, r, y, j, f, c, a - d);if (j = h ? r : this, b = p ? j[n] : n, d = y.length, f) {x = y.length;for (var w = Ci(f.length, x), m = Lr(y); w--;) {\n var A = f[w];y[w] = Se(A, x) ? m[A] : T;}} else v && 1 < d && y.reverse();return s && c < d && (y.length = c), this && this !== $n && this instanceof l && (b = g || Vr(b)), b.apply(j, y);}var s = 128 & t,h = 1 & t,p = 2 & t,_ = 24 & t,v = 512 & t,g = p ? T : Vr(n);return l;}function Yr(n, t) {return function (r, e) {return Ut(r, n, t(e), {});};}function Qr(n, t) {return function (r, e) {var u;if (r === T && e === T) return t;if (r !== T && (u = r), e !== T) {if (u === T) return e;typeof r == \"string\" || typeof e == \"string\" ? (r = yr(r), e = yr(e)) : (r = dr(r), e = dr(e)), u = n(r, e);}return u;};}function Xr(t) {return pe(function (r) {\n return r = c(r, E(ye())), fr(function (e) {var u = this;return t(r, function (t) {return n(t, u, e);});});});}function ne(n, t) {t = t === T ? \" \" : yr(t);var r = t.length;return 2 > r ? r ? or(t, n) : t : (r = or(t, Oi(n / D(t))), Rn.test(t) ? Or(M(r), 0, n).join(\"\") : r.slice(0, n));}function te(t, r, e, u) {function i() {for (var r = -1, c = arguments.length, a = -1, l = u.length, s = Ku(l + c), h = this && this !== $n && this instanceof i ? f : t; ++a < l;) {s[a] = u[a];}for (; c--;) {s[a++] = arguments[++r];}return n(h, o ? e : this, s);}var o = 1 & r,f = Vr(t);return i;}function re(n) {return function (t, r, e) {\n e && typeof e != \"number\" && Oe(t, r, e) && (r = e = T), t = Au(t), r === T ? (r = t, t = 0) : r = Au(r), e = e === T ? t < r ? 1 : -1 : Au(e);var u = -1;r = Li(Oi((r - t) / (e || 1)), 0);for (var i = Ku(r); r--;) {i[n ? r : ++u] = t, t += e;}return i;};}function ee(n) {return function (t, r) {return typeof t == \"string\" && typeof r == \"string\" || (t = Su(t), r = Su(r)), n(t, r);};}function ue(n, t, r, e, u, i, o, f, c, a) {var l = 8 & t,s = l ? o : T;o = l ? T : o;var h = l ? i : T;return i = l ? T : i, t = (t | (l ? 32 : 64)) & ~(l ? 64 : 32), 4 & t || (t &= -4), u = [n, t, u, h, s, i, o, f, c, a], r = r.apply(T, u), Re(n) && yo(r, u), r.placeholder = e, Le(r, n, t);}function ie(n) {\n var t = Yu[n];return function (n, r) {if (n = Su(n), r = null == r ? 0 : Ci(ku(r), 292)) {var e = (Iu(n) + \"e\").split(\"e\"),e = t(e[0] + \"e\" + (+e[1] + r)),e = (Iu(e) + \"e\").split(\"e\");return +(e[0] + \"e\" + (+e[1] - r));}return t(n);};}function oe(n) {return function (t) {var r = vo(t);return \"[object Map]\" == r ? W(t) : \"[object Set]\" == r ? C(t) : k(t, n(t));};}function fe(n, t, r, e, u, i, o, f) {var c = 2 & t;if (!c && typeof n != \"function\") throw new ti(\"Expected a function\");var a = e ? e.length : 0;if (a || (t &= -97, e = u = T), o = o === T ? o : Li(ku(o), 0), f = f === T ? f : ku(f), a -= u ? u.length : 0, 64 & t) {\n var l = e,s = u;e = u = T;}var h = c ? T : ho(n);return i = [n, t, r, e, u, l, s, i, o, f], h && (r = i[1], n = h[1], t = r | n, e = 128 == n && 8 == r || 128 == n && 256 == r && i[7].length <= h[8] || 384 == n && h[7].length <= h[8] && 8 == r, 131 > t || e) && (1 & n && (i[2] = h[2], t |= 1 & r ? 0 : 4), (r = h[3]) && (e = i[3], i[3] = e ? Ur(e, r, h[4]) : r, i[4] = e ? B(i[3], \"__lodash_placeholder__\") : h[4]), (r = h[5]) && (e = i[5], i[5] = e ? Br(e, r, h[6]) : r, i[6] = e ? B(i[5], \"__lodash_placeholder__\") : h[6]), (r = h[7]) && (i[7] = r), 128 & n && (i[8] = null == i[8] ? h[8] : Ci(i[8], h[8])), null == i[9] && (i[9] = h[9]), i[0] = h[0], i[1] = t), n = i[0], t = i[1],\n r = i[2], e = i[3], u = i[4], f = i[9] = i[9] === T ? c ? 0 : n.length : Li(i[9] - a, 0), !f && 24 & t && (t &= -25), c = t && 1 != t ? 8 == t || 16 == t ? Kr(n, t, f) : 32 != t && 33 != t || u.length ? Jr.apply(T, i) : te(n, t, r, e) : Pr(n, t, r), Le((h ? co : yo)(c, i), n, t);}function ce(n, t, r, e) {return n === T || lu(n, ei[r]) && !oi.call(e, r) ? t : n;}function ae(n, t, r, e, u, i) {return du(n) && du(t) && (i.set(t, n), Yt(n, t, T, ae, i), i.delete(t)), n;}function le(n) {return xu(n) ? T : n;}function se(n, t, r, e, u, i) {var o = 1 & r,f = n.length,c = t.length;if (f != c && !(o && c > f)) return false;if ((c = i.get(n)) && i.get(t)) return c == t;\n var c = -1,a = true,l = 2 & r ? new Nn() : T;for (i.set(n, t), i.set(t, n); ++c < f;) {var s = n[c],p = t[c];if (e) var _ = o ? e(p, s, c, t, n, i) : e(s, p, c, n, t, i);if (_ !== T) {if (_) continue;a = false;break;}if (l) {if (!h(t, function (n, t) {if (!O(l, t) && (s === n || u(s, n, r, e, i))) return l.push(t);})) {a = false;break;}} else if (s !== p && !u(s, p, r, e, i)) {a = false;break;}}return i.delete(n), i.delete(t), a;}function he(n, t, r, e, u, i, o) {switch (r) {case \"[object DataView]\":if (n.byteLength != t.byteLength || n.byteOffset != t.byteOffset) break;n = n.buffer, t = t.buffer;case \"[object ArrayBuffer]\":\n if (n.byteLength != t.byteLength || !i(new vi(n), new vi(t))) break;return true;case \"[object Boolean]\":case \"[object Date]\":case \"[object Number]\":return lu(+n, +t);case \"[object Error]\":return n.name == t.name && n.message == t.message;case \"[object RegExp]\":case \"[object String]\":return n == t + \"\";case \"[object Map]\":var f = W;case \"[object Set]\":if (f || (f = L), n.size != t.size && !(1 & e)) break;return (r = o.get(n)) ? r == t : (e |= 2, o.set(n, t), t = se(f(n), f(t), e, u, i, o), o.delete(n), t);case \"[object Symbol]\":if (to) return to.call(n) == to.call(t);}\n return false;}function pe(n) {return xo(Ue(n, T, Ze), n + \"\");}function _e(n) {return St(n, Wu, po);}function ve(n) {return St(n, Uu, _o);}function ge(n) {for (var t = n.name + \"\", r = Gi[t], e = oi.call(Gi, t) ? r.length : 0; e--;) {var u = r[e],i = u.func;if (null == i || i == n) return u.name;}return t;}function de(n) {return (oi.call(An, \"placeholder\") ? An : n).placeholder;}function ye() {var n = An.iteratee || Fu,n = n === Fu ? qt : n;return arguments.length ? n(arguments[0], arguments[1]) : n;}function be(n, t) {var r = n.__data__,e = typeof t;return (\"string\" == e || \"number\" == e || \"symbol\" == e || \"boolean\" == e ? \"__proto__\" !== t : null === t) ? r[typeof t == \"string\" ? \"string\" : \"hash\"] : r.map;\n }function xe(n) {for (var t = Wu(n), r = t.length; r--;) {var e = t[r],u = n[e];t[r] = [e, u, u === u && !du(u)];}return t;}function je(n, t) {var r = null == n ? T : n[t];return Ft(r) ? r : T;}function we(n, t, r) {t = Sr(t, n);for (var e = -1, u = t.length, i = false; ++e < u;) {var o = Me(t[e]);if (!(i = null != n && r(n, o))) break;n = n[o];}return i || ++e != u ? i : (u = null == n ? 0 : n.length, !!u && gu(u) && Se(o, u) && (ff(n) || of(n)));}function me(n) {var t = n.length,r = new n.constructor(t);return t && \"string\" == typeof n[0] && oi.call(n, \"index\") && (r.index = n.index, r.input = n.input), r;}function Ae(n) {\n return typeof n.constructor != \"function\" || ze(n) ? {} : eo(di(n));}function ke(n, t, r) {var e = n.constructor;switch (t) {case \"[object ArrayBuffer]\":return Rr(n);case \"[object Boolean]\":case \"[object Date]\":return new e(+n);case \"[object DataView]\":return t = r ? Rr(n.buffer) : n.buffer, new n.constructor(t, n.byteOffset, n.byteLength);case \"[object Float32Array]\":case \"[object Float64Array]\":case \"[object Int8Array]\":case \"[object Int16Array]\":case \"[object Int32Array]\":case \"[object Uint8Array]\":case \"[object Uint8ClampedArray]\":\n case \"[object Uint16Array]\":case \"[object Uint32Array]\":return zr(n, r);case \"[object Map]\":return new e();case \"[object Number]\":case \"[object String]\":return new e(n);case \"[object RegExp]\":return t = new n.constructor(n.source, _n.exec(n)), t.lastIndex = n.lastIndex, t;case \"[object Set]\":return new e();case \"[object Symbol]\":return to ? Qu(to.call(n)) : {};}}function Ee(n) {return ff(n) || of(n) || !!(ji && n && n[ji]);}function Se(n, t) {var r = typeof n;return t = null == t ? 9007199254740991 : t, !!t && (\"number\" == r || \"symbol\" != r && bn.test(n)) && -1 < n && 0 == n % 1 && n < t;\n }function Oe(n, t, r) {if (!du(r)) return false;var e = typeof t;return !!(\"number\" == e ? su(r) && Se(t, r.length) : \"string\" == e && t in r) && lu(r[t], n);}function Ie(n, t) {if (ff(n)) return false;var r = typeof n;return !(\"number\" != r && \"symbol\" != r && \"boolean\" != r && null != n && !wu(n)) || nn.test(n) || !X.test(n) || null != t && n in Qu(t);}function Re(n) {var t = ge(n),r = An[t];return typeof r == \"function\" && t in Ln.prototype && (n === r || (t = ho(r), !!t && n === t[0]));}function ze(n) {var t = n && n.constructor;return n === (typeof t == \"function\" && t.prototype || ei);}function We(n, t) {\n return function (r) {return null != r && r[n] === t && (t !== T || n in Qu(r));};}function Ue(t, r, e) {return r = Li(r === T ? t.length - 1 : r, 0), function () {for (var u = arguments, i = -1, o = Li(u.length - r, 0), f = Ku(o); ++i < o;) {f[i] = u[r + i];}for (i = -1, o = Ku(r + 1); ++i < r;) {o[i] = u[i];}return o[r] = e(f), n(t, this, o);};}function Be(n, t) {if (\"__proto__\" != t) return n[t];}function Le(n, t, r) {var e = t + \"\";t = xo;var u,i = $e;return u = (u = e.match(an)) ? u[1].split(ln) : [], r = i(u, r), (i = r.length) && (u = i - 1, r[u] = (1 < i ? \"& \" : \"\") + r[u], r = r.join(2 < i ? \", \" : \" \"), e = e.replace(cn, \"{\\n/* [wrapped with \" + r + \"] */\\n\")),\n t(n, e);}function Ce(n) {var t = 0,r = 0;return function () {var e = Di(),u = 16 - (e - r);if (r = e, 0 < u) {if (800 <= ++t) return arguments[0];} else t = 0;return n.apply(T, arguments);};}function De(n, t) {var r = -1,e = n.length,u = e - 1;for (t = t === T ? e : t; ++r < t;) {var e = ir(r, u),i = n[e];n[e] = n[r], n[r] = i;}return n.length = t, n;}function Me(n) {if (typeof n == \"string\" || wu(n)) return n;var t = n + \"\";return \"0\" == t && 1 / n == -$ ? \"-0\" : t;}function Te(n) {if (null != n) {try {return ii.call(n);} catch (n) {}return n + \"\";}return \"\";}function $e(n, t) {return r(N, function (r) {var e = \"_.\" + r[0];\n t & r[1] && !o(n, e) && n.push(e);}), n.sort();}function Fe(n) {if (n instanceof Ln) return n.clone();var t = new On(n.__wrapped__, n.__chain__);return t.__actions__ = Lr(n.__actions__), t.__index__ = n.__index__, t.__values__ = n.__values__, t;}function Ne(n, t, r) {var e = null == n ? 0 : n.length;return e ? (r = null == r ? 0 : ku(r), 0 > r && (r = Li(e + r, 0)), _(n, ye(t, 3), r)) : -1;}function Pe(n, t, r) {var e = null == n ? 0 : n.length;if (!e) return -1;var u = e - 1;return r !== T && (u = ku(r), u = 0 > r ? Li(e + u, 0) : Ci(u, e - 1)), _(n, ye(t, 3), u, true);}function Ze(n) {return (null == n ? 0 : n.length) ? wt(n, 1) : [];\n }function qe(n) {return n && n.length ? n[0] : T;}function Ve(n) {var t = null == n ? 0 : n.length;return t ? n[t - 1] : T;}function Ke(n, t) {return n && n.length && t && t.length ? er(n, t) : n;}function Ge(n) {return null == n ? n : $i.call(n);}function He(n) {if (!n || !n.length) return [];var t = 0;return n = i(n, function (n) {if (hu(n)) return t = Li(n.length, t), true;}), A(t, function (t) {return c(n, b(t));});}function Je(t, r) {if (!t || !t.length) return [];var e = He(t);return null == r ? e : c(e, function (t) {return n(r, T, t);});}function Ye(n) {return n = An(n), n.__chain__ = true, n;\n }function Qe(n, t) {return t(n);}function Xe() {return this;}function nu(n, t) {return (ff(n) ? r : uo)(n, ye(t, 3));}function tu(n, t) {return (ff(n) ? e : io)(n, ye(t, 3));}function ru(n, t) {return (ff(n) ? c : Gt)(n, ye(t, 3));}function eu(n, t, r) {return t = r ? T : t, t = n && null == t ? n.length : t, fe(n, 128, T, T, T, T, t);}function uu(n, t) {var r;if (typeof t != \"function\") throw new ti(\"Expected a function\");return n = ku(n), function () {return 0 < --n && (r = t.apply(this, arguments)), 1 >= n && (t = T), r;};}function iu(n, t, r) {return t = r ? T : t, n = fe(n, 8, T, T, T, T, T, t), n.placeholder = iu.placeholder,\n n;}function ou(n, t, r) {return t = r ? T : t, n = fe(n, 16, T, T, T, T, T, t), n.placeholder = ou.placeholder, n;}function fu(n, t, r) {function e(t) {var r = c,e = a;return c = a = T, _ = t, s = n.apply(e, r);}function u(n) {var r = n - p;return n -= _, p === T || r >= t || 0 > r || g && n >= l;}function i() {var n = Go();if (u(n)) return o(n);var r,e = bo;r = n - _, n = t - (n - p), r = g ? Ci(n, l - r) : n, h = e(i, r);}function o(n) {return h = T, d && c ? e(n) : (c = a = T, s);}function f() {var n = Go(),r = u(n);if (c = arguments, a = this, p = n, r) {if (h === T) return _ = n = p, h = bo(i, t), v ? e(n) : s;if (g) return h = bo(i, t), e(p);}return h === T && (h = bo(i, t)),\n s;}var c,a,l,s,h,p,_ = 0,v = false,g = false,d = true;if (typeof n != \"function\") throw new ti(\"Expected a function\");return t = Su(t) || 0, du(r) && (v = !!r.leading, l = (g = \"maxWait\" in r) ? Li(Su(r.maxWait) || 0, t) : l, d = \"trailing\" in r ? !!r.trailing : d), f.cancel = function () {h !== T && lo(h), _ = 0, c = p = a = h = T;}, f.flush = function () {return h === T ? s : o(Go());}, f;}function cu(n, t) {if (typeof n != \"function\" || null != t && typeof t != \"function\") throw new ti(\"Expected a function\");var r = function r() {var e = arguments,u = t ? t.apply(this, e) : e[0],i = r.cache;return i.has(u) ? i.get(u) : (e = n.apply(this, e),\n r.cache = i.set(u, e) || i, e);};return r.cache = new (cu.Cache || Fn)(), r;}function au(n) {if (typeof n != \"function\") throw new ti(\"Expected a function\");return function () {var t = arguments;switch (t.length) {case 0:return !n.call(this);case 1:return !n.call(this, t[0]);case 2:return !n.call(this, t[0], t[1]);case 3:return !n.call(this, t[0], t[1], t[2]);}return !n.apply(this, t);};}function lu(n, t) {return n === t || n !== n && t !== t;}function su(n) {return null != n && gu(n.length) && !_u(n);}function hu(n) {return yu(n) && su(n);}function pu(n) {if (!yu(n)) return false;\n var t = Ot(n);return \"[object Error]\" == t || \"[object DOMException]\" == t || typeof n.message == \"string\" && typeof n.name == \"string\" && !xu(n);}function _u(n) {return !!du(n) && (n = Ot(n), \"[object Function]\" == n || \"[object GeneratorFunction]\" == n || \"[object AsyncFunction]\" == n || \"[object Proxy]\" == n);}function vu(n) {return typeof n == \"number\" && n == ku(n);}function gu(n) {return typeof n == \"number\" && -1 < n && 0 == n % 1 && 9007199254740991 >= n;}function du(n) {var t = typeof n;return null != n && (\"object\" == t || \"function\" == t);}function yu(n) {return null != n && typeof n == \"object\";\n }function bu(n) {return typeof n == \"number\" || yu(n) && \"[object Number]\" == Ot(n);}function xu(n) {return !(!yu(n) || \"[object Object]\" != Ot(n)) && (n = di(n), null === n || (n = oi.call(n, \"constructor\") && n.constructor, typeof n == \"function\" && n instanceof n && ii.call(n) == li));}function ju(n) {return typeof n == \"string\" || !ff(n) && yu(n) && \"[object String]\" == Ot(n);}function wu(n) {return typeof n == \"symbol\" || yu(n) && \"[object Symbol]\" == Ot(n);}function mu(n) {if (!n) return [];if (su(n)) return ju(n) ? M(n) : Lr(n);if (wi && n[wi]) {n = n[wi]();for (var t, r = []; !(t = n.next()).done;) {r.push(t.value);}\n return r;}return t = vo(n), (\"[object Map]\" == t ? W : \"[object Set]\" == t ? L : Lu)(n);}function Au(n) {return n ? (n = Su(n), n === $ || n === -$ ? 1.7976931348623157e308 * (0 > n ? -1 : 1) : n === n ? n : 0) : 0 === n ? n : 0;}function ku(n) {n = Au(n);var t = n % 1;return n === n ? t ? n - t : n : 0;}function Eu(n) {return n ? pt(ku(n), 0, 4294967295) : 0;}function Su(n) {if (typeof n == \"number\") return n;if (wu(n)) return F;if (du(n) && (n = typeof n.valueOf == \"function\" ? n.valueOf() : n, n = du(n) ? n + \"\" : n), typeof n != \"string\") return 0 === n ? n : +n;n = n.replace(un, \"\");var t = gn.test(n);return t || yn.test(n) ? Dn(n.slice(2), t ? 2 : 8) : vn.test(n) ? F : +n;\n }function Ou(n) {return Cr(n, Uu(n));}function Iu(n) {return null == n ? \"\" : yr(n);}function Ru(n, t, r) {return n = null == n ? T : Et(n, t), n === T ? r : n;}function zu(n, t) {return null != n && we(n, t, zt);}function Wu(n) {return su(n) ? qn(n) : Vt(n);}function Uu(n) {if (su(n)) n = qn(n, true);else if (du(n)) {var t,r = ze(n),e = [];for (t in n) {(\"constructor\" != t || !r && oi.call(n, t)) && e.push(t);}n = e;} else {if (t = [], null != n) for (r in Qu(n)) {t.push(r);}n = t;}return n;}function Bu(n, t) {if (null == n) return {};var r = c(ve(n), function (n) {return [n];});return t = ye(t), tr(n, r, function (n, r) {\n return t(n, r[0]);});}function Lu(n) {return null == n ? [] : S(n, Wu(n));}function Cu(n) {return $f(Iu(n).toLowerCase());}function Du(n) {return (n = Iu(n)) && n.replace(xn, Xn).replace(Sn, \"\");}function Mu(n, t, r) {return n = Iu(n), t = r ? T : t, t === T ? zn.test(n) ? n.match(In) || [] : n.match(sn) || [] : n.match(t) || [];}function Tu(n) {return function () {return n;};}function $u(n) {return n;}function Fu(n) {return qt(typeof n == \"function\" ? n : _t(n, 1));}function Nu(n, t, e) {var u = Wu(t),i = kt(t, u);null != e || du(t) && (i.length || !u.length) || (e = t, t = n, n = this, i = kt(t, Wu(t)));\n var o = !(du(e) && \"chain\" in e && !e.chain),f = _u(n);return r(i, function (r) {var e = t[r];n[r] = e, f && (n.prototype[r] = function () {var t = this.__chain__;if (o || t) {var r = n(this.__wrapped__);return (r.__actions__ = Lr(this.__actions__)).push({ func: e, args: arguments, thisArg: n }), r.__chain__ = t, r;}return e.apply(n, a([this.value()], arguments));});}), n;}function Pu() {}function Zu(n) {return Ie(n) ? b(Me(n)) : rr(n);}function qu() {return [];}function Vu() {return false;}mn = null == mn ? $n : rt.defaults($n.Object(), mn, rt.pick($n, Wn));var Ku = mn.Array,Gu = mn.Date,Hu = mn.Error,Ju = mn.Function,Yu = mn.Math,Qu = mn.Object,Xu = mn.RegExp,ni = mn.String,ti = mn.TypeError,ri = Ku.prototype,ei = Qu.prototype,ui = mn[\"__core-js_shared__\"],ii = Ju.prototype.toString,oi = ei.hasOwnProperty,fi = 0,ci = function () {\n var n = /[^.]+$/.exec(ui && ui.keys && ui.keys.IE_PROTO || \"\");return n ? \"Symbol(src)_1.\" + n : \"\";}(),ai = ei.toString,li = ii.call(Qu),si = $n._,hi = Xu(\"^\" + ii.call(oi).replace(rn, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"),pi = Pn ? mn.Buffer : T,_i = mn.Symbol,vi = mn.Uint8Array,gi = pi ? pi.allocUnsafe : T,di = U(Qu.getPrototypeOf, Qu),yi = Qu.create,bi = ei.propertyIsEnumerable,xi = ri.splice,ji = _i ? _i.isConcatSpreadable : T,wi = _i ? _i.iterator : T,mi = _i ? _i.toStringTag : T,Ai = function () {try {var n = je(Qu, \"defineProperty\");\n return n({}, \"\", {}), n;} catch (n) {}}(),ki = mn.clearTimeout !== $n.clearTimeout && mn.clearTimeout,Ei = Gu && Gu.now !== $n.Date.now && Gu.now,Si = mn.setTimeout !== $n.setTimeout && mn.setTimeout,Oi = Yu.ceil,Ii = Yu.floor,Ri = Qu.getOwnPropertySymbols,zi = pi ? pi.isBuffer : T,Wi = mn.isFinite,Ui = ri.join,Bi = U(Qu.keys, Qu),Li = Yu.max,Ci = Yu.min,Di = Gu.now,Mi = mn.parseInt,Ti = Yu.random,$i = ri.reverse,Fi = je(mn, \"DataView\"),Ni = je(mn, \"Map\"),Pi = je(mn, \"Promise\"),Zi = je(mn, \"Set\"),qi = je(mn, \"WeakMap\"),Vi = je(Qu, \"create\"),Ki = qi && new qi(),Gi = {},Hi = Te(Fi),Ji = Te(Ni),Yi = Te(Pi),Qi = Te(Zi),Xi = Te(qi),no = _i ? _i.prototype : T,to = no ? no.valueOf : T,ro = no ? no.toString : T,eo = function () {\n function n() {}return function (t) {return du(t) ? yi ? yi(t) : (n.prototype = t, t = new n(), n.prototype = T, t) : {};};}();An.templateSettings = { escape: J, evaluate: Y, interpolate: Q, variable: \"\", imports: { _: An } }, An.prototype = kn.prototype, An.prototype.constructor = An, On.prototype = eo(kn.prototype), On.prototype.constructor = On, Ln.prototype = eo(kn.prototype), Ln.prototype.constructor = Ln, Mn.prototype.clear = function () {this.__data__ = Vi ? Vi(null) : {}, this.size = 0;}, Mn.prototype.delete = function (n) {return n = this.has(n) && delete this.__data__[n],\n this.size -= n ? 1 : 0, n;}, Mn.prototype.get = function (n) {var t = this.__data__;return Vi ? (n = t[n], \"__lodash_hash_undefined__\" === n ? T : n) : oi.call(t, n) ? t[n] : T;}, Mn.prototype.has = function (n) {var t = this.__data__;return Vi ? t[n] !== T : oi.call(t, n);}, Mn.prototype.set = function (n, t) {var r = this.__data__;return this.size += this.has(n) ? 0 : 1, r[n] = Vi && t === T ? \"__lodash_hash_undefined__\" : t, this;}, Tn.prototype.clear = function () {this.__data__ = [], this.size = 0;}, Tn.prototype.delete = function (n) {var t = this.__data__;return n = ft(t, n), !(0 > n) && (n == t.length - 1 ? t.pop() : xi.call(t, n, 1),\n --this.size, true);}, Tn.prototype.get = function (n) {var t = this.__data__;return n = ft(t, n), 0 > n ? T : t[n][1];}, Tn.prototype.has = function (n) {return -1 < ft(this.__data__, n);}, Tn.prototype.set = function (n, t) {var r = this.__data__,e = ft(r, n);return 0 > e ? (++this.size, r.push([n, t])) : r[e][1] = t, this;}, Fn.prototype.clear = function () {this.size = 0, this.__data__ = { hash: new Mn(), map: new (Ni || Tn)(), string: new Mn() };}, Fn.prototype.delete = function (n) {return n = be(this, n).delete(n), this.size -= n ? 1 : 0, n;}, Fn.prototype.get = function (n) {return be(this, n).get(n);\n }, Fn.prototype.has = function (n) {return be(this, n).has(n);}, Fn.prototype.set = function (n, t) {var r = be(this, n),e = r.size;return r.set(n, t), this.size += r.size == e ? 0 : 1, this;}, Nn.prototype.add = Nn.prototype.push = function (n) {return this.__data__.set(n, \"__lodash_hash_undefined__\"), this;}, Nn.prototype.has = function (n) {return this.__data__.has(n);}, Zn.prototype.clear = function () {this.__data__ = new Tn(), this.size = 0;}, Zn.prototype.delete = function (n) {var t = this.__data__;return n = t.delete(n), this.size = t.size, n;}, Zn.prototype.get = function (n) {\n return this.__data__.get(n);}, Zn.prototype.has = function (n) {return this.__data__.has(n);}, Zn.prototype.set = function (n, t) {var r = this.__data__;if (r instanceof Tn) {var e = r.__data__;if (!Ni || 199 > e.length) return e.push([n, t]), this.size = ++r.size, this;r = this.__data__ = new Fn(e);}return r.set(n, t), this.size = r.size, this;};var uo = Fr(mt),io = Fr(At, true),oo = Nr(),fo = Nr(true),co = Ki ? function (n, t) {return Ki.set(n, t), n;} : $u,ao = Ai ? function (n, t) {return Ai(n, \"toString\", { configurable: true, enumerable: false, value: Tu(t), writable: true });} : $u,lo = ki || function (n) {\n return $n.clearTimeout(n);},so = Zi && 1 / L(new Zi([, -0]))[1] == $ ? function (n) {return new Zi(n);} : Pu,ho = Ki ? function (n) {return Ki.get(n);} : Pu,po = Ri ? function (n) {return null == n ? [] : (n = Qu(n), i(Ri(n), function (t) {return bi.call(n, t);}));} : qu,_o = Ri ? function (n) {for (var t = []; n;) {a(t, po(n)), n = di(n);}return t;} : qu,vo = Ot;(Fi && \"[object DataView]\" != vo(new Fi(new ArrayBuffer(1))) || Ni && \"[object Map]\" != vo(new Ni()) || Pi && \"[object Promise]\" != vo(Pi.resolve()) || Zi && \"[object Set]\" != vo(new Zi()) || qi && \"[object WeakMap]\" != vo(new qi())) && (vo = function vo(n) {\n var t = Ot(n);if (n = (n = \"[object Object]\" == t ? n.constructor : T) ? Te(n) : \"\") switch (n) {case Hi:return \"[object DataView]\";case Ji:return \"[object Map]\";case Yi:return \"[object Promise]\";case Qi:return \"[object Set]\";case Xi:return \"[object WeakMap]\";}return t;});var go = ui ? _u : Vu,yo = Ce(co),bo = Si || function (n, t) {return $n.setTimeout(n, t);},xo = Ce(ao),jo = function (n) {n = cu(n, function (n) {return 500 === t.size && t.clear(), n;});var t = n.cache;return n;}(function (n) {var t = [];return 46 === n.charCodeAt(0) && t.push(\"\"), n.replace(tn, function (n, r, e, u) {\n t.push(e ? u.replace(hn, \"$1\") : r || n);}), t;}),wo = fr(function (n, t) {return hu(n) ? yt(n, wt(t, 1, hu, true)) : [];}),mo = fr(function (n, t) {var r = Ve(t);return hu(r) && (r = T), hu(n) ? yt(n, wt(t, 1, hu, true), ye(r, 2)) : [];}),Ao = fr(function (n, t) {var r = Ve(t);return hu(r) && (r = T), hu(n) ? yt(n, wt(t, 1, hu, true), T, r) : [];}),ko = fr(function (n) {var t = c(n, kr);return t.length && t[0] === n[0] ? Wt(t) : [];}),Eo = fr(function (n) {var t = Ve(n),r = c(n, kr);return t === Ve(r) ? t = T : r.pop(), r.length && r[0] === n[0] ? Wt(r, ye(t, 2)) : [];}),So = fr(function (n) {var t = Ve(n),r = c(n, kr);return (t = typeof t == \"function\" ? t : T) && r.pop(),\n r.length && r[0] === n[0] ? Wt(r, T, t) : [];}),Oo = fr(Ke),Io = pe(function (n, t) {var r = null == n ? 0 : n.length,e = ht(n, t);return ur(n, c(t, function (n) {return Se(n, r) ? +n : n;}).sort(Wr)), e;}),Ro = fr(function (n) {return br(wt(n, 1, hu, true));}),zo = fr(function (n) {var t = Ve(n);return hu(t) && (t = T), br(wt(n, 1, hu, true), ye(t, 2));}),Wo = fr(function (n) {var t = Ve(n),t = typeof t == \"function\" ? t : T;return br(wt(n, 1, hu, true), T, t);}),Uo = fr(function (n, t) {return hu(n) ? yt(n, t) : [];}),Bo = fr(function (n) {return mr(i(n, hu));}),Lo = fr(function (n) {var t = Ve(n);return hu(t) && (t = T),\n mr(i(n, hu), ye(t, 2));}),Co = fr(function (n) {var t = Ve(n),t = typeof t == \"function\" ? t : T;return mr(i(n, hu), T, t);}),Do = fr(He),Mo = fr(function (n) {var t = n.length,t = 1 < t ? n[t - 1] : T,t = typeof t == \"function\" ? (n.pop(), t) : T;return Je(n, t);}),To = pe(function (n) {var t = n.length,r = t ? n[0] : 0,e = this.__wrapped__,u = function u(t) {return ht(t, n);};return !(1 < t || this.__actions__.length) && e instanceof Ln && Se(r) ? (e = e.slice(r, +r + (t ? 1 : 0)), e.__actions__.push({ func: Qe, args: [u], thisArg: T }), new On(e, this.__chain__).thru(function (n) {return t && !n.length && n.push(T),\n n;})) : this.thru(u);}),$o = Tr(function (n, t, r) {oi.call(n, r) ? ++n[r] : st(n, r, 1);}),Fo = Gr(Ne),No = Gr(Pe),Po = Tr(function (n, t, r) {oi.call(n, r) ? n[r].push(t) : st(n, r, [t]);}),Zo = fr(function (t, r, e) {var u = -1,i = typeof r == \"function\",o = su(t) ? Ku(t.length) : [];return uo(t, function (t) {o[++u] = i ? n(r, t, e) : Bt(t, r, e);}), o;}),qo = Tr(function (n, t, r) {st(n, r, t);}),Vo = Tr(function (n, t, r) {n[r ? 0 : 1].push(t);}, function () {return [[], []];}),Ko = fr(function (n, t) {if (null == n) return [];var r = t.length;return 1 < r && Oe(n, t[0], t[1]) ? t = [] : 2 < r && Oe(t[0], t[1], t[2]) && (t = [t[0]]),\n Xt(n, wt(t, 1), []);}),Go = Ei || function () {return $n.Date.now();},Ho = fr(function (n, t, r) {var e = 1;if (r.length) var u = B(r, de(Ho)),e = 32 | e;return fe(n, e, t, r, u);}),Jo = fr(function (n, t, r) {var e = 3;if (r.length) var u = B(r, de(Jo)),e = 32 | e;return fe(t, e, n, r, u);}),Yo = fr(function (n, t) {return dt(n, 1, t);}),Qo = fr(function (n, t, r) {return dt(n, Su(t) || 0, r);});cu.Cache = Fn;var Xo = fr(function (t, r) {r = 1 == r.length && ff(r[0]) ? c(r[0], E(ye())) : c(wt(r, 1), E(ye()));var e = r.length;return fr(function (u) {for (var i = -1, o = Ci(u.length, e); ++i < o;) {u[i] = r[i].call(this, u[i]);}\n return n(t, this, u);});}),nf = fr(function (n, t) {return fe(n, 32, T, t, B(t, de(nf)));}),tf = fr(function (n, t) {return fe(n, 64, T, t, B(t, de(tf)));}),rf = pe(function (n, t) {return fe(n, 256, T, T, T, t);}),ef = ee(It),uf = ee(function (n, t) {return n >= t;}),of = Lt(function () {return arguments;}()) ? Lt : function (n) {return yu(n) && oi.call(n, \"callee\") && !bi.call(n, \"callee\");},ff = Ku.isArray,cf = Vn ? E(Vn) : Ct,af = zi || Vu,lf = Kn ? E(Kn) : Dt,sf = Gn ? E(Gn) : Tt,hf = Hn ? E(Hn) : Nt,pf = Jn ? E(Jn) : Pt,_f = Yn ? E(Yn) : Zt,vf = ee(Kt),gf = ee(function (n, t) {return n <= t;}),df = $r(function (n, t) {\n if (ze(t) || su(t)) Cr(t, Wu(t), n);else for (var r in t) {oi.call(t, r) && ot(n, r, t[r]);}}),yf = $r(function (n, t) {Cr(t, Uu(t), n);}),bf = $r(function (n, t, r, e) {Cr(t, Uu(t), n, e);}),xf = $r(function (n, t, r, e) {Cr(t, Wu(t), n, e);}),jf = pe(ht),wf = fr(function (n, t) {n = Qu(n);var r = -1,e = t.length,u = 2 < e ? t[2] : T;for (u && Oe(t[0], t[1], u) && (e = 1); ++r < e;) {for (var u = t[r], i = Uu(u), o = -1, f = i.length; ++o < f;) {var c = i[o],a = n[c];(a === T || lu(a, ei[c]) && !oi.call(n, c)) && (n[c] = u[c]);}}return n;}),mf = fr(function (t) {return t.push(T, ae), n(Of, T, t);}),Af = Yr(function (n, t, r) {\n null != t && typeof t.toString != \"function\" && (t = ai.call(t)), n[t] = r;}, Tu($u)),kf = Yr(function (n, t, r) {null != t && typeof t.toString != \"function\" && (t = ai.call(t)), oi.call(n, t) ? n[t].push(r) : n[t] = [r];}, ye),Ef = fr(Bt),Sf = $r(function (n, t, r) {Yt(n, t, r);}),Of = $r(function (n, t, r, e) {Yt(n, t, r, e);}),If = pe(function (n, t) {var r = {};if (null == n) return r;var e = false;t = c(t, function (t) {return t = Sr(t, n), e || (e = 1 < t.length), t;}), Cr(n, ve(n), r), e && (r = _t(r, 7, le));for (var u = t.length; u--;) {xr(r, t[u]);}return r;}),Rf = pe(function (n, t) {return null == n ? {} : nr(n, t);\n }),zf = oe(Wu),Wf = oe(Uu),Uf = qr(function (n, t, r) {return t = t.toLowerCase(), n + (r ? Cu(t) : t);}),Bf = qr(function (n, t, r) {return n + (r ? \"-\" : \"\") + t.toLowerCase();}),Lf = qr(function (n, t, r) {return n + (r ? \" \" : \"\") + t.toLowerCase();}),Cf = Zr(\"toLowerCase\"),Df = qr(function (n, t, r) {return n + (r ? \"_\" : \"\") + t.toLowerCase();}),Mf = qr(function (n, t, r) {return n + (r ? \" \" : \"\") + $f(t);}),Tf = qr(function (n, t, r) {return n + (r ? \" \" : \"\") + t.toUpperCase();}),$f = Zr(\"toUpperCase\"),Ff = fr(function (t, r) {try {return n(t, T, r);} catch (n) {return pu(n) ? n : new Hu(n);}}),Nf = pe(function (n, t) {\n return r(t, function (t) {t = Me(t), st(n, t, Ho(n[t], n));}), n;}),Pf = Hr(),Zf = Hr(true),qf = fr(function (n, t) {return function (r) {return Bt(r, n, t);};}),Vf = fr(function (n, t) {return function (r) {return Bt(n, r, t);};}),Kf = Xr(c),Gf = Xr(u),Hf = Xr(h),Jf = re(),Yf = re(true),Qf = Qr(function (n, t) {return n + t;}, 0),Xf = ie(\"ceil\"),nc = Qr(function (n, t) {return n / t;}, 1),tc = ie(\"floor\"),rc = Qr(function (n, t) {return n * t;}, 1),ec = ie(\"round\"),uc = Qr(function (n, t) {return n - t;}, 0);return An.after = function (n, t) {if (typeof t != \"function\") throw new ti(\"Expected a function\");\n return n = ku(n), function () {if (1 > --n) return t.apply(this, arguments);};}, An.ary = eu, An.assign = df, An.assignIn = yf, An.assignInWith = bf, An.assignWith = xf, An.at = jf, An.before = uu, An.bind = Ho, An.bindAll = Nf, An.bindKey = Jo, An.castArray = function () {if (!arguments.length) return [];var n = arguments[0];return ff(n) ? n : [n];}, An.chain = Ye, An.chunk = function (n, t, r) {if (t = (r ? Oe(n, t, r) : t === T) ? 1 : Li(ku(t), 0), r = null == n ? 0 : n.length, !r || 1 > t) return [];for (var e = 0, u = 0, i = Ku(Oi(r / t)); e < r;) {i[u++] = hr(n, e, e += t);}return i;}, An.compact = function (n) {for (var t = -1, r = null == n ? 0 : n.length, e = 0, u = []; ++t < r;) {\n var i = n[t];i && (u[e++] = i);}return u;}, An.concat = function () {var n = arguments.length;if (!n) return [];for (var t = Ku(n - 1), r = arguments[0]; n--;) {t[n - 1] = arguments[n];}return a(ff(r) ? Lr(r) : [r], wt(t, 1));}, An.cond = function (t) {var r = null == t ? 0 : t.length,e = ye();return t = r ? c(t, function (n) {if (\"function\" != typeof n[1]) throw new ti(\"Expected a function\");return [e(n[0]), n[1]];}) : [], fr(function (e) {for (var u = -1; ++u < r;) {var i = t[u];if (n(i[0], this, e)) return n(i[1], this, e);}});}, An.conforms = function (n) {return vt(_t(n, 1));}, An.constant = Tu,\n An.countBy = $o, An.create = function (n, t) {var r = eo(n);return null == t ? r : at(r, t);}, An.curry = iu, An.curryRight = ou, An.debounce = fu, An.defaults = wf, An.defaultsDeep = mf, An.defer = Yo, An.delay = Qo, An.difference = wo, An.differenceBy = mo, An.differenceWith = Ao, An.drop = function (n, t, r) {var e = null == n ? 0 : n.length;return e ? (t = r || t === T ? 1 : ku(t), hr(n, 0 > t ? 0 : t, e)) : [];}, An.dropRight = function (n, t, r) {var e = null == n ? 0 : n.length;return e ? (t = r || t === T ? 1 : ku(t), t = e - t, hr(n, 0, 0 > t ? 0 : t)) : [];}, An.dropRightWhile = function (n, t) {return n && n.length ? jr(n, ye(t, 3), true, true) : [];\n }, An.dropWhile = function (n, t) {return n && n.length ? jr(n, ye(t, 3), true) : [];}, An.fill = function (n, t, r, e) {var u = null == n ? 0 : n.length;if (!u) return [];for (r && typeof r != \"number\" && Oe(n, t, r) && (r = 0, e = u), u = n.length, r = ku(r), 0 > r && (r = -r > u ? 0 : u + r), e = e === T || e > u ? u : ku(e), 0 > e && (e += u), e = r > e ? 0 : Eu(e); r < e;) {n[r++] = t;}return n;}, An.filter = function (n, t) {return (ff(n) ? i : jt)(n, ye(t, 3));}, An.flatMap = function (n, t) {return wt(ru(n, t), 1);}, An.flatMapDeep = function (n, t) {return wt(ru(n, t), $);}, An.flatMapDepth = function (n, t, r) {return r = r === T ? 1 : ku(r),\n wt(ru(n, t), r);}, An.flatten = Ze, An.flattenDeep = function (n) {return (null == n ? 0 : n.length) ? wt(n, $) : [];}, An.flattenDepth = function (n, t) {return null != n && n.length ? (t = t === T ? 1 : ku(t), wt(n, t)) : [];}, An.flip = function (n) {return fe(n, 512);}, An.flow = Pf, An.flowRight = Zf, An.fromPairs = function (n) {for (var t = -1, r = null == n ? 0 : n.length, e = {}; ++t < r;) {var u = n[t];e[u[0]] = u[1];}return e;}, An.functions = function (n) {return null == n ? [] : kt(n, Wu(n));}, An.functionsIn = function (n) {return null == n ? [] : kt(n, Uu(n));}, An.groupBy = Po, An.initial = function (n) {\n return (null == n ? 0 : n.length) ? hr(n, 0, -1) : [];}, An.intersection = ko, An.intersectionBy = Eo, An.intersectionWith = So, An.invert = Af, An.invertBy = kf, An.invokeMap = Zo, An.iteratee = Fu, An.keyBy = qo, An.keys = Wu, An.keysIn = Uu, An.map = ru, An.mapKeys = function (n, t) {var r = {};return t = ye(t, 3), mt(n, function (n, e, u) {st(r, t(n, e, u), n);}), r;}, An.mapValues = function (n, t) {var r = {};return t = ye(t, 3), mt(n, function (n, e, u) {st(r, e, t(n, e, u));}), r;}, An.matches = function (n) {return Ht(_t(n, 1));}, An.matchesProperty = function (n, t) {return Jt(n, _t(t, 1));}, An.memoize = cu,\n An.merge = Sf, An.mergeWith = Of, An.method = qf, An.methodOf = Vf, An.mixin = Nu, An.negate = au, An.nthArg = function (n) {return n = ku(n), fr(function (t) {return Qt(t, n);});}, An.omit = If, An.omitBy = function (n, t) {return Bu(n, au(ye(t)));}, An.once = function (n) {return uu(2, n);}, An.orderBy = function (n, t, r, e) {return null == n ? [] : (ff(t) || (t = null == t ? [] : [t]), r = e ? T : r, ff(r) || (r = null == r ? [] : [r]), Xt(n, t, r));}, An.over = Kf, An.overArgs = Xo, An.overEvery = Gf, An.overSome = Hf, An.partial = nf, An.partialRight = tf, An.partition = Vo, An.pick = Rf, An.pickBy = Bu, An.property = Zu,\n An.propertyOf = function (n) {return function (t) {return null == n ? T : Et(n, t);};}, An.pull = Oo, An.pullAll = Ke, An.pullAllBy = function (n, t, r) {return n && n.length && t && t.length ? er(n, t, ye(r, 2)) : n;}, An.pullAllWith = function (n, t, r) {return n && n.length && t && t.length ? er(n, t, T, r) : n;}, An.pullAt = Io, An.range = Jf, An.rangeRight = Yf, An.rearg = rf, An.reject = function (n, t) {return (ff(n) ? i : jt)(n, au(ye(t, 3)));}, An.remove = function (n, t) {var r = [];if (!n || !n.length) return r;var e = -1,u = [],i = n.length;for (t = ye(t, 3); ++e < i;) {var o = n[e];t(o, e, n) && (r.push(o),\n u.push(e));}return ur(n, u), r;}, An.rest = function (n, t) {if (typeof n != \"function\") throw new ti(\"Expected a function\");return t = t === T ? t : ku(t), fr(n, t);}, An.reverse = Ge, An.sampleSize = function (n, t, r) {return t = (r ? Oe(n, t, r) : t === T) ? 1 : ku(t), (ff(n) ? et : ar)(n, t);}, An.set = function (n, t, r) {return null == n ? n : lr(n, t, r);}, An.setWith = function (n, t, r, e) {return e = typeof e == \"function\" ? e : T, null == n ? n : lr(n, t, r, e);}, An.shuffle = function (n) {return (ff(n) ? ut : sr)(n);}, An.slice = function (n, t, r) {var e = null == n ? 0 : n.length;return e ? (r && typeof r != \"number\" && Oe(n, t, r) ? (t = 0,\n r = e) : (t = null == t ? 0 : ku(t), r = r === T ? e : ku(r)), hr(n, t, r)) : [];}, An.sortBy = Ko, An.sortedUniq = function (n) {return n && n.length ? gr(n) : [];}, An.sortedUniqBy = function (n, t) {return n && n.length ? gr(n, ye(t, 2)) : [];}, An.split = function (n, t, r) {return r && typeof r != \"number\" && Oe(n, t, r) && (t = r = T), r = r === T ? 4294967295 : r >>> 0, r ? (n = Iu(n)) && (typeof t == \"string\" || null != t && !hf(t)) && (t = yr(t), !t && Rn.test(n)) ? Or(M(n), 0, r) : n.split(t, r) : [];}, An.spread = function (t, r) {if (typeof t != \"function\") throw new ti(\"Expected a function\");return r = null == r ? 0 : Li(ku(r), 0),\n fr(function (e) {var u = e[r];return e = Or(e, 0, r), u && a(e, u), n(t, this, e);});}, An.tail = function (n) {var t = null == n ? 0 : n.length;return t ? hr(n, 1, t) : [];}, An.take = function (n, t, r) {return n && n.length ? (t = r || t === T ? 1 : ku(t), hr(n, 0, 0 > t ? 0 : t)) : [];}, An.takeRight = function (n, t, r) {var e = null == n ? 0 : n.length;return e ? (t = r || t === T ? 1 : ku(t), t = e - t, hr(n, 0 > t ? 0 : t, e)) : [];}, An.takeRightWhile = function (n, t) {return n && n.length ? jr(n, ye(t, 3), false, true) : [];}, An.takeWhile = function (n, t) {return n && n.length ? jr(n, ye(t, 3)) : [];}, An.tap = function (n, t) {return t(n),\n n;}, An.throttle = function (n, t, r) {var e = true,u = true;if (typeof n != \"function\") throw new ti(\"Expected a function\");return du(r) && (e = \"leading\" in r ? !!r.leading : e, u = \"trailing\" in r ? !!r.trailing : u), fu(n, t, { leading: e, maxWait: t, trailing: u });}, An.thru = Qe, An.toArray = mu, An.toPairs = zf, An.toPairsIn = Wf, An.toPath = function (n) {return ff(n) ? c(n, Me) : wu(n) ? [n] : Lr(jo(Iu(n)));}, An.toPlainObject = Ou, An.transform = function (n, t, e) {var u = ff(n),i = u || af(n) || _f(n);if (t = ye(t, 4), null == e) {var o = n && n.constructor;e = i ? u ? new o() : [] : du(n) && _u(o) ? eo(di(n)) : {};\n }return (i ? r : mt)(n, function (n, r, u) {return t(e, n, r, u);}), e;}, An.unary = function (n) {return eu(n, 1);}, An.union = Ro, An.unionBy = zo, An.unionWith = Wo, An.uniq = function (n) {return n && n.length ? br(n) : [];}, An.uniqBy = function (n, t) {return n && n.length ? br(n, ye(t, 2)) : [];}, An.uniqWith = function (n, t) {return t = typeof t == \"function\" ? t : T, n && n.length ? br(n, T, t) : [];}, An.unset = function (n, t) {return null == n || xr(n, t);}, An.unzip = He, An.unzipWith = Je, An.update = function (n, t, r) {return null != n && (r = Er(r), n = lr(n, t, r(Et(n, t)), void 0)), n;}, An.updateWith = function (n, t, r, e) {\n return e = typeof e == \"function\" ? e : T, null != n && (r = Er(r), n = lr(n, t, r(Et(n, t)), e)), n;}, An.values = Lu, An.valuesIn = function (n) {return null == n ? [] : S(n, Uu(n));}, An.without = Uo, An.words = Mu, An.wrap = function (n, t) {return nf(Er(t), n);}, An.xor = Bo, An.xorBy = Lo, An.xorWith = Co, An.zip = Do, An.zipObject = function (n, t) {return Ar(n || [], t || [], ot);}, An.zipObjectDeep = function (n, t) {return Ar(n || [], t || [], lr);}, An.zipWith = Mo, An.entries = zf, An.entriesIn = Wf, An.extend = yf, An.extendWith = bf, Nu(An, An), An.add = Qf, An.attempt = Ff, An.camelCase = Uf, An.capitalize = Cu,\n An.ceil = Xf, An.clamp = function (n, t, r) {return r === T && (r = t, t = T), r !== T && (r = Su(r), r = r === r ? r : 0), t !== T && (t = Su(t), t = t === t ? t : 0), pt(Su(n), t, r);}, An.clone = function (n) {return _t(n, 4);}, An.cloneDeep = function (n) {return _t(n, 5);}, An.cloneDeepWith = function (n, t) {return t = typeof t == \"function\" ? t : T, _t(n, 5, t);}, An.cloneWith = function (n, t) {return t = typeof t == \"function\" ? t : T, _t(n, 4, t);}, An.conformsTo = function (n, t) {return null == t || gt(n, t, Wu(t));}, An.deburr = Du, An.defaultTo = function (n, t) {return null == n || n !== n ? t : n;}, An.divide = nc, An.endsWith = function (n, t, r) {\n n = Iu(n), t = yr(t);var e = n.length,e = r = r === T ? e : pt(ku(r), 0, e);return r -= t.length, 0 <= r && n.slice(r, e) == t;}, An.eq = lu, An.escape = function (n) {return (n = Iu(n)) && H.test(n) ? n.replace(K, nt) : n;}, An.escapeRegExp = function (n) {return (n = Iu(n)) && en.test(n) ? n.replace(rn, \"\\\\$&\") : n;}, An.every = function (n, t, r) {var e = ff(n) ? u : bt;return r && Oe(n, t, r) && (t = T), e(n, ye(t, 3));}, An.find = Fo, An.findIndex = Ne, An.findKey = function (n, t) {return p(n, ye(t, 3), mt);}, An.findLast = No, An.findLastIndex = Pe, An.findLastKey = function (n, t) {return p(n, ye(t, 3), At);\n }, An.floor = tc, An.forEach = nu, An.forEachRight = tu, An.forIn = function (n, t) {return null == n ? n : oo(n, ye(t, 3), Uu);}, An.forInRight = function (n, t) {return null == n ? n : fo(n, ye(t, 3), Uu);}, An.forOwn = function (n, t) {return n && mt(n, ye(t, 3));}, An.forOwnRight = function (n, t) {return n && At(n, ye(t, 3));}, An.get = Ru, An.gt = ef, An.gte = uf, An.has = function (n, t) {return null != n && we(n, t, Rt);}, An.hasIn = zu, An.head = qe, An.identity = $u, An.includes = function (n, t, r, e) {return n = su(n) ? n : Lu(n), r = r && !e ? ku(r) : 0, e = n.length, 0 > r && (r = Li(e + r, 0)), ju(n) ? r <= e && -1 < n.indexOf(t, r) : !!e && -1 < v(n, t, r);\n }, An.indexOf = function (n, t, r) {var e = null == n ? 0 : n.length;return e ? (r = null == r ? 0 : ku(r), 0 > r && (r = Li(e + r, 0)), v(n, t, r)) : -1;}, An.inRange = function (n, t, r) {return t = Au(t), r === T ? (r = t, t = 0) : r = Au(r), n = Su(n), n >= Ci(t, r) && n < Li(t, r);}, An.invoke = Ef, An.isArguments = of, An.isArray = ff, An.isArrayBuffer = cf, An.isArrayLike = su, An.isArrayLikeObject = hu, An.isBoolean = function (n) {return true === n || false === n || yu(n) && \"[object Boolean]\" == Ot(n);}, An.isBuffer = af, An.isDate = lf, An.isElement = function (n) {return yu(n) && 1 === n.nodeType && !xu(n);}, An.isEmpty = function (n) {\n if (null == n) return true;if (su(n) && (ff(n) || typeof n == \"string\" || typeof n.splice == \"function\" || af(n) || _f(n) || of(n))) return !n.length;var t = vo(n);if (\"[object Map]\" == t || \"[object Set]\" == t) return !n.size;if (ze(n)) return !Vt(n).length;for (var r in n) {if (oi.call(n, r)) return false;}return true;}, An.isEqual = function (n, t) {return Mt(n, t);}, An.isEqualWith = function (n, t, r) {var e = (r = typeof r == \"function\" ? r : T) ? r(n, t) : T;return e === T ? Mt(n, t, T, r) : !!e;}, An.isError = pu, An.isFinite = function (n) {return typeof n == \"number\" && Wi(n);}, An.isFunction = _u,\n An.isInteger = vu, An.isLength = gu, An.isMap = sf, An.isMatch = function (n, t) {return n === t || $t(n, t, xe(t));}, An.isMatchWith = function (n, t, r) {return r = typeof r == \"function\" ? r : T, $t(n, t, xe(t), r);}, An.isNaN = function (n) {return bu(n) && n != +n;}, An.isNative = function (n) {if (go(n)) throw new Hu(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ft(n);}, An.isNil = function (n) {return null == n;}, An.isNull = function (n) {return null === n;}, An.isNumber = bu, An.isObject = du, An.isObjectLike = yu, An.isPlainObject = xu, An.isRegExp = hf,\n An.isSafeInteger = function (n) {return vu(n) && -9007199254740991 <= n && 9007199254740991 >= n;}, An.isSet = pf, An.isString = ju, An.isSymbol = wu, An.isTypedArray = _f, An.isUndefined = function (n) {return n === T;}, An.isWeakMap = function (n) {return yu(n) && \"[object WeakMap]\" == vo(n);}, An.isWeakSet = function (n) {return yu(n) && \"[object WeakSet]\" == Ot(n);}, An.join = function (n, t) {return null == n ? \"\" : Ui.call(n, t);}, An.kebabCase = Bf, An.last = Ve, An.lastIndexOf = function (n, t, r) {var e = null == n ? 0 : n.length;if (!e) return -1;var u = e;if (r !== T && (u = ku(r), u = 0 > u ? Li(e + u, 0) : Ci(u, e - 1)),\n t === t) n: {for (r = u + 1; r--;) {if (n[r] === t) {n = r;break n;}}n = r;} else n = _(n, d, u, true);return n;}, An.lowerCase = Lf, An.lowerFirst = Cf, An.lt = vf, An.lte = gf, An.max = function (n) {return n && n.length ? xt(n, $u, It) : T;}, An.maxBy = function (n, t) {return n && n.length ? xt(n, ye(t, 2), It) : T;}, An.mean = function (n) {return y(n, $u);}, An.meanBy = function (n, t) {return y(n, ye(t, 2));}, An.min = function (n) {return n && n.length ? xt(n, $u, Kt) : T;}, An.minBy = function (n, t) {return n && n.length ? xt(n, ye(t, 2), Kt) : T;}, An.stubArray = qu, An.stubFalse = Vu, An.stubObject = function () {\n return {};}, An.stubString = function () {return \"\";}, An.stubTrue = function () {return true;}, An.multiply = rc, An.nth = function (n, t) {return n && n.length ? Qt(n, ku(t)) : T;}, An.noConflict = function () {return $n._ === this && ($n._ = si), this;}, An.noop = Pu, An.now = Go, An.pad = function (n, t, r) {n = Iu(n);var e = (t = ku(t)) ? D(n) : 0;return !t || e >= t ? n : (t = (t - e) / 2, ne(Ii(t), r) + n + ne(Oi(t), r));}, An.padEnd = function (n, t, r) {n = Iu(n);var e = (t = ku(t)) ? D(n) : 0;return t && e < t ? n + ne(t - e, r) : n;}, An.padStart = function (n, t, r) {n = Iu(n);var e = (t = ku(t)) ? D(n) : 0;return t && e < t ? ne(t - e, r) + n : n;\n }, An.parseInt = function (n, t, r) {return r || null == t ? t = 0 : t && (t = +t), Mi(Iu(n).replace(on, \"\"), t || 0);}, An.random = function (n, t, r) {if (r && typeof r != \"boolean\" && Oe(n, t, r) && (t = r = T), r === T && (typeof t == \"boolean\" ? (r = t, t = T) : typeof n == \"boolean\" && (r = n, n = T)), n === T && t === T ? (n = 0, t = 1) : (n = Au(n), t === T ? (t = n, n = 0) : t = Au(t)), n > t) {var e = n;n = t, t = e;}return r || n % 1 || t % 1 ? (r = Ti(), Ci(n + r * (t - n + Cn(\"1e-\" + ((r + \"\").length - 1))), t)) : ir(n, t);}, An.reduce = function (n, t, r) {var e = ff(n) ? l : j,u = 3 > arguments.length;return e(n, ye(t, 4), r, u, uo);}, An.reduceRight = function (n, t, r) {\n var e = ff(n) ? s : j,u = 3 > arguments.length;return e(n, ye(t, 4), r, u, io);}, An.repeat = function (n, t, r) {return t = (r ? Oe(n, t, r) : t === T) ? 1 : ku(t), or(Iu(n), t);}, An.replace = function () {var n = arguments,t = Iu(n[0]);return 3 > n.length ? t : t.replace(n[1], n[2]);}, An.result = function (n, t, r) {t = Sr(t, n);var e = -1,u = t.length;for (u || (u = 1, n = T); ++e < u;) {var i = null == n ? T : n[Me(t[e])];i === T && (e = u, i = r), n = _u(i) ? i.call(n) : i;}return n;}, An.round = ec, An.runInContext = x, An.sample = function (n) {return (ff(n) ? Qn : cr)(n);}, An.size = function (n) {if (null == n) return 0;\n if (su(n)) return ju(n) ? D(n) : n.length;var t = vo(n);return \"[object Map]\" == t || \"[object Set]\" == t ? n.size : Vt(n).length;}, An.snakeCase = Df, An.some = function (n, t, r) {var e = ff(n) ? h : pr;return r && Oe(n, t, r) && (t = T), e(n, ye(t, 3));}, An.sortedIndex = function (n, t) {return _r(n, t);}, An.sortedIndexBy = function (n, t, r) {return vr(n, t, ye(r, 2));}, An.sortedIndexOf = function (n, t) {var r = null == n ? 0 : n.length;if (r) {var e = _r(n, t);if (e < r && lu(n[e], t)) return e;}return -1;}, An.sortedLastIndex = function (n, t) {return _r(n, t, true);}, An.sortedLastIndexBy = function (n, t, r) {\n return vr(n, t, ye(r, 2), true);}, An.sortedLastIndexOf = function (n, t) {if (null == n ? 0 : n.length) {var r = _r(n, t, true) - 1;if (lu(n[r], t)) return r;}return -1;}, An.startCase = Mf, An.startsWith = function (n, t, r) {return n = Iu(n), r = null == r ? 0 : pt(ku(r), 0, n.length), t = yr(t), n.slice(r, r + t.length) == t;}, An.subtract = uc, An.sum = function (n) {return n && n.length ? m(n, $u) : 0;}, An.sumBy = function (n, t) {return n && n.length ? m(n, ye(t, 2)) : 0;}, An.template = function (n, t, r) {var e = An.templateSettings;r && Oe(n, t, r) && (t = T), n = Iu(n), t = bf({}, t, e, ce), r = bf({}, t.imports, e.imports, ce);\n var u,i,o = Wu(r),f = S(r, o),c = 0;r = t.interpolate || jn;var a = \"__p+='\";r = Xu((t.escape || jn).source + \"|\" + r.source + \"|\" + (r === Q ? pn : jn).source + \"|\" + (t.evaluate || jn).source + \"|$\", \"g\");var l = \"sourceURL\" in t ? \"//# sourceURL=\" + t.sourceURL + \"\\n\" : \"\";if (n.replace(r, function (t, r, e, o, f, l) {return e || (e = o), a += n.slice(c, l).replace(wn, z), r && (u = true, a += \"'+__e(\" + r + \")+'\"), f && (i = true, a += \"';\" + f + \";\\n__p+='\"), e && (a += \"'+((__t=(\" + e + \"))==null?'':__t)+'\"), c = l + t.length, t;}), a += \"';\", (t = t.variable) || (a = \"with(obj){\" + a + \"}\"), a = (i ? a.replace(P, \"\") : a).replace(Z, \"$1\").replace(q, \"$1;\"),\n a = \"function(\" + (t || \"obj\") + \"){\" + (t ? \"\" : \"obj||(obj={});\") + \"var __t,__p=''\" + (u ? \",__e=_.escape\" : \"\") + (i ? \",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}\" : \";\") + a + \"return __p}\", t = Ff(function () {return Ju(o, l + \"return \" + a).apply(T, f);}), t.source = a, pu(t)) throw t;return t;}, An.times = function (n, t) {if (n = ku(n), 1 > n || 9007199254740991 < n) return [];var r = 4294967295,e = Ci(n, 4294967295);for (t = ye(t), n -= 4294967295, e = A(e, t); ++r < n;) {t(r);}return e;}, An.toFinite = Au, An.toInteger = ku, An.toLength = Eu, An.toLower = function (n) {\n return Iu(n).toLowerCase();}, An.toNumber = Su, An.toSafeInteger = function (n) {return n ? pt(ku(n), -9007199254740991, 9007199254740991) : 0 === n ? n : 0;}, An.toString = Iu, An.toUpper = function (n) {return Iu(n).toUpperCase();}, An.trim = function (n, t, r) {return (n = Iu(n)) && (r || t === T) ? n.replace(un, \"\") : n && (t = yr(t)) ? (n = M(n), r = M(t), t = I(n, r), r = R(n, r) + 1, Or(n, t, r).join(\"\")) : n;}, An.trimEnd = function (n, t, r) {return (n = Iu(n)) && (r || t === T) ? n.replace(fn, \"\") : n && (t = yr(t)) ? (n = M(n), t = R(n, M(t)) + 1, Or(n, 0, t).join(\"\")) : n;}, An.trimStart = function (n, t, r) {\n return (n = Iu(n)) && (r || t === T) ? n.replace(on, \"\") : n && (t = yr(t)) ? (n = M(n), t = I(n, M(t)), Or(n, t).join(\"\")) : n;}, An.truncate = function (n, t) {var r = 30,e = \"...\";if (du(t)) var u = \"separator\" in t ? t.separator : u,r = \"length\" in t ? ku(t.length) : r,e = \"omission\" in t ? yr(t.omission) : e;n = Iu(n);var i = n.length;if (Rn.test(n)) var o = M(n),i = o.length;if (r >= i) return n;if (i = r - D(e), 1 > i) return e;if (r = o ? Or(o, 0, i).join(\"\") : n.slice(0, i), u === T) return r + e;if (o && (i += r.length - i), hf(u)) {if (n.slice(i).search(u)) {var f = r;for (u.global || (u = Xu(u.source, Iu(_n.exec(u)) + \"g\")),\n u.lastIndex = 0; o = u.exec(f);) {var c = o.index;}r = r.slice(0, c === T ? i : c);}} else n.indexOf(yr(u), i) != i && (u = r.lastIndexOf(u), -1 < u && (r = r.slice(0, u)));return r + e;}, An.unescape = function (n) {return (n = Iu(n)) && G.test(n) ? n.replace(V, tt) : n;}, An.uniqueId = function (n) {var t = ++fi;return Iu(n) + t;}, An.upperCase = Tf, An.upperFirst = $f, An.each = nu, An.eachRight = tu, An.first = qe, Nu(An, function () {var n = {};return mt(An, function (t, r) {oi.call(An.prototype, r) || (n[r] = t);}), n;}(), { chain: false }), An.VERSION = \"4.17.11\", r(\"bind bindKey curry curryRight partial partialRight\".split(\" \"), function (n) {\n An[n].placeholder = An;}), r([\"drop\", \"take\"], function (n, t) {Ln.prototype[n] = function (r) {r = r === T ? 1 : Li(ku(r), 0);var e = this.__filtered__ && !t ? new Ln(this) : this.clone();return e.__filtered__ ? e.__takeCount__ = Ci(r, e.__takeCount__) : e.__views__.push({ size: Ci(r, 4294967295), type: n + (0 > e.__dir__ ? \"Right\" : \"\") }), e;}, Ln.prototype[n + \"Right\"] = function (t) {return this.reverse()[n](t).reverse();};}), r([\"filter\", \"map\", \"takeWhile\"], function (n, t) {var r = t + 1,e = 1 == r || 3 == r;Ln.prototype[n] = function (n) {var t = this.clone();return t.__iteratees__.push({\n iteratee: ye(n, 3), type: r }), t.__filtered__ = t.__filtered__ || e, t;};}), r([\"head\", \"last\"], function (n, t) {var r = \"take\" + (t ? \"Right\" : \"\");Ln.prototype[n] = function () {return this[r](1).value()[0];};}), r([\"initial\", \"tail\"], function (n, t) {var r = \"drop\" + (t ? \"\" : \"Right\");Ln.prototype[n] = function () {return this.__filtered__ ? new Ln(this) : this[r](1);};}), Ln.prototype.compact = function () {return this.filter($u);}, Ln.prototype.find = function (n) {return this.filter(n).head();}, Ln.prototype.findLast = function (n) {return this.reverse().find(n);\n }, Ln.prototype.invokeMap = fr(function (n, t) {return typeof n == \"function\" ? new Ln(this) : this.map(function (r) {return Bt(r, n, t);});}), Ln.prototype.reject = function (n) {return this.filter(au(ye(n)));}, Ln.prototype.slice = function (n, t) {n = ku(n);var r = this;return r.__filtered__ && (0 < n || 0 > t) ? new Ln(r) : (0 > n ? r = r.takeRight(-n) : n && (r = r.drop(n)), t !== T && (t = ku(t), r = 0 > t ? r.dropRight(-t) : r.take(t - n)), r);}, Ln.prototype.takeRightWhile = function (n) {return this.reverse().takeWhile(n).reverse();}, Ln.prototype.toArray = function () {return this.take(4294967295);\n }, mt(Ln.prototype, function (n, t) {var r = /^(?:filter|find|map|reject)|While$/.test(t),e = /^(?:head|last)$/.test(t),u = An[e ? \"take\" + (\"last\" == t ? \"Right\" : \"\") : t],i = e || /^find/.test(t);u && (An.prototype[t] = function () {var t = this.__wrapped__,o = e ? [1] : arguments,f = t instanceof Ln,c = o[0],l = f || ff(t),s = function s(n) {return n = u.apply(An, a([n], o)), e && h ? n[0] : n;};l && r && typeof c == \"function\" && 1 != c.length && (f = l = false);var h = this.__chain__,p = !!this.__actions__.length,c = i && !h,f = f && !p;return !i && l ? (t = f ? t : new Ln(this), t = n.apply(t, o), t.__actions__.push({\n func: Qe, args: [s], thisArg: T }), new On(t, h)) : c && f ? n.apply(this, o) : (t = this.thru(s), c ? e ? t.value()[0] : t.value() : t);});}), r(\"pop push shift sort splice unshift\".split(\" \"), function (n) {var t = ri[n],r = /^(?:push|sort|unshift)$/.test(n) ? \"tap\" : \"thru\",e = /^(?:pop|shift)$/.test(n);An.prototype[n] = function () {var n = arguments;if (e && !this.__chain__) {var u = this.value();return t.apply(ff(u) ? u : [], n);}return this[r](function (r) {return t.apply(ff(r) ? r : [], n);});};}), mt(Ln.prototype, function (n, t) {var r = An[t];if (r) {var e = r.name + \"\";\n (Gi[e] || (Gi[e] = [])).push({ name: t, func: r });}}), Gi[Jr(T, 2).name] = [{ name: \"wrapper\", func: T }], Ln.prototype.clone = function () {var n = new Ln(this.__wrapped__);return n.__actions__ = Lr(this.__actions__), n.__dir__ = this.__dir__, n.__filtered__ = this.__filtered__, n.__iteratees__ = Lr(this.__iteratees__), n.__takeCount__ = this.__takeCount__, n.__views__ = Lr(this.__views__), n;}, Ln.prototype.reverse = function () {if (this.__filtered__) {var n = new Ln(this);n.__dir__ = -1, n.__filtered__ = true;} else n = this.clone(), n.__dir__ *= -1;return n;\n }, Ln.prototype.value = function () {var n,t = this.__wrapped__.value(),r = this.__dir__,e = ff(t),u = 0 > r,i = e ? t.length : 0;n = 0;for (var o = i, f = this.__views__, c = -1, a = f.length; ++c < a;) {var l = f[c],s = l.size;switch (l.type) {case \"drop\":n += s;break;case \"dropRight\":o -= s;break;case \"take\":o = Ci(o, n + s);break;case \"takeRight\":n = Li(n, o - s);}}if (n = { start: n, end: o }, o = n.start, f = n.end, n = f - o, o = u ? f : o - 1, f = this.__iteratees__, c = f.length, a = 0, l = Ci(n, this.__takeCount__), !e || !u && i == n && l == n) return wr(t, this.__actions__);e = [];n: for (; n-- && a < l;) {for (o += r,\n u = -1, i = t[o]; ++u < c;) {var h = f[u],s = h.type,h = (0, h.iteratee)(i);if (2 == s) i = h;else if (!h) {if (1 == s) continue n;break n;}}e[a++] = i;}return e;}, An.prototype.at = To, An.prototype.chain = function () {return Ye(this);}, An.prototype.commit = function () {return new On(this.value(), this.__chain__);}, An.prototype.next = function () {this.__values__ === T && (this.__values__ = mu(this.value()));var n = this.__index__ >= this.__values__.length;return { done: n, value: n ? T : this.__values__[this.__index__++] };}, An.prototype.plant = function (n) {for (var t, r = this; r instanceof kn;) {\n var e = Fe(r);e.__index__ = 0, e.__values__ = T, t ? u.__wrapped__ = e : t = e;var u = e,r = r.__wrapped__;}return u.__wrapped__ = n, t;}, An.prototype.reverse = function () {var n = this.__wrapped__;return n instanceof Ln ? (this.__actions__.length && (n = new Ln(this)), n = n.reverse(), n.__actions__.push({ func: Qe, args: [Ge], thisArg: T }), new On(n, this.__chain__)) : this.thru(Ge);}, An.prototype.toJSON = An.prototype.valueOf = An.prototype.value = function () {return wr(this.__wrapped__, this.__actions__);}, An.prototype.first = An.prototype.head, wi && (An.prototype[wi] = Xe),\n An;}(); true ? ($n._ = rt, !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return rt;}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))) : undefined;}).call(void 0);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../HbuilderX/HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js */ 2), __webpack_require__(/*! ./../../../../HbuilderX/HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/module.js */ 24)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vYXNzZXRzL3NjcmlwdHMvbG9kYXNoLmpzIl0sIm5hbWVzIjpbIm4iLCJ0IiwiciIsImxlbmd0aCIsImNhbGwiLCJhcHBseSIsImUiLCJ1IiwiaSIsIm8iLCJ2IiwiZiIsImMiLCJBcnJheSIsImEiLCJsIiwicyIsImgiLCJwIiwiXyIsImQiLCJnIiwieSIsIm0iLCJGIiwiYiIsIlQiLCJ4IiwiaiIsInciLCJzb3J0IiwiQSIsImsiLCJFIiwiUyIsIk8iLCJoYXMiLCJJIiwiUiIsInoiLCJMbiIsIlciLCJzaXplIiwiZm9yRWFjaCIsIlUiLCJCIiwiTCIsIkMiLCJEIiwiUm4iLCJ0ZXN0IiwiT24iLCJsYXN0SW5kZXgiLCJRbiIsIk0iLCJtYXRjaCIsInNwbGl0IiwiJCIsIk5hTiIsIk4iLCJQIiwiWiIsInEiLCJWIiwiSyIsIkciLCJSZWdFeHAiLCJzb3VyY2UiLCJIIiwiSiIsIlkiLCJRIiwiWCIsIm5uIiwidG4iLCJybiIsImVuIiwidW4iLCJvbiIsImZuIiwiY24iLCJhbiIsImxuIiwic24iLCJobiIsInBuIiwiX24iLCJ2biIsImduIiwiZG4iLCJ5biIsImJuIiwieG4iLCJqbiIsInduIiwibW4iLCJBbiIsImtuIiwiRW4iLCJTbiIsIkluIiwiam9pbiIsInpuIiwiV24iLCJVbiIsIkJuIiwiQ24iLCJwYXJzZUZsb2F0IiwiRG4iLCJwYXJzZUludCIsIk1uIiwiZ2xvYmFsIiwiT2JqZWN0IiwiVG4iLCJzZWxmIiwiJG4iLCJGdW5jdGlvbiIsIkZuIiwiZXhwb3J0cyIsIm5vZGVUeXBlIiwiTm4iLCJtb2R1bGUiLCJQbiIsIlpuIiwicHJvY2VzcyIsInFuIiwicmVxdWlyZSIsInR5cGVzIiwiYmluZGluZyIsIlZuIiwiaXNBcnJheUJ1ZmZlciIsIktuIiwiaXNEYXRlIiwiR24iLCJpc01hcCIsIkhuIiwiaXNSZWdFeHAiLCJKbiIsImlzU2V0IiwiWW4iLCJpc1R5cGVkQXJyYXkiLCJYbiIsIm50IiwidHQiLCJydCIsInl1IiwiZmYiLCJvaSIsIkZlIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fY2hhaW5fXyIsIl9faW5kZXhfXyIsIl9fdmFsdWVzX18iLCJfX2Rpcl9fIiwiX19maWx0ZXJlZF9fIiwiX19pdGVyYXRlZXNfXyIsIl9fdGFrZUNvdW50X18iLCJfX3ZpZXdzX18iLCJjbGVhciIsInNldCIsIl9fZGF0YV9fIiwiYWRkIiwib2YiLCJhZiIsIl9mIiwibmkiLCJTZSIsInB1c2giLCJpciIsImV0IiwiRGUiLCJMciIsInB0IiwidXQiLCJpdCIsImx1Iiwic3QiLCJvdCIsImZ0IiwiY3QiLCJ1byIsImF0IiwiQ3IiLCJXdSIsImx0IiwiVXUiLCJBaSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ2YWx1ZSIsIndyaXRhYmxlIiwiaHQiLCJLdSIsIlJ1IiwiX3QiLCJkdSIsIm1lIiwidm8iLCJJciIsIkFlIiwiTXIiLCJEciIsImtlIiwiZ2V0IiwicGYiLCJzZiIsInZlIiwiX2UiLCJ2dCIsImd0IiwiUXUiLCJkdCIsInRpIiwiYm8iLCJ5dCIsImJ0IiwieHQiLCJ3dSIsImp0Iiwid3QiLCJFZSIsIm10Iiwib28iLCJBdCIsImZvIiwia3QiLCJfdSIsIkV0IiwiU3IiLCJNZSIsIlN0IiwiT3QiLCJtaSIsImFpIiwiSXQiLCJSdCIsInp0IiwiV3QiLCJDaSIsIlV0IiwiQnQiLCJociIsIlZlIiwiTHQiLCJDdCIsIkR0IiwiTXQiLCJzZSIsImhlIiwiY29uc3RydWN0b3IiLCJkZWxldGUiLCJUdCIsIiR0IiwiRnQiLCJjaSIsImhpIiwiVGUiLCJOdCIsIlB0IiwiWnQiLCJndSIsInF0IiwiJHUiLCJKdCIsIkh0IiwiWnUiLCJWdCIsInplIiwiQmkiLCJLdCIsIkd0Iiwic3UiLCJ4ZSIsIldlIiwiSWUiLCJ6dSIsIll0IiwiQmUiLCJodSIsInpyIiwieHUiLCJPdSIsIlF0IiwiWHQiLCJ5ZSIsIldyIiwibnIiLCJ0ciIsImxyIiwicnIiLCJlciIsInhpIiwidXIiLCJ4ciIsIklpIiwiVGkiLCJvciIsImZyIiwieG8iLCJVZSIsImNyIiwiTHUiLCJhciIsInNyIiwicHIiLCJfciIsInZyIiwiZ3IiLCJkciIsInlyIiwicm8iLCJiciIsInNvIiwianIiLCJ3ciIsImZ1bmMiLCJ0aGlzQXJnIiwiYXJncyIsIm1yIiwiQXIiLCJrciIsIkVyIiwiam8iLCJJdSIsIk9yIiwic2xpY2UiLCJnaSIsImNvcHkiLCJSciIsImJ5dGVMZW5ndGgiLCJ2aSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJVciIsIkxpIiwiQnIiLCJwbyIsIl9vIiwiVHIiLCIkciIsIk9lIiwiRnIiLCJOciIsIlByIiwiYXJndW1lbnRzIiwiVnIiLCJaciIsImNoYXJBdCIsInFyIiwiTXUiLCJEdSIsInJlcGxhY2UiLCJlbyIsInByb3RvdHlwZSIsIktyIiwiZGUiLCJ1ZSIsIkpyIiwicGxhY2Vob2xkZXIiLCJHciIsIkhyIiwicGUiLCJ0aHJ1IiwicmV2ZXJzZSIsImdlIiwiaG8iLCJSZSIsInBsYW50IiwiWXIiLCJRciIsIlhyIiwibmUiLCJPaSIsInRlIiwicmUiLCJBdSIsImVlIiwiU3UiLCJ5byIsIkxlIiwiaWUiLCJZdSIsImt1Iiwib2UiLCJmZSIsImNvIiwiY2UiLCJlaSIsImFlIiwibGUiLCJuYW1lIiwibWVzc2FnZSIsInRvIiwiWmUiLCJHaSIsIml0ZXJhdGVlIiwiRnUiLCJiZSIsIm1hcCIsImplIiwid2UiLCJpbmRleCIsImlucHV0IiwiZGkiLCJleGVjIiwiamkiLCIkZSIsIkNlIiwiRGkiLCJpaSIsImNsb25lIiwiTmUiLCJQZSIsInFlIiwiS2UiLCJHZSIsIiRpIiwiSGUiLCJKZSIsIlllIiwiUWUiLCJYZSIsIm51IiwidHUiLCJpbyIsInJ1IiwiZXUiLCJ1dSIsIml1Iiwib3UiLCJmdSIsIkdvIiwibGVhZGluZyIsIm1heFdhaXQiLCJ0cmFpbGluZyIsImNhbmNlbCIsImxvIiwiZmx1c2giLCJjdSIsImNhY2hlIiwiQ2FjaGUiLCJhdSIsInB1IiwidnUiLCJidSIsImxpIiwianUiLCJtdSIsIndpIiwibmV4dCIsImRvbmUiLCJFdSIsInZhbHVlT2YiLCJCdSIsIkN1IiwiJGYiLCJ0b0xvd2VyQ2FzZSIsIlR1IiwiTnUiLCJjaGFpbiIsIlB1IiwicXUiLCJWdSIsImRlZmF1bHRzIiwicGljayIsIkd1IiwiRGF0ZSIsIkh1IiwiRXJyb3IiLCJKdSIsIk1hdGgiLCJYdSIsIlN0cmluZyIsIlR5cGVFcnJvciIsInJpIiwidWkiLCJ0b1N0cmluZyIsImhhc093blByb3BlcnR5IiwiZmkiLCJrZXlzIiwiSUVfUFJPVE8iLCJzaSIsInBpIiwiQnVmZmVyIiwiX2kiLCJTeW1ib2wiLCJVaW50OEFycmF5IiwiYWxsb2NVbnNhZmUiLCJnZXRQcm90b3R5cGVPZiIsInlpIiwiY3JlYXRlIiwiYmkiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInNwbGljZSIsImlzQ29uY2F0U3ByZWFkYWJsZSIsIml0ZXJhdG9yIiwidG9TdHJpbmdUYWciLCJraSIsImNsZWFyVGltZW91dCIsIkVpIiwibm93IiwiU2kiLCJzZXRUaW1lb3V0IiwiY2VpbCIsImZsb29yIiwiUmkiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJ6aSIsImlzQnVmZmVyIiwiV2kiLCJpc0Zpbml0ZSIsIlVpIiwibWF4IiwibWluIiwiTWkiLCJyYW5kb20iLCJGaSIsIk5pIiwiUGkiLCJaaSIsInFpIiwiVmkiLCJLaSIsIkhpIiwiSmkiLCJZaSIsIlFpIiwiWGkiLCJubyIsInRlbXBsYXRlU2V0dGluZ3MiLCJlc2NhcGUiLCJldmFsdWF0ZSIsImludGVycG9sYXRlIiwidmFyaWFibGUiLCJpbXBvcnRzIiwicG9wIiwiaGFzaCIsInN0cmluZyIsImFvIiwiQXJyYXlCdWZmZXIiLCJyZXNvbHZlIiwiZ28iLCJjaGFyQ29kZUF0Iiwid28iLCJtbyIsIkFvIiwia28iLCJFbyIsIlNvIiwiT28iLCJJbyIsIlJvIiwiem8iLCJXbyIsIlVvIiwiQm8iLCJMbyIsIkNvIiwiRG8iLCJNbyIsIlRvIiwiJG8iLCJGbyIsIk5vIiwiUG8iLCJabyIsInFvIiwiVm8iLCJLbyIsIkhvIiwiSm8iLCJZbyIsIlFvIiwiWG8iLCJuZiIsInRmIiwicmYiLCJlZiIsInVmIiwiaXNBcnJheSIsImNmIiwibGYiLCJoZiIsInZmIiwiZ2YiLCJkZiIsInlmIiwiYmYiLCJ4ZiIsImpmIiwid2YiLCJtZiIsIk9mIiwiQWYiLCJrZiIsIkVmIiwiU2YiLCJJZiIsIlJmIiwiemYiLCJXZiIsIlVmIiwiQmYiLCJMZiIsIkNmIiwiRGYiLCJNZiIsIlRmIiwidG9VcHBlckNhc2UiLCJGZiIsIk5mIiwiUGYiLCJaZiIsInFmIiwiVmYiLCJLZiIsIkdmIiwiSGYiLCJKZiIsIllmIiwiUWYiLCJYZiIsIm5jIiwidGMiLCJyYyIsImVjIiwidWMiLCJhZnRlciIsImFyeSIsImFzc2lnbiIsImFzc2lnbkluIiwiYXNzaWduSW5XaXRoIiwiYXNzaWduV2l0aCIsImJlZm9yZSIsImJpbmQiLCJiaW5kQWxsIiwiYmluZEtleSIsImNhc3RBcnJheSIsImNodW5rIiwiY29tcGFjdCIsImNvbmNhdCIsImNvbmQiLCJjb25mb3JtcyIsImNvbnN0YW50IiwiY291bnRCeSIsImN1cnJ5IiwiY3VycnlSaWdodCIsImRlYm91bmNlIiwiZGVmYXVsdHNEZWVwIiwiZGVmZXIiLCJkZWxheSIsImRpZmZlcmVuY2UiLCJkaWZmZXJlbmNlQnkiLCJkaWZmZXJlbmNlV2l0aCIsImRyb3AiLCJkcm9wUmlnaHQiLCJkcm9wUmlnaHRXaGlsZSIsImRyb3BXaGlsZSIsImZpbGwiLCJmaWx0ZXIiLCJmbGF0TWFwIiwiZmxhdE1hcERlZXAiLCJmbGF0TWFwRGVwdGgiLCJmbGF0dGVuIiwiZmxhdHRlbkRlZXAiLCJmbGF0dGVuRGVwdGgiLCJmbGlwIiwiZmxvdyIsImZsb3dSaWdodCIsImZyb21QYWlycyIsImZ1bmN0aW9ucyIsImZ1bmN0aW9uc0luIiwiZ3JvdXBCeSIsImluaXRpYWwiLCJpbnRlcnNlY3Rpb24iLCJpbnRlcnNlY3Rpb25CeSIsImludGVyc2VjdGlvbldpdGgiLCJpbnZlcnQiLCJpbnZlcnRCeSIsImludm9rZU1hcCIsImtleUJ5Iiwia2V5c0luIiwibWFwS2V5cyIsIm1hcFZhbHVlcyIsIm1hdGNoZXMiLCJtYXRjaGVzUHJvcGVydHkiLCJtZW1vaXplIiwibWVyZ2UiLCJtZXJnZVdpdGgiLCJtZXRob2QiLCJtZXRob2RPZiIsIm1peGluIiwibmVnYXRlIiwibnRoQXJnIiwib21pdCIsIm9taXRCeSIsIm9uY2UiLCJvcmRlckJ5Iiwib3ZlciIsIm92ZXJBcmdzIiwib3ZlckV2ZXJ5Iiwib3ZlclNvbWUiLCJwYXJ0aWFsIiwicGFydGlhbFJpZ2h0IiwicGFydGl0aW9uIiwicGlja0J5IiwicHJvcGVydHkiLCJwcm9wZXJ0eU9mIiwicHVsbCIsInB1bGxBbGwiLCJwdWxsQWxsQnkiLCJwdWxsQWxsV2l0aCIsInB1bGxBdCIsInJhbmdlIiwicmFuZ2VSaWdodCIsInJlYXJnIiwicmVqZWN0IiwicmVtb3ZlIiwicmVzdCIsInNhbXBsZVNpemUiLCJzZXRXaXRoIiwic2h1ZmZsZSIsInNvcnRCeSIsInNvcnRlZFVuaXEiLCJzb3J0ZWRVbmlxQnkiLCJzcHJlYWQiLCJ0YWlsIiwidGFrZSIsInRha2VSaWdodCIsInRha2VSaWdodFdoaWxlIiwidGFrZVdoaWxlIiwidGFwIiwidGhyb3R0bGUiLCJ0b0FycmF5IiwidG9QYWlycyIsInRvUGFpcnNJbiIsInRvUGF0aCIsInRvUGxhaW5PYmplY3QiLCJ0cmFuc2Zvcm0iLCJ1bmFyeSIsInVuaW9uIiwidW5pb25CeSIsInVuaW9uV2l0aCIsInVuaXEiLCJ1bmlxQnkiLCJ1bmlxV2l0aCIsInVuc2V0IiwidW56aXAiLCJ1bnppcFdpdGgiLCJ1cGRhdGUiLCJ1cGRhdGVXaXRoIiwidmFsdWVzIiwidmFsdWVzSW4iLCJ3aXRob3V0Iiwid29yZHMiLCJ3cmFwIiwieG9yIiwieG9yQnkiLCJ4b3JXaXRoIiwiemlwIiwiemlwT2JqZWN0IiwiemlwT2JqZWN0RGVlcCIsInppcFdpdGgiLCJlbnRyaWVzIiwiZW50cmllc0luIiwiZXh0ZW5kIiwiZXh0ZW5kV2l0aCIsImF0dGVtcHQiLCJjYW1lbENhc2UiLCJjYXBpdGFsaXplIiwiY2xhbXAiLCJjbG9uZURlZXAiLCJjbG9uZURlZXBXaXRoIiwiY2xvbmVXaXRoIiwiY29uZm9ybXNUbyIsImRlYnVyciIsImRlZmF1bHRUbyIsImRpdmlkZSIsImVuZHNXaXRoIiwiZXEiLCJlc2NhcGVSZWdFeHAiLCJldmVyeSIsImZpbmQiLCJmaW5kSW5kZXgiLCJmaW5kS2V5IiwiZmluZExhc3QiLCJmaW5kTGFzdEluZGV4IiwiZmluZExhc3RLZXkiLCJmb3JFYWNoUmlnaHQiLCJmb3JJbiIsImZvckluUmlnaHQiLCJmb3JPd24iLCJmb3JPd25SaWdodCIsImd0ZSIsImhhc0luIiwiaGVhZCIsImlkZW50aXR5IiwiaW5jbHVkZXMiLCJpbmRleE9mIiwiaW5SYW5nZSIsImludm9rZSIsImlzQXJndW1lbnRzIiwiaXNBcnJheUxpa2UiLCJpc0FycmF5TGlrZU9iamVjdCIsImlzQm9vbGVhbiIsImlzRWxlbWVudCIsImlzRW1wdHkiLCJpc0VxdWFsIiwiaXNFcXVhbFdpdGgiLCJpc0Vycm9yIiwiaXNGdW5jdGlvbiIsImlzSW50ZWdlciIsImlzTGVuZ3RoIiwiaXNNYXRjaCIsImlzTWF0Y2hXaXRoIiwiaXNOYU4iLCJpc05hdGl2ZSIsImlzTmlsIiwiaXNOdWxsIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzT2JqZWN0TGlrZSIsImlzUGxhaW5PYmplY3QiLCJpc1NhZmVJbnRlZ2VyIiwiaXNTdHJpbmciLCJpc1N5bWJvbCIsImlzVW5kZWZpbmVkIiwiaXNXZWFrTWFwIiwiaXNXZWFrU2V0Iiwia2ViYWJDYXNlIiwibGFzdCIsImxhc3RJbmRleE9mIiwibG93ZXJDYXNlIiwibG93ZXJGaXJzdCIsImx0ZSIsIm1heEJ5IiwibWVhbiIsIm1lYW5CeSIsIm1pbkJ5Iiwic3R1YkFycmF5Iiwic3R1YkZhbHNlIiwic3R1Yk9iamVjdCIsInN0dWJTdHJpbmciLCJzdHViVHJ1ZSIsIm11bHRpcGx5IiwibnRoIiwibm9Db25mbGljdCIsIm5vb3AiLCJwYWQiLCJwYWRFbmQiLCJwYWRTdGFydCIsInJlZHVjZSIsInJlZHVjZVJpZ2h0IiwicmVwZWF0IiwicmVzdWx0Iiwicm91bmQiLCJydW5JbkNvbnRleHQiLCJzYW1wbGUiLCJzbmFrZUNhc2UiLCJzb21lIiwic29ydGVkSW5kZXgiLCJzb3J0ZWRJbmRleEJ5Iiwic29ydGVkSW5kZXhPZiIsInNvcnRlZExhc3RJbmRleCIsInNvcnRlZExhc3RJbmRleEJ5Iiwic29ydGVkTGFzdEluZGV4T2YiLCJzdGFydENhc2UiLCJzdGFydHNXaXRoIiwic3VidHJhY3QiLCJzdW0iLCJzdW1CeSIsInRlbXBsYXRlIiwic291cmNlVVJMIiwidGltZXMiLCJ0b0Zpbml0ZSIsInRvSW50ZWdlciIsInRvTGVuZ3RoIiwidG9Mb3dlciIsInRvTnVtYmVyIiwidG9TYWZlSW50ZWdlciIsInRvVXBwZXIiLCJ0cmltIiwidHJpbUVuZCIsInRyaW1TdGFydCIsInRydW5jYXRlIiwic2VwYXJhdG9yIiwib21pc3Npb24iLCJzZWFyY2giLCJ1bmVzY2FwZSIsInVuaXF1ZUlkIiwidXBwZXJDYXNlIiwidXBwZXJGaXJzdCIsImVhY2giLCJlYWNoUmlnaHQiLCJmaXJzdCIsIlZFUlNJT04iLCJ0eXBlIiwic3RhcnQiLCJlbmQiLCJjb21taXQiLCJ0b0pTT04iLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJ5RkFBQTs7OztBQUlBLENBQUMsQ0FBQyxZQUFVLENBQUMsU0FBU0EsQ0FBVCxDQUFXQSxDQUFYLEVBQWFDLENBQWIsRUFBZUMsQ0FBZixFQUFpQixDQUFDLFFBQU9BLENBQUMsQ0FBQ0MsTUFBVCxHQUFpQixLQUFLLENBQUwsQ0FBTyxPQUFPSCxDQUFDLENBQUNJLElBQUYsQ0FBT0gsQ0FBUCxDQUFQLENBQWlCLEtBQUssQ0FBTCxDQUFPLE9BQU9ELENBQUMsQ0FBQ0ksSUFBRixDQUFPSCxDQUFQLEVBQVNDLENBQUMsQ0FBQyxDQUFELENBQVYsQ0FBUCxDQUFzQixLQUFLLENBQUwsQ0FBTyxPQUFPRixDQUFDLENBQUNJLElBQUYsQ0FBT0gsQ0FBUCxFQUFTQyxDQUFDLENBQUMsQ0FBRCxD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QUFDa1EsU0FBSCxDQUFhbWlCLE1BQWIsR0FBb0JyeUIsRUFBRSxDQUFDa1EsU0FBSCxDQUFhbUcsT0FBYixHQUFxQnJXLEVBQUUsQ0FBQ2tRLFNBQUgsQ0FBYXBLLEtBQWIsR0FBbUIsWUFBVSxDQUFDLE9BQU82SCxFQUFFLENBQUMsS0FBS3RLLFdBQU4sRUFBa0IsS0FBS0MsV0FBdkIsQ0FBVCxDQUE2QyxDQXpDdkIsRUF5Q3dCdEQsRUFBRSxDQUFDa1EsU0FBSCxDQUFhNmhCLEtBQWIsR0FBbUIveEIsRUFBRSxDQUFDa1EsU0FBSCxDQUFhMGIsSUF6Q3hELEVBeUM2RDNWLEVBQUUsS0FBR2pXLEVBQUUsQ0FBQ2tRLFNBQUgsQ0FBYStGLEVBQWIsSUFBaUIzQixFQUFwQixDQXpDL0Q7QUEwQ2hidFUsTUExQ3lhLENBMEN0YSxDQXJINk0sRUFOdEksQ0EySHBFLFNBQW9FbUIsRUFBRSxDQUFDaEcsQ0FBSCxHQUFLNkgsRUFBTCxFQUFTc3ZCLG1DQUFPLFlBQVUsQ0FBQyxPQUFPdHZCLEVBQVAsQ0FBVSxDQUF0QjtBQUFBLG9HQUFuRixJQUE0R3hCLFNBQTVHLENBQXNKLENBcEkzSixFQW9JNkpwSCxJQXBJN0osUyIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBMb2Rhc2ggbG9kYXNoLmNvbS9saWNlbnNlIHwgVW5kZXJzY29yZS5qcyAxLjguMyB1bmRlcnNjb3JlanMub3JnL0xJQ0VOU0VcclxuICovXHJcbjsoZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdCxyKXtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbi5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gbi5jYWxsKHQsclswXSk7Y2FzZSAyOnJldHVybiBuLmNhbGwodCxyWzBdLHJbMV0pO2Nhc2UgMzpyZXR1cm4gbi5jYWxsKHQsclswXSxyWzFdLHJbMl0pfXJldHVybiBuLmFwcGx5KHQscil9ZnVuY3Rpb24gdChuLHQscixlKXtmb3IodmFyIHU9LTEsaT1udWxsPT1uPzA6bi5sZW5ndGg7Kyt1PGk7KXt2YXIgbz1uW3VdO3QoZSxvLHIobyksbil9cmV0dXJuIGV9ZnVuY3Rpb24gcihuLHQpe2Zvcih2YXIgcj0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aDsrK3I8ZSYmZmFsc2UhPT10KG5bcl0scixuKTspO3JldHVybiBufWZ1bmN0aW9uIGUobix0KXtmb3IodmFyIHI9bnVsbD09bj8wOm4ubGVuZ3RoO3ItLSYmZmFsc2UhPT10KG5bcl0scixuKTspO3JldHVybiBufWZ1bmN0aW9uIHUobix0KXtmb3IodmFyIHI9LTEsZT1udWxsPT1uPzA6bi5sZW5ndGg7KytyPGU7KWlmKCF0KG5bcl0scixuKSlyZXR1cm4gZmFsc2U7XHJcbnJldHVybiB0cnVlfWZ1bmN0aW9uIGkobix0KXtmb3IodmFyIHI9LTEsZT1udWxsPT1uPzA6bi5sZW5ndGgsdT0wLGk9W107KytyPGU7KXt2YXIgbz1uW3JdO3QobyxyLG4pJiYoaVt1KytdPW8pfXJldHVybiBpfWZ1bmN0aW9uIG8obix0KXtyZXR1cm4hKG51bGw9PW58fCFuLmxlbmd0aCkmJi0xPHYobix0LDApfWZ1bmN0aW9uIGYobix0LHIpe2Zvcih2YXIgZT0tMSx1PW51bGw9PW4/MDpuLmxlbmd0aDsrK2U8dTspaWYocih0LG5bZV0pKXJldHVybiB0cnVlO3JldHVybiBmYWxzZX1mdW5jdGlvbiBjKG4sdCl7Zm9yKHZhciByPS0xLGU9bnVsbD09bj8wOm4ubGVuZ3RoLHU9QXJyYXkoZSk7KytyPGU7KXVbcl09dChuW3JdLHIsbik7cmV0dXJuIHV9ZnVuY3Rpb24gYShuLHQpe2Zvcih2YXIgcj0tMSxlPXQubGVuZ3RoLHU9bi5sZW5ndGg7KytyPGU7KW5bdStyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGwobix0LHIsZSl7dmFyIHU9LTEsaT1udWxsPT1uPzA6bi5sZW5ndGg7Zm9yKGUmJmkmJihyPW5bKyt1XSk7Kyt1PGk7KXI9dChyLG5bdV0sdSxuKTtcclxucmV0dXJuIHJ9ZnVuY3Rpb24gcyhuLHQscixlKXt2YXIgdT1udWxsPT1uPzA6bi5sZW5ndGg7Zm9yKGUmJnUmJihyPW5bLS11XSk7dS0tOylyPXQocixuW3VdLHUsbik7cmV0dXJuIHJ9ZnVuY3Rpb24gaChuLHQpe2Zvcih2YXIgcj0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aDsrK3I8ZTspaWYodChuW3JdLHIsbikpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIHAobix0LHIpe3ZhciBlO3JldHVybiByKG4sZnVuY3Rpb24obixyLHUpe2lmKHQobixyLHUpKXJldHVybiBlPXIsZmFsc2V9KSxlfWZ1bmN0aW9uIF8obix0LHIsZSl7dmFyIHU9bi5sZW5ndGg7Zm9yKHIrPWU/MTotMTtlP3ItLTorK3I8dTspaWYodChuW3JdLHIsbikpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gdihuLHQscil7aWYodD09PXQpbjp7LS1yO2Zvcih2YXIgZT1uLmxlbmd0aDsrK3I8ZTspaWYobltyXT09PXQpe249cjticmVhayBufW49LTF9ZWxzZSBuPV8obixkLHIpO3JldHVybiBufWZ1bmN0aW9uIGcobix0LHIsZSl7XHJcbi0tcjtmb3IodmFyIHU9bi5sZW5ndGg7KytyPHU7KWlmKGUobltyXSx0KSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBkKG4pe3JldHVybiBuIT09bn1mdW5jdGlvbiB5KG4sdCl7dmFyIHI9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiByP20obix0KS9yOkZ9ZnVuY3Rpb24gYihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/VDp0W25dfX1mdW5jdGlvbiB4KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09bj9UOm5bdF19fWZ1bmN0aW9uIGoobix0LHIsZSx1KXtyZXR1cm4gdShuLGZ1bmN0aW9uKG4sdSxpKXtyPWU/KGU9ZmFsc2Usbik6dChyLG4sdSxpKX0pLHJ9ZnVuY3Rpb24gdyhuLHQpe3ZhciByPW4ubGVuZ3RoO2ZvcihuLnNvcnQodCk7ci0tOyluW3JdPW5bcl0uYztyZXR1cm4gbn1mdW5jdGlvbiBtKG4sdCl7Zm9yKHZhciByLGU9LTEsdT1uLmxlbmd0aDsrK2U8dTspe3ZhciBpPXQobltlXSk7aSE9PVQmJihyPXI9PT1UP2k6citpKX1yZXR1cm4gcjtcclxufWZ1bmN0aW9uIEEobix0KXtmb3IodmFyIHI9LTEsZT1BcnJheShuKTsrK3I8bjspZVtyXT10KHIpO3JldHVybiBlfWZ1bmN0aW9uIGsobix0KXtyZXR1cm4gYyh0LGZ1bmN0aW9uKHQpe3JldHVyblt0LG5bdF1dfSl9ZnVuY3Rpb24gRShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9fWZ1bmN0aW9uIFMobix0KXtyZXR1cm4gYyh0LGZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSl9ZnVuY3Rpb24gTyhuLHQpe3JldHVybiBuLmhhcyh0KX1mdW5jdGlvbiBJKG4sdCl7Zm9yKHZhciByPS0xLGU9bi5sZW5ndGg7KytyPGUmJi0xPHYodCxuW3JdLDApOyk7cmV0dXJuIHJ9ZnVuY3Rpb24gUihuLHQpe2Zvcih2YXIgcj1uLmxlbmd0aDtyLS0mJi0xPHYodCxuW3JdLDApOyk7cmV0dXJuIHJ9ZnVuY3Rpb24geihuKXtyZXR1cm5cIlxcXFxcIitMbltuXX1mdW5jdGlvbiBXKG4pe3ZhciB0PS0xLHI9QXJyYXkobi5zaXplKTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4sZSl7clsrK3RdPVtlLG5dO1xyXG59KSxyfWZ1bmN0aW9uIFUobix0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG4odChyKSl9fWZ1bmN0aW9uIEIobix0KXtmb3IodmFyIHI9LTEsZT1uLmxlbmd0aCx1PTAsaT1bXTsrK3I8ZTspe3ZhciBvPW5bcl07byE9PXQmJlwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiIT09b3x8KG5bcl09XCJfX2xvZGFzaF9wbGFjZWhvbGRlcl9fXCIsaVt1KytdPXIpfXJldHVybiBpfWZ1bmN0aW9uIEwobil7dmFyIHQ9LTEscj1BcnJheShuLnNpemUpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7clsrK3RdPW59KSxyfWZ1bmN0aW9uIEMobil7dmFyIHQ9LTEscj1BcnJheShuLnNpemUpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7clsrK3RdPVtuLG5dfSkscn1mdW5jdGlvbiBEKG4pe2lmKFJuLnRlc3Qobikpe2Zvcih2YXIgdD1Pbi5sYXN0SW5kZXg9MDtPbi50ZXN0KG4pOykrK3Q7bj10fWVsc2Ugbj1RbihuKTtyZXR1cm4gbn1mdW5jdGlvbiBNKG4pe3JldHVybiBSbi50ZXN0KG4pP24ubWF0Y2goT24pfHxbXTpuLnNwbGl0KFwiXCIpO1xyXG59dmFyIFQsJD0xLzAsRj1OYU4sTj1bW1wiYXJ5XCIsMTI4XSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsMzJdLFtcInBhcnRpYWxSaWdodFwiLDY0XSxbXCJyZWFyZ1wiLDI1Nl1dLFA9L1xcYl9fcFxcKz0nJzsvZyxaPS9cXGIoX19wXFwrPSknJ1xcKy9nLHE9LyhfX2VcXCguKj9cXCl8XFxiX190XFwpKVxcKycnOy9nLFY9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLEs9L1smPD5cIiddL2csRz1SZWdFeHAoVi5zb3VyY2UpLEg9UmVnRXhwKEsuc291cmNlKSxKPS88JS0oW1xcc1xcU10rPyklPi9nLFk9LzwlKFtcXHNcXFNdKz8pJT4vZyxRPS88JT0oW1xcc1xcU10rPyklPi9nLFg9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxubj0vXlxcdyokLyx0bj0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2cscm49L1tcXFxcXiQuKis/KClbXFxde318XS9nLGVuPVJlZ0V4cChybi5zb3VyY2UpLHVuPS9eXFxzK3xcXHMrJC9nLG9uPS9eXFxzKy8sZm49L1xccyskLyxjbj0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFuPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsbj0vLD8gJiAvLHNuPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxobj0vXFxcXChcXFxcKT8vZyxwbj0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2csX249L1xcdyokLyx2bj0vXlstK10weFswLTlhLWZdKyQvaSxnbj0vXjBiWzAxXSskL2ksZG49L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyx5bj0vXjBvWzAtN10rJC9pLGJuPS9eKD86MHxbMS05XVxcZCopJC8seG49L1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2csam49LygkXikvLHduPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZyxtbj1cIltcXFxcdWZlMGVcXFxcdWZlMGZdPyg/OltcXFxcdTAzMDAtXFxcXHUwMzZmXFxcXHVmZTIwLVxcXFx1ZmUyZlxcXFx1MjBkMC1cXFxcdTIwZmZdfFxcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXSk/KD86XFxcXHUyMDBkKD86W15cXFxcdWQ4MDAtXFxcXHVkZmZmXXwoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9fFtcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXSlbXFxcXHVmZTBlXFxcXHVmZTBmXT8oPzpbXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXXxcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0pPykqXCIsQW49XCIoPzpbXFxcXHUyNzAwLVxcXFx1MjdiZl18KD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfXxbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0pXCIrbW4sa249XCIoPzpbXlxcXFx1ZDgwMC1cXFxcdWRmZmZdW1xcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZl0/fFtcXFxcdTAzMDAtXFxcXHUwMzZmXFxcXHVmZTIwLVxcXFx1ZmUyZlxcXFx1MjBkMC1cXFxcdTIwZmZdfCg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn18W1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdfFtcXFxcdWQ4MDAtXFxcXHVkZmZmXSlcIixFbj1SZWdFeHAoXCJbJ1xcdTIwMTldXCIsXCJnXCIpLFNuPVJlZ0V4cChcIltcXFxcdTAzMDAtXFxcXHUwMzZmXFxcXHVmZTIwLVxcXFx1ZmUyZlxcXFx1MjBkMC1cXFxcdTIwZmZdXCIsXCJnXCIpLE9uPVJlZ0V4cChcIlxcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXSg/PVxcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXSl8XCIra24rbW4sXCJnXCIpLEluPVJlZ0V4cChbXCJbQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlXT9bYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXSsoPzpbJ1xcdTIwMTldKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPyg/PVtcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXXxbQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlXXwkKXwoPzpbQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlXXxbXlxcXFx1ZDgwMC1cXFxcdWRmZmZcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXFxcXGQrXFxcXHUyNzAwLVxcXFx1MjdiZmEtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZV0pKyg/OlsnXFx1MjAxOV0oPzpEfExMfE18UkV8U3xUfFZFKSk/KD89W1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjdcXFxceDAwLVxcXFx4MmZcXFxceDNhLVxcXFx4NDBcXFxceDViLVxcXFx4NjBcXFxceDdiLVxcXFx4YmZcXFxcdTIwMDAtXFxcXHUyMDZmIFxcXFx0XFxcXHgwYlxcXFxmXFxcXHhhMFxcXFx1ZmVmZlxcXFxuXFxcXHJcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdTE2ODBcXFxcdTE4MGVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMGFcXFxcdTIwMmZcXFxcdTIwNWZcXFxcdTMwMDBdfFtBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVdKD86W2EtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZl18W15cXFxcdWQ4MDAtXFxcXHVkZmZmXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFxcXFxkK1xcXFx1MjcwMC1cXFxcdTI3YmZhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVdKXwkKXxbQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlXT8oPzpbYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXXxbXlxcXFx1ZDgwMC1cXFxcdWRmZmZcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXFxcXGQrXFxcXHUyNzAwLVxcXFx1MjdiZmEtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZV0pKyg/OlsnXFx1MjAxOV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/fFtBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVdKyg/OlsnXFx1MjAxOV0oPzpEfExMfE18UkV8U3xUfFZFKSk/fFxcXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcXFxkVEgpKD89XFxcXGJ8W2Etel9dKXxcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSl8XFxcXGQrXCIsQW5dLmpvaW4oXCJ8XCIpLFwiZ1wiKSxSbj1SZWdFeHAoXCJbXFxcXHUyMDBkXFxcXHVkODAwLVxcXFx1ZGZmZlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZlxcXFx1ZmUwZVxcXFx1ZmUwZl1cIiksem49L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8sV249XCJBcnJheSBCdWZmZXIgRGF0YVZpZXcgRGF0ZSBFcnJvciBGbG9hdDMyQXJyYXkgRmxvYXQ2NEFycmF5IEZ1bmN0aW9uIEludDhBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgTWFwIE1hdGggT2JqZWN0IFByb21pc2UgUmVnRXhwIFNldCBTdHJpbmcgU3ltYm9sIFR5cGVFcnJvciBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5IFdlYWtNYXAgXyBjbGVhclRpbWVvdXQgaXNGaW5pdGUgcGFyc2VJbnQgc2V0VGltZW91dFwiLnNwbGl0KFwiIFwiKSxVbj17fTtcclxuVW5bXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIl09VW5bXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIl09VW5bXCJbb2JqZWN0IEludDhBcnJheV1cIl09VW5bXCJbb2JqZWN0IEludDE2QXJyYXldXCJdPVVuW1wiW29iamVjdCBJbnQzMkFycmF5XVwiXT1VbltcIltvYmplY3QgVWludDhBcnJheV1cIl09VW5bXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiXT1VbltcIltvYmplY3QgVWludDE2QXJyYXldXCJdPVVuW1wiW29iamVjdCBVaW50MzJBcnJheV1cIl09dHJ1ZSxVbltcIltvYmplY3QgQXJndW1lbnRzXVwiXT1VbltcIltvYmplY3QgQXJyYXldXCJdPVVuW1wiW29iamVjdCBBcnJheUJ1ZmZlcl1cIl09VW5bXCJbb2JqZWN0IEJvb2xlYW5dXCJdPVVuW1wiW29iamVjdCBEYXRhVmlld11cIl09VW5bXCJbb2JqZWN0IERhdGVdXCJdPVVuW1wiW29iamVjdCBFcnJvcl1cIl09VW5bXCJbb2JqZWN0IEZ1bmN0aW9uXVwiXT1VbltcIltvYmplY3QgTWFwXVwiXT1VbltcIltvYmplY3QgTnVtYmVyXVwiXT1VbltcIltvYmplY3QgT2JqZWN0XVwiXT1VbltcIltvYmplY3QgUmVnRXhwXVwiXT1VbltcIltvYmplY3QgU2V0XVwiXT1VbltcIltvYmplY3QgU3RyaW5nXVwiXT1VbltcIltvYmplY3QgV2Vha01hcF1cIl09ZmFsc2U7XHJcbnZhciBCbj17fTtCbltcIltvYmplY3QgQXJndW1lbnRzXVwiXT1CbltcIltvYmplY3QgQXJyYXldXCJdPUJuW1wiW29iamVjdCBBcnJheUJ1ZmZlcl1cIl09Qm5bXCJbb2JqZWN0IERhdGFWaWV3XVwiXT1CbltcIltvYmplY3QgQm9vbGVhbl1cIl09Qm5bXCJbb2JqZWN0IERhdGVdXCJdPUJuW1wiW29iamVjdCBGbG9hdDMyQXJyYXldXCJdPUJuW1wiW29iamVjdCBGbG9hdDY0QXJyYXldXCJdPUJuW1wiW29iamVjdCBJbnQ4QXJyYXldXCJdPUJuW1wiW29iamVjdCBJbnQxNkFycmF5XVwiXT1CbltcIltvYmplY3QgSW50MzJBcnJheV1cIl09Qm5bXCJbb2JqZWN0IE1hcF1cIl09Qm5bXCJbb2JqZWN0IE51bWJlcl1cIl09Qm5bXCJbb2JqZWN0IE9iamVjdF1cIl09Qm5bXCJbb2JqZWN0IFJlZ0V4cF1cIl09Qm5bXCJbb2JqZWN0IFNldF1cIl09Qm5bXCJbb2JqZWN0IFN0cmluZ11cIl09Qm5bXCJbb2JqZWN0IFN5bWJvbF1cIl09Qm5bXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCJdPUJuW1wiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIl09Qm5bXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiXT1CbltcIltvYmplY3QgVWludDMyQXJyYXldXCJdPXRydWUsXHJcbkJuW1wiW29iamVjdCBFcnJvcl1cIl09Qm5bXCJbb2JqZWN0IEZ1bmN0aW9uXVwiXT1CbltcIltvYmplY3QgV2Vha01hcF1cIl09ZmFsc2U7dmFyIExuPXtcIlxcXFxcIjpcIlxcXFxcIixcIidcIjpcIidcIixcIlxcblwiOlwiblwiLFwiXFxyXCI6XCJyXCIsXCJcXHUyMDI4XCI6XCJ1MjAyOFwiLFwiXFx1MjAyOVwiOlwidTIwMjlcIn0sQ249cGFyc2VGbG9hdCxEbj1wYXJzZUludCxNbj10eXBlb2YgZ2xvYmFsPT1cIm9iamVjdFwiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxUbj10eXBlb2Ygc2VsZj09XCJvYmplY3RcIiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsJG49TW58fFRufHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksRm49dHlwZW9mIGV4cG9ydHM9PVwib2JqZWN0XCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLE5uPUZuJiZ0eXBlb2YgbW9kdWxlPT1cIm9iamVjdFwiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxQbj1ObiYmTm4uZXhwb3J0cz09PUZuLFpuPVBuJiZNbi5wcm9jZXNzLHFuPWZ1bmN0aW9uKCl7XHJcbnRyeXt2YXIgbj1ObiYmTm4ucmVxdWlyZSYmTm4ucmVxdWlyZShcInV0aWxcIikudHlwZXM7cmV0dXJuIG4/bjpabiYmWm4uYmluZGluZyYmWm4uYmluZGluZyhcInV0aWxcIil9Y2F0Y2gobil7fX0oKSxWbj1xbiYmcW4uaXNBcnJheUJ1ZmZlcixLbj1xbiYmcW4uaXNEYXRlLEduPXFuJiZxbi5pc01hcCxIbj1xbiYmcW4uaXNSZWdFeHAsSm49cW4mJnFuLmlzU2V0LFluPXFuJiZxbi5pc1R5cGVkQXJyYXksUW49YihcImxlbmd0aFwiKSxYbj14KHtcIlxceGMwXCI6XCJBXCIsXCJcXHhjMVwiOlwiQVwiLFwiXFx4YzJcIjpcIkFcIixcIlxceGMzXCI6XCJBXCIsXCJcXHhjNFwiOlwiQVwiLFwiXFx4YzVcIjpcIkFcIixcIlxceGUwXCI6XCJhXCIsXCJcXHhlMVwiOlwiYVwiLFwiXFx4ZTJcIjpcImFcIixcIlxceGUzXCI6XCJhXCIsXCJcXHhlNFwiOlwiYVwiLFwiXFx4ZTVcIjpcImFcIixcIlxceGM3XCI6XCJDXCIsXCJcXHhlN1wiOlwiY1wiLFwiXFx4ZDBcIjpcIkRcIixcIlxceGYwXCI6XCJkXCIsXCJcXHhjOFwiOlwiRVwiLFwiXFx4YzlcIjpcIkVcIixcIlxceGNhXCI6XCJFXCIsXCJcXHhjYlwiOlwiRVwiLFwiXFx4ZThcIjpcImVcIixcIlxceGU5XCI6XCJlXCIsXCJcXHhlYVwiOlwiZVwiLFwiXFx4ZWJcIjpcImVcIixcclxuXCJcXHhjY1wiOlwiSVwiLFwiXFx4Y2RcIjpcIklcIixcIlxceGNlXCI6XCJJXCIsXCJcXHhjZlwiOlwiSVwiLFwiXFx4ZWNcIjpcImlcIixcIlxceGVkXCI6XCJpXCIsXCJcXHhlZVwiOlwiaVwiLFwiXFx4ZWZcIjpcImlcIixcIlxceGQxXCI6XCJOXCIsXCJcXHhmMVwiOlwiblwiLFwiXFx4ZDJcIjpcIk9cIixcIlxceGQzXCI6XCJPXCIsXCJcXHhkNFwiOlwiT1wiLFwiXFx4ZDVcIjpcIk9cIixcIlxceGQ2XCI6XCJPXCIsXCJcXHhkOFwiOlwiT1wiLFwiXFx4ZjJcIjpcIm9cIixcIlxceGYzXCI6XCJvXCIsXCJcXHhmNFwiOlwib1wiLFwiXFx4ZjVcIjpcIm9cIixcIlxceGY2XCI6XCJvXCIsXCJcXHhmOFwiOlwib1wiLFwiXFx4ZDlcIjpcIlVcIixcIlxceGRhXCI6XCJVXCIsXCJcXHhkYlwiOlwiVVwiLFwiXFx4ZGNcIjpcIlVcIixcIlxceGY5XCI6XCJ1XCIsXCJcXHhmYVwiOlwidVwiLFwiXFx4ZmJcIjpcInVcIixcIlxceGZjXCI6XCJ1XCIsXCJcXHhkZFwiOlwiWVwiLFwiXFx4ZmRcIjpcInlcIixcIlxceGZmXCI6XCJ5XCIsXCJcXHhjNlwiOlwiQWVcIixcIlxceGU2XCI6XCJhZVwiLFwiXFx4ZGVcIjpcIlRoXCIsXCJcXHhmZVwiOlwidGhcIixcIlxceGRmXCI6XCJzc1wiLFwiXFx1MDEwMFwiOlwiQVwiLFwiXFx1MDEwMlwiOlwiQVwiLFwiXFx1MDEwNFwiOlwiQVwiLFwiXFx1MDEwMVwiOlwiYVwiLFwiXFx1MDEwM1wiOlwiYVwiLFwiXFx1MDEwNVwiOlwiYVwiLFxyXG5cIlxcdTAxMDZcIjpcIkNcIixcIlxcdTAxMDhcIjpcIkNcIixcIlxcdTAxMGFcIjpcIkNcIixcIlxcdTAxMGNcIjpcIkNcIixcIlxcdTAxMDdcIjpcImNcIixcIlxcdTAxMDlcIjpcImNcIixcIlxcdTAxMGJcIjpcImNcIixcIlxcdTAxMGRcIjpcImNcIixcIlxcdTAxMGVcIjpcIkRcIixcIlxcdTAxMTBcIjpcIkRcIixcIlxcdTAxMGZcIjpcImRcIixcIlxcdTAxMTFcIjpcImRcIixcIlxcdTAxMTJcIjpcIkVcIixcIlxcdTAxMTRcIjpcIkVcIixcIlxcdTAxMTZcIjpcIkVcIixcIlxcdTAxMThcIjpcIkVcIixcIlxcdTAxMWFcIjpcIkVcIixcIlxcdTAxMTNcIjpcImVcIixcIlxcdTAxMTVcIjpcImVcIixcIlxcdTAxMTdcIjpcImVcIixcIlxcdTAxMTlcIjpcImVcIixcIlxcdTAxMWJcIjpcImVcIixcIlxcdTAxMWNcIjpcIkdcIixcIlxcdTAxMWVcIjpcIkdcIixcIlxcdTAxMjBcIjpcIkdcIixcIlxcdTAxMjJcIjpcIkdcIixcIlxcdTAxMWRcIjpcImdcIixcIlxcdTAxMWZcIjpcImdcIixcIlxcdTAxMjFcIjpcImdcIixcIlxcdTAxMjNcIjpcImdcIixcIlxcdTAxMjRcIjpcIkhcIixcIlxcdTAxMjZcIjpcIkhcIixcIlxcdTAxMjVcIjpcImhcIixcIlxcdTAxMjdcIjpcImhcIixcIlxcdTAxMjhcIjpcIklcIixcIlxcdTAxMmFcIjpcIklcIixcIlxcdTAxMmNcIjpcIklcIixcIlxcdTAxMmVcIjpcIklcIixcIlxcdTAxMzBcIjpcIklcIixcclxuXCJcXHUwMTI5XCI6XCJpXCIsXCJcXHUwMTJiXCI6XCJpXCIsXCJcXHUwMTJkXCI6XCJpXCIsXCJcXHUwMTJmXCI6XCJpXCIsXCJcXHUwMTMxXCI6XCJpXCIsXCJcXHUwMTM0XCI6XCJKXCIsXCJcXHUwMTM1XCI6XCJqXCIsXCJcXHUwMTM2XCI6XCJLXCIsXCJcXHUwMTM3XCI6XCJrXCIsXCJcXHUwMTM4XCI6XCJrXCIsXCJcXHUwMTM5XCI6XCJMXCIsXCJcXHUwMTNiXCI6XCJMXCIsXCJcXHUwMTNkXCI6XCJMXCIsXCJcXHUwMTNmXCI6XCJMXCIsXCJcXHUwMTQxXCI6XCJMXCIsXCJcXHUwMTNhXCI6XCJsXCIsXCJcXHUwMTNjXCI6XCJsXCIsXCJcXHUwMTNlXCI6XCJsXCIsXCJcXHUwMTQwXCI6XCJsXCIsXCJcXHUwMTQyXCI6XCJsXCIsXCJcXHUwMTQzXCI6XCJOXCIsXCJcXHUwMTQ1XCI6XCJOXCIsXCJcXHUwMTQ3XCI6XCJOXCIsXCJcXHUwMTRhXCI6XCJOXCIsXCJcXHUwMTQ0XCI6XCJuXCIsXCJcXHUwMTQ2XCI6XCJuXCIsXCJcXHUwMTQ4XCI6XCJuXCIsXCJcXHUwMTRiXCI6XCJuXCIsXCJcXHUwMTRjXCI6XCJPXCIsXCJcXHUwMTRlXCI6XCJPXCIsXCJcXHUwMTUwXCI6XCJPXCIsXCJcXHUwMTRkXCI6XCJvXCIsXCJcXHUwMTRmXCI6XCJvXCIsXCJcXHUwMTUxXCI6XCJvXCIsXCJcXHUwMTU0XCI6XCJSXCIsXCJcXHUwMTU2XCI6XCJSXCIsXCJcXHUwMTU4XCI6XCJSXCIsXCJcXHUwMTU1XCI6XCJyXCIsXCJcXHUwMTU3XCI6XCJyXCIsXHJcblwiXFx1MDE1OVwiOlwiclwiLFwiXFx1MDE1YVwiOlwiU1wiLFwiXFx1MDE1Y1wiOlwiU1wiLFwiXFx1MDE1ZVwiOlwiU1wiLFwiXFx1MDE2MFwiOlwiU1wiLFwiXFx1MDE1YlwiOlwic1wiLFwiXFx1MDE1ZFwiOlwic1wiLFwiXFx1MDE1ZlwiOlwic1wiLFwiXFx1MDE2MVwiOlwic1wiLFwiXFx1MDE2MlwiOlwiVFwiLFwiXFx1MDE2NFwiOlwiVFwiLFwiXFx1MDE2NlwiOlwiVFwiLFwiXFx1MDE2M1wiOlwidFwiLFwiXFx1MDE2NVwiOlwidFwiLFwiXFx1MDE2N1wiOlwidFwiLFwiXFx1MDE2OFwiOlwiVVwiLFwiXFx1MDE2YVwiOlwiVVwiLFwiXFx1MDE2Y1wiOlwiVVwiLFwiXFx1MDE2ZVwiOlwiVVwiLFwiXFx1MDE3MFwiOlwiVVwiLFwiXFx1MDE3MlwiOlwiVVwiLFwiXFx1MDE2OVwiOlwidVwiLFwiXFx1MDE2YlwiOlwidVwiLFwiXFx1MDE2ZFwiOlwidVwiLFwiXFx1MDE2ZlwiOlwidVwiLFwiXFx1MDE3MVwiOlwidVwiLFwiXFx1MDE3M1wiOlwidVwiLFwiXFx1MDE3NFwiOlwiV1wiLFwiXFx1MDE3NVwiOlwid1wiLFwiXFx1MDE3NlwiOlwiWVwiLFwiXFx1MDE3N1wiOlwieVwiLFwiXFx1MDE3OFwiOlwiWVwiLFwiXFx1MDE3OVwiOlwiWlwiLFwiXFx1MDE3YlwiOlwiWlwiLFwiXFx1MDE3ZFwiOlwiWlwiLFwiXFx1MDE3YVwiOlwielwiLFwiXFx1MDE3Y1wiOlwielwiLFwiXFx1MDE3ZVwiOlwielwiLFwiXFx1MDEzMlwiOlwiSUpcIixcclxuXCJcXHUwMTMzXCI6XCJpalwiLFwiXFx1MDE1MlwiOlwiT2VcIixcIlxcdTAxNTNcIjpcIm9lXCIsXCJcXHUwMTQ5XCI6XCInblwiLFwiXFx1MDE3ZlwiOlwic1wifSksbnQ9eCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KSx0dD14KHtcIiZhbXA7XCI6XCImXCIsXCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInLFwiJiMzOTtcIjpcIidcIn0pLHJ0PWZ1bmN0aW9uIHgobW4pe2Z1bmN0aW9uIEFuKG4pe2lmKHl1KG4pJiYhZmYobikmJiEobiBpbnN0YW5jZW9mIExuKSl7aWYobiBpbnN0YW5jZW9mIE9uKXJldHVybiBuO2lmKG9pLmNhbGwobixcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBGZShuKX1yZXR1cm4gbmV3IE9uKG4pfWZ1bmN0aW9uIGtuKCl7fWZ1bmN0aW9uIE9uKG4sdCl7dGhpcy5fX3dyYXBwZWRfXz1uLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2NoYWluX189ISF0LHRoaXMuX19pbmRleF9fPTAsdGhpcy5fX3ZhbHVlc19fPVR9ZnVuY3Rpb24gTG4obil7XHJcbnRoaXMuX193cmFwcGVkX189bix0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPWZhbHNlLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189NDI5NDk2NzI5NSx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBNbihuKXt2YXIgdD0tMSxyPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIGU9blt0XTt0aGlzLnNldChlWzBdLGVbMV0pfX1mdW5jdGlvbiBUbihuKXt2YXIgdD0tMSxyPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIGU9blt0XTt0aGlzLnNldChlWzBdLGVbMV0pfX1mdW5jdGlvbiBGbihuKXt2YXIgdD0tMSxyPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIGU9blt0XTt0aGlzLnNldChlWzBdLGVbMV0pfX1mdW5jdGlvbiBObihuKXt2YXIgdD0tMSxyPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgRm47Kyt0PHI7KXRoaXMuYWRkKG5bdF0pO1xyXG59ZnVuY3Rpb24gWm4obil7dGhpcy5zaXplPSh0aGlzLl9fZGF0YV9fPW5ldyBUbihuKSkuc2l6ZX1mdW5jdGlvbiBxbihuLHQpe3ZhciByLGU9ZmYobiksdT0hZSYmb2YobiksaT0hZSYmIXUmJmFmKG4pLG89IWUmJiF1JiYhaSYmX2YobiksdT0oZT1lfHx1fHxpfHxvKT9BKG4ubGVuZ3RoLG5pKTpbXSxmPXUubGVuZ3RoO2ZvcihyIGluIG4pIXQmJiFvaS5jYWxsKG4scil8fGUmJihcImxlbmd0aFwiPT1yfHxpJiYoXCJvZmZzZXRcIj09cnx8XCJwYXJlbnRcIj09cil8fG8mJihcImJ1ZmZlclwiPT1yfHxcImJ5dGVMZW5ndGhcIj09cnx8XCJieXRlT2Zmc2V0XCI9PXIpfHxTZShyLGYpKXx8dS5wdXNoKHIpO3JldHVybiB1fWZ1bmN0aW9uIFFuKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiB0P25baXIoMCx0LTEpXTpUfWZ1bmN0aW9uIGV0KG4sdCl7cmV0dXJuIERlKExyKG4pLHB0KHQsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIHV0KG4pe3JldHVybiBEZShMcihuKSl9ZnVuY3Rpb24gaXQobix0LHIpeyhyPT09VHx8bHUoblt0XSxyKSkmJihyIT09VHx8dCBpbiBuKXx8c3Qobix0LHIpO1xyXG59ZnVuY3Rpb24gb3Qobix0LHIpe3ZhciBlPW5bdF07b2kuY2FsbChuLHQpJiZsdShlLHIpJiYociE9PVR8fHQgaW4gbil8fHN0KG4sdCxyKX1mdW5jdGlvbiBmdChuLHQpe2Zvcih2YXIgcj1uLmxlbmd0aDtyLS07KWlmKGx1KG5bcl1bMF0sdCkpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gY3Qobix0LHIsZSl7cmV0dXJuIHVvKG4sZnVuY3Rpb24obix1LGkpe3QoZSxuLHIobiksaSl9KSxlfWZ1bmN0aW9uIGF0KG4sdCl7cmV0dXJuIG4mJkNyKHQsV3UodCksbil9ZnVuY3Rpb24gbHQobix0KXtyZXR1cm4gbiYmQ3IodCxVdSh0KSxuKX1mdW5jdGlvbiBzdChuLHQscil7XCJfX3Byb3RvX19cIj09dCYmQWk/QWkobix0LHtjb25maWd1cmFibGU6dHJ1ZSxlbnVtZXJhYmxlOnRydWUsdmFsdWU6cix3cml0YWJsZTp0cnVlfSk6blt0XT1yfWZ1bmN0aW9uIGh0KG4sdCl7Zm9yKHZhciByPS0xLGU9dC5sZW5ndGgsdT1LdShlKSxpPW51bGw9PW47KytyPGU7KXVbcl09aT9UOlJ1KG4sdFtyXSk7cmV0dXJuIHU7XHJcbn1mdW5jdGlvbiBwdChuLHQscil7cmV0dXJuIG49PT1uJiYociE9PVQmJihuPW48PXI/bjpyKSx0IT09VCYmKG49bj49dD9uOnQpKSxufWZ1bmN0aW9uIF90KG4sdCxlLHUsaSxvKXt2YXIgZixjPTEmdCxhPTImdCxsPTQmdDtpZihlJiYoZj1pP2Uobix1LGksbyk6ZShuKSksZiE9PVQpcmV0dXJuIGY7aWYoIWR1KG4pKXJldHVybiBuO2lmKHU9ZmYobikpe2lmKGY9bWUobiksIWMpcmV0dXJuIExyKG4sZil9ZWxzZXt2YXIgcz12byhuKSxoPVwiW29iamVjdCBGdW5jdGlvbl1cIj09c3x8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT1zO2lmKGFmKG4pKXJldHVybiBJcihuLGMpO2lmKFwiW29iamVjdCBPYmplY3RdXCI9PXN8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PXN8fGgmJiFpKXtpZihmPWF8fGg/e306QWUobiksIWMpcmV0dXJuIGE/TXIobixsdChmLG4pKTpEcihuLGF0KGYsbikpfWVsc2V7aWYoIUJuW3NdKXJldHVybiBpP246e307Zj1rZShuLHMsYyl9fWlmKG98fChvPW5ldyBabiksXHJcbmk9by5nZXQobikpcmV0dXJuIGk7aWYoby5zZXQobixmKSxwZihuKSlyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe2YuYWRkKF90KHIsdCxlLHIsbixvKSl9KSxmO2lmKHNmKG4pKXJldHVybiBuLmZvckVhY2goZnVuY3Rpb24ocix1KXtmLnNldCh1LF90KHIsdCxlLHUsbixvKSl9KSxmO3ZhciBhPWw/YT92ZTpfZTphP1V1Old1LHA9dT9UOmEobik7cmV0dXJuIHIocHx8bixmdW5jdGlvbihyLHUpe3AmJih1PXIscj1uW3VdKSxvdChmLHUsX3Qocix0LGUsdSxuLG8pKX0pLGZ9ZnVuY3Rpb24gdnQobil7dmFyIHQ9V3Uobik7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBndChyLG4sdCl9fWZ1bmN0aW9uIGd0KG4sdCxyKXt2YXIgZT1yLmxlbmd0aDtpZihudWxsPT1uKXJldHVybiFlO2ZvcihuPVF1KG4pO2UtLTspe3ZhciB1PXJbZV0saT10W3VdLG89blt1XTtpZihvPT09VCYmISh1IGluIG4pfHwhaShvKSlyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9ZnVuY3Rpb24gZHQobix0LHIpe2lmKHR5cGVvZiBuIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IHRpKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtcclxucmV0dXJuIGJvKGZ1bmN0aW9uKCl7bi5hcHBseShULHIpfSx0KX1mdW5jdGlvbiB5dChuLHQscixlKXt2YXIgdT0tMSxpPW8sYT10cnVlLGw9bi5sZW5ndGgscz1bXSxoPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO3ImJih0PWModCxFKHIpKSksZT8oaT1mLGE9ZmFsc2UpOjIwMDw9dC5sZW5ndGgmJihpPU8sYT1mYWxzZSx0PW5ldyBObih0KSk7bjpmb3IoOysrdTxsOyl7dmFyIHA9blt1XSxfPW51bGw9PXI/cDpyKHApLHA9ZXx8MCE9PXA/cDowO2lmKGEmJl89PT1fKXtmb3IodmFyIHY9aDt2LS07KWlmKHRbdl09PT1fKWNvbnRpbnVlIG47cy5wdXNoKHApfWVsc2UgaSh0LF8sZSl8fHMucHVzaChwKX1yZXR1cm4gc31mdW5jdGlvbiBidChuLHQpe3ZhciByPXRydWU7cmV0dXJuIHVvKG4sZnVuY3Rpb24obixlLHUpe3JldHVybiByPSEhdChuLGUsdSl9KSxyfWZ1bmN0aW9uIHh0KG4sdCxyKXtmb3IodmFyIGU9LTEsdT1uLmxlbmd0aDsrK2U8dTspe3ZhciBpPW5bZV0sbz10KGkpO2lmKG51bGwhPW8mJihmPT09VD9vPT09byYmIXd1KG8pOnIobyxmKSkpdmFyIGY9byxjPWk7XHJcbn1yZXR1cm4gY31mdW5jdGlvbiBqdChuLHQpe3ZhciByPVtdO3JldHVybiB1byhuLGZ1bmN0aW9uKG4sZSx1KXt0KG4sZSx1KSYmci5wdXNoKG4pfSkscn1mdW5jdGlvbiB3dChuLHQscixlLHUpe3ZhciBpPS0xLG89bi5sZW5ndGg7Zm9yKHJ8fChyPUVlKSx1fHwodT1bXSk7KytpPG87KXt2YXIgZj1uW2ldOzA8dCYmcihmKT8xPHQ/d3QoZix0LTEscixlLHUpOmEodSxmKTplfHwodVt1Lmxlbmd0aF09Zil9cmV0dXJuIHV9ZnVuY3Rpb24gbXQobix0KXtyZXR1cm4gbiYmb28obix0LFd1KX1mdW5jdGlvbiBBdChuLHQpe3JldHVybiBuJiZmbyhuLHQsV3UpfWZ1bmN0aW9uIGt0KG4sdCl7cmV0dXJuIGkodCxmdW5jdGlvbih0KXtyZXR1cm4gX3Uoblt0XSl9KX1mdW5jdGlvbiBFdChuLHQpe3Q9U3IodCxuKTtmb3IodmFyIHI9MCxlPXQubGVuZ3RoO251bGwhPW4mJnI8ZTspbj1uW01lKHRbcisrXSldO3JldHVybiByJiZyPT1lP246VH1mdW5jdGlvbiBTdChuLHQscil7cmV0dXJuIHQ9dChuKSxcclxuZmYobik/dDphKHQscihuKSl9ZnVuY3Rpb24gT3Qobil7aWYobnVsbD09bilyZXR1cm4gbj09PVQ/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjtpZihtaSYmbWkgaW4gUXUobikpe3ZhciB0PW9pLmNhbGwobixtaSkscj1uW21pXTt0cnl7blttaV09VDt2YXIgZT10cnVlfWNhdGNoKG4pe312YXIgdT1haS5jYWxsKG4pO2UmJih0P25bbWldPXI6ZGVsZXRlIG5bbWldKSxuPXV9ZWxzZSBuPWFpLmNhbGwobik7cmV0dXJuIG59ZnVuY3Rpb24gSXQobix0KXtyZXR1cm4gbj50fWZ1bmN0aW9uIFJ0KG4sdCl7cmV0dXJuIG51bGwhPW4mJm9pLmNhbGwobix0KX1mdW5jdGlvbiB6dChuLHQpe3JldHVybiBudWxsIT1uJiZ0IGluIFF1KG4pfWZ1bmN0aW9uIFd0KG4sdCxyKXtmb3IodmFyIGU9cj9mOm8sdT1uWzBdLmxlbmd0aCxpPW4ubGVuZ3RoLGE9aSxsPUt1KGkpLHM9MS8wLGg9W107YS0tOyl7dmFyIHA9blthXTthJiZ0JiYocD1jKHAsRSh0KSkpLHM9Q2kocC5sZW5ndGgscyksXHJcbmxbYV09IXImJih0fHwxMjA8PXUmJjEyMDw9cC5sZW5ndGgpP25ldyBObihhJiZwKTpUfXZhciBwPW5bMF0sXz0tMSx2PWxbMF07bjpmb3IoOysrXzx1JiZoLmxlbmd0aDxzOyl7dmFyIGc9cFtfXSxkPXQ/dChnKTpnLGc9cnx8MCE9PWc/ZzowO2lmKHY/IU8odixkKTohZShoLGQscikpe2ZvcihhPWk7LS1hOyl7dmFyIHk9bFthXTtpZih5PyFPKHksZCk6IWUoblthXSxkLHIpKWNvbnRpbnVlIG59diYmdi5wdXNoKGQpLGgucHVzaChnKX19cmV0dXJuIGh9ZnVuY3Rpb24gVXQobix0LHIsZSl7cmV0dXJuIG10KG4sZnVuY3Rpb24obix1LGkpe3QoZSxyKG4pLHUsaSl9KSxlfWZ1bmN0aW9uIEJ0KHQscixlKXtyZXR1cm4gcj1TcihyLHQpLHQ9Mj5yLmxlbmd0aD90OkV0KHQsaHIociwwLC0xKSkscj1udWxsPT10P3Q6dFtNZShWZShyKSldLG51bGw9PXI/VDpuKHIsdCxlKX1mdW5jdGlvbiBMdChuKXtyZXR1cm4geXUobikmJlwiW29iamVjdCBBcmd1bWVudHNdXCI9PU90KG4pfWZ1bmN0aW9uIEN0KG4pe1xyXG5yZXR1cm4geXUobikmJlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09T3Qobil9ZnVuY3Rpb24gRHQobil7cmV0dXJuIHl1KG4pJiZcIltvYmplY3QgRGF0ZV1cIj09T3Qobil9ZnVuY3Rpb24gTXQobix0LHIsZSx1KXtpZihuPT09dClyZXR1cm4gdHJ1ZTtpZihudWxsPT1ufHxudWxsPT10fHwheXUobikmJiF5dSh0KSlyZXR1cm4gbiE9PW4mJnQhPT10O246e3ZhciBpPWZmKG4pLG89ZmYodCksZj1pP1wiW29iamVjdCBBcnJheV1cIjp2byhuKSxjPW8/XCJbb2JqZWN0IEFycmF5XVwiOnZvKHQpLGY9XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09Zj9cIltvYmplY3QgT2JqZWN0XVwiOmYsYz1cIltvYmplY3QgQXJndW1lbnRzXVwiPT1jP1wiW29iamVjdCBPYmplY3RdXCI6YyxhPVwiW29iamVjdCBPYmplY3RdXCI9PWYsbz1cIltvYmplY3QgT2JqZWN0XVwiPT1jO2lmKChjPWY9PWMpJiZhZihuKSl7aWYoIWFmKHQpKXt0PWZhbHNlO2JyZWFrIG59aT10cnVlLGE9ZmFsc2V9aWYoYyYmIWEpdXx8KHU9bmV3IFpuKSx0PWl8fF9mKG4pP3NlKG4sdCxyLGUsTXQsdSk6aGUobix0LGYscixlLE10LHUpO2Vsc2V7XHJcbmlmKCEoMSZyKSYmKGk9YSYmb2kuY2FsbChuLFwiX193cmFwcGVkX19cIiksZj1vJiZvaS5jYWxsKHQsXCJfX3dyYXBwZWRfX1wiKSxpfHxmKSl7bj1pP24udmFsdWUoKTpuLHQ9Zj90LnZhbHVlKCk6dCx1fHwodT1uZXcgWm4pLHQ9TXQobix0LHIsZSx1KTticmVhayBufWlmKGMpdDppZih1fHwodT1uZXcgWm4pLGk9MSZyLGY9X2Uobiksbz1mLmxlbmd0aCxjPV9lKHQpLmxlbmd0aCxvPT1jfHxpKXtmb3IoYT1vO2EtLTspe3ZhciBsPWZbYV07aWYoIShpP2wgaW4gdDpvaS5jYWxsKHQsbCkpKXt0PWZhbHNlO2JyZWFrIHR9fWlmKChjPXUuZ2V0KG4pKSYmdS5nZXQodCkpdD1jPT10O2Vsc2V7Yz10cnVlLHUuc2V0KG4sdCksdS5zZXQodCxuKTtmb3IodmFyIHM9aTsrK2E8bzspe3ZhciBsPWZbYV0saD1uW2xdLHA9dFtsXTtpZihlKXZhciBfPWk/ZShwLGgsbCx0LG4sdSk6ZShoLHAsbCxuLHQsdSk7aWYoXz09PVQ/aCE9PXAmJiFNdChoLHAscixlLHUpOiFfKXtjPWZhbHNlO2JyZWFrfXN8fChzPVwiY29uc3RydWN0b3JcIj09bCk7XHJcbn1jJiYhcyYmKHI9bi5jb25zdHJ1Y3RvcixlPXQuY29uc3RydWN0b3IsciE9ZSYmXCJjb25zdHJ1Y3RvclwiaW4gbiYmXCJjb25zdHJ1Y3RvclwiaW4gdCYmISh0eXBlb2Ygcj09XCJmdW5jdGlvblwiJiZyIGluc3RhbmNlb2YgciYmdHlwZW9mIGU9PVwiZnVuY3Rpb25cIiYmZSBpbnN0YW5jZW9mIGUpJiYoYz1mYWxzZSkpLHUuZGVsZXRlKG4pLHUuZGVsZXRlKHQpLHQ9Y319ZWxzZSB0PWZhbHNlO2Vsc2UgdD1mYWxzZX19cmV0dXJuIHR9ZnVuY3Rpb24gVHQobil7cmV0dXJuIHl1KG4pJiZcIltvYmplY3QgTWFwXVwiPT12byhuKX1mdW5jdGlvbiAkdChuLHQscixlKXt2YXIgdT1yLmxlbmd0aCxpPXUsbz0hZTtpZihudWxsPT1uKXJldHVybiFpO2ZvcihuPVF1KG4pO3UtLTspe3ZhciBmPXJbdV07aWYobyYmZlsyXT9mWzFdIT09bltmWzBdXTohKGZbMF1pbiBuKSlyZXR1cm4gZmFsc2V9Zm9yKDsrK3U8aTspe3ZhciBmPXJbdV0sYz1mWzBdLGE9bltjXSxsPWZbMV07aWYobyYmZlsyXSl7aWYoYT09PVQmJiEoYyBpbiBuKSlyZXR1cm4gZmFsc2U7XHJcbn1lbHNle2lmKGY9bmV3IFpuLGUpdmFyIHM9ZShhLGwsYyxuLHQsZik7aWYocz09PVQ/IU10KGwsYSwzLGUsZik6IXMpcmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBGdChuKXtyZXR1cm4hKCFkdShuKXx8Y2kmJmNpIGluIG4pJiYoX3Uobik/aGk6ZG4pLnRlc3QoVGUobikpfWZ1bmN0aW9uIE50KG4pe3JldHVybiB5dShuKSYmXCJbb2JqZWN0IFJlZ0V4cF1cIj09T3Qobil9ZnVuY3Rpb24gUHQobil7cmV0dXJuIHl1KG4pJiZcIltvYmplY3QgU2V0XVwiPT12byhuKX1mdW5jdGlvbiBadChuKXtyZXR1cm4geXUobikmJmd1KG4ubGVuZ3RoKSYmISFVbltPdChuKV19ZnVuY3Rpb24gcXQobil7cmV0dXJuIHR5cGVvZiBuPT1cImZ1bmN0aW9uXCI/bjpudWxsPT1uPyR1OnR5cGVvZiBuPT1cIm9iamVjdFwiP2ZmKG4pP0p0KG5bMF0sblsxXSk6SHQobik6WnUobil9ZnVuY3Rpb24gVnQobil7aWYoIXplKG4pKXJldHVybiBCaShuKTt2YXIgdCxyPVtdO2Zvcih0IGluIFF1KG4pKW9pLmNhbGwobix0KSYmXCJjb25zdHJ1Y3RvclwiIT10JiZyLnB1c2godCk7XHJcbnJldHVybiByfWZ1bmN0aW9uIEt0KG4sdCl7cmV0dXJuIG48dH1mdW5jdGlvbiBHdChuLHQpe3ZhciByPS0xLGU9c3Uobik/S3Uobi5sZW5ndGgpOltdO3JldHVybiB1byhuLGZ1bmN0aW9uKG4sdSxpKXtlWysrcl09dChuLHUsaSl9KSxlfWZ1bmN0aW9uIEh0KG4pe3ZhciB0PXhlKG4pO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT9XZSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09bnx8JHQocixuLHQpfX1mdW5jdGlvbiBKdChuLHQpe3JldHVybiBJZShuKSYmdD09PXQmJiFkdSh0KT9XZShNZShuKSx0KTpmdW5jdGlvbihyKXt2YXIgZT1SdShyLG4pO3JldHVybiBlPT09VCYmZT09PXQ/enUocixuKTpNdCh0LGUsMyl9fWZ1bmN0aW9uIFl0KG4sdCxyLGUsdSl7biE9PXQmJm9vKHQsZnVuY3Rpb24oaSxvKXtpZihkdShpKSl7dXx8KHU9bmV3IFpuKTt2YXIgZj11LGM9QmUobixvKSxhPUJlKHQsbyksbD1mLmdldChhKTtpZighbCl7dmFyIGw9ZT9lKGMsYSxvK1wiXCIsbix0LGYpOlQscz1sPT09VDtcclxuaWYocyl7dmFyIGg9ZmYoYSkscD0haCYmYWYoYSksXz0haCYmIXAmJl9mKGEpLGw9YTtofHxwfHxfP2ZmKGMpP2w9YzpodShjKT9sPUxyKGMpOnA/KHM9ZmFsc2UsbD1JcihhLHRydWUpKTpfPyhzPWZhbHNlLGw9enIoYSx0cnVlKSk6bD1bXTp4dShhKXx8b2YoYSk/KGw9YyxvZihjKT9sPU91KGMpOmR1KGMpJiYhX3UoYyl8fChsPUFlKGEpKSk6cz1mYWxzZX1zJiYoZi5zZXQoYSxsKSxZdChsLGEscixlLGYpLGYuZGVsZXRlKGEpKX1pdChuLG8sbCl9ZWxzZSBmPWU/ZShCZShuLG8pLGksbytcIlwiLG4sdCx1KTpULGY9PT1UJiYoZj1pKSxpdChuLG8sZil9LFV1KX1mdW5jdGlvbiBRdChuLHQpe3ZhciByPW4ubGVuZ3RoO2lmKHIpcmV0dXJuIHQrPTA+dD9yOjAsU2UodCxyKT9uW3RdOlR9ZnVuY3Rpb24gWHQobix0LHIpe3ZhciBlPS0xO3JldHVybiB0PWModC5sZW5ndGg/dDpbJHVdLEUoeWUoKSkpLG49R3QobixmdW5jdGlvbihuLHIsdSl7cmV0dXJue2E6Yyh0LGZ1bmN0aW9uKHQpe3JldHVybiB0KG4pfSksXHJcbmI6KytlLGM6bn19KSx3KG4sZnVuY3Rpb24obix0KXt2YXIgZTtuOntlPS0xO2Zvcih2YXIgdT1uLmEsaT10LmEsbz11Lmxlbmd0aCxmPXIubGVuZ3RoOysrZTxvOyl7dmFyIGM9V3IodVtlXSxpW2VdKTtpZihjKXtpZihlPj1mKXtlPWM7YnJlYWsgbn1lPWMqKFwiZGVzY1wiPT1yW2VdPy0xOjEpO2JyZWFrIG59fWU9bi5iLXQuYn1yZXR1cm4gZX0pfWZ1bmN0aW9uIG5yKG4sdCl7cmV0dXJuIHRyKG4sdCxmdW5jdGlvbih0LHIpe3JldHVybiB6dShuLHIpfSl9ZnVuY3Rpb24gdHIobix0LHIpe2Zvcih2YXIgZT0tMSx1PXQubGVuZ3RoLGk9e307KytlPHU7KXt2YXIgbz10W2VdLGY9RXQobixvKTtyKGYsbykmJmxyKGksU3IobyxuKSxmKX1yZXR1cm4gaX1mdW5jdGlvbiBycihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEV0KHQsbil9fWZ1bmN0aW9uIGVyKG4sdCxyLGUpe3ZhciB1PWU/Zzp2LGk9LTEsbz10Lmxlbmd0aCxmPW47Zm9yKG49PT10JiYodD1Mcih0KSksciYmKGY9YyhuLEUocikpKTsrK2k8bzspZm9yKHZhciBhPTAsbD10W2ldLGw9cj9yKGwpOmw7LTE8KGE9dShmLGwsYSxlKSk7KWYhPT1uJiZ4aS5jYWxsKGYsYSwxKSxcclxueGkuY2FsbChuLGEsMSk7cmV0dXJuIG59ZnVuY3Rpb24gdXIobix0KXtmb3IodmFyIHI9bj90Lmxlbmd0aDowLGU9ci0xO3ItLTspe3ZhciB1PXRbcl07aWYocj09ZXx8dSE9PWkpe3ZhciBpPXU7U2UodSk/eGkuY2FsbChuLHUsMSk6eHIobix1KX19cmV0dXJuIG59ZnVuY3Rpb24gaXIobix0KXtyZXR1cm4gbitJaShUaSgpKih0LW4rMSkpfWZ1bmN0aW9uIG9yKG4sdCl7dmFyIHI9XCJcIjtpZighbnx8MT50fHw5MDA3MTk5MjU0NzQwOTkxPHQpcmV0dXJuIHI7ZG8gdCUyJiYocis9biksKHQ9SWkodC8yKSkmJihuKz1uKTt3aGlsZSh0KTtyZXR1cm4gcn1mdW5jdGlvbiBmcihuLHQpe3JldHVybiB4byhVZShuLHQsJHUpLG4rXCJcIil9ZnVuY3Rpb24gY3Iobil7cmV0dXJuIFFuKEx1KG4pKX1mdW5jdGlvbiBhcihuLHQpe3ZhciByPUx1KG4pO3JldHVybiBEZShyLHB0KHQsMCxyLmxlbmd0aCkpfWZ1bmN0aW9uIGxyKG4sdCxyLGUpe2lmKCFkdShuKSlyZXR1cm4gbjt0PVNyKHQsbik7Zm9yKHZhciB1PS0xLGk9dC5sZW5ndGgsbz1pLTEsZj1uO251bGwhPWYmJisrdTxpOyl7XHJcbnZhciBjPU1lKHRbdV0pLGE9cjtpZih1IT1vKXt2YXIgbD1mW2NdLGE9ZT9lKGwsYyxmKTpUO2E9PT1UJiYoYT1kdShsKT9sOlNlKHRbdSsxXSk/W106e30pfW90KGYsYyxhKSxmPWZbY119cmV0dXJuIG59ZnVuY3Rpb24gc3Iobil7cmV0dXJuIERlKEx1KG4pKX1mdW5jdGlvbiBocihuLHQscil7dmFyIGU9LTEsdT1uLmxlbmd0aDtmb3IoMD50JiYodD0tdD51PzA6dSt0KSxyPXI+dT91OnIsMD5yJiYocis9dSksdT10PnI/MDpyLXQ+Pj4wLHQ+Pj49MCxyPUt1KHUpOysrZTx1OylyW2VdPW5bZSt0XTtyZXR1cm4gcn1mdW5jdGlvbiBwcihuLHQpe3ZhciByO3JldHVybiB1byhuLGZ1bmN0aW9uKG4sZSx1KXtyZXR1cm4gcj10KG4sZSx1KSwhcn0pLCEhcn1mdW5jdGlvbiBfcihuLHQscil7dmFyIGU9MCx1PW51bGw9PW4/ZTpuLmxlbmd0aDtpZih0eXBlb2YgdD09XCJudW1iZXJcIiYmdD09PXQmJjIxNDc0ODM2NDc+PXUpe2Zvcig7ZTx1Oyl7dmFyIGk9ZSt1Pj4+MSxvPW5baV07bnVsbCE9PW8mJiF3dShvKSYmKHI/bzw9dDpvPHQpP2U9aSsxOnU9aTtcclxufXJldHVybiB1fXJldHVybiB2cihuLHQsJHUscil9ZnVuY3Rpb24gdnIobix0LHIsZSl7dD1yKHQpO2Zvcih2YXIgdT0wLGk9bnVsbD09bj8wOm4ubGVuZ3RoLG89dCE9PXQsZj1udWxsPT09dCxjPXd1KHQpLGE9dD09PVQ7dTxpOyl7dmFyIGw9SWkoKHUraSkvMikscz1yKG5bbF0pLGg9cyE9PVQscD1udWxsPT09cyxfPXM9PT1zLHY9d3Uocyk7KG8/ZXx8XzphP18mJihlfHxoKTpmP18mJmgmJihlfHwhcCk6Yz9fJiZoJiYhcCYmKGV8fCF2KTpwfHx2PzA6ZT9zPD10OnM8dCk/dT1sKzE6aT1sfXJldHVybiBDaShpLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIGdyKG4sdCl7Zm9yKHZhciByPS0xLGU9bi5sZW5ndGgsdT0wLGk9W107KytyPGU7KXt2YXIgbz1uW3JdLGY9dD90KG8pOm87aWYoIXJ8fCFsdShmLGMpKXt2YXIgYz1mO2lbdSsrXT0wPT09bz8wOm99fXJldHVybiBpfWZ1bmN0aW9uIGRyKG4pe3JldHVybiB0eXBlb2Ygbj09XCJudW1iZXJcIj9uOnd1KG4pP0Y6K259ZnVuY3Rpb24geXIobil7XHJcbmlmKHR5cGVvZiBuPT1cInN0cmluZ1wiKXJldHVybiBuO2lmKGZmKG4pKXJldHVybiBjKG4seXIpK1wiXCI7aWYod3UobikpcmV0dXJuIHJvP3JvLmNhbGwobik6XCJcIjt2YXIgdD1uK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvbj09LSQ/XCItMFwiOnR9ZnVuY3Rpb24gYnIobix0LHIpe3ZhciBlPS0xLHU9byxpPW4ubGVuZ3RoLGM9dHJ1ZSxhPVtdLGw9YTtpZihyKWM9ZmFsc2UsdT1mO2Vsc2UgaWYoMjAwPD1pKXtpZih1PXQ/bnVsbDpzbyhuKSlyZXR1cm4gTCh1KTtjPWZhbHNlLHU9TyxsPW5ldyBObn1lbHNlIGw9dD9bXTphO246Zm9yKDsrK2U8aTspe3ZhciBzPW5bZV0saD10P3Qocyk6cyxzPXJ8fDAhPT1zP3M6MDtpZihjJiZoPT09aCl7Zm9yKHZhciBwPWwubGVuZ3RoO3AtLTspaWYobFtwXT09PWgpY29udGludWUgbjt0JiZsLnB1c2goaCksYS5wdXNoKHMpfWVsc2UgdShsLGgscil8fChsIT09YSYmbC5wdXNoKGgpLGEucHVzaChzKSl9cmV0dXJuIGF9ZnVuY3Rpb24geHIobix0KXtyZXR1cm4gdD1Tcih0LG4pLFxyXG5uPTI+dC5sZW5ndGg/bjpFdChuLGhyKHQsMCwtMSkpLG51bGw9PW58fGRlbGV0ZSBuW01lKFZlKHQpKV19ZnVuY3Rpb24ganIobix0LHIsZSl7Zm9yKHZhciB1PW4ubGVuZ3RoLGk9ZT91Oi0xOyhlP2ktLTorK2k8dSkmJnQobltpXSxpLG4pOyk7cmV0dXJuIHI/aHIobixlPzA6aSxlP2krMTp1KTpocihuLGU/aSsxOjAsZT91OmkpfWZ1bmN0aW9uIHdyKG4sdCl7dmFyIHI9bjtyZXR1cm4gciBpbnN0YW5jZW9mIExuJiYocj1yLnZhbHVlKCkpLGwodCxmdW5jdGlvbihuLHQpe3JldHVybiB0LmZ1bmMuYXBwbHkodC50aGlzQXJnLGEoW25dLHQuYXJncykpfSxyKX1mdW5jdGlvbiBtcihuLHQscil7dmFyIGU9bi5sZW5ndGg7aWYoMj5lKXJldHVybiBlP2JyKG5bMF0pOltdO2Zvcih2YXIgdT0tMSxpPUt1KGUpOysrdTxlOylmb3IodmFyIG89blt1XSxmPS0xOysrZjxlOylmIT11JiYoaVt1XT15dChpW3VdfHxvLG5bZl0sdCxyKSk7cmV0dXJuIGJyKHd0KGksMSksdCxyKX1mdW5jdGlvbiBBcihuLHQscil7XHJcbmZvcih2YXIgZT0tMSx1PW4ubGVuZ3RoLGk9dC5sZW5ndGgsbz17fTsrK2U8dTspcihvLG5bZV0sZTxpP3RbZV06VCk7cmV0dXJuIG99ZnVuY3Rpb24ga3Iobil7cmV0dXJuIGh1KG4pP246W119ZnVuY3Rpb24gRXIobil7cmV0dXJuIHR5cGVvZiBuPT1cImZ1bmN0aW9uXCI/bjokdX1mdW5jdGlvbiBTcihuLHQpe3JldHVybiBmZihuKT9uOkllKG4sdCk/W25dOmpvKEl1KG4pKX1mdW5jdGlvbiBPcihuLHQscil7dmFyIGU9bi5sZW5ndGg7cmV0dXJuIHI9cj09PVQ/ZTpyLCF0JiZyPj1lP246aHIobix0LHIpfWZ1bmN0aW9uIElyKG4sdCl7aWYodClyZXR1cm4gbi5zbGljZSgpO3ZhciByPW4ubGVuZ3RoLHI9Z2k/Z2kocik6bmV3IG4uY29uc3RydWN0b3Iocik7cmV0dXJuIG4uY29weShyKSxyfWZ1bmN0aW9uIFJyKG4pe3ZhciB0PW5ldyBuLmNvbnN0cnVjdG9yKG4uYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyB2aSh0KS5zZXQobmV3IHZpKG4pKSx0fWZ1bmN0aW9uIHpyKG4sdCl7cmV0dXJuIG5ldyBuLmNvbnN0cnVjdG9yKHQ/UnIobi5idWZmZXIpOm4uYnVmZmVyLG4uYnl0ZU9mZnNldCxuLmxlbmd0aCk7XHJcbn1mdW5jdGlvbiBXcihuLHQpe2lmKG4hPT10KXt2YXIgcj1uIT09VCxlPW51bGw9PT1uLHU9bj09PW4saT13dShuKSxvPXQhPT1ULGY9bnVsbD09PXQsYz10PT09dCxhPXd1KHQpO2lmKCFmJiYhYSYmIWkmJm4+dHx8aSYmbyYmYyYmIWYmJiFhfHxlJiZvJiZjfHwhciYmY3x8IXUpcmV0dXJuIDE7aWYoIWUmJiFpJiYhYSYmbjx0fHxhJiZyJiZ1JiYhZSYmIWl8fGYmJnImJnV8fCFvJiZ1fHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBVcihuLHQscixlKXt2YXIgdT0tMSxpPW4ubGVuZ3RoLG89ci5sZW5ndGgsZj0tMSxjPXQubGVuZ3RoLGE9TGkoaS1vLDApLGw9S3UoYythKTtmb3IoZT0hZTsrK2Y8YzspbFtmXT10W2ZdO2Zvcig7Kyt1PG87KShlfHx1PGkpJiYobFtyW3VdXT1uW3VdKTtmb3IoO2EtLTspbFtmKytdPW5bdSsrXTtyZXR1cm4gbH1mdW5jdGlvbiBCcihuLHQscixlKXt2YXIgdT0tMSxpPW4ubGVuZ3RoLG89LTEsZj1yLmxlbmd0aCxjPS0xLGE9dC5sZW5ndGgsbD1MaShpLWYsMCkscz1LdShsK2EpO1xyXG5mb3IoZT0hZTsrK3U8bDspc1t1XT1uW3VdO2ZvcihsPXU7KytjPGE7KXNbbCtjXT10W2NdO2Zvcig7KytvPGY7KShlfHx1PGkpJiYoc1tsK3Jbb11dPW5bdSsrXSk7cmV0dXJuIHN9ZnVuY3Rpb24gTHIobix0KXt2YXIgcj0tMSxlPW4ubGVuZ3RoO2Zvcih0fHwodD1LdShlKSk7KytyPGU7KXRbcl09bltyXTtyZXR1cm4gdH1mdW5jdGlvbiBDcihuLHQscixlKXt2YXIgdT0hcjtyfHwocj17fSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGg7KytpPG87KXt2YXIgZj10W2ldLGM9ZT9lKHJbZl0sbltmXSxmLHIsbik6VDtjPT09VCYmKGM9bltmXSksdT9zdChyLGYsYyk6b3QocixmLGMpfXJldHVybiByfWZ1bmN0aW9uIERyKG4sdCl7cmV0dXJuIENyKG4scG8obiksdCl9ZnVuY3Rpb24gTXIobix0KXtyZXR1cm4gQ3IobixfbyhuKSx0KX1mdW5jdGlvbiBUcihuLHIpe3JldHVybiBmdW5jdGlvbihlLHUpe3ZhciBpPWZmKGUpP3Q6Y3Qsbz1yP3IoKTp7fTtyZXR1cm4gaShlLG4seWUodSwyKSxvKTtcclxufX1mdW5jdGlvbiAkcihuKXtyZXR1cm4gZnIoZnVuY3Rpb24odCxyKXt2YXIgZT0tMSx1PXIubGVuZ3RoLGk9MTx1P3JbdS0xXTpULG89Mjx1P3JbMl06VCxpPTM8bi5sZW5ndGgmJnR5cGVvZiBpPT1cImZ1bmN0aW9uXCI/KHUtLSxpKTpUO2ZvcihvJiZPZShyWzBdLHJbMV0sbykmJihpPTM+dT9UOmksdT0xKSx0PVF1KHQpOysrZTx1Oykobz1yW2VdKSYmbih0LG8sZSxpKTtyZXR1cm4gdH0pfWZ1bmN0aW9uIEZyKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKHIsZSl7aWYobnVsbD09cilyZXR1cm4gcjtpZighc3UocikpcmV0dXJuIG4ocixlKTtmb3IodmFyIHU9ci5sZW5ndGgsaT10P3U6LTEsbz1RdShyKTsodD9pLS06KytpPHUpJiZmYWxzZSE9PWUob1tpXSxpLG8pOyk7cmV0dXJuIHJ9fWZ1bmN0aW9uIE5yKG4pe3JldHVybiBmdW5jdGlvbih0LHIsZSl7dmFyIHU9LTEsaT1RdSh0KTtlPWUodCk7Zm9yKHZhciBvPWUubGVuZ3RoO28tLTspe3ZhciBmPWVbbj9vOisrdV07aWYoZmFsc2U9PT1yKGlbZl0sZixpKSlicmVhaztcclxufXJldHVybiB0fX1mdW5jdGlvbiBQcihuLHQscil7ZnVuY3Rpb24gZSgpe3JldHVybih0aGlzJiZ0aGlzIT09JG4mJnRoaXMgaW5zdGFuY2VvZiBlP2k6bikuYXBwbHkodT9yOnRoaXMsYXJndW1lbnRzKX12YXIgdT0xJnQsaT1WcihuKTtyZXR1cm4gZX1mdW5jdGlvbiBacihuKXtyZXR1cm4gZnVuY3Rpb24odCl7dD1JdSh0KTt2YXIgcj1Sbi50ZXN0KHQpP00odCk6VCxlPXI/clswXTp0LmNoYXJBdCgwKTtyZXR1cm4gdD1yP09yKHIsMSkuam9pbihcIlwiKTp0LnNsaWNlKDEpLGVbbl0oKSt0fX1mdW5jdGlvbiBxcihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGwoTXUoRHUodCkucmVwbGFjZShFbixcIlwiKSksbixcIlwiKX19ZnVuY3Rpb24gVnIobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgbjtjYXNlIDE6cmV0dXJuIG5ldyBuKHRbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdKTtjYXNlIDM6XHJcbnJldHVybiBuZXcgbih0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbih0WzBdLHRbMV0sdFsyXSx0WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSk7Y2FzZSA2OnJldHVybiBuZXcgbih0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7Y2FzZSA3OnJldHVybiBuZXcgbih0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdKX12YXIgcj1lbyhuLnByb3RvdHlwZSksdD1uLmFwcGx5KHIsdCk7cmV0dXJuIGR1KHQpP3Q6cn19ZnVuY3Rpb24gS3IodCxyLGUpe2Z1bmN0aW9uIHUoKXtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxmPUt1KG8pLGM9byxhPWRlKHUpO2MtLTspZltjXT1hcmd1bWVudHNbY107cmV0dXJuIGM9Mz5vJiZmWzBdIT09YSYmZltvLTFdIT09YT9bXTpCKGYsYSksby09Yy5sZW5ndGgsbzxlP3VlKHQscixKcix1LnBsYWNlaG9sZGVyLFQsZixjLFQsVCxlLW8pOm4odGhpcyYmdGhpcyE9PSRuJiZ0aGlzIGluc3RhbmNlb2YgdT9pOnQsdGhpcyxmKTtcclxufXZhciBpPVZyKHQpO3JldHVybiB1fWZ1bmN0aW9uIEdyKG4pe3JldHVybiBmdW5jdGlvbih0LHIsZSl7dmFyIHU9UXUodCk7aWYoIXN1KHQpKXt2YXIgaT15ZShyLDMpO3Q9V3UodCkscj1mdW5jdGlvbihuKXtyZXR1cm4gaSh1W25dLG4sdSl9fXJldHVybiByPW4odCxyLGUpLC0xPHI/dVtpP3Rbcl06cl06VH19ZnVuY3Rpb24gSHIobil7cmV0dXJuIHBlKGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGU9cix1PU9uLnByb3RvdHlwZS50aHJ1O2ZvcihuJiZ0LnJldmVyc2UoKTtlLS07KXt2YXIgaT10W2VdO2lmKHR5cGVvZiBpIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IHRpKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtpZih1JiYhbyYmXCJ3cmFwcGVyXCI9PWdlKGkpKXZhciBvPW5ldyBPbihbXSx0cnVlKX1mb3IoZT1vP2U6cjsrK2U8cjspdmFyIGk9dFtlXSx1PWdlKGkpLGY9XCJ3cmFwcGVyXCI9PXU/aG8oaSk6VCxvPWYmJlJlKGZbMF0pJiY0MjQ9PWZbMV0mJiFmWzRdLmxlbmd0aCYmMT09Zls5XT9vW2dlKGZbMF0pXS5hcHBseShvLGZbM10pOjE9PWkubGVuZ3RoJiZSZShpKT9vW3VdKCk6by50aHJ1KGkpO1xyXG5yZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsZT1uWzBdO2lmKG8mJjE9PW4ubGVuZ3RoJiZmZihlKSlyZXR1cm4gby5wbGFudChlKS52YWx1ZSgpO2Zvcih2YXIgdT0wLG49cj90W3VdLmFwcGx5KHRoaXMsbik6ZTsrK3U8cjspbj10W3VdLmNhbGwodGhpcyxuKTtyZXR1cm4gbn19KX1mdW5jdGlvbiBKcihuLHQscixlLHUsaSxvLGYsYyxhKXtmdW5jdGlvbiBsKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgseT1LdShkKSxiPWQ7Yi0tOyl5W2JdPWFyZ3VtZW50c1tiXTtpZihfKXt2YXIgeCxqPWRlKGwpLGI9eS5sZW5ndGg7Zm9yKHg9MDtiLS07KXlbYl09PT1qJiYrK3h9aWYoZSYmKHk9VXIoeSxlLHUsXykpLGkmJih5PUJyKHksaSxvLF8pKSxkLT14LF8mJmQ8YSlyZXR1cm4gaj1CKHksaiksdWUobix0LEpyLGwucGxhY2Vob2xkZXIscix5LGosZixjLGEtZCk7aWYoaj1oP3I6dGhpcyxiPXA/altuXTpuLGQ9eS5sZW5ndGgsZil7eD15Lmxlbmd0aDtmb3IodmFyIHc9Q2koZi5sZW5ndGgseCksbT1Mcih5KTt3LS07KXtcclxudmFyIEE9Zlt3XTt5W3ddPVNlKEEseCk/bVtBXTpUfX1lbHNlIHYmJjE8ZCYmeS5yZXZlcnNlKCk7cmV0dXJuIHMmJmM8ZCYmKHkubGVuZ3RoPWMpLHRoaXMmJnRoaXMhPT0kbiYmdGhpcyBpbnN0YW5jZW9mIGwmJihiPWd8fFZyKGIpKSxiLmFwcGx5KGoseSl9dmFyIHM9MTI4JnQsaD0xJnQscD0yJnQsXz0yNCZ0LHY9NTEyJnQsZz1wP1Q6VnIobik7cmV0dXJuIGx9ZnVuY3Rpb24gWXIobix0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gVXQocixuLHQoZSkse30pfX1mdW5jdGlvbiBRcihuLHQpe3JldHVybiBmdW5jdGlvbihyLGUpe3ZhciB1O2lmKHI9PT1UJiZlPT09VClyZXR1cm4gdDtpZihyIT09VCYmKHU9ciksZSE9PVQpe2lmKHU9PT1UKXJldHVybiBlO3R5cGVvZiByPT1cInN0cmluZ1wifHx0eXBlb2YgZT09XCJzdHJpbmdcIj8ocj15cihyKSxlPXlyKGUpKToocj1kcihyKSxlPWRyKGUpKSx1PW4ocixlKX1yZXR1cm4gdX19ZnVuY3Rpb24gWHIodCl7cmV0dXJuIHBlKGZ1bmN0aW9uKHIpe1xyXG5yZXR1cm4gcj1jKHIsRSh5ZSgpKSksZnIoZnVuY3Rpb24oZSl7dmFyIHU9dGhpcztyZXR1cm4gdChyLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQsdSxlKX0pfSl9KX1mdW5jdGlvbiBuZShuLHQpe3Q9dD09PVQ/XCIgXCI6eXIodCk7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIDI+cj9yP29yKHQsbik6dDoocj1vcih0LE9pKG4vRCh0KSkpLFJuLnRlc3QodCk/T3IoTShyKSwwLG4pLmpvaW4oXCJcIik6ci5zbGljZSgwLG4pKX1mdW5jdGlvbiB0ZSh0LHIsZSx1KXtmdW5jdGlvbiBpKCl7Zm9yKHZhciByPS0xLGM9YXJndW1lbnRzLmxlbmd0aCxhPS0xLGw9dS5sZW5ndGgscz1LdShsK2MpLGg9dGhpcyYmdGhpcyE9PSRuJiZ0aGlzIGluc3RhbmNlb2YgaT9mOnQ7KythPGw7KXNbYV09dVthXTtmb3IoO2MtLTspc1thKytdPWFyZ3VtZW50c1srK3JdO3JldHVybiBuKGgsbz9lOnRoaXMscyl9dmFyIG89MSZyLGY9VnIodCk7cmV0dXJuIGl9ZnVuY3Rpb24gcmUobil7cmV0dXJuIGZ1bmN0aW9uKHQscixlKXtcclxuZSYmdHlwZW9mIGUhPVwibnVtYmVyXCImJk9lKHQscixlKSYmKHI9ZT1UKSx0PUF1KHQpLHI9PT1UPyhyPXQsdD0wKTpyPUF1KHIpLGU9ZT09PVQ/dDxyPzE6LTE6QXUoZSk7dmFyIHU9LTE7cj1MaShPaSgoci10KS8oZXx8MSkpLDApO2Zvcih2YXIgaT1LdShyKTtyLS07KWlbbj9yOisrdV09dCx0Kz1lO3JldHVybiBpfX1mdW5jdGlvbiBlZShuKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdHlwZW9mIHQ9PVwic3RyaW5nXCImJnR5cGVvZiByPT1cInN0cmluZ1wifHwodD1TdSh0KSxyPVN1KHIpKSxuKHQscil9fWZ1bmN0aW9uIHVlKG4sdCxyLGUsdSxpLG8sZixjLGEpe3ZhciBsPTgmdCxzPWw/bzpUO289bD9UOm87dmFyIGg9bD9pOlQ7cmV0dXJuIGk9bD9UOmksdD0odHwobD8zMjo2NCkpJn4obD82NDozMiksNCZ0fHwodCY9LTQpLHU9W24sdCx1LGgscyxpLG8sZixjLGFdLHI9ci5hcHBseShULHUpLFJlKG4pJiZ5byhyLHUpLHIucGxhY2Vob2xkZXI9ZSxMZShyLG4sdCl9ZnVuY3Rpb24gaWUobil7XHJcbnZhciB0PVl1W25dO3JldHVybiBmdW5jdGlvbihuLHIpe2lmKG49U3Uobikscj1udWxsPT1yPzA6Q2koa3UociksMjkyKSl7dmFyIGU9KEl1KG4pK1wiZVwiKS5zcGxpdChcImVcIiksZT10KGVbMF0rXCJlXCIrKCtlWzFdK3IpKSxlPShJdShlKStcImVcIikuc3BsaXQoXCJlXCIpO3JldHVybisoZVswXStcImVcIisoK2VbMV0tcikpfXJldHVybiB0KG4pfX1mdW5jdGlvbiBvZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dm8odCk7cmV0dXJuXCJbb2JqZWN0IE1hcF1cIj09cj9XKHQpOlwiW29iamVjdCBTZXRdXCI9PXI/Qyh0KTprKHQsbih0KSl9fWZ1bmN0aW9uIGZlKG4sdCxyLGUsdSxpLG8sZil7dmFyIGM9MiZ0O2lmKCFjJiZ0eXBlb2YgbiE9XCJmdW5jdGlvblwiKXRocm93IG5ldyB0aShcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7dmFyIGE9ZT9lLmxlbmd0aDowO2lmKGF8fCh0Jj0tOTcsZT11PVQpLG89bz09PVQ/bzpMaShrdShvKSwwKSxmPWY9PT1UP2Y6a3UoZiksYS09dT91Lmxlbmd0aDowLDY0JnQpe1xyXG52YXIgbD1lLHM9dTtlPXU9VH12YXIgaD1jP1Q6aG8obik7cmV0dXJuIGk9W24sdCxyLGUsdSxsLHMsaSxvLGZdLGgmJihyPWlbMV0sbj1oWzFdLHQ9cnxuLGU9MTI4PT1uJiY4PT1yfHwxMjg9PW4mJjI1Nj09ciYmaVs3XS5sZW5ndGg8PWhbOF18fDM4ND09biYmaFs3XS5sZW5ndGg8PWhbOF0mJjg9PXIsMTMxPnR8fGUpJiYoMSZuJiYoaVsyXT1oWzJdLHR8PTEmcj8wOjQpLChyPWhbM10pJiYoZT1pWzNdLGlbM109ZT9VcihlLHIsaFs0XSk6cixpWzRdPWU/QihpWzNdLFwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiKTpoWzRdKSwocj1oWzVdKSYmKGU9aVs1XSxpWzVdPWU/QnIoZSxyLGhbNl0pOnIsaVs2XT1lP0IoaVs1XSxcIl9fbG9kYXNoX3BsYWNlaG9sZGVyX19cIik6aFs2XSksKHI9aFs3XSkmJihpWzddPXIpLDEyOCZuJiYoaVs4XT1udWxsPT1pWzhdP2hbOF06Q2koaVs4XSxoWzhdKSksbnVsbD09aVs5XSYmKGlbOV09aFs5XSksaVswXT1oWzBdLGlbMV09dCksbj1pWzBdLHQ9aVsxXSxcclxucj1pWzJdLGU9aVszXSx1PWlbNF0sZj1pWzldPWlbOV09PT1UP2M/MDpuLmxlbmd0aDpMaShpWzldLWEsMCksIWYmJjI0JnQmJih0Jj0tMjUpLGM9dCYmMSE9dD84PT10fHwxNj09dD9LcihuLHQsZik6MzIhPXQmJjMzIT10fHx1Lmxlbmd0aD9Kci5hcHBseShULGkpOnRlKG4sdCxyLGUpOlByKG4sdCxyKSxMZSgoaD9jbzp5bykoYyxpKSxuLHQpfWZ1bmN0aW9uIGNlKG4sdCxyLGUpe3JldHVybiBuPT09VHx8bHUobixlaVtyXSkmJiFvaS5jYWxsKGUscik/dDpufWZ1bmN0aW9uIGFlKG4sdCxyLGUsdSxpKXtyZXR1cm4gZHUobikmJmR1KHQpJiYoaS5zZXQodCxuKSxZdChuLHQsVCxhZSxpKSxpLmRlbGV0ZSh0KSksbn1mdW5jdGlvbiBsZShuKXtyZXR1cm4geHUobik/VDpufWZ1bmN0aW9uIHNlKG4sdCxyLGUsdSxpKXt2YXIgbz0xJnIsZj1uLmxlbmd0aCxjPXQubGVuZ3RoO2lmKGYhPWMmJiEobyYmYz5mKSlyZXR1cm4gZmFsc2U7aWYoKGM9aS5nZXQobikpJiZpLmdldCh0KSlyZXR1cm4gYz09dDtcclxudmFyIGM9LTEsYT10cnVlLGw9MiZyP25ldyBObjpUO2ZvcihpLnNldChuLHQpLGkuc2V0KHQsbik7KytjPGY7KXt2YXIgcz1uW2NdLHA9dFtjXTtpZihlKXZhciBfPW8/ZShwLHMsYyx0LG4saSk6ZShzLHAsYyxuLHQsaSk7aWYoXyE9PVQpe2lmKF8pY29udGludWU7YT1mYWxzZTticmVha31pZihsKXtpZighaCh0LGZ1bmN0aW9uKG4sdCl7aWYoIU8obCx0KSYmKHM9PT1ufHx1KHMsbixyLGUsaSkpKXJldHVybiBsLnB1c2godCl9KSl7YT1mYWxzZTticmVha319ZWxzZSBpZihzIT09cCYmIXUocyxwLHIsZSxpKSl7YT1mYWxzZTticmVha319cmV0dXJuIGkuZGVsZXRlKG4pLGkuZGVsZXRlKHQpLGF9ZnVuY3Rpb24gaGUobix0LHIsZSx1LGksbyl7c3dpdGNoKHIpe2Nhc2VcIltvYmplY3QgRGF0YVZpZXddXCI6aWYobi5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fG4uYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KWJyZWFrO249bi5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiOlxyXG5pZihuLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWkobmV3IHZpKG4pLG5ldyB2aSh0KSkpYnJlYWs7cmV0dXJuIHRydWU7Y2FzZVwiW29iamVjdCBCb29sZWFuXVwiOmNhc2VcIltvYmplY3QgRGF0ZV1cIjpjYXNlXCJbb2JqZWN0IE51bWJlcl1cIjpyZXR1cm4gbHUoK24sK3QpO2Nhc2VcIltvYmplY3QgRXJyb3JdXCI6cmV0dXJuIG4ubmFtZT09dC5uYW1lJiZuLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlXCJbb2JqZWN0IFJlZ0V4cF1cIjpjYXNlXCJbb2JqZWN0IFN0cmluZ11cIjpyZXR1cm4gbj09dCtcIlwiO2Nhc2VcIltvYmplY3QgTWFwXVwiOnZhciBmPVc7Y2FzZVwiW29iamVjdCBTZXRdXCI6aWYoZnx8KGY9TCksbi5zaXplIT10LnNpemUmJiEoMSZlKSlicmVhaztyZXR1cm4ocj1vLmdldChuKSk/cj09dDooZXw9MixvLnNldChuLHQpLHQ9c2UoZihuKSxmKHQpLGUsdSxpLG8pLG8uZGVsZXRlKG4pLHQpO2Nhc2VcIltvYmplY3QgU3ltYm9sXVwiOmlmKHRvKXJldHVybiB0by5jYWxsKG4pPT10by5jYWxsKHQpfVxyXG5yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gcGUobil7cmV0dXJuIHhvKFVlKG4sVCxaZSksbitcIlwiKX1mdW5jdGlvbiBfZShuKXtyZXR1cm4gU3QobixXdSxwbyl9ZnVuY3Rpb24gdmUobil7cmV0dXJuIFN0KG4sVXUsX28pfWZ1bmN0aW9uIGdlKG4pe2Zvcih2YXIgdD1uLm5hbWUrXCJcIixyPUdpW3RdLGU9b2kuY2FsbChHaSx0KT9yLmxlbmd0aDowO2UtLTspe3ZhciB1PXJbZV0saT11LmZ1bmM7aWYobnVsbD09aXx8aT09bilyZXR1cm4gdS5uYW1lfXJldHVybiB0fWZ1bmN0aW9uIGRlKG4pe3JldHVybihvaS5jYWxsKEFuLFwicGxhY2Vob2xkZXJcIik/QW46bikucGxhY2Vob2xkZXJ9ZnVuY3Rpb24geWUoKXt2YXIgbj1Bbi5pdGVyYXRlZXx8RnUsbj1uPT09RnU/cXQ6bjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm59ZnVuY3Rpb24gYmUobix0KXt2YXIgcj1uLl9fZGF0YV9fLGU9dHlwZW9mIHQ7cmV0dXJuKFwic3RyaW5nXCI9PWV8fFwibnVtYmVyXCI9PWV8fFwic3ltYm9sXCI9PWV8fFwiYm9vbGVhblwiPT1lP1wiX19wcm90b19fXCIhPT10Om51bGw9PT10KT9yW3R5cGVvZiB0PT1cInN0cmluZ1wiP1wic3RyaW5nXCI6XCJoYXNoXCJdOnIubWFwO1xyXG59ZnVuY3Rpb24geGUobil7Zm9yKHZhciB0PVd1KG4pLHI9dC5sZW5ndGg7ci0tOyl7dmFyIGU9dFtyXSx1PW5bZV07dFtyXT1bZSx1LHU9PT11JiYhZHUodSldfXJldHVybiB0fWZ1bmN0aW9uIGplKG4sdCl7dmFyIHI9bnVsbD09bj9UOm5bdF07cmV0dXJuIEZ0KHIpP3I6VH1mdW5jdGlvbiB3ZShuLHQscil7dD1Tcih0LG4pO2Zvcih2YXIgZT0tMSx1PXQubGVuZ3RoLGk9ZmFsc2U7KytlPHU7KXt2YXIgbz1NZSh0W2VdKTtpZighKGk9bnVsbCE9biYmcihuLG8pKSlicmVhaztuPW5bb119cmV0dXJuIGl8fCsrZSE9dT9pOih1PW51bGw9PW4/MDpuLmxlbmd0aCwhIXUmJmd1KHUpJiZTZShvLHUpJiYoZmYobil8fG9mKG4pKSl9ZnVuY3Rpb24gbWUobil7dmFyIHQ9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIG5bMF0mJm9pLmNhbGwobixcImluZGV4XCIpJiYoci5pbmRleD1uLmluZGV4LHIuaW5wdXQ9bi5pbnB1dCkscn1mdW5jdGlvbiBBZShuKXtcclxucmV0dXJuIHR5cGVvZiBuLmNvbnN0cnVjdG9yIT1cImZ1bmN0aW9uXCJ8fHplKG4pP3t9OmVvKGRpKG4pKX1mdW5jdGlvbiBrZShuLHQscil7dmFyIGU9bi5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIjpyZXR1cm4gUnIobik7Y2FzZVwiW29iamVjdCBCb29sZWFuXVwiOmNhc2VcIltvYmplY3QgRGF0ZV1cIjpyZXR1cm4gbmV3IGUoK24pO2Nhc2VcIltvYmplY3QgRGF0YVZpZXddXCI6cmV0dXJuIHQ9cj9ScihuLmJ1ZmZlcik6bi5idWZmZXIsbmV3IG4uY29uc3RydWN0b3IodCxuLmJ5dGVPZmZzZXQsbi5ieXRlTGVuZ3RoKTtjYXNlXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIjpjYXNlXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIjpjYXNlXCJbb2JqZWN0IEludDhBcnJheV1cIjpjYXNlXCJbb2JqZWN0IEludDE2QXJyYXldXCI6Y2FzZVwiW29iamVjdCBJbnQzMkFycmF5XVwiOmNhc2VcIltvYmplY3QgVWludDhBcnJheV1cIjpjYXNlXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiOlxyXG5jYXNlXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiOmNhc2VcIltvYmplY3QgVWludDMyQXJyYXldXCI6cmV0dXJuIHpyKG4scik7Y2FzZVwiW29iamVjdCBNYXBdXCI6cmV0dXJuIG5ldyBlO2Nhc2VcIltvYmplY3QgTnVtYmVyXVwiOmNhc2VcIltvYmplY3QgU3RyaW5nXVwiOnJldHVybiBuZXcgZShuKTtjYXNlXCJbb2JqZWN0IFJlZ0V4cF1cIjpyZXR1cm4gdD1uZXcgbi5jb25zdHJ1Y3RvcihuLnNvdXJjZSxfbi5leGVjKG4pKSx0Lmxhc3RJbmRleD1uLmxhc3RJbmRleCx0O2Nhc2VcIltvYmplY3QgU2V0XVwiOnJldHVybiBuZXcgZTtjYXNlXCJbb2JqZWN0IFN5bWJvbF1cIjpyZXR1cm4gdG8/UXUodG8uY2FsbChuKSk6e319fWZ1bmN0aW9uIEVlKG4pe3JldHVybiBmZihuKXx8b2Yobil8fCEhKGppJiZuJiZuW2ppXSl9ZnVuY3Rpb24gU2Uobix0KXt2YXIgcj10eXBlb2YgbjtyZXR1cm4gdD1udWxsPT10PzkwMDcxOTkyNTQ3NDA5OTE6dCwhIXQmJihcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiIT1yJiZibi50ZXN0KG4pKSYmLTE8biYmMD09biUxJiZuPHQ7XHJcbn1mdW5jdGlvbiBPZShuLHQscil7aWYoIWR1KHIpKXJldHVybiBmYWxzZTt2YXIgZT10eXBlb2YgdDtyZXR1cm4hIShcIm51bWJlclwiPT1lP3N1KHIpJiZTZSh0LHIubGVuZ3RoKTpcInN0cmluZ1wiPT1lJiZ0IGluIHIpJiZsdShyW3RdLG4pfWZ1bmN0aW9uIEllKG4sdCl7aWYoZmYobikpcmV0dXJuIGZhbHNlO3ZhciByPXR5cGVvZiBuO3JldHVybiEoXCJudW1iZXJcIiE9ciYmXCJzeW1ib2xcIiE9ciYmXCJib29sZWFuXCIhPXImJm51bGwhPW4mJiF3dShuKSl8fChubi50ZXN0KG4pfHwhWC50ZXN0KG4pfHxudWxsIT10JiZuIGluIFF1KHQpKX1mdW5jdGlvbiBSZShuKXt2YXIgdD1nZShuKSxyPUFuW3RdO3JldHVybiB0eXBlb2Ygcj09XCJmdW5jdGlvblwiJiZ0IGluIExuLnByb3RvdHlwZSYmKG49PT1yfHwodD1obyhyKSwhIXQmJm49PT10WzBdKSl9ZnVuY3Rpb24gemUobil7dmFyIHQ9biYmbi5jb25zdHJ1Y3RvcjtyZXR1cm4gbj09PSh0eXBlb2YgdD09XCJmdW5jdGlvblwiJiZ0LnByb3RvdHlwZXx8ZWkpfWZ1bmN0aW9uIFdlKG4sdCl7XHJcbnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmKHJbbl09PT10JiYodCE9PVR8fG4gaW4gUXUocikpKX19ZnVuY3Rpb24gVWUodCxyLGUpe3JldHVybiByPUxpKHI9PT1UP3QubGVuZ3RoLTE6ciwwKSxmdW5jdGlvbigpe2Zvcih2YXIgdT1hcmd1bWVudHMsaT0tMSxvPUxpKHUubGVuZ3RoLXIsMCksZj1LdShvKTsrK2k8bzspZltpXT11W3IraV07Zm9yKGk9LTEsbz1LdShyKzEpOysraTxyOylvW2ldPXVbaV07cmV0dXJuIG9bcl09ZShmKSxuKHQsdGhpcyxvKX19ZnVuY3Rpb24gQmUobix0KXtpZihcIl9fcHJvdG9fX1wiIT10KXJldHVybiBuW3RdfWZ1bmN0aW9uIExlKG4sdCxyKXt2YXIgZT10K1wiXCI7dD14bzt2YXIgdSxpPSRlO3JldHVybiB1PSh1PWUubWF0Y2goYW4pKT91WzFdLnNwbGl0KGxuKTpbXSxyPWkodSxyKSwoaT1yLmxlbmd0aCkmJih1PWktMSxyW3VdPSgxPGk/XCImIFwiOlwiXCIpK3JbdV0scj1yLmpvaW4oMjxpP1wiLCBcIjpcIiBcIiksZT1lLnJlcGxhY2UoY24sXCJ7XFxuLyogW3dyYXBwZWQgd2l0aCBcIityK1wiXSAqL1xcblwiKSksXHJcbnQobixlKX1mdW5jdGlvbiBDZShuKXt2YXIgdD0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1EaSgpLHU9MTYtKGUtcik7aWYocj1lLDA8dSl7aWYoODAwPD0rK3QpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gbi5hcHBseShULGFyZ3VtZW50cyl9fWZ1bmN0aW9uIERlKG4sdCl7dmFyIHI9LTEsZT1uLmxlbmd0aCx1PWUtMTtmb3IodD10PT09VD9lOnQ7KytyPHQ7KXt2YXIgZT1pcihyLHUpLGk9bltlXTtuW2VdPW5bcl0sbltyXT1pfXJldHVybiBuLmxlbmd0aD10LG59ZnVuY3Rpb24gTWUobil7aWYodHlwZW9mIG49PVwic3RyaW5nXCJ8fHd1KG4pKXJldHVybiBuO3ZhciB0PW4rXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9uPT0tJD9cIi0wXCI6dH1mdW5jdGlvbiBUZShuKXtpZihudWxsIT1uKXt0cnl7cmV0dXJuIGlpLmNhbGwobil9Y2F0Y2gobil7fXJldHVybiBuK1wiXCJ9cmV0dXJuXCJcIn1mdW5jdGlvbiAkZShuLHQpe3JldHVybiByKE4sZnVuY3Rpb24ocil7dmFyIGU9XCJfLlwiK3JbMF07XHJcbnQmclsxXSYmIW8obixlKSYmbi5wdXNoKGUpfSksbi5zb3J0KCl9ZnVuY3Rpb24gRmUobil7aWYobiBpbnN0YW5jZW9mIExuKXJldHVybiBuLmNsb25lKCk7dmFyIHQ9bmV3IE9uKG4uX193cmFwcGVkX18sbi5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPUxyKG4uX19hY3Rpb25zX18pLHQuX19pbmRleF9fPW4uX19pbmRleF9fLHQuX192YWx1ZXNfXz1uLl9fdmFsdWVzX18sdH1mdW5jdGlvbiBOZShuLHQscil7dmFyIGU9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiBlPyhyPW51bGw9PXI/MDprdShyKSwwPnImJihyPUxpKGUrciwwKSksXyhuLHllKHQsMykscikpOi0xfWZ1bmN0aW9uIFBlKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7aWYoIWUpcmV0dXJuLTE7dmFyIHU9ZS0xO3JldHVybiByIT09VCYmKHU9a3UociksdT0wPnI/TGkoZSt1LDApOkNpKHUsZS0xKSksXyhuLHllKHQsMyksdSx0cnVlKX1mdW5jdGlvbiBaZShuKXtyZXR1cm4obnVsbD09bj8wOm4ubGVuZ3RoKT93dChuLDEpOltdO1xyXG59ZnVuY3Rpb24gcWUobil7cmV0dXJuIG4mJm4ubGVuZ3RoP25bMF06VH1mdW5jdGlvbiBWZShuKXt2YXIgdD1udWxsPT1uPzA6bi5sZW5ndGg7cmV0dXJuIHQ/blt0LTFdOlR9ZnVuY3Rpb24gS2Uobix0KXtyZXR1cm4gbiYmbi5sZW5ndGgmJnQmJnQubGVuZ3RoP2VyKG4sdCk6bn1mdW5jdGlvbiBHZShuKXtyZXR1cm4gbnVsbD09bj9uOiRpLmNhbGwobil9ZnVuY3Rpb24gSGUobil7aWYoIW58fCFuLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBuPWkobixmdW5jdGlvbihuKXtpZihodShuKSlyZXR1cm4gdD1MaShuLmxlbmd0aCx0KSx0cnVlfSksQSh0LGZ1bmN0aW9uKHQpe3JldHVybiBjKG4sYih0KSl9KX1mdW5jdGlvbiBKZSh0LHIpe2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuW107dmFyIGU9SGUodCk7cmV0dXJuIG51bGw9PXI/ZTpjKGUsZnVuY3Rpb24odCl7cmV0dXJuIG4ocixULHQpfSl9ZnVuY3Rpb24gWWUobil7cmV0dXJuIG49QW4obiksbi5fX2NoYWluX189dHJ1ZSxuO1xyXG59ZnVuY3Rpb24gUWUobix0KXtyZXR1cm4gdChuKX1mdW5jdGlvbiBYZSgpe3JldHVybiB0aGlzfWZ1bmN0aW9uIG51KG4sdCl7cmV0dXJuKGZmKG4pP3I6dW8pKG4seWUodCwzKSl9ZnVuY3Rpb24gdHUobix0KXtyZXR1cm4oZmYobik/ZTppbykobix5ZSh0LDMpKX1mdW5jdGlvbiBydShuLHQpe3JldHVybihmZihuKT9jOkd0KShuLHllKHQsMykpfWZ1bmN0aW9uIGV1KG4sdCxyKXtyZXR1cm4gdD1yP1Q6dCx0PW4mJm51bGw9PXQ/bi5sZW5ndGg6dCxmZShuLDEyOCxULFQsVCxULHQpfWZ1bmN0aW9uIHV1KG4sdCl7dmFyIHI7aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgdGkoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO3JldHVybiBuPWt1KG4pLGZ1bmN0aW9uKCl7cmV0dXJuIDA8LS1uJiYocj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksMT49biYmKHQ9VCkscn19ZnVuY3Rpb24gaXUobix0LHIpe3JldHVybiB0PXI/VDp0LG49ZmUobiw4LFQsVCxULFQsVCx0KSxuLnBsYWNlaG9sZGVyPWl1LnBsYWNlaG9sZGVyLFxyXG5ufWZ1bmN0aW9uIG91KG4sdCxyKXtyZXR1cm4gdD1yP1Q6dCxuPWZlKG4sMTYsVCxULFQsVCxULHQpLG4ucGxhY2Vob2xkZXI9b3UucGxhY2Vob2xkZXIsbn1mdW5jdGlvbiBmdShuLHQscil7ZnVuY3Rpb24gZSh0KXt2YXIgcj1jLGU9YTtyZXR1cm4gYz1hPVQsXz10LHM9bi5hcHBseShlLHIpfWZ1bmN0aW9uIHUobil7dmFyIHI9bi1wO3JldHVybiBuLT1fLHA9PT1UfHxyPj10fHwwPnJ8fGcmJm4+PWx9ZnVuY3Rpb24gaSgpe3ZhciBuPUdvKCk7aWYodShuKSlyZXR1cm4gbyhuKTt2YXIgcixlPWJvO3I9bi1fLG49dC0obi1wKSxyPWc/Q2kobixsLXIpOm4saD1lKGkscil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gaD1ULGQmJmM/ZShuKTooYz1hPVQscyl9ZnVuY3Rpb24gZigpe3ZhciBuPUdvKCkscj11KG4pO2lmKGM9YXJndW1lbnRzLGE9dGhpcyxwPW4scil7aWYoaD09PVQpcmV0dXJuIF89bj1wLGg9Ym8oaSx0KSx2P2Uobik6cztpZihnKXJldHVybiBoPWJvKGksdCksZShwKX1yZXR1cm4gaD09PVQmJihoPWJvKGksdCkpLFxyXG5zfXZhciBjLGEsbCxzLGgscCxfPTAsdj1mYWxzZSxnPWZhbHNlLGQ9dHJ1ZTtpZih0eXBlb2YgbiE9XCJmdW5jdGlvblwiKXRocm93IG5ldyB0aShcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7cmV0dXJuIHQ9U3UodCl8fDAsZHUocikmJih2PSEhci5sZWFkaW5nLGw9KGc9XCJtYXhXYWl0XCJpbiByKT9MaShTdShyLm1heFdhaXQpfHwwLHQpOmwsZD1cInRyYWlsaW5nXCJpbiByPyEhci50cmFpbGluZzpkKSxmLmNhbmNlbD1mdW5jdGlvbigpe2ghPT1UJiZsbyhoKSxfPTAsYz1wPWE9aD1UfSxmLmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGg9PT1UP3M6byhHbygpKX0sZn1mdW5jdGlvbiBjdShuLHQpe2lmKHR5cGVvZiBuIT1cImZ1bmN0aW9uXCJ8fG51bGwhPXQmJnR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IHRpKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx1PXQ/dC5hcHBseSh0aGlzLGUpOmVbMF0saT1yLmNhY2hlO3JldHVybiBpLmhhcyh1KT9pLmdldCh1KTooZT1uLmFwcGx5KHRoaXMsZSksXHJcbnIuY2FjaGU9aS5zZXQodSxlKXx8aSxlKX07cmV0dXJuIHIuY2FjaGU9bmV3KGN1LkNhY2hlfHxGbikscn1mdW5jdGlvbiBhdShuKXtpZih0eXBlb2YgbiE9XCJmdW5jdGlvblwiKXRocm93IG5ldyB0aShcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFuLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFuLmNhbGwodGhpcyx0WzBdKTtjYXNlIDI6cmV0dXJuIW4uY2FsbCh0aGlzLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiFuLmNhbGwodGhpcyx0WzBdLHRbMV0sdFsyXSl9cmV0dXJuIW4uYXBwbHkodGhpcyx0KX19ZnVuY3Rpb24gbHUobix0KXtyZXR1cm4gbj09PXR8fG4hPT1uJiZ0IT09dH1mdW5jdGlvbiBzdShuKXtyZXR1cm4gbnVsbCE9biYmZ3Uobi5sZW5ndGgpJiYhX3Uobil9ZnVuY3Rpb24gaHUobil7cmV0dXJuIHl1KG4pJiZzdShuKX1mdW5jdGlvbiBwdShuKXtpZigheXUobikpcmV0dXJuIGZhbHNlO1xyXG52YXIgdD1PdChuKTtyZXR1cm5cIltvYmplY3QgRXJyb3JdXCI9PXR8fFwiW29iamVjdCBET01FeGNlcHRpb25dXCI9PXR8fHR5cGVvZiBuLm1lc3NhZ2U9PVwic3RyaW5nXCImJnR5cGVvZiBuLm5hbWU9PVwic3RyaW5nXCImJiF4dShuKX1mdW5jdGlvbiBfdShuKXtyZXR1cm4hIWR1KG4pJiYobj1PdChuKSxcIltvYmplY3QgRnVuY3Rpb25dXCI9PW58fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09bnx8XCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI9PW58fFwiW29iamVjdCBQcm94eV1cIj09bil9ZnVuY3Rpb24gdnUobil7cmV0dXJuIHR5cGVvZiBuPT1cIm51bWJlclwiJiZuPT1rdShuKX1mdW5jdGlvbiBndShuKXtyZXR1cm4gdHlwZW9mIG49PVwibnVtYmVyXCImJi0xPG4mJjA9PW4lMSYmOTAwNzE5OTI1NDc0MDk5MT49bn1mdW5jdGlvbiBkdShuKXt2YXIgdD10eXBlb2YgbjtyZXR1cm4gbnVsbCE9biYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24geXUobil7cmV0dXJuIG51bGwhPW4mJnR5cGVvZiBuPT1cIm9iamVjdFwiO1xyXG59ZnVuY3Rpb24gYnUobil7cmV0dXJuIHR5cGVvZiBuPT1cIm51bWJlclwifHx5dShuKSYmXCJbb2JqZWN0IE51bWJlcl1cIj09T3Qobil9ZnVuY3Rpb24geHUobil7cmV0dXJuISgheXUobil8fFwiW29iamVjdCBPYmplY3RdXCIhPU90KG4pKSYmKG49ZGkobiksbnVsbD09PW58fChuPW9pLmNhbGwobixcImNvbnN0cnVjdG9yXCIpJiZuLmNvbnN0cnVjdG9yLHR5cGVvZiBuPT1cImZ1bmN0aW9uXCImJm4gaW5zdGFuY2VvZiBuJiZpaS5jYWxsKG4pPT1saSkpfWZ1bmN0aW9uIGp1KG4pe3JldHVybiB0eXBlb2Ygbj09XCJzdHJpbmdcInx8IWZmKG4pJiZ5dShuKSYmXCJbb2JqZWN0IFN0cmluZ11cIj09T3Qobil9ZnVuY3Rpb24gd3Uobil7cmV0dXJuIHR5cGVvZiBuPT1cInN5bWJvbFwifHx5dShuKSYmXCJbb2JqZWN0IFN5bWJvbF1cIj09T3Qobil9ZnVuY3Rpb24gbXUobil7aWYoIW4pcmV0dXJuW107aWYoc3UobikpcmV0dXJuIGp1KG4pP00obik6THIobik7aWYod2kmJm5bd2ldKXtuPW5bd2ldKCk7Zm9yKHZhciB0LHI9W107ISh0PW4ubmV4dCgpKS5kb25lOylyLnB1c2godC52YWx1ZSk7XHJcbnJldHVybiByfXJldHVybiB0PXZvKG4pLChcIltvYmplY3QgTWFwXVwiPT10P1c6XCJbb2JqZWN0IFNldF1cIj09dD9MOkx1KShuKX1mdW5jdGlvbiBBdShuKXtyZXR1cm4gbj8obj1TdShuKSxuPT09JHx8bj09PS0kPzEuNzk3NjkzMTM0ODYyMzE1N2UzMDgqKDA+bj8tMToxKTpuPT09bj9uOjApOjA9PT1uP246MH1mdW5jdGlvbiBrdShuKXtuPUF1KG4pO3ZhciB0PW4lMTtyZXR1cm4gbj09PW4/dD9uLXQ6bjowfWZ1bmN0aW9uIEV1KG4pe3JldHVybiBuP3B0KGt1KG4pLDAsNDI5NDk2NzI5NSk6MH1mdW5jdGlvbiBTdShuKXtpZih0eXBlb2Ygbj09XCJudW1iZXJcIilyZXR1cm4gbjtpZih3dShuKSlyZXR1cm4gRjtpZihkdShuKSYmKG49dHlwZW9mIG4udmFsdWVPZj09XCJmdW5jdGlvblwiP24udmFsdWVPZigpOm4sbj1kdShuKT9uK1wiXCI6biksdHlwZW9mIG4hPVwic3RyaW5nXCIpcmV0dXJuIDA9PT1uP246K247bj1uLnJlcGxhY2UodW4sXCJcIik7dmFyIHQ9Z24udGVzdChuKTtyZXR1cm4gdHx8eW4udGVzdChuKT9EbihuLnNsaWNlKDIpLHQ/Mjo4KTp2bi50ZXN0KG4pP0Y6K247XHJcbn1mdW5jdGlvbiBPdShuKXtyZXR1cm4gQ3IobixVdShuKSl9ZnVuY3Rpb24gSXUobil7cmV0dXJuIG51bGw9PW4/XCJcIjp5cihuKX1mdW5jdGlvbiBSdShuLHQscil7cmV0dXJuIG49bnVsbD09bj9UOkV0KG4sdCksbj09PVQ/cjpufWZ1bmN0aW9uIHp1KG4sdCl7cmV0dXJuIG51bGwhPW4mJndlKG4sdCx6dCl9ZnVuY3Rpb24gV3Uobil7cmV0dXJuIHN1KG4pP3FuKG4pOlZ0KG4pfWZ1bmN0aW9uIFV1KG4pe2lmKHN1KG4pKW49cW4obix0cnVlKTtlbHNlIGlmKGR1KG4pKXt2YXIgdCxyPXplKG4pLGU9W107Zm9yKHQgaW4gbikoXCJjb25zdHJ1Y3RvclwiIT10fHwhciYmb2kuY2FsbChuLHQpKSYmZS5wdXNoKHQpO249ZX1lbHNle2lmKHQ9W10sbnVsbCE9bilmb3IociBpbiBRdShuKSl0LnB1c2gocik7bj10fXJldHVybiBufWZ1bmN0aW9uIEJ1KG4sdCl7aWYobnVsbD09bilyZXR1cm57fTt2YXIgcj1jKHZlKG4pLGZ1bmN0aW9uKG4pe3JldHVybltuXX0pO3JldHVybiB0PXllKHQpLHRyKG4scixmdW5jdGlvbihuLHIpe1xyXG5yZXR1cm4gdChuLHJbMF0pfSl9ZnVuY3Rpb24gTHUobil7cmV0dXJuIG51bGw9PW4/W106UyhuLFd1KG4pKX1mdW5jdGlvbiBDdShuKXtyZXR1cm4gJGYoSXUobikudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gRHUobil7cmV0dXJuKG49SXUobikpJiZuLnJlcGxhY2UoeG4sWG4pLnJlcGxhY2UoU24sXCJcIil9ZnVuY3Rpb24gTXUobix0LHIpe3JldHVybiBuPUl1KG4pLHQ9cj9UOnQsdD09PVQ/em4udGVzdChuKT9uLm1hdGNoKEluKXx8W106bi5tYXRjaChzbil8fFtdOm4ubWF0Y2godCl8fFtdfWZ1bmN0aW9uIFR1KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX1mdW5jdGlvbiAkdShuKXtyZXR1cm4gbn1mdW5jdGlvbiBGdShuKXtyZXR1cm4gcXQodHlwZW9mIG49PVwiZnVuY3Rpb25cIj9uOl90KG4sMSkpfWZ1bmN0aW9uIE51KG4sdCxlKXt2YXIgdT1XdSh0KSxpPWt0KHQsdSk7bnVsbCE9ZXx8ZHUodCkmJihpLmxlbmd0aHx8IXUubGVuZ3RoKXx8KGU9dCx0PW4sbj10aGlzLGk9a3QodCxXdSh0KSkpO1xyXG52YXIgbz0hKGR1KGUpJiZcImNoYWluXCJpbiBlJiYhZS5jaGFpbiksZj1fdShuKTtyZXR1cm4gcihpLGZ1bmN0aW9uKHIpe3ZhciBlPXRbcl07bltyXT1lLGYmJihuLnByb3RvdHlwZVtyXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX19jaGFpbl9fO2lmKG98fHQpe3ZhciByPW4odGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuKHIuX19hY3Rpb25zX189THIodGhpcy5fX2FjdGlvbnNfXykpLnB1c2goe2Z1bmM6ZSxhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOm59KSxyLl9fY2hhaW5fXz10LHJ9cmV0dXJuIGUuYXBwbHkobixhKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxufWZ1bmN0aW9uIFB1KCl7fWZ1bmN0aW9uIFp1KG4pe3JldHVybiBJZShuKT9iKE1lKG4pKTpycihuKX1mdW5jdGlvbiBxdSgpe3JldHVybltdfWZ1bmN0aW9uIFZ1KCl7cmV0dXJuIGZhbHNlfW1uPW51bGw9PW1uPyRuOnJ0LmRlZmF1bHRzKCRuLk9iamVjdCgpLG1uLHJ0LnBpY2soJG4sV24pKTt2YXIgS3U9bW4uQXJyYXksR3U9bW4uRGF0ZSxIdT1tbi5FcnJvcixKdT1tbi5GdW5jdGlvbixZdT1tbi5NYXRoLFF1PW1uLk9iamVjdCxYdT1tbi5SZWdFeHAsbmk9bW4uU3RyaW5nLHRpPW1uLlR5cGVFcnJvcixyaT1LdS5wcm90b3R5cGUsZWk9UXUucHJvdG90eXBlLHVpPW1uW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLGlpPUp1LnByb3RvdHlwZS50b1N0cmluZyxvaT1laS5oYXNPd25Qcm9wZXJ0eSxmaT0wLGNpPWZ1bmN0aW9uKCl7XHJcbnZhciBuPS9bXi5dKyQvLmV4ZWModWkmJnVpLmtleXMmJnVpLmtleXMuSUVfUFJPVE98fFwiXCIpO3JldHVybiBuP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCJ9KCksYWk9ZWkudG9TdHJpbmcsbGk9aWkuY2FsbChRdSksc2k9JG4uXyxoaT1YdShcIl5cIitpaS5jYWxsKG9pKS5yZXBsYWNlKHJuLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIikscGk9UG4/bW4uQnVmZmVyOlQsX2k9bW4uU3ltYm9sLHZpPW1uLlVpbnQ4QXJyYXksZ2k9cGk/cGkuYWxsb2NVbnNhZmU6VCxkaT1VKFF1LmdldFByb3RvdHlwZU9mLFF1KSx5aT1RdS5jcmVhdGUsYmk9ZWkucHJvcGVydHlJc0VudW1lcmFibGUseGk9cmkuc3BsaWNlLGppPV9pP19pLmlzQ29uY2F0U3ByZWFkYWJsZTpULHdpPV9pP19pLml0ZXJhdG9yOlQsbWk9X2k/X2kudG9TdHJpbmdUYWc6VCxBaT1mdW5jdGlvbigpe3RyeXt2YXIgbj1qZShRdSxcImRlZmluZVByb3BlcnR5XCIpO1xyXG5yZXR1cm4gbih7fSxcIlwiLHt9KSxufWNhdGNoKG4pe319KCksa2k9bW4uY2xlYXJUaW1lb3V0IT09JG4uY2xlYXJUaW1lb3V0JiZtbi5jbGVhclRpbWVvdXQsRWk9R3UmJkd1Lm5vdyE9PSRuLkRhdGUubm93JiZHdS5ub3csU2k9bW4uc2V0VGltZW91dCE9PSRuLnNldFRpbWVvdXQmJm1uLnNldFRpbWVvdXQsT2k9WXUuY2VpbCxJaT1ZdS5mbG9vcixSaT1RdS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsemk9cGk/cGkuaXNCdWZmZXI6VCxXaT1tbi5pc0Zpbml0ZSxVaT1yaS5qb2luLEJpPVUoUXUua2V5cyxRdSksTGk9WXUubWF4LENpPVl1Lm1pbixEaT1HdS5ub3csTWk9bW4ucGFyc2VJbnQsVGk9WXUucmFuZG9tLCRpPXJpLnJldmVyc2UsRmk9amUobW4sXCJEYXRhVmlld1wiKSxOaT1qZShtbixcIk1hcFwiKSxQaT1qZShtbixcIlByb21pc2VcIiksWmk9amUobW4sXCJTZXRcIikscWk9amUobW4sXCJXZWFrTWFwXCIpLFZpPWplKFF1LFwiY3JlYXRlXCIpLEtpPXFpJiZuZXcgcWksR2k9e30sSGk9VGUoRmkpLEppPVRlKE5pKSxZaT1UZShQaSksUWk9VGUoWmkpLFhpPVRlKHFpKSxubz1faT9faS5wcm90b3R5cGU6VCx0bz1ubz9uby52YWx1ZU9mOlQscm89bm8/bm8udG9TdHJpbmc6VCxlbz1mdW5jdGlvbigpe1xyXG5mdW5jdGlvbiBuKCl7fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZHUodCk/eWk/eWkodCk6KG4ucHJvdG90eXBlPXQsdD1uZXcgbixuLnByb3RvdHlwZT1ULHQpOnt9fX0oKTtBbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6SixldmFsdWF0ZTpZLGludGVycG9sYXRlOlEsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkFufX0sQW4ucHJvdG90eXBlPWtuLnByb3RvdHlwZSxBbi5wcm90b3R5cGUuY29uc3RydWN0b3I9QW4sT24ucHJvdG90eXBlPWVvKGtuLnByb3RvdHlwZSksT24ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU9uLExuLnByb3RvdHlwZT1lbyhrbi5wcm90b3R5cGUpLExuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1MbixNbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVZpP1ZpKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxNbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuPXRoaXMuaGFzKG4pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tuXSxcclxudGhpcy5zaXplLT1uPzE6MCxufSxNbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIFZpPyhuPXRbbl0sXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCI9PT1uP1Q6bik6b2kuY2FsbCh0LG4pP3Rbbl06VH0sTW4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihuKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBWaT90W25dIT09VDpvaS5jYWxsKHQsbil9LE1uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24obix0KXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKG4pPzA6MSxyW25dPVZpJiZ0PT09VD9cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIjp0LHRoaXN9LFRuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LFRuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gbj1mdCh0LG4pLCEoMD5uKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTp4aS5jYWxsKHQsbiwxKSxcclxuLS10aGlzLnNpemUsdHJ1ZSl9LFRuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gbj1mdCh0LG4pLDA+bj9UOnRbbl1bMV19LFRuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24obil7cmV0dXJuLTE8ZnQodGhpcy5fX2RhdGFfXyxuKX0sVG4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihuLHQpe3ZhciByPXRoaXMuX19kYXRhX18sZT1mdChyLG4pO3JldHVybiAwPmU/KCsrdGhpcy5zaXplLHIucHVzaChbbix0XSkpOnJbZV1bMV09dCx0aGlzfSxGbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBNbixtYXA6bmV3KE5pfHxUbiksc3RyaW5nOm5ldyBNbn19LEZuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24obil7cmV0dXJuIG49YmUodGhpcyxuKS5kZWxldGUobiksdGhpcy5zaXplLT1uPzE6MCxufSxGbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG4pe3JldHVybiBiZSh0aGlzLG4pLmdldChuKTtcclxufSxGbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKG4pe3JldHVybiBiZSh0aGlzLG4pLmhhcyhuKX0sRm4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihuLHQpe3ZhciByPWJlKHRoaXMsbiksZT1yLnNpemU7cmV0dXJuIHIuc2V0KG4sdCksdGhpcy5zaXplKz1yLnNpemU9PWU/MDoxLHRoaXN9LE5uLnByb3RvdHlwZS5hZGQ9Tm4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KG4sXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIpLHRoaXN9LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG4pfSxabi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBUbix0aGlzLnNpemU9MH0sWm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBuPXQuZGVsZXRlKG4pLHRoaXMuc2l6ZT10LnNpemUsbn0sWm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihuKXtcclxucmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KG4pfSxabi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhuKX0sWm4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihuLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFRuKXt2YXIgZT1yLl9fZGF0YV9fO2lmKCFOaXx8MTk5PmUubGVuZ3RoKXJldHVybiBlLnB1c2goW24sdF0pLHRoaXMuc2l6ZT0rK3Iuc2l6ZSx0aGlzO3I9dGhpcy5fX2RhdGFfXz1uZXcgRm4oZSl9cmV0dXJuIHIuc2V0KG4sdCksdGhpcy5zaXplPXIuc2l6ZSx0aGlzfTt2YXIgdW89RnIobXQpLGlvPUZyKEF0LHRydWUpLG9vPU5yKCksZm89TnIodHJ1ZSksY289S2k/ZnVuY3Rpb24obix0KXtyZXR1cm4gS2kuc2V0KG4sdCksbn06JHUsYW89QWk/ZnVuY3Rpb24obix0KXtyZXR1cm4gQWkobixcInRvU3RyaW5nXCIse2NvbmZpZ3VyYWJsZTp0cnVlLGVudW1lcmFibGU6ZmFsc2UsdmFsdWU6VHUodCksd3JpdGFibGU6dHJ1ZX0pfTokdSxsbz1raXx8ZnVuY3Rpb24obil7XHJcbnJldHVybiAkbi5jbGVhclRpbWVvdXQobil9LHNvPVppJiYxL0wobmV3IFppKFssLTBdKSlbMV09PSQ/ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBaaShuKX06UHUsaG89S2k/ZnVuY3Rpb24obil7cmV0dXJuIEtpLmdldChuKX06UHUscG89Umk/ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW4/W106KG49UXUobiksaShSaShuKSxmdW5jdGlvbih0KXtyZXR1cm4gYmkuY2FsbChuLHQpfSkpfTpxdSxfbz1SaT9mdW5jdGlvbihuKXtmb3IodmFyIHQ9W107bjspYSh0LHBvKG4pKSxuPWRpKG4pO3JldHVybiB0fTpxdSx2bz1PdDsoRmkmJlwiW29iamVjdCBEYXRhVmlld11cIiE9dm8obmV3IEZpKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxOaSYmXCJbb2JqZWN0IE1hcF1cIiE9dm8obmV3IE5pKXx8UGkmJlwiW29iamVjdCBQcm9taXNlXVwiIT12byhQaS5yZXNvbHZlKCkpfHxaaSYmXCJbb2JqZWN0IFNldF1cIiE9dm8obmV3IFppKXx8cWkmJlwiW29iamVjdCBXZWFrTWFwXVwiIT12byhuZXcgcWkpKSYmKHZvPWZ1bmN0aW9uKG4pe1xyXG52YXIgdD1PdChuKTtpZihuPShuPVwiW29iamVjdCBPYmplY3RdXCI9PXQ/bi5jb25zdHJ1Y3RvcjpUKT9UZShuKTpcIlwiKXN3aXRjaChuKXtjYXNlIEhpOnJldHVyblwiW29iamVjdCBEYXRhVmlld11cIjtjYXNlIEppOnJldHVyblwiW29iamVjdCBNYXBdXCI7Y2FzZSBZaTpyZXR1cm5cIltvYmplY3QgUHJvbWlzZV1cIjtjYXNlIFFpOnJldHVyblwiW29iamVjdCBTZXRdXCI7Y2FzZSBYaTpyZXR1cm5cIltvYmplY3QgV2Vha01hcF1cIn1yZXR1cm4gdH0pO3ZhciBnbz11aT9fdTpWdSx5bz1DZShjbyksYm89U2l8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuICRuLnNldFRpbWVvdXQobix0KX0seG89Q2UoYW8pLGpvPWZ1bmN0aW9uKG4pe249Y3UobixmdW5jdGlvbihuKXtyZXR1cm4gNTAwPT09dC5zaXplJiZ0LmNsZWFyKCksbn0pO3ZhciB0PW4uY2FjaGU7cmV0dXJuIG59KGZ1bmN0aW9uKG4pe3ZhciB0PVtdO3JldHVybiA0Nj09PW4uY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLG4ucmVwbGFjZSh0bixmdW5jdGlvbihuLHIsZSx1KXtcclxudC5wdXNoKGU/dS5yZXBsYWNlKGhuLFwiJDFcIik6cnx8bil9KSx0fSksd289ZnIoZnVuY3Rpb24obix0KXtyZXR1cm4gaHUobik/eXQobix3dCh0LDEsaHUsdHJ1ZSkpOltdfSksbW89ZnIoZnVuY3Rpb24obix0KXt2YXIgcj1WZSh0KTtyZXR1cm4gaHUocikmJihyPVQpLGh1KG4pP3l0KG4sd3QodCwxLGh1LHRydWUpLHllKHIsMikpOltdfSksQW89ZnIoZnVuY3Rpb24obix0KXt2YXIgcj1WZSh0KTtyZXR1cm4gaHUocikmJihyPVQpLGh1KG4pP3l0KG4sd3QodCwxLGh1LHRydWUpLFQscik6W119KSxrbz1mcihmdW5jdGlvbihuKXt2YXIgdD1jKG4sa3IpO3JldHVybiB0Lmxlbmd0aCYmdFswXT09PW5bMF0/V3QodCk6W119KSxFbz1mcihmdW5jdGlvbihuKXt2YXIgdD1WZShuKSxyPWMobixrcik7cmV0dXJuIHQ9PT1WZShyKT90PVQ6ci5wb3AoKSxyLmxlbmd0aCYmclswXT09PW5bMF0/V3Qocix5ZSh0LDIpKTpbXX0pLFNvPWZyKGZ1bmN0aW9uKG4pe3ZhciB0PVZlKG4pLHI9YyhuLGtyKTtyZXR1cm4odD10eXBlb2YgdD09XCJmdW5jdGlvblwiP3Q6VCkmJnIucG9wKCksXHJcbnIubGVuZ3RoJiZyWzBdPT09blswXT9XdChyLFQsdCk6W119KSxPbz1mcihLZSksSW89cGUoZnVuY3Rpb24obix0KXt2YXIgcj1udWxsPT1uPzA6bi5sZW5ndGgsZT1odChuLHQpO3JldHVybiB1cihuLGModCxmdW5jdGlvbihuKXtyZXR1cm4gU2UobixyKT8rbjpufSkuc29ydChXcikpLGV9KSxSbz1mcihmdW5jdGlvbihuKXtyZXR1cm4gYnIod3QobiwxLGh1LHRydWUpKX0pLHpvPWZyKGZ1bmN0aW9uKG4pe3ZhciB0PVZlKG4pO3JldHVybiBodSh0KSYmKHQ9VCksYnIod3QobiwxLGh1LHRydWUpLHllKHQsMikpfSksV289ZnIoZnVuY3Rpb24obil7dmFyIHQ9VmUobiksdD10eXBlb2YgdD09XCJmdW5jdGlvblwiP3Q6VDtyZXR1cm4gYnIod3QobiwxLGh1LHRydWUpLFQsdCl9KSxVbz1mcihmdW5jdGlvbihuLHQpe3JldHVybiBodShuKT95dChuLHQpOltdfSksQm89ZnIoZnVuY3Rpb24obil7cmV0dXJuIG1yKGkobixodSkpfSksTG89ZnIoZnVuY3Rpb24obil7dmFyIHQ9VmUobik7cmV0dXJuIGh1KHQpJiYodD1UKSxcclxubXIoaShuLGh1KSx5ZSh0LDIpKX0pLENvPWZyKGZ1bmN0aW9uKG4pe3ZhciB0PVZlKG4pLHQ9dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj90OlQ7cmV0dXJuIG1yKGkobixodSksVCx0KX0pLERvPWZyKEhlKSxNbz1mcihmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aCx0PTE8dD9uW3QtMV06VCx0PXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/KG4ucG9wKCksdCk6VDtyZXR1cm4gSmUobix0KX0pLFRvPXBlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLHI9dD9uWzBdOjAsZT10aGlzLl9fd3JhcHBlZF9fLHU9ZnVuY3Rpb24odCl7cmV0dXJuIGh0KHQsbil9O3JldHVybiEoMTx0fHx0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkmJmUgaW5zdGFuY2VvZiBMbiYmU2Uocik/KGU9ZS5zbGljZShyLCtyKyh0PzE6MCkpLGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpRZSxhcmdzOlt1XSx0aGlzQXJnOlR9KSxuZXcgT24oZSx0aGlzLl9fY2hhaW5fXykudGhydShmdW5jdGlvbihuKXtyZXR1cm4gdCYmIW4ubGVuZ3RoJiZuLnB1c2goVCksXHJcbm59KSk6dGhpcy50aHJ1KHUpfSksJG89VHIoZnVuY3Rpb24obix0LHIpe29pLmNhbGwobixyKT8rK25bcl06c3QobixyLDEpfSksRm89R3IoTmUpLE5vPUdyKFBlKSxQbz1UcihmdW5jdGlvbihuLHQscil7b2kuY2FsbChuLHIpP25bcl0ucHVzaCh0KTpzdChuLHIsW3RdKX0pLFpvPWZyKGZ1bmN0aW9uKHQscixlKXt2YXIgdT0tMSxpPXR5cGVvZiByPT1cImZ1bmN0aW9uXCIsbz1zdSh0KT9LdSh0Lmxlbmd0aCk6W107cmV0dXJuIHVvKHQsZnVuY3Rpb24odCl7b1srK3VdPWk/bihyLHQsZSk6QnQodCxyLGUpfSksb30pLHFvPVRyKGZ1bmN0aW9uKG4sdCxyKXtzdChuLHIsdCl9KSxWbz1UcihmdW5jdGlvbihuLHQscil7bltyPzA6MV0ucHVzaCh0KX0sZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSksS289ZnIoZnVuY3Rpb24obix0KXtpZihudWxsPT1uKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiAxPHImJk9lKG4sdFswXSx0WzFdKT90PVtdOjI8ciYmT2UodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLFxyXG5YdChuLHd0KHQsMSksW10pfSksR289RWl8fGZ1bmN0aW9uKCl7cmV0dXJuICRuLkRhdGUubm93KCl9LEhvPWZyKGZ1bmN0aW9uKG4sdCxyKXt2YXIgZT0xO2lmKHIubGVuZ3RoKXZhciB1PUIocixkZShIbykpLGU9MzJ8ZTtyZXR1cm4gZmUobixlLHQscix1KX0pLEpvPWZyKGZ1bmN0aW9uKG4sdCxyKXt2YXIgZT0zO2lmKHIubGVuZ3RoKXZhciB1PUIocixkZShKbykpLGU9MzJ8ZTtyZXR1cm4gZmUodCxlLG4scix1KX0pLFlvPWZyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGR0KG4sMSx0KX0pLFFvPWZyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gZHQobixTdSh0KXx8MCxyKX0pO2N1LkNhY2hlPUZuO3ZhciBYbz1mcihmdW5jdGlvbih0LHIpe3I9MT09ci5sZW5ndGgmJmZmKHJbMF0pP2MoclswXSxFKHllKCkpKTpjKHd0KHIsMSksRSh5ZSgpKSk7dmFyIGU9ci5sZW5ndGg7cmV0dXJuIGZyKGZ1bmN0aW9uKHUpe2Zvcih2YXIgaT0tMSxvPUNpKHUubGVuZ3RoLGUpOysraTxvOyl1W2ldPXJbaV0uY2FsbCh0aGlzLHVbaV0pO1xyXG5yZXR1cm4gbih0LHRoaXMsdSl9KX0pLG5mPWZyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZlKG4sMzIsVCx0LEIodCxkZShuZikpKX0pLHRmPWZyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZlKG4sNjQsVCx0LEIodCxkZSh0ZikpKX0pLHJmPXBlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZlKG4sMjU2LFQsVCxULHQpfSksZWY9ZWUoSXQpLHVmPWVlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4+PXR9KSxvZj1MdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0x0OmZ1bmN0aW9uKG4pe3JldHVybiB5dShuKSYmb2kuY2FsbChuLFwiY2FsbGVlXCIpJiYhYmkuY2FsbChuLFwiY2FsbGVlXCIpfSxmZj1LdS5pc0FycmF5LGNmPVZuP0UoVm4pOkN0LGFmPXppfHxWdSxsZj1Lbj9FKEtuKTpEdCxzZj1Hbj9FKEduKTpUdCxoZj1Ibj9FKEhuKTpOdCxwZj1Kbj9FKEpuKTpQdCxfZj1Zbj9FKFluKTpadCx2Zj1lZShLdCksZ2Y9ZWUoZnVuY3Rpb24obix0KXtyZXR1cm4gbjw9dH0pLGRmPSRyKGZ1bmN0aW9uKG4sdCl7XHJcbmlmKHplKHQpfHxzdSh0KSlDcih0LFd1KHQpLG4pO2Vsc2UgZm9yKHZhciByIGluIHQpb2kuY2FsbCh0LHIpJiZvdChuLHIsdFtyXSl9KSx5Zj0kcihmdW5jdGlvbihuLHQpe0NyKHQsVXUodCksbil9KSxiZj0kcihmdW5jdGlvbihuLHQscixlKXtDcih0LFV1KHQpLG4sZSl9KSx4Zj0kcihmdW5jdGlvbihuLHQscixlKXtDcih0LFd1KHQpLG4sZSl9KSxqZj1wZShodCksd2Y9ZnIoZnVuY3Rpb24obix0KXtuPVF1KG4pO3ZhciByPS0xLGU9dC5sZW5ndGgsdT0yPGU/dFsyXTpUO2Zvcih1JiZPZSh0WzBdLHRbMV0sdSkmJihlPTEpOysrcjxlOylmb3IodmFyIHU9dFtyXSxpPVV1KHUpLG89LTEsZj1pLmxlbmd0aDsrK288Zjspe3ZhciBjPWlbb10sYT1uW2NdOyhhPT09VHx8bHUoYSxlaVtjXSkmJiFvaS5jYWxsKG4sYykpJiYobltjXT11W2NdKX1yZXR1cm4gbn0pLG1mPWZyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2goVCxhZSksbihPZixULHQpfSksQWY9WXIoZnVuY3Rpb24obix0LHIpe1xyXG5udWxsIT10JiZ0eXBlb2YgdC50b1N0cmluZyE9XCJmdW5jdGlvblwiJiYodD1haS5jYWxsKHQpKSxuW3RdPXJ9LFR1KCR1KSksa2Y9WXIoZnVuY3Rpb24obix0LHIpe251bGwhPXQmJnR5cGVvZiB0LnRvU3RyaW5nIT1cImZ1bmN0aW9uXCImJih0PWFpLmNhbGwodCkpLG9pLmNhbGwobix0KT9uW3RdLnB1c2gocik6blt0XT1bcl19LHllKSxFZj1mcihCdCksU2Y9JHIoZnVuY3Rpb24obix0LHIpe1l0KG4sdCxyKX0pLE9mPSRyKGZ1bmN0aW9uKG4sdCxyLGUpe1l0KG4sdCxyLGUpfSksSWY9cGUoZnVuY3Rpb24obix0KXt2YXIgcj17fTtpZihudWxsPT1uKXJldHVybiByO3ZhciBlPWZhbHNlO3Q9Yyh0LGZ1bmN0aW9uKHQpe3JldHVybiB0PVNyKHQsbiksZXx8KGU9MTx0Lmxlbmd0aCksdH0pLENyKG4sdmUobiksciksZSYmKHI9X3Qociw3LGxlKSk7Zm9yKHZhciB1PXQubGVuZ3RoO3UtLTspeHIocix0W3VdKTtyZXR1cm4gcn0pLFJmPXBlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/e306bnIobix0KTtcclxufSksemY9b2UoV3UpLFdmPW9lKFV1KSxVZj1xcihmdW5jdGlvbihuLHQscil7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLG4rKHI/Q3UodCk6dCl9KSxCZj1xcihmdW5jdGlvbihuLHQscil7cmV0dXJuIG4rKHI/XCItXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSksTGY9cXIoZnVuY3Rpb24obix0LHIpe3JldHVybiBuKyhyP1wiIFwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pLENmPVpyKFwidG9Mb3dlckNhc2VcIiksRGY9cXIoZnVuY3Rpb24obix0LHIpe3JldHVybiBuKyhyP1wiX1wiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pLE1mPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbisocj9cIiBcIjpcIlwiKSskZih0KX0pLFRmPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbisocj9cIiBcIjpcIlwiKSt0LnRvVXBwZXJDYXNlKCl9KSwkZj1acihcInRvVXBwZXJDYXNlXCIpLEZmPWZyKGZ1bmN0aW9uKHQscil7dHJ5e3JldHVybiBuKHQsVCxyKX1jYXRjaChuKXtyZXR1cm4gcHUobik/bjpuZXcgSHUobil9fSksTmY9cGUoZnVuY3Rpb24obix0KXtcclxucmV0dXJuIHIodCxmdW5jdGlvbih0KXt0PU1lKHQpLHN0KG4sdCxIbyhuW3RdLG4pKX0pLG59KSxQZj1IcigpLFpmPUhyKHRydWUpLHFmPWZyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBCdChyLG4sdCl9fSksVmY9ZnIoZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIEJ0KG4scix0KX19KSxLZj1YcihjKSxHZj1Ycih1KSxIZj1YcihoKSxKZj1yZSgpLFlmPXJlKHRydWUpLFFmPVFyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdH0sMCksWGY9aWUoXCJjZWlsXCIpLG5jPVFyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4vdH0sMSksdGM9aWUoXCJmbG9vclwiKSxyYz1RcihmdW5jdGlvbihuLHQpe3JldHVybiBuKnR9LDEpLGVjPWllKFwicm91bmRcIiksdWM9UXIoZnVuY3Rpb24obix0KXtyZXR1cm4gbi10fSwwKTtyZXR1cm4gQW4uYWZ0ZXI9ZnVuY3Rpb24obix0KXtpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyB0aShcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7XHJcbnJldHVybiBuPWt1KG4pLGZ1bmN0aW9uKCl7aWYoMT4tLW4pcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQW4uYXJ5PWV1LEFuLmFzc2lnbj1kZixBbi5hc3NpZ25Jbj15ZixBbi5hc3NpZ25JbldpdGg9YmYsQW4uYXNzaWduV2l0aD14ZixBbi5hdD1qZixBbi5iZWZvcmU9dXUsQW4uYmluZD1IbyxBbi5iaW5kQWxsPU5mLEFuLmJpbmRLZXk9Sm8sQW4uY2FzdEFycmF5PWZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBmZihuKT9uOltuXX0sQW4uY2hhaW49WWUsQW4uY2h1bms9ZnVuY3Rpb24obix0LHIpe2lmKHQ9KHI/T2Uobix0LHIpOnQ9PT1UKT8xOkxpKGt1KHQpLDApLHI9bnVsbD09bj8wOm4ubGVuZ3RoLCFyfHwxPnQpcmV0dXJuW107Zm9yKHZhciBlPTAsdT0wLGk9S3UoT2koci90KSk7ZTxyOylpW3UrK109aHIobixlLGUrPXQpO3JldHVybiBpfSxBbi5jb21wYWN0PWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD0tMSxyPW51bGw9PW4/MDpuLmxlbmd0aCxlPTAsdT1bXTsrK3Q8cjspe1xyXG52YXIgaT1uW3RdO2kmJih1W2UrK109aSl9cmV0dXJuIHV9LEFuLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW4pcmV0dXJuW107Zm9yKHZhciB0PUt1KG4tMSkscj1hcmd1bWVudHNbMF07bi0tOyl0W24tMV09YXJndW1lbnRzW25dO3JldHVybiBhKGZmKHIpP0xyKHIpOltyXSx3dCh0LDEpKX0sQW4uY29uZD1mdW5jdGlvbih0KXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGgsZT15ZSgpO3JldHVybiB0PXI/Yyh0LGZ1bmN0aW9uKG4pe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG5bMV0pdGhyb3cgbmV3IHRpKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtyZXR1cm5bZShuWzBdKSxuWzFdXX0pOltdLGZyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdT0tMTsrK3U8cjspe3ZhciBpPXRbdV07aWYobihpWzBdLHRoaXMsZSkpcmV0dXJuIG4oaVsxXSx0aGlzLGUpfX0pfSxBbi5jb25mb3Jtcz1mdW5jdGlvbihuKXtyZXR1cm4gdnQoX3QobiwxKSl9LEFuLmNvbnN0YW50PVR1LFxyXG5Bbi5jb3VudEJ5PSRvLEFuLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3ZhciByPWVvKG4pO3JldHVybiBudWxsPT10P3I6YXQocix0KX0sQW4uY3Vycnk9aXUsQW4uY3VycnlSaWdodD1vdSxBbi5kZWJvdW5jZT1mdSxBbi5kZWZhdWx0cz13ZixBbi5kZWZhdWx0c0RlZXA9bWYsQW4uZGVmZXI9WW8sQW4uZGVsYXk9UW8sQW4uZGlmZmVyZW5jZT13byxBbi5kaWZmZXJlbmNlQnk9bW8sQW4uZGlmZmVyZW5jZVdpdGg9QW8sQW4uZHJvcD1mdW5jdGlvbihuLHQscil7dmFyIGU9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiBlPyh0PXJ8fHQ9PT1UPzE6a3UodCksaHIobiwwPnQ/MDp0LGUpKTpbXX0sQW4uZHJvcFJpZ2h0PWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7cmV0dXJuIGU/KHQ9cnx8dD09PVQ/MTprdSh0KSx0PWUtdCxocihuLDAsMD50PzA6dCkpOltdfSxBbi5kcm9wUmlnaHRXaGlsZT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9qcihuLHllKHQsMyksdHJ1ZSx0cnVlKTpbXTtcclxufSxBbi5kcm9wV2hpbGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbi5sZW5ndGg/anIobix5ZSh0LDMpLHRydWUpOltdfSxBbi5maWxsPWZ1bmN0aW9uKG4sdCxyLGUpe3ZhciB1PW51bGw9PW4/MDpuLmxlbmd0aDtpZighdSlyZXR1cm5bXTtmb3IociYmdHlwZW9mIHIhPVwibnVtYmVyXCImJk9lKG4sdCxyKSYmKHI9MCxlPXUpLHU9bi5sZW5ndGgscj1rdShyKSwwPnImJihyPS1yPnU/MDp1K3IpLGU9ZT09PVR8fGU+dT91Omt1KGUpLDA+ZSYmKGUrPXUpLGU9cj5lPzA6RXUoZSk7cjxlOyluW3IrK109dDtyZXR1cm4gbn0sQW4uZmlsdGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuKGZmKG4pP2k6anQpKG4seWUodCwzKSl9LEFuLmZsYXRNYXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gd3QocnUobix0KSwxKX0sQW4uZmxhdE1hcERlZXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gd3QocnUobix0KSwkKX0sQW4uZmxhdE1hcERlcHRoPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gcj1yPT09VD8xOmt1KHIpLFxyXG53dChydShuLHQpLHIpfSxBbi5mbGF0dGVuPVplLEFuLmZsYXR0ZW5EZWVwPWZ1bmN0aW9uKG4pe3JldHVybihudWxsPT1uPzA6bi5sZW5ndGgpP3d0KG4sJCk6W119LEFuLmZsYXR0ZW5EZXB0aD1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsIT1uJiZuLmxlbmd0aD8odD10PT09VD8xOmt1KHQpLHd0KG4sdCkpOltdfSxBbi5mbGlwPWZ1bmN0aW9uKG4pe3JldHVybiBmZShuLDUxMil9LEFuLmZsb3c9UGYsQW4uZmxvd1JpZ2h0PVpmLEFuLmZyb21QYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQ9LTEscj1udWxsPT1uPzA6bi5sZW5ndGgsZT17fTsrK3Q8cjspe3ZhciB1PW5bdF07ZVt1WzBdXT11WzFdfXJldHVybiBlfSxBbi5mdW5jdGlvbnM9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW4/W106a3QobixXdShuKSl9LEFuLmZ1bmN0aW9uc0luPWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP1tdOmt0KG4sVXUobikpfSxBbi5ncm91cEJ5PVBvLEFuLmluaXRpYWw9ZnVuY3Rpb24obil7XHJcbnJldHVybihudWxsPT1uPzA6bi5sZW5ndGgpP2hyKG4sMCwtMSk6W119LEFuLmludGVyc2VjdGlvbj1rbyxBbi5pbnRlcnNlY3Rpb25CeT1FbyxBbi5pbnRlcnNlY3Rpb25XaXRoPVNvLEFuLmludmVydD1BZixBbi5pbnZlcnRCeT1rZixBbi5pbnZva2VNYXA9Wm8sQW4uaXRlcmF0ZWU9RnUsQW4ua2V5Qnk9cW8sQW4ua2V5cz1XdSxBbi5rZXlzSW49VXUsQW4ubWFwPXJ1LEFuLm1hcEtleXM9ZnVuY3Rpb24obix0KXt2YXIgcj17fTtyZXR1cm4gdD15ZSh0LDMpLG10KG4sZnVuY3Rpb24obixlLHUpe3N0KHIsdChuLGUsdSksbil9KSxyfSxBbi5tYXBWYWx1ZXM9ZnVuY3Rpb24obix0KXt2YXIgcj17fTtyZXR1cm4gdD15ZSh0LDMpLG10KG4sZnVuY3Rpb24obixlLHUpe3N0KHIsZSx0KG4sZSx1KSl9KSxyfSxBbi5tYXRjaGVzPWZ1bmN0aW9uKG4pe3JldHVybiBIdChfdChuLDEpKX0sQW4ubWF0Y2hlc1Byb3BlcnR5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEp0KG4sX3QodCwxKSl9LEFuLm1lbW9pemU9Y3UsXHJcbkFuLm1lcmdlPVNmLEFuLm1lcmdlV2l0aD1PZixBbi5tZXRob2Q9cWYsQW4ubWV0aG9kT2Y9VmYsQW4ubWl4aW49TnUsQW4ubmVnYXRlPWF1LEFuLm50aEFyZz1mdW5jdGlvbihuKXtyZXR1cm4gbj1rdShuKSxmcihmdW5jdGlvbih0KXtyZXR1cm4gUXQodCxuKX0pfSxBbi5vbWl0PUlmLEFuLm9taXRCeT1mdW5jdGlvbihuLHQpe3JldHVybiBCdShuLGF1KHllKHQpKSl9LEFuLm9uY2U9ZnVuY3Rpb24obil7cmV0dXJuIHV1KDIsbil9LEFuLm9yZGVyQnk9ZnVuY3Rpb24obix0LHIsZSl7cmV0dXJuIG51bGw9PW4/W106KGZmKHQpfHwodD1udWxsPT10P1tdOlt0XSkscj1lP1Q6cixmZihyKXx8KHI9bnVsbD09cj9bXTpbcl0pLFh0KG4sdCxyKSl9LEFuLm92ZXI9S2YsQW4ub3ZlckFyZ3M9WG8sQW4ub3ZlckV2ZXJ5PUdmLEFuLm92ZXJTb21lPUhmLEFuLnBhcnRpYWw9bmYsQW4ucGFydGlhbFJpZ2h0PXRmLEFuLnBhcnRpdGlvbj1WbyxBbi5waWNrPVJmLEFuLnBpY2tCeT1CdSxBbi5wcm9wZXJ0eT1adSxcclxuQW4ucHJvcGVydHlPZj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PW4/VDpFdChuLHQpfX0sQW4ucHVsbD1PbyxBbi5wdWxsQWxsPUtlLEFuLnB1bGxBbGxCeT1mdW5jdGlvbihuLHQscil7cmV0dXJuIG4mJm4ubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9lcihuLHQseWUociwyKSk6bn0sQW4ucHVsbEFsbFdpdGg9ZnVuY3Rpb24obix0LHIpe3JldHVybiBuJiZuLmxlbmd0aCYmdCYmdC5sZW5ndGg/ZXIobix0LFQscik6bn0sQW4ucHVsbEF0PUlvLEFuLnJhbmdlPUpmLEFuLnJhbmdlUmlnaHQ9WWYsQW4ucmVhcmc9cmYsQW4ucmVqZWN0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuKGZmKG4pP2k6anQpKG4sYXUoeWUodCwzKSkpfSxBbi5yZW1vdmU9ZnVuY3Rpb24obix0KXt2YXIgcj1bXTtpZighbnx8IW4ubGVuZ3RoKXJldHVybiByO3ZhciBlPS0xLHU9W10saT1uLmxlbmd0aDtmb3IodD15ZSh0LDMpOysrZTxpOyl7dmFyIG89bltlXTt0KG8sZSxuKSYmKHIucHVzaChvKSxcclxudS5wdXNoKGUpKX1yZXR1cm4gdXIobix1KSxyfSxBbi5yZXN0PWZ1bmN0aW9uKG4sdCl7aWYodHlwZW9mIG4hPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgdGkoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO3JldHVybiB0PXQ9PT1UP3Q6a3UodCksZnIobix0KX0sQW4ucmV2ZXJzZT1HZSxBbi5zYW1wbGVTaXplPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gdD0ocj9PZShuLHQscik6dD09PVQpPzE6a3UodCksKGZmKG4pP2V0OmFyKShuLHQpfSxBbi5zZXQ9ZnVuY3Rpb24obix0LHIpe3JldHVybiBudWxsPT1uP246bHIobix0LHIpfSxBbi5zZXRXaXRoPWZ1bmN0aW9uKG4sdCxyLGUpe3JldHVybiBlPXR5cGVvZiBlPT1cImZ1bmN0aW9uXCI/ZTpULG51bGw9PW4/bjpscihuLHQscixlKX0sQW4uc2h1ZmZsZT1mdW5jdGlvbihuKXtyZXR1cm4oZmYobik/dXQ6c3IpKG4pfSxBbi5zbGljZT1mdW5jdGlvbihuLHQscil7dmFyIGU9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiBlPyhyJiZ0eXBlb2YgciE9XCJudW1iZXJcIiYmT2Uobix0LHIpPyh0PTAsXHJcbnI9ZSk6KHQ9bnVsbD09dD8wOmt1KHQpLHI9cj09PVQ/ZTprdShyKSksaHIobix0LHIpKTpbXX0sQW4uc29ydEJ5PUtvLEFuLnNvcnRlZFVuaXE9ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4ubGVuZ3RoP2dyKG4pOltdfSxBbi5zb3J0ZWRVbmlxQnk9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbi5sZW5ndGg/Z3Iobix5ZSh0LDIpKTpbXX0sQW4uc3BsaXQ9ZnVuY3Rpb24obix0LHIpe3JldHVybiByJiZ0eXBlb2YgciE9XCJudW1iZXJcIiYmT2Uobix0LHIpJiYodD1yPVQpLHI9cj09PVQ/NDI5NDk2NzI5NTpyPj4+MCxyPyhuPUl1KG4pKSYmKHR5cGVvZiB0PT1cInN0cmluZ1wifHxudWxsIT10JiYhaGYodCkpJiYodD15cih0KSwhdCYmUm4udGVzdChuKSk/T3IoTShuKSwwLHIpOm4uc3BsaXQodCxyKTpbXX0sQW4uc3ByZWFkPWZ1bmN0aW9uKHQscil7aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgdGkoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO3JldHVybiByPW51bGw9PXI/MDpMaShrdShyKSwwKSxcclxuZnIoZnVuY3Rpb24oZSl7dmFyIHU9ZVtyXTtyZXR1cm4gZT1PcihlLDAsciksdSYmYShlLHUpLG4odCx0aGlzLGUpfSl9LEFuLnRhaWw9ZnVuY3Rpb24obil7dmFyIHQ9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiB0P2hyKG4sMSx0KTpbXX0sQW4udGFrZT1mdW5jdGlvbihuLHQscil7cmV0dXJuIG4mJm4ubGVuZ3RoPyh0PXJ8fHQ9PT1UPzE6a3UodCksaHIobiwwLDA+dD8wOnQpKTpbXX0sQW4udGFrZVJpZ2h0PWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7cmV0dXJuIGU/KHQ9cnx8dD09PVQ/MTprdSh0KSx0PWUtdCxocihuLDA+dD8wOnQsZSkpOltdfSxBbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9qcihuLHllKHQsMyksZmFsc2UsdHJ1ZSk6W119LEFuLnRha2VXaGlsZT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9qcihuLHllKHQsMykpOltdfSxBbi50YXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gdChuKSxcclxubn0sQW4udGhyb3R0bGU9ZnVuY3Rpb24obix0LHIpe3ZhciBlPXRydWUsdT10cnVlO2lmKHR5cGVvZiBuIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IHRpKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtyZXR1cm4gZHUocikmJihlPVwibGVhZGluZ1wiaW4gcj8hIXIubGVhZGluZzplLHU9XCJ0cmFpbGluZ1wiaW4gcj8hIXIudHJhaWxpbmc6dSksZnUobix0LHtsZWFkaW5nOmUsbWF4V2FpdDp0LHRyYWlsaW5nOnV9KX0sQW4udGhydT1RZSxBbi50b0FycmF5PW11LEFuLnRvUGFpcnM9emYsQW4udG9QYWlyc0luPVdmLEFuLnRvUGF0aD1mdW5jdGlvbihuKXtyZXR1cm4gZmYobik/YyhuLE1lKTp3dShuKT9bbl06THIoam8oSXUobikpKX0sQW4udG9QbGFpbk9iamVjdD1PdSxBbi50cmFuc2Zvcm09ZnVuY3Rpb24obix0LGUpe3ZhciB1PWZmKG4pLGk9dXx8YWYobil8fF9mKG4pO2lmKHQ9eWUodCw0KSxudWxsPT1lKXt2YXIgbz1uJiZuLmNvbnN0cnVjdG9yO2U9aT91P25ldyBvOltdOmR1KG4pJiZfdShvKT9lbyhkaShuKSk6e307XHJcbn1yZXR1cm4oaT9yOm10KShuLGZ1bmN0aW9uKG4scix1KXtyZXR1cm4gdChlLG4scix1KX0pLGV9LEFuLnVuYXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBldShuLDEpfSxBbi51bmlvbj1SbyxBbi51bmlvbkJ5PXpvLEFuLnVuaW9uV2l0aD1XbyxBbi51bmlxPWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLmxlbmd0aD9icihuKTpbXX0sQW4udW5pcUJ5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4mJm4ubGVuZ3RoP2JyKG4seWUodCwyKSk6W119LEFuLnVuaXFXaXRoPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj90OlQsbiYmbi5sZW5ndGg/YnIobixULHQpOltdfSxBbi51bnNldD1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1ufHx4cihuLHQpfSxBbi51bnppcD1IZSxBbi51bnppcFdpdGg9SmUsQW4udXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbnVsbCE9biYmKHI9RXIociksbj1scihuLHQscihFdChuLHQpKSx2b2lkIDApKSxufSxBbi51cGRhdGVXaXRoPWZ1bmN0aW9uKG4sdCxyLGUpe1xyXG5yZXR1cm4gZT10eXBlb2YgZT09XCJmdW5jdGlvblwiP2U6VCxudWxsIT1uJiYocj1FcihyKSxuPWxyKG4sdCxyKEV0KG4sdCkpLGUpKSxufSxBbi52YWx1ZXM9THUsQW4udmFsdWVzSW49ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW4/W106UyhuLFV1KG4pKX0sQW4ud2l0aG91dD1VbyxBbi53b3Jkcz1NdSxBbi53cmFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5mKEVyKHQpLG4pfSxBbi54b3I9Qm8sQW4ueG9yQnk9TG8sQW4ueG9yV2l0aD1DbyxBbi56aXA9RG8sQW4uemlwT2JqZWN0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEFyKG58fFtdLHR8fFtdLG90KX0sQW4uemlwT2JqZWN0RGVlcD1mdW5jdGlvbihuLHQpe3JldHVybiBBcihufHxbXSx0fHxbXSxscil9LEFuLnppcFdpdGg9TW8sQW4uZW50cmllcz16ZixBbi5lbnRyaWVzSW49V2YsQW4uZXh0ZW5kPXlmLEFuLmV4dGVuZFdpdGg9YmYsTnUoQW4sQW4pLEFuLmFkZD1RZixBbi5hdHRlbXB0PUZmLEFuLmNhbWVsQ2FzZT1VZixBbi5jYXBpdGFsaXplPUN1LFxyXG5Bbi5jZWlsPVhmLEFuLmNsYW1wPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gcj09PVQmJihyPXQsdD1UKSxyIT09VCYmKHI9U3Uocikscj1yPT09cj9yOjApLHQhPT1UJiYodD1TdSh0KSx0PXQ9PT10P3Q6MCkscHQoU3UobiksdCxyKX0sQW4uY2xvbmU9ZnVuY3Rpb24obil7cmV0dXJuIF90KG4sNCl9LEFuLmNsb25lRGVlcD1mdW5jdGlvbihuKXtyZXR1cm4gX3Qobiw1KX0sQW4uY2xvbmVEZWVwV2l0aD1mdW5jdGlvbihuLHQpe3JldHVybiB0PXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpULF90KG4sNSx0KX0sQW4uY2xvbmVXaXRoPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj90OlQsX3Qobiw0LHQpfSxBbi5jb25mb3Jtc1RvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PXR8fGd0KG4sdCxXdSh0KSl9LEFuLmRlYnVycj1EdSxBbi5kZWZhdWx0VG89ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8biE9PW4/dDpufSxBbi5kaXZpZGU9bmMsQW4uZW5kc1dpdGg9ZnVuY3Rpb24obix0LHIpe1xyXG5uPUl1KG4pLHQ9eXIodCk7dmFyIGU9bi5sZW5ndGgsZT1yPXI9PT1UP2U6cHQoa3UociksMCxlKTtyZXR1cm4gci09dC5sZW5ndGgsMDw9ciYmbi5zbGljZShyLGUpPT10fSxBbi5lcT1sdSxBbi5lc2NhcGU9ZnVuY3Rpb24obil7cmV0dXJuKG49SXUobikpJiZILnRlc3Qobik/bi5yZXBsYWNlKEssbnQpOm59LEFuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihuKXtyZXR1cm4obj1JdShuKSkmJmVuLnRlc3Qobik/bi5yZXBsYWNlKHJuLFwiXFxcXCQmXCIpOm59LEFuLmV2ZXJ5PWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1mZihuKT91OmJ0O3JldHVybiByJiZPZShuLHQscikmJih0PVQpLGUobix5ZSh0LDMpKX0sQW4uZmluZD1GbyxBbi5maW5kSW5kZXg9TmUsQW4uZmluZEtleT1mdW5jdGlvbihuLHQpe3JldHVybiBwKG4seWUodCwzKSxtdCl9LEFuLmZpbmRMYXN0PU5vLEFuLmZpbmRMYXN0SW5kZXg9UGUsQW4uZmluZExhc3RLZXk9ZnVuY3Rpb24obix0KXtyZXR1cm4gcChuLHllKHQsMyksQXQpO1xyXG59LEFuLmZsb29yPXRjLEFuLmZvckVhY2g9bnUsQW4uZm9yRWFjaFJpZ2h0PXR1LEFuLmZvckluPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bjpvbyhuLHllKHQsMyksVXUpfSxBbi5mb3JJblJpZ2h0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bjpmbyhuLHllKHQsMyksVXUpfSxBbi5mb3JPd249ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbXQobix5ZSh0LDMpKX0sQW4uZm9yT3duUmlnaHQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmQXQobix5ZSh0LDMpKX0sQW4uZ2V0PVJ1LEFuLmd0PWVmLEFuLmd0ZT11ZixBbi5oYXM9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbCE9biYmd2Uobix0LFJ0KX0sQW4uaGFzSW49enUsQW4uaGVhZD1xZSxBbi5pZGVudGl0eT0kdSxBbi5pbmNsdWRlcz1mdW5jdGlvbihuLHQscixlKXtyZXR1cm4gbj1zdShuKT9uOkx1KG4pLHI9ciYmIWU/a3Uocik6MCxlPW4ubGVuZ3RoLDA+ciYmKHI9TGkoZStyLDApKSxqdShuKT9yPD1lJiYtMTxuLmluZGV4T2YodCxyKTohIWUmJi0xPHYobix0LHIpO1xyXG59LEFuLmluZGV4T2Y9ZnVuY3Rpb24obix0LHIpe3ZhciBlPW51bGw9PW4/MDpuLmxlbmd0aDtyZXR1cm4gZT8ocj1udWxsPT1yPzA6a3UociksMD5yJiYocj1MaShlK3IsMCkpLHYobix0LHIpKTotMX0sQW4uaW5SYW5nZT1mdW5jdGlvbihuLHQscil7cmV0dXJuIHQ9QXUodCkscj09PVQ/KHI9dCx0PTApOnI9QXUociksbj1TdShuKSxuPj1DaSh0LHIpJiZuPExpKHQscil9LEFuLmludm9rZT1FZixBbi5pc0FyZ3VtZW50cz1vZixBbi5pc0FycmF5PWZmLEFuLmlzQXJyYXlCdWZmZXI9Y2YsQW4uaXNBcnJheUxpa2U9c3UsQW4uaXNBcnJheUxpa2VPYmplY3Q9aHUsQW4uaXNCb29sZWFuPWZ1bmN0aW9uKG4pe3JldHVybiB0cnVlPT09bnx8ZmFsc2U9PT1ufHx5dShuKSYmXCJbb2JqZWN0IEJvb2xlYW5dXCI9PU90KG4pfSxBbi5pc0J1ZmZlcj1hZixBbi5pc0RhdGU9bGYsQW4uaXNFbGVtZW50PWZ1bmN0aW9uKG4pe3JldHVybiB5dShuKSYmMT09PW4ubm9kZVR5cGUmJiF4dShuKX0sQW4uaXNFbXB0eT1mdW5jdGlvbihuKXtcclxuaWYobnVsbD09bilyZXR1cm4gdHJ1ZTtpZihzdShuKSYmKGZmKG4pfHx0eXBlb2Ygbj09XCJzdHJpbmdcInx8dHlwZW9mIG4uc3BsaWNlPT1cImZ1bmN0aW9uXCJ8fGFmKG4pfHxfZihuKXx8b2YobikpKXJldHVybiFuLmxlbmd0aDt2YXIgdD12byhuKTtpZihcIltvYmplY3QgTWFwXVwiPT10fHxcIltvYmplY3QgU2V0XVwiPT10KXJldHVybiFuLnNpemU7aWYoemUobikpcmV0dXJuIVZ0KG4pLmxlbmd0aDtmb3IodmFyIHIgaW4gbilpZihvaS5jYWxsKG4scikpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxBbi5pc0VxdWFsPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE10KG4sdCl9LEFuLmlzRXF1YWxXaXRoPWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT0ocj10eXBlb2Ygcj09XCJmdW5jdGlvblwiP3I6VCk/cihuLHQpOlQ7cmV0dXJuIGU9PT1UP010KG4sdCxULHIpOiEhZX0sQW4uaXNFcnJvcj1wdSxBbi5pc0Zpbml0ZT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PVwibnVtYmVyXCImJldpKG4pfSxBbi5pc0Z1bmN0aW9uPV91LFxyXG5Bbi5pc0ludGVnZXI9dnUsQW4uaXNMZW5ndGg9Z3UsQW4uaXNNYXA9c2YsQW4uaXNNYXRjaD1mdW5jdGlvbihuLHQpe3JldHVybiBuPT09dHx8JHQobix0LHhlKHQpKX0sQW4uaXNNYXRjaFdpdGg9ZnVuY3Rpb24obix0LHIpe3JldHVybiByPXR5cGVvZiByPT1cImZ1bmN0aW9uXCI/cjpULCR0KG4sdCx4ZSh0KSxyKX0sQW4uaXNOYU49ZnVuY3Rpb24obil7cmV0dXJuIGJ1KG4pJiZuIT0rbn0sQW4uaXNOYXRpdmU9ZnVuY3Rpb24obil7aWYoZ28obikpdGhyb3cgbmV3IEh1KFwiVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuXCIpO3JldHVybiBGdChuKX0sQW4uaXNOaWw9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW59LEFuLmlzTnVsbD1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09PW59LEFuLmlzTnVtYmVyPWJ1LEFuLmlzT2JqZWN0PWR1LEFuLmlzT2JqZWN0TGlrZT15dSxBbi5pc1BsYWluT2JqZWN0PXh1LEFuLmlzUmVnRXhwPWhmLFxyXG5Bbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKG4pe3JldHVybiB2dShuKSYmLTkwMDcxOTkyNTQ3NDA5OTE8PW4mJjkwMDcxOTkyNTQ3NDA5OTE+PW59LEFuLmlzU2V0PXBmLEFuLmlzU3RyaW5nPWp1LEFuLmlzU3ltYm9sPXd1LEFuLmlzVHlwZWRBcnJheT1fZixBbi5pc1VuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PVR9LEFuLmlzV2Vha01hcD1mdW5jdGlvbihuKXtyZXR1cm4geXUobikmJlwiW29iamVjdCBXZWFrTWFwXVwiPT12byhuKX0sQW4uaXNXZWFrU2V0PWZ1bmN0aW9uKG4pe3JldHVybiB5dShuKSYmXCJbb2JqZWN0IFdlYWtTZXRdXCI9PU90KG4pfSxBbi5qb2luPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/XCJcIjpVaS5jYWxsKG4sdCl9LEFuLmtlYmFiQ2FzZT1CZixBbi5sYXN0PVZlLEFuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7aWYoIWUpcmV0dXJuLTE7dmFyIHU9ZTtpZihyIT09VCYmKHU9a3UociksdT0wPnU/TGkoZSt1LDApOkNpKHUsZS0xKSksXHJcbnQ9PT10KW46e2ZvcihyPXUrMTtyLS07KWlmKG5bcl09PT10KXtuPXI7YnJlYWsgbn1uPXJ9ZWxzZSBuPV8obixkLHUsdHJ1ZSk7cmV0dXJuIG59LEFuLmxvd2VyQ2FzZT1MZixBbi5sb3dlckZpcnN0PUNmLEFuLmx0PXZmLEFuLmx0ZT1nZixBbi5tYXg9ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4ubGVuZ3RoP3h0KG4sJHUsSXQpOlR9LEFuLm1heEJ5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4mJm4ubGVuZ3RoP3h0KG4seWUodCwyKSxJdCk6VH0sQW4ubWVhbj1mdW5jdGlvbihuKXtyZXR1cm4geShuLCR1KX0sQW4ubWVhbkJ5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHkobix5ZSh0LDIpKX0sQW4ubWluPWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLmxlbmd0aD94dChuLCR1LEt0KTpUfSxBbi5taW5CeT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD94dChuLHllKHQsMiksS3QpOlR9LEFuLnN0dWJBcnJheT1xdSxBbi5zdHViRmFsc2U9VnUsQW4uc3R1Yk9iamVjdD1mdW5jdGlvbigpe1xyXG5yZXR1cm57fX0sQW4uc3R1YlN0cmluZz1mdW5jdGlvbigpe3JldHVyblwiXCJ9LEFuLnN0dWJUcnVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRydWV9LEFuLm11bHRpcGx5PXJjLEFuLm50aD1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9RdChuLGt1KHQpKTpUfSxBbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICRuLl89PT10aGlzJiYoJG4uXz1zaSksdGhpc30sQW4ubm9vcD1QdSxBbi5ub3c9R28sQW4ucGFkPWZ1bmN0aW9uKG4sdCxyKXtuPUl1KG4pO3ZhciBlPSh0PWt1KHQpKT9EKG4pOjA7cmV0dXJuIXR8fGU+PXQ/bjoodD0odC1lKS8yLG5lKElpKHQpLHIpK24rbmUoT2kodCkscikpfSxBbi5wYWRFbmQ9ZnVuY3Rpb24obix0LHIpe249SXUobik7dmFyIGU9KHQ9a3UodCkpP0Qobik6MDtyZXR1cm4gdCYmZTx0P24rbmUodC1lLHIpOm59LEFuLnBhZFN0YXJ0PWZ1bmN0aW9uKG4sdCxyKXtuPUl1KG4pO3ZhciBlPSh0PWt1KHQpKT9EKG4pOjA7cmV0dXJuIHQmJmU8dD9uZSh0LWUscikrbjpuO1xyXG59LEFuLnBhcnNlSW50PWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gcnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLE1pKEl1KG4pLnJlcGxhY2Uob24sXCJcIiksdHx8MCl9LEFuLnJhbmRvbT1mdW5jdGlvbihuLHQscil7aWYociYmdHlwZW9mIHIhPVwiYm9vbGVhblwiJiZPZShuLHQscikmJih0PXI9VCkscj09PVQmJih0eXBlb2YgdD09XCJib29sZWFuXCI/KHI9dCx0PVQpOnR5cGVvZiBuPT1cImJvb2xlYW5cIiYmKHI9bixuPVQpKSxuPT09VCYmdD09PVQ/KG49MCx0PTEpOihuPUF1KG4pLHQ9PT1UPyh0PW4sbj0wKTp0PUF1KHQpKSxuPnQpe3ZhciBlPW47bj10LHQ9ZX1yZXR1cm4gcnx8biUxfHx0JTE/KHI9VGkoKSxDaShuK3IqKHQtbitDbihcIjFlLVwiKygocitcIlwiKS5sZW5ndGgtMSkpKSx0KSk6aXIobix0KX0sQW4ucmVkdWNlPWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1mZihuKT9sOmosdT0zPmFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGUobix5ZSh0LDQpLHIsdSx1byl9LEFuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKG4sdCxyKXtcclxudmFyIGU9ZmYobik/czpqLHU9Mz5hcmd1bWVudHMubGVuZ3RoO3JldHVybiBlKG4seWUodCw0KSxyLHUsaW8pfSxBbi5yZXBlYXQ9ZnVuY3Rpb24obix0LHIpe3JldHVybiB0PShyP09lKG4sdCxyKTp0PT09VCk/MTprdSh0KSxvcihJdShuKSx0KX0sQW4ucmVwbGFjZT1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyx0PUl1KG5bMF0pO3JldHVybiAzPm4ubGVuZ3RoP3Q6dC5yZXBsYWNlKG5bMV0sblsyXSl9LEFuLnJlc3VsdD1mdW5jdGlvbihuLHQscil7dD1Tcih0LG4pO3ZhciBlPS0xLHU9dC5sZW5ndGg7Zm9yKHV8fCh1PTEsbj1UKTsrK2U8dTspe3ZhciBpPW51bGw9PW4/VDpuW01lKHRbZV0pXTtpPT09VCYmKGU9dSxpPXIpLG49X3UoaSk/aS5jYWxsKG4pOml9cmV0dXJuIG59LEFuLnJvdW5kPWVjLEFuLnJ1bkluQ29udGV4dD14LEFuLnNhbXBsZT1mdW5jdGlvbihuKXtyZXR1cm4oZmYobik/UW46Y3IpKG4pfSxBbi5zaXplPWZ1bmN0aW9uKG4pe2lmKG51bGw9PW4pcmV0dXJuIDA7XHJcbmlmKHN1KG4pKXJldHVybiBqdShuKT9EKG4pOm4ubGVuZ3RoO3ZhciB0PXZvKG4pO3JldHVyblwiW29iamVjdCBNYXBdXCI9PXR8fFwiW29iamVjdCBTZXRdXCI9PXQ/bi5zaXplOlZ0KG4pLmxlbmd0aH0sQW4uc25ha2VDYXNlPURmLEFuLnNvbWU9ZnVuY3Rpb24obix0LHIpe3ZhciBlPWZmKG4pP2g6cHI7cmV0dXJuIHImJk9lKG4sdCxyKSYmKHQ9VCksZShuLHllKHQsMykpfSxBbi5zb3J0ZWRJbmRleD1mdW5jdGlvbihuLHQpe3JldHVybiBfcihuLHQpfSxBbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gdnIobix0LHllKHIsMikpfSxBbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uKG4sdCl7dmFyIHI9bnVsbD09bj8wOm4ubGVuZ3RoO2lmKHIpe3ZhciBlPV9yKG4sdCk7aWYoZTxyJiZsdShuW2VdLHQpKXJldHVybiBlfXJldHVybi0xfSxBbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gX3Iobix0LHRydWUpfSxBbi5zb3J0ZWRMYXN0SW5kZXhCeT1mdW5jdGlvbihuLHQscil7XHJcbnJldHVybiB2cihuLHQseWUociwyKSx0cnVlKX0sQW4uc29ydGVkTGFzdEluZGV4T2Y9ZnVuY3Rpb24obix0KXtpZihudWxsPT1uPzA6bi5sZW5ndGgpe3ZhciByPV9yKG4sdCx0cnVlKS0xO2lmKGx1KG5bcl0sdCkpcmV0dXJuIHJ9cmV0dXJuLTF9LEFuLnN0YXJ0Q2FzZT1NZixBbi5zdGFydHNXaXRoPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbj1JdShuKSxyPW51bGw9PXI/MDpwdChrdShyKSwwLG4ubGVuZ3RoKSx0PXlyKHQpLG4uc2xpY2UocixyK3QubGVuZ3RoKT09dH0sQW4uc3VidHJhY3Q9dWMsQW4uc3VtPWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLmxlbmd0aD9tKG4sJHUpOjB9LEFuLnN1bUJ5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4mJm4ubGVuZ3RoP20obix5ZSh0LDIpKTowfSxBbi50ZW1wbGF0ZT1mdW5jdGlvbihuLHQscil7dmFyIGU9QW4udGVtcGxhdGVTZXR0aW5ncztyJiZPZShuLHQscikmJih0PVQpLG49SXUobiksdD1iZih7fSx0LGUsY2UpLHI9YmYoe30sdC5pbXBvcnRzLGUuaW1wb3J0cyxjZSk7XHJcbnZhciB1LGksbz1XdShyKSxmPVMocixvKSxjPTA7cj10LmludGVycG9sYXRlfHxqbjt2YXIgYT1cIl9fcCs9J1wiO3I9WHUoKHQuZXNjYXBlfHxqbikuc291cmNlK1wifFwiK3Iuc291cmNlK1wifFwiKyhyPT09UT9wbjpqbikuc291cmNlK1wifFwiKyh0LmV2YWx1YXRlfHxqbikuc291cmNlK1wifCRcIixcImdcIik7dmFyIGw9XCJzb3VyY2VVUkxcImluIHQ/XCIvLyMgc291cmNlVVJMPVwiK3Quc291cmNlVVJMK1wiXFxuXCI6XCJcIjtpZihuLnJlcGxhY2UocixmdW5jdGlvbih0LHIsZSxvLGYsbCl7cmV0dXJuIGV8fChlPW8pLGErPW4uc2xpY2UoYyxsKS5yZXBsYWNlKHduLHopLHImJih1PXRydWUsYSs9XCInK19fZShcIityK1wiKSsnXCIpLGYmJihpPXRydWUsYSs9XCInO1wiK2YrXCI7XFxuX19wKz0nXCIpLGUmJihhKz1cIicrKChfX3Q9KFwiK2UrXCIpKT09bnVsbD8nJzpfX3QpKydcIiksYz1sK3QubGVuZ3RoLHR9KSxhKz1cIic7XCIsKHQ9dC52YXJpYWJsZSl8fChhPVwid2l0aChvYmope1wiK2ErXCJ9XCIpLGE9KGk/YS5yZXBsYWNlKFAsXCJcIik6YSkucmVwbGFjZShaLFwiJDFcIikucmVwbGFjZShxLFwiJDE7XCIpLFxyXG5hPVwiZnVuY3Rpb24oXCIrKHR8fFwib2JqXCIpK1wiKXtcIisodD9cIlwiOlwib2JqfHwob2JqPXt9KTtcIikrXCJ2YXIgX190LF9fcD0nJ1wiKyh1P1wiLF9fZT1fLmVzY2FwZVwiOlwiXCIpKyhpP1wiLF9faj1BcnJheS5wcm90b3R5cGUuam9pbjtmdW5jdGlvbiBwcmludCgpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKX1cIjpcIjtcIikrYStcInJldHVybiBfX3B9XCIsdD1GZihmdW5jdGlvbigpe3JldHVybiBKdShvLGwrXCJyZXR1cm4gXCIrYSkuYXBwbHkoVCxmKX0pLHQuc291cmNlPWEscHUodCkpdGhyb3cgdDtyZXR1cm4gdH0sQW4udGltZXM9ZnVuY3Rpb24obix0KXtpZihuPWt1KG4pLDE+bnx8OTAwNzE5OTI1NDc0MDk5MTxuKXJldHVybltdO3ZhciByPTQyOTQ5NjcyOTUsZT1DaShuLDQyOTQ5NjcyOTUpO2Zvcih0PXllKHQpLG4tPTQyOTQ5NjcyOTUsZT1BKGUsdCk7KytyPG47KXQocik7cmV0dXJuIGV9LEFuLnRvRmluaXRlPUF1LEFuLnRvSW50ZWdlcj1rdSxBbi50b0xlbmd0aD1FdSxBbi50b0xvd2VyPWZ1bmN0aW9uKG4pe1xyXG5yZXR1cm4gSXUobikudG9Mb3dlckNhc2UoKX0sQW4udG9OdW1iZXI9U3UsQW4udG9TYWZlSW50ZWdlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj9wdChrdShuKSwtOTAwNzE5OTI1NDc0MDk5MSw5MDA3MTk5MjU0NzQwOTkxKTowPT09bj9uOjB9LEFuLnRvU3RyaW5nPUl1LEFuLnRvVXBwZXI9ZnVuY3Rpb24obil7cmV0dXJuIEl1KG4pLnRvVXBwZXJDYXNlKCl9LEFuLnRyaW09ZnVuY3Rpb24obix0LHIpe3JldHVybihuPUl1KG4pKSYmKHJ8fHQ9PT1UKT9uLnJlcGxhY2UodW4sXCJcIik6biYmKHQ9eXIodCkpPyhuPU0obikscj1NKHQpLHQ9SShuLHIpLHI9UihuLHIpKzEsT3Iobix0LHIpLmpvaW4oXCJcIikpOm59LEFuLnRyaW1FbmQ9ZnVuY3Rpb24obix0LHIpe3JldHVybihuPUl1KG4pKSYmKHJ8fHQ9PT1UKT9uLnJlcGxhY2UoZm4sXCJcIik6biYmKHQ9eXIodCkpPyhuPU0obiksdD1SKG4sTSh0KSkrMSxPcihuLDAsdCkuam9pbihcIlwiKSk6bn0sQW4udHJpbVN0YXJ0PWZ1bmN0aW9uKG4sdCxyKXtcclxucmV0dXJuKG49SXUobikpJiYocnx8dD09PVQpP24ucmVwbGFjZShvbixcIlwiKTpuJiYodD15cih0KSk/KG49TShuKSx0PUkobixNKHQpKSxPcihuLHQpLmpvaW4oXCJcIikpOm59LEFuLnRydW5jYXRlPWZ1bmN0aW9uKG4sdCl7dmFyIHI9MzAsZT1cIi4uLlwiO2lmKGR1KHQpKXZhciB1PVwic2VwYXJhdG9yXCJpbiB0P3Quc2VwYXJhdG9yOnUscj1cImxlbmd0aFwiaW4gdD9rdSh0Lmxlbmd0aCk6cixlPVwib21pc3Npb25cImluIHQ/eXIodC5vbWlzc2lvbik6ZTtuPUl1KG4pO3ZhciBpPW4ubGVuZ3RoO2lmKFJuLnRlc3QobikpdmFyIG89TShuKSxpPW8ubGVuZ3RoO2lmKHI+PWkpcmV0dXJuIG47aWYoaT1yLUQoZSksMT5pKXJldHVybiBlO2lmKHI9bz9PcihvLDAsaSkuam9pbihcIlwiKTpuLnNsaWNlKDAsaSksdT09PVQpcmV0dXJuIHIrZTtpZihvJiYoaSs9ci5sZW5ndGgtaSksaGYodSkpe2lmKG4uc2xpY2UoaSkuc2VhcmNoKHUpKXt2YXIgZj1yO2Zvcih1Lmdsb2JhbHx8KHU9WHUodS5zb3VyY2UsSXUoX24uZXhlYyh1KSkrXCJnXCIpKSxcclxudS5sYXN0SW5kZXg9MDtvPXUuZXhlYyhmKTspdmFyIGM9by5pbmRleDtyPXIuc2xpY2UoMCxjPT09VD9pOmMpfX1lbHNlIG4uaW5kZXhPZih5cih1KSxpKSE9aSYmKHU9ci5sYXN0SW5kZXhPZih1KSwtMTx1JiYocj1yLnNsaWNlKDAsdSkpKTtyZXR1cm4gcitlfSxBbi51bmVzY2FwZT1mdW5jdGlvbihuKXtyZXR1cm4obj1JdShuKSkmJkcudGVzdChuKT9uLnJlcGxhY2UoVix0dCk6bn0sQW4udW5pcXVlSWQ9ZnVuY3Rpb24obil7dmFyIHQ9KytmaTtyZXR1cm4gSXUobikrdH0sQW4udXBwZXJDYXNlPVRmLEFuLnVwcGVyRmlyc3Q9JGYsQW4uZWFjaD1udSxBbi5lYWNoUmlnaHQ9dHUsQW4uZmlyc3Q9cWUsTnUoQW4sZnVuY3Rpb24oKXt2YXIgbj17fTtyZXR1cm4gbXQoQW4sZnVuY3Rpb24odCxyKXtvaS5jYWxsKEFuLnByb3RvdHlwZSxyKXx8KG5bcl09dCl9KSxufSgpLHtjaGFpbjpmYWxzZX0pLEFuLlZFUlNJT049XCI0LjE3LjExXCIscihcImJpbmQgYmluZEtleSBjdXJyeSBjdXJyeVJpZ2h0IHBhcnRpYWwgcGFydGlhbFJpZ2h0XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKG4pe1xyXG5BbltuXS5wbGFjZWhvbGRlcj1Bbn0pLHIoW1wiZHJvcFwiLFwidGFrZVwiXSxmdW5jdGlvbihuLHQpe0xuLnByb3RvdHlwZVtuXT1mdW5jdGlvbihyKXtyPXI9PT1UPzE6TGkoa3UociksMCk7dmFyIGU9dGhpcy5fX2ZpbHRlcmVkX18mJiF0P25ldyBMbih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIGUuX19maWx0ZXJlZF9fP2UuX190YWtlQ291bnRfXz1DaShyLGUuX190YWtlQ291bnRfXyk6ZS5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpDaShyLDQyOTQ5NjcyOTUpLHR5cGU6bisoMD5lLl9fZGlyX18/XCJSaWdodFwiOlwiXCIpfSksZX0sTG4ucHJvdG90eXBlW24rXCJSaWdodFwiXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbbl0odCkucmV2ZXJzZSgpfX0pLHIoW1wiZmlsdGVyXCIsXCJtYXBcIixcInRha2VXaGlsZVwiXSxmdW5jdGlvbihuLHQpe3ZhciByPXQrMSxlPTE9PXJ8fDM9PXI7TG4ucHJvdG90eXBlW25dPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5fX2l0ZXJhdGVlc19fLnB1c2goe1xyXG5pdGVyYXRlZTp5ZShuLDMpLHR5cGU6cn0pLHQuX19maWx0ZXJlZF9fPXQuX19maWx0ZXJlZF9ffHxlLHR9fSkscihbXCJoZWFkXCIsXCJsYXN0XCJdLGZ1bmN0aW9uKG4sdCl7dmFyIHI9XCJ0YWtlXCIrKHQ/XCJSaWdodFwiOlwiXCIpO0xuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKDEpLnZhbHVlKClbMF19fSkscihbXCJpbml0aWFsXCIsXCJ0YWlsXCJdLGZ1bmN0aW9uKG4sdCl7dmFyIHI9XCJkcm9wXCIrKHQ/XCJcIjpcIlJpZ2h0XCIpO0xuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgTG4odGhpcyk6dGhpc1tyXSgxKX19KSxMbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcigkdSl9LExuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmZpbHRlcihuKS5oZWFkKCl9LExuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChuKTtcclxufSxMbi5wcm90b3R5cGUuaW52b2tlTWFwPWZyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHR5cGVvZiBuPT1cImZ1bmN0aW9uXCI/bmV3IExuKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBCdChyLG4sdCl9KX0pLExuLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZmlsdGVyKGF1KHllKG4pKSl9LExuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihuLHQpe249a3Uobik7dmFyIHI9dGhpcztyZXR1cm4gci5fX2ZpbHRlcmVkX18mJigwPG58fDA+dCk/bmV3IExuKHIpOigwPm4/cj1yLnRha2VSaWdodCgtbik6biYmKHI9ci5kcm9wKG4pKSx0IT09VCYmKHQ9a3UodCkscj0wPnQ/ci5kcm9wUmlnaHQoLXQpOnIudGFrZSh0LW4pKSxyKX0sTG4ucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobikucmV2ZXJzZSgpfSxMbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UoNDI5NDk2NzI5NSk7XHJcbn0sbXQoTG4ucHJvdG90eXBlLGZ1bmN0aW9uKG4sdCl7dmFyIHI9L14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QodCksZT0vXig/OmhlYWR8bGFzdCkkLy50ZXN0KHQpLHU9QW5bZT9cInRha2VcIisoXCJsYXN0XCI9PXQ/XCJSaWdodFwiOlwiXCIpOnRdLGk9ZXx8L15maW5kLy50ZXN0KHQpO3UmJihBbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fd3JhcHBlZF9fLG89ZT9bMV06YXJndW1lbnRzLGY9dCBpbnN0YW5jZW9mIExuLGM9b1swXSxsPWZ8fGZmKHQpLHM9ZnVuY3Rpb24obil7cmV0dXJuIG49dS5hcHBseShBbixhKFtuXSxvKSksZSYmaD9uWzBdOm59O2wmJnImJnR5cGVvZiBjPT1cImZ1bmN0aW9uXCImJjEhPWMubGVuZ3RoJiYoZj1sPWZhbHNlKTt2YXIgaD10aGlzLl9fY2hhaW5fXyxwPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsYz1pJiYhaCxmPWYmJiFwO3JldHVybiFpJiZsPyh0PWY/dDpuZXcgTG4odGhpcyksdD1uLmFwcGx5KHQsbyksdC5fX2FjdGlvbnNfXy5wdXNoKHtcclxuZnVuYzpRZSxhcmdzOltzXSx0aGlzQXJnOlR9KSxuZXcgT24odCxoKSk6YyYmZj9uLmFwcGx5KHRoaXMsbyk6KHQ9dGhpcy50aHJ1KHMpLGM/ZT90LnZhbHVlKClbMF06dC52YWx1ZSgpOnQpfSl9KSxyKFwicG9wIHB1c2ggc2hpZnQgc29ydCBzcGxpY2UgdW5zaGlmdFwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihuKXt2YXIgdD1yaVtuXSxyPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChuKT9cInRhcFwiOlwidGhydVwiLGU9L14oPzpwb3B8c2hpZnQpJC8udGVzdChuKTtBbi5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHM7aWYoZSYmIXRoaXMuX19jaGFpbl9fKXt2YXIgdT10aGlzLnZhbHVlKCk7cmV0dXJuIHQuYXBwbHkoZmYodSk/dTpbXSxuKX1yZXR1cm4gdGhpc1tyXShmdW5jdGlvbihyKXtyZXR1cm4gdC5hcHBseShmZihyKT9yOltdLG4pfSl9fSksbXQoTG4ucHJvdG90eXBlLGZ1bmN0aW9uKG4sdCl7dmFyIHI9QW5bdF07aWYocil7dmFyIGU9ci5uYW1lK1wiXCI7XHJcbihHaVtlXXx8KEdpW2VdPVtdKSkucHVzaCh7bmFtZTp0LGZ1bmM6cn0pfX0pLEdpW0pyKFQsMikubmFtZV09W3tuYW1lOlwid3JhcHBlclwiLGZ1bmM6VH1dLExuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBuPW5ldyBMbih0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4gbi5fX2FjdGlvbnNfXz1Mcih0aGlzLl9fYWN0aW9uc19fKSxuLl9fZGlyX189dGhpcy5fX2Rpcl9fLG4uX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fLG4uX19pdGVyYXRlZXNfXz1Mcih0aGlzLl9faXRlcmF0ZWVzX18pLG4uX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X18sbi5fX3ZpZXdzX189THIodGhpcy5fX3ZpZXdzX18pLG59LExuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fX2ZpbHRlcmVkX18pe3ZhciBuPW5ldyBMbih0aGlzKTtuLl9fZGlyX189LTEsbi5fX2ZpbHRlcmVkX189dHJ1ZX1lbHNlIG49dGhpcy5jbG9uZSgpLG4uX19kaXJfXyo9LTE7cmV0dXJuIG47XHJcbn0sTG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIG4sdD10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCkscj10aGlzLl9fZGlyX18sZT1mZih0KSx1PTA+cixpPWU/dC5sZW5ndGg6MDtuPTA7Zm9yKHZhciBvPWksZj10aGlzLl9fdmlld3NfXyxjPS0xLGE9Zi5sZW5ndGg7KytjPGE7KXt2YXIgbD1mW2NdLHM9bC5zaXplO3N3aXRjaChsLnR5cGUpe2Nhc2VcImRyb3BcIjpuKz1zO2JyZWFrO2Nhc2VcImRyb3BSaWdodFwiOm8tPXM7YnJlYWs7Y2FzZVwidGFrZVwiOm89Q2kobyxuK3MpO2JyZWFrO2Nhc2VcInRha2VSaWdodFwiOm49TGkobixvLXMpfX1pZihuPXtzdGFydDpuLGVuZDpvfSxvPW4uc3RhcnQsZj1uLmVuZCxuPWYtbyxvPXU/ZjpvLTEsZj10aGlzLl9faXRlcmF0ZWVzX18sYz1mLmxlbmd0aCxhPTAsbD1DaShuLHRoaXMuX190YWtlQ291bnRfXyksIWV8fCF1JiZpPT1uJiZsPT1uKXJldHVybiB3cih0LHRoaXMuX19hY3Rpb25zX18pO2U9W107bjpmb3IoO24tLSYmYTxsOyl7Zm9yKG8rPXIsXHJcbnU9LTEsaT10W29dOysrdTxjOyl7dmFyIGg9Zlt1XSxzPWgudHlwZSxoPSgwLGguaXRlcmF0ZWUpKGkpO2lmKDI9PXMpaT1oO2Vsc2UgaWYoIWgpe2lmKDE9PXMpY29udGludWUgbjticmVhayBufX1lW2ErK109aX1yZXR1cm4gZX0sQW4ucHJvdG90eXBlLmF0PVRvLEFuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiBZZSh0aGlzKX0sQW4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgT24odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sQW4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1UJiYodGhpcy5fX3ZhbHVlc19fPW11KHRoaXMudmFsdWUoKSkpO3ZhciBuPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOm4sdmFsdWU6bj9UOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LEFuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihuKXtmb3IodmFyIHQscj10aGlzO3IgaW5zdGFuY2VvZiBrbjspe1xyXG52YXIgZT1GZShyKTtlLl9faW5kZXhfXz0wLGUuX192YWx1ZXNfXz1ULHQ/dS5fX3dyYXBwZWRfXz1lOnQ9ZTt2YXIgdT1lLHI9ci5fX3dyYXBwZWRfX31yZXR1cm4gdS5fX3dyYXBwZWRfXz1uLHR9LEFuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX3dyYXBwZWRfXztyZXR1cm4gbiBpbnN0YW5jZW9mIExuPyh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKG49bmV3IExuKHRoaXMpKSxuPW4ucmV2ZXJzZSgpLG4uX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpRZSxhcmdzOltHZV0sdGhpc0FyZzpUfSksbmV3IE9uKG4sdGhpcy5fX2NoYWluX18pKTp0aGlzLnRocnUoR2UpfSxBbi5wcm90b3R5cGUudG9KU09OPUFuLnByb3RvdHlwZS52YWx1ZU9mPUFuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB3cih0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxBbi5wcm90b3R5cGUuZmlyc3Q9QW4ucHJvdG90eXBlLmhlYWQsd2kmJihBbi5wcm90b3R5cGVbd2ldPVhlKSxcclxuQW59KCk7dHlwZW9mIGRlZmluZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgZGVmaW5lLmFtZD09XCJvYmplY3RcIiYmZGVmaW5lLmFtZD8oJG4uXz1ydCwgZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSkpOk5uPygoTm4uZXhwb3J0cz1ydCkuXz1ydCxGbi5fPXJ0KTokbi5fPXJ0fSkuY2FsbCh0aGlzKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///23\n");
- /***/ }),
- /* 24 */
- /*!***********************************!*\
- !*** (webpack)/buildin/module.js ***!
- \***********************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///24\n");
- /***/ }),
- /* 25 */
- /*!******************************************************!*\
- !*** E:/sheverAPP/APP/utils/Http/dispatchRequest.js ***!
- \******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _default = function _default(config) {\n if (config.baseUrl && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseUrl, config.url);\n }\n\n return new Promise(function (resolve, reject) {\n config = Object.assign(config, {\n success: function success(res) {\n if (res.statusCode === 200) {\n resolve(res);\n } else {\n reject(res);\n }\n },\n fail: function fail(res) {\n reject(res);\n } });\n\n uni.request(config);\n });\n};exports.default = _default;\n\nvar combineURLs = function combineURLs(baseUrl, relativeUrl) {\n return relativeUrl ?\n baseUrl.replace(/\\/+$/, '') + '/' + relativeUrl.replace(/^\\/+/, '') :\n baseUrl;\n};\n\nvar isAbsoluteURL = function isAbsoluteURL(url) {\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdXRpbHMvSHR0cC9kaXNwYXRjaFJlcXVlc3QuanMiXSwibmFtZXMiOlsiY29uZmlnIiwiYmFzZVVybCIsImlzQWJzb2x1dGVVUkwiLCJ1cmwiLCJjb21iaW5lVVJMcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiT2JqZWN0IiwiYXNzaWduIiwic3VjY2VzcyIsInJlcyIsInN0YXR1c0NvZGUiLCJmYWlsIiwidW5pIiwicmVxdWVzdCIsInJlbGF0aXZlVXJsIiwicmVwbGFjZSIsInRlc3QiXSwibWFwcGluZ3MiOiJpSkFBZSxrQkFBQ0EsTUFBRCxFQUFZO0FBQzFCLE1BQUlBLE1BQU0sQ0FBQ0MsT0FBUCxJQUFrQixDQUFDQyxhQUFhLENBQUNGLE1BQU0sQ0FBQ0csR0FBUixDQUFwQyxFQUFrRDtBQUNqREgsVUFBTSxDQUFDRyxHQUFQLEdBQWFDLFdBQVcsQ0FBQ0osTUFBTSxDQUFDQyxPQUFSLEVBQWlCRCxNQUFNLENBQUNHLEdBQXhCLENBQXhCO0FBQ0E7O0FBRUQsU0FBTyxJQUFJRSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ3ZDUCxVQUFNLEdBQUdRLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjVCxNQUFkLEVBQXNCO0FBQzlCVSxhQUFPLEVBQUUsaUJBQUFDLEdBQUcsRUFBSTtBQUNmLFlBQUlBLEdBQUcsQ0FBQ0MsVUFBSixLQUFtQixHQUF2QixFQUE0QjtBQUMzQk4saUJBQU8sQ0FBQ0ssR0FBRCxDQUFQO0FBQ0EsU0FGRCxNQUVPO0FBQ05KLGdCQUFNLENBQUNJLEdBQUQsQ0FBTjtBQUNBO0FBQ0QsT0FQNkI7QUFROUJFLFVBQUksRUFBRSxjQUFBRixHQUFHLEVBQUk7QUFDWkosY0FBTSxDQUFDSSxHQUFELENBQU47QUFDQSxPQVY2QixFQUF0QixDQUFUOztBQVlBRyxPQUFHLENBQUNDLE9BQUosQ0FBWWYsTUFBWjtBQUNBLEdBZE0sQ0FBUDtBQWVBLEM7O0FBRUQsSUFBTUksV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0gsT0FBRCxFQUFVZSxXQUFWLEVBQTBCO0FBQzdDLFNBQU9BLFdBQVc7QUFDakJmLFNBQU8sQ0FBQ2dCLE9BQVIsQ0FBZ0IsTUFBaEIsRUFBd0IsRUFBeEIsSUFBOEIsR0FBOUIsR0FBb0NELFdBQVcsQ0FBQ0MsT0FBWixDQUFvQixNQUFwQixFQUE0QixFQUE1QixDQURuQjtBQUVqQmhCLFNBRkQ7QUFHQSxDQUpEOztBQU1BLElBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQ0MsR0FBRCxFQUFTO0FBQzlCLFNBQU8sZ0NBQWdDZSxJQUFoQyxDQUFxQ2YsR0FBckMsQ0FBUDtBQUNBLENBRkQsQyIsImZpbGUiOiIyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IChjb25maWcpID0+IHtcclxuXHRpZiAoY29uZmlnLmJhc2VVcmwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcclxuXHRcdGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVybCwgY29uZmlnLnVybCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0Y29uZmlnID0gT2JqZWN0LmFzc2lnbihjb25maWcsIHtcclxuXHRcdFx0c3VjY2VzczogcmVzID0+IHtcclxuXHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXMpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWplY3QocmVzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGZhaWw6IHJlcyA9PiB7XHJcblx0XHRcdFx0cmVqZWN0KHJlcyk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dW5pLnJlcXVlc3QoY29uZmlnKTtcclxuXHR9KTtcclxufVxyXG5cclxuY29uc3QgY29tYmluZVVSTHMgPSAoYmFzZVVybCwgcmVsYXRpdmVVcmwpID0+IHtcclxuXHRyZXR1cm4gcmVsYXRpdmVVcmwgP1xyXG5cdFx0YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpIDpcclxuXHRcdGJhc2VVcmw7XHJcbn1cclxuXHJcbmNvbnN0IGlzQWJzb2x1dGVVUkwgPSAodXJsKSA9PiB7XHJcblx0cmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25\n");
- /***/ }),
- /* 26 */
- /*!**********************************************!*\
- !*** E:/sheverAPP/APP/assets/scripts/md5.js ***!
- \**********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__; /**\r\n * [js-md5]{@link https://github.com/emn178/js-md5}\r\n *\r\n * @namespace md5\r\n * @version 0.7.3\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2014-2017\r\n * @license MIT\r\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = true && __webpack_require__(/*! !webpack amd options */ 29);\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [],buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\r\n * @method hex\r\n * @memberof md5\r\n * @description Output hash as hex string\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} Hex string\r\n * @example\r\n * md5.hex('The quick brown fox jumps over the lazy dog');\r\n * // equal to\r\n * md5('The quick brown fox jumps over the lazy dog');\r\n */\n /**\r\n * @method digest\r\n * @memberof md5\r\n * @description Output hash as bytes array\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Array} Bytes array\r\n * @example\r\n * md5.digest('The quick brown fox jumps over the lazy dog');\r\n */\n /**\r\n * @method array\r\n * @memberof md5\r\n * @description Output hash as bytes array\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Array} Bytes array\r\n * @example\r\n * md5.array('The quick brown fox jumps over the lazy dog');\r\n */\n /**\r\n * @method arrayBuffer\r\n * @memberof md5\r\n * @description Output hash as ArrayBuffer\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @example\r\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\r\n */\n /**\r\n * @method buffer\r\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\r\n * @memberof md5\r\n * @description Output hash as ArrayBuffer\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @example\r\n * md5.buffer('The quick brown fox jumps over the lazy dog');\r\n */\n /**\r\n * @method base64\r\n * @memberof md5\r\n * @description Output hash as base64 string\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} base64 string\r\n * @example\r\n * md5.base64('The quick brown fox jumps over the lazy dog');\r\n */\n var createOutputMethod = function createOutputMethod(outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\r\n * @method create\r\n * @memberof md5\r\n * @description Create Md5 object\r\n * @returns {Md5} Md5 object.\r\n * @example\r\n * var hash = md5.create();\r\n */\n /**\r\n * @method update\r\n * @memberof md5\r\n * @description Create and update Md5 object\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Md5} Md5 object.\r\n * @example\r\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\r\n * // equal to\r\n * var hash = md5.create();\r\n * hash.update('The quick brown fox jumps over the lazy dog');\r\n */\n var createMethod = function createMethod() {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function nodeWrap(method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function nodeMethod(message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\r\n * Md5 class\r\n * @class Md5\r\n * @description This is internal class.\r\n * @see {@link md5.create}\r\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\r\n * @method update\r\n * @memberof Md5\r\n * @instance\r\n * @description Update hash\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Md5} Md5 object.\r\n * @see {@link md5.update}\r\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString,type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code,index = 0,i,length = message.length,blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | code >> 6;\n buffer8[i++] = 0x80 | code & 0x3f;\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | code >> 12;\n buffer8[i++] = 0x80 | code >> 6 & 0x3f;\n buffer8[i++] = 0x80 | code & 0x3f;\n } else {\n code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);\n buffer8[i++] = 0xf0 | code >> 18;\n buffer8[i++] = 0x80 | code >> 12 & 0x3f;\n buffer8[i++] = 0x80 | code >> 6 & 0x3f;\n buffer8[i++] = 0x80 | code & 0x3f;\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);\n blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks,i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a,b,c,d,bc,da,blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ d & (a ^ -271733879)) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ c & (d ^ a)) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ b & (c ^ d)) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ a & (b ^ c)) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ d & (a ^ b)) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ c & (d ^ a)) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ b & (c ^ d)) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ a & (b ^ c)) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ d & (a ^ b)) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ c & (d ^ a)) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ b & (c ^ d)) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ a & (b ^ c)) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ d & (a ^ b)) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ c & (d ^ a)) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ b & (c ^ d)) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ a & (b ^ c)) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ d & (a ^ b)) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ c & (d ^ a)) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ d & (b ^ c)) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ c & (a ^ b)) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ b & (d ^ a)) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ a & (c ^ d)) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ d & (b ^ c)) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ c & (a ^ b)) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ b & (d ^ a)) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ a & (c ^ d)) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ d & (b ^ c)) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ c & (a ^ b)) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ b & (d ^ a)) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ a & (c ^ d)) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ d & (b ^ c)) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ c & (a ^ b)) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ b & (d ^ a)) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ a & (c ^ d)) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\r\n * @method hex\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as hex string\r\n * @returns {String} Hex string\r\n * @see {@link md5.hex}\r\n * @example\r\n * hash.hex();\r\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0,h1 = this.h1,h2 = this.h2,h3 = this.h3;\n\n return HEX_CHARS[h0 >> 4 & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[h0 >> 12 & 0x0F] + HEX_CHARS[h0 >> 8 & 0x0F] +\n HEX_CHARS[h0 >> 20 & 0x0F] + HEX_CHARS[h0 >> 16 & 0x0F] +\n HEX_CHARS[h0 >> 28 & 0x0F] + HEX_CHARS[h0 >> 24 & 0x0F] +\n HEX_CHARS[h1 >> 4 & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[h1 >> 12 & 0x0F] + HEX_CHARS[h1 >> 8 & 0x0F] +\n HEX_CHARS[h1 >> 20 & 0x0F] + HEX_CHARS[h1 >> 16 & 0x0F] +\n HEX_CHARS[h1 >> 28 & 0x0F] + HEX_CHARS[h1 >> 24 & 0x0F] +\n HEX_CHARS[h2 >> 4 & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[h2 >> 12 & 0x0F] + HEX_CHARS[h2 >> 8 & 0x0F] +\n HEX_CHARS[h2 >> 20 & 0x0F] + HEX_CHARS[h2 >> 16 & 0x0F] +\n HEX_CHARS[h2 >> 28 & 0x0F] + HEX_CHARS[h2 >> 24 & 0x0F] +\n HEX_CHARS[h3 >> 4 & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[h3 >> 12 & 0x0F] + HEX_CHARS[h3 >> 8 & 0x0F] +\n HEX_CHARS[h3 >> 20 & 0x0F] + HEX_CHARS[h3 >> 16 & 0x0F] +\n HEX_CHARS[h3 >> 28 & 0x0F] + HEX_CHARS[h3 >> 24 & 0x0F];\n };\n\n /**\r\n * @method toString\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as hex string\r\n * @returns {String} Hex string\r\n * @see {@link md5.hex}\r\n * @example\r\n * hash.toString();\r\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\r\n * @method digest\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as bytes array\r\n * @returns {Array} Bytes array\r\n * @see {@link md5.digest}\r\n * @example\r\n * hash.digest();\r\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0,h1 = this.h1,h2 = this.h2,h3 = this.h3;\n return [\n h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >> 24 & 0xFF,\n h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >> 24 & 0xFF,\n h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >> 24 & 0xFF,\n h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >> 24 & 0xFF];\n\n };\n\n /**\r\n * @method array\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as bytes array\r\n * @returns {Array} Bytes array\r\n * @see {@link md5.array}\r\n * @example\r\n * hash.array();\r\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\r\n * @method arrayBuffer\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as ArrayBuffer\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @see {@link md5.arrayBuffer}\r\n * @example\r\n * hash.arrayBuffer();\r\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\r\n * @method buffer\r\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as ArrayBuffer\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @see {@link md5.buffer}\r\n * @example\r\n * hash.buffer();\r\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\r\n * @method base64\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as base64 string\r\n * @returns {String} base64 string\r\n * @see {@link md5.base64}\r\n * @example\r\n * hash.base64();\r\n */\n Md5.prototype.base64 = function () {\n var v1,v2,v3,base64Str = '',bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[v1 << 4 & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\r\n * @method md5\b\r\n * @description Md5 hash function, export to global in browsers.\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} md5 hashes\r\n * @example\r\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\r\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\r\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\r\n *\r\n * // It also supports UTF-8 encoding\r\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\r\n *\r\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\r\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\r\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\r\n */\n root.md5 = exports;\n if (AMD) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return exports;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n }\n})();\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../HbuilderX/HBuilderX/plugins/uniapp-cli/node_modules/node-libs-browser/mock/process.js */ 27), __webpack_require__(/*! ./../../../../HbuilderX/HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js */ 2)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vYXNzZXRzL3NjcmlwdHMvbWQ1LmpzIl0sIm5hbWVzIjpbIkVSUk9SIiwiV0lORE9XIiwid2luZG93Iiwicm9vdCIsIkpTX01ENV9OT19XSU5ET1ciLCJXRUJfV09SS0VSIiwic2VsZiIsIk5PREVfSlMiLCJKU19NRDVfTk9fTk9ERV9KUyIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJnbG9iYWwiLCJDT01NT05fSlMiLCJKU19NRDVfTk9fQ09NTU9OX0pTIiwibW9kdWxlIiwiZXhwb3J0cyIsIkFNRCIsImRlZmluZSIsIkFSUkFZX0JVRkZFUiIsIkpTX01ENV9OT19BUlJBWV9CVUZGRVIiLCJBcnJheUJ1ZmZlciIsIkhFWF9DSEFSUyIsInNwbGl0IiwiRVhUUkEiLCJTSElGVCIsIk9VVFBVVF9UWVBFUyIsIkJBU0U2NF9FTkNPREVfQ0hBUiIsImJsb2NrcyIsImJ1ZmZlcjgiLCJidWZmZXIiLCJVaW50OEFycmF5IiwiVWludDMyQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJvYmoiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJKU19NRDVfTk9fQVJSQVlfQlVGRkVSX0lTX1ZJRVciLCJpc1ZpZXciLCJjb25zdHJ1Y3RvciIsImNyZWF0ZU91dHB1dE1ldGhvZCIsIm91dHB1dFR5cGUiLCJtZXNzYWdlIiwiTWQ1IiwidXBkYXRlIiwiY3JlYXRlTWV0aG9kIiwibWV0aG9kIiwibm9kZVdyYXAiLCJjcmVhdGUiLCJpIiwibGVuZ3RoIiwidHlwZSIsImNyeXB0byIsImV2YWwiLCJCdWZmZXIiLCJub2RlTWV0aG9kIiwiY3JlYXRlSGFzaCIsImRpZ2VzdCIsInVuZGVmaW5lZCIsInNoYXJlZE1lbW9yeSIsImgwIiwiaDEiLCJoMiIsImgzIiwic3RhcnQiLCJieXRlcyIsImhCeXRlcyIsImZpbmFsaXplZCIsImhhc2hlZCIsImZpcnN0Iiwibm90U3RyaW5nIiwiY29kZSIsImluZGV4IiwiY2hhckNvZGVBdCIsImxhc3RCeXRlSW5kZXgiLCJoYXNoIiwiZmluYWxpemUiLCJhIiwiYiIsImMiLCJkIiwiYmMiLCJkYSIsImhleCIsImFycmF5IiwiYXJyYXlCdWZmZXIiLCJiYXNlNjQiLCJ2MSIsInYyIiwidjMiLCJiYXNlNjRTdHIiLCJtZDUiXSwibWFwcGluZ3MiOiIwRkFBQTs7Ozs7Ozs7O0FBU0EsQ0FBQyxZQUFZO0FBQ1g7O0FBRUEsTUFBSUEsS0FBSyxHQUFHLHVCQUFaO0FBQ0EsTUFBSUMsTUFBTSxHQUFHLE9BQU9DLE1BQVAsS0FBa0IsUUFBL0I7QUFDQSxNQUFJQyxJQUFJLEdBQUdGLE1BQU0sR0FBR0MsTUFBSCxHQUFZLEVBQTdCO0FBQ0EsTUFBSUMsSUFBSSxDQUFDQyxnQkFBVCxFQUEyQjtBQUN6QkgsVUFBTSxHQUFHLEtBQVQ7QUFDRDtBQUNELE1BQUlJLFVBQVUsR0FBRyxDQUFDSixNQUFELElBQVcsT0FBT0ssSUFBUCxLQUFnQixRQUE1QztBQUNBLE1BQUlDLE9BQU8sR0FBRyxDQUFDSixJQUFJLENBQUNLLGlCQUFOLElBQTJCLE9BQU9DLE9BQVAsS0FBbUIsUUFBOUMsSUFBMERBLE9BQU8sQ0FBQ0MsUUFBbEUsSUFBOEVELE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkMsSUFBN0c7QUFDQSxNQUFJSixPQUFKLEVBQWE7QUFDWEosUUFBSSxHQUFHUyxNQUFQO0FBQ0QsR0FGRCxNQUVPLElBQUlQLFVBQUosRUFBZ0I7QUFDckJGLFFBQUksR0FBR0csSUFBUDtBQUNEO0FBQ0QsTUFBSU8sU0FBUyxHQUFHLENBQUNWLElBQUksQ0FBQ1csbUJBQU4sSUFBNkIsT0FBT0MsTUFBUCxLQUFrQixRQUEvQyxJQUEyREEsTUFBTSxDQUFDQyxPQUFsRjtBQUNBLE1BQUlDLEdBQUcsR0FBRyxTQUFnQ0MsbURBQTFDO0FBQ0EsTUFBSUMsWUFBWSxHQUFHLENBQUNoQixJQUFJLENBQUNpQixzQkFBTixJQUFnQyxPQUFPQyxXQUFQLEtBQXVCLFdBQTFFO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLG1CQUFtQkMsS0FBbkIsQ0FB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QUFFLElBQUksQ0FBTixHQUFVQyxFQUFFLEtBQUssQ0FBbEIsSUFBdUIsRUFBeEIsQ0FGUDtBQUdYakUsd0JBQWtCLENBQUNpRSxFQUFFLEdBQUcsRUFBTixDQUhwQjtBQUlEO0FBQ0RGLE1BQUUsR0FBR3RCLEtBQUssQ0FBQ2hCLENBQUQsQ0FBVjtBQUNBeUMsYUFBUyxJQUFJbEUsa0JBQWtCLENBQUMrRCxFQUFFLEtBQUssQ0FBUixDQUFsQjtBQUNYL0Qsc0JBQWtCLENBQUUrRCxFQUFFLElBQUksQ0FBUCxHQUFZLEVBQWIsQ0FEUDtBQUVYLFFBRkY7QUFHQSxXQUFPRyxTQUFQO0FBQ0QsR0FoQkQ7O0FBa0JBLE1BQUk3RSxPQUFPLEdBQUdnQyxZQUFZLEVBQTFCOztBQUVBLE1BQUluQyxTQUFKLEVBQWU7QUFDYkUsVUFBTSxDQUFDQyxPQUFQLEdBQWlCQSxPQUFqQjtBQUNELEdBRkQsTUFFTztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQWIsUUFBSSxDQUFDMkYsR0FBTCxHQUFXOUUsT0FBWDtBQUNBLFFBQUlDLEdBQUosRUFBUztBQUNQQyx5Q0FBTyxZQUFZO0FBQ2pCLGVBQU9GLE9BQVA7QUFDRCxPQUZLO0FBQUEsb0dBQU47QUFHRDtBQUNGO0FBQ0YsQ0FqcUJELEkiLCJmaWxlIjoiMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogW2pzLW1kNV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VtbjE3OC9qcy1tZDV9XHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgbWQ1XHJcbiAqIEB2ZXJzaW9uIDAuNy4zXHJcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXHJcbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNC0yMDE3XHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4gKi9cclxuKGZ1bmN0aW9uICgpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIHZhciBFUlJPUiA9ICdpbnB1dCBpcyBpbnZhbGlkIHR5cGUnO1xyXG4gIHZhciBXSU5ET1cgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JztcclxuICB2YXIgcm9vdCA9IFdJTkRPVyA/IHdpbmRvdyA6IHt9O1xyXG4gIGlmIChyb290LkpTX01ENV9OT19XSU5ET1cpIHtcclxuICAgIFdJTkRPVyA9IGZhbHNlO1xyXG4gIH1cclxuICB2YXIgV0VCX1dPUktFUiA9ICFXSU5ET1cgJiYgdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnO1xyXG4gIHZhciBOT0RFX0pTID0gIXJvb3QuSlNfTUQ1X05PX05PREVfSlMgJiYgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xyXG4gIGlmIChOT0RFX0pTKSB7XHJcbiAgICByb290ID0gZ2xvYmFsO1xyXG4gIH0gZWxzZSBpZiAoV0VCX1dPUktFUikge1xyXG4gICAgcm9vdCA9IHNlbGY7XHJcbiAgfVxyXG4gIHZhciBDT01NT05fSlMgPSAhcm9vdC5KU19NRDVfTk9fQ09NTU9OX0pTICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzO1xyXG4gIHZhciBBTUQgPSB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQ7XHJcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICFyb290LkpTX01ENV9OT19BUlJBWV9CVUZGRVIgJiYgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJztcclxuICB2YXIgSEVYX0NIQVJTID0gJzAxMjM0NTY3ODlhYmNkZWYnLnNwbGl0KCcnKTtcclxuICB2YXIgRVhUUkEgPSBbMTI4LCAzMjc2OCwgODM4ODYwOCwgLTIxNDc0ODM2NDhdO1xyXG4gIHZhciBTSElGVCA9IFswLCA4LCAxNiwgMjRdO1xyXG4gIHZhciBPVVRQVVRfVFlQRVMgPSBbJ2hleCcsICdhcnJheScsICdkaWdlc3QnLCAnYnVmZmVyJywgJ2FycmF5QnVmZmVyJywgJ2Jhc2U2NCddO1xyXG4gIHZhciBCQVNFNjRfRU5DT0RFX0NIQVIgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xyXG5cclxuICB2YXIgYmxvY2tzID0gW10sIGJ1ZmZlcjg7XHJcbiAgaWYgKEFSUkFZX0JVRkZFUikge1xyXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2OCk7XHJcbiAgICBidWZmZXI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGJsb2NrcyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJvb3QuSlNfTUQ1X05PX05PREVfSlMgfHwgIUFycmF5LmlzQXJyYXkpIHtcclxuICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpZiAoQVJSQVlfQlVGRkVSICYmIChyb290LkpTX01ENV9OT19BUlJBWV9CVUZGRVJfSVNfVklFVyB8fCAhQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xyXG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqLmJ1ZmZlciAmJiBvYmouYnVmZmVyLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAbWV0aG9kIGhleFxyXG4gICAqIEBtZW1iZXJvZiBtZDVcclxuICAgKiBAZGVzY3JpcHRpb24gT3V0cHV0IGhhc2ggYXMgaGV4IHN0cmluZ1xyXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXHJcbiAgICogQHJldHVybnMge1N0cmluZ30gSGV4IHN0cmluZ1xyXG4gICAqIEBleGFtcGxlXHJcbiAgICogbWQ1LmhleCgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xyXG4gICAqIC8vIGVxdWFsIHRvXHJcbiAgICogbWQ1KCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7XHJcbiAgICovXHJcbiAgLyoqXHJcbiAgICogQG1ldGhvZCBkaWdlc3RcclxuICAgKiBAbWVtYmVyb2YgbWQ1XHJcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGJ5dGVzIGFycmF5XHJcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcclxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEJ5dGVzIGFycmF5XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBtZDUuZGlnZXN0KCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7XHJcbiAgICovXHJcbiAgLyoqXHJcbiAgICogQG1ldGhvZCBhcnJheVxyXG4gICAqIEBtZW1iZXJvZiBtZDVcclxuICAgKiBAZGVzY3JpcHRpb24gT3V0cHV0IGhhc2ggYXMgYnl0ZXMgYXJyYXlcclxuICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxVaW50OEFycmF5fEFycmF5QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gaGFzaFxyXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQnl0ZXMgYXJyYXlcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIG1kNS5hcnJheSgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xyXG4gICAqL1xyXG4gIC8qKlxyXG4gICAqIEBtZXRob2QgYXJyYXlCdWZmZXJcclxuICAgKiBAbWVtYmVyb2YgbWQ1XHJcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIEFycmF5QnVmZmVyXHJcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcclxuICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IEFycmF5QnVmZmVyXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBtZDUuYXJyYXlCdWZmZXIoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKTtcclxuICAgKi9cclxuICAvKipcclxuICAgKiBAbWV0aG9kIGJ1ZmZlclxyXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWF5YmUgY29uZnVzZSB3aXRoIEJ1ZmZlciBpbiBub2RlLmpzLiBQbGVhc2UgdXNlIGFycmF5QnVmZmVyIGluc3RlYWQuXHJcbiAgICogQG1lbWJlcm9mIG1kNVxyXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBBcnJheUJ1ZmZlclxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXHJcbiAgICogQHJldHVybnMge0FycmF5QnVmZmVyfSBBcnJheUJ1ZmZlclxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogbWQ1LmJ1ZmZlcignVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xyXG4gICAqL1xyXG4gIC8qKlxyXG4gICAqIEBtZXRob2QgYmFzZTY0XHJcbiAgICogQG1lbWJlcm9mIG1kNVxyXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBiYXNlNjQgc3RyaW5nXHJcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcclxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBiYXNlNjQgc3RyaW5nXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBtZDUuYmFzZTY0KCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7XHJcbiAgICovXHJcbiAgdmFyIGNyZWF0ZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBNZDUodHJ1ZSkudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICogQG1lbWJlcm9mIG1kNVxyXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgTWQ1IG9iamVjdFxyXG4gICAqIEByZXR1cm5zIHtNZDV9IE1kNSBvYmplY3QuXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiB2YXIgaGFzaCA9IG1kNS5jcmVhdGUoKTtcclxuICAgKi9cclxuICAvKipcclxuICAgKiBAbWV0aG9kIHVwZGF0ZVxyXG4gICAqIEBtZW1iZXJvZiBtZDVcclxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGFuZCB1cGRhdGUgTWQ1IG9iamVjdFxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBoYXNoXHJcbiAgICogQHJldHVybnMge01kNX0gTWQ1IG9iamVjdC5cclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHZhciBoYXNoID0gbWQ1LnVwZGF0ZSgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpO1xyXG4gICAqIC8vIGVxdWFsIHRvXHJcbiAgICogdmFyIGhhc2ggPSBtZDUuY3JlYXRlKCk7XHJcbiAgICogaGFzaC51cGRhdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKTtcclxuICAgKi9cclxuICB2YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZU91dHB1dE1ldGhvZCgnaGV4Jyk7XHJcbiAgICBpZiAoTk9ERV9KUykge1xyXG4gICAgICBtZXRob2QgPSBub2RlV3JhcChtZXRob2QpO1xyXG4gICAgfVxyXG4gICAgbWV0aG9kLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG5ldyBNZDUoKTtcclxuICAgIH07XHJcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUoKS51cGRhdGUobWVzc2FnZSk7XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBPVVRQVVRfVFlQRVMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdmFyIHR5cGUgPSBPVVRQVVRfVFlQRVNbaV07XHJcbiAgICAgIG1ldGhvZFt0eXBlXSA9IGNyZWF0ZU91dHB1dE1ldGhvZCh0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRob2Q7XHJcbiAgfTtcclxuXHJcbiAgdmFyIG5vZGVXcmFwID0gZnVuY3Rpb24gKG1ldGhvZCkge1xyXG4gICAgdmFyIGNyeXB0byA9IGV2YWwoXCJyZXF1aXJlKCdjcnlwdG8nKVwiKTtcclxuICAgIHZhciBCdWZmZXIgPSBldmFsKFwicmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyXCIpO1xyXG4gICAgdmFyIG5vZGVNZXRob2QgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUobWVzc2FnZSwgJ3V0ZjgnKS5kaWdlc3QoJ2hleCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhyb3cgRVJST1I7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xyXG4gICAgICAgICAgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlKSB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcobWVzc2FnZSkgfHxcclxuICAgICAgICBtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBCdWZmZXIpIHtcclxuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShuZXcgQnVmZmVyKG1lc3NhZ2UpKS5kaWdlc3QoJ2hleCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBtZXRob2QobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gbm9kZU1ldGhvZDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNZDUgY2xhc3NcclxuICAgKiBAY2xhc3MgTWQ1XHJcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgaXMgaW50ZXJuYWwgY2xhc3MuXHJcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmNyZWF0ZX1cclxuICAgKi9cclxuICBmdW5jdGlvbiBNZDUoc2hhcmVkTWVtb3J5KSB7XHJcbiAgICBpZiAoc2hhcmVkTWVtb3J5KSB7XHJcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1sxNl0gPSBibG9ja3NbMV0gPSBibG9ja3NbMl0gPSBibG9ja3NbM10gPVxyXG4gICAgICBibG9ja3NbNF0gPSBibG9ja3NbNV0gPSBibG9ja3NbNl0gPSBibG9ja3NbN10gPVxyXG4gICAgICBibG9ja3NbOF0gPSBibG9ja3NbOV0gPSBibG9ja3NbMTBdID0gYmxvY2tzWzExXSA9XHJcbiAgICAgIGJsb2Nrc1sxMl0gPSBibG9ja3NbMTNdID0gYmxvY2tzWzE0XSA9IGJsb2Nrc1sxNV0gPSAwO1xyXG4gICAgICB0aGlzLmJsb2NrcyA9IGJsb2NrcztcclxuICAgICAgdGhpcy5idWZmZXI4ID0gYnVmZmVyODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChBUlJBWV9CVUZGRVIpIHtcclxuICAgICAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDY4KTtcclxuICAgICAgICB0aGlzLmJ1ZmZlcjggPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tzID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaDAgPSB0aGlzLmgxID0gdGhpcy5oMiA9IHRoaXMuaDMgPSB0aGlzLnN0YXJ0ID0gdGhpcy5ieXRlcyA9IHRoaXMuaEJ5dGVzID0gMDtcclxuICAgIHRoaXMuZmluYWxpemVkID0gdGhpcy5oYXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlyc3QgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG1ldGhvZCB1cGRhdGVcclxuICAgKiBAbWVtYmVyb2YgTWQ1XHJcbiAgICogQGluc3RhbmNlXHJcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZSBoYXNoXHJcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcclxuICAgKiBAcmV0dXJucyB7TWQ1fSBNZDUgb2JqZWN0LlxyXG4gICAqIEBzZWUge0BsaW5rIG1kNS51cGRhdGV9XHJcbiAgICovXHJcbiAgTWQ1LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgaWYgKHRoaXMuZmluYWxpemVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbm90U3RyaW5nLCB0eXBlID0gdHlwZW9mIG1lc3NhZ2U7XHJcbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHtcclxuICAgICAgICAgIHRocm93IEVSUk9SO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoQVJSQVlfQlVGRkVSICYmIG1lc3NhZ2UuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XHJcbiAgICAgICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlKSkge1xyXG4gICAgICAgICAgaWYgKCFBUlJBWV9CVUZGRVIgfHwgIUFycmF5QnVmZmVyLmlzVmlldyhtZXNzYWdlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFUlJPUjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRVJST1I7XHJcbiAgICAgIH1cclxuICAgICAgbm90U3RyaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBjb2RlLCBpbmRleCA9IDAsIGksIGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoLCBibG9ja3MgPSB0aGlzLmJsb2NrcztcclxuICAgIHZhciBidWZmZXI4ID0gdGhpcy5idWZmZXI4O1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5oYXNoZWQpIHtcclxuICAgICAgICB0aGlzLmhhc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1sxNl07XHJcbiAgICAgICAgYmxvY2tzWzE2XSA9IGJsb2Nrc1sxXSA9IGJsb2Nrc1syXSA9IGJsb2Nrc1szXSA9XHJcbiAgICAgICAgYmxvY2tzWzRdID0gYmxvY2tzWzVdID0gYmxvY2tzWzZdID0gYmxvY2tzWzddID1cclxuICAgICAgICBibG9ja3NbOF0gPSBibG9ja3NbOV0gPSBibG9ja3NbMTBdID0gYmxvY2tzWzExXSA9XHJcbiAgICAgICAgYmxvY2tzWzEyXSA9IGJsb2Nrc1sxM10gPSBibG9ja3NbMTRdID0gYmxvY2tzWzE1XSA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChub3RTdHJpbmcpIHtcclxuICAgICAgICBpZiAoQVJSQVlfQlVGRkVSKSB7XHJcbiAgICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNjQ7ICsraW5kZXgpIHtcclxuICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gbWVzc2FnZVtpbmRleF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCA2NDsgKytpbmRleCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSBtZXNzYWdlW2luZGV4XSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKEFSUkFZX0JVRkZFUikge1xyXG4gICAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IDY0OyArK2luZGV4KSB7XHJcbiAgICAgICAgICAgIGNvZGUgPSBtZXNzYWdlLmNoYXJDb2RlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcclxuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSBjb2RlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xyXG4gICAgICAgICAgICAgIGJ1ZmZlcjhbaSsrXSA9IDB4YzAgfCAoY29kZSA+PiA2KTtcclxuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XHJcbiAgICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gMHhlMCB8IChjb2RlID4+IDEyKTtcclxuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XHJcbiAgICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xyXG4gICAgICAgICAgICAgIGJ1ZmZlcjhbaSsrXSA9IDB4ZjAgfCAoY29kZSA+PiAxOCk7XHJcbiAgICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKTtcclxuICAgICAgICAgICAgICBidWZmZXI4W2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XHJcbiAgICAgICAgICAgICAgYnVmZmVyOFtpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IDY0OyArK2luZGV4KSB7XHJcbiAgICAgICAgICAgIGNvZGUgPSBtZXNzYWdlLmNoYXJDb2RlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcclxuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSBjb2RlIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xyXG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweGMwIHwgKGNvZGUgPj4gNikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xyXG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweGUwIHwgKGNvZGUgPj4gMTIpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvZGUgPSAweDEwMDAwICsgKCgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgfCAobWVzc2FnZS5jaGFyQ29kZUF0KCsraW5kZXgpICYgMHgzZmYpKTtcclxuICAgICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhmMCB8IChjb2RlID4+IDE4KSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gMTIpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYXN0Qnl0ZUluZGV4ID0gaTtcclxuICAgICAgdGhpcy5ieXRlcyArPSBpIC0gdGhpcy5zdGFydDtcclxuICAgICAgaWYgKGkgPj0gNjQpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gaSAtIDY0O1xyXG4gICAgICAgIHRoaXMuaGFzaCgpO1xyXG4gICAgICAgIHRoaXMuaGFzaGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYnl0ZXMgPiA0Mjk0OTY3Mjk1KSB7XHJcbiAgICAgIHRoaXMuaEJ5dGVzICs9IHRoaXMuYnl0ZXMgLyA0Mjk0OTY3Mjk2IDw8IDA7XHJcbiAgICAgIHRoaXMuYnl0ZXMgPSB0aGlzLmJ5dGVzICUgNDI5NDk2NzI5NjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIE1kNS5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5maW5hbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maW5hbGl6ZWQgPSB0cnVlO1xyXG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBpID0gdGhpcy5sYXN0Qnl0ZUluZGV4O1xyXG4gICAgYmxvY2tzW2kgPj4gMl0gfD0gRVhUUkFbaSAmIDNdO1xyXG4gICAgaWYgKGkgPj0gNTYpIHtcclxuICAgICAgaWYgKCF0aGlzLmhhc2hlZCkge1xyXG4gICAgICAgIHRoaXMuaGFzaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1sxNl07XHJcbiAgICAgIGJsb2Nrc1sxNl0gPSBibG9ja3NbMV0gPSBibG9ja3NbMl0gPSBibG9ja3NbM10gPVxyXG4gICAgICBibG9ja3NbNF0gPSBibG9ja3NbNV0gPSBibG9ja3NbNl0gPSBibG9ja3NbN10gPVxyXG4gICAgICBibG9ja3NbOF0gPSBibG9ja3NbOV0gPSBibG9ja3NbMTBdID0gYmxvY2tzWzExXSA9XHJcbiAgICAgIGJsb2Nrc1sxMl0gPSBibG9ja3NbMTNdID0gYmxvY2tzWzE0XSA9IGJsb2Nrc1sxNV0gPSAwO1xyXG4gICAgfVxyXG4gICAgYmxvY2tzWzE0XSA9IHRoaXMuYnl0ZXMgPDwgMztcclxuICAgIGJsb2Nrc1sxNV0gPSB0aGlzLmhCeXRlcyA8PCAzIHwgdGhpcy5ieXRlcyA+Pj4gMjk7XHJcbiAgICB0aGlzLmhhc2goKTtcclxuICB9O1xyXG5cclxuICBNZDUucHJvdG90eXBlLmhhc2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYSwgYiwgYywgZCwgYmMsIGRhLCBibG9ja3MgPSB0aGlzLmJsb2NrcztcclxuXHJcbiAgICBpZiAodGhpcy5maXJzdCkge1xyXG4gICAgICBhID0gYmxvY2tzWzBdIC0gNjgwODc2OTM3O1xyXG4gICAgICBhID0gKGEgPDwgNyB8IGEgPj4+IDI1KSAtIDI3MTczMzg3OSA8PCAwO1xyXG4gICAgICBkID0gKC0xNzMyNTg0MTk0IF4gYSAmIDIwMDQzMTgwNzEpICsgYmxvY2tzWzFdIC0gMTE3ODMwNzA4O1xyXG4gICAgICBkID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIDw8IDA7XHJcbiAgICAgIGMgPSAoLTI3MTczMzg3OSBeIChkICYgKGEgXiAtMjcxNzMzODc5KSkpICsgYmxvY2tzWzJdIC0gMTEyNjQ3ODM3NTtcclxuICAgICAgYyA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCA8PCAwO1xyXG4gICAgICBiID0gKGEgXiAoYyAmIChkIF4gYSkpKSArIGJsb2Nrc1szXSAtIDEzMTYyNTkyMDk7XHJcbiAgICAgIGIgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgPDwgMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGEgPSB0aGlzLmgwO1xyXG4gICAgICBiID0gdGhpcy5oMTtcclxuICAgICAgYyA9IHRoaXMuaDI7XHJcbiAgICAgIGQgPSB0aGlzLmgzO1xyXG4gICAgICBhICs9IChkIF4gKGIgJiAoYyBeIGQpKSkgKyBibG9ja3NbMF0gLSA2ODA4NzY5MzY7XHJcbiAgICAgIGEgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiA8PCAwO1xyXG4gICAgICBkICs9IChjIF4gKGEgJiAoYiBeIGMpKSkgKyBibG9ja3NbMV0gLSAzODk1NjQ1ODY7XHJcbiAgICAgIGQgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgPDwgMDtcclxuICAgICAgYyArPSAoYiBeIChkICYgKGEgXiBiKSkpICsgYmxvY2tzWzJdICsgNjA2MTA1ODE5O1xyXG4gICAgICBjID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIDw8IDA7XHJcbiAgICAgIGIgKz0gKGEgXiAoYyAmIChkIF4gYSkpKSArIGJsb2Nrc1szXSAtIDEwNDQ1MjUzMzA7XHJcbiAgICAgIGIgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgPDwgMDtcclxuICAgIH1cclxuXHJcbiAgICBhICs9IChkIF4gKGIgJiAoYyBeIGQpKSkgKyBibG9ja3NbNF0gLSAxNzY0MTg4OTc7XHJcbiAgICBhID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgPDwgMDtcclxuICAgIGQgKz0gKGMgXiAoYSAmIChiIF4gYykpKSArIGJsb2Nrc1s1XSArIDEyMDAwODA0MjY7XHJcbiAgICBkID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIDw8IDA7XHJcbiAgICBjICs9IChiIF4gKGQgJiAoYSBeIGIpKSkgKyBibG9ja3NbNl0gLSAxNDczMjMxMzQxO1xyXG4gICAgYyA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCA8PCAwO1xyXG4gICAgYiArPSAoYSBeIChjICYgKGQgXiBhKSkpICsgYmxvY2tzWzddIC0gNDU3MDU5ODM7XHJcbiAgICBiID0gKGIgPDwgMjIgfCBiID4+PiAxMCkgKyBjIDw8IDA7XHJcbiAgICBhICs9IChkIF4gKGIgJiAoYyBeIGQpKSkgKyBibG9ja3NbOF0gKyAxNzcwMDM1NDE2O1xyXG4gICAgYSA9IChhIDw8IDcgfCBhID4+PiAyNSkgKyBiIDw8IDA7XHJcbiAgICBkICs9IChjIF4gKGEgJiAoYiBeIGMpKSkgKyBibG9ja3NbOV0gLSAxOTU4NDE0NDE3O1xyXG4gICAgZCA9IChkIDw8IDEyIHwgZCA+Pj4gMjApICsgYSA8PCAwO1xyXG4gICAgYyArPSAoYiBeIChkICYgKGEgXiBiKSkpICsgYmxvY2tzWzEwXSAtIDQyMDYzO1xyXG4gICAgYyA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCA8PCAwO1xyXG4gICAgYiArPSAoYSBeIChjICYgKGQgXiBhKSkpICsgYmxvY2tzWzExXSAtIDE5OTA0MDQxNjI7XHJcbiAgICBiID0gKGIgPDwgMjIgfCBiID4+PiAxMCkgKyBjIDw8IDA7XHJcbiAgICBhICs9IChkIF4gKGIgJiAoYyBeIGQpKSkgKyBibG9ja3NbMTJdICsgMTgwNDYwMzY4MjtcclxuICAgIGEgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiA8PCAwO1xyXG4gICAgZCArPSAoYyBeIChhICYgKGIgXiBjKSkpICsgYmxvY2tzWzEzXSAtIDQwMzQxMTAxO1xyXG4gICAgZCA9IChkIDw8IDEyIHwgZCA+Pj4gMjApICsgYSA8PCAwO1xyXG4gICAgYyArPSAoYiBeIChkICYgKGEgXiBiKSkpICsgYmxvY2tzWzE0XSAtIDE1MDIwMDIyOTA7XHJcbiAgICBjID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIDw8IDA7XHJcbiAgICBiICs9IChhIF4gKGMgJiAoZCBeIGEpKSkgKyBibG9ja3NbMTVdICsgMTIzNjUzNTMyOTtcclxuICAgIGIgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgPDwgMDtcclxuICAgIGEgKz0gKGMgXiAoZCAmIChiIF4gYykpKSArIGJsb2Nrc1sxXSAtIDE2NTc5NjUxMDtcclxuICAgIGEgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiA8PCAwO1xyXG4gICAgZCArPSAoYiBeIChjICYgKGEgXiBiKSkpICsgYmxvY2tzWzZdIC0gMTA2OTUwMTYzMjtcclxuICAgIGQgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSA8PCAwO1xyXG4gICAgYyArPSAoYSBeIChiICYgKGQgXiBhKSkpICsgYmxvY2tzWzExXSArIDY0MzcxNzcxMztcclxuICAgIGMgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGQgXiAoYSAmIChjIF4gZCkpKSArIGJsb2Nrc1swXSAtIDM3Mzg5NzMwMjtcclxuICAgIGIgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgPDwgMDtcclxuICAgIGEgKz0gKGMgXiAoZCAmIChiIF4gYykpKSArIGJsb2Nrc1s1XSAtIDcwMTU1ODY5MTtcclxuICAgIGEgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiA8PCAwO1xyXG4gICAgZCArPSAoYiBeIChjICYgKGEgXiBiKSkpICsgYmxvY2tzWzEwXSArIDM4MDE2MDgzO1xyXG4gICAgZCA9IChkIDw8IDkgfCBkID4+PiAyMykgKyBhIDw8IDA7XHJcbiAgICBjICs9IChhIF4gKGIgJiAoZCBeIGEpKSkgKyBibG9ja3NbMTVdIC0gNjYwNDc4MzM1O1xyXG4gICAgYyA9IChjIDw8IDE0IHwgYyA+Pj4gMTgpICsgZCA8PCAwO1xyXG4gICAgYiArPSAoZCBeIChhICYgKGMgXiBkKSkpICsgYmxvY2tzWzRdIC0gNDA1NTM3ODQ4O1xyXG4gICAgYiA9IChiIDw8IDIwIHwgYiA+Pj4gMTIpICsgYyA8PCAwO1xyXG4gICAgYSArPSAoYyBeIChkICYgKGIgXiBjKSkpICsgYmxvY2tzWzldICsgNTY4NDQ2NDM4O1xyXG4gICAgYSA9IChhIDw8IDUgfCBhID4+PiAyNykgKyBiIDw8IDA7XHJcbiAgICBkICs9IChiIF4gKGMgJiAoYSBeIGIpKSkgKyBibG9ja3NbMTRdIC0gMTAxOTgwMzY5MDtcclxuICAgIGQgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSA8PCAwO1xyXG4gICAgYyArPSAoYSBeIChiICYgKGQgXiBhKSkpICsgYmxvY2tzWzNdIC0gMTg3MzYzOTYxO1xyXG4gICAgYyA9IChjIDw8IDE0IHwgYyA+Pj4gMTgpICsgZCA8PCAwO1xyXG4gICAgYiArPSAoZCBeIChhICYgKGMgXiBkKSkpICsgYmxvY2tzWzhdICsgMTE2MzUzMTUwMTtcclxuICAgIGIgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgPDwgMDtcclxuICAgIGEgKz0gKGMgXiAoZCAmIChiIF4gYykpKSArIGJsb2Nrc1sxM10gLSAxNDQ0NjgxNDY3O1xyXG4gICAgYSA9IChhIDw8IDUgfCBhID4+PiAyNykgKyBiIDw8IDA7XHJcbiAgICBkICs9IChiIF4gKGMgJiAoYSBeIGIpKSkgKyBibG9ja3NbMl0gLSA1MTQwMzc4NDtcclxuICAgIGQgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSA8PCAwO1xyXG4gICAgYyArPSAoYSBeIChiICYgKGQgXiBhKSkpICsgYmxvY2tzWzddICsgMTczNTMyODQ3MztcclxuICAgIGMgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGQgXiAoYSAmIChjIF4gZCkpKSArIGJsb2Nrc1sxMl0gLSAxOTI2NjA3NzM0O1xyXG4gICAgYiA9IChiIDw8IDIwIHwgYiA+Pj4gMTIpICsgYyA8PCAwO1xyXG4gICAgYmMgPSBiIF4gYztcclxuICAgIGEgKz0gKGJjIF4gZCkgKyBibG9ja3NbNV0gLSAzNzg1NTg7XHJcbiAgICBhID0gKGEgPDwgNCB8IGEgPj4+IDI4KSArIGIgPDwgMDtcclxuICAgIGQgKz0gKGJjIF4gYSkgKyBibG9ja3NbOF0gLSAyMDIyNTc0NDYzO1xyXG4gICAgZCA9IChkIDw8IDExIHwgZCA+Pj4gMjEpICsgYSA8PCAwO1xyXG4gICAgZGEgPSBkIF4gYTtcclxuICAgIGMgKz0gKGRhIF4gYikgKyBibG9ja3NbMTFdICsgMTgzOTAzMDU2MjtcclxuICAgIGMgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGRhIF4gYykgKyBibG9ja3NbMTRdIC0gMzUzMDk1NTY7XHJcbiAgICBiID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgPDwgMDtcclxuICAgIGJjID0gYiBeIGM7XHJcbiAgICBhICs9IChiYyBeIGQpICsgYmxvY2tzWzFdIC0gMTUzMDk5MjA2MDtcclxuICAgIGEgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiA8PCAwO1xyXG4gICAgZCArPSAoYmMgXiBhKSArIGJsb2Nrc1s0XSArIDEyNzI4OTMzNTM7XHJcbiAgICBkID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIDw8IDA7XHJcbiAgICBkYSA9IGQgXiBhO1xyXG4gICAgYyArPSAoZGEgXiBiKSArIGJsb2Nrc1s3XSAtIDE1NTQ5NzYzMjtcclxuICAgIGMgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGRhIF4gYykgKyBibG9ja3NbMTBdIC0gMTA5NDczMDY0MDtcclxuICAgIGIgPSAoYiA8PCAyMyB8IGIgPj4+IDkpICsgYyA8PCAwO1xyXG4gICAgYmMgPSBiIF4gYztcclxuICAgIGEgKz0gKGJjIF4gZCkgKyBibG9ja3NbMTNdICsgNjgxMjc5MTc0O1xyXG4gICAgYSA9IChhIDw8IDQgfCBhID4+PiAyOCkgKyBiIDw8IDA7XHJcbiAgICBkICs9IChiYyBeIGEpICsgYmxvY2tzWzBdIC0gMzU4NTM3MjIyO1xyXG4gICAgZCA9IChkIDw8IDExIHwgZCA+Pj4gMjEpICsgYSA8PCAwO1xyXG4gICAgZGEgPSBkIF4gYTtcclxuICAgIGMgKz0gKGRhIF4gYikgKyBibG9ja3NbM10gLSA3MjI1MjE5Nzk7XHJcbiAgICBjID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIDw8IDA7XHJcbiAgICBiICs9IChkYSBeIGMpICsgYmxvY2tzWzZdICsgNzYwMjkxODk7XHJcbiAgICBiID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgPDwgMDtcclxuICAgIGJjID0gYiBeIGM7XHJcbiAgICBhICs9IChiYyBeIGQpICsgYmxvY2tzWzldIC0gNjQwMzY0NDg3O1xyXG4gICAgYSA9IChhIDw8IDQgfCBhID4+PiAyOCkgKyBiIDw8IDA7XHJcbiAgICBkICs9IChiYyBeIGEpICsgYmxvY2tzWzEyXSAtIDQyMTgxNTgzNTtcclxuICAgIGQgPSAoZCA8PCAxMSB8IGQgPj4+IDIxKSArIGEgPDwgMDtcclxuICAgIGRhID0gZCBeIGE7XHJcbiAgICBjICs9IChkYSBeIGIpICsgYmxvY2tzWzE1XSArIDUzMDc0MjUyMDtcclxuICAgIGMgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGRhIF4gYykgKyBibG9ja3NbMl0gLSA5OTUzMzg2NTE7XHJcbiAgICBiID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgPDwgMDtcclxuICAgIGEgKz0gKGMgXiAoYiB8IH5kKSkgKyBibG9ja3NbMF0gLSAxOTg2MzA4NDQ7XHJcbiAgICBhID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgPDwgMDtcclxuICAgIGQgKz0gKGIgXiAoYSB8IH5jKSkgKyBibG9ja3NbN10gKyAxMTI2ODkxNDE1O1xyXG4gICAgZCA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSA8PCAwO1xyXG4gICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGJsb2Nrc1sxNF0gLSAxNDE2MzU0OTA1O1xyXG4gICAgYyA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCA8PCAwO1xyXG4gICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGJsb2Nrc1s1XSAtIDU3NDM0MDU1O1xyXG4gICAgYiA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyA8PCAwO1xyXG4gICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGJsb2Nrc1sxMl0gKyAxNzAwNDg1NTcxO1xyXG4gICAgYSA9IChhIDw8IDYgfCBhID4+PiAyNikgKyBiIDw8IDA7XHJcbiAgICBkICs9IChiIF4gKGEgfCB+YykpICsgYmxvY2tzWzNdIC0gMTg5NDk4NjYwNjtcclxuICAgIGQgPSAoZCA8PCAxMCB8IGQgPj4+IDIyKSArIGEgPDwgMDtcclxuICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBibG9ja3NbMTBdIC0gMTA1MTUyMztcclxuICAgIGMgPSAoYyA8PCAxNSB8IGMgPj4+IDE3KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBibG9ja3NbMV0gLSAyMDU0OTIyNzk5O1xyXG4gICAgYiA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyA8PCAwO1xyXG4gICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGJsb2Nrc1s4XSArIDE4NzMzMTMzNTk7XHJcbiAgICBhID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgPDwgMDtcclxuICAgIGQgKz0gKGIgXiAoYSB8IH5jKSkgKyBibG9ja3NbMTVdIC0gMzA2MTE3NDQ7XHJcbiAgICBkID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIDw8IDA7XHJcbiAgICBjICs9IChhIF4gKGQgfCB+YikpICsgYmxvY2tzWzZdIC0gMTU2MDE5ODM4MDtcclxuICAgIGMgPSAoYyA8PCAxNSB8IGMgPj4+IDE3KSArIGQgPDwgMDtcclxuICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBibG9ja3NbMTNdICsgMTMwOTE1MTY0OTtcclxuICAgIGIgPSAoYiA8PCAyMSB8IGIgPj4+IDExKSArIGMgPDwgMDtcclxuICAgIGEgKz0gKGMgXiAoYiB8IH5kKSkgKyBibG9ja3NbNF0gLSAxNDU1MjMwNzA7XHJcbiAgICBhID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgPDwgMDtcclxuICAgIGQgKz0gKGIgXiAoYSB8IH5jKSkgKyBibG9ja3NbMTFdIC0gMTEyMDIxMDM3OTtcclxuICAgIGQgPSAoZCA8PCAxMCB8IGQgPj4+IDIyKSArIGEgPDwgMDtcclxuICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBibG9ja3NbMl0gKyA3MTg3ODcyNTk7XHJcbiAgICBjID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIDw8IDA7XHJcbiAgICBiICs9IChkIF4gKGMgfCB+YSkpICsgYmxvY2tzWzldIC0gMzQzNDg1NTUxO1xyXG4gICAgYiA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyA8PCAwO1xyXG5cclxuICAgIGlmICh0aGlzLmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuaDAgPSBhICsgMTczMjU4NDE5MyA8PCAwO1xyXG4gICAgICB0aGlzLmgxID0gYiAtIDI3MTczMzg3OSA8PCAwO1xyXG4gICAgICB0aGlzLmgyID0gYyAtIDE3MzI1ODQxOTQgPDwgMDtcclxuICAgICAgdGhpcy5oMyA9IGQgKyAyNzE3MzM4NzggPDwgMDtcclxuICAgICAgdGhpcy5maXJzdCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oMCA9IHRoaXMuaDAgKyBhIDw8IDA7XHJcbiAgICAgIHRoaXMuaDEgPSB0aGlzLmgxICsgYiA8PCAwO1xyXG4gICAgICB0aGlzLmgyID0gdGhpcy5oMiArIGMgPDwgMDtcclxuICAgICAgdGhpcy5oMyA9IHRoaXMuaDMgKyBkIDw8IDA7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG1ldGhvZCBoZXhcclxuICAgKiBAbWVtYmVyb2YgTWQ1XHJcbiAgICogQGluc3RhbmNlXHJcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGhleCBzdHJpbmdcclxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIZXggc3RyaW5nXHJcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmhleH1cclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGhhc2guaGV4KCk7XHJcbiAgICovXHJcbiAgTWQ1LnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGgwID0gdGhpcy5oMCwgaDEgPSB0aGlzLmgxLCBoMiA9IHRoaXMuaDIsIGgzID0gdGhpcy5oMztcclxuXHJcbiAgICByZXR1cm4gSEVYX0NIQVJTWyhoMCA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2gwICYgMHgwRl0gK1xyXG4gICAgICBIRVhfQ0hBUlNbKGgwID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMCA+PiA4KSAmIDB4MEZdICtcclxuICAgICAgSEVYX0NIQVJTWyhoMCA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDAgPj4gMTYpICYgMHgwRl0gK1xyXG4gICAgICBIRVhfQ0hBUlNbKGgwID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMCA+PiAyNCkgJiAweDBGXSArXHJcbiAgICAgIEhFWF9DSEFSU1soaDEgPj4gNCkgJiAweDBGXSArIEhFWF9DSEFSU1toMSAmIDB4MEZdICtcclxuICAgICAgSEVYX0NIQVJTWyhoMSA+PiAxMikgJiAweDBGXSArIEhFWF9DSEFSU1soaDEgPj4gOCkgJiAweDBGXSArXHJcbiAgICAgIEhFWF9DSEFSU1soaDEgPj4gMjApICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgxID4+IDE2KSAmIDB4MEZdICtcclxuICAgICAgSEVYX0NIQVJTWyhoMSA+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDEgPj4gMjQpICYgMHgwRl0gK1xyXG4gICAgICBIRVhfQ0hBUlNbKGgyID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDIgJiAweDBGXSArXHJcbiAgICAgIEhFWF9DSEFSU1soaDIgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgyID4+IDgpICYgMHgwRl0gK1xyXG4gICAgICBIRVhfQ0hBUlNbKGgyID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMiA+PiAxNikgJiAweDBGXSArXHJcbiAgICAgIEhFWF9DSEFSU1soaDIgPj4gMjgpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgyID4+IDI0KSAmIDB4MEZdICtcclxuICAgICAgSEVYX0NIQVJTWyhoMyA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2gzICYgMHgwRl0gK1xyXG4gICAgICBIRVhfQ0hBUlNbKGgzID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMyA+PiA4KSAmIDB4MEZdICtcclxuICAgICAgSEVYX0NIQVJTWyhoMyA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDMgPj4gMTYpICYgMHgwRl0gK1xyXG4gICAgICBIRVhfQ0hBUlNbKGgzID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMyA+PiAyNCkgJiAweDBGXTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbWV0aG9kIHRvU3RyaW5nXHJcbiAgICogQG1lbWJlcm9mIE1kNVxyXG4gICAqIEBpbnN0YW5jZVxyXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgaGFzaCBhcyBoZXggc3RyaW5nXHJcbiAgICogQHJldHVybnMge1N0cmluZ30gSGV4IHN0cmluZ1xyXG4gICAqIEBzZWUge0BsaW5rIG1kNS5oZXh9XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBoYXNoLnRvU3RyaW5nKCk7XHJcbiAgICovXHJcbiAgTWQ1LnByb3RvdHlwZS50b1N0cmluZyA9IE1kNS5wcm90b3R5cGUuaGV4O1xyXG5cclxuICAvKipcclxuICAgKiBAbWV0aG9kIGRpZ2VzdFxyXG4gICAqIEBtZW1iZXJvZiBNZDVcclxuICAgKiBAaW5zdGFuY2VcclxuICAgKiBAZGVzY3JpcHRpb24gT3V0cHV0IGhhc2ggYXMgYnl0ZXMgYXJyYXlcclxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEJ5dGVzIGFycmF5XHJcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmRpZ2VzdH1cclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGhhc2guZGlnZXN0KCk7XHJcbiAgICovXHJcbiAgTWQ1LnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGgwID0gdGhpcy5oMCwgaDEgPSB0aGlzLmgxLCBoMiA9IHRoaXMuaDIsIGgzID0gdGhpcy5oMztcclxuICAgIHJldHVybiBbXHJcbiAgICAgIGgwICYgMHhGRiwgKGgwID4+IDgpICYgMHhGRiwgKGgwID4+IDE2KSAmIDB4RkYsIChoMCA+PiAyNCkgJiAweEZGLFxyXG4gICAgICBoMSAmIDB4RkYsIChoMSA+PiA4KSAmIDB4RkYsIChoMSA+PiAxNikgJiAweEZGLCAoaDEgPj4gMjQpICYgMHhGRixcclxuICAgICAgaDIgJiAweEZGLCAoaDIgPj4gOCkgJiAweEZGLCAoaDIgPj4gMTYpICYgMHhGRiwgKGgyID4+IDI0KSAmIDB4RkYsXHJcbiAgICAgIGgzICYgMHhGRiwgKGgzID4+IDgpICYgMHhGRiwgKGgzID4+IDE2KSAmIDB4RkYsIChoMyA+PiAyNCkgJiAweEZGXHJcbiAgICBdO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBtZXRob2QgYXJyYXlcclxuICAgKiBAbWVtYmVyb2YgTWQ1XHJcbiAgICogQGluc3RhbmNlXHJcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIGJ5dGVzIGFycmF5XHJcbiAgICogQHJldHVybnMge0FycmF5fSBCeXRlcyBhcnJheVxyXG4gICAqIEBzZWUge0BsaW5rIG1kNS5hcnJheX1cclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGhhc2guYXJyYXkoKTtcclxuICAgKi9cclxuICBNZDUucHJvdG90eXBlLmFycmF5ID0gTWQ1LnByb3RvdHlwZS5kaWdlc3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBtZXRob2QgYXJyYXlCdWZmZXJcclxuICAgKiBAbWVtYmVyb2YgTWQ1XHJcbiAgICogQGluc3RhbmNlXHJcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBoYXNoIGFzIEFycmF5QnVmZmVyXHJcbiAgICogQHJldHVybnMge0FycmF5QnVmZmVyfSBBcnJheUJ1ZmZlclxyXG4gICAqIEBzZWUge0BsaW5rIG1kNS5hcnJheUJ1ZmZlcn1cclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGhhc2guYXJyYXlCdWZmZXIoKTtcclxuICAgKi9cclxuICBNZDUucHJvdG90eXBlLmFycmF5QnVmZmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5maW5hbGl6ZSgpO1xyXG5cclxuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMTYpO1xyXG4gICAgdmFyIGJsb2NrcyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xyXG4gICAgYmxvY2tzWzBdID0gdGhpcy5oMDtcclxuICAgIGJsb2Nrc1sxXSA9IHRoaXMuaDE7XHJcbiAgICBibG9ja3NbMl0gPSB0aGlzLmgyO1xyXG4gICAgYmxvY2tzWzNdID0gdGhpcy5oMztcclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG1ldGhvZCBidWZmZXJcclxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1heWJlIGNvbmZ1c2Ugd2l0aCBCdWZmZXIgaW4gbm9kZS5qcy4gUGxlYXNlIHVzZSBhcnJheUJ1ZmZlciBpbnN0ZWFkLlxyXG4gICAqIEBtZW1iZXJvZiBNZDVcclxuICAgKiBAaW5zdGFuY2VcclxuICAgKiBAZGVzY3JpcHRpb24gT3V0cHV0IGhhc2ggYXMgQXJyYXlCdWZmZXJcclxuICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IEFycmF5QnVmZmVyXHJcbiAgICogQHNlZSB7QGxpbmsgbWQ1LmJ1ZmZlcn1cclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGhhc2guYnVmZmVyKCk7XHJcbiAgICovXHJcbiAgTWQ1LnByb3RvdHlwZS5idWZmZXIgPSBNZDUucHJvdG90eXBlLmFycmF5QnVmZmVyO1xyXG5cclxuICAvKipcclxuICAgKiBAbWV0aG9kIGJhc2U2NFxyXG4gICAqIEBtZW1iZXJvZiBNZDVcclxuICAgKiBAaW5zdGFuY2VcclxuICAgKiBAZGVzY3JpcHRpb24gT3V0cHV0IGhhc2ggYXMgYmFzZTY0IHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGJhc2U2NCBzdHJpbmdcclxuICAgKiBAc2VlIHtAbGluayBtZDUuYmFzZTY0fVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogaGFzaC5iYXNlNjQoKTtcclxuICAgKi9cclxuICBNZDUucHJvdG90eXBlLmJhc2U2NCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB2MSwgdjIsIHYzLCBiYXNlNjRTdHIgPSAnJywgYnl0ZXMgPSB0aGlzLmFycmF5KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE1Oykge1xyXG4gICAgICB2MSA9IGJ5dGVzW2krK107XHJcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcclxuICAgICAgdjMgPSBieXRlc1tpKytdO1xyXG4gICAgICBiYXNlNjRTdHIgKz0gQkFTRTY0X0VOQ09ERV9DSEFSW3YxID4+PiAyXSArXHJcbiAgICAgICAgQkFTRTY0X0VOQ09ERV9DSEFSWyh2MSA8PCA0IHwgdjIgPj4+IDQpICYgNjNdICtcclxuICAgICAgICBCQVNFNjRfRU5DT0RFX0NIQVJbKHYyIDw8IDIgfCB2MyA+Pj4gNikgJiA2M10gK1xyXG4gICAgICAgIEJBU0U2NF9FTkNPREVfQ0hBUlt2MyAmIDYzXTtcclxuICAgIH1cclxuICAgIHYxID0gYnl0ZXNbaV07XHJcbiAgICBiYXNlNjRTdHIgKz0gQkFTRTY0X0VOQ09ERV9DSEFSW3YxID4+PiAyXSArXHJcbiAgICAgIEJBU0U2NF9FTkNPREVfQ0hBUlsodjEgPDwgNCkgJiA2M10gK1xyXG4gICAgICAnPT0nO1xyXG4gICAgcmV0dXJuIGJhc2U2NFN0cjtcclxuICB9O1xyXG5cclxuICB2YXIgZXhwb3J0cyA9IGNyZWF0ZU1ldGhvZCgpO1xyXG5cclxuICBpZiAoQ09NTU9OX0pTKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBtZDVcYlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE1kNSBoYXNoIGZ1bmN0aW9uLCBleHBvcnQgdG8gZ2xvYmFsIGluIGJyb3dzZXJzLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8VWludDhBcnJheXxBcnJheUJ1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIGhhc2hcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG1kNSBoYXNoZXNcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBtZDUoJycpOyAvLyBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZVxyXG4gICAgICogbWQ1KCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJyk7IC8vIDllMTA3ZDlkMzcyYmI2ODI2YmQ4MWQzNTQyYTQxOWQ2XHJcbiAgICAgKiBtZDUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuJyk7IC8vIGU0ZDkwOWMyOTBkMGZiMWNhMDY4ZmZhZGRmMjJjYmQwXHJcbiAgICAgKlxyXG4gICAgICogLy8gSXQgYWxzbyBzdXBwb3J0cyBVVEYtOCBlbmNvZGluZ1xyXG4gICAgICogbWQ1KCfkuK3mlocnKTsgLy8gYTdiYWMyMjM5ZmNkY2IzYTA2NzkwM2Q4MDc3YzRhMDdcclxuICAgICAqXHJcbiAgICAgKiAvLyBJdCBhbHNvIHN1cHBvcnRzIGJ5dGUgYEFycmF5YCwgYFVpbnQ4QXJyYXlgLCBgQXJyYXlCdWZmZXJgXHJcbiAgICAgKiBtZDUoW10pOyAvLyBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZVxyXG4gICAgICogbWQ1KG5ldyBVaW50OEFycmF5KFtdKSk7IC8vIGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlXHJcbiAgICAgKi9cclxuICAgIHJvb3QubWQ1ID0gZXhwb3J0cztcclxuICAgIGlmIChBTUQpIHtcclxuICAgICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZXhwb3J0cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59KSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///26\n");
- /***/ }),
- /* 27 */
- /*!********************************************************!*\
- !*** ./node_modules/node-libs-browser/mock/process.js ***!
- \********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("exports.nextTick = function nextTick(fn) {\n\tsetTimeout(fn, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = __webpack_require__(/*! path */ 28);\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLDBCQUEwQixtQkFBTyxDQUFDLGNBQU07QUFDeEM7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMubmV4dFRpY2sgPSBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuXHRzZXRUaW1lb3V0KGZuLCAwKTtcbn07XG5cbmV4cG9ydHMucGxhdGZvcm0gPSBleHBvcnRzLmFyY2ggPSBcbmV4cG9ydHMuZXhlY1BhdGggPSBleHBvcnRzLnRpdGxlID0gJ2Jyb3dzZXInO1xuZXhwb3J0cy5waWQgPSAxO1xuZXhwb3J0cy5icm93c2VyID0gdHJ1ZTtcbmV4cG9ydHMuZW52ID0ge307XG5leHBvcnRzLmFyZ3YgPSBbXTtcblxuZXhwb3J0cy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0dGhyb3cgbmV3IEVycm9yKCdObyBzdWNoIG1vZHVsZS4gKFBvc3NpYmx5IG5vdCB5ZXQgbG9hZGVkKScpXG59O1xuXG4oZnVuY3Rpb24gKCkge1xuICAgIHZhciBjd2QgPSAnLyc7XG4gICAgdmFyIHBhdGg7XG4gICAgZXhwb3J0cy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjd2QgfTtcbiAgICBleHBvcnRzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgICAgICBpZiAoIXBhdGgpIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4gICAgICAgIGN3ZCA9IHBhdGgucmVzb2x2ZShkaXIsIGN3ZCk7XG4gICAgfTtcbn0pKCk7XG5cbmV4cG9ydHMuZXhpdCA9IGV4cG9ydHMua2lsbCA9IFxuZXhwb3J0cy51bWFzayA9IGV4cG9ydHMuZGxvcGVuID0gXG5leHBvcnRzLnVwdGltZSA9IGV4cG9ydHMubWVtb3J5VXNhZ2UgPSBcbmV4cG9ydHMudXZDb3VudGVycyA9IGZ1bmN0aW9uKCkge307XG5leHBvcnRzLmZlYXR1cmVzID0ge307XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///27\n");
- /***/ }),
- /* 28 */
- /*!***********************************************!*\
- !*** ./node_modules/path-browserify/index.js ***!
- \***********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 27)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsUUFBUTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixJQUFJO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyw4QkFBOEI7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLG9CQUFvQjtBQUM5QjtBQUNBOztBQUVBO0FBQ0EsVUFBVSxVQUFVO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gcmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIGFycmF5IHdpdGggZGlyZWN0b3J5IG5hbWVzIHRoZXJlXG4vLyBtdXN0IGJlIG5vIHNsYXNoZXMsIGVtcHR5IGVsZW1lbnRzLCBvciBkZXZpY2UgbmFtZXMgKGM6XFwpIGluIHRoZSBhcnJheVxuLy8gKHNvIGFsc28gbm8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyAtIGl0IGRvZXMgbm90IGRpc3Rpbmd1aXNoXG4vLyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMpXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheShwYXJ0cywgYWxsb3dBYm92ZVJvb3QpIHtcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbnZhciBzcGxpdFBhdGhSZSA9XG4gICAgL14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/fCkoXFwuW14uXFwvXSp8KSkoPzpbXFwvXSopJC87XG52YXIgc3BsaXRQYXRoID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgcmV0dXJuIHNwbGl0UGF0aFJlLmV4ZWMoZmlsZW5hbWUpLnNsaWNlKDEpO1xufTtcblxuLy8gcGF0aC5yZXNvbHZlKFtmcm9tIC4uLl0sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5yZXNvbHZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNvbHZlZFBhdGggPSAnJyxcbiAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIHZhciBwYXRoID0gKGkgPj0gMCkgPyBhcmd1bWVudHNbaV0gOiBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBhbmQgaW52YWxpZCBlbnRyaWVzXG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9IGVsc2UgaWYgKCFwYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHJlc29sdmVkUGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuICEhcDtcbiAgfSksICFyZXNvbHZlZEFic29sdXRlKS5qb2luKCcvJyk7XG5cbiAgcmV0dXJuICgocmVzb2x2ZWRBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHJlc29sdmVkUGF0aCkgfHwgJy4nO1xufTtcblxuLy8gcGF0aC5ub3JtYWxpemUocGF0aClcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMubm9ybWFsaXplID0gZnVuY3Rpb24ocGF0aCkge1xuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKSxcbiAgICAgIHRyYWlsaW5nU2xhc2ggPSBzdWJzdHIocGF0aCwgLTEpID09PSAnLyc7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuICEhcDtcbiAgfSksICFpc0Fic29sdXRlKS5qb2luKCcvJyk7XG5cbiAgaWYgKCFwYXRoICYmICFpc0Fic29sdXRlKSB7XG4gICAgcGF0aCA9ICcuJztcbiAgfVxuICBpZiAocGF0aCAmJiB0cmFpbGluZ1NsYXNoKSB7XG4gICAgcGF0aCArPSAnLyc7XG4gIH1cblxuICByZXR1cm4gKGlzQWJzb2x1dGUgPyAnLycgOiAnJykgKyBwYXRoO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuam9pbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGF0aHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICByZXR1cm4gZXhwb3J0cy5ub3JtYWxpemUoZmlsdGVyKHBhdGhzLCBmdW5jdGlvbihwLCBpbmRleCkge1xuICAgIGlmICh0eXBlb2YgcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9KS5qb2luKCcvJykpO1xufTtcblxuXG4vLyBwYXRoLnJlbGF0aXZlKGZyb20sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5yZWxhdGl2ZSA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gIGZyb20gPSBleHBvcnRzLnJlc29sdmUoZnJvbSkuc3Vic3RyKDEpO1xuICB0byA9IGV4cG9ydHMucmVzb2x2ZSh0bykuc3Vic3RyKDEpO1xuXG4gIGZ1bmN0aW9uIHRyaW0oYXJyKSB7XG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICBmb3IgKDsgc3RhcnQgPCBhcnIubGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSBhcnIubGVuZ3RoIC0gMTtcbiAgICBmb3IgKDsgZW5kID49IDA7IGVuZC0tKSB7XG4gICAgICBpZiAoYXJyW2VuZF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xuICB9XG5cbiAgdmFyIGZyb21QYXJ0cyA9IHRyaW0oZnJvbS5zcGxpdCgnLycpKTtcbiAgdmFyIHRvUGFydHMgPSB0cmltKHRvLnNwbGl0KCcvJykpO1xuXG4gIHZhciBsZW5ndGggPSBNYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLCB0b1BhcnRzLmxlbmd0aCk7XG4gIHZhciBzYW1lUGFydHNMZW5ndGggPSBsZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZnJvbVBhcnRzW2ldICE9PSB0b1BhcnRzW2ldKSB7XG4gICAgICBzYW1lUGFydHNMZW5ndGggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG91dHB1dFBhcnRzID0gW107XG4gIGZvciAodmFyIGkgPSBzYW1lUGFydHNMZW5ndGg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRwdXRQYXJ0cy5wdXNoKCcuLicpO1xuICB9XG5cbiAgb3V0cHV0UGFydHMgPSBvdXRwdXRQYXJ0cy5jb25jYXQodG9QYXJ0cy5zbGljZShzYW1lUGFydHNMZW5ndGgpKTtcblxuICByZXR1cm4gb3V0cHV0UGFydHMuam9pbignLycpO1xufTtcblxuZXhwb3J0cy5zZXAgPSAnLyc7XG5leHBvcnRzLmRlbGltaXRlciA9ICc6JztcblxuZXhwb3J0cy5kaXJuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICB2YXIgcmVzdWx0ID0gc3BsaXRQYXRoKHBhdGgpLFxuICAgICAgcm9vdCA9IHJlc3VsdFswXSxcbiAgICAgIGRpciA9IHJlc3VsdFsxXTtcblxuICBpZiAoIXJvb3QgJiYgIWRpcikge1xuICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlclxuICAgIHJldHVybiAnLic7XG4gIH1cblxuICBpZiAoZGlyKSB7XG4gICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2hcbiAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIGRpci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiByb290ICsgZGlyO1xufTtcblxuXG5leHBvcnRzLmJhc2VuYW1lID0gZnVuY3Rpb24ocGF0aCwgZXh0KSB7XG4gIHZhciBmID0gc3BsaXRQYXRoKHBhdGgpWzJdO1xuICAvLyBUT0RPOiBtYWtlIHRoaXMgY29tcGFyaXNvbiBjYXNlLWluc2Vuc2l0aXZlIG9uIHdpbmRvd3M/XG4gIGlmIChleHQgJiYgZi5zdWJzdHIoLTEgKiBleHQubGVuZ3RoKSA9PT0gZXh0KSB7XG4gICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59O1xuXG5cbmV4cG9ydHMuZXh0bmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHNwbGl0UGF0aChwYXRoKVszXTtcbn07XG5cbmZ1bmN0aW9uIGZpbHRlciAoeHMsIGYpIHtcbiAgICBpZiAoeHMuZmlsdGVyKSByZXR1cm4geHMuZmlsdGVyKGYpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmKHhzW2ldLCBpLCB4cykpIHJlcy5wdXNoKHhzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgLSBuZWdhdGl2ZSBpbmRleCBkb24ndCB3b3JrIGluIElFOFxudmFyIHN1YnN0ciA9ICdhYicuc3Vic3RyKC0xKSA9PT0gJ2InXG4gICAgPyBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7IHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pIH1cbiAgICA6IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSBzdHIubGVuZ3RoICsgc3RhcnQ7XG4gICAgICAgIHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pO1xuICAgIH1cbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///28\n");
- /***/ }),
- /* 29 */
- /*!****************************************!*\
- !*** (webpack)/buildin/amd-options.js ***!
- \****************************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJmaWxlIjoiMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///29\n");
- /***/ }),
- /* 30 */
- /*!***************************************!*\
- !*** E:/sheverAPP/APP/store/index.js ***!
- \***************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 3));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 31));\n\nvar _md = _interopRequireDefault(__webpack_require__(/*! @/assets/scripts/md5 */ 26));\nvar _env = _interopRequireDefault(__webpack_require__(/*! @/configs/env */ 18));\nvar _http = _interopRequireDefault(__webpack_require__(/*! @/configs/http */ 17));\nvar _chart = _interopRequireDefault(__webpack_require__(/*! @/store/modules/chart */ 32));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}\n\n_vue.default.use(_vuex.default);\n\nvar store = new _vuex.default.Store({\n strict: !_env.default.isProduction,\n modules: {\n chart: _chart.default },\n\n state: {\n loginUser: {},\n token: '',\n isLoading: false },\n\n mutations: {\n setLoginUser: function setLoginUser(state, loginUser) {\n state.loginUser = loginUser;\n },\n setToken: function setToken(state, token) {\n state.token = token;\n },\n setLoading: function setLoading(state, flag) {\n state.isLoading = flag;\n } },\n\n actions: {\n login: function login(_ref, _ref2) {var commit = _ref.commit;var username = _ref2.username,password = _ref2.password;\n commit('setLoading', true);\n // console.log(`login actions: `, arguments);\n var encryptPwd = (0, _md.default)(password);\n var data = { username: username, password: encryptPwd };\n return _http.default.sz.post('/TAdmin/userLogin', data).\n then(function (res) {\n // const { token, userObj } = res.data;\n //用户名缓存\n uni.setStorageSync(\"name\", res.data.name);\n var userObj = res.data;\n uni.setStorageSync(\"globalUser\", res.data);\n commit('setLoading', false);\n commit('setLoginUser', userObj);\n // commit('setToken', token);\n }, function (_) {\n commit('setLoading', false);\n return Promise.reject();\n });\n },\n loginWXCZ: function loginWXCZ(_ref3, parm) {var commit = _ref3.commit;\n commit('setLoading', true);\n return _http.default.sz.post('/TWeixin/weiXinZhuce', parm).\n then(function (res) {\n //用户名缓存\n uni.setStorageSync(\"name\", res.data.name);\n var userObj = res.data;\n commit('setLoading', false);\n commit('setLoginUser', userObj);\n\n return res;\n }, function (_) {\n commit('setLoading', false);\n return Promise.reject();\n });\n },\n loginWX: function loginWX(_ref4, parm) {var commit = _ref4.commit;\n commit('setLoading', true);\n return _http.default.sz.post('/TWeixin/weiXinLogin', parm).\n then(function (res) {\n //用户名缓存\n uni.setStorageSync(\"name\", res.data.name);\n var userObj = res.data;\n commit('setLoading', false);\n commit('setLoginUser', userObj);\n\n return res;\n }, function (_) {\n commit('setLoading', false);\n return Promise.reject();\n });\n } } });var _default =\n\n\n\nstore;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJzdHJpY3QiLCJjb25maWdzIiwiaXNQcm9kdWN0aW9uIiwibW9kdWxlcyIsImNoYXJ0Iiwic3RhdGUiLCJsb2dpblVzZXIiLCJ0b2tlbiIsImlzTG9hZGluZyIsIm11dGF0aW9ucyIsInNldExvZ2luVXNlciIsInNldFRva2VuIiwic2V0TG9hZGluZyIsImZsYWciLCJhY3Rpb25zIiwibG9naW4iLCJjb21taXQiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZW5jcnlwdFB3ZCIsImRhdGEiLCJhcGlzIiwic3oiLCJwb3N0IiwidGhlbiIsInJlcyIsInVuaSIsInNldFN0b3JhZ2VTeW5jIiwibmFtZSIsInVzZXJPYmoiLCJfIiwiUHJvbWlzZSIsInJlamVjdCIsImxvZ2luV1hDWiIsInBhcm0iLCJsb2dpbldYIl0sIm1hcHBpbmdzIjoia0lBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwRjs7QUFFQUEsYUFBSUMsR0FBSixDQUFRQyxhQUFSOztBQUVBLElBQU1DLEtBQUssR0FBRyxJQUFJRCxjQUFLRSxLQUFULENBQWU7QUFDNUJDLFFBQU0sRUFBRSxDQUFDQyxhQUFRQyxZQURXO0FBRTVCQyxTQUFPLEVBQUU7QUFDUkMsU0FBSyxFQUFMQSxjQURRLEVBRm1COztBQUs1QkMsT0FBSyxFQUFFO0FBQ05DLGFBQVMsRUFBRSxFQURMO0FBRU5DLFNBQUssRUFBRSxFQUZEO0FBR05DLGFBQVMsRUFBRSxLQUhMLEVBTHFCOztBQVU1QkMsV0FBUyxFQUFFO0FBQ1ZDLGdCQURVLHdCQUNHTCxLQURILEVBQ1VDLFNBRFYsRUFDcUI7QUFDOUJELFdBQUssQ0FBQ0MsU0FBTixHQUFrQkEsU0FBbEI7QUFDQSxLQUhTO0FBSVZLLFlBSlUsb0JBSUROLEtBSkMsRUFJTUUsS0FKTixFQUlhO0FBQ3RCRixXQUFLLENBQUNFLEtBQU4sR0FBY0Es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ZixDQUFOO0FBQ0EsZUFBT2UsT0FBTyxDQUFDQyxNQUFSLEVBQVA7QUFDQSxPQVpLLENBQVA7QUFhQSxLQXBETyxFQXJCbUIsRUFBZixDQUFkLEM7Ozs7QUE2RWVsQyxLIiwiZmlsZSI6IjMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5pbXBvcnQgVnVleCBmcm9tICd2dWV4JztcclxuXHJcbmltcG9ydCBNRDUgZnJvbSAnQC9hc3NldHMvc2NyaXB0cy9tZDUnO1xyXG5pbXBvcnQgY29uZmlncyBmcm9tICdAL2NvbmZpZ3MvZW52JztcclxuaW1wb3J0IGFwaXMgZnJvbSAnQC9jb25maWdzL2h0dHAnO1xyXG5pbXBvcnQgY2hhcnQgZnJvbSAnQC9zdG9yZS9tb2R1bGVzL2NoYXJ0JztcclxuXHJcblZ1ZS51c2UoVnVleCk7XHJcblxyXG5jb25zdCBzdG9yZSA9IG5ldyBWdWV4LlN0b3JlKHtcclxuXHRzdHJpY3Q6ICFjb25maWdzLmlzUHJvZHVjdGlvbixcclxuXHRtb2R1bGVzOiB7XHJcblx0XHRjaGFydFxyXG5cdH0sXHJcblx0c3RhdGU6IHtcclxuXHRcdGxvZ2luVXNlcjoge30sXHJcblx0XHR0b2tlbjogJycsXHJcblx0XHRpc0xvYWRpbmc6IGZhbHNlLFxyXG5cdH0sXHJcblx0bXV0YXRpb25zOiB7XHJcblx0XHRzZXRMb2dpblVzZXIoc3RhdGUsIGxvZ2luVXNlcikge1xyXG5cdFx0XHRzdGF0ZS5sb2dpblVzZXIgPSBsb2dpblVzZXI7XHJcblx0XHR9LFxyXG5cdFx0c2V0VG9rZW4oc3RhdGUsIHRva2VuKSB7XHJcblx0XHRcdHN0YXRlLnRva2VuID0gdG9rZW47XHJcblx0XHR9LFxyXG5cdFx0c2V0TG9hZGluZyhzdGF0ZSwgZmxhZykge1xyXG5cdFx0XHRzdGF0ZS5pc0xvYWRpbmcgPSBmbGFnO1xyXG5cdFx0fSxcclxuXHR9LFxyXG5cdGFjdGlvbnM6IHtcclxuXHRcdGxvZ2luKHsgY29tbWl0IH0sIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH0pIHtcclxuXHRcdFx0Y29tbWl0KCdzZXRMb2FkaW5nJywgdHJ1ZSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGBsb2dpbiBhY3Rpb25zOiBgLCBhcmd1bWVudHMpO1xyXG5cdFx0XHRjb25zdCBlbmNyeXB0UHdkID0gTUQ1KHBhc3N3b3JkKTtcclxuXHRcdFx0Y29uc3QgZGF0YSA9IHsgdXNlcm5hbWUsIHBhc3N3b3JkOiBlbmNyeXB0UHdkIH07XHJcblx0XHRcdHJldHVybiBhcGlzLnN6LnBvc3QoJy9UQWRtaW4vdXNlckxvZ2luJywgZGF0YSlcclxuXHRcdFx0XHQudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0Ly8gY29uc3QgeyB0b2tlbiwgdXNlck9iaiB9ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHQvL+eUqOaIt+WQjee8k+WtmFxyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKFwibmFtZVwiLCByZXMuZGF0YS5uYW1lKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVzZXJPYmogPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYyhcImdsb2JhbFVzZXJcIiwgcmVzLmRhdGEpO1xyXG5cdFx0XHRcdFx0Y29tbWl0KCdzZXRMb2FkaW5nJywgZmFsc2UpO1xyXG5cdFx0XHRcdFx0Y29tbWl0KCdzZXRMb2dpblVzZXInLCB1c2VyT2JqKTtcclxuXHRcdFx0XHRcdC8vIGNvbW1pdCgnc2V0VG9rZW4nLCB0b2tlbik7XHJcblx0XHRcdFx0fSwgXyA9PiB7XHJcblx0XHRcdFx0XHRjb21taXQoJ3NldExvYWRpbmcnLCBmYWxzZSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0sXHJcblx0XHRsb2dpbldYQ1ooeyBjb21taXQgfSxwYXJtKSB7XHJcblx0XHRcdGNvbW1pdCgnc2V0TG9hZGluZycsIHRydWUpO1xyXG5cdFx0XHRyZXR1cm4gYXBpcy5zei5wb3N0KCcvVFdlaXhpbi93ZWlYaW5aaHVjZScscGFybSlcclxuXHRcdFx0XHQudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0Ly/nlKjmiLflkI3nvJPlrZhcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYyhcIm5hbWVcIiwgcmVzLmRhdGEubmFtZSk7XHJcblx0XHRcdFx0XHRjb25zdCB1c2VyT2JqID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRjb21taXQoJ3NldExvYWRpbmcnLCBmYWxzZSk7XHJcblx0XHRcdFx0XHRjb21taXQoJ3NldExvZ2luVXNlcicsIHVzZXJPYmopO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzO1xyXG5cdFx0XHRcdH0sIF8gPT4ge1xyXG5cdFx0XHRcdFx0Y29tbWl0KCdzZXRMb2FkaW5nJywgZmFsc2UpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0bG9naW5XWCh7IGNvbW1pdCB9LHBhcm0pIHtcclxuXHRcdFx0Y29tbWl0KCdzZXRMb2FkaW5nJywgdHJ1ZSk7XHJcblx0XHRcdHJldHVybiBhcGlzLnN6LnBvc3QoJy9UV2VpeGluL3dlaVhpbkxvZ2luJyxwYXJtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHQvL+eUqOaIt+WQjee8k+WtmFxyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKFwibmFtZVwiLCByZXMuZGF0YS5uYW1lKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVzZXJPYmogPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdGNvbW1pdCgnc2V0TG9hZGluZycsIGZhbHNlKTtcclxuXHRcdFx0XHRcdGNvbW1pdCgnc2V0TG9naW5Vc2VyJywgdXNlck9iaik7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdHJldHVybiByZXM7XHJcblx0XHRcdFx0fSwgXyA9PiB7XHJcblx0XHRcdFx0XHRjb21taXQoJ3NldExvYWRpbmcnLCBmYWxzZSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc3RvcmU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///30\n");
- /***/ }),
- /* 31 */
- /*!********************************************!*\
- !*** ./node_modules/vuex/dist/vuex.esm.js ***!
- \********************************************/
- /*! exports provided: Store, install, mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers, default */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Store\", function() { return Store; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"install\", function() { return install; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapState\", function() { return mapState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapMutations\", function() { return mapMutations; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapGetters\", function() { return mapGetters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapActions\", function() { return mapActions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createNamespacedHelpers\", function() { return createNamespacedHelpers; });\n/**\n * vuex v3.0.1\n * (c) 2017 Evan You\n * @license MIT\n */\nvar applyMixin = function (Vue) {\n var version = Number(Vue.version.split('.')[0]);\n\n if (version >= 2) {\n Vue.mixin({ beforeCreate: vuexInit });\n } else {\n // override init and inject vuex init procedure\n // for 1.x backwards compatibility.\n var _init = Vue.prototype._init;\n Vue.prototype._init = function (options) {\n if ( options === void 0 ) options = {};\n\n options.init = options.init\n ? [vuexInit].concat(options.init)\n : vuexInit;\n _init.call(this, options);\n };\n }\n\n /**\n * Vuex init hook, injected into each instances init hooks list.\n */\n\n function vuexInit () {\n var options = this.$options;\n // store injection\n if (options.store) {\n this.$store = typeof options.store === 'function'\n ? options.store()\n : options.store;\n } else if (options.parent && options.parent.$store) {\n this.$store = options.parent.$store;\n }\n }\n};\n\nvar devtoolHook =\n typeof window !== 'undefined' &&\n window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\nfunction devtoolPlugin (store) {\n if (!devtoolHook) { return }\n\n store._devtoolHook = devtoolHook;\n\n devtoolHook.emit('vuex:init', store);\n\n devtoolHook.on('vuex:travel-to-state', function (targetState) {\n store.replaceState(targetState);\n });\n\n store.subscribe(function (mutation, state) {\n devtoolHook.emit('vuex:mutation', mutation, state);\n });\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\n/**\n * Deep copy the given object considering circular structure.\n * This function caches all nested objects and its copies.\n * If it detects circular structure, use cached copy to avoid infinite loop.\n *\n * @param {*} obj\n * @param {Array<Object>} cache\n * @return {*}\n */\n\n\n/**\n * forEach for object\n */\nfunction forEachValue (obj, fn) {\n Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n}\n\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\nfunction isPromise (val) {\n return val && typeof val.then === 'function'\n}\n\nfunction assert (condition, msg) {\n if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n}\n\nvar Module = function Module (rawModule, runtime) {\n this.runtime = runtime;\n this._children = Object.create(null);\n this._rawModule = rawModule;\n var rawState = rawModule.state;\n this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n};\n\nvar prototypeAccessors$1 = { namespaced: { configurable: true } };\n\nprototypeAccessors$1.namespaced.get = function () {\n return !!this._rawModule.namespaced\n};\n\nModule.prototype.addChild = function addChild (key, module) {\n this._children[key] = module;\n};\n\nModule.prototype.removeChild = function removeChild (key) {\n delete this._children[key];\n};\n\nModule.prototype.getChild = function getChild (key) {\n return this._children[key]\n};\n\nModule.prototype.update = function update (rawModule) {\n this._rawModule.namespaced = rawModule.namespaced;\n if (rawModule.actions) {\n this._rawModule.actions = rawModule.actions;\n }\n if (rawModule.mutations) {\n this._rawModule.mutations = rawModule.mutations;\n }\n if (rawModule.getters) {\n this._rawModule.getters = rawModule.getters;\n }\n};\n\nModule.prototype.forEachChild = function forEachChild (fn) {\n forEachValue(this._children, fn);\n};\n\nModule.prototype.forEachGetter = function forEachGetter (fn) {\n if (this._rawModule.getters) {\n forEachValue(this._rawModule.getters, fn);\n }\n};\n\nModule.prototype.forEachAction = function forEachAction (fn) {\n if (this._rawModule.actions) {\n forEachValue(this._rawModule.actions, fn);\n }\n};\n\nModule.prototype.forEachMutation = function forEachMutation (fn) {\n if (this._rawModule.mutations) {\n forEachValue(this._rawModule.mutations, fn);\n }\n};\n\nObject.defineProperties( Module.prototype, prototypeAccessors$1 );\n\nvar ModuleCollection = function ModuleCollection (rawRootModule) {\n // register root module (Vuex.Store options)\n this.register([], rawRootModule, false);\n};\n\nModuleCollection.prototype.get = function get (path) {\n return path.reduce(function (module, key) {\n return module.getChild(key)\n }, this.root)\n};\n\nModuleCollection.prototype.getNamespace = function getNamespace (path) {\n var module = this.root;\n return path.reduce(function (namespace, key) {\n module = module.getChild(key);\n return namespace + (module.namespaced ? key + '/' : '')\n }, '')\n};\n\nModuleCollection.prototype.update = function update$1 (rawRootModule) {\n update([], this.root, rawRootModule);\n};\n\nModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n var this$1 = this;\n if ( runtime === void 0 ) runtime = true;\n\n if (true) {\n assertRawModule(path, rawModule);\n }\n\n var newModule = new Module(rawModule, runtime);\n if (path.length === 0) {\n this.root = newModule;\n } else {\n var parent = this.get(path.slice(0, -1));\n parent.addChild(path[path.length - 1], newModule);\n }\n\n // register nested modules\n if (rawModule.modules) {\n forEachValue(rawModule.modules, function (rawChildModule, key) {\n this$1.register(path.concat(key), rawChildModule, runtime);\n });\n }\n};\n\nModuleCollection.prototype.unregister = function unregister (path) {\n var parent = this.get(path.slice(0, -1));\n var key = path[path.length - 1];\n if (!parent.getChild(key).runtime) { return }\n\n parent.removeChild(key);\n};\n\nfunction update (path, targetModule, newModule) {\n if (true) {\n assertRawModule(path, newModule);\n }\n\n // update target module\n targetModule.update(newModule);\n\n // update nested modules\n if (newModule.modules) {\n for (var key in newModule.modules) {\n if (!targetModule.getChild(key)) {\n if (true) {\n console.warn(\n \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n 'manual reload is needed'\n );\n }\n return\n }\n update(\n path.concat(key),\n targetModule.getChild(key),\n newModule.modules[key]\n );\n }\n }\n}\n\nvar functionAssert = {\n assert: function (value) { return typeof value === 'function'; },\n expected: 'function'\n};\n\nvar objectAssert = {\n assert: function (value) { return typeof value === 'function' ||\n (typeof value === 'object' && typeof value.handler === 'function'); },\n expected: 'function or object with \"handler\" function'\n};\n\nvar assertTypes = {\n getters: functionAssert,\n mutations: functionAssert,\n actions: objectAssert\n};\n\nfunction assertRawModule (path, rawModule) {\n Object.keys(assertTypes).forEach(function (key) {\n if (!rawModule[key]) { return }\n\n var assertOptions = assertTypes[key];\n\n forEachValue(rawModule[key], function (value, type) {\n assert(\n assertOptions.assert(value),\n makeAssertionMessage(path, key, type, value, assertOptions.expected)\n );\n });\n });\n}\n\nfunction makeAssertionMessage (path, key, type, value, expected) {\n var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n if (path.length > 0) {\n buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n }\n buf += \" is \" + (JSON.stringify(value)) + \".\";\n return buf\n}\n\nvar Vue; // bind on install\n\nvar Store = function Store (options) {\n var this$1 = this;\n if ( options === void 0 ) options = {};\n\n // Auto install if it is not done yet and `window` has `Vue`.\n // To allow users to avoid auto-installation in some cases,\n // this code should be placed here. See #731\n if (!Vue && typeof window !== 'undefined' && window.Vue) {\n install(window.Vue);\n }\n\n if (true) {\n assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n assert(this instanceof Store, \"Store must be called with the new operator.\");\n }\n\n var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n var strict = options.strict; if ( strict === void 0 ) strict = false;\n\n var state = options.state; if ( state === void 0 ) state = {};\n if (typeof state === 'function') {\n state = state() || {};\n }\n\n // store internal state\n this._committing = false;\n this._actions = Object.create(null);\n this._actionSubscribers = [];\n this._mutations = Object.create(null);\n this._wrappedGetters = Object.create(null);\n this._modules = new ModuleCollection(options);\n this._modulesNamespaceMap = Object.create(null);\n this._subscribers = [];\n this._watcherVM = new Vue();\n\n // bind commit and dispatch to self\n var store = this;\n var ref = this;\n var dispatch = ref.dispatch;\n var commit = ref.commit;\n this.dispatch = function boundDispatch (type, payload) {\n return dispatch.call(store, type, payload)\n };\n this.commit = function boundCommit (type, payload, options) {\n return commit.call(store, type, payload, options)\n };\n\n // strict mode\n this.strict = strict;\n\n // init root module.\n // this also recursively registers all sub-modules\n // and collects all module getters inside this._wrappedGetters\n installModule(this, state, [], this._modules.root);\n\n // initialize the store vm, which is responsible for the reactivity\n // (also registers _wrappedGetters as computed properties)\n resetStoreVM(this, state);\n\n // apply plugins\n plugins.forEach(function (plugin) { return plugin(this$1); });\n\n if (Vue.config.devtools) {\n devtoolPlugin(this);\n }\n};\n\nvar prototypeAccessors = { state: { configurable: true } };\n\nprototypeAccessors.state.get = function () {\n return this._vm._data.$$state\n};\n\nprototypeAccessors.state.set = function (v) {\n if (true) {\n assert(false, \"Use store.replaceState() to explicit replace store state.\");\n }\n};\n\nStore.prototype.commit = function commit (_type, _payload, _options) {\n var this$1 = this;\n\n // check object-style commit\n var ref = unifyObjectStyle(_type, _payload, _options);\n var type = ref.type;\n var payload = ref.payload;\n var options = ref.options;\n\n var mutation = { type: type, payload: payload };\n var entry = this._mutations[type];\n if (!entry) {\n if (true) {\n console.error((\"[vuex] unknown mutation type: \" + type));\n }\n return\n }\n this._withCommit(function () {\n entry.forEach(function commitIterator (handler) {\n handler(payload);\n });\n });\n this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n\n if (\n true &&\n options && options.silent\n ) {\n console.warn(\n \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n 'Use the filter functionality in the vue-devtools'\n );\n }\n};\n\nStore.prototype.dispatch = function dispatch (_type, _payload) {\n var this$1 = this;\n\n // check object-style dispatch\n var ref = unifyObjectStyle(_type, _payload);\n var type = ref.type;\n var payload = ref.payload;\n\n var action = { type: type, payload: payload };\n var entry = this._actions[type];\n if (!entry) {\n if (true) {\n console.error((\"[vuex] unknown action type: \" + type));\n }\n return\n }\n\n this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); });\n\n return entry.length > 1\n ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n : entry[0](payload)\n};\n\nStore.prototype.subscribe = function subscribe (fn) {\n return genericSubscribe(fn, this._subscribers)\n};\n\nStore.prototype.subscribeAction = function subscribeAction (fn) {\n return genericSubscribe(fn, this._actionSubscribers)\n};\n\nStore.prototype.watch = function watch (getter, cb, options) {\n var this$1 = this;\n\n if (true) {\n assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n }\n return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n};\n\nStore.prototype.replaceState = function replaceState (state) {\n var this$1 = this;\n\n this._withCommit(function () {\n this$1._vm._data.$$state = state;\n });\n};\n\nStore.prototype.registerModule = function registerModule (path, rawModule, options) {\n if ( options === void 0 ) options = {};\n\n if (typeof path === 'string') { path = [path]; }\n\n if (true) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n assert(path.length > 0, 'cannot register the root module by using registerModule.');\n }\n\n this._modules.register(path, rawModule);\n installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n // reset store to update getters...\n resetStoreVM(this, this.state);\n};\n\nStore.prototype.unregisterModule = function unregisterModule (path) {\n var this$1 = this;\n\n if (typeof path === 'string') { path = [path]; }\n\n if (true) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n }\n\n this._modules.unregister(path);\n this._withCommit(function () {\n var parentState = getNestedState(this$1.state, path.slice(0, -1));\n Vue.delete(parentState, path[path.length - 1]);\n });\n resetStore(this);\n};\n\nStore.prototype.hotUpdate = function hotUpdate (newOptions) {\n this._modules.update(newOptions);\n resetStore(this, true);\n};\n\nStore.prototype._withCommit = function _withCommit (fn) {\n var committing = this._committing;\n this._committing = true;\n fn();\n this._committing = committing;\n};\n\nObject.defineProperties( Store.prototype, prototypeAccessors );\n\nfunction genericSubscribe (fn, subs) {\n if (subs.indexOf(fn) < 0) {\n subs.push(fn);\n }\n return function () {\n var i = subs.indexOf(fn);\n if (i > -1) {\n subs.splice(i, 1);\n }\n }\n}\n\nfunction resetStore (store, hot) {\n store._actions = Object.create(null);\n store._mutations = Object.create(null);\n store._wrappedGetters = Object.create(null);\n store._modulesNamespaceMap = Object.create(null);\n var state = store.state;\n // init all modules\n installModule(store, state, [], store._modules.root, true);\n // reset vm\n resetStoreVM(store, state, hot);\n}\n\nfunction resetStoreVM (store, state, hot) {\n var oldVm = store._vm;\n\n // bind store public getters\n store.getters = {};\n var wrappedGetters = store._wrappedGetters;\n var computed = {};\n forEachValue(wrappedGetters, function (fn, key) {\n // use computed to leverage its lazy-caching mechanism\n computed[key] = function () { return fn(store); };\n Object.defineProperty(store.getters, key, {\n get: function () { return store._vm[key]; },\n enumerable: true // for local getters\n });\n });\n\n // use a Vue instance to store the state tree\n // suppress warnings just in case the user has added\n // some funky global mixins\n var silent = Vue.config.silent;\n Vue.config.silent = true;\n store._vm = new Vue({\n data: {\n $$state: state\n },\n computed: computed\n });\n Vue.config.silent = silent;\n\n // enable strict mode for new vm\n if (store.strict) {\n enableStrictMode(store);\n }\n\n if (oldVm) {\n if (hot) {\n // dispatch changes in all subscribed watchers\n // to force getter re-evaluation for hot reloading.\n store._withCommit(function () {\n oldVm._data.$$state = null;\n });\n }\n Vue.nextTick(function () { return oldVm.$destroy(); });\n }\n}\n\nfunction installModule (store, rootState, path, module, hot) {\n var isRoot = !path.length;\n var namespace = store._modules.getNamespace(path);\n\n // register in namespace map\n if (module.namespaced) {\n store._modulesNamespaceMap[namespace] = module;\n }\n\n // set state\n if (!isRoot && !hot) {\n var parentState = getNestedState(rootState, path.slice(0, -1));\n var moduleName = path[path.length - 1];\n store._withCommit(function () {\n Vue.set(parentState, moduleName, module.state);\n });\n }\n\n var local = module.context = makeLocalContext(store, namespace, path);\n\n module.forEachMutation(function (mutation, key) {\n var namespacedType = namespace + key;\n registerMutation(store, namespacedType, mutation, local);\n });\n\n module.forEachAction(function (action, key) {\n var type = action.root ? key : namespace + key;\n var handler = action.handler || action;\n registerAction(store, type, handler, local);\n });\n\n module.forEachGetter(function (getter, key) {\n var namespacedType = namespace + key;\n registerGetter(store, namespacedType, getter, local);\n });\n\n module.forEachChild(function (child, key) {\n installModule(store, rootState, path.concat(key), child, hot);\n });\n}\n\n/**\n * make localized dispatch, commit, getters and state\n * if there is no namespace, just use root ones\n */\nfunction makeLocalContext (store, namespace, path) {\n var noNamespace = namespace === '';\n\n var local = {\n dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ( true && !store._actions[type]) {\n console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n return store.dispatch(type, payload)\n },\n\n commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ( true && !store._mutations[type]) {\n console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n store.commit(type, payload, options);\n }\n };\n\n // getters and state object must be gotten lazily\n // because they will be changed by vm update\n Object.defineProperties(local, {\n getters: {\n get: noNamespace\n ? function () { return store.getters; }\n : function () { return makeLocalGetters(store, namespace); }\n },\n state: {\n get: function () { return getNestedState(store.state, path); }\n }\n });\n\n return local\n}\n\nfunction makeLocalGetters (store, namespace) {\n var gettersProxy = {};\n\n var splitPos = namespace.length;\n Object.keys(store.getters).forEach(function (type) {\n // skip if the target getter is not match this namespace\n if (type.slice(0, splitPos) !== namespace) { return }\n\n // extract local getter type\n var localType = type.slice(splitPos);\n\n // Add a port to the getters proxy.\n // Define as getter property because\n // we do not want to evaluate the getters in this time.\n Object.defineProperty(gettersProxy, localType, {\n get: function () { return store.getters[type]; },\n enumerable: true\n });\n });\n\n return gettersProxy\n}\n\nfunction registerMutation (store, type, handler, local) {\n var entry = store._mutations[type] || (store._mutations[type] = []);\n entry.push(function wrappedMutationHandler (payload) {\n handler.call(store, local.state, payload);\n });\n}\n\nfunction registerAction (store, type, handler, local) {\n var entry = store._actions[type] || (store._actions[type] = []);\n entry.push(function wrappedActionHandler (payload, cb) {\n var res = handler.call(store, {\n dispatch: local.dispatch,\n commit: local.commit,\n getters: local.getters,\n state: local.state,\n rootGetters: store.getters,\n rootState: store.state\n }, payload, cb);\n if (!isPromise(res)) {\n res = Promise.resolve(res);\n }\n if (store._devtoolHook) {\n return res.catch(function (err) {\n store._devtoolHook.emit('vuex:error', err);\n throw err\n })\n } else {\n return res\n }\n });\n}\n\nfunction registerGetter (store, type, rawGetter, local) {\n if (store._wrappedGetters[type]) {\n if (true) {\n console.error((\"[vuex] duplicate getter key: \" + type));\n }\n return\n }\n store._wrappedGetters[type] = function wrappedGetter (store) {\n return rawGetter(\n local.state, // local state\n local.getters, // local getters\n store.state, // root state\n store.getters // root getters\n )\n };\n}\n\nfunction enableStrictMode (store) {\n store._vm.$watch(function () { return this._data.$$state }, function () {\n if (true) {\n assert(store._committing, \"Do not mutate vuex store state outside mutation handlers.\");\n }\n }, { deep: true, sync: true });\n}\n\nfunction getNestedState (state, path) {\n return path.length\n ? path.reduce(function (state, key) { return state[key]; }, state)\n : state\n}\n\nfunction unifyObjectStyle (type, payload, options) {\n if (isObject(type) && type.type) {\n options = payload;\n payload = type;\n type = type.type;\n }\n\n if (true) {\n assert(typeof type === 'string', (\"Expects string as the type, but found \" + (typeof type) + \".\"));\n }\n\n return { type: type, payload: payload, options: options }\n}\n\nfunction install (_Vue) {\n if (Vue && _Vue === Vue) {\n if (true) {\n console.error(\n '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n );\n }\n return\n }\n Vue = _Vue;\n applyMixin(Vue);\n}\n\nvar mapState = normalizeNamespace(function (namespace, states) {\n var res = {};\n normalizeMap(states).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedState () {\n var state = this.$store.state;\n var getters = this.$store.getters;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n if (!module) {\n return\n }\n state = module.context.state;\n getters = module.context.getters;\n }\n return typeof val === 'function'\n ? val.call(this, state, getters)\n : state[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\nvar mapMutations = normalizeNamespace(function (namespace, mutations) {\n var res = {};\n normalizeMap(mutations).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedMutation () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var commit = this.$store.commit;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n if (!module) {\n return\n }\n commit = module.context.commit;\n }\n return typeof val === 'function'\n ? val.apply(this, [commit].concat(args))\n : commit.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\nvar mapGetters = normalizeNamespace(function (namespace, getters) {\n var res = {};\n normalizeMap(getters).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n val = namespace + val;\n res[key] = function mappedGetter () {\n if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n return\n }\n if ( true && !(val in this.$store.getters)) {\n console.error((\"[vuex] unknown getter: \" + val));\n return\n }\n return this.$store.getters[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\nvar mapActions = normalizeNamespace(function (namespace, actions) {\n var res = {};\n normalizeMap(actions).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedAction () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var dispatch = this.$store.dispatch;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n if (!module) {\n return\n }\n dispatch = module.context.dispatch;\n }\n return typeof val === 'function'\n ? val.apply(this, [dispatch].concat(args))\n : dispatch.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\nvar createNamespacedHelpers = function (namespace) { return ({\n mapState: mapState.bind(null, namespace),\n mapGetters: mapGetters.bind(null, namespace),\n mapMutations: mapMutations.bind(null, namespace),\n mapActions: mapActions.bind(null, namespace)\n}); };\n\nfunction normalizeMap (map) {\n return Array.isArray(map)\n ? map.map(function (key) { return ({ key: key, val: key }); })\n : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n}\n\nfunction normalizeNamespace (fn) {\n return function (namespace, map) {\n if (typeof namespace !== 'string') {\n map = namespace;\n namespace = '';\n } else if (namespace.charAt(namespace.length - 1) !== '/') {\n namespace += '/';\n }\n return fn(namespace, map)\n }\n}\n\nfunction getModuleByNamespace (store, helper, namespace) {\n var module = store._modulesNamespaceMap[namespace];\n if ( true && !module) {\n console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n }\n return module\n}\n\nvar index_esm = {\n Store: Store,\n install: install,\n version: '3.0.1',\n mapState: mapState,\n mapMutations: mapMutations,\n mapGetters: mapGetters,\n mapActions: mapActions,\n createNamespacedHelpers: createNamespacedHelpers\n};\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index_esm);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCOztBQUVyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsU0FBUztBQUNwQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsV0FBVyxjQUFjO0FBQ3pCLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsMEJBQTBCLEVBQUU7QUFDdkU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsY0FBYyxxQkFBcUI7O0FBRS9EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLG9DQUFvQyxFQUFFO0FBQ2xFO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUIsdUVBQXVFLEVBQUU7QUFDekU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDO0FBQ2hDLDhCQUE4Qjs7QUFFOUIsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHVCQUF1QixFQUFFOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsU0FBUyxxQkFBcUI7O0FBRXhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILDRDQUE0QyxvQ0FBb0MsRUFBRTs7QUFFbEY7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0RBQWtELGtDQUFrQyxFQUFFOztBQUV0RjtBQUNBLGdEQUFnRCx5QkFBeUIsRUFBRTtBQUMzRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQSw2Q0FBNkMsNkNBQTZDLEVBQUU7QUFDNUY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUEsaUNBQWlDLGVBQWU7O0FBRWhELE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUMsZUFBZTs7QUFFaEQsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQSx3QkFBd0IsdUJBQXVCLEVBQUU7QUFDakQ7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDhCQUE4Qix5QkFBeUIsRUFBRTtBQUN6RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDLHVCQUF1QiwyQ0FBMkM7QUFDbEUsS0FBSztBQUNMO0FBQ0Esd0JBQXdCLDBDQUEwQztBQUNsRTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw0QkFBNEIsRUFBRTtBQUN0RDtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsNEJBQTRCO0FBQzVELFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBLEdBQUcsR0FBRyx5QkFBeUI7QUFDL0I7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QyxtQkFBbUIsRUFBRTtBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7O0FBRUEsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRCxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBLDhCQUE4QixVQUFVLHFCQUFxQixFQUFFLEVBQUU7QUFDakUsMkNBQTJDLFVBQVUsMEJBQTBCLEVBQUUsRUFBRTtBQUNuRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRW1HO0FBQ3BGLHdFQUFTLEVBQUMiLCJmaWxlIjoiMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHZ1ZXggdjMuMC4xXG4gKiAoYykgMjAxNyBFdmFuIFlvdVxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbnZhciBhcHBseU1peGluID0gZnVuY3Rpb24gKFZ1ZSkge1xuICB2YXIgdmVyc2lvbiA9IE51bWJlcihWdWUudmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcblxuICBpZiAodmVyc2lvbiA+PSAyKSB7XG4gICAgVnVlLm1peGluKHsgYmVmb3JlQ3JlYXRlOiB2dWV4SW5pdCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdmVycmlkZSBpbml0IGFuZCBpbmplY3QgdnVleCBpbml0IHByb2NlZHVyZVxuICAgIC8vIGZvciAxLnggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgdmFyIF9pbml0ID0gVnVlLnByb3RvdHlwZS5faW5pdDtcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBvcHRpb25zLmluaXQgPSBvcHRpb25zLmluaXRcbiAgICAgICAgPyBbdnVleEluaXRdLmNvbmNhdChvcHRpb25zLmluaXQpXG4gICAgICAgIDogdnVleEluaXQ7XG4gICAgICBfaW5pdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVnVleCBpbml0IGhvb2ssIGluamVjdGVkIGludG8gZWFjaCBpbnN0YW5jZXMgaW5pdCBob29rcyBsaXN0LlxuICAgKi9cblxuICBmdW5jdGlvbiB2dWV4SW5pdCAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgIC8vIHN0b3JlIGluamVjdGlvblxuICAgIGlmIChvcHRpb25zLnN0b3JlKSB7XG4gICAgICB0aGlzLiRzdG9yZSA9IHR5cGVvZiBvcHRpb25zLnN0b3JlID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gb3B0aW9ucy5zdG9yZSgpXG4gICAgICAgIDogb3B0aW9ucy5zdG9yZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRzdG9yZSkge1xuICAgICAgdGhpcy4kc3RvcmUgPSBvcHRpb25zLnBhcmVudC4kc3RvcmU7XG4gICAgfVxuICB9XG59O1xuXG52YXIgZGV2dG9vbEhvb2sgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuZnVuY3Rpb24gZGV2dG9vbFBsdWdpbiAoc3RvcmUpIHtcbiAgaWYgKCFkZXZ0b29sSG9vaykgeyByZXR1cm4gfVxuXG4gIHN0b3JlLl9kZXZ0b29sSG9vayA9IGRldnRvb2xIb29rO1xuXG4gIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6aW5pdCcsIHN0b3JlKTtcblxuICBkZXZ0b29sSG9vay5vbigndnVleDp0cmF2ZWwtdG8tc3RhdGUnLCBmdW5jdGlvbiAodGFyZ2V0U3RhdGUpIHtcbiAgICBzdG9yZS5yZXBsYWNlU3RhdGUodGFyZ2V0U3RhdGUpO1xuICB9KTtcblxuICBzdG9yZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG11dGF0aW9uLCBzdGF0ZSkge1xuICAgIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6bXV0YXRpb24nLCBtdXRhdGlvbiwgc3RhdGUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBwYXNzIHRoZSB0ZXN0XG4gKiBieSBzZWNvbmQgYXJndW1lbnQgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHsqfVxuICovXG4vKipcbiAqIERlZXAgY29weSB0aGUgZ2l2ZW4gb2JqZWN0IGNvbnNpZGVyaW5nIGNpcmN1bGFyIHN0cnVjdHVyZS5cbiAqIFRoaXMgZnVuY3Rpb24gY2FjaGVzIGFsbCBuZXN0ZWQgb2JqZWN0cyBhbmQgaXRzIGNvcGllcy5cbiAqIElmIGl0IGRldGVjdHMgY2lyY3VsYXIgc3RydWN0dXJlLCB1c2UgY2FjaGVkIGNvcHkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC5cbiAqXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjYWNoZVxuICogQHJldHVybiB7Kn1cbiAqL1xuXG5cbi8qKlxuICogZm9yRWFjaCBmb3Igb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hWYWx1ZSAob2JqLCBmbikge1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4ob2JqW2tleV0sIGtleSk7IH0pO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChjb25kaXRpb24sIG1zZykge1xuICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoKFwiW3Z1ZXhdIFwiICsgbXNnKSkgfVxufVxuXG52YXIgTW9kdWxlID0gZnVuY3Rpb24gTW9kdWxlIChyYXdNb2R1bGUsIHJ1bnRpbWUpIHtcbiAgdGhpcy5ydW50aW1lID0gcnVudGltZTtcbiAgdGhpcy5fY2hpbGRyZW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9yYXdNb2R1bGUgPSByYXdNb2R1bGU7XG4gIHZhciByYXdTdGF0ZSA9IHJhd01vZHVsZS5zdGF0ZTtcbiAgdGhpcy5zdGF0ZSA9ICh0eXBlb2YgcmF3U3RhdGUgPT09ICdmdW5jdGlvbicgPyByYXdTdGF0ZSgpIDogcmF3U3RhdGUpIHx8IHt9O1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyQxID0geyBuYW1lc3BhY2VkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycyQxLm5hbWVzcGFjZWQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISF0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZFxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIGFkZENoaWxkIChrZXksIG1vZHVsZSkge1xuICB0aGlzLl9jaGlsZHJlbltrZXldID0gbW9kdWxlO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIHJlbW92ZUNoaWxkIChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW2tleV07XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmdldENoaWxkID0gZnVuY3Rpb24gZ2V0Q2hpbGQgKGtleSkge1xuICByZXR1cm4gdGhpcy5fY2hpbGRyZW5ba2V5XVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKHJhd01vZHVsZSkge1xuICB0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZCA9IHJhd01vZHVsZS5uYW1lc3BhY2VkO1xuICBpZiAocmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICB0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucyA9IHJhd01vZHVsZS5hY3Rpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucyA9IHJhd01vZHVsZS5tdXRhdGlvbnM7XG4gIH1cbiAgaWYgKHJhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmdldHRlcnMgPSByYXdNb2R1bGUuZ2V0dGVycztcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoQ2hpbGQgPSBmdW5jdGlvbiBmb3JFYWNoQ2hpbGQgKGZuKSB7XG4gIGZvckVhY2hWYWx1ZSh0aGlzLl9jaGlsZHJlbiwgZm4pO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoR2V0dGVyID0gZnVuY3Rpb24gZm9yRWFjaEdldHRlciAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzLCBmbik7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEFjdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hBY3Rpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hNdXRhdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hNdXRhdGlvbiAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucywgZm4pO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggTW9kdWxlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzJDEgKTtcblxudmFyIE1vZHVsZUNvbGxlY3Rpb24gPSBmdW5jdGlvbiBNb2R1bGVDb2xsZWN0aW9uIChyYXdSb290TW9kdWxlKSB7XG4gIC8vIHJlZ2lzdGVyIHJvb3QgbW9kdWxlIChWdWV4LlN0b3JlIG9wdGlvbnMpXG4gIHRoaXMucmVnaXN0ZXIoW10sIHJhd1Jvb3RNb2R1bGUsIGZhbHNlKTtcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAocGF0aCkge1xuICByZXR1cm4gcGF0aC5yZWR1Y2UoZnVuY3Rpb24gKG1vZHVsZSwga2V5KSB7XG4gICAgcmV0dXJuIG1vZHVsZS5nZXRDaGlsZChrZXkpXG4gIH0sIHRoaXMucm9vdClcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLmdldE5hbWVzcGFjZSA9IGZ1bmN0aW9uIGdldE5hbWVzcGFjZSAocGF0aCkge1xuICB2YXIgbW9kdWxlID0gdGhpcy5yb290O1xuICByZXR1cm4gcGF0aC5yZWR1Y2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwga2V5KSB7XG4gICAgbW9kdWxlID0gbW9kdWxlLmdldENoaWxkKGtleSk7XG4gICAgcmV0dXJuIG5hbWVzcGFjZSArIChtb2R1bGUubmFtZXNwYWNlZCA/IGtleSArICcvJyA6ICcnKVxuICB9LCAnJylcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSQxIChyYXdSb290TW9kdWxlKSB7XG4gIHVwZGF0ZShbXSwgdGhpcy5yb290LCByYXdSb290TW9kdWxlKTtcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIgKHBhdGgsIHJhd01vZHVsZSwgcnVudGltZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgIGlmICggcnVudGltZSA9PT0gdm9pZCAwICkgcnVudGltZSA9IHRydWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRSYXdNb2R1bGUocGF0aCwgcmF3TW9kdWxlKTtcbiAgfVxuXG4gIHZhciBuZXdNb2R1bGUgPSBuZXcgTW9kdWxlKHJhd01vZHVsZSwgcnVudGltZSk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMucm9vdCA9IG5ld01vZHVsZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5nZXQocGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIHBhcmVudC5hZGRDaGlsZChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIG5ld01vZHVsZSk7XG4gIH1cblxuICAvLyByZWdpc3RlciBuZXN0ZWQgbW9kdWxlc1xuICBpZiAocmF3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlLm1vZHVsZXMsIGZ1bmN0aW9uIChyYXdDaGlsZE1vZHVsZSwga2V5KSB7XG4gICAgICB0aGlzJDEucmVnaXN0ZXIocGF0aC5jb25jYXQoa2V5KSwgcmF3Q2hpbGRNb2R1bGUsIHJ1bnRpbWUpO1xuICAgIH0pO1xuICB9XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS51bnJlZ2lzdGVyID0gZnVuY3Rpb24gdW5yZWdpc3RlciAocGF0aCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5nZXQocGF0aC5zbGljZSgwLCAtMSkpO1xuICB2YXIga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICBpZiAoIXBhcmVudC5nZXRDaGlsZChrZXkpLnJ1bnRpbWUpIHsgcmV0dXJuIH1cblxuICBwYXJlbnQucmVtb3ZlQ2hpbGQoa2V5KTtcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZSAocGF0aCwgdGFyZ2V0TW9kdWxlLCBuZXdNb2R1bGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRSYXdNb2R1bGUocGF0aCwgbmV3TW9kdWxlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSB0YXJnZXQgbW9kdWxlXG4gIHRhcmdldE1vZHVsZS51cGRhdGUobmV3TW9kdWxlKTtcblxuICAvLyB1cGRhdGUgbmVzdGVkIG1vZHVsZXNcbiAgaWYgKG5ld01vZHVsZS5tb2R1bGVzKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG5ld01vZHVsZS5tb2R1bGVzKSB7XG4gICAgICBpZiAoIXRhcmdldE1vZHVsZS5nZXRDaGlsZChrZXkpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJbdnVleF0gdHJ5aW5nIHRvIGFkZCBhIG5ldyBtb2R1bGUgJ1wiICsga2V5ICsgXCInIG9uIGhvdCByZWxvYWRpbmcsIFwiICtcbiAgICAgICAgICAgICdtYW51YWwgcmVsb2FkIGlzIG5lZWRlZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKFxuICAgICAgICBwYXRoLmNvbmNhdChrZXkpLFxuICAgICAgICB0YXJnZXRNb2R1bGUuZ2V0Q2hpbGQoa2V5KSxcbiAgICAgICAgbmV3TW9kdWxlLm1vZHVsZXNba2V5XVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZ1bmN0aW9uQXNzZXJ0ID0ge1xuICBhc3NlcnQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nOyB9LFxuICBleHBlY3RlZDogJ2Z1bmN0aW9uJ1xufTtcblxudmFyIG9iamVjdEFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbiBvciBvYmplY3Qgd2l0aCBcImhhbmRsZXJcIiBmdW5jdGlvbidcbn07XG5cbnZhciBhc3NlcnRUeXBlcyA9IHtcbiAgZ2V0dGVyczogZnVuY3Rpb25Bc3NlcnQsXG4gIG11dGF0aW9uczogZnVuY3Rpb25Bc3NlcnQsXG4gIGFjdGlvbnM6IG9iamVjdEFzc2VydFxufTtcblxuZnVuY3Rpb24gYXNzZXJ0UmF3TW9kdWxlIChwYXRoLCByYXdNb2R1bGUpIHtcbiAgT2JqZWN0LmtleXMoYXNzZXJ0VHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghcmF3TW9kdWxlW2tleV0pIHsgcmV0dXJuIH1cblxuICAgIHZhciBhc3NlcnRPcHRpb25zID0gYXNzZXJ0VHlwZXNba2V5XTtcblxuICAgIGZvckVhY2hWYWx1ZShyYXdNb2R1bGVba2V5XSwgZnVuY3Rpb24gKHZhbHVlLCB0eXBlKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIGFzc2VydE9wdGlvbnMuYXNzZXJ0KHZhbHVlKSxcbiAgICAgICAgbWFrZUFzc2VydGlvbk1lc3NhZ2UocGF0aCwga2V5LCB0eXBlLCB2YWx1ZSwgYXNzZXJ0T3B0aW9ucy5leHBlY3RlZClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlQXNzZXJ0aW9uTWVzc2FnZSAocGF0aCwga2V5LCB0eXBlLCB2YWx1ZSwgZXhwZWN0ZWQpIHtcbiAgdmFyIGJ1ZiA9IGtleSArIFwiIHNob3VsZCBiZSBcIiArIGV4cGVjdGVkICsgXCIgYnV0IFxcXCJcIiArIGtleSArIFwiLlwiICsgdHlwZSArIFwiXFxcIlwiO1xuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgYnVmICs9IFwiIGluIG1vZHVsZSBcXFwiXCIgKyAocGF0aC5qb2luKCcuJykpICsgXCJcXFwiXCI7XG4gIH1cbiAgYnVmICs9IFwiIGlzIFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgKyBcIi5cIjtcbiAgcmV0dXJuIGJ1ZlxufVxuXG52YXIgVnVlOyAvLyBiaW5kIG9uIGluc3RhbGxcblxudmFyIFN0b3JlID0gZnVuY3Rpb24gU3RvcmUgKG9wdGlvbnMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIC8vIEF1dG8gaW5zdGFsbCBpZiBpdCBpcyBub3QgZG9uZSB5ZXQgYW5kIGB3aW5kb3dgIGhhcyBgVnVlYC5cbiAgLy8gVG8gYWxsb3cgdXNlcnMgdG8gYXZvaWQgYXV0by1pbnN0YWxsYXRpb24gaW4gc29tZSBjYXNlcyxcbiAgLy8gdGhpcyBjb2RlIHNob3VsZCBiZSBwbGFjZWQgaGVyZS4gU2VlICM3MzFcbiAgaWYgKCFWdWUgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuICAgIGluc3RhbGwod2luZG93LlZ1ZSk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChWdWUsIFwibXVzdCBjYWxsIFZ1ZS51c2UoVnVleCkgYmVmb3JlIGNyZWF0aW5nIGEgc3RvcmUgaW5zdGFuY2UuXCIpO1xuICAgIGFzc2VydCh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcsIFwidnVleCByZXF1aXJlcyBhIFByb21pc2UgcG9seWZpbGwgaW4gdGhpcyBicm93c2VyLlwiKTtcbiAgICBhc3NlcnQodGhpcyBpbnN0YW5jZW9mIFN0b3JlLCBcIlN0b3JlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvci5cIik7XG4gIH1cblxuICB2YXIgcGx1Z2lucyA9IG9wdGlvbnMucGx1Z2luczsgaWYgKCBwbHVnaW5zID09PSB2b2lkIDAgKSBwbHVnaW5zID0gW107XG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsgaWYgKCBzdHJpY3QgPT09IHZvaWQgMCApIHN0cmljdCA9IGZhbHNlO1xuXG4gIHZhciBzdGF0ZSA9IG9wdGlvbnMuc3RhdGU7IGlmICggc3RhdGUgPT09IHZvaWQgMCApIHN0YXRlID0ge307XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdGF0ZSA9IHN0YXRlKCkgfHwge307XG4gIH1cblxuICAvLyBzdG9yZSBpbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl9jb21taXR0aW5nID0gZmFsc2U7XG4gIHRoaXMuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl9tdXRhdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX21vZHVsZXMgPSBuZXcgTW9kdWxlQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgdGhpcy5fbW9kdWxlc05hbWVzcGFjZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG4gIHRoaXMuX3dhdGNoZXJWTSA9IG5ldyBWdWUoKTtcblxuICAvLyBiaW5kIGNvbW1pdCBhbmQgZGlzcGF0Y2ggdG8gc2VsZlxuICB2YXIgc3RvcmUgPSB0aGlzO1xuICB2YXIgcmVmID0gdGhpcztcbiAgdmFyIGRpc3BhdGNoID0gcmVmLmRpc3BhdGNoO1xuICB2YXIgY29tbWl0ID0gcmVmLmNvbW1pdDtcbiAgdGhpcy5kaXNwYXRjaCA9IGZ1bmN0aW9uIGJvdW5kRGlzcGF0Y2ggKHR5cGUsIHBheWxvYWQpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2guY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZClcbiAgfTtcbiAgdGhpcy5jb21taXQgPSBmdW5jdGlvbiBib3VuZENvbW1pdCAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBjb21taXQuY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZCwgb3B0aW9ucylcbiAgfTtcblxuICAvLyBzdHJpY3QgbW9kZVxuICB0aGlzLnN0cmljdCA9IHN0cmljdDtcblxuICAvLyBpbml0IHJvb3QgbW9kdWxlLlxuICAvLyB0aGlzIGFsc28gcmVjdXJzaXZlbHkgcmVnaXN0ZXJzIGFsbCBzdWItbW9kdWxlc1xuICAvLyBhbmQgY29sbGVjdHMgYWxsIG1vZHVsZSBnZXR0ZXJzIGluc2lkZSB0aGlzLl93cmFwcGVkR2V0dGVyc1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHN0YXRlLCBbXSwgdGhpcy5fbW9kdWxlcy5yb290KTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBzdG9yZSB2bSwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZSByZWFjdGl2aXR5XG4gIC8vIChhbHNvIHJlZ2lzdGVycyBfd3JhcHBlZEdldHRlcnMgYXMgY29tcHV0ZWQgcHJvcGVydGllcylcbiAgcmVzZXRTdG9yZVZNKHRoaXMsIHN0YXRlKTtcblxuICAvLyBhcHBseSBwbHVnaW5zXG4gIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7IHJldHVybiBwbHVnaW4odGhpcyQxKTsgfSk7XG5cbiAgaWYgKFZ1ZS5jb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29sUGx1Z2luKHRoaXMpO1xuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBzdGF0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuc3RhdGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fdm0uX2RhdGEuJCRzdGF0ZVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnN0YXRlLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCBcIlVzZSBzdG9yZS5yZXBsYWNlU3RhdGUoKSB0byBleHBsaWNpdCByZXBsYWNlIHN0b3JlIHN0YXRlLlwiKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIGNvbW1pdCAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vIGNoZWNrIG9iamVjdC1zdHlsZSBjb21taXRcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuICAgIHZhciBvcHRpb25zID0gcmVmLm9wdGlvbnM7XG5cbiAgdmFyIG11dGF0aW9uID0geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIH07XG4gIHZhciBlbnRyeSA9IHRoaXMuX211dGF0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uIGNvbW1pdEl0ZXJhdG9yIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcbiAgdGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIobXV0YXRpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnNpbGVudFxuICApIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlt2dWV4XSBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUgKyBcIi4gU2lsZW50IG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBcIiArXG4gICAgICAnVXNlIHRoZSBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdnVlLWRldnRvb2xzJ1xuICAgICk7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoIChfdHlwZSwgX3BheWxvYWQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgZGlzcGF0Y2hcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkKTtcbiAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgIHZhciBwYXlsb2FkID0gcmVmLnBheWxvYWQ7XG5cbiAgdmFyIGFjdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9hY3Rpb25zW3R5cGVdO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gYWN0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViKGFjdGlvbiwgdGhpcyQxLnN0YXRlKTsgfSk7XG5cbiAgcmV0dXJuIGVudHJ5Lmxlbmd0aCA+IDFcbiAgICA/IFByb21pc2UuYWxsKGVudHJ5Lm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlcihwYXlsb2FkKTsgfSkpXG4gICAgOiBlbnRyeVswXShwYXlsb2FkKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSAoZm4pIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX3N1YnNjcmliZXJzKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZUFjdGlvbiA9IGZ1bmN0aW9uIHN1YnNjcmliZUFjdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzKVxufTtcblxuU3RvcmUucHJvdG90eXBlLndhdGNoID0gZnVuY3Rpb24gd2F0Y2ggKGdldHRlciwgY2IsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgZ2V0dGVyID09PSAnZnVuY3Rpb24nLCBcInN0b3JlLndhdGNoIG9ubHkgYWNjZXB0cyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICByZXR1cm4gdGhpcy5fd2F0Y2hlclZNLiR3YXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiBnZXR0ZXIodGhpcyQxLnN0YXRlLCB0aGlzJDEuZ2V0dGVycyk7IH0sIGNiLCBvcHRpb25zKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZSAoc3RhdGUpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzJDEuX3ZtLl9kYXRhLiQkc3RhdGUgPSBzdGF0ZTtcbiAgfSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVnaXN0ZXJNb2R1bGUgPSBmdW5jdGlvbiByZWdpc3Rlck1vZHVsZSAocGF0aCwgcmF3TW9kdWxlLCBvcHRpb25zKSB7XG4gICAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgICBhc3NlcnQocGF0aC5sZW5ndGggPiAwLCAnY2Fubm90IHJlZ2lzdGVyIHRoZSByb290IG1vZHVsZSBieSB1c2luZyByZWdpc3Rlck1vZHVsZS4nKTtcbiAgfVxuXG4gIHRoaXMuX21vZHVsZXMucmVnaXN0ZXIocGF0aCwgcmF3TW9kdWxlKTtcbiAgaW5zdGFsbE1vZHVsZSh0aGlzLCB0aGlzLnN0YXRlLCBwYXRoLCB0aGlzLl9tb2R1bGVzLmdldChwYXRoKSwgb3B0aW9ucy5wcmVzZXJ2ZVN0YXRlKTtcbiAgLy8gcmVzZXQgc3RvcmUgdG8gdXBkYXRlIGdldHRlcnMuLi5cbiAgcmVzZXRTdG9yZVZNKHRoaXMsIHRoaXMuc3RhdGUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnVucmVnaXN0ZXJNb2R1bGUgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyTW9kdWxlIChwYXRoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgfVxuXG4gIHRoaXMuX21vZHVsZXMudW5yZWdpc3RlcihwYXRoKTtcbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudFN0YXRlID0gZ2V0TmVzdGVkU3RhdGUodGhpcyQxLnN0YXRlLCBwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgVnVlLmRlbGV0ZShwYXJlbnRTdGF0ZSwgcGF0aFtwYXRoLmxlbmd0aCAtIDFdKTtcbiAgfSk7XG4gIHJlc2V0U3RvcmUodGhpcyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuaG90VXBkYXRlID0gZnVuY3Rpb24gaG90VXBkYXRlIChuZXdPcHRpb25zKSB7XG4gIHRoaXMuX21vZHVsZXMudXBkYXRlKG5ld09wdGlvbnMpO1xuICByZXNldFN0b3JlKHRoaXMsIHRydWUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLl93aXRoQ29tbWl0ID0gZnVuY3Rpb24gX3dpdGhDb21taXQgKGZuKSB7XG4gIHZhciBjb21taXR0aW5nID0gdGhpcy5fY29tbWl0dGluZztcbiAgdGhpcy5fY29tbWl0dGluZyA9IHRydWU7XG4gIGZuKCk7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSBjb21taXR0aW5nO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFN0b3JlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbmZ1bmN0aW9uIGdlbmVyaWNTdWJzY3JpYmUgKGZuLCBzdWJzKSB7XG4gIGlmIChzdWJzLmluZGV4T2YoZm4pIDwgMCkge1xuICAgIHN1YnMucHVzaChmbik7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHN1YnMuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkge1xuICAgICAgc3Vicy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0U3RvcmUgKHN0b3JlLCBob3QpIHtcbiAgc3RvcmUuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdG9yZS5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgc3RhdGUgPSBzdG9yZS5zdGF0ZTtcbiAgLy8gaW5pdCBhbGwgbW9kdWxlc1xuICBpbnN0YWxsTW9kdWxlKHN0b3JlLCBzdGF0ZSwgW10sIHN0b3JlLl9tb2R1bGVzLnJvb3QsIHRydWUpO1xuICAvLyByZXNldCB2bVxuICByZXNldFN0b3JlVk0oc3RvcmUsIHN0YXRlLCBob3QpO1xufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlVk0gKHN0b3JlLCBzdGF0ZSwgaG90KSB7XG4gIHZhciBvbGRWbSA9IHN0b3JlLl92bTtcblxuICAvLyBiaW5kIHN0b3JlIHB1YmxpYyBnZXR0ZXJzXG4gIHN0b3JlLmdldHRlcnMgPSB7fTtcbiAgdmFyIHdyYXBwZWRHZXR0ZXJzID0gc3RvcmUuX3dyYXBwZWRHZXR0ZXJzO1xuICB2YXIgY29tcHV0ZWQgPSB7fTtcbiAgZm9yRWFjaFZhbHVlKHdyYXBwZWRHZXR0ZXJzLCBmdW5jdGlvbiAoZm4sIGtleSkge1xuICAgIC8vIHVzZSBjb21wdXRlZCB0byBsZXZlcmFnZSBpdHMgbGF6eS1jYWNoaW5nIG1lY2hhbmlzbVxuICAgIGNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmbihzdG9yZSk7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0b3JlLmdldHRlcnMsIGtleSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5fdm1ba2V5XTsgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUgLy8gZm9yIGxvY2FsIGdldHRlcnNcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gdXNlIGEgVnVlIGluc3RhbmNlIHRvIHN0b3JlIHRoZSBzdGF0ZSB0cmVlXG4gIC8vIHN1cHByZXNzIHdhcm5pbmdzIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBoYXMgYWRkZWRcbiAgLy8gc29tZSBmdW5reSBnbG9iYWwgbWl4aW5zXG4gIHZhciBzaWxlbnQgPSBWdWUuY29uZmlnLnNpbGVudDtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSB0cnVlO1xuICBzdG9yZS5fdm0gPSBuZXcgVnVlKHtcbiAgICBkYXRhOiB7XG4gICAgICAkJHN0YXRlOiBzdGF0ZVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IGNvbXB1dGVkXG4gIH0pO1xuICBWdWUuY29uZmlnLnNpbGVudCA9IHNpbGVudDtcblxuICAvLyBlbmFibGUgc3RyaWN0IG1vZGUgZm9yIG5ldyB2bVxuICBpZiAoc3RvcmUuc3RyaWN0KSB7XG4gICAgZW5hYmxlU3RyaWN0TW9kZShzdG9yZSk7XG4gIH1cblxuICBpZiAob2xkVm0pIHtcbiAgICBpZiAoaG90KSB7XG4gICAgICAvLyBkaXNwYXRjaCBjaGFuZ2VzIGluIGFsbCBzdWJzY3JpYmVkIHdhdGNoZXJzXG4gICAgICAvLyB0byBmb3JjZSBnZXR0ZXIgcmUtZXZhbHVhdGlvbiBmb3IgaG90IHJlbG9hZGluZy5cbiAgICAgIHN0b3JlLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2xkVm0uX2RhdGEuJCRzdGF0ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9sZFZtLiRkZXN0cm95KCk7IH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxNb2R1bGUgKHN0b3JlLCByb290U3RhdGUsIHBhdGgsIG1vZHVsZSwgaG90KSB7XG4gIHZhciBpc1Jvb3QgPSAhcGF0aC5sZW5ndGg7XG4gIHZhciBuYW1lc3BhY2UgPSBzdG9yZS5fbW9kdWxlcy5nZXROYW1lc3BhY2UocGF0aCk7XG5cbiAgLy8gcmVnaXN0ZXIgaW4gbmFtZXNwYWNlIG1hcFxuICBpZiAobW9kdWxlLm5hbWVzcGFjZWQpIHtcbiAgICBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdID0gbW9kdWxlO1xuICB9XG5cbiAgLy8gc2V0IHN0YXRlXG4gIGlmICghaXNSb290ICYmICFob3QpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZShyb290U3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICB2YXIgbW9kdWxlTmFtZSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICBWdWUuc2V0KHBhcmVudFN0YXRlLCBtb2R1bGVOYW1lLCBtb2R1bGUuc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGxvY2FsID0gbW9kdWxlLmNvbnRleHQgPSBtYWtlTG9jYWxDb250ZXh0KHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpO1xuXG4gIG1vZHVsZS5mb3JFYWNoTXV0YXRpb24oZnVuY3Rpb24gKG11dGF0aW9uLCBrZXkpIHtcbiAgICB2YXIgbmFtZXNwYWNlZFR5cGUgPSBuYW1lc3BhY2UgKyBrZXk7XG4gICAgcmVnaXN0ZXJNdXRhdGlvbihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIG11dGF0aW9uLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQWN0aW9uKGZ1bmN0aW9uIChhY3Rpb24sIGtleSkge1xuICAgIHZhciB0eXBlID0gYWN0aW9uLnJvb3QgPyBrZXkgOiBuYW1lc3BhY2UgKyBrZXk7XG4gICAgdmFyIGhhbmRsZXIgPSBhY3Rpb24uaGFuZGxlciB8fCBhY3Rpb247XG4gICAgcmVnaXN0ZXJBY3Rpb24oc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hHZXR0ZXIoZnVuY3Rpb24gKGdldHRlciwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyR2V0dGVyKHN0b3JlLCBuYW1lc3BhY2VkVHlwZSwgZ2V0dGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQ2hpbGQoZnVuY3Rpb24gKGNoaWxkLCBrZXkpIHtcbiAgICBpbnN0YWxsTW9kdWxlKHN0b3JlLCByb290U3RhdGUsIHBhdGguY29uY2F0KGtleSksIGNoaWxkLCBob3QpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBtYWtlIGxvY2FsaXplZCBkaXNwYXRjaCwgY29tbWl0LCBnZXR0ZXJzIGFuZCBzdGF0ZVxuICogaWYgdGhlcmUgaXMgbm8gbmFtZXNwYWNlLCBqdXN0IHVzZSByb290IG9uZXNcbiAqL1xuZnVuY3Rpb24gbWFrZUxvY2FsQ29udGV4dCAoc3RvcmUsIG5hbWVzcGFjZSwgcGF0aCkge1xuICB2YXIgbm9OYW1lc3BhY2UgPSBuYW1lc3BhY2UgPT09ICcnO1xuXG4gIHZhciBsb2NhbCA9IHtcbiAgICBkaXNwYXRjaDogbm9OYW1lc3BhY2UgPyBzdG9yZS5kaXNwYXRjaCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX2FjdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIGFjdGlvbiB0eXBlOiBcIiArIChhcmdzLnR5cGUpICsgXCIsIGdsb2JhbCB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2godHlwZSwgcGF5bG9hZClcbiAgICB9LFxuXG4gICAgY29tbWl0OiBub05hbWVzcGFjZSA/IHN0b3JlLmNvbW1pdCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX211dGF0aW9uc1t0eXBlXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gbG9jYWwgbXV0YXRpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmUuY29tbWl0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzdGF0ZSBvYmplY3QgbXVzdCBiZSBnb3R0ZW4gbGF6aWx5XG4gIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNoYW5nZWQgYnkgdm0gdXBkYXRlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxvY2FsLCB7XG4gICAgZ2V0dGVyczoge1xuICAgICAgZ2V0OiBub05hbWVzcGFjZVxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLmdldHRlcnM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlTG9jYWxHZXR0ZXJzKHN0b3JlLCBuYW1lc3BhY2UpOyB9XG4gICAgfSxcbiAgICBzdGF0ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXROZXN0ZWRTdGF0ZShzdG9yZS5zdGF0ZSwgcGF0aCk7IH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFxufVxuXG5mdW5jdGlvbiBtYWtlTG9jYWxHZXR0ZXJzIChzdG9yZSwgbmFtZXNwYWNlKSB7XG4gIHZhciBnZXR0ZXJzUHJveHkgPSB7fTtcblxuICB2YXIgc3BsaXRQb3MgPSBuYW1lc3BhY2UubGVuZ3RoO1xuICBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgLy8gc2tpcCBpZiB0aGUgdGFyZ2V0IGdldHRlciBpcyBub3QgbWF0Y2ggdGhpcyBuYW1lc3BhY2VcbiAgICBpZiAodHlwZS5zbGljZSgwLCBzcGxpdFBvcykgIT09IG5hbWVzcGFjZSkgeyByZXR1cm4gfVxuXG4gICAgLy8gZXh0cmFjdCBsb2NhbCBnZXR0ZXIgdHlwZVxuICAgIHZhciBsb2NhbFR5cGUgPSB0eXBlLnNsaWNlKHNwbGl0UG9zKTtcblxuICAgIC8vIEFkZCBhIHBvcnQgdG8gdGhlIGdldHRlcnMgcHJveHkuXG4gICAgLy8gRGVmaW5lIGFzIGdldHRlciBwcm9wZXJ0eSBiZWNhdXNlXG4gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZXZhbHVhdGUgdGhlIGdldHRlcnMgaW4gdGhpcyB0aW1lLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZXR0ZXJzUHJveHksIGxvY2FsVHlwZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5nZXR0ZXJzW3R5cGVdOyB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZ2V0dGVyc1Byb3h5XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YXRpb24gKHN0b3JlLCB0eXBlLCBoYW5kbGVyLCBsb2NhbCkge1xuICB2YXIgZW50cnkgPSBzdG9yZS5fbXV0YXRpb25zW3R5cGVdIHx8IChzdG9yZS5fbXV0YXRpb25zW3R5cGVdID0gW10pO1xuICBlbnRyeS5wdXNoKGZ1bmN0aW9uIHdyYXBwZWRNdXRhdGlvbkhhbmRsZXIgKHBheWxvYWQpIHtcbiAgICBoYW5kbGVyLmNhbGwoc3RvcmUsIGxvY2FsLnN0YXRlLCBwYXlsb2FkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyQWN0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX2FjdGlvbnNbdHlwZV0gfHwgKHN0b3JlLl9hY3Rpb25zW3R5cGVdID0gW10pO1xuICBlbnRyeS5wdXNoKGZ1bmN0aW9uIHdyYXBwZWRBY3Rpb25IYW5kbGVyIChwYXlsb2FkLCBjYikge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmNhbGwoc3RvcmUsIHtcbiAgICAgIGRpc3BhdGNoOiBsb2NhbC5kaXNwYXRjaCxcbiAgICAgIGNvbW1pdDogbG9jYWwuY29tbWl0LFxuICAgICAgZ2V0dGVyczogbG9jYWwuZ2V0dGVycyxcbiAgICAgIHN0YXRlOiBsb2NhbC5zdGF0ZSxcbiAgICAgIHJvb3RHZXR0ZXJzOiBzdG9yZS5nZXR0ZXJzLFxuICAgICAgcm9vdFN0YXRlOiBzdG9yZS5zdGF0ZVxuICAgIH0sIHBheWxvYWQsIGNiKTtcbiAgICBpZiAoIWlzUHJvbWlzZShyZXMpKSB7XG4gICAgICByZXMgPSBQcm9taXNlLnJlc29sdmUocmVzKTtcbiAgICB9XG4gICAgaWYgKHN0b3JlLl9kZXZ0b29sSG9vaykge1xuICAgICAgcmV0dXJuIHJlcy5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHN0b3JlLl9kZXZ0b29sSG9vay5lbWl0KCd2dWV4OmVycm9yJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJHZXR0ZXIgKHN0b3JlLCB0eXBlLCByYXdHZXR0ZXIsIGxvY2FsKSB7XG4gIGlmIChzdG9yZS5fd3JhcHBlZEdldHRlcnNbdHlwZV0pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gZHVwbGljYXRlIGdldHRlciBrZXk6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBzdG9yZS5fd3JhcHBlZEdldHRlcnNbdHlwZV0gPSBmdW5jdGlvbiB3cmFwcGVkR2V0dGVyIChzdG9yZSkge1xuICAgIHJldHVybiByYXdHZXR0ZXIoXG4gICAgICBsb2NhbC5zdGF0ZSwgLy8gbG9jYWwgc3RhdGVcbiAgICAgIGxvY2FsLmdldHRlcnMsIC8vIGxvY2FsIGdldHRlcnNcbiAgICAgIHN0b3JlLnN0YXRlLCAvLyByb290IHN0YXRlXG4gICAgICBzdG9yZS5nZXR0ZXJzIC8vIHJvb3QgZ2V0dGVyc1xuICAgIClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlU3RyaWN0TW9kZSAoc3RvcmUpIHtcbiAgc3RvcmUuX3ZtLiR3YXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhLiQkc3RhdGUgfSwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBhc3NlcnQoc3RvcmUuX2NvbW1pdHRpbmcsIFwiRG8gbm90IG11dGF0ZSB2dWV4IHN0b3JlIHN0YXRlIG91dHNpZGUgbXV0YXRpb24gaGFuZGxlcnMuXCIpO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlLCBzeW5jOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBnZXROZXN0ZWRTdGF0ZSAoc3RhdGUsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoXG4gICAgPyBwYXRoLnJlZHVjZShmdW5jdGlvbiAoc3RhdGUsIGtleSkgeyByZXR1cm4gc3RhdGVba2V5XTsgfSwgc3RhdGUpXG4gICAgOiBzdGF0ZVxufVxuXG5mdW5jdGlvbiB1bmlmeU9iamVjdFN0eWxlICh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdCh0eXBlKSAmJiB0eXBlLnR5cGUpIHtcbiAgICBvcHRpb25zID0gcGF5bG9hZDtcbiAgICBwYXlsb2FkID0gdHlwZTtcbiAgICB0eXBlID0gdHlwZS50eXBlO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAoXCJFeHBlY3RzIHN0cmluZyBhcyB0aGUgdHlwZSwgYnV0IGZvdW5kIFwiICsgKHR5cGVvZiB0eXBlKSArIFwiLlwiKSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkLCBvcHRpb25zOiBvcHRpb25zIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoX1Z1ZSkge1xuICBpZiAoVnVlICYmIF9WdWUgPT09IFZ1ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnW3Z1ZXhdIGFscmVhZHkgaW5zdGFsbGVkLiBWdWUudXNlKFZ1ZXgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIFZ1ZSA9IF9WdWU7XG4gIGFwcGx5TWl4aW4oVnVlKTtcbn1cblxudmFyIG1hcFN0YXRlID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIHN0YXRlcykge1xuICB2YXIgcmVzID0ge307XG4gIG5vcm1hbGl6ZU1hcChzdGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRTdGF0ZSAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLiRzdG9yZS5zdGF0ZTtcbiAgICAgIHZhciBnZXR0ZXJzID0gdGhpcy4kc3RvcmUuZ2V0dGVycztcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwU3RhdGUnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gbW9kdWxlLmNvbnRleHQuc3RhdGU7XG4gICAgICAgIGdldHRlcnMgPSBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuY2FsbCh0aGlzLCBzdGF0ZSwgZ2V0dGVycylcbiAgICAgICAgOiBzdGF0ZVt2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgbm9ybWFsaXplTWFwKG11dGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZE11dGF0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICB2YXIgY29tbWl0ID0gdGhpcy4kc3RvcmUuY29tbWl0O1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgbW9kdWxlID0gZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBNdXRhdGlvbnMnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbW1pdCA9IG1vZHVsZS5jb250ZXh0LmNvbW1pdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtjb21taXRdLmNvbmNhdChhcmdzKSlcbiAgICAgICAgOiBjb21taXQuYXBwbHkodGhpcy4kc3RvcmUsIFt2YWxdLmNvbmNhdChhcmdzKSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbnZhciBtYXBHZXR0ZXJzID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGdldHRlcnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBub3JtYWxpemVNYXAoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICB2YWwgPSBuYW1lc3BhY2UgKyB2YWw7XG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRHZXR0ZXIgKCkge1xuICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBHZXR0ZXJzJywgbmFtZXNwYWNlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEodmFsIGluIHRoaXMuJHN0b3JlLmdldHRlcnMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gZ2V0dGVyOiBcIiArIHZhbCkpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzW3ZhbF1cbiAgICB9O1xuICAgIC8vIG1hcmsgdnVleCBnZXR0ZXIgZm9yIGRldnRvb2xzXG4gICAgcmVzW2tleV0udnVleCA9IHRydWU7XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxudmFyIG1hcEFjdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgYWN0aW9ucykge1xuICB2YXIgcmVzID0ge307XG4gIG5vcm1hbGl6ZU1hcChhY3Rpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkQWN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICB2YXIgZGlzcGF0Y2ggPSB0aGlzLiRzdG9yZS5kaXNwYXRjaDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwQWN0aW9ucycsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2ggPSBtb2R1bGUuY29udGV4dC5kaXNwYXRjaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtkaXNwYXRjaF0uY29uY2F0KGFyZ3MpKVxuICAgICAgICA6IGRpc3BhdGNoLmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG52YXIgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7IHJldHVybiAoe1xuICBtYXBTdGF0ZTogbWFwU3RhdGUuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBHZXR0ZXJzOiBtYXBHZXR0ZXJzLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBBY3Rpb25zOiBtYXBBY3Rpb25zLmJpbmQobnVsbCwgbmFtZXNwYWNlKVxufSk7IH07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcClcbiAgICA/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWVzcGFjZSAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1hcCkge1xuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlICE9PSAnc3RyaW5nJykge1xuICAgICAgbWFwID0gbmFtZXNwYWNlO1xuICAgICAgbmFtZXNwYWNlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuYW1lc3BhY2UuY2hhckF0KG5hbWVzcGFjZS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICBuYW1lc3BhY2UgKz0gJy8nO1xuICAgIH1cbiAgICByZXR1cm4gZm4obmFtZXNwYWNlLCBtYXApXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlQnlOYW1lc3BhY2UgKHN0b3JlLCBoZWxwZXIsIG5hbWVzcGFjZSkge1xuICB2YXIgbW9kdWxlID0gc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIW1vZHVsZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIG1vZHVsZSBuYW1lc3BhY2Ugbm90IGZvdW5kIGluIFwiICsgaGVscGVyICsgXCIoKTogXCIgKyBuYW1lc3BhY2UpKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlXG59XG5cbnZhciBpbmRleF9lc20gPSB7XG4gIFN0b3JlOiBTdG9yZSxcbiAgaW5zdGFsbDogaW5zdGFsbCxcbiAgdmVyc2lvbjogJzMuMC4xJyxcbiAgbWFwU3RhdGU6IG1hcFN0YXRlLFxuICBtYXBNdXRhdGlvbnM6IG1hcE11dGF0aW9ucyxcbiAgbWFwR2V0dGVyczogbWFwR2V0dGVycyxcbiAgbWFwQWN0aW9uczogbWFwQWN0aW9ucyxcbiAgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnM6IGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzXG59O1xuXG5leHBvcnQgeyBTdG9yZSwgaW5zdGFsbCwgbWFwU3RhdGUsIG1hcE11dGF0aW9ucywgbWFwR2V0dGVycywgbWFwQWN0aW9ucywgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGluZGV4X2VzbTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n");
- /***/ }),
- /* 32 */
- /*!***********************************************!*\
- !*** E:/sheverAPP/APP/store/modules/chart.js ***!
- \***********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _http = _interopRequireDefault(__webpack_require__(/*! @/configs/http */ 17));\nvar _NavFuncs = __webpack_require__(/*! @/common/NavFuncs */ 33);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var _default =\n\n{\n namespaced: true,\n actions: {\n getProvinceAll: function getProvinceAll(_ref, param) {var commit = _ref.commit;\n return _http.default.sz.post('/TOrder/getProvinceAll', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n getProvince: function getProvince(_ref2, param) {var commit = _ref2.commit;\n return _http.default.sz.post('/TOrder/getProvince', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n getEquipmentStatistics: function getEquipmentStatistics(_ref3, param) {var commit = _ref3.commit;\n return _http.default.sz.post('/TOrder/getEquipmentStatistics', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n getStatistics: function getStatistics(_ref4, param) {var commit = _ref4.commit;\n return _http.default.sz.post('/TOrder/getStatistics', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n getMainStatistics: function getMainStatistics(_ref5, param) {var commit = _ref5.commit;\n return _http.default.sz.post('/TOrder/getMainStatistics', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n getEquipmentListByUser: function getEquipmentListByUser(_ref6, param) {var commit = _ref6.commit;\n return _http.default.sz.post('/TEquipment/getEquipmentListByUser', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n getEquipmentListByProvince: function getEquipmentListByProvince(_ref7, param) {var commit = _ref7.commit;\n return _http.default.sz.post('/TEquipment/getEquipmentListByProvince', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n },\n updata: function updata(_ref8, param) {var commit = _ref8.commit;\n return _http.default.sz.post('/TEquipment/updateName', param).\n then(function (res) {var\n data = res.data;\n return res;\n });\n },\n getMachineNum: function getMachineNum(_ref9, param) {var commit = _ref9.commit;\n return _http.default.sz.post('/TEquipment/getMachineNum', param).\n then(function (res) {var\n data = res.data;\n return data;\n });\n } } };exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvbW9kdWxlcy9jaGFydC5qcyJdLCJuYW1lcyI6WyJuYW1lc3BhY2VkIiwiYWN0aW9ucyIsImdldFByb3ZpbmNlQWxsIiwicGFyYW0iLCJjb21taXQiLCJhcGlzIiwic3oiLCJwb3N0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRQcm92aW5jZSIsImdldEVxdWlwbWVudFN0YXRpc3RpY3MiLCJnZXRTdGF0aXN0aWNzIiwiZ2V0TWFpblN0YXRpc3RpY3MiLCJnZXRFcXVpcG1lbnRMaXN0QnlVc2VyIiwiZ2V0RXF1aXBtZW50TGlzdEJ5UHJvdmluY2UiLCJ1cGRhdGEiLCJnZXRNYWNoaW5lTnVtIl0sIm1hcHBpbmdzIjoidUZBQUE7QUFDQSxpRTs7QUFFZTtBQUNkQSxZQUFVLEVBQUUsSUFERTtBQUVkQyxTQUFPLEVBQUU7QUFDUkMsa0JBRFEsZ0NBQ2tCQyxLQURsQixFQUN5QixLQUFoQkMsTUFBZ0IsUUFBaEJBLE1BQWdCO0FBQ2hDLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLHdCQUFiLEVBQXNDSixLQUF0QztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBUE87QUFRUkMsZUFSUSw4QkFRZVIsS0FSZixFQVFzQixLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQzdCLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLHFCQUFiLEVBQW1DSixLQUFuQztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBZE87QUFlUkUsMEJBZlEseUNBZTBCVCxLQWYxQixFQWVpQyxLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQ3hDLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLGdDQUFiLEVBQThDSixLQUE5QztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBckJPO0FBc0JSRyxpQkF0QlEsZ0NBc0JpQlYsS0F0QmpCLEVBc0J3QixLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQy9CLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLHVCQUFiLEVBQXFDSixLQUFyQztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBNUJPO0FBNkJSSSxxQkE3QlEsb0NBNkJxQlgsS0E3QnJCLEVBNkI0QixLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQ25DLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLDJCQUFiLEVBQXlDSixLQUF6QztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBbkNPO0FBb0NSSywwQkFwQ1EseUNBb0MwQlosS0FwQzFCLEVBb0NpQyxLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQ3hDLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLG9DQUFiLEVBQWtESixLQUFsRDtBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBMUNPO0FBMkNSTSw4QkEzQ1EsNkNBMkM4QmIsS0EzQzlCLEVBMkNxQyxLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQzVDLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLHdDQUFiLEVBQXNESixLQUF0RDtBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBakRPO0FBa0RSTyxVQWxEUSx5QkFrRFVkLEtBbERWLEVBa0RpQixLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQ3hCLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLHdCQUFiLEVBQXNDSixLQUF0QztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0QsR0FBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBeERPO0FBeURSUyxpQkF6RFEsZ0NBeURpQmYsS0F6RGpCLEVBeUR3QixLQUFoQkMsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQy9CLGFBQU9DLGNBQUtDLEVBQUwsQ0FBUUMsSUFBUixDQUFhLDJCQUFiLEVBQXlDSixLQUF6QztBQUNMSyxVQURLLENBQ0EsVUFBQUMsR0FBRyxFQUFJO0FBQ0pDLFlBREksR0FDS0QsR0FETCxDQUNKQyxJQURJO0FBRVosZUFBT0EsSUFBUDtBQUNBLE9BSkssQ0FBUDtBQUtBLEtBL0RPLEVBRkssRSIsImZpbGUiOiIzMi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcGlzIGZyb20gJ0AvY29uZmlncy9odHRwJztcclxuaW1wb3J0IHsgcmVkaXJlY3RUb0xvZ2luLCByZWRpcmVjdFRvIH0gZnJvbSAnQC9jb21tb24vTmF2RnVuY3MnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG5cdG5hbWVzcGFjZWQ6IHRydWUsXHJcblx0YWN0aW9uczoge1xyXG5cdFx0Z2V0UHJvdmluY2VBbGwoeyBjb21taXQgfSxwYXJhbSkge1xyXG5cdFx0XHRyZXR1cm4gYXBpcy5zei5wb3N0KCcvVE9yZGVyL2dldFByb3ZpbmNlQWxsJyxwYXJhbSlcclxuXHRcdFx0XHQudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyBkYXRhIH0gPSByZXM7XHJcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0sXHJcblx0XHRnZXRQcm92aW5jZSh7IGNvbW1pdCB9LHBhcmFtKSB7XHJcblx0XHRcdHJldHVybiBhcGlzLnN6LnBvc3QoJy9UT3JkZXIvZ2V0UHJvdmluY2UnLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdGdldEVxdWlwbWVudFN0YXRpc3RpY3MoeyBjb21taXQgfSxwYXJhbSkge1xyXG5cdFx0XHRyZXR1cm4gYXBpcy5zei5wb3N0KCcvVE9yZGVyL2dldEVxdWlwbWVudFN0YXRpc3RpY3MnLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdGdldFN0YXRpc3RpY3MoeyBjb21taXQgfSxwYXJhbSkge1xyXG5cdFx0XHRyZXR1cm4gYXBpcy5zei5wb3N0KCcvVE9yZGVyL2dldFN0YXRpc3RpY3MnLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdGdldE1haW5TdGF0aXN0aWNzKHsgY29tbWl0IH0scGFyYW0pIHtcclxuXHRcdFx0cmV0dXJuIGFwaXMuc3oucG9zdCgnL1RPcmRlci9nZXRNYWluU3RhdGlzdGljcycscGFyYW0pXHJcblx0XHRcdFx0LnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHsgZGF0YSB9ID0gcmVzO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Z2V0RXF1aXBtZW50TGlzdEJ5VXNlcih7IGNvbW1pdCB9LHBhcmFtKSB7XHJcblx0XHRcdHJldHVybiBhcGlzLnN6LnBvc3QoJy9URXF1aXBtZW50L2dldEVxdWlwbWVudExpc3RCeVVzZXInLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdGdldEVxdWlwbWVudExpc3RCeVByb3ZpbmNlKHsgY29tbWl0IH0scGFyYW0pIHtcclxuXHRcdFx0cmV0dXJuIGFwaXMuc3oucG9zdCgnL1RFcXVpcG1lbnQvZ2V0RXF1aXBtZW50TGlzdEJ5UHJvdmluY2UnLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdHVwZGF0YSh7IGNvbW1pdCB9LHBhcmFtKSB7XHJcblx0XHRcdHJldHVybiBhcGlzLnN6LnBvc3QoJy9URXF1aXBtZW50L3VwZGF0ZU5hbWUnLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiByZXM7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Z2V0TWFjaGluZU51bSh7IGNvbW1pdCB9LHBhcmFtKSB7XHJcblx0XHRcdHJldHVybiBhcGlzLnN6LnBvc3QoJy9URXF1aXBtZW50L2dldE1hY2hpbmVOdW0nLHBhcmFtKVxyXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IGRhdGEgfSA9IHJlcztcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHR9XHJcbn1cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///32\n");
- /***/ }),
- /* 33 */
- /*!*******************************************!*\
- !*** E:/sheverAPP/APP/common/NavFuncs.js ***!
- \*******************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.redirectToLogin = redirectToLogin;exports.redirectTo = redirectTo;exports.goBack = goBack;\nfunction redirectToLogin() {\n redirectTo('/pages/Login/Login');\n}\n\nfunction redirectTo(url) {\n uni.redirectTo({\n url: url });\n\n}\n\nfunction goBack() {\n uni.navigateBack();\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tbW9uL05hdkZ1bmNzLmpzIl0sIm5hbWVzIjpbInJlZGlyZWN0VG9Mb2dpbiIsInJlZGlyZWN0VG8iLCJ1cmwiLCJ1bmkiLCJnb0JhY2siLCJuYXZpZ2F0ZUJhY2siXSwibWFwcGluZ3MiOiI7QUFDQSxTQUFTQSxlQUFULEdBQTJCO0FBQzFCQyxZQUFVLENBQUMsb0JBQUQsQ0FBVjtBQUNBOztBQUVELFNBQVNBLFVBQVQsQ0FBb0JDLEdBQXBCLEVBQXlCO0FBQ3hCQyxLQUFHLENBQUNGLFVBQUosQ0FBZTtBQUNkQyxPQUFHLEVBQUhBLEdBRGMsRUFBZjs7QUFHQTs7QUFFRCxTQUFTRSxNQUFULEdBQWtCO0FBQ2pCRCxLQUFHLENBQUNFLFlBQUo7QUFDQSxDIiwiZmlsZSI6IjMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmZ1bmN0aW9uIHJlZGlyZWN0VG9Mb2dpbigpIHtcclxuXHRyZWRpcmVjdFRvKCcvcGFnZXMvTG9naW4vTG9naW4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVkaXJlY3RUbyh1cmwpIHtcclxuXHR1bmkucmVkaXJlY3RUbyh7XHJcblx0XHR1cmxcclxuXHR9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ29CYWNrKCkge1xyXG5cdHVuaS5uYXZpZ2F0ZUJhY2soKTtcclxufVxyXG5cclxuZXhwb3J0IHtcclxuXHRyZWRpcmVjdFRvTG9naW4sXHJcblx0cmVkaXJlY3RUbyxcclxuXHRnb0JhY2tcclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///33\n");
- /***/ }),
- /* 34 */
- /*!******************************************!*\
- !*** E:/sheverAPP/APP/common/lang/zh.js ***!
- \******************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _default = {\n lang: 'zh',\n login: {\n title: '管理后台',\n username: '请输入用户名',\n password: '请输入密码',\n login: '登录' },\n\n tabs: {\n tab1: \"首页\",\n tab2: \"机器销售\",\n tab3: \"机器排行\",\n tab4: \"机器状态\",\n tab5: \"我的\" },\n\n mainStatistics: {\n title: '统计图表',\n name: '用户',\n company: '申泽智能物联',\n dayTotalMoney: '今日收入总额',\n dayTotalNum: '今日销售数量',\n weekTotalMoney: '本周收入总额',\n weekTotalNum: '本周销售数量',\n monthTotalMoney: '本月收入总额',\n monthTotalNum: '本月销售数量',\n yearTotalMoney: '本年收入总额',\n yearTotalNum: '本年销售数量',\n machineTotalNum: '投放机器数量',\n machineUseNum: '运营机器数量',\n day: '今日销售情况',\n week: '本周销售情况',\n month: '本月销售情况',\n year: '本年销售情况',\n week0: '星期日',\n week1: '星期一',\n week2: '星期二',\n week3: '星期三',\n week4: '星期四',\n week5: '星期五',\n week6: '星期六',\n oclock: '点',\n mon: '月',\n y: '月',\n saleNum: '销售个数',\n saleroom: '销售额' },\n\n merchantList: {\n title: '机器销售',\n total: '总销售情况',\n data: '暂无数据' },\n\n equipmentStatusList: {\n title: '机器状态',\n red: '红色代表机器报警',\n green: '绿色代表机器正常',\n sleep: '睡眠状态:机器已睡眠',\n unsleep: '睡眠状态:未睡眠',\n on: '关机:未关机',\n off: '关机:已关机',\n equipmentNo: '机器唯一码',\n area: '所在地',\n temperature: '炉头温度',\n equipmentTemperature: '柜内温度',\n humidity: '柜内湿度',\n alarm: '报警内容',\n tip: '提示',\n sleepTip: '是否休眠?',\n onoffTip: '是否关机?' },\n\n equipmentStatics: {\n title: '机器销售排行',\n day: '今日销售排行',\n week: '本周销售排行',\n month: '本月销售排行',\n year: '本年销售排行' },\n\n user: {\n title: '我的',\n bindLogout: '退出',\n equipmentname: '修改设备名称' },\n\n equipmentname: {\n title: '修改设备名称',\n updata: '更改' } };exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tbW9uL2xhbmcvemguanMiXSwibmFtZXMiOlsibGFuZyIsImxvZ2luIiwidGl0bGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidGFicyIsInRhYjEiLCJ0YWIyIiwidGFiMyIsInRhYjQiLCJ0YWI1IiwibWFpblN0YXRpc3RpY3MiLCJuYW1lIiwiY29tcGFueSIsImRheVRvdGFsTW9uZXkiLCJkYXlUb3RhbE51bSIsIndlZWtUb3RhbE1vbmV5Iiwid2Vla1RvdGFsTnVtIiwibW9udGhUb3RhbE1vbmV5IiwibW9udGhUb3RhbE51bSIsInllYXJUb3RhbE1vbmV5IiwieWVhclRvdGFsTnVtIiwibWFjaGluZVRvdGFsTnVtIiwibWFjaGluZVVzZU51bSIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiLCJ3ZWVrMCIsIndlZWsxIiwid2VlazIiLCJ3ZWVrMyIsIndlZWs0Iiwid2VlazUiLCJ3ZWVrNiIsIm9jbG9jayIsIm1vbiIsInkiLCJzYWxlTnVtIiwic2FsZXJvb20iLCJtZXJjaGFudExpc3QiLCJ0b3RhbCIsImRhdGEiLCJlcXVpcG1lbnRTdGF0dXNMaXN0IiwicmVkIiwiZ3JlZW4iLCJzbGVlcCIsInVuc2xlZXAiLCJvbiIsIm9mZiIsImVxdWlwbWVudE5vIiwiYXJlYSIsInRlbXBlcmF0dXJlIiwiZXF1aXBtZW50VGVtcGVyYXR1cmUiLCJodW1pZGl0eSIsImFsYXJtIiwidGlwIiwic2xlZXBUaXAiLCJvbm9mZlRpcCIsImVxdWlwbWVudFN0YXRpY3MiLCJ1c2VyIiwiYmluZExvZ291dCIsImVxdWlwbWVudG5hbWUiLCJ1cGRhdGEiXSwibWFwcGluZ3MiOiJzR0FBZTtBQUNkQSxNQUFJLEVBQUUsSUFEUTtBQUVkQyxPQUFLLEVBQUU7QUFDTkMsU0FBSyxFQUFFLE1BREQ7QUFFTkMsWUFBUSxFQUFDLFFBRkg7QUFHTkMsWUFBUSxFQUFDLE9BSEg7QUFJTkgsU0FBSyxFQUFDLElBSkEsRUFGTzs7QUFRZEksTUFBSSxFQUFDO0FBQ0pDLFFBQUksRUFBQyxJQUREO0FBRUpDLFFBQUksRUFBQyxNQUZEO0FBR0pDLFFBQUksRUFBQyxNQUhEO0FBSUpDLFFBQUksRUFBQyxNQUpEO0FBS0pDLFFBQUksRUFBQyxJQUxELEVBUlM7O0FBZWRDLGdCQUFjLEVBQUM7QUFDZFQsU0FBSyxFQUFDLE1BRFE7QUFFZFUsUUFBSSxFQUFDLElBRlM7QUFHZEMsV0FBTyxFQUFDLFFBSE07QUFJZEMsaUJBQWEsRUFBQyxRQUpBO0FBS2RDLGVBQVcsRUFBQyxRQUxFO0FBTWRDLGtCQUFjLEVBQUMsUUFORDtBQU9kQyxnQkFBWSxFQUFDLFFBUEM7QUFRZEMsbUJBQWUsRUFBQyxRQVJGO0FBU2RDLGlCQUFhLEVBQUMsUUFUQTtBQVVkQyxrQkFBYyxFQUFDLFFBVkQ7QUFXZEMsZ0JBQVksRUFBQyxRQVhDO0FBWWRDLG1CQUFlLEVBQUMsUUFaRjtBQWFkQyxpQkFBYSxFQUFDLFFBYkE7QUFjZEMsT0FBRyxFQUFDLFFBZFU7QUFlZEMsUUFBSSxFQUFDLFFBZlM7QUFnQmRDLFNBQUssRUFBQyxRQWhCUTtBQWlCZEMsUUFBSSxFQUFDLFFBakJTO0FBa0JkQyxTQUFLLEVBQUMsS0FsQlE7QUFtQmRDLFNBQUssRUFBQyxLQW5CUTtBQW9CZEMsU0FBSyxFQUFDLEtBcEJRO0FBcUJkQyxTQUFLLEVBQUMsS0FyQlE7QUFzQmRDLFNBQUssRUFBQyxLQXRCUTtBQXVCZEMsU0FBSyxFQUFDLEtBdkJRO0FBd0JkQyxTQUFLLEVBQUMsS0F4QlE7QUF5QmRDLFVBQU0sRUFBQyxHQXpCTztBQTBCZEMsT0FBRyxFQUFDLEdBMUJVO0FBMkJkQyxLQUFDLEVBQUMsR0EzQlk7QUE0QmRDLFdBQU8sRUFBQyxNQTVCTTtBQTZCZEMsWUFBUSxFQUFDLEtBN0JLLEVBZkQ7O0FBOENkQyxjQUFZLEVBQUM7QUFDWnRDLFNBQUssRUFBQyxNQURNO0FBRVp1QyxTQUFLLEVBQUMsT0FGTTtBQUdaQyxRQUFJLEVBQUMsTUFITyxFQTlDQzs7QUFtRGRDLHFCQUFtQixFQUFDO0FBQ25CekMsU0FBSyxFQUFDLE1BRGE7QUFFbkIwQyxPQUFHLEVBQUMsVUFGZTtBQUduQkMsU0FBSyxFQUFDLFVBSGE7QUFJbkJDLFNBQUssRUFBQyxZQUphO0FBS25CQyxXQUFPLEVBQUMsVUFMVztBQU1uQkMsTUFBRSxFQUFDLFFBTmdCO0FBT25CQyxPQUFHLEVBQUMsUUFQZTtBQVFuQkMsZUFBVyxFQUFDLE9BUk87QUFTbkJDLFFBQUksRUFBQyxLQVRjO0FBVW5CQyxlQUFXLEVBQUUsTUFWTTtBQVduQkMsd0JBQW9CLEVBQUMsTUFYRjtBQVluQkMsWUFBUSxFQUFDLE1BWlU7QUFhbkJDLFNBQUssRUFBQyxNQWJhO0FBY25CQyxPQUFHLEVBQUMsSUFkZTtBQWVuQkMsWUFBUSxFQUFDLE9BZlU7QUFnQm5CQyxZQUFRLEVBQUMsT0FoQlUsRUFuRE47O0FBcUVkQyxrQkFBZ0IsRUFBQztBQUNoQnpELFNBQUssRUFBQyxRQURVO0FBRWhCc0IsT0FBRyxFQUFDLFFBRlk7QUFHaEJDLFFBQUksRUFBQyxRQUhXO0FBSWhCQyxTQUFLLEVBQUMsUUFKVTtBQUtoQkMsUUFBSSxFQUFDLFFBTFcsRUFyRUg7O0FBNEVkaUMsTUFBSSxFQUFDO0FBQ0oxRCxTQUFLLEVBQUMsSUFERjtBQUVKMkQsY0FBVSxFQUFDLElBRlA7QUFHSkMsaUJBQWEsRUFBQyxRQUhWLEVBNUVTOztBQWlGZEEsZUFBYSxFQUFDO0FBQ2I1RCxTQUFLLEVBQUMsUUFETztBQUViNkQsVUFBTSxFQUFDLElBRk0sRUFqRkEsRSIsImZpbGUiOiIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcclxuXHRsYW5nOiAnemgnLFxyXG5cdGxvZ2luOiB7XHJcblx0XHR0aXRsZTogJ+euoeeQhuWQjuWPsCcsXHJcblx0XHR1c2VybmFtZTon6K+36L6T5YWl55So5oi35ZCNJyxcclxuXHRcdHBhc3N3b3JkOifor7fovpPlhaXlr4bnoIEnLFxyXG5cdFx0bG9naW46J+eZu+W9lSdcclxuXHR9LFxyXG5cdHRhYnM6e1xyXG5cdFx0dGFiMTpcIummlumhtVwiLFxyXG5cdFx0dGFiMjpcIuacuuWZqOmUgOWUrlwiLFxyXG5cdFx0dGFiMzpcIuacuuWZqOaOkuihjFwiLFxyXG5cdFx0dGFiNDpcIuacuuWZqOeKtuaAgVwiLFxyXG5cdFx0dGFiNTpcIuaIkeeahFwiXHJcblx0fSxcclxuXHRtYWluU3RhdGlzdGljczp7XHJcblx0XHR0aXRsZTon57uf6K6h5Zu+6KGoJyxcclxuXHRcdG5hbWU6J+eUqOaItycsXHJcblx0XHRjb21wYW55OifnlLPms73mmbrog73nianogZQnLFxyXG5cdFx0ZGF5VG90YWxNb25leTon5LuK5pel5pS25YWl5oC76aKdJyxcclxuXHRcdGRheVRvdGFsTnVtOifku4rml6XplIDllK7mlbDph48nLFxyXG5cdFx0d2Vla1RvdGFsTW9uZXk6J+acrOWRqOaUtuWFpeaAu+minScsXHJcblx0XHR3ZWVrVG90YWxOdW06J+acrOWRqOmUgOWUruaVsOmHjycsXHJcblx0XHRtb250aFRvdGFsTW9uZXk6J+acrOaciOaUtuWFpeaAu+minScsXHJcblx0XHRtb250aFRvdGFsTnVtOifmnKzmnIjplIDllK7mlbDph48nLFxyXG5cdFx0eWVhclRvdGFsTW9uZXk6J+acrOW5tOaUtuWFpeaAu+minScsXHJcblx0XHR5ZWFyVG90YWxOdW06J+acrOW5tOmUgOWUruaVsOmHjycsXHJcblx0XHRtYWNoaW5lVG90YWxOdW06J+aKleaUvuacuuWZqOaVsOmHjycsXHJcblx0XHRtYWNoaW5lVXNlTnVtOifov5DokKXmnLrlmajmlbDph48nLFxyXG5cdFx0ZGF5Oifku4rml6XplIDllK7mg4XlhrUnLFxyXG5cdFx0d2Vlazon5pys5ZGo6ZSA5ZSu5oOF5Ya1JyxcclxuXHRcdG1vbnRoOifmnKzmnIjplIDllK7mg4XlhrUnLFxyXG5cdFx0eWVhcjon5pys5bm06ZSA5ZSu5oOF5Ya1JyxcclxuXHRcdHdlZWswOifmmJ/mnJ/ml6UnLFxyXG5cdFx0d2VlazE6J+aYn+acn+S4gCcsXHJcblx0XHR3ZWVrMjon5pif5pyf5LqMJyxcclxuXHRcdHdlZWszOifmmJ/mnJ/kuIknLFxyXG5cdFx0d2VlazQ6J+aYn+acn+WbmycsXHJcblx0XHR3ZWVrNTon5pif5pyf5LqUJyxcclxuXHRcdHdlZWs2OifmmJ/mnJ/lha0nLFxyXG5cdFx0b2Nsb2NrOifngrknLFxyXG5cdFx0bW9uOifmnIgnLFxyXG5cdFx0eTon5pyIJyxcclxuXHRcdHNhbGVOdW06J+mUgOWUruS4quaVsCcsXHJcblx0XHRzYWxlcm9vbTon6ZSA5ZSu6aKdJyxcclxuXHR9LFxyXG5cdG1lcmNoYW50TGlzdDp7XHJcblx0XHR0aXRsZTon5py65Zmo6ZSA5ZSuJyxcclxuXHRcdHRvdGFsOifmgLvplIDllK7mg4XlhrUnLFxyXG5cdFx0ZGF0YTon5pqC5peg5pWw5o2uJyxcclxuXHR9LFxyXG5cdGVxdWlwbWVudFN0YXR1c0xpc3Q6e1xyXG5cdFx0dGl0bGU6J+acuuWZqOeKtuaAgScsXHJcblx0XHRyZWQ6J+e6ouiJsuS7o+ihqOacuuWZqOaKpeitpicsXHJcblx0XHRncmVlbjon57u/6Imy5Luj6KGo5py65Zmo5q2j5bi4JyxcclxuXHRcdHNsZWVwOifnnaHnnKDnirbmgIHvvJrmnLrlmajlt7LnnaHnnKAnLFxyXG5cdFx0dW5zbGVlcDon552h55yg54q25oCB77ya5pyq552h55ygJyxcclxuXHRcdG9uOiflhbPmnLrvvJrmnKrlhbPmnLonLFxyXG5cdFx0b2ZmOiflhbPmnLrvvJrlt7LlhbPmnLonLFxyXG5cdFx0ZXF1aXBtZW50Tm86J+acuuWZqOWUr+S4gOeggScsXHJcblx0XHRhcmVhOifmiYDlnKjlnLAnLFxyXG5cdFx0dGVtcGVyYXR1cmUgOifngonlpLTmuKnluqYnLFxyXG5cdFx0ZXF1aXBtZW50VGVtcGVyYXR1cmU6J+afnOWGhea4qeW6picsXHJcblx0XHRodW1pZGl0eTon5p+c5YaF5rm/5bqmJyxcclxuXHRcdGFsYXJtOifmiqXorablhoXlrrknLFxyXG5cdFx0dGlwOifmj5DnpLonLFxyXG5cdFx0c2xlZXBUaXA6J+aYr+WQpuS8keecoO+8nycsXHJcblx0XHRvbm9mZlRpcDon5piv5ZCm5YWz5py677yfJ1xyXG5cdH0sXHJcblx0ZXF1aXBtZW50U3RhdGljczp7XHJcblx0XHR0aXRsZTon5py65Zmo6ZSA5ZSu5o6S6KGMJyxcclxuXHRcdGRheTon5LuK5pel6ZSA5ZSu5o6S6KGMJyxcclxuXHRcdHdlZWs6J+acrOWRqOmUgOWUruaOkuihjCcsXHJcblx0XHRtb250aDon5pys5pyI6ZSA5ZSu5o6S6KGMJyxcclxuXHRcdHllYXI6J+acrOW5tOmUgOWUruaOkuihjCdcclxuXHR9LFxyXG5cdHVzZXI6e1xyXG5cdFx0dGl0bGU6J+aIkeeahCcsXHJcblx0XHRiaW5kTG9nb3V0OifpgIDlh7onLFxyXG5cdFx0ZXF1aXBtZW50bmFtZTon5L+u5pS56K6+5aSH5ZCN56ewJ1xyXG5cdH0sXHJcblx0ZXF1aXBtZW50bmFtZTp7XHJcblx0XHR0aXRsZTon5L+u5pS56K6+5aSH5ZCN56ewJyxcclxuXHRcdHVwZGF0YTon5pu05pS5JyxcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///34\n");
- /***/ }),
- /* 35 */
- /*!******************************************!*\
- !*** E:/sheverAPP/APP/common/lang/en.js ***!
- \******************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _default = {\n lang: 'en',\n login: {\n title: 'backstage management',\n username: 'please enter a user name',\n password: 'please enter your password',\n login: 'login' },\n\n tabs: {\n tab1: \"home\",\n tab2: \"single\",\n tab3: \"ranking\",\n tab4: \"status\",\n tab5: \"me\" },\n\n mainStatistics: {\n title: 'Statistical charts',\n name: 'name',\n company: 'sunzee',\n dayTotalMoney: 'todayMoney',\n dayTotalNum: 'todayNumber',\n weekTotalMoney: 'weekMoney',\n weekTotalNum: 'weekNumber',\n monthTotalMoney: 'monthMoney',\n monthTotalNum: 'monthNumber',\n yearTotalMoney: 'yearMoney',\n yearTotalNum: 'yearNumber',\n machineTotalNum: 'machineNumber',\n machineUseNum: 'workingMachine',\n day: 'Sales today',\n week: 'Sales this week',\n month: 'Sales of this month',\n year: 'Current year sales',\n week0: 'SUN',\n week1: 'MON',\n week2: 'TUE',\n week3: 'WED',\n week4: 'THU',\n week5: 'FRI',\n week6: 'SAT',\n // oclock:'oclock',\n oclock: ':00',\n // mon:'m',\n mon: '-',\n y: '',\n saleNum: 'saleNum',\n saleroom: 'salemoney' },\n\n merchantList: {\n title: 'Machine Sales',\n total: 'Total sales',\n data: 'Temporarily no data' },\n\n equipmentStatusList: {\n title: 'equipment status',\n red: 'Red means machine alarm',\n green: 'Green means the machine is normal',\n sleep: 'sleep state:machine sleep',\n unsleep: 'sleep state:did not sleep',\n on: 'switch:the machine is turning on',\n off: 'switch:machine shut down',\n equipmentNo: 'equipmentNo',\n area: 'area',\n temperature: 'Temperature of the furnace head',\n equipmentTemperature: 'equipmentTemperature',\n humidity: 'equipmentHumidity',\n alarm: 'alarm content',\n tip: 'prompt',\n sleepTip: 'whether or not to sleep?',\n onoffTip: 'whether to turn it off?' },\n\n equipmentStatics: {\n title: 'Machine Sales Ranking',\n day: 'Today sales ranking',\n week: 'Sales ranking of the week',\n month: 'Sales ranking for this month',\n year: 'Current sales ranking' },\n\n user: {\n title: 'me',\n bindLogout: 'exit',\n equipmentname: 'modify device name' },\n\n equipmentname: {\n title: 'modify device name',\n updata: 'update' } };exports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tbW9uL2xhbmcvZW4uanMiXSwibmFtZXMiOlsibGFuZyIsImxvZ2luIiwidGl0bGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidGFicyIsInRhYjEiLCJ0YWIyIiwidGFiMyIsInRhYjQiLCJ0YWI1IiwibWFpblN0YXRpc3RpY3MiLCJuYW1lIiwiY29tcGFueSIsImRheVRvdGFsTW9uZXkiLCJkYXlUb3RhbE51bSIsIndlZWtUb3RhbE1vbmV5Iiwid2Vla1RvdGFsTnVtIiwibW9udGhUb3RhbE1vbmV5IiwibW9udGhUb3RhbE51bSIsInllYXJUb3RhbE1vbmV5IiwieWVhclRvdGFsTnVtIiwibWFjaGluZVRvdGFsTnVtIiwibWFjaGluZVVzZU51bSIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiLCJ3ZWVrMCIsIndlZWsxIiwid2VlazIiLCJ3ZWVrMyIsIndlZWs0Iiwid2VlazUiLCJ3ZWVrNiIsIm9jbG9jayIsIm1vbiIsInkiLCJzYWxlTnVtIiwic2FsZXJvb20iLCJtZXJjaGFudExpc3QiLCJ0b3RhbCIsImRhdGEiLCJlcXVpcG1lbnRTdGF0dXNMaXN0IiwicmVkIiwiZ3JlZW4iLCJzbGVlcCIsInVuc2xlZXAiLCJvbiIsIm9mZiIsImVxdWlwbWVudE5vIiwiYXJlYSIsInRlbXBlcmF0dXJlIiwiZXF1aXBtZW50VGVtcGVyYXR1cmUiLCJodW1pZGl0eSIsImFsYXJtIiwidGlwIiwic2xlZXBUaXAiLCJvbm9mZlRpcCIsImVxdWlwbWVudFN0YXRpY3MiLCJ1c2VyIiwiYmluZExvZ291dCIsImVxdWlwbWVudG5hbWUiLCJ1cGRhdGEiXSwibWFwcGluZ3MiOiJzR0FBZTtBQUNkQSxNQUFJLEVBQUUsSUFEUTtBQUVkQyxPQUFLLEVBQUU7QUFDTkMsU0FBSyxFQUFFLHNCQUREO0FBRU5DLFlBQVEsRUFBQywwQkFGSDtBQUdOQyxZQUFRLEVBQUMsNEJBSEg7QUFJTkgsU0FBSyxFQUFDLE9BSkEsRUFGTzs7QUFRZEksTUFBSSxFQUFDO0FBQ0pDLFFBQUksRUFBQyxNQUREO0FBRUpDLFFBQUksRUFBQyxRQUZEO0FBR0pDLFFBQUksRUFBQyxTQUhEO0FBSUpDLFFBQUksRUFBQyxRQUpEO0FBS0pDLFFBQUksRUFBQyxJQUxELEVBUlM7O0FBZWRDLGdCQUFjLEVBQUM7QUFDZFQsU0FBSyxFQUFDLG9CQURRO0FBRWRVLFFBQUksRUFBQyxNQUZTO0FBR2RDLFdBQU8sRUFBQyxRQUhNO0FBSWRDLGlCQUFhLEVBQUMsWUFKQTtBQUtkQyxlQUFXLEVBQUMsYUFMRTtBQU1kQyxrQkFBYyxFQUFDLFdBTkQ7QUFPZEMsZ0JBQVksRUFBQyxZQVBDO0FBUWRDLG1CQUFlLEVBQUMsWUFSRjtBQVNkQyxpQkFBYSxFQUFDLGFBVEE7QUFVZEMsa0JBQWMsRUFBQyxXQVZEO0FBV2RDLGdCQUFZLEVBQUMsWUFYQztBQVlkQyxtQkFBZSxFQUFDLGVBWkY7QUFhZEMsaUJBQWEsRUFBQyxnQkFiQTtBQWNkQyxPQUFHLEVBQUMsYUFkVTtBQWVkQyxRQUFJLEVBQUMsaUJBZlM7QUFnQmRDLFNBQUssRUFBQyxxQkFoQlE7QUFpQmRDLFFBQUksRUFBQyxvQkFqQlM7QUFrQmRDLFNBQUssRUFBQyxLQWxCUTtBQW1CZEMsU0FBSyxFQUFDLEtBbkJRO0FBb0JkQyxTQUFLLEVBQUMsS0FwQlE7QUFxQmRDLFNBQUssRUFBQyxLQXJCUTtBQXNCZEMsU0FBSyxFQUFDLEtBdEJRO0FBdUJkQyxTQUFLLEVBQUMsS0F2QlE7QUF3QmRDLFNBQUssRUFBQyxLQXhCUTtBQXlCZDtBQUNBQyxVQUFNLEVBQUMsS0ExQk87QUEyQmQ7QUFDQUMsT0FBRyxFQUFDLEdBNUJVO0FBNkJkQyxLQUFDLEVBQUMsRUE3Qlk7QUE4QmRDLFdBQU8sRUFBQyxTQTlCTTtBQStCZEMsWUFBUSxFQUFDLFdBL0JLLEVBZkQ7O0FBZ0RkQyxjQUFZLEVBQUM7QUFDWnRDLFNBQUssRUFBQyxlQURNO0FBRVp1QyxTQUFLLEVBQUMsYUFGTTtBQUdaQyxRQUFJLEVBQUMscUJBSE8sRUFoREM7O0FBcURkQyxxQkFBbUIsRUFBQztBQUNuQnpDLFNBQUssRUFBQyxrQkFEYTtBQUVuQjBDLE9BQUcsRUFBQyx5QkFGZTtBQUduQkMsU0FBSyxFQUFDLG1DQUhhO0FBSW5CQyxTQUFLLEVBQUMsMkJBSmE7QUFLbkJDLFdBQU8sRUFBQywyQkFMVztBQU1uQkMsTUFBRSxFQUFDLGtDQU5nQjtBQU9uQkMsT0FBRyxFQUFDLDBCQVBlO0FBUW5CQyxlQUFXLEVBQUMsYUFSTztBQVNuQkMsUUFBSSxFQUFDLE1BVGM7QUFVbkJDLGVBQVcsRUFBRSxpQ0FWTTtBQVduQkMsd0JBQW9CLEVBQUMsc0JBWEY7QUFZbkJDLFlBQVEsRUFBQyxtQkFaVTtBQWFuQkMsU0FBSyxFQUFDLGVBYmE7QUFjbkJDLE9BQUcsRUFBQyxRQWRlO0FBZW5CQyxZQUFRLEVBQUMsMEJBZlU7QUFnQm5CQyxZQUFRLEVBQUMseUJBaEJVLEVBckROOztBQXVFZEMsa0JBQWdCLEVBQUM7QUFDaEJ6RCxTQUFLLEVBQUMsdUJBRFU7QUFFaEJzQixPQUFHLEVBQUMscUJBRlk7QUFHaEJDLFFBQUksRUFBQywyQkFIVztBQUloQkMsU0FBSyxFQUFDLDhCQUpVO0FBS2hCQyxRQUFJLEVBQUMsdUJBTFcsRUF2RUg7O0FBOEVkaUMsTUFBSSxFQUFDO0FBQ0oxRCxTQUFLLEVBQUMsSUFERjtBQUVKMkQsY0FBVSxFQUFDLE1BRlA7QUFHSkMsaUJBQWEsRUFBQyxvQkFIVixFQTlFUzs7QUFtRmRBLGVBQWEsRUFBQztBQUNiNUQsU0FBSyxFQUFDLG9CQURPO0FBRWI2RCxVQUFNLEVBQUMsUUFGTSxFQW5GQSxFIiwiZmlsZSI6IjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xyXG5cdGxhbmc6ICdlbicsXHJcblx0bG9naW46IHtcclxuXHRcdHRpdGxlOiAnYmFja3N0YWdlIG1hbmFnZW1lbnQnLFxyXG5cdFx0dXNlcm5hbWU6J3BsZWFzZSBlbnRlciBhIHVzZXIgbmFtZScsXHJcblx0XHRwYXNzd29yZDoncGxlYXNlIGVudGVyIHlvdXIgcGFzc3dvcmQnLFxyXG5cdFx0bG9naW46J2xvZ2luJ1xyXG5cdH0sXHJcblx0dGFiczp7XHJcblx0XHR0YWIxOlwiaG9tZVwiLFxyXG5cdFx0dGFiMjpcInNpbmdsZVwiLFxyXG5cdFx0dGFiMzpcInJhbmtpbmdcIixcclxuXHRcdHRhYjQ6XCJzdGF0dXNcIixcclxuXHRcdHRhYjU6XCJtZVwiXHJcblx0fSxcclxuXHRtYWluU3RhdGlzdGljczp7XHJcblx0XHR0aXRsZTonU3RhdGlzdGljYWwgY2hhcnRzJyxcclxuXHRcdG5hbWU6J25hbWUnLFxyXG5cdFx0Y29tcGFueTonc3VuemVlJyxcclxuXHRcdGRheVRvdGFsTW9uZXk6J3RvZGF5TW9uZXknLFxyXG5cdFx0ZGF5VG90YWxOdW06J3RvZGF5TnVtYmVyJyxcclxuXHRcdHdlZWtUb3RhbE1vbmV5Oid3ZWVrTW9uZXknLFxyXG5cdFx0d2Vla1RvdGFsTnVtOid3ZWVrTnVtYmVyJyxcclxuXHRcdG1vbnRoVG90YWxNb25leTonbW9udGhNb25leScsXHJcblx0XHRtb250aFRvdGFsTnVtOidtb250aE51bWJlcicsXHJcblx0XHR5ZWFyVG90YWxNb25leToneWVhck1vbmV5JyxcclxuXHRcdHllYXJUb3RhbE51bToneWVhck51bWJlcicsXHJcblx0XHRtYWNoaW5lVG90YWxOdW06J21hY2hpbmVOdW1iZXInLFxyXG5cdFx0bWFjaGluZVVzZU51bTond29ya2luZ01hY2hpbmUnLFxyXG5cdFx0ZGF5OidTYWxlcyB0b2RheScsXHJcblx0XHR3ZWVrOidTYWxlcyB0aGlzIHdlZWsnLFxyXG5cdFx0bW9udGg6J1NhbGVzIG9mIHRoaXMgbW9udGgnLFxyXG5cdFx0eWVhcjonQ3VycmVudCB5ZWFyIHNhbGVzJyxcclxuXHRcdHdlZWswOidTVU4nLFxyXG5cdFx0d2VlazE6J01PTicsXHJcblx0XHR3ZWVrMjonVFVFJyxcclxuXHRcdHdlZWszOidXRUQnLFxyXG5cdFx0d2VlazQ6J1RIVScsXHJcblx0XHR3ZWVrNTonRlJJJyxcclxuXHRcdHdlZWs2OidTQVQnLFxyXG5cdFx0Ly8gb2Nsb2NrOidvY2xvY2snLFxyXG5cdFx0b2Nsb2NrOic6MDAnLFxyXG5cdFx0Ly8gbW9uOidtJyxcclxuXHRcdG1vbjonLScsXHJcblx0XHR5OicnLFxyXG5cdFx0c2FsZU51bTonc2FsZU51bScsXHJcblx0XHRzYWxlcm9vbTonc2FsZW1vbmV5JyxcclxuXHR9LFxyXG5cdG1lcmNoYW50TGlzdDp7XHJcblx0XHR0aXRsZTonTWFjaGluZSBTYWxlcycsXHJcblx0XHR0b3RhbDonVG90YWwgc2FsZXMnLFxyXG5cdFx0ZGF0YTonVGVtcG9yYXJpbHkgbm8gZGF0YScsXHJcblx0fSxcclxuXHRlcXVpcG1lbnRTdGF0dXNMaXN0OntcclxuXHRcdHRpdGxlOidlcXVpcG1lbnQgc3RhdHVzJyxcclxuXHRcdHJlZDonUmVkIG1lYW5zIG1hY2hpbmUgYWxhcm0nLFxyXG5cdFx0Z3JlZW46J0dyZWVuIG1lYW5zIHRoZSBtYWNoaW5lIGlzIG5vcm1hbCcsXHJcblx0XHRzbGVlcDonc2xlZXAgc3RhdGXvvJptYWNoaW5lIHNsZWVwJyxcclxuXHRcdHVuc2xlZXA6J3NsZWVwIHN0YXRl77yaZGlkIG5vdCBzbGVlcCcsXHJcblx0XHRvbjonc3dpdGNo77yadGhlIG1hY2hpbmUgaXMgdHVybmluZyBvbicsXHJcblx0XHRvZmY6J3N3aXRjaO+8mm1hY2hpbmUgc2h1dCBkb3duJyxcclxuXHRcdGVxdWlwbWVudE5vOidlcXVpcG1lbnRObycsXHJcblx0XHRhcmVhOidhcmVhJyxcclxuXHRcdHRlbXBlcmF0dXJlIDonVGVtcGVyYXR1cmUgb2YgdGhlIGZ1cm5hY2UgaGVhZCcsXHJcblx0XHRlcXVpcG1lbnRUZW1wZXJhdHVyZTonZXF1aXBtZW50VGVtcGVyYXR1cmUnLFxyXG5cdFx0aHVtaWRpdHk6J2VxdWlwbWVudEh1bWlkaXR5JyxcclxuXHRcdGFsYXJtOidhbGFybSBjb250ZW50JyxcclxuXHRcdHRpcDoncHJvbXB0JyxcclxuXHRcdHNsZWVwVGlwOid3aGV0aGVyIG9yIG5vdCB0byBzbGVlcD8nLFxyXG5cdFx0b25vZmZUaXA6J3doZXRoZXIgdG8gdHVybiBpdCBvZmY/J1xyXG5cdH0sXHJcblx0ZXF1aXBtZW50U3RhdGljczp7XHJcblx0XHR0aXRsZTonTWFjaGluZSBTYWxlcyBSYW5raW5nJyxcclxuXHRcdGRheTonVG9kYXkgc2FsZXMgcmFua2luZycsXHJcblx0XHR3ZWVrOidTYWxlcyByYW5raW5nIG9mIHRoZSB3ZWVrJyxcclxuXHRcdG1vbnRoOidTYWxlcyByYW5raW5nIGZvciB0aGlzIG1vbnRoJyxcclxuXHRcdHllYXI6J0N1cnJlbnQgc2FsZXMgcmFua2luZydcclxuXHR9LFxyXG5cdHVzZXI6e1xyXG5cdFx0dGl0bGU6J21lJyxcclxuXHRcdGJpbmRMb2dvdXQ6J2V4aXQnLFxyXG5cdFx0ZXF1aXBtZW50bmFtZTonbW9kaWZ5IGRldmljZSBuYW1lJ1xyXG5cdH0sXHJcblx0ZXF1aXBtZW50bmFtZTp7XHJcblx0XHR0aXRsZTonbW9kaWZ5IGRldmljZSBuYW1lJyxcclxuXHRcdHVwZGF0YTondXBkYXRlJyxcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n");
- /***/ }),
- /* 36 */,
- /* 37 */,
- /* 38 */,
- /* 39 */,
- /* 40 */,
- /* 41 */
- /*!**********************************************************!*\
- !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports = __webpack_require__(/*! regenerator-runtime */ 42);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLDZCQUFxQiIsImZpbGUiOiI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n");
- /***/ }),
- /* 42 */
- /*!************************************************************!*\
- !*** ./node_modules/regenerator-runtime/runtime-module.js ***!
- \************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() {\n return this || (typeof self === \"object\" && self);\n})() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = __webpack_require__(/*! ./runtime */ 43);\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG1CQUFXOztBQUVwQztBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSIsImZpbGUiOiI0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuLy8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG4vLyBrZXB0IGlkZW50aWNhbCB0byB0aGUgd2F5IGl0IGlzIG9idGFpbmVkIGluIHJ1bnRpbWUuanNcbnZhciBnID0gKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcyB8fCAodHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiYgc2VsZik7XG59KSgpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblxuLy8gVXNlIGBnZXRPd25Qcm9wZXJ0eU5hbWVzYCBiZWNhdXNlIG5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBjYWxsaW5nXG4vLyBgaGFzT3duUHJvcGVydHlgIG9uIHRoZSBnbG9iYWwgYHNlbGZgIG9iamVjdCBpbiBhIHdvcmtlci4gU2VlICMxODMuXG52YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGcpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIikgPj0gMDtcblxuLy8gU2F2ZSB0aGUgb2xkIHJlZ2VuZXJhdG9yUnVudGltZSBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHJlc3RvcmVkIGxhdGVyLlxudmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuXG4vLyBGb3JjZSByZWV2YWx1dGF0aW9uIG9mIHJ1bnRpbWUuanMuXG5nLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9ydW50aW1lXCIpO1xuXG5pZiAoaGFkUnVudGltZSkge1xuICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBydW50aW1lLlxuICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7XG59IGVsc2Uge1xuICAvLyBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wZXJ0eSBhZGRlZCBieSBydW50aW1lLmpzLlxuICB0cnkge1xuICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgfSBjYXRjaChlKSB7XG4gICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n");
- /***/ }),
- /* 43 */
- /*!*****************************************************!*\
- !*** ./node_modules/regenerator-runtime/runtime.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiNDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBJbiBzbG9wcHkgbW9kZSwgdW5ib3VuZCBgdGhpc2AgcmVmZXJzIHRvIHRoZSBnbG9iYWwgb2JqZWN0LCBmYWxsYmFjayB0b1xuICAvLyBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpZiB3ZSdyZSBpbiBnbG9iYWwgc3RyaWN0IG1vZGUuIFRoYXQgaXMgc2FkbHkgYSBmb3JtXG4gIC8vIG9mIGluZGlyZWN0IGV2YWwgd2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kuXG4gIChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcyB8fCAodHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiYgc2VsZik7XG4gIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpXG4pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///43\n");
- /***/ }),
- /* 44 */
- /*!********************************************************!*\
- !*** E:/sheverAPP/APP/components/u-charts/u-charts.js ***!
- \********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("/* WEBPACK VAR INJECTION */(function(__f__, uni) {/*\r\n * uCharts v1.7.0.4\r\n * uni-app平台高性能跨全端图表\r\n * 支持H5、APP、小程序(微信/支付宝/百度/头条)\r\n * Designed by QIUN秋云\r\n * \r\n * uCharts官方网站\r\n * https://www.uCharts.cn\r\n * \r\n * 开源地址:\r\n * https://github.com/16cheng/uCharts(停更)\r\n * 开源地址即将变更为:\r\n * https://gitee.com/qiuyunkeji/uCharts(尚未上传)\r\n * 开源协议变更为Apache-2.0\r\n * \r\n * uni-app插件市场地址:\r\n * http://ext.dcloud.net.cn/plugin?id=271\r\n * \r\n * 主要更新记录\r\n * 2019-04-01\r\n * 改造为兼容uni-app的uCharts\r\n * 2019-04-14\r\n * 支持支付宝/百度/头条小程序实现跨全端\r\n * 2019-04-15\r\n * 支持横屏模式,新增rotate参数,默认flase\r\n * 2019-04-16\r\n * 新增圆弧进度图,图表类型arcbar\r\n * 2019-04-22\r\n * 修改图表拖拽功能跨端支持,增加拖拽时显示滚动条\r\n * 2019-04-28\r\n * 新增柱状图自定义颜色\r\n * 2019-05-01\r\n * 新增仪表盘图\r\n * 2019-05-14\r\n * 新增K线图\r\n * 2019-05-20\r\n * 新增混合图、堆叠图、温度计图、柱状图类ToolTip效果\r\n * \r\n * \r\n */\n\n\n\nvar config = {\n yAxisWidth: 15,\n yAxisSplit: 5, //Y轴多少个数值\n xAxisHeight: 15,\n xAxisLineHeight: 15,\n legendHeight: 15,\n yAxisTitleWidth: 15,\n padding: 12,\n pixelRatio: 1, //适配H5高分屏\n rotate: false, //横屏模式\n columePadding: 3,\n fontSize: 11,\n //dataPointShape: ['diamond', 'circle', 'triangle', 'rect'],\n dataPointShape: ['circle', 'circle', 'circle', 'circle'], //仿F2图例样式改为圆点\n colors: ['#0B80E3', '#FC9F32', '#facc14', '#f04864', '#8543e0', '#90ed7d'],\n pieChartLinePadding: 15,\n pieChartTextPadding: 5,\n xAxisTextPadding: 3,\n titleColor: '#333333',\n titleFontSize: 20,\n subtitleColor: '#999999',\n subtitleFontSize: 15,\n toolTipPadding: 3,\n toolTipBackground: '#000000',\n toolTipOpacity: 0.7,\n toolTipLineHeight: 20,\n radarGridCount: 3,\n radarLabelTextMargin: 15,\n gaugeLabelTextMargin: 15 };\n\n\n// Object.assign polyfill\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\nfunction assign(target, varArgs) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) {\n // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\n\nvar util = {\n toFixed: function toFixed(num, limit) {\n limit = limit || 2;\n if (this.isFloat(num)) {\n num = num.toFixed(limit);\n }\n return num;\n },\n isFloat: function isFloat(num) {\n return num % 1 !== 0;\n },\n approximatelyEqual: function approximatelyEqual(num1, num2) {\n return Math.abs(num1 - num2) < 1e-10;\n },\n isSameSign: function isSameSign(num1, num2) {\n return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2;\n },\n isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) {\n return this.isSameSign(p1.x, p2.x);\n },\n isCollision: function isCollision(obj1, obj2) {\n obj1.end = {};\n obj1.end.x = obj1.start.x + obj1.width;\n obj1.end.y = obj1.start.y - obj1.height;\n obj2.end = {};\n obj2.end.x = obj2.start.x + obj2.width;\n obj2.end.y = obj2.start.y - obj2.height;\n var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y;\n\n return !flag;\n } };\n\n\n// hex 转 rgba\nfunction hexToRgb(hexValue, opc) {\n var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var hex = hexValue.replace(rgx, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n var r = parseInt(rgb[1], 16);\n var g = parseInt(rgb[2], 16);\n var b = parseInt(rgb[3], 16);\n return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')';\n}\n\nfunction findRange(num, type, limit) {\n if (isNaN(num)) {\n throw new Error('[wxCharts] unvalid series data!');\n }\n limit = limit || 10;\n type = type ? type : 'upper';\n var multiple = 1;\n while (limit < 1) {\n limit *= 10;\n multiple *= 10;\n }\n if (type === 'upper') {\n num = Math.ceil(num * multiple);\n } else {\n num = Math.floor(num * multiple);\n }\n while (num % limit !== 0) {\n if (type === 'upper') {\n num++;\n } else {\n num--;\n }\n }\n\n return num / multiple;\n}\n\nfunction calValidDistance(distance, chartData, config, opts) {\n\n var dataChartAreaWidth = opts.width - config.padding - chartData.xAxisPoints[0];\n var dataChartWidth = chartData.eachSpacing * opts.categories.length;\n var validDistance = distance;\n if (distance >= 0) {\n validDistance = 0;\n } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) {\n validDistance = dataChartAreaWidth - dataChartWidth;\n }\n return validDistance;\n}\n\nfunction isInAngleRange(angle, startAngle, endAngle) {\n function adjust(angle) {\n while (angle < 0) {\n angle += 2 * Math.PI;\n }\n while (angle > 2 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n\n return angle;\n }\n\n angle = adjust(angle);\n startAngle = adjust(startAngle);\n endAngle = adjust(endAngle);\n if (startAngle > endAngle) {\n endAngle += 2 * Math.PI;\n if (angle < startAngle) {\n angle += 2 * Math.PI;\n }\n }\n\n return angle >= startAngle && angle <= endAngle;\n}\n\nfunction calRotateTranslate(x, y, h) {\n var xv = x;\n var yv = h - y;\n\n var transX = xv + (h - yv - xv) / Math.sqrt(2);\n transX *= -1;\n\n var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2);\n\n return {\n transX: transX,\n transY: transY };\n\n}\n\nfunction createCurveControlPoints(points, i) {\n\n function isNotMiddlePoint(points, i) {\n if (points[i - 1] && points[i + 1]) {\n return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y, points[i + 1].y);\n } else {\n return false;\n }\n }\n\n var a = 0.2;\n var b = 0.2;\n var pAx = null;\n var pAy = null;\n var pBx = null;\n var pBy = null;\n if (i < 1) {\n pAx = points[0].x + (points[1].x - points[0].x) * a;\n pAy = points[0].y + (points[1].y - points[0].y) * a;\n } else {\n pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a;\n pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a;\n }\n\n if (i > points.length - 3) {\n var last = points.length - 1;\n pBx = points[last].x - (points[last].x - points[last - 1].x) * b;\n pBy = points[last].y - (points[last].y - points[last - 1].y) * b;\n } else {\n pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b;\n pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b;\n }\n\n // fix issue https://github.com/xiaolin3303/wx-charts/issues/79\n if (isNotMiddlePoint(points, i + 1)) {\n pBy = points[i + 1].y;\n }\n if (isNotMiddlePoint(points, i)) {\n pAy = points[i].y;\n }\n\n return {\n ctrA: { x: pAx, y: pAy },\n ctrB: { x: pBx, y: pBy } };\n\n}\n\nfunction convertCoordinateOrigin(x, y, center) {\n return {\n x: center.x + x,\n y: center.y - y };\n\n}\n\nfunction avoidCollision(obj, target) {\n if (target) {\n // is collision test\n while (util.isCollision(obj, target)) {\n if (obj.start.x > 0) {\n obj.start.y--;\n } else if (obj.start.x < 0) {\n obj.start.y++;\n } else {\n if (obj.start.y > 0) {\n obj.start.y++;\n } else {\n obj.start.y--;\n }\n }\n }\n }\n return obj;\n}\n\nfunction fillSeriesColor(series, config) {\n var index = 0;\n return series.map(function (item) {\n if (!item.color) {\n item.color = config.colors[index];\n index = (index + 1) % config.colors.length;\n }\n return item;\n });\n}\n\nfunction fillSeriesType(series, opts) {\n return series.map(function (item) {\n if (!item.type) {\n item.type = opts.type;\n }\n return item;\n });\n}\n\nfunction getDataRange(minData, maxData) {\n var limit = 0;\n var range = maxData - minData;\n if (range >= 10000) {\n limit = 1000;\n } else if (range >= 1000) {\n limit = 100;\n } else if (range >= 100) {\n limit = 10;\n } else if (range >= 10) {\n limit = 5;\n } else if (range >= 1) {\n limit = 1;\n } else if (range >= 0.1) {\n limit = 0.1;\n } else {\n limit = 0.01;\n }\n return {\n minRange: findRange(minData, 'lower', limit),\n maxRange: findRange(maxData, 'upper', limit) };\n\n}\n\nfunction measureText(text) {\n var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.fontSize;\n\n // wx canvas 未实现measureText方法, 此处自行实现\n // 适配修改初始字体10px为其他大小的方法\n text = String(text);\n var text = text.split('');\n var width = 0;\n text.forEach(function (item) {\n if (/[a-zA-Z]/.test(item)) {\n width += 7;\n } else if (/[0-9]/.test(item)) {\n width += 5.5;\n } else if (/\\./.test(item)) {\n width += 2.7;\n } else if (/-/.test(item)) {\n width += 3.25;\n } else if (/[\\u4e00-\\u9fa5]/.test(item)) {\n width += 10;\n } else if (/\\(|\\)/.test(item)) {\n width += 3.73;\n } else if (/\\s/.test(item)) {\n width += 2.5;\n } else if (/%/.test(item)) {\n width += 8;\n } else {\n width += 10;\n }\n });\n return width * fontSize / 10;\n}\n\nfunction dataCombine(series) {\n return series.reduce(function (a, b) {\n return (a.data ? a.data : a).concat(b.data);\n }, []);\n}\n\nfunction dataCombineStack(series) {\n var sum = new Array(series[0].data.length);\n for (var j = 0; j < sum.length; j++) {\n sum[j] = 0;\n }\n for (var i = 0; i < series.length; i++) {\n for (var j = 0; j < sum.length; j++) {\n sum[j] += series[i].data[j];\n }\n }\n return series.reduce(function (a, b) {\n return (a.data ? a.data : a).concat(b.data).concat(sum);\n }, []);\n}\n\nfunction getTouches(touches, opts, e) {\n var x, y;\n if (touches.clientX) {\n if (opts.rotate) {//适配横屏\n y = opts.height - touches.clientX * opts.pixelRatio;\n x = (touches.pageY - e.mp.currentTarget.offsetTop - opts.height / opts.pixelRatio / 2 * (opts.pixelRatio - 1)) * opts.pixelRatio;\n } else {\n x = touches.clientX * opts.pixelRatio;\n y = (touches.pageY - e.mp.currentTarget.offsetTop - opts.height / opts.pixelRatio / 2 * (opts.pixelRatio - 1)) * opts.pixelRatio;\n }\n } else {\n if (opts.rotate) {//适配横屏\n y = opts.height - touches.x * opts.pixelRatio;\n x = touches.y * opts.pixelRatio;\n } else {\n x = touches.x * opts.pixelRatio;\n y = touches.y * opts.pixelRatio;\n }\n }\n return { x: x, y: y };\n}\n\nfunction getSeriesDataItem(series, index) {\n var data = [];\n series.forEach(function (item) {\n if (item.data[index] !== null && typeof item.data[index] !== 'undefined') {\n var seriesItem = {};\n seriesItem.color = item.color;\n seriesItem.name = item.name;\n seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index];\n data.push(seriesItem);\n }\n });\n\n return data;\n}\n\nfunction getMaxTextListLength(list) {\n var lengthList = list.map(function (item) {\n return measureText(item);\n });\n return Math.max.apply(null, lengthList);\n}\n\nfunction getRadarCoordinateSeries(length) {\n var eachAngle = 2 * Math.PI / length;\n var CoordinateSeries = [];\n for (var i = 0; i < length; i++) {\n CoordinateSeries.push(eachAngle * i);\n }\n\n return CoordinateSeries.map(function (item) {\n return -1 * item + Math.PI / 2;\n });\n}\n\nfunction getToolTipData(seriesData, calPoints, index, categories) {\n var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n var textList = seriesData.map(function (item) {\n return {\n text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data,\n color: item.color };\n\n });\n var validCalPoints = [];\n var offset = {\n x: 0,\n y: 0 };\n\n calPoints.forEach(function (points) {\n if (typeof points[index] !== 'undefined' && points[index] !== null) {\n validCalPoints.push(points[index]);\n }\n });\n validCalPoints.forEach(function (item) {\n offset.x = Math.round(item.x);\n offset.y += item.y;\n });\n\n offset.y /= validCalPoints.length;\n return { textList: textList, offset: offset };\n}\n\nfunction getCandleToolTipData(series, seriesData, calPoints, index, categories, extra) {\n var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};\n var upColor = extra.color.upFill;\n var downColor = extra.color.downFill;\n //颜色顺序为开盘,收盘,最低,最高\n var color = [upColor, upColor, downColor, upColor];\n var textList = [];\n var text0 = {\n text: categories[index],\n color: null };\n\n textList.push(text0);\n seriesData.map(function (item) {\n //console.log(color)\n if (index == 0 && item.data[1] - item.data[0] < 0) {\n color[1] = downColor;\n } else {\n if (item.data[0] < series[index - 1][1]) {\n color[0] = downColor;\n }\n if (item.data[1] < item.data[0]) {\n color[1] = downColor;\n }\n if (item.data[2] > series[index - 1][1]) {\n color[2] = upColor;\n }\n if (item.data[3] < series[index - 1][1]) {\n color[3] = downColor;\n }\n }\n\n var text1 = {\n text: '开盘:' + item.data[0],\n color: color[0] };\n\n var text2 = {\n text: '收盘:' + item.data[1],\n color: color[1] };\n\n var text3 = {\n text: '最低:' + item.data[2],\n color: color[2] };\n\n var text4 = {\n text: '最高:' + item.data[3],\n color: color[3] };\n\n textList.push(text1, text2, text3, text4);\n });\n var validCalPoints = [];\n var offset = {\n x: 0,\n y: 0 };\n\n calPoints.forEach(function (points) {\n if (typeof points[index] !== 'undefined' && points[index] !== null) {\n validCalPoints.push(points[index]);\n }\n });\n offset.x = Math.round(validCalPoints[0][0].x);\n return { textList: textList, offset: offset };\n}\n\nfunction findCurrentIndex(currentPoints, xAxisPoints, opts, config) {\n var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var currentIndex = -1;\n if (isInExactChartArea(currentPoints, opts, config)) {\n xAxisPoints.forEach(function (item, index) {\n if (currentPoints.x + offset > item) {\n currentIndex = index;\n }\n });\n }\n\n return currentIndex;\n}\n\nfunction isInExactChartArea(currentPoints, opts, config) {\n return currentPoints.x < opts.width - config.padding && currentPoints.x > config.padding + config.yAxisWidth + config.yAxisTitleWidth && currentPoints.y > config.padding && currentPoints.y < opts.height - config.legendHeight - config.xAxisHeight - config.padding;\n}\n\nfunction findRadarChartCurrentIndex(currentPoints, radarData, count) {\n var eachAngleArea = 2 * Math.PI / count;\n var currentIndex = -1;\n if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) {\n var fixAngle = function fixAngle(angle) {\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n if (angle > 2 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n return angle;\n };\n\n var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x);\n angle = -1 * angle;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n\n var angleList = radarData.angleList.map(function (item) {\n item = fixAngle(-1 * item);\n\n return item;\n });\n\n angleList.forEach(function (item, index) {\n var rangeStart = fixAngle(item - eachAngleArea / 2);\n var rangeEnd = fixAngle(item + eachAngleArea / 2);\n if (rangeEnd < rangeStart) {\n rangeEnd += 2 * Math.PI;\n }\n if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <= rangeEnd) {\n currentIndex = index;\n }\n });\n }\n\n return currentIndex;\n}\n\nfunction findPieChartCurrentIndex(currentPoints, pieData) {\n var currentIndex = -1;\n if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {\n var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);\n angle = -angle;\n for (var i = 0, len = pieData.series.length; i < len; i++) {\n var item = pieData.series[i];\n if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) {\n currentIndex = i;\n break;\n }\n }\n }\n\n return currentIndex;\n}\n\nfunction isInExactPieChartArea(currentPoints, center, radius) {\n return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2);\n}\n\nfunction splitPoints(points) {\n var newPoints = [];\n var items = [];\n points.forEach(function (item, index) {\n if (item !== null) {\n items.push(item);\n } else {\n if (items.length) {\n newPoints.push(items);\n }\n items = [];\n }\n });\n if (items.length) {\n newPoints.push(items);\n }\n\n return newPoints;\n}\n\nfunction calLegendData(series, opts, config) {\n if (opts.legend === false) {\n return {\n legendList: [],\n legendHeight: 0 };\n\n }\n //适配H5高分屏\n var padding = 5 * opts.pixelRatio;\n var marginTop = 8 * opts.pixelRatio;\n var shapeWidth = 15 * opts.pixelRatio;\n var legendList = [];\n var widthCount = 0;\n var currentRow = [];\n series.forEach(function (item) {\n var itemWidth = 3 * padding + shapeWidth + measureText(item.name || 'undefined');\n if (widthCount + itemWidth > opts.width) {\n legendList.push(currentRow);\n widthCount = itemWidth;\n currentRow = [item];\n } else {\n widthCount += itemWidth;\n currentRow.push(item);\n }\n });\n if (currentRow.length) {\n legendList.push(currentRow);\n }\n\n return {\n legendList: legendList,\n legendHeight: legendList.length * (config.fontSize + marginTop) + padding };\n\n}\n\nfunction calCategoriesData(categories, opts, config) {\n var result = {\n angle: 0,\n xAxisHeight: config.xAxisHeight };\n\n\n var _getXAxisPoints = getXAxisPoints(categories, opts, config),\n eachSpacing = _getXAxisPoints.eachSpacing;\n\n // get max length of categories text\n\n\n var categoriesTextLenth = categories.map(function (item) {\n return measureText(item);\n });\n\n var maxTextLength = Math.max.apply(this, categoriesTextLenth);\n\n if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {\n result.angle = 45 * Math.PI / 180;\n result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);\n }\n\n return result;\n}\n\nfunction getRadarDataPoints(angleList, center, radius, series, opts) {\n var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;\n\n var radarOption = opts.extra.radar || {};\n radarOption.max = radarOption.max || 0;\n var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));\n\n var data = [];\n series.forEach(function (each) {\n var listItem = {};\n listItem.color = each.color;\n listItem.data = [];\n each.data.forEach(function (item, index) {\n var tmp = {};\n tmp.angle = angleList[index];\n\n tmp.proportion = item / maxData;\n tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * process * Math.sin(tmp.angle), center);\n listItem.data.push(tmp);\n });\n\n data.push(listItem);\n });\n\n return data;\n}\n\nfunction getPieDataPoints(series) {\n var process = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n var count = 0;\n var _start_ = 0;\n series.forEach(function (item) {\n item.data = item.data === null ? 0 : item.data;\n count += item.data;\n });\n series.forEach(function (item) {\n item.data = item.data === null ? 0 : item.data;\n item._proportion_ = item.data / count * process;\n });\n series.forEach(function (item) {\n item._start_ = _start_;\n _start_ += 2 * item._proportion_ * Math.PI;\n });\n\n return series;\n}\n\nfunction getArcbarDataPoints(series, arcbarOption) {\n var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n if (process == 1) {\n process = 0.999999;\n }\n series.forEach(function (item) {\n item.data = item.data === null ? 0 : item.data;\n var totalAngle;\n if (arcbarOption.type == 'default') {\n totalAngle = arcbarOption.startAngle - arcbarOption.endAngle + 1;\n } else {\n totalAngle = 2;\n }\n item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle;\n if (item._proportion_ >= 2) {\n item._proportion_ = item._proportion_ % 2;\n }\n });\n return series;\n}\n\nfunction getGaugeAxisPoints(categories, startAngle, endAngle) {\n var totalAngle = startAngle - endAngle + 1;\n var tempStartAngle = startAngle;\n for (var i = 0; i < categories.length; i++) {\n categories[i].value = categories[i].value === null ? 0 : categories[i].value;\n categories[i]._startAngle_ = tempStartAngle;\n categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle;\n if (categories[i]._endAngle_ >= 2) {\n categories[i]._endAngle_ = categories[i]._endAngle_ % 2;\n }\n tempStartAngle = categories[i]._endAngle_;\n }\n return categories;\n}\n\nfunction getGaugeDataPoints(series, categories, gaugeOption) {\n var process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n series.forEach(function (item) {\n item.data = item.data === null ? 0 : item.data;\n if (gaugeOption.pointer.color == 'auto') {\n for (var i = 0; i < categories.length; i++) {\n if (item.data <= categories[i].value) {\n item.color = categories[i].color;\n break;\n }\n }\n } else {\n item.color = gaugeOption.pointer.color;\n }\n var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;\n item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle;\n item._oldAngle_ = gaugeOption.oldAngle;\n if (gaugeOption.oldAngle < gaugeOption.endAngle) {\n item._oldAngle_ += 2;\n }\n if (item.data >= gaugeOption.oldData) {\n item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle;\n } else {\n item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process;\n }\n if (item._proportion_ >= 2) {\n item._proportion_ = item._proportion_ % 2;\n }\n });\n return series;\n}\n\n\nfunction getPieTextMaxLength(series) {\n series = getPieDataPoints(series);\n var maxLength = 0;\n series.forEach(function (item) {\n var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';\n maxLength = Math.max(maxLength, measureText(text));\n });\n\n return maxLength;\n}\n\nfunction fixColumeData(points, eachSpacing, columnLen, index, config, opts) {\n return points.map(function (item) {\n if (item === null) {\n return null;\n }\n item.width = (eachSpacing - 2 * config.columePadding) / columnLen;\n\n if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {\n // customer column width\n item.width = Math.min(item.width, +opts.extra.column.width);\n } else {\n // default width should less tran 25px\n // don't ask me why, I don't know\n item.width = Math.min(item.width, 25);\n }\n item.x += (index + 0.5 - columnLen / 2) * item.width;\n\n return item;\n });\n}\n\nfunction fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) {\n return points.map(function (item) {\n if (item === null) {\n return null;\n }\n item.width = eachSpacing - 2 * config.columePadding;\n\n if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {\n item.width = Math.min(item.width, +opts.extra.column.width);\n } else {\n item.width = Math.min(item.width, 25);\n }\n if (index > 0) {\n item.width -= 2 * border;\n }\n return item;\n });\n}\n\nfunction fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) {\n\n return points.map(function (item, indexn) {\n\n if (item === null) {\n return null;\n }\n item.width = eachSpacing - 2 * config.columePadding;\n\n if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {\n item.width = Math.min(item.width, +opts.extra.column.width);\n } else {\n item.width = Math.min(item.width, 25);\n }\n return item;\n });\n}\n\nfunction getXAxisPoints(categories, opts, config) {\n var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;\n var spacingValid = opts.width - 2 * config.padding - yAxisTotalWidth;\n var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length;\n var eachSpacing = spacingValid / dataCount;\n\n var xAxisPoints = [];\n var startX = config.padding + yAxisTotalWidth;\n var endX = opts.width - config.padding;\n categories.forEach(function (item, index) {\n xAxisPoints.push(startX + index * eachSpacing);\n });\n if (opts.enableScroll === true) {\n xAxisPoints.push(startX + categories.length * eachSpacing);\n } else {\n xAxisPoints.push(endX);\n }\n\n return { xAxisPoints: xAxisPoints, startX: startX, endX: endX, eachSpacing: eachSpacing };\n}\n\nfunction getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {\n var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;\n\n var points = [];\n var validHeight = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;\n data.forEach(function (item, index) {\n if (item === null) {\n points.push(null);\n } else {\n var cPoints = [];\n item.forEach(function (items, indexs) {\n var point = {};\n point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);\n var value = items.value || items;\n var height = validHeight * (value - minRange) / (maxRange - minRange);\n height *= process;\n point.y = opts.height - config.xAxisHeight - config.legendHeight - Math.round(height) - config.padding;\n cPoints.push(point);\n });\n points.push(cPoints);\n }\n });\n\n return points;\n}\n\nfunction getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {\n var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;\n\n var points = [];\n var validHeight = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;\n data.forEach(function (item, index) {\n if (item === null) {\n points.push(null);\n } else {\n var point = {};\n point.color = item.color;\n point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);\n var value = item.value || item;\n var height = validHeight * (value - minRange) / (maxRange - minRange);\n height *= process;\n point.y = opts.height - config.xAxisHeight - config.legendHeight - Math.round(height) - config.padding;\n points.push(point);\n }\n });\n\n return points;\n}\n\nfunction getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) {\n var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1;\n var points = [];\n var validHeight = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;\n\n data.forEach(function (item, index) {\n if (item === null) {\n points.push(null);\n } else {\n var point = {};\n point.color = item.color;\n point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);\n\n if (seriesIndex > 0) {\n var value = 0;\n for (var i = 0; i <= seriesIndex; i++) {\n value += stackSeries[i].data[index];\n }\n var value0 = value - item;\n var height = validHeight * (value - minRange) / (maxRange - minRange);\n var height0 = validHeight * (value0 - minRange) / (maxRange - minRange);\n } else {\n var value = item;\n var height = validHeight * (value - minRange) / (maxRange - minRange);\n var height0 = 0;\n }\n var heightc = height0;\n height *= process;\n heightc *= process;\n point.y = opts.height - config.xAxisHeight - config.legendHeight - Math.round(height) - config.padding;\n point.y0 = opts.height - config.xAxisHeight - config.legendHeight - Math.round(heightc) - config.padding;\n points.push(point);\n }\n });\n\n return points;\n}\n\nfunction getYAxisTextList(series, opts, config, stack) {\n var data;\n if (stack == 'stack') {\n //data = dataCombine(series);\n data = dataCombineStack(series);\n } else {\n data = dataCombine(series);\n }\n\n var sorted = [];\n // remove null from data\n data = data.filter(function (item) {\n //return item !== null;\n if (typeof item === 'object' && item !== null) {\n //判断是否为数组\n if (item.constructor == Array) {\n return item !== null;\n } else {\n return item.value !== null;\n }\n } else {\n return item !== null;\n }\n });\n //var minData = Math.min.apply(this, data);\n //var maxData = Math.max.apply(this, data);\n data.map(function (item) {\n if (typeof item === 'object') {\n if (item.constructor == Array) {\n item.map(function (subitem) {\n sorted.push(subitem);\n });\n } else {\n sorted.push(item.value);\n }\n } else {\n sorted.push(item);\n }\n //typeof item === 'object' ? sorted.push(item.value) : sorted.push(item)\n });\n var minData = 0;\n var maxData = 0;\n if (sorted.length > 0) {\n minData = Math.min.apply(this, sorted);\n maxData = Math.max.apply(this, sorted);\n }\n if (typeof opts.yAxis.min === 'number') {\n minData = Math.min(opts.yAxis.min, minData);\n }\n if (typeof opts.yAxis.max === 'number') {\n maxData = Math.max(opts.yAxis.max, maxData);\n }\n\n // fix issue https://github.com/xiaolin3303/wx-charts/issues/9\n if (minData === maxData) {\n var rangeSpan = maxData || 10;\n //minData -= rangeSpan;\n maxData += rangeSpan;\n }\n\n var dataRange = getDataRange(minData, maxData);\n var minRange = dataRange.minRange;\n var maxRange = dataRange.maxRange;\n\n var range = [];\n var eachRange = (maxRange - minRange) / config.yAxisSplit;\n\n for (var i = 0; i <= config.yAxisSplit; i++) {\n range.push(minRange + eachRange * i);\n }\n return range.reverse();\n}\n\nfunction calYAxisData(series, opts, config) {\n //堆叠图重算Y轴\n var columnstyle = assign({}, opts.extra.column || { \"type\": \"\" });\n\n var ranges = getYAxisTextList(series, opts, config, columnstyle.type);\n var yAxisWidth = config.yAxisWidth;\n var rangesFormat = ranges.map(function (item) {\n item = util.toFixed(item, 2);\n item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;\n yAxisWidth = Math.max(yAxisWidth, measureText(item) + 5);\n return item;\n });\n if (opts.yAxis.disabled === true) {\n yAxisWidth = 0;\n }\n\n return { rangesFormat: rangesFormat, ranges: ranges, yAxisWidth: yAxisWidth };\n}\n\nfunction calTooltipYAxisData(point, series, opts, config, eachSpacing) {\n var ranges = getYAxisTextList(series, opts, config);\n var spacingValid = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;\n var maxVal = ranges[0];\n var minVal = ranges[ranges.length - 1];\n var minAxis = config.padding;\n var maxAxis = config.padding + spacingValid;\n var item = maxVal - (maxVal - minVal) * (point - minAxis) / (maxAxis - minAxis);\n item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;\n return item;\n}\n\nfunction contextRotate(context, opts) {\n if (opts.rotateLock !== true) {\n context.translate(opts.height, 0);\n context.rotate(90 * Math.PI / 180);\n } else if (opts._rotate_ !== true) {\n context.translate(opts.height, 0);\n context.rotate(90 * Math.PI / 180);\n opts._rotate_ = true;\n }\n}\n\nfunction drawPointShape(points, color, shape, context, opts) {\n context.beginPath();\n context.setStrokeStyle(\"#ffffff\");\n context.setLineWidth(1 * opts.pixelRatio);\n context.setFillStyle(color);\n if (shape === 'diamond') {\n points.forEach(function (item, index) {\n if (item !== null) {\n context.moveTo(item.x, item.y - 4.5);\n context.lineTo(item.x - 4.5, item.y);\n context.lineTo(item.x, item.y + 4.5);\n context.lineTo(item.x + 4.5, item.y);\n context.lineTo(item.x, item.y - 4.5);\n }\n });\n } else if (shape === 'circle') {\n points.forEach(function (item, index) {\n if (item !== null) {\n context.moveTo(item.x + 3.5 * opts.pixelRatio, item.y);\n context.arc(item.x, item.y, 4 * opts.pixelRatio, 0, 2 * Math.PI, false);\n }\n });\n } else if (shape === 'rect') {\n points.forEach(function (item, index) {\n if (item !== null) {\n context.moveTo(item.x - 3.5, item.y - 3.5);\n context.rect(item.x - 3.5, item.y - 3.5, 7, 7);\n }\n });\n } else if (shape === 'triangle') {\n points.forEach(function (item, index) {\n if (item !== null) {\n context.moveTo(item.x, item.y - 4.5);\n context.lineTo(item.x - 4.5, item.y + 4.5);\n context.lineTo(item.x + 4.5, item.y + 4.5);\n context.lineTo(item.x, item.y - 4.5);\n }\n });\n }\n context.closePath();\n context.fill();\n context.stroke();\n}\n\nfunction drawRingTitle(opts, config, context) {\n var titlefontSize = opts.title.fontSize || config.titleFontSize;\n var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize;\n var title = opts.title.name || '';\n var subtitle = opts.subtitle.name || '';\n var titleFontColor = opts.title.color || config.titleColor;\n var subtitleFontColor = opts.subtitle.color || config.subtitleColor;\n var titleHeight = title ? titlefontSize : 0;\n var subtitleHeight = subtitle ? subtitlefontSize : 0;\n var margin = 5;\n if (subtitle) {\n var textWidth = measureText(subtitle, subtitlefontSize);\n var startX = (opts.width - textWidth) / 2 + (opts.subtitle.offsetX || 0);\n var startY = (opts.height - config.legendHeight + subtitlefontSize) / 2 + (opts.subtitle.offsetY || 0);\n if (title) {\n startY -= (titleHeight + margin) / 2;\n }\n context.beginPath();\n context.setFontSize(subtitlefontSize);\n context.setFillStyle(subtitleFontColor);\n context.fillText(subtitle, startX, startY);\n context.closePath();\n context.stroke();\n }\n if (title) {\n var _textWidth = measureText(title, titlefontSize);\n var _startX = (opts.width - _textWidth) / 2 + (opts.title.offsetX || 0);\n var _startY = (opts.height - config.legendHeight + titlefontSize) / 2 + (opts.title.offsetY || 0);\n if (subtitle) {\n _startY += (subtitleHeight + margin) / 2;\n }\n context.beginPath();\n context.setFontSize(titlefontSize);\n context.setFillStyle(titleFontColor);\n context.fillText(title, _startX, _startY);\n context.closePath();\n context.stroke();\n }\n}\n\nfunction drawPointText(points, series, config, context) {\n // 绘制数据文案\n var data = series.data;\n\n\n points.forEach(function (item, index) {\n if (item !== null) {\n //var formatVal = series.format ? series.format(data[index]) : data[index];\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle('#666666');\n var value = data[index].value || data[index];\n var formatVal = series.format ? series.format(value) : value;\n context.fillText(formatVal, item.x - measureText(formatVal) / 2, item.y - 2);\n context.closePath();\n context.stroke();\n }\n });\n\n}\n\nfunction drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) {\n radius -= gaugeOption.width / 2 + config.gaugeLabelTextMargin;\n\n var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;\n var splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;\n var totalNumber = gaugeOption.endNumber - gaugeOption.startNumber;\n var splitNumber = totalNumber / gaugeOption.splitLine.splitNumber;\n var nowAngle = gaugeOption.startAngle;\n var nowNumber = gaugeOption.startNumber;\n for (var i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {\n var pos = {\n x: radius * Math.cos(nowAngle * Math.PI),\n y: radius * Math.sin(nowAngle * Math.PI) };\n\n pos.x += centerPosition.x - measureText(nowNumber) / 2;\n pos.y += centerPosition.y;\n var startX = pos.x;\n var startY = pos.y;\n\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(gaugeOption.labelColor || '#666666');\n context.fillText(nowNumber, startX, startY + config.fontSize / 2);\n context.closePath();\n context.stroke();\n\n nowAngle += splitAngle;\n if (nowAngle >= 2) {\n nowAngle = nowAngle % 2;\n }\n nowNumber += splitNumber;\n }\n\n}\n\nfunction drawRadarLabel(angleList, radius, centerPosition, opts, config, context) {\n var radarOption = opts.extra.radar || {};\n radius += config.radarLabelTextMargin;\n\n angleList.forEach(function (angle, index) {\n var pos = {\n x: radius * Math.cos(angle),\n y: radius * Math.sin(angle) };\n\n var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition);\n var startX = posRelativeCanvas.x;\n var startY = posRelativeCanvas.y;\n if (util.approximatelyEqual(pos.x, 0)) {\n startX -= measureText(opts.categories[index] || '') / 2;\n } else if (pos.x < 0) {\n startX -= measureText(opts.categories[index] || '');\n }\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(radarOption.labelColor || '#666666');\n context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2);\n context.closePath();\n context.stroke();\n });\n\n}\n\nfunction drawPieText(series, opts, config, context, radius, center) {\n var lineRadius = radius + config.pieChartLinePadding;\n var textObjectCollection = [];\n var lastTextObject = null;\n\n var seriesConvert = series.map(function (item) {\n var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2);\n var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';\n var color = item.color;\n return { arc: arc, text: text, color: color };\n });\n seriesConvert.forEach(function (item) {\n // line end\n var orginX1 = Math.cos(item.arc) * lineRadius;\n var orginY1 = Math.sin(item.arc) * lineRadius;\n\n // line start\n var orginX2 = Math.cos(item.arc) * radius;\n var orginY2 = Math.sin(item.arc) * radius;\n\n // text start\n var orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding;\n var orginY3 = orginY1;\n\n var textWidth = measureText(item.text);\n var startY = orginY3;\n\n if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, { x: orginX3 })) {\n if (orginX3 > 0) {\n startY = Math.min(orginY3, lastTextObject.start.y);\n } else if (orginX1 < 0) {\n startY = Math.max(orginY3, lastTextObject.start.y);\n } else {\n if (orginY3 > 0) {\n startY = Math.max(orginY3, lastTextObject.start.y);\n } else {\n startY = Math.min(orginY3, lastTextObject.start.y);\n }\n }\n }\n\n if (orginX3 < 0) {\n orginX3 -= textWidth;\n }\n\n var textObject = {\n lineStart: {\n x: orginX2,\n y: orginY2 },\n\n lineEnd: {\n x: orginX1,\n y: orginY1 },\n\n start: {\n x: orginX3,\n y: startY },\n\n width: textWidth,\n height: config.fontSize,\n text: item.text,\n color: item.color };\n\n\n lastTextObject = avoidCollision(textObject, lastTextObject);\n textObjectCollection.push(lastTextObject);\n });\n\n textObjectCollection.forEach(function (item) {\n var lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center);\n var lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center);\n var textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center);\n context.setLineWidth(1 * opts.pixelRatio);\n context.setFontSize(config.fontSize);\n context.beginPath();\n context.setStrokeStyle(item.color);\n context.setFillStyle(item.color);\n context.moveTo(lineStartPoistion.x, lineStartPoistion.y);\n var curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x;\n var textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5;\n context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y);\n context.moveTo(lineStartPoistion.x, lineStartPoistion.y);\n context.stroke();\n context.closePath();\n context.beginPath();\n context.moveTo(textPosition.x + item.width, textPosition.y);\n context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI);\n context.closePath();\n context.fill();\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle('#666666');\n context.fillText(item.text, textStartX, textPosition.y + 3);\n context.closePath();\n context.stroke();\n context.closePath();\n });\n}\n\nfunction drawToolTipSplitLine(offsetX, opts, config, context) {\n var toolTipOption = opts.extra.tooltip || {};\n toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType;\n toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength;\n var startY = config.padding;\n var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;\n\n if (toolTipOption.gridType == 'dash') {\n context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);\n }\n context.beginPath();\n context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');\n context.setLineWidth(1 * opts.pixelRatio);\n context.moveTo(offsetX, startY);\n context.lineTo(offsetX, endY);\n context.closePath();\n context.stroke();\n context.setLineDash([]);\n\n if (toolTipOption.xAxisLabel) {\n var lableText = opts.categories[opts.tooltip.index];\n context.setFontSize(config.fontSize);\n var textWidth = context.measureText(lableText).width;\n\n var textX = offsetX - config.toolTipPadding - 0.5 * textWidth;\n var textY = endY;\n context.beginPath();\n context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));\n context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);\n context.setLineWidth(1 * opts.pixelRatio);\n context.rect(textX, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding);\n context.closePath();\n context.stroke();\n context.fill();\n\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);\n context.fillText(lableText, textX + 2 * config.toolTipPadding, textY + config.toolTipPadding + config.fontSize);\n context.closePath();\n context.stroke();\n }\n}\n\nfunction drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) {\n var toolTipOption = opts.extra.tooltip || {};\n toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType;\n toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength;\n var startX = config.padding + config.yAxisWidth + config.yAxisTitleWidth;\n var endX = opts.width - config.padding;\n\n if (toolTipOption.gridType == 'dash') {\n context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);\n }\n context.beginPath();\n context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');\n context.setLineWidth(1 * opts.pixelRatio);\n context.moveTo(startX, opts.tooltip.offset.y);\n context.lineTo(endX, opts.tooltip.offset.y);\n context.closePath();\n context.stroke();\n context.setLineDash([]);\n\n if (toolTipOption.yAxisLabel) {\n\n var lableText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing);\n context.setFontSize(config.fontSize);\n var textWidth = context.measureText(lableText).width;\n\n var textX = startX - 2 * config.toolTipPadding - textWidth;\n var textY = opts.tooltip.offset.y;\n context.beginPath();\n context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));\n context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);\n context.setLineWidth(1 * opts.pixelRatio);\n context.rect(textX, textY - 0.5 * config.fontSize - config.toolTipPadding, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding);\n context.closePath();\n context.stroke();\n context.fill();\n\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);\n context.fillText(lableText, textX + config.toolTipPadding, textY + 0.5 * config.fontSize);\n context.closePath();\n context.stroke();\n }\n}\n\n\nfunction drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) {\n var startY = config.padding;\n var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;\n context.beginPath();\n context.setFillStyle(hexToRgb('#000000', 0.08));\n context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY);\n context.closePath();\n context.fill();\n}\n\nfunction drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) {\n var toolTipOption = opts.extra.tooltip || {};\n var legendWidth = 4 * opts.pixelRatio;\n var legendMarginRight = 5 * opts.pixelRatio;\n var arrowWidth = 8 * opts.pixelRatio;\n var isOverRightBorder = false;\n if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') {\n drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);\n }\n\n offset = assign({\n x: 0,\n y: 0 },\n offset);\n offset.y -= 8 * opts.pixelRatio;\n var textWidth = textList.map(function (item) {\n return measureText(item.text);\n });\n\n var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth);\n var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight;\n\n // if beyond the right border\n if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) {\n isOverRightBorder = true;\n }\n\n // draw background rect\n context.beginPath();\n context.setFillStyle(hexToRgb(opts.tooltip.option.background || config.toolTipBackground, config.toolTipOpacity));\n if (isOverRightBorder) {\n context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);\n context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);\n context.lineTo(offset.x - arrowWidth, offset.y);\n context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y);\n context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y + toolTipHeight);\n context.lineTo(offset.x - arrowWidth, offset.y + toolTipHeight);\n context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);\n context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);\n } else {\n context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);\n context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);\n context.lineTo(offset.x + arrowWidth, offset.y);\n context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y);\n context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y + toolTipHeight);\n context.lineTo(offset.x + arrowWidth, offset.y + toolTipHeight);\n context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);\n context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);\n }\n\n context.closePath();\n context.fill();\n\n // draw legend\n textList.forEach(function (item, index) {\n if (item.color !== null) {\n context.beginPath();\n context.setFillStyle(item.color);\n var startX = offset.x + arrowWidth + 2 * config.toolTipPadding;\n var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + config.toolTipPadding + 1;\n if (isOverRightBorder) {\n startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding;\n }\n context.fillRect(startX, startY, legendWidth, config.fontSize);\n context.closePath();\n }\n });\n\n // draw text list\n\n textList.forEach(function (item, index) {\n var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight;\n if (isOverRightBorder) {\n startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight;\n }\n var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + config.toolTipPadding;\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle('#ffffff');\n context.fillText(item.text, startX, startY + config.fontSize);\n context.closePath();\n context.stroke();\n });\n}\n\nfunction drawYAxisTitle(title, opts, config, context) {\n var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2;\n context.save();\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(opts.yAxis.titleFontColor || '#333333');\n context.translate(0, opts.height);\n context.rotate(-90 * Math.PI / 180);\n context.fillText(title, startX, config.padding + 0.5 * config.fontSize);\n context.closePath();\n context.stroke();\n context.restore();\n}\n\nfunction drawColumnDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n var columnOption = opts.extra.column || { type: {}, meter: {} };\n columnOption.type = columnOption.type == undefined ? 'group' : columnOption.type;\n columnOption.meter = columnOption.meter || {};\n columnOption.meter.border = columnOption.meter.border == undefined ? 4 : columnOption.meter.border;\n columnOption.meter.fillColor = columnOption.meter.fillColor == undefined ? '#FFFFFF' : columnOption.meter.fillColor;\n var _calYAxisData = calYAxisData(series, opts, config),\n ranges = _calYAxisData.ranges;\n\n var _getXAxisPoints = getXAxisPoints(opts.categories, opts, config),\n xAxisPoints = _getXAxisPoints.xAxisPoints,\n eachSpacing = _getXAxisPoints.eachSpacing;\n\n var minRange = ranges.pop();\n var maxRange = ranges.shift();\n var calPoints = [];\n\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {\n context.translate(opts._scrollDistance_, 0);\n }\n if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {\n drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing);\n }\n\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n switch (columnOption.type) {\n case 'group':\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);\n calPoints.push(tooltipPoints);\n points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);\n points.forEach(function (item, index) {\n if (item !== null) {\n context.beginPath();\n context.setFillStyle(item.color || eachSeries.color);\n var startX = item.x - item.width / 2 + 1;\n var height = opts.height - item.y - config.padding - config.xAxisHeight - config.legendHeight;\n context.moveTo(startX, item.y);\n context.fillRect(startX, item.y, item.width - 2, height);\n context.closePath();\n context.fill();\n }\n });\n break;\n case 'stack':\n // 绘制堆叠数据图\n var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);\n calPoints.push(points);\n points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series);\n\n points.forEach(function (item, index) {\n if (item !== null) {\n context.beginPath();\n context.setFillStyle(item.color || eachSeries.color);\n var startX = item.x - item.width / 2 + 1;\n var height = opts.height - item.y - config.padding - config.xAxisHeight - config.legendHeight;\n var height0 = opts.height - item.y0 - config.padding - config.xAxisHeight - config.legendHeight;\n if (seriesIndex > 0) {\n height -= height0;\n }\n context.moveTo(startX, item.y);\n context.fillRect(startX, item.y, item.width - 2, height);\n context.closePath();\n context.fill();\n }\n });\n break;\n case 'meter':\n // 绘制温度计数据图\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n calPoints.push(points);\n points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meter.border);\n if (seriesIndex == 0) {\n points.forEach(function (item, index) {\n if (item !== null) {\n //画背景颜色\n context.beginPath();\n context.setFillStyle(columnOption.meter.fillColor);\n var startX = item.x - item.width / 2 + 1;\n var height = opts.height - item.y - config.padding - config.xAxisHeight - config.legendHeight;\n context.moveTo(startX, item.y);\n context.fillRect(startX, item.y, item.width - 2, height);\n context.closePath();\n context.fill();\n //画边框线\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setLineWidth(columnOption.meter.border * opts.pixelRatio);\n context.moveTo(startX + columnOption.meter.border * 0.5, item.y + height);\n context.lineTo(startX + columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5);\n context.lineTo(startX + item.width - columnOption.meter.border, item.y + columnOption.meter.border * 0.5);\n context.lineTo(startX + item.width - columnOption.meter.border, item.y + height);\n context.stroke();\n }\n });\n } else {\n points.forEach(function (item, index) {\n if (item !== null) {\n context.beginPath();\n context.setFillStyle(item.color || eachSeries.color);\n var startX = item.x - item.width / 2 + 1;\n var height = opts.height - item.y - config.padding - config.xAxisHeight - config.legendHeight;\n context.moveTo(startX, item.y);\n context.rect(startX, item.y, item.width - 2, height);\n context.closePath();\n context.fill();\n }\n });\n }\n break;}\n\n });\n if (opts.dataLabel !== false && process === 1) {\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n switch (columnOption.type) {\n case 'group':\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);\n drawPointText(points, eachSeries, config, context);\n break;\n case 'stack':\n var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);\n drawPointText(points, eachSeries, config, context);\n break;\n case 'meter':\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n drawPointText(points, eachSeries, config, context);\n break;}\n\n });\n }\n\n context.restore();\n\n return {\n xAxisPoints: xAxisPoints,\n calPoints: calPoints,\n eachSpacing: eachSpacing };\n\n}\n\nfunction drawCandleDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n var candleOption = opts.extra.candle || { color: {}, average: {} };\n candleOption.color.upLine = candleOption.color.upLine ? candleOption.color.upLine : '#f04864';\n candleOption.color.upFill = candleOption.color.upFill ? candleOption.color.upFill : '#f04864';\n candleOption.color.downLine = candleOption.color.downLine ? candleOption.color.downLine : '#2fc25b';\n candleOption.color.downFill = candleOption.color.downFill ? candleOption.color.downFill : '#2fc25b';\n candleOption.average.show = candleOption.average.show === true ? true : false;\n candleOption.average.name = candleOption.average.name ? candleOption.average.name : [];\n candleOption.average.day = candleOption.average.day ? candleOption.average.day : [];\n candleOption.average.color = candleOption.average.color ? candleOption.average.color : ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'];\n opts.extra.candle = candleOption;\n\n var _calYAxisData5 = calYAxisData(series, opts, config),\n ranges = _calYAxisData5.ranges;\n\n var _getXAxisPoints5 = getXAxisPoints(opts.categories, opts, config),\n xAxisPoints = _getXAxisPoints5.xAxisPoints,\n eachSpacing = _getXAxisPoints5.eachSpacing;\n\n var minRange = ranges.pop();\n var maxRange = ranges.shift();\n var calPoints = [];\n\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {\n context.translate(opts._scrollDistance_, 0);\n }\n\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n calPoints.push(points);\n var splitPointList = splitPoints(points);\n splitPointList = splitPointList[0];\n\n splitPointList.forEach(function (points, index) {\n context.beginPath();\n //如果上涨\n if (data[index][1] - data[index][0] > 0) {\n context.setStrokeStyle(candleOption.color.upLine);\n context.setFillStyle(candleOption.color.upFill);\n context.setLineWidth(1 * opts.pixelRatio);\n context.moveTo(points[3].x, points[3].y); //顶点\n context.lineTo(points[1].x, points[1].y); //收盘中间点\n context.lineTo(points[1].x - eachSpacing / 4, points[1].y); //收盘左侧点\n context.lineTo(points[0].x - eachSpacing / 4, points[0].y); //开盘左侧点\n context.lineTo(points[0].x, points[0].y); //开盘中间点\n context.lineTo(points[2].x, points[2].y); //底点\n context.lineTo(points[0].x, points[0].y); //开盘中间点\n context.lineTo(points[0].x + eachSpacing / 4, points[0].y); //开盘右侧点\n context.lineTo(points[1].x + eachSpacing / 4, points[1].y); //收盘右侧点\n context.lineTo(points[1].x, points[1].y); //收盘中间点\n context.moveTo(points[3].x, points[3].y); //顶点\n } else {\n context.setStrokeStyle(candleOption.color.downLine);\n context.setFillStyle(candleOption.color.downFill);\n context.setLineWidth(1 * opts.pixelRatio);\n context.moveTo(points[3].x, points[3].y); //顶点\n context.lineTo(points[0].x, points[0].y); //开盘中间点\n context.lineTo(points[0].x - eachSpacing / 4, points[0].y); //开盘左侧点\n context.lineTo(points[1].x - eachSpacing / 4, points[1].y); //收盘左侧点\n context.lineTo(points[1].x, points[1].y); //收盘中间点\n context.lineTo(points[2].x, points[2].y); //底点\n context.lineTo(points[1].x, points[1].y); //收盘中间点\n context.lineTo(points[1].x + eachSpacing / 4, points[1].y); //收盘右侧点\n context.lineTo(points[0].x + eachSpacing / 4, points[0].y); //开盘右侧点\n context.lineTo(points[0].x, points[0].y); //开盘中间点\n context.moveTo(points[3].x, points[3].y); //顶点\n }\n context.closePath();\n context.fill();\n context.stroke();\n });\n });\n\n context.restore();\n\n //画均线\n if (candleOption.average.show) {\n\n }\n\n return {\n xAxisPoints: xAxisPoints,\n calPoints: calPoints,\n eachSpacing: eachSpacing };\n\n}\n\nfunction drawAreaDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n\n var _calYAxisData2 = calYAxisData(series, opts, config),\n ranges = _calYAxisData2.ranges;\n\n var _getXAxisPoints2 = getXAxisPoints(opts.categories, opts, config),\n xAxisPoints = _getXAxisPoints2.xAxisPoints,\n eachSpacing = _getXAxisPoints2.eachSpacing;\n\n var minRange = ranges.pop();\n var maxRange = ranges.shift();\n var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;\n var calPoints = [];\n\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {\n context.translate(opts._scrollDistance_, 0);\n }\n\n if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {\n drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);\n }\n\n\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n calPoints.push(points);\n\n var splitPointList = splitPoints(points);\n\n splitPointList.forEach(function (points) {\n // 绘制区域数据\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setFillStyle(eachSeries.color);\n context.setGlobalAlpha(0.2);\n context.setLineWidth(2 * opts.pixelRatio);\n if (points.length > 1) {\n var firstPoint = points[0];\n var lastPoint = points[points.length - 1];\n\n context.moveTo(firstPoint.x, firstPoint.y);\n if (opts.extra.lineStyle === 'curve') {\n points.forEach(function (item, index) {\n if (index > 0) {\n var ctrlPoint = createCurveControlPoints(points, index - 1);\n context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);\n }\n });\n } else {\n points.forEach(function (item, index) {\n if (index > 0) {\n context.lineTo(item.x, item.y);\n }\n });\n }\n\n context.lineTo(lastPoint.x, endY);\n context.lineTo(firstPoint.x, endY);\n context.lineTo(firstPoint.x, firstPoint.y);\n } else {\n var item = points[0];\n context.moveTo(item.x - eachSpacing / 2, item.y);\n context.lineTo(item.x + eachSpacing / 2, item.y);\n context.lineTo(item.x + eachSpacing / 2, endY);\n context.lineTo(item.x - eachSpacing / 2, endY);\n context.moveTo(item.x - eachSpacing / 2, item.y);\n }\n context.closePath();\n context.fill();\n context.setGlobalAlpha(1);\n\n\n //画连线\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setLineWidth(2 * opts.pixelRatio);\n if (points.length === 1) {\n context.moveTo(points[0].x, points[0].y);\n context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);\n } else {\n context.moveTo(points[0].x, points[0].y);\n if (opts.extra.lineStyle === 'curve') {\n points.forEach(function (item, index) {\n if (index > 0) {\n var ctrlPoint = createCurveControlPoints(points, index - 1);\n context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);\n }\n });\n } else {\n points.forEach(function (item, index) {\n if (index > 0) {\n context.lineTo(item.x, item.y);\n }\n });\n }\n context.moveTo(points[0].x, points[0].y);\n }\n context.closePath();\n context.stroke();\n });\n\n //画点\n if (opts.dataPointShape !== false) {\n var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];\n drawPointShape(points, eachSeries.color, shape, context, opts);\n }\n\n });\n if (opts.dataLabel !== false && process === 1) {\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n drawPointText(points, eachSeries, config, context);\n });\n }\n\n context.restore();\n\n return {\n xAxisPoints: xAxisPoints,\n calPoints: calPoints,\n eachSpacing: eachSpacing };\n\n}\n\nfunction drawLineDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n\n var _calYAxisData3 = calYAxisData(series, opts, config),\n ranges = _calYAxisData3.ranges;\n\n var _getXAxisPoints3 = getXAxisPoints(opts.categories, opts, config),\n xAxisPoints = _getXAxisPoints3.xAxisPoints,\n eachSpacing = _getXAxisPoints3.eachSpacing;\n\n var minRange = ranges.pop();\n var maxRange = ranges.shift();\n var calPoints = [];\n\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {\n context.translate(opts._scrollDistance_, 0);\n }\n\n if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {\n drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);\n }\n\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n calPoints.push(points);\n var splitPointList = splitPoints(points);\n\n splitPointList.forEach(function (points, index) {\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setLineWidth(2 * opts.pixelRatio);\n if (points.length === 1) {\n context.moveTo(points[0].x, points[0].y);\n context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);\n } else {\n context.moveTo(points[0].x, points[0].y);\n if (opts.extra.lineStyle === 'curve') {\n points.forEach(function (item, index) {\n if (index > 0) {\n var ctrlPoint = createCurveControlPoints(points, index - 1);\n context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);\n }\n });\n } else {\n points.forEach(function (item, index) {\n if (index > 0) {\n context.lineTo(item.x, item.y);\n }\n });\n }\n context.moveTo(points[0].x, points[0].y);\n }\n context.closePath();\n context.stroke();\n });\n\n if (opts.dataPointShape !== false) {\n var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];\n drawPointShape(points, eachSeries.color, shape, context, opts);\n }\n });\n if (opts.dataLabel !== false && process === 1) {\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n drawPointText(points, eachSeries, config, context);\n });\n }\n\n context.restore();\n\n return {\n xAxisPoints: xAxisPoints,\n calPoints: calPoints,\n eachSpacing: eachSpacing };\n\n}\n\nfunction drawMixDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n\n var _calYAxisData6 = calYAxisData(series, opts, config),\n ranges = _calYAxisData6.ranges;\n\n var _getXAxisPoints6 = getXAxisPoints(opts.categories, opts, config),\n xAxisPoints = _getXAxisPoints6.xAxisPoints,\n eachSpacing = _getXAxisPoints6.eachSpacing;\n\n var minRange = ranges.pop();\n var maxRange = ranges.shift();\n var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;\n var calPoints = [];\n\n var columnIndex = 0;\n var columnLength = 0;\n series.forEach(function (eachSeries, seriesIndex) {\n if (eachSeries.type == 'column') {\n columnLength += 1;\n }\n });\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {\n context.translate(opts._scrollDistance_, 0);\n }\n\n if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {\n drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);\n }\n\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n calPoints.push(points);\n\n // 绘制柱状数据图\n if (eachSeries.type == 'column') {\n points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);\n points.forEach(function (item, index) {\n if (item !== null) {\n context.beginPath();\n context.setFillStyle(item.color || eachSeries.color);\n var startX = item.x - item.width / 2 + 1;\n var height = opts.height - item.y - config.padding - config.xAxisHeight - config.legendHeight;\n context.moveTo(startX, item.y);\n context.rect(startX, item.y, item.width - 2, height);\n context.closePath();\n context.fill();\n }\n });\n columnIndex += 1;\n }\n\n //绘制区域图数据\n\n if (eachSeries.type == 'area') {\n var splitPointList = splitPoints(points);\n splitPointList.forEach(function (points) {\n // 绘制区域数据\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setFillStyle(eachSeries.color);\n context.setGlobalAlpha(0.2);\n context.setLineWidth(2 * opts.pixelRatio);\n if (points.length > 1) {\n var firstPoint = points[0];\n var lastPoint = points[points.length - 1];\n context.moveTo(firstPoint.x, firstPoint.y);\n if (eachSeries.style === 'curve') {\n points.forEach(function (item, index) {\n if (index > 0) {\n var ctrlPoint = createCurveControlPoints(points, index - 1);\n context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);\n }\n });\n } else {\n points.forEach(function (item, index) {\n if (index > 0) {\n context.lineTo(item.x, item.y);\n }\n });\n }\n context.lineTo(lastPoint.x, endY);\n context.lineTo(firstPoint.x, endY);\n context.lineTo(firstPoint.x, firstPoint.y);\n } else {\n var item = points[0];\n context.moveTo(item.x - eachSpacing / 2, item.y);\n context.lineTo(item.x + eachSpacing / 2, item.y);\n context.lineTo(item.x + eachSpacing / 2, endY);\n context.lineTo(item.x - eachSpacing / 2, endY);\n context.moveTo(item.x - eachSpacing / 2, item.y);\n }\n context.closePath();\n context.fill();\n context.setGlobalAlpha(1);\n });\n }\n\n\n\n // 绘制折线数据图\n if (eachSeries.type == 'line') {\n var splitPointList = splitPoints(points);\n splitPointList.forEach(function (points, index) {\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setLineWidth(2 * opts.pixelRatio);\n if (points.length === 1) {\n context.moveTo(points[0].x, points[0].y);\n context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);\n } else {\n context.moveTo(points[0].x, points[0].y);\n if (eachSeries.style == 'curve') {\n points.forEach(function (item, index) {\n if (index > 0) {\n var ctrlPoint = createCurveControlPoints(points, index - 1);\n context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);\n }\n });\n } else {\n points.forEach(function (item, index) {\n if (index > 0) {\n context.lineTo(item.x, item.y);\n }\n });\n }\n context.moveTo(points[0].x, points[0].y);\n }\n context.closePath();\n context.stroke();\n });\n }\n\n // 绘制点数据图\n if (eachSeries.type == 'point') {\n var splitPointList = splitPoints(points);\n splitPointList.forEach(function (points, index) {\n context.beginPath();\n context.setStrokeStyle(eachSeries.color);\n context.setLineWidth(2 * opts.pixelRatio);\n context.moveTo(points[0].x, points[0].y);\n context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);\n context.closePath();\n context.stroke();\n });\n }\n\n if (opts.dataPointShape !== false && eachSeries.type !== 'column') {\n var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];\n drawPointShape(points, eachSeries.color, shape, context, opts);\n }\n });\n if (opts.dataLabel !== false && process === 1) {\n var columnIndex = 0;\n series.forEach(function (eachSeries, seriesIndex) {\n var data = eachSeries.data;\n var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);\n if (eachSeries.type !== 'column') {\n drawPointText(points, eachSeries, config, context);\n } else {\n points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);\n drawPointText(points, eachSeries, config, context);\n columnIndex += 1;\n }\n\n });\n }\n\n context.restore();\n\n return {\n xAxisPoints: xAxisPoints,\n calPoints: calPoints,\n eachSpacing: eachSpacing };\n\n}\n\nfunction drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) {\n var toolTipOption = opts.extra.tooltip || {};\n if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) {\n drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints);\n }\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {\n context.translate(opts._scrollDistance_, 0);\n }\n if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {\n drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints);\n }\n context.restore();\n\n}\n\nfunction drawXAxis(categories, opts, config, context) {\n\n var _getXAxisPoints4 = getXAxisPoints(categories, opts, config),\n xAxisPoints = _getXAxisPoints4.xAxisPoints,\n startX = _getXAxisPoints4.startX,\n endX = _getXAxisPoints4.endX,\n eachSpacing = _getXAxisPoints4.eachSpacing;\n\n var startY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;\n var endY = config.padding;\n\n\n //绘制滚动条\n if (opts.enableScroll && opts.xAxis.scrollShow) {\n var scrollY = opts.height - config.padding - config.legendHeight + 4 * opts.pixelRatio;\n var scrollScreenWidth = endX - startX;\n var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1);\n var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth;\n var scrollLeft = 0;\n if (opts._scrollDistance_) {\n scrollLeft = -opts._scrollDistance_ * scrollScreenWidth / scrollTotalWidth;\n }\n context.beginPath();\n context.setLineCap('round');\n context.setLineWidth(6 * opts.pixelRatio);\n context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || \"#EFEBEF\");\n context.moveTo(startX, scrollY);\n context.lineTo(endX, scrollY);\n context.stroke();\n context.closePath();\n context.beginPath();\n context.setLineCap('round');\n context.setLineWidth(6 * opts.pixelRatio);\n context.setStrokeStyle(opts.xAxis.scrollColor || \"#A6A6A6\");\n context.moveTo(startX + scrollLeft, scrollY);\n context.lineTo(startX + scrollLeft + scrollWidth, scrollY);\n context.stroke();\n context.closePath();\n }\n\n context.save();\n\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {\n context.translate(opts._scrollDistance_, 0);\n }\n\n context.beginPath();\n context.setStrokeStyle(opts.xAxis.gridColor || \"#cccccc\");\n context.setLineCap('butt');\n context.setLineWidth(1 * opts.pixelRatio);\n if (opts.xAxis.gridType == 'dash') {\n context.setLineDash([opts.xAxis.dashLength, opts.xAxis.dashLength]);\n }\n if (opts.xAxis.disableGrid !== true) {\n if (opts.xAxis.type === 'calibration') {\n xAxisPoints.forEach(function (item, index) {\n if (index > 0) {\n context.moveTo(item - eachSpacing / 2, startY);\n context.lineTo(item - eachSpacing / 2, startY + 4 * opts.pixelRatio);\n }\n });\n } else {\n xAxisPoints.forEach(function (item, index) {\n context.moveTo(item, startY);\n context.lineTo(item, endY);\n });\n }\n }\n context.closePath();\n context.stroke();\n context.setLineDash([]);\n\n //不绘制X轴\n if (opts.xAxis.disabled !== true) {\n // 对X轴列表做抽稀处理\n var validWidth = opts.width - 2 * config.padding - config.yAxisWidth - config.yAxisTitleWidth;\n var maxXAxisListLength = Math.min(categories.length, Math.ceil(validWidth / config.fontSize / 1.5));\n var ratio = Math.ceil(categories.length / maxXAxisListLength);\n categories = categories.map(function (item, index) {\n return index % ratio !== 0 ? '' : item;\n });\n\n if (config._xAxisTextAngle_ === 0) {\n categories.forEach(function (item, index) {\n var offset = eachSpacing / 2 - measureText(item) / 2;\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(opts.xAxis.fontColor || '#666666');\n context.fillText(item, xAxisPoints[index] + offset, startY + config.fontSize + 5);\n context.closePath();\n context.stroke();\n });\n\n } else {\n categories.forEach(function (item, index) {\n context.save();\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(opts.xAxis.fontColor || '#666666');\n var textWidth = measureText(item);\n var offset = eachSpacing / 2 - textWidth;\n\n var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + config.fontSize / 2 + 5, opts.height),\n transX = _calRotateTranslate.transX,\n transY = _calRotateTranslate.transY;\n\n context.rotate(-1 * config._xAxisTextAngle_);\n context.translate(transX, transY);\n context.fillText(item, xAxisPoints[index] + offset, startY + config.fontSize + 5);\n context.closePath();\n context.stroke();\n context.restore();\n });\n }\n }\n context.restore();\n\n}\n\nfunction drawYAxisGrid(categories, opts, config, context) {\n if (opts.yAxis.disableGrid === true) {\n return;\n }\n var spacingValid = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;\n var eachSpacing = Math.floor(spacingValid / config.yAxisSplit);\n var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;\n var startX = config.padding + yAxisTotalWidth;\n var _getXAxisPoints4 = getXAxisPoints(categories, opts, config),\n xAxisPoints = _getXAxisPoints4.xAxisPoints,\n xAxiseachSpacing = _getXAxisPoints4.eachSpacing;\n var TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1);\n var endX = startX + TotalWidth;\n\n var points = [];\n for (var i = 0; i < config.yAxisSplit; i++) {\n points.push(config.padding + eachSpacing * i);\n }\n points.push(config.padding + eachSpacing * config.yAxisSplit + 2);\n\n context.save();\n if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {\n context.translate(opts._scrollDistance_, 0);\n }\n\n if (opts.yAxis.gridType == 'dash') {\n context.setLineDash([opts.yAxis.dashLength, opts.yAxis.dashLength]);\n }\n context.beginPath();\n context.setStrokeStyle(opts.yAxis.gridColor || \"#cccccc\");\n\n context.setLineWidth(1 * opts.pixelRatio);\n points.forEach(function (item, index) {\n context.moveTo(startX, item);\n context.lineTo(endX, item);\n });\n context.closePath();\n context.stroke();\n context.setLineDash([]);\n\n context.restore();\n}\n\nfunction drawYAxis(series, opts, config, context) {\n if (opts.yAxis.disabled === true) {\n return;\n }\n\n var _calYAxisData4 = calYAxisData(series, opts, config),\n rangesFormat = _calYAxisData4.rangesFormat;\n\n var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;\n\n var spacingValid = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;\n var eachSpacing = Math.floor(spacingValid / config.yAxisSplit);\n var startX = config.padding + yAxisTotalWidth;\n var endX = opts.width - config.padding;\n var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;\n\n // set YAxis background\n context.beginPath();\n context.setFillStyle(opts.background || '#ffffff');\n if (opts._scrollDistance_ < 0) {\n context.fillRect(0, 0, startX, endY + config.xAxisHeight);\n }\n context.fillRect(endX, 0, opts.width, endY + config.xAxisHeight);\n context.closePath();\n context.stroke();\n\n var points = [];\n for (var i = 0; i <= config.yAxisSplit; i++) {\n points.push(config.padding + eachSpacing * i);\n }\n\n\n rangesFormat.forEach(function (item, index) {\n var pos = points[index] ? points[index] : endY;\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(opts.yAxis.fontColor || '#666666');\n context.fillText(item, config.padding + config.yAxisTitleWidth, pos + config.fontSize / 2);\n context.closePath();\n context.stroke();\n });\n\n\n if (opts.yAxis.title) {\n drawYAxisTitle(opts.yAxis.title, opts, config, context);\n }\n}\n\nfunction drawLegend(series, opts, config, context) {\n if (opts.legend === false) {\n return;\n }\n // each legend shape width 15px\n // the spacing between shape and text in each legend is the `padding`\n // each legend spacing is the `padding`\n // legend margin top `config.padding`\n\n var _calLegendData = calLegendData(series, opts, config),\n legendList = _calLegendData.legendList;\n\n var padding = 5 * opts.pixelRatio;\n var marginTop = 10 * opts.pixelRatio;\n var shapeWidth = 15 * opts.pixelRatio;\n legendList.forEach(function (itemList, listIndex) {\n var width = 0;\n itemList.forEach(function (item) {\n item.name = item.name || 'undefined';\n width += 3 * padding + measureText(item.name) + shapeWidth;\n });\n var startX = (opts.width - width) / 2 + padding;\n var startY = opts.height - config.padding - config.legendHeight + listIndex * (config.fontSize + marginTop) + padding + marginTop;\n\n context.setFontSize(config.fontSize);\n itemList.forEach(function (item) {\n switch (opts.type) {\n case 'line':\n context.beginPath();\n context.setLineWidth(1 * opts.pixelRatio);\n context.setStrokeStyle(item.color);\n context.setFillStyle(item.color);\n context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 5 * opts.pixelRatio);\n context.arc(startX + 7.5 * opts.pixelRatio, startY + 5 * opts.pixelRatio, 6 * opts.pixelRatio, 0, 2 * Math.PI);\n context.closePath();\n context.fill();\n context.stroke();\n break;\n case 'pie':\n context.beginPath();\n context.setLineWidth(1 * opts.pixelRatio);\n context.setStrokeStyle(item.color);\n context.setFillStyle(item.color);\n context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 5 * opts.pixelRatio);\n context.arc(startX + 7.5 * opts.pixelRatio, startY + 5 * opts.pixelRatio, 6 * opts.pixelRatio, 0, 2 * Math.PI);\n context.closePath();\n context.fill();\n context.stroke();\n break;\n case 'ring':\n context.beginPath();\n context.setLineWidth(1 * opts.pixelRatio);\n context.setStrokeStyle(item.color);\n context.setFillStyle(item.color);\n context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 5 * opts.pixelRatio);\n context.arc(startX + 7.5 * opts.pixelRatio, startY + 5 * opts.pixelRatio, 6 * opts.pixelRatio, 0, 2 * Math.PI);\n context.closePath();\n context.fill();\n context.stroke();\n break;\n //圆弧进度图不显示图例\n case 'gauge':\n break;\n case 'arcbar':\n break;\n default:\n context.beginPath();\n context.setFillStyle(item.color);\n context.moveTo(startX, startY);\n context.fillRect(startX, startY, 15 * opts.pixelRatio, 10 * opts.pixelRatio);\n context.closePath();\n context.fill();\n context.stroke();}\n\n startX += padding + shapeWidth;\n context.beginPath();\n context.setFontSize(config.fontSize);\n context.setFillStyle(opts.extra.legendTextColor || '#333333');\n context.fillText(item.name, startX, startY + 6 * opts.pixelRatio + 3 * opts.pixelRatio);\n context.closePath();\n context.stroke();\n startX += measureText(item.name) + 2 * padding;\n });\n });\n}\n\nfunction drawPieDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n\n var pieOption = opts.extra.pie || {};\n series = getPieDataPoints(series, process);\n var centerPosition = {\n x: opts.width / 2,\n y: (opts.height - config.legendHeight) / 2 };\n\n var radius = Math.min(centerPosition.x - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, centerPosition.y - config.pieChartLinePadding - config.pieChartTextPadding);\n if (opts.dataLabel) {\n radius -= 10;\n } else {\n radius -= 2 * config.padding;\n }\n\n var activeRadius = radius + config.pieChartLinePadding / 2;\n\n\n series = series.map(function (eachSeries) {\n eachSeries._start_ += (pieOption.offsetAngle || 0) * Math.PI / 180;\n return eachSeries;\n });\n series.forEach(function (eachSeries, seriesIndex) {\n if (opts.tooltip) {\n if (opts.tooltip.index == seriesIndex) {\n context.beginPath();\n context.setFillStyle(hexToRgb(eachSeries.color, opts.extra.pie.activeOpacity || 0.5));\n context.moveTo(centerPosition.x, centerPosition.y);\n context.arc(centerPosition.x, centerPosition.y, activeRadius, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);\n context.closePath();\n context.fill();\n }\n }\n context.beginPath();\n context.setLineWidth(2 * opts.pixelRatio);\n context.setStrokeStyle('#ffffff');\n context.setFillStyle(eachSeries.color);\n context.moveTo(centerPosition.x, centerPosition.y);\n context.arc(centerPosition.x, centerPosition.y, radius, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);\n context.closePath();\n context.fill();\n if (opts.disablePieStroke !== true) {\n context.stroke();\n }\n });\n\n if (opts.type === 'ring') {\n var innerPieWidth = radius * 0.6;\n if (typeof opts.extra.pie.ringWidth === 'number' && opts.extra.pie.ringWidth > 0) {\n innerPieWidth = Math.max(0, radius - opts.extra.pie.ringWidth);\n }\n context.beginPath();\n context.setFillStyle(opts.background || '#ffffff');\n context.moveTo(centerPosition.x, centerPosition.y);\n context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI);\n context.closePath();\n context.fill();\n }\n\n if (opts.dataLabel !== false && process === 1) {\n // fix https://github.com/xiaolin3303/wx-charts/issues/132\n var valid = false;\n for (var i = 0, len = series.length; i < len; i++) {\n if (series[i].data > 0) {\n valid = true;\n break;\n }\n }\n\n if (valid) {\n drawPieText(series, opts, config, context, radius, centerPosition);\n }\n }\n\n if (process === 1 && opts.type === 'ring') {\n drawRingTitle(opts, config, context);\n }\n\n return {\n center: centerPosition,\n radius: radius,\n series: series };\n\n}\n\nfunction drawArcbarDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n\n var arcbarOption = opts.extra.arcbar || {};\n arcbarOption.startAngle = arcbarOption.startAngle ? arcbarOption.startAngle : 0.75;\n arcbarOption.endAngle = arcbarOption.endAngle ? arcbarOption.endAngle : 0.25;\n arcbarOption.type = arcbarOption.type ? arcbarOption.type : 'default';\n\n series = getArcbarDataPoints(series, arcbarOption, process);\n var centerPosition = {\n x: opts.width / 2,\n y: opts.height / 2 };\n\n var radius = Math.min(centerPosition.x, centerPosition.y);\n\n if (typeof arcbarOption.width === 'number' && arcbarOption.width > 0) {\n arcbarOption.width = arcbarOption.width;\n } else {\n arcbarOption.width = 12 * opts.pixelRatio;\n }\n radius -= config.padding + arcbarOption.width / 2;\n\n //背景颜色\n context.setLineWidth(arcbarOption.width); // 设置圆环的宽度\n context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9'); // 设置圆环的颜色\n context.setLineCap('round'); // 设置圆环端点的形状\n context.beginPath(); //开始一个新的路径\n if (arcbarOption.type == 'default') {\n context.arc(centerPosition.x, centerPosition.y, radius, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * Math.PI, false);\n } else {\n context.arc(centerPosition.x, centerPosition.y, radius, 0, 2 * Math.PI, false);\n }\n\n context.stroke(); //对当前路径进行描边\n\n\n series.forEach(function (eachSeries) {\n context.setLineWidth(arcbarOption.width);\n context.setStrokeStyle(eachSeries.color);\n context.setLineCap('round');\n context.beginPath();\n context.arc(centerPosition.x, centerPosition.y, radius, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * Math.PI, false);\n context.stroke();\n\n });\n drawRingTitle(opts, config, context);\n return {\n center: centerPosition,\n radius: radius,\n series: series };\n\n}\n\nfunction drawGaugeDataPoints(categories, series, opts, config, context) {\n var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;\n var gaugeOption = opts.extra.gauge || {};\n gaugeOption.startAngle = gaugeOption.startAngle ? gaugeOption.startAngle : 0.75;\n if (gaugeOption.oldAngle == undefined) {\n gaugeOption.oldAngle = gaugeOption.startAngle;\n }\n if (gaugeOption.oldData == undefined) {\n gaugeOption.oldData = 0;\n }\n gaugeOption.endAngle = gaugeOption.endAngle ? gaugeOption.endAngle : 0.25;\n categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle);\n var centerPosition = {\n x: opts.width / 2,\n y: opts.height / 2 };\n\n var radius = Math.min(centerPosition.x, centerPosition.y);\n if (typeof gaugeOption.width === 'number' && gaugeOption.width > 0) {\n gaugeOption.width = gaugeOption.width;\n } else {\n gaugeOption.width = 15 * opts.pixelRatio;\n }\n radius -= config.padding + gaugeOption.width / 2;\n var innerRadius = radius - gaugeOption.width;\n\n\n\n //画背景\n context.setLineWidth(gaugeOption.width);\n context.setLineCap('butt');\n categories.forEach(function (eachCategories) {\n context.beginPath();\n context.setStrokeStyle(eachCategories.color);\n context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ * Math.PI, false);\n context.stroke();\n });\n context.save();\n\n //画刻度线\n var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;\n gaugeOption.splitLine.fixRadius = gaugeOption.splitLine.fixRadius ? gaugeOption.splitLine.fixRadius : 0;\n gaugeOption.splitLine.splitNumber = gaugeOption.splitLine.splitNumber ? gaugeOption.splitLine.splitNumber : 10;\n gaugeOption.splitLine.width = gaugeOption.splitLine.width ? gaugeOption.splitLine.width : 15 * opts.pixelRatio;\n gaugeOption.splitLine.color = gaugeOption.splitLine.color ? gaugeOption.splitLine.color : '#FFFFFF';\n gaugeOption.splitLine.childNumber = gaugeOption.splitLine.childNumber ? gaugeOption.splitLine.childNumber : 5;\n gaugeOption.splitLine.childWidth = gaugeOption.splitLine.childWidth ? gaugeOption.splitLine.childWidth : 5 * opts.pixelRatio;\n\n var splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;\n var childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;\n var startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;\n var endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;\n var childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth;\n\n context.translate(centerPosition.x, centerPosition.y);\n context.rotate((gaugeOption.startAngle - 1) * Math.PI);\n\n for (var i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {\n context.beginPath();\n context.setStrokeStyle(gaugeOption.splitLine.color);\n context.setLineWidth(2 * opts.pixelRatio);\n context.moveTo(startX, 0);\n context.lineTo(endX, 0);\n context.stroke();\n context.rotate(splitAngle * Math.PI);\n }\n context.restore();\n\n context.save();\n context.translate(centerPosition.x, centerPosition.y);\n context.rotate((gaugeOption.startAngle - 1) * Math.PI);\n\n for (var _i = 0; _i < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; _i++) {\n context.beginPath();\n context.setStrokeStyle(gaugeOption.splitLine.color);\n context.setLineWidth(1 * opts.pixelRatio);\n context.moveTo(startX, 0);\n context.lineTo(childendX, 0);\n context.stroke();\n context.rotate(childAngle * Math.PI);\n }\n context.restore();\n\n //画指针\n gaugeOption.pointer.width = gaugeOption.pointer.width ? gaugeOption.pointer.width : 15 * opts.pixelRatio;\n if (gaugeOption.pointer.color == undefined || gaugeOption.pointer.color == 'auto') {\n gaugeOption.pointer.color == 'auto';\n } else {\n gaugeOption.pointer.color == gaugeOption.pointer.color;\n }\n series = getGaugeDataPoints(series, categories, gaugeOption, process);\n\n series.forEach(function (eachSeries) {\n context.save();\n context.translate(centerPosition.x, centerPosition.y);\n context.rotate((eachSeries._proportion_ - 1) * Math.PI);\n context.beginPath();\n context.setFillStyle(eachSeries.color);\n context.moveTo(gaugeOption.pointer.width, 0);\n context.lineTo(0, -gaugeOption.pointer.width / 2);\n context.lineTo(-innerRadius, 0);\n context.lineTo(0, gaugeOption.pointer.width / 2);\n context.lineTo(gaugeOption.pointer.width, 0);\n context.closePath();\n context.fill();\n context.beginPath();\n context.setFillStyle('#FFFFFF');\n context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false);\n context.fill();\n context.restore();\n });\n\n if (opts.dataLabel !== false) {\n drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context);\n }\n\n drawRingTitle(opts, config, context);\n\n if (process === 1 && opts.type === 'gauge') {\n gaugeOption.oldAngle = series[0]._proportion_;\n gaugeOption.oldData = series[0].data;\n }\n return {\n center: centerPosition,\n radius: radius,\n innerRadius: innerRadius,\n categories: categories,\n totalAngle: totalAngle };\n\n}\n\nfunction drawRadarDataPoints(series, opts, config, context) {\n var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n\n var radarOption = opts.extra.radar || {};\n var coordinateAngle = getRadarCoordinateSeries(opts.categories.length);\n var centerPosition = {\n x: opts.width / 2,\n y: (opts.height - config.legendHeight) / 2 };\n\n\n var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin), centerPosition.y - config.radarLabelTextMargin);\n\n radius -= config.padding;\n\n // draw grid\n context.beginPath();\n context.setLineWidth(1 * opts.pixelRatio);\n context.setStrokeStyle(radarOption.gridColor || \"#cccccc\");\n coordinateAngle.forEach(function (angle) {\n var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition);\n context.moveTo(centerPosition.x, centerPosition.y);\n context.lineTo(pos.x, pos.y);\n });\n context.stroke();\n context.closePath();\n\n // draw split line grid\n\n var _loop = function _loop(i) {\n var startPos = {};\n context.beginPath();\n context.setLineWidth(1 * opts.pixelRatio);\n context.setStrokeStyle(radarOption.gridColor || \"#cccccc\");\n coordinateAngle.forEach(function (angle, index) {\n var pos = convertCoordinateOrigin(radius / config.radarGridCount * i * Math.cos(angle), radius / config.radarGridCount * i * Math.sin(angle), centerPosition);\n if (index === 0) {\n startPos = pos;\n context.moveTo(pos.x, pos.y);\n } else {\n context.lineTo(pos.x, pos.y);\n }\n });\n context.lineTo(startPos.x, startPos.y);\n context.stroke();\n context.closePath();\n };\n\n for (var i = 1; i <= config.radarGridCount; i++) {\n _loop(i);\n }\n\n var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process);\n\n radarDataPoints.forEach(function (eachSeries, seriesIndex) {\n // 绘制区域数据\n context.beginPath();\n context.setFillStyle(eachSeries.color);\n context.setGlobalAlpha(0.3);\n eachSeries.data.forEach(function (item, index) {\n if (index === 0) {\n context.moveTo(item.position.x, item.position.y);\n } else {\n context.lineTo(item.position.x, item.position.y);\n }\n });\n context.closePath();\n context.fill();\n context.setGlobalAlpha(1);\n\n if (opts.dataPointShape !== false) {\n var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];\n var points = eachSeries.data.map(function (item) {\n return item.position;\n });\n drawPointShape(points, eachSeries.color, shape, context, opts);\n }\n });\n // draw label text\n drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);\n\n return {\n center: centerPosition,\n radius: radius,\n angleList: coordinateAngle };\n\n}\n\nfunction drawCanvas(opts, context) {\n context.draw();\n}\n\nvar Timing = {\n easeIn: function easeIn(pos) {\n return Math.pow(pos, 3);\n },\n\n easeOut: function easeOut(pos) {\n return Math.pow(pos - 1, 3) + 1;\n },\n\n easeInOut: function easeInOut(pos) {\n if ((pos /= 0.5) < 1) {\n return 0.5 * Math.pow(pos, 3);\n } else {\n return 0.5 * (Math.pow(pos - 2, 3) + 2);\n }\n },\n\n linear: function linear(pos) {\n return pos;\n } };\n\n\nfunction Animation(opts) {\n this.isStop = false;\n opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration;\n opts.timing = opts.timing || 'linear';\n\n var delay = 17;\n\n var createAnimationFrame = function createAnimationFrame() {\n\n if (typeof requestAnimationFrame !== 'undefined') {\n return requestAnimationFrame;\n } else if (typeof setTimeout !== 'undefined') {\n\n return function (step, delay) {\n setTimeout(function () {\n var timeStamp = +new Date();\n step(timeStamp);\n }, delay);\n };\n } else {\n\n return function (step) {\n step(null);\n };\n }\n };\n var animationFrame = createAnimationFrame();\n var startTimeStamp = null;\n\n var _step = function step(timestamp) {\n\n if (timestamp === null || this.isStop === true) {\n opts.onProcess && opts.onProcess(1);\n opts.onAnimationFinish && opts.onAnimationFinish();\n return;\n }\n if (startTimeStamp === null) {\n startTimeStamp = timestamp;\n }\n if (timestamp - startTimeStamp < opts.duration) {\n var process = (timestamp - startTimeStamp) / opts.duration;\n var timingFunction = Timing[opts.timing];\n process = timingFunction(process);\n\n opts.onProcess && opts.onProcess(process);\n animationFrame(_step, delay);\n } else {\n opts.onProcess && opts.onProcess(1);\n opts.onAnimationFinish && opts.onAnimationFinish();\n }\n };\n _step = _step.bind(this);\n animationFrame(_step, delay);\n}\n\n// stop animation immediately\n// and tigger onAnimationFinish\nAnimation.prototype.stop = function () {\n this.isStop = true;\n};\n\nfunction drawCharts(type, opts, config, context) {\n var _this = this;\n\n var series = opts.series;\n var categories = opts.categories;\n series = fillSeriesColor(series, config);\n series = fillSeriesType(series, opts);\n\n var _calLegendData = calLegendData(series, opts, config),\n legendHeight = _calLegendData.legendHeight;\n\n config.legendHeight = legendHeight;\n\n var _calYAxisData = calYAxisData(series, opts, config),\n yAxisWidth = _calYAxisData.yAxisWidth;\n\n config.yAxisWidth = yAxisWidth;\n if (categories && categories.length) {\n var _calCategoriesData = calCategoriesData(categories, opts, config),\n xAxisHeight = _calCategoriesData.xAxisHeight,\n angle = _calCategoriesData.angle;\n\n config.xAxisHeight = xAxisHeight;\n config._xAxisTextAngle_ = angle;\n }\n if (type === 'pie' || type === 'ring') {\n config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(series);\n }\n\n var duration = opts.animation ? 1000 : 0;\n this.animationInstance && this.animationInstance.stop();\n\n //先清空画布,不然百度和支付宝ToolTip有重影\n context.clearRect(0, 0, opts.width, opts.height);\n\n\n switch (type) {\n case 'line':\n this.animationInstance = new Animation({\n timing: 'easeIn',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n drawYAxisGrid(categories, opts, config, context);\n drawXAxis(categories, opts, config, context);\n var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process),\n xAxisPoints = _drawLineDataPoints.xAxisPoints,\n calPoints = _drawLineDataPoints.calPoints,\n eachSpacing = _drawLineDataPoints.eachSpacing;\n\n _this.chartData.xAxisPoints = xAxisPoints;\n _this.chartData.calPoints = calPoints;\n _this.chartData.eachSpacing = eachSpacing;\n drawLegend(opts.series, opts, config, context);\n drawYAxis(series, opts, config, context);\n drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);\n drawCanvas(opts, context);\n\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n\n break;\n case 'mix':\n this.animationInstance = new Animation({\n timing: 'easeIn',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n drawYAxisGrid(categories, opts, config, context);\n drawXAxis(categories, opts, config, context);\n var _drawMixDataPoints = drawMixDataPoints(series, opts, config, context, process),\n xAxisPoints = _drawMixDataPoints.xAxisPoints,\n calPoints = _drawMixDataPoints.calPoints,\n eachSpacing = _drawMixDataPoints.eachSpacing;\n\n _this.chartData.xAxisPoints = xAxisPoints;\n _this.chartData.calPoints = calPoints;\n _this.chartData.eachSpacing = eachSpacing;\n drawLegend(opts.series, opts, config, context);\n drawYAxis(series, opts, config, context);\n drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n\n break;\n case 'column':\n this.animationInstance = new Animation({\n timing: 'easeIn',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n drawYAxisGrid(categories, opts, config, context);\n drawXAxis(categories, opts, config, context);\n var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process),\n xAxisPoints = _drawColumnDataPoints.xAxisPoints,\n calPoints = _drawColumnDataPoints.calPoints,\n eachSpacing = _drawColumnDataPoints.eachSpacing;\n _this.chartData.xAxisPoints = xAxisPoints;\n _this.chartData.calPoints = calPoints;\n _this.chartData.eachSpacing = eachSpacing;\n drawLegend(opts.series, opts, config, context);\n drawYAxis(series, opts, config, context);\n drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;\n case 'area':\n this.animationInstance = new Animation({\n timing: 'easeIn',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n drawYAxisGrid(categories, opts, config, context);\n drawXAxis(categories, opts, config, context);\n var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process),\n xAxisPoints = _drawAreaDataPoints.xAxisPoints,\n calPoints = _drawAreaDataPoints.calPoints,\n eachSpacing = _drawAreaDataPoints.eachSpacing;\n\n _this.chartData.xAxisPoints = xAxisPoints;\n _this.chartData.calPoints = calPoints;\n _this.chartData.eachSpacing = eachSpacing;\n drawLegend(opts.series, opts, config, context);\n drawYAxis(series, opts, config, context);\n drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);\n\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;\n case 'ring':\n case 'pie':\n this.animationInstance = new Animation({\n timing: 'easeInOut',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n _this.chartData.pieData = drawPieDataPoints(series, opts, config, context, process);\n drawLegend(opts.series, opts, config, context);\n drawToolTipBridge(opts, config, context, process);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;\n case 'radar':\n this.animationInstance = new Animation({\n timing: 'easeInOut',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n _this.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process);\n drawLegend(opts.series, opts, config, context);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;\n case 'arcbar':\n this.animationInstance = new Animation({\n timing: 'easeInOut',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n _this.chartData.arcbarData = drawArcbarDataPoints(series, opts, config, context, process);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;\n case 'gauge':\n this.animationInstance = new Animation({\n timing: 'easeInOut',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n _this.chartData.gaugeData = drawGaugeDataPoints(categories, series, opts, config, context, process);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;\n case 'candle':\n this.animationInstance = new Animation({\n timing: 'easeIn',\n duration: duration,\n onProcess: function onProcess(process) {\n if (opts.rotate) {\n contextRotate(context, opts);\n }\n drawYAxisGrid(categories, opts, config, context);\n drawXAxis(categories, opts, config, context);\n var _drawCandleDataPoints = drawCandleDataPoints(series, opts, config, context, process),\n xAxisPoints = _drawCandleDataPoints.xAxisPoints,\n calPoints = _drawCandleDataPoints.calPoints,\n eachSpacing = _drawCandleDataPoints.eachSpacing;\n\n _this.chartData.xAxisPoints = xAxisPoints;\n _this.chartData.calPoints = calPoints;\n _this.chartData.eachSpacing = eachSpacing;\n drawLegend(opts.series, opts, config, context);\n drawYAxis(series, opts, config, context);\n drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);\n drawCanvas(opts, context);\n },\n onAnimationFinish: function onAnimationFinish() {\n _this.event.trigger('renderComplete');\n } });\n\n break;}\n\n}\n\n// simple event implement\n\nfunction Event() {\n this.events = {};\n}\n\nEvent.prototype.addEventListener = function (type, listener) {\n this.events[type] = this.events[type] || [];\n this.events[type].push(listener);\n};\n\nEvent.prototype.trigger = function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var type = args[0];\n var params = args.slice(1);\n if (!!this.events[type]) {\n this.events[type].forEach(function (listener) {\n try {\n listener.apply(null, params);\n } catch (e) {\n console.error(__f__(e, \" at components\\\\u-charts\\\\u-charts.js:3231\"));\n }\n });\n }\n};\n\nvar Charts = function Charts(opts) {\n opts.fontSize = opts.fontSize ? opts.fontSize * opts.pixelRatio : 13 * opts.pixelRatio;\n opts.title = opts.title || {};\n opts.subtitle = opts.subtitle || {};\n opts.yAxis = opts.yAxis || {};\n opts.yAxis.gridType = opts.yAxis.gridType ? opts.yAxis.gridType : 'solid';\n opts.yAxis.dashLength = opts.yAxis.dashLength ? opts.yAxis.dashLength : 4 * opts.pixelRatio;\n opts.xAxis = opts.xAxis || {};\n opts.xAxis.rotateLabel = opts.xAxis.rotateLabel ? true : false;\n opts.xAxis.type = opts.xAxis.type ? opts.xAxis.type : 'calibration';\n opts.xAxis.gridType = opts.xAxis.gridType ? opts.xAxis.gridType : 'solid';\n opts.xAxis.dashLength = opts.xAxis.dashLength ? opts.xAxis.dashLength : 4 * opts.pixelRatio;\n opts.xAxis.itemCount = opts.xAxis.itemCount ? opts.xAxis.itemCount : 5;\n opts.xAxis.scrollAlign = opts.xAxis.scrollAlign ? opts.xAxis.scrollAlign : 'left';\n opts.extra = opts.extra || {};\n\n opts.legend = opts.legend === false ? false : true;\n opts.rotate = opts.rotate ? true : false;\n opts.animation = opts.animation === false ? false : true;\n var config$$1 = assign({}, config);\n config$$1.yAxisTitleWidth = opts.yAxis.disabled !== true && opts.yAxis.title ? config$$1.yAxisTitleWidth : 0;\n if (opts.type == 'pie' || opts.type == 'ring') {\n config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.pie.lableWidth || config$$1.pieChartLinePadding * opts.pixelRatio;\n }\n config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding * opts.pixelRatio;\n config$$1.yAxisSplit = opts.yAxis.splitNumber ? opts.yAxis.splitNumber : config.yAxisSplit;\n //屏幕旋转\n config$$1.rotate = opts.rotate;\n if (opts.rotate) {\n var tempWidth = opts.width;\n var tempHeight = opts.height;\n opts.width = tempHeight;\n opts.height = tempWidth;\n }\n\n //适配H5高分屏\n config$$1.yAxisWidth = config.yAxisWidth * opts.pixelRatio;\n config$$1.xAxisHeight = config.xAxisHeight * opts.pixelRatio;\n if (opts.enableScroll && opts.xAxis.scrollShow) {\n config$$1.xAxisHeight += 4 * opts.pixelRatio;\n }\n config$$1.xAxisLineHeight = config.xAxisLineHeight * opts.pixelRatio;\n config$$1.legendHeight = config.legendHeight * opts.pixelRatio;\n //config$$1.yAxisTitleWidth=config.yAxisTitleWidth*opts.pixelRatio;\n config$$1.padding = config.padding * opts.pixelRatio;\n config$$1.fontSize = opts.fontSize;\n config$$1.titleFontSize = config.titleFontSize * opts.pixelRatio;\n config$$1.subtitleFontSize = config.subtitleFontSize * opts.pixelRatio;\n config$$1.toolTipPadding = config.toolTipPadding * opts.pixelRatio;\n config$$1.toolTipLineHeight = config.toolTipLineHeight * opts.pixelRatio;\n config$$1.columePadding = config.columePadding * opts.pixelRatio;\n //config$$1.xAxisTextPadding=config.xAxisTextPadding*opts.pixelRatio;\n\n //向配置中传入当前pixelRatio及字体大小\n config.pixelRatio = opts.pixelRatio;\n config.fontSize = opts.fontSize;\n config.rotate = opts.rotate;\n\n this.opts = opts;\n this.config = config$$1;\n opts.$this = opts.$this ? opts.$this : this;\n this.context = uni.createCanvasContext(opts.canvasId, opts.$this);\n // store calcuated chart data\n // such as chart point coordinate\n this.chartData = {};\n this.event = new Event();\n\n this.scrollOption = {\n currentOffset: 0,\n startTouchX: 0,\n distance: 0 };\n\n\n //计算右对齐偏移距离\n if (opts.enableScroll && opts.xAxis.scrollAlign == 'right') {\n var _calYAxisData = calYAxisData(opts.series, opts, config$$1),\n yAxisWidth = _calYAxisData.yAxisWidth;\n config$$1.yAxisWidth = yAxisWidth;\n var offsetLeft = 0;\n var _getXAxisPoints0 = getXAxisPoints(opts.categories, opts, config$$1),\n xAxisPoints = _getXAxisPoints0.xAxisPoints,\n startX = _getXAxisPoints0.startX,\n endX = _getXAxisPoints0.endX,\n eachSpacing = _getXAxisPoints0.eachSpacing;\n var totalWidth = eachSpacing * (xAxisPoints.length - 1);\n var screenWidth = endX - startX;\n offsetLeft = screenWidth - totalWidth;\n this.scrollOption = {\n currentOffset: offsetLeft,\n startTouchX: offsetLeft,\n distance: 0 };\n\n opts._scrollDistance_ = offsetLeft;\n }\n\n drawCharts.call(this, opts.type, opts, config$$1, this.context);\n};\n\nCharts.prototype.updateData = function () {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.opts.series = data.series || this.opts.series;\n this.opts.categories = data.categories || this.opts.categories;\n\n this.opts.title = assign({}, this.opts.title, data.title || {});\n this.opts.subtitle = assign({}, this.opts.subtitle, data.subtitle || {});\n\n drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);\n};\n\nCharts.prototype.zoom = function () {\n var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount;\n if (this.opts.enableScroll !== true) {\n console.log(__f__('请启用滚动条后使用!', \" at components\\\\u-charts\\\\u-charts.js:3349\"));\n return;\n }\n this.opts.animation = false;\n this.opts.xAxis.itemCount = val.itemCount;\n drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);\n};\n\nCharts.prototype.stopAnimation = function () {\n this.animationInstance && this.animationInstance.stop();\n};\n\nCharts.prototype.addEventListener = function (type, listener) {\n this.event.addEventListener(type, listener);\n};\n\nCharts.prototype.getCurrentDataIndex = function (e) {\n var touches = e.mp.changedTouches[0];\n if (touches) {\n var _touches$ = getTouches(touches, this.opts, e);\n if (this.opts.type === 'pie' || this.opts.type === 'ring') {\n return findPieChartCurrentIndex({ x: _touches$.x, y: _touches$.y }, this.chartData.pieData);\n } else if (this.opts.type === 'radar') {\n return findRadarChartCurrentIndex({ x: _touches$.x, y: _touches$.y }, this.chartData.radarData, this.opts.categories.length);\n } else {\n return findCurrentIndex({ x: _touches$.x, y: _touches$.y }, this.chartData.xAxisPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));\n }\n }\n return -1;\n};\n\nCharts.prototype.showToolTip = function (e) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var touches = e.mp.changedTouches[0];\n var _touches$ = getTouches(touches, this.opts, e);\n\n if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'mix' || this.opts.type === 'column') {\n var index = this.getCurrentDataIndex(e);\n var currentOffset = this.scrollOption.currentOffset;\n\n var opts = assign({}, this.opts, {\n _scrollDistance_: currentOffset,\n animation: false });\n\n if (index > -1) {\n\n var seriesData = getSeriesDataItem(this.opts.series, index);\n if (seriesData.length !== 0) {\n var _getToolTipData = getToolTipData(seriesData, this.chartData.calPoints, index, this.opts.categories, option),\n textList = _getToolTipData.textList,\n offset = _getToolTipData.offset;\n offset.y = _touches$.y;\n opts.tooltip = {\n textList: textList,\n offset: offset,\n option: option,\n index: index };\n\n }\n }\n drawCharts.call(this, opts.type, opts, this.config, this.context);\n }\n if (this.opts.type === 'candle') {\n\n var index = this.getCurrentDataIndex(e);\n var currentOffset = this.scrollOption.currentOffset;\n\n var opts = assign({}, this.opts, {\n _scrollDistance_: currentOffset,\n animation: false });\n\n if (index > -1) {\n var seriesData = getSeriesDataItem(this.opts.series, index);\n if (seriesData.length !== 0) {\n var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.chartData.calPoints, index, this.opts.categories, this.opts.extra.candle, option),\n textList = _getToolTipData.textList,\n offset = _getToolTipData.offset;\n offset.y = _touches$.y;\n opts.tooltip = {\n textList: textList,\n offset: offset,\n option: option,\n index: index };\n\n }\n }\n drawCharts.call(this, opts.type, opts, this.config, this.context);\n }\n if (this.opts.type === 'pie' || this.opts.type === 'ring') {\n var index = this.getCurrentDataIndex(e);\n var currentOffset = this.scrollOption.currentOffset;\n\n var opts = assign({}, this.opts, {\n _scrollDistance_: currentOffset,\n animation: false });\n\n if (index > -1) {\n\n var seriesData = this.opts.series[index];\n var textList = [{\n text: option.format ? option.format(seriesData) : seriesData.name + ': ' + seriesData.data,\n color: seriesData.color }];\n\n var offset = { x: _touches$.x, y: _touches$.y };\n\n opts.tooltip = {\n textList: textList,\n offset: offset,\n option: option,\n index: index };\n\n }\n drawCharts.call(this, opts.type, opts, this.config, this.context);\n }\n};\n\nCharts.prototype.scrollStart = function (e) {\n var touches = e.mp.changedTouches[0];\n var _touches$ = getTouches(touches, this.opts, e);\n if (touches && this.opts.enableScroll === true) {\n if (touches.x) {\n this.scrollOption.startTouchX = _touches$.x;\n } else {\n this.scrollOption.startTouchX = _touches$.clientX;\n }\n }\n};\n\nCharts.prototype.scroll = function (e) {\n // TODO throtting...\n var touches = e.mp.changedTouches[0];\n var _touches$ = getTouches(touches, this.opts, e);\n if (touches && this.opts.enableScroll === true) {\n var _distance;\n if (touches.x) {\n _distance = _touches$.x - this.scrollOption.startTouchX;\n } else {\n _distance = _touches$.clientX - this.scrollOption.startTouchX;\n }\n var currentOffset = this.scrollOption.currentOffset;\n\n var validDistance = calValidDistance(currentOffset + _distance, this.chartData, this.config, this.opts);\n\n this.scrollOption.distance = _distance = validDistance - currentOffset;\n var opts = assign({}, this.opts, {\n _scrollDistance_: currentOffset + _distance,\n animation: false });\n\n drawCharts.call(this, opts.type, opts, this.config, this.context);\n }\n};\n\nCharts.prototype.scrollEnd = function (e) {\n if (this.opts.enableScroll === true) {\n var _scrollOption = this.scrollOption,\n currentOffset = _scrollOption.currentOffset,\n distance = _scrollOption.distance;\n\n this.scrollOption.currentOffset = currentOffset + distance;\n this.scrollOption.distance = 0;\n }\n};\n\nmodule.exports = Charts;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 10)[\"default\"], __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tcG9uZW50cy91LWNoYXJ0cy91LWNoYXJ0cy5qcyJdLCJuYW1lcyI6WyJjb25maWciLCJ5QXhpc1dpZHRoIiwieUF4aXNTcGxpdCIsInhBeGlzSGVpZ2h0IiwieEF4aXNMaW5lSGVpZ2h0IiwibGVnZW5kSGVpZ2h0IiwieUF4aXNUaXRsZVdpZHRoIiwicGFkZGluZyIsInBpeGVsUmF0aW8iLCJyb3RhdGUiLCJjb2x1bWVQYWRkaW5nIiwiZm9udFNpemUiLCJkYXRhUG9pbnRTaGFwZSIsImNvbG9ycyIsInBpZUNoYXJ0TGluZVBhZGRpbmciLCJwaWVDaGFydFRleHRQYWRkaW5nIiwieEF4aXNUZXh0UGFkZGluZyIsInRpdGxlQ29sb3IiLCJ0aXRsZUZvbnRTaXplIiwic3VidGl0bGVDb2xvciIsInN1YnRpdGxlRm9udFNpemUiLCJ0b29sVGlwUGFkZGluZyIsInRvb2xUaXBCYWNrZ3JvdW5kIiwidG9vbFRpcE9wYWNpdHkiLCJ0b29sVGlwTGluZUhlaWdodCIsInJhZGFyR3JpZENvdW50IiwicmFkYXJMYWJlbFRleHRNYXJnaW4iLCJnYXVnZUxhYmVsVGV4dE1hcmdpbiIsImFzc2lnbiIsInRhcmdldCIsInZhckFyZ3MiLCJUeXBlRXJyb3IiLCJ0byIsIk9iamVjdCIsImluZGV4IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibmV4dFNvdXJjZSIsIm5leHRLZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ1dGlsIiwidG9GaXhlZCIsIm51bSIsImxpbWl0IiwiaXNGbG9hdCIsImFwcHJveGltYXRlbHlFcXVhbCIsIm51bTEiLCJudW0yIiwiTWF0aCIsImFicyIsImlzU2FtZVNpZ24iLCJpc1NhbWVYQ29vcmRpbmF0ZUFyZWEiLCJwMSIsInAyIiwieCIsImlzQ29sbGlzaW9uIiwib2JqMSIsIm9iajIiLCJlbmQiLCJzdGFydCIsIndpZHRoIiwieSIsImhlaWdodCIsImZsYWciLCJoZXhUb1JnYiIsImhleFZhbHVlIiwib3BjIiwicmd4IiwiaGV4IiwicmVwbGFjZSIsIm0iLCJyIiwiZyIsImIiLCJyZ2IiLCJleGVjIiwicGFyc2VJbnQiLCJmaW5kUmFuZ2UiLCJ0eXBlIiwiaXNOYU4iLCJFcnJvciIsIm11bHRpcGxlIiwiY2VpbCIsImZsb29yIiwiY2FsVmFsaWREaXN0YW5jZSIsImRpc3RhbmNlIiwiY2hhcnREYXRhIiwib3B0cyIsImRhdGFDaGFydEFyZWFXaWR0aCIsInhBeGlzUG9pbnRzIiwiZGF0YUNoYXJ0V2lkdGgiLCJlYWNoU3BhY2luZyIsImNhdGVnb3JpZXMiLCJ2YWxpZERpc3RhbmNlIiwiaXNJbkFuZ2xlUmFuZ2UiLCJhbmdsZSIsInN0YXJ0QW5nbGUiLCJlbmRBbmdsZSIsImFkanVzdCIsIlBJIiwiY2FsUm90YXRlVHJhbnNsYXRlIiwiaCIsInh2IiwieXYiLCJ0cmFuc1giLCJzcXJ0IiwidHJhbnNZIiwiY3JlYXRlQ3VydmVDb250cm9sUG9pbnRzIiwicG9pbnRzIiwiaSIsImlzTm90TWlkZGxlUG9pbnQiLCJtYXgiLCJtaW4iLCJhIiwicEF4IiwicEF5IiwicEJ4IiwicEJ5IiwibGFzdCIsImN0ckEiLCJjdHJCIiwiY29udmVydENvb3JkaW5hdGVPcmlnaW4iLCJjZW50ZXIiLCJhdm9pZENvbGxpc2lvbiIsIm9iaiIsImZpbGxTZXJpZXNDb2xvciIsInNlcmllcyIsIm1hcCIsIml0ZW0iLCJjb2xvciIsImZpbGxTZXJpZXNUeXBlIiwiZ2V0RGF0YVJhbmdlIiwibWluRGF0YSIsIm1heERhdGEiLCJyYW5nZSIsIm1pblJhbmdlIiwibWF4UmFuZ2UiLCJtZWFzdXJlVGV4dCIsInRleHQiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJzcGxpdCIsImZvckVhY2giLCJ0ZXN0IiwiZGF0YUNvbWJpbmUiLCJyZWR1Y2UiLCJkYXRhIiwiY29uY2F0IiwiZGF0YUNvbWJpbmVTdGFjayIsInN1bSIsIkFycmF5IiwiaiIsImdldFRvdWNoZXMiLCJ0b3VjaGVzIiwiZSIsImNsaWVudFgiLCJwYWdlWSIsIm1wIiwiY3VycmVudFRhcmdldCIsIm9mZnNldFRvcCIsImdldFNlcmllc0RhdGFJdGVtIiwic2VyaWVzSXRlbSIsIm5hbWUiLCJmb3JtYXQiLCJwdXNoIiwiZ2V0TWF4VGV4dExpc3RMZW5ndGgiLCJsaXN0IiwibGVuZ3RoTGlzdCIsImFwcGx5IiwiZ2V0UmFkYXJDb29yZGluYXRlU2VyaWVzIiwiZWFjaEFuZ2xlIiwiQ29vcmRpbmF0ZVNlcmllcyIsImdldFRvb2xUaXBEYXRhIiwic2VyaWVzRGF0YSIsImNhbFBvaW50cyIsIm9wdGlvbiIsInRleHRMaXN0IiwidmFsaWRDYWxQb2ludHMiLCJvZmZzZXQiLCJyb3VuZCIsImdldENhbmRsZVRvb2xUaXBEYXRhIiwiZXh0cmEiLCJ1cENvbG9yIiwidXBGaWxsIiwiZG93bkNvbG9yIiwiZG93bkZpbGwiLCJ0ZXh0MCIsInRleHQxIiwidGV4dDIiLCJ0ZXh0MyIsInRleHQ0IiwiZmluZEN1cnJlbnRJbmRleCIsImN1cnJlbnRQb2ludHMiLCJjdXJyZW50SW5kZXgiLCJpc0luRXhhY3RDaGFydEFyZWEiLCJmaW5kUmFkYXJDaGFydEN1cnJlbnRJbmRleCIsInJhZGFyRGF0YSIsImNvdW50IiwiZWFjaEFuZ2xlQXJlYSIsImlzSW5FeGFjdFBpZUNoYXJ0QXJlYSIsInJhZGl1cyIsImZpeEFuZ2xlIiwiYXRhbjIiLCJhbmdsZUxpc3QiLCJyYW5nZVN0YXJ0IiwicmFuZ2VFbmQiLCJmaW5kUGllQ2hhcnRDdXJyZW50SW5kZXgiLCJwaWVEYXRhIiwibGVuIiwiX3N0YXJ0XyIsIl9wcm9wb3J0aW9uXyIsInBvdyIsInNwbGl0UG9pbnRzIiwibmV3UG9pbnRzIiwiaXRlbXMiLCJjYWxMZWdlbmREYXRhIiwibGVnZW5kIiwibGVnZW5kTGlzdCIsIm1hcmdpblRvcCIsInNoYXBlV2lkdGgiLCJ3aWR0aENvdW50IiwiY3VycmVudFJvdyIsIml0ZW1XaWR0aCIsImNhbENhdGVnb3JpZXNEYXRhIiwicmVzdWx0IiwiX2dldFhBeGlzUG9pbnRzIiwiZ2V0WEF4aXNQb2ludHMiLCJjYXRlZ29yaWVzVGV4dExlbnRoIiwibWF4VGV4dExlbmd0aCIsInhBeGlzIiwicm90YXRlTGFiZWwiLCJzaW4iLCJnZXRSYWRhckRhdGFQb2ludHMiLCJwcm9jZXNzIiwicmFkYXJPcHRpb24iLCJyYWRhciIsImVhY2giLCJsaXN0SXRlbSIsInRtcCIsInByb3BvcnRpb24iLCJwb3NpdGlvbiIsImNvcyIsImdldFBpZURhdGFQb2ludHMiLCJnZXRBcmNiYXJEYXRhUG9pbnRzIiwiYXJjYmFyT3B0aW9uIiwidG90YWxBbmdsZSIsImdldEdhdWdlQXhpc1BvaW50cyIsInRlbXBTdGFydEFuZ2xlIiwidmFsdWUiLCJfc3RhcnRBbmdsZV8iLCJfZW5kQW5nbGVfIiwiZ2V0R2F1Z2VEYXRhUG9pbnRzIiwiZ2F1Z2VPcHRpb24iLCJwb2ludGVyIiwiX29sZEFuZ2xlXyIsIm9sZEFuZ2xlIiwib2xkRGF0YSIsImdldFBpZVRleHRNYXhMZW5ndGgiLCJtYXhMZW5ndGgiLCJmaXhDb2x1bWVEYXRhIiwiY29sdW1uTGVuIiwiY29sdW1uIiwiZml4Q29sdW1lTWV0ZXJEYXRhIiwiYm9yZGVyIiwiZml4Q29sdW1lU3RhY2tEYXRhIiwiaW5kZXhuIiwieUF4aXNUb3RhbFdpZHRoIiwic3BhY2luZ1ZhbGlkIiwiZGF0YUNvdW50IiwiZW5hYmxlU2Nyb2xsIiwiaXRlbUNvdW50Iiwic3RhcnRYIiwiZW5kWCIsImdldENhbmRsZURhdGFQb2ludHMiLCJ2YWxpZEhlaWdodCIsImNQb2ludHMiLCJpbmRleHMiLCJwb2ludCIsImdldERhdGFQb2ludHMiLCJnZXRTdGFja0RhdGFQb2ludHMiLCJzZXJpZXNJbmRleCIsInN0YWNrU2VyaWVzIiwidmFsdWUwIiwiaGVpZ2h0MCIsImhlaWdodGMiLCJ5MCIsImdldFlBeGlzVGV4dExpc3QiLCJzdGFjayIsInNvcnRlZCIsImZpbHRlciIsImNvbnN0cnVjdG9yIiwic3ViaXRlbSIsInlBeGlzIiwicmFuZ2VTcGFuIiwiZGF0YVJhbmdlIiwiZWFjaFJhbmdlIiwicmV2ZXJzZSIsImNhbFlBeGlzRGF0YSIsImNvbHVtbnN0eWxlIiwicmFuZ2VzIiwicmFuZ2VzRm9ybWF0IiwiTnVtYmVyIiwiZGlzYWJsZWQiLCJjYWxUb29sdGlwWUF4aXNEYXRhIiwibWF4VmFsIiwibWluVmFsIiwibWluQXhpcyIsIm1heEF4aXMiLCJjb250ZXh0Um90YXRlIiwiY29udGV4dCIsInJvdGF0ZUxvY2siLCJ0cmFuc2xhdGUiLCJfcm90YXRlXyIsImRyYXdQb2ludFNoYXBlIiwic2hhcGUiLCJiZWdpblBhdGgiLCJzZXRTdHJva2VTdHlsZSIsInNldExpbmVXaWR0aCIsInNldEZpbGxTdHlsZSIsIm1vdmVUbyIsImxpbmVUbyIsImFyYyIsInJlY3QiLCJjbG9zZVBhdGgiLCJmaWxsIiwic3Ryb2tlIiwiZHJhd1JpbmdUaXRsZSIsInRpdGxlZm9udFNpemUiLCJ0aXRsZSIsInN1YnRpdGxlZm9udFNpemUiLCJzdWJ0aXRsZSIsInRpdGxlRm9udENvbG9yIiwic3VidGl0bGVGb250Q29sb3IiLCJ0aXRsZUhlaWdodCIsInN1YnRpdGxlSGVpZ2h0IiwibWFyZ2luIiwidGV4dFdpZHRoIiwib2Zmc2V0WCIsInN0YXJ0WSIsIm9mZnNldFkiLCJzZXRGb250U2l6ZSIsImZpbGxUZXh0IiwiX3RleHRXaWR0aCIsIl9zdGFydFgiLCJfc3RhcnRZIiwiZHJhd1BvaW50VGV4dCIsImZvcm1hdFZhbCIsImRyYXdHYXVnZUxhYmVsIiwiY2VudGVyUG9zaXRpb24iLCJzcGxpdEFuZ2xlIiwic3BsaXRMaW5lIiwic3BsaXROdW1iZXIiLCJ0b3RhbE51bWJlciIsImVuZE51bWJlciIsInN0YXJ0TnVtYmVyIiwibm93QW5nbGUiLCJub3dOdW1iZXIiLCJwb3MiLCJsYWJlbENvbG9yIiwiZHJhd1JhZGFyTGFiZWwiLCJwb3NSZWxhdGl2ZUNhbnZhcyIsImRyYXdQaWVUZXh0IiwibGluZVJhZGl1cyIsInRleHRPYmplY3RDb2xsZWN0aW9uIiwibGFzdFRleHRPYmplY3QiLCJzZXJpZXNDb252ZXJ0Iiwib3JnaW5YMSIsIm9yZ2luWTEiLCJvcmdpblgyIiwib3JnaW5ZMiIsIm9yZ2luWDMiLCJvcmdpblkzIiwidGV4dE9iamVjdCIsImxpbmVTdGFydCIsImxpbmVFbmQiLCJsaW5lU3RhcnRQb2lzdGlvbiIsImxpbmVFbmRQb2lzdGlvbiIsInRleHRQb3NpdGlvbiIsImN1cnZlU3RhcnRYIiwidGV4dFN0YXJ0WCIsInF1YWRyYXRpY0N1cnZlVG8iLCJkcmF3VG9vbFRpcFNwbGl0TGluZSIsInRvb2xUaXBPcHRpb24iLCJ0b29sdGlwIiwiZ3JpZFR5cGUiLCJkYXNoTGVuZ3RoIiwiZW5kWSIsInNldExpbmVEYXNoIiwiZ3JpZENvbG9yIiwieEF4aXNMYWJlbCIsImxhYmxlVGV4dCIsInRleHRYIiwidGV4dFkiLCJsYWJlbEJnQ29sb3IiLCJsYWJlbEJnT3BhY2l0eSIsImxhYmVsRm9udENvbG9yIiwiZm9udENvbG9yIiwiZHJhd1Rvb2xUaXBIb3JpemVudGFsTGluZSIsInlBeGlzTGFiZWwiLCJkcmF3VG9vbFRpcFNwbGl0QXJlYSIsImRyYXdUb29sVGlwIiwibGVnZW5kV2lkdGgiLCJsZWdlbmRNYXJnaW5SaWdodCIsImFycm93V2lkdGgiLCJpc092ZXJSaWdodEJvcmRlciIsInRvb2xUaXBXaWR0aCIsInRvb2xUaXBIZWlnaHQiLCJfc2Nyb2xsRGlzdGFuY2VfIiwiYmFja2dyb3VuZCIsImZpbGxSZWN0IiwiZHJhd1lBeGlzVGl0bGUiLCJzYXZlIiwicmVzdG9yZSIsImRyYXdDb2x1bW5EYXRhUG9pbnRzIiwiY29sdW1uT3B0aW9uIiwibWV0ZXIiLCJmaWxsQ29sb3IiLCJfY2FsWUF4aXNEYXRhIiwicG9wIiwic2hpZnQiLCJlYWNoU2VyaWVzIiwidG9vbHRpcFBvaW50cyIsImRhdGFMYWJlbCIsImRyYXdDYW5kbGVEYXRhUG9pbnRzIiwiY2FuZGxlT3B0aW9uIiwiY2FuZGxlIiwiYXZlcmFnZSIsInVwTGluZSIsImRvd25MaW5lIiwic2hvdyIsImRheSIsIl9jYWxZQXhpc0RhdGE1IiwiX2dldFhBeGlzUG9pbnRzNSIsInNwbGl0UG9pbnRMaXN0IiwiZHJhd0FyZWFEYXRhUG9pbnRzIiwiX2NhbFlBeGlzRGF0YTIiLCJfZ2V0WEF4aXNQb2ludHMyIiwic2V0R2xvYmFsQWxwaGEiLCJmaXJzdFBvaW50IiwibGFzdFBvaW50IiwibGluZVN0eWxlIiwiY3RybFBvaW50IiwiYmV6aWVyQ3VydmVUbyIsImRyYXdMaW5lRGF0YVBvaW50cyIsIl9jYWxZQXhpc0RhdGEzIiwiX2dldFhBeGlzUG9pbnRzMyIsImRyYXdNaXhEYXRhUG9pbnRzIiwiX2NhbFlBeGlzRGF0YTYiLCJfZ2V0WEF4aXNQb2ludHM2IiwiY29sdW1uSW5kZXgiLCJjb2x1bW5MZW5ndGgiLCJzdHlsZSIsImRyYXdUb29sVGlwQnJpZGdlIiwiaG9yaXplbnRhbExpbmUiLCJkcmF3WEF4aXMiLCJfZ2V0WEF4aXNQb2ludHM0Iiwic2Nyb2xsU2hvdyIsInNjcm9sbFkiLCJzY3JvbGxTY3JlZW5XaWR0aCIsInNjcm9sbFRvdGFsV2lkdGgiLCJzY3JvbGxXaWR0aCIsInNjcm9sbExlZnQiLCJzZXRMaW5lQ2FwIiwic2Nyb2xsQmFja2dyb3VuZENvbG9yIiwic2Nyb2xsQ29sb3IiLCJkaXNhYmxlR3JpZCIsInZhbGlkV2lkdGgiLCJtYXhYQXhpc0xpc3RMZW5ndGgiLCJyYXRpbyIsIl94QXhpc1RleHRBbmdsZV8iLCJfY2FsUm90YXRlVHJhbnNsYXRlIiwiZHJhd1lBeGlzR3JpZCIsInhBeGlzZWFjaFNwYWNpbmciLCJUb3RhbFdpZHRoIiwiZHJhd1lBeGlzIiwiX2NhbFlBeGlzRGF0YTQiLCJkcmF3TGVnZW5kIiwiX2NhbExlZ2VuZERhdGEiLCJpdGVtTGlzdCIsImxpc3RJbmRleCIsImxlZ2VuZFRleHRDb2xvciIsImRyYXdQaWVEYXRhUG9pbnRzIiwicGllT3B0aW9uIiwicGllIiwiX3BpZVRleHRNYXhMZW5ndGhfIiwiYWN0aXZlUmFkaXVzIiwib2Zmc2V0QW5nbGUiLCJhY3RpdmVPcGFjaXR5IiwiZGlzYWJsZVBpZVN0cm9rZSIsImlubmVyUGllV2lkdGgiLCJyaW5nV2lkdGgiLCJ2YWxpZCIsImRyYXdBcmNiYXJEYXRhUG9pbnRzIiwiYXJjYmFyIiwiYmFja2dyb3VuZENvbG9yIiwiZHJhd0dhdWdlRGF0YVBvaW50cyIsImdhdWdlIiwiaW5uZXJSYWRpdXMiLCJlYWNoQ2F0ZWdvcmllcyIsImZpeFJhZGl1cyIsImNoaWxkTnVtYmVyIiwiY2hpbGRXaWR0aCIsImNoaWxkQW5nbGUiLCJjaGlsZGVuZFgiLCJkcmF3UmFkYXJEYXRhUG9pbnRzIiwiY29vcmRpbmF0ZUFuZ2xlIiwiX2xvb3AiLCJzdGFydFBvcyIsInJhZGFyRGF0YVBvaW50cyIsImRyYXdDYW52YXMiLCJkcmF3IiwiVGltaW5nIiwiZWFzZUluIiwiZWFzZU91dCIsImVhc2VJbk91dCIsImxpbmVhciIsIkFuaW1hdGlvbiIsImlzU3RvcCIsImR1cmF0aW9uIiwidGltaW5nIiwiZGVsYXkiLCJjcmVhdGVBbmltYXRpb25GcmFtZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFRpbWVvdXQiLCJzdGVwIiwidGltZVN0YW1wIiwiRGF0ZSIsImFuaW1hdGlvbkZyYW1lIiwic3RhcnRUaW1lU3RhbXAiLCJfc3RlcCIsInRpbWVzdGFtcCIsIm9uUHJvY2VzcyIsIm9uQW5pbWF0aW9uRmluaXNoIiwidGltaW5nRnVuY3Rpb24iLCJiaW5kIiwic3RvcCIsImRyYXdDaGFydHMiLCJfdGhpcyIsIl9jYWxDYXRlZ29yaWVzRGF0YSIsImFuaW1hdGlvbiIsImFuaW1hdGlvbkluc3RhbmNlIiwiY2xlYXJSZWN0IiwiX2RyYXdMaW5lRGF0YVBvaW50cyIsImV2ZW50IiwidHJpZ2dlciIsIl9kcmF3TWl4RGF0YVBvaW50cyIsIl9kcmF3Q29sdW1uRGF0YVBvaW50cyIsIl9kcmF3QXJlYURhdGFQb2ludHMiLCJhcmNiYXJEYXRhIiwiZ2F1Z2VEYXRhIiwiX2RyYXdDYW5kbGVEYXRhUG9pbnRzIiwiRXZlbnQiLCJldmVudHMiLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuZXIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJwYXJhbXMiLCJzbGljZSIsImNvbnNvbGUiLCJlcnJvciIsIkNoYXJ0cyIsInNjcm9sbEFsaWduIiwiY29uZmlnJCQxIiwibGFibGVXaWR0aCIsInRlbXBXaWR0aCIsInRlbXBIZWlnaHQiLCIkdGhpcyIsInVuaSIsImNyZWF0ZUNhbnZhc0NvbnRleHQiLCJjYW52YXNJZCIsInNjcm9sbE9wdGlvbiIsImN1cnJlbnRPZmZzZXQiLCJzdGFydFRvdWNoWCIsIm9mZnNldExlZnQiLCJfZ2V0WEF4aXNQb2ludHMwIiwidG90YWxXaWR0aCIsInNjcmVlbldpZHRoIiwidXBkYXRlRGF0YSIsInpvb20iLCJ2YWwiLCJsb2ciLCJzdG9wQW5pbWF0aW9uIiwiZ2V0Q3VycmVudERhdGFJbmRleCIsImNoYW5nZWRUb3VjaGVzIiwiX3RvdWNoZXMkIiwic2hvd1Rvb2xUaXAiLCJfZ2V0VG9vbFRpcERhdGEiLCJzY3JvbGxTdGFydCIsInNjcm9sbCIsIl9kaXN0YW5jZSIsInNjcm9sbEVuZCIsIl9zY3JvbGxPcHRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5Q2E7O0FBRWIsSUFBSUEsTUFBTSxHQUFHO0FBQ1RDLFlBQVUsRUFBRSxFQURIO0FBRVRDLFlBQVUsRUFBRSxDQUZILEVBRUs7QUFDZEMsYUFBVyxFQUFFLEVBSEo7QUFJVEMsaUJBQWUsRUFBRSxFQUpSO0FBS1RDLGNBQVksRUFBRSxFQUxMO0FBTVRDLGlCQUFlLEVBQUUsRUFOUjtBQU9UQyxTQUFPLEVBQUUsRUFQQTtBQVFaQyxZQUFVLEVBQUMsQ0FSQyxFQVFDO0FBQ2JDLFFBQU0sRUFBQyxLQVRLLEVBU0M7QUFDVkMsZUFBYSxFQUFFLENBVk47QUFXVEMsVUFBUSxFQUFFLEVBWEQ7QUFZVDtBQUNIQyxnQkFBYyxFQUFFLENBQUMsUUFBRCxFQUFXLFFBQVgsRUFBcUIsUUFBckIsRUFBK0IsUUFBL0IsQ0FiSixFQWE2QztBQUN0REMsUUFBTSxFQUFFLENBQUMsU0FBRCxFQUFZLFNBQVosRUFBdUIsU0FBdkIsRUFBa0MsU0FBbEMsRUFBNkMsU0FBN0MsRUFBd0QsU0FBeEQsQ0FkQztBQWVUQyxxQkFBbUIsRUFBRSxFQWZaO0FBZ0JUQyxxQkFBbUIsRUFBRSxDQWhCWjtBQWlCVEMsa0JBQWdCLEVBQUUsQ0FqQlQ7QUFrQlRDLFlBQVUsRUFBRSxTQWxCSDtBQW1CVEMsZUFBYSxFQUFFLEVBbkJOO0FBb0JUQyxlQUFhLEVBQUUsU0FwQk47QUFxQlRDLGtCQUFnQixFQUFFLEVBckJUO0FBc0JUQyxnQkFBYyxFQUFFLENBdEJQO0FBdUJUQyxtQkFBaUIsRUFBRSxTQXZCVjtBQXdCVEMsZ0JBQWMsRUFBRSxHQXhCUDtBQXlCVEMsbUJBQWlCLEVBQUUsRUF6QlY7QUEwQlRDLGdCQUFjLEVBQUUsQ0ExQlA7QUEyQlRDLHNCQUFvQixFQUFFLEVBM0JiO0FBNEJaQyxzQkFBb0IsRUFBQyxFQTVCVCxFQUFiOzs7QUErQkE7QUFDQTtBQUNBLFNBQVNDLE1BQVQsQ0FBZ0JDLE1BQWhCLEVBQXdCQyxPQUF4QixFQUFpQztBQUM3QixNQUFJRCxNQUFNLElBQUksSUFBZCxFQUFvQjtBQUNoQjtBQUNBLFVBQU0sSUFBSUUsU0FBSixDQUFjLDRDQUFkLENBQU47QUFDSDs7QUFFRCxNQUFJQyxFQUFFLEdBQUdDLE1BQU0sQ0FBQ0osTUFBRCxDQUFmOztBQUVBLE9BQUssSUFBSUssS0FBSyxHQUFHLENBQWpCLEVBQW9CQSxLQUFLLEdBQUdDLFNBQVMsQ0FBQ0MsTUFBdEMsRUFBOENGLEtBQUssRUFBbkQsRUFBdUQ7QUFDbkQsUUFBSUcsVUFBVSxHQUFHRixTQUFTLENBQUNELEtBQUQsQ0FBMUI7O0FBRUEsUUFBSUcsVUFBVSxJQUFJLElBQWxCLEVBQXdCO0FBQ3BCO0FBQ0EsV0FBSyxJQUFJQyxPQUFULElBQW9CRCxVQUFwQixFQUFnQztBQUM1QjtBQUNBLFlBQUlKLE1BQU0sQ0FBQ00sU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDSixVQUFyQyxFQUFpREMsT0FBakQsQ0FBSixFQUErRDtBQUMzRE4sWUFBRSxDQUFDTSxPQUFELENBQUYsR0FBY0QsVUFBVSxDQUFDQyxPQUFELENBQXhCO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7QUFDRCxTQUFPTixFQUFQO0FBQ0g7O0FBRUQsSUFBSVUsSUFBSSxHQUFHO0FBQ1BDLFNBQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCQyxHQUFqQixFQUFzQkMsS0FBdEIsRUFBNkI7QUFDbENBLFNBQUssR0FBR0EsS0FBSyxJQUFJLENBQWpCO0FBQ0EsUUFBSSxLQUFLQyxPQUFMLENBQWFGLEdBQWIsQ0FBSixFQUF1QjtBQUNuQkEsU0FBRyxHQUFHQSxHQUFHLENBQUNELE9BQUosQ0FBWUUsS0FBWixDQUFOO0FBQ0g7QUFDRCxXQUFPRCxHQUFQO0FBQ0gsR0FQTTtBQVFQRSxTQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQkYsR0FBakIsRUFBc0I7QUFDM0IsV0FBT0EsR0FBRyxHQUFHLENBQU4sS0FBWSxDQUFuQjtBQUNILEdBVk07QUFXUEcsb0JBQWtCLEVBQUUsU0FBU0Esa0JBQVQsQ0FBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3QztBQUN4RCxXQUFPQyxJQUFJLENBQUNDLEdBQUwsQ0FBU0gsSUFBSSxHQUFHQyxJQUFoQixJQUF3QixLQUEvQjtBQUNILEdBYk07QUFjUEcsWUFBVSxFQUFFLFNBQVNBLFVBQVQsQ0FBb0JKLElBQXBCLEVBQTBCQyxJQUExQixFQUFnQztBQUN4QyxXQUFPQyxJQUFJLENBQUNDLEdBQUwsQ0FBU0gsSUFBVCxNQUFtQkEsSUFBbkIsSUFBMkJFLElBQUksQ0FBQ0MsR0FBTCxDQUFTRixJQUFULE1BQW1CQSxJQUE5QyxJQUFzREMsSUFBSSxDQUFDQyxHQUFMLENBQVNILElBQVQsTUFBbUJBLElBQW5CLElBQTJCRSxJQUFJLENBQUNDLEdBQUwsQ0FBU0YsSUFBVCxNQUFtQkEsSUFBM0c7QUFDSCxHQWhCTTtBQWlCUEksdUJBQXFCLEVBQUUsU0FBU0EscUJBQVQsQ0FBK0JDLEVBQS9CLEVBQW1DQyxFQUFuQyxFQUF1QztBQUMxRCxXQUFPLEtBQUtILFVBQUwsQ0FBZ0JFLEVBQUUsQ0FBQ0UsQ0FBbkIsRUFBc0JELEVBQUUsQ0FBQ0MsQ0FBekIsQ0FBUDtBQUNILEdBbkJNO0FBb0JQQyxhQUFXLEVBQUUsU0FBU0EsV0FBVCxDQUFxQkMsSUFBckIsRUFBMkJDLElBQTNCLEVBQWlDO0FBQzFDRCxRQUFJLENBQUNFLEdBQUwsR0FBVyxFQUFYO0FBQ0FGLFFBQUksQ0FBQ0UsR0FBTCxDQUFTSixDQUFULEdBQWFFLElBQUksQ0FBQ0csS0FBTCxDQUFXTCxDQUFYLEdBQWVFLElBQUksQ0FBQ0ksS0FBakM7QUFDQUosUUFBSSxDQUFDRSxHQUFMLENBQVNHLENBQVQsR0FBYUwsSUFBSSxDQUFDRyxLQUFMLENBQVdFLENBQVgsR0FBZUwsSUFBSSxDQUFDTSxNQUFqQztBQUNBTCxRQUFJLENBQUNDLEdBQUwsR0FBVyxFQUFYO0FBQ0FELFFBQUksQ0FBQ0MsR0FBTCxDQUFTSixDQUFULEdBQWFHLElBQUksQ0FBQ0UsS0FBTCxDQUFXTCxDQUFYLEdBQWVHLElBQUksQ0FBQ0csS0FBakM7QUFDQUgsUUFBSSxDQUFDQyxHQUFMLENBQVNHLENBQVQsR0FBYUosSUFBSSxDQUFDRSxLQUFMLENBQVdFLENBQVgsR0FBZUosSUFBSSxDQUFDSyxNQUFqQztBQUNBLFFBQUlDLElBQUksR0FBR04sSUFBSSxDQUFDRSxLQUFMLENBQVdMLENBQVgsR0FBZUUsSUFBSSxDQUFDRSxHQUFMLENBQVNKLENBQXhCLElBQTZCRyxJQUFJLENBQUNDLEdBQUwsQ0FBU0osQ0FBVCxHQUFhRSxJQUFJLENBQUNHLEtBQUwsQ0FBV0wsQ0FBckQsSUFBMERHLElBQUksQ0FBQ0MsR0FBTCxDQUFTRyxDQUFULEdBQWFMLElBQUksQ0FBQ0csS0FBTCxDQUFXRSxDQUFsRixJQUF1RkosSUFBSSxDQUFDRSxLQUFMLENBQVdFLENBQVgsR0FBZUwsSUFBSSxDQUFDRSxHQUFMLENBQVNHLENBQTFIOztBQUVBLFdBQU8sQ0FBQ0UsSUFBUjtBQUNILEdBOUJNLEVBQVg7OztBQWlDQTtBQUNBLFNBQVNDLFFBQVQsQ0FBa0JDLFFBQWxCLEVBQTRCQyxHQUE1QixFQUFpQztBQUM3QixNQUFJQyxHQUFHLEdBQUcsa0NBQVY7QUFDQSxNQUFJQyxHQUFHLEdBQUdILFFBQVEsQ0FBQ0ksT0FBVCxDQUFpQkYsR0FBakIsRUFBc0IsVUFBVUcsQ0FBVixFQUFhQyxDQUFiLEVBQWdCQyxDQUFoQixFQUFtQkMsQ0FBbkIsRUFBc0I7QUFDbEQsV0FBT0YsQ0FBQyxHQUFHQSxDQUFKLEdBQVFDLENBQVIsR0FBWUEsQ0FBWixHQUFnQkMsQ0FBaEIsR0FBb0JBLENBQTNCO0FBQ0gsR0FGUyxDQUFWO0FBR0EsTUFBSUMsR0FBRyxHQUFHLDRDQUE0Q0MsSUFBNUMsQ0FBaURQLEdBQWpELENBQVY7QUFDQSxNQUFJRyxDQUFDLEdBQUdLLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDLENBQUQsQ0FBSixFQUFTLEVBQVQsQ0FBaEI7QUFDQSxNQUFJRixDQUFDLEdBQUdJLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDLENBQUQsQ0FBSixFQUFTLEVBQVQsQ0FBaEI7QUFDQSxNQUFJRCxDQUFDLEdBQUdHLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDLENBQUQsQ0FBSixFQUFTLEVBQVQsQ0FBaEI7QUFDQSxTQUFPLFVBQVVILENBQVYsR0FBYyxHQUFkLEdBQW9CQyxDQUFwQixHQUF3QixHQUF4QixHQUE4QkMsQ0FBOUIsR0FBa0MsR0FBbEMsR0FBd0NQLEdBQXhDLEdBQThDLEdBQXJEO0FBQ0g7O0FBRUQsU0FBU1csU0FBVCxDQUFtQm5DLEdBQW5CLEVBQXdCb0MsSUFBeEIsRUFBOEJuQyxLQUE5QixFQUFxQztBQUNqQyxNQUFJb0MsS0FBSyxDQUFDckMsR0FBRCxDQUFULEVBQWdCO0FBQ1osVUFBTSxJQUFJc0MsS0FBSixDQUFVLGlDQUFWLENBQU47QUFDSDtBQUNEckMsT0FBSyxHQUFHQSxLQUFLLElBQUksRUFBakI7QUFDQW1DLE1BQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFILEdBQVUsT0FBckI7QUFDQSxNQUFJRyxRQUFRLEdBQUcsQ0FBZjtBQUNBLFNBQU90QyxLQUFLLEdBQUcsQ0FBZixFQUFrQjtBQUNkQSxTQUFLLElBQUksRUFBVDtBQUNBc0MsWUFBUSxJQUFJLEVBQVo7QUFDSDtBQUNELE1BQUlILElBQUksS0FBSyxPQUFiLEVBQXNCO0FBQ2xCcEMsT0FBRyxHQUFHTSxJQUFJLENBQUNrQyxJQUFMLENBQVV4QyxHQUFHLEdBQUd1QyxRQUFoQixDQUFOO0FBQ0gsR0FGRCxNQUVPO0FBQ0h2QyxPQUFHLEdBQUdNLElBQUksQ0FBQ21DLEtBQUwsQ0FBV3pDLEdBQUcsR0FBR3VDLFFBQWpCLENBQU47QUFDSDtBQUNELFNBQU92QyxHQUFHLEdBQUdDLEtBQU4sS0FBZ0IsQ0FBdkIsRUFBMEI7QUFDdEIsUUFBSW1DLElBQUksS0FBSyxPQUFiLEVBQXNCO0FBQ2xCcEMsU0FBRztBQUNOLEtBRkQsTUFFTztBQUNIQSxTQUFHO0FBQ047QUFDSjs7QUFFRCxTQUFPQSxHQUFHLEdBQUd1QyxRQUFiO0FBQ0g7O0FBRUQsU0FBU0csZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DQyxTQUFwQyxFQUErQ3hGLE1BQS9DLEVBQXVEeUYsSUFBdkQsRUFBNkQ7O0FBRXpELE1BQUlDLGtCQUFrQixHQUFHRCxJQUFJLENBQUMzQixLQUFMLEdBQWE5RCxNQUFNLENBQUNPLE9BQXBCLEdBQThCaUYsU0FBUyxDQUFDRyxXQUFWLENBQXNCLENBQXRCLENBQXZEO0FBQ0EsTUFBSUMsY0FBYyxHQUFHSixTQUFTLENBQUNLLFdBQVYsR0FBd0JKLElBQUksQ0FBQ0ssVUFBTCxDQUFnQjFELE1BQTdEO0FBQ0EsTUFBSTJELGFBQWEsR0FBR1IsUUFBcEI7QUFDQSxNQUFJQSxRQUFRLElBQUksQ0FBaEIsRUFBbUI7QUFDZlEsaUJBQWEsR0FBRyxDQUFoQjtBQUNILEdBRkQsTUFFTyxJQUFJN0MsSUFBSSxDQUFDQyxHQUFMLENBQVNvQyxRQUFULEtBQXNCSyxjQUFjLEdBQUdGLGtCQUEzQyxFQUErRDtBQUNsRUssaUJBQWEsR0FBR0wsa0JBQWtCLEdBQUdFLGNBQXJDO0FBQ0g7QUFDRCxTQUFPRyxhQUFQO0FBQ0g7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsS0FBeEIsRUFBK0JDLFVBQS9CLEVBQTJDQyxRQUEzQyxFQUFxRDtBQUNqRCxXQUFTQyxNQUFULENBQWdCSCxLQUFoQixFQUF1QjtBQUNuQixXQUFPQSxLQUFLLEdBQUcsQ0FBZixFQUFrQjtBQUNkQSxXQUFLLElBQUksSUFBSS9DLElBQUksQ0FBQ21ELEVBQWxCO0FBQ0g7QUFDRCxXQUFPSixLQUFLLEdBQUcsSUFBSS9DLElBQUksQ0FBQ21ELEVBQXhCLEVBQTRCO0FBQ3hCSixXQUFLLElBQUksSUFBSS9DLElBQUksQ0FBQ21ELEVBQWxCO0FBQ0g7O0FBRUQsV0FBT0osS0FBUDtBQUNIOztBQUVEQSxPQUFLLEdBQUdHLE1BQU0sQ0FBQ0gsS0FBRCxDQUFkO0FBQ0FDLFlBQVUsR0FBR0UsTUFBTSxDQUFDRixVQUFELENBQW5CO0FBQ0FDLFVBQVEsR0FBR0MsTUFBTSxDQUFDRCxRQUFELENBQWpCO0FBQ0EsTUFBSUQsVUFBVSxHQUFHQyxRQUFqQixFQUEyQjtBQUN2QkEsWUFBUSxJQUFJLElBQUlqRCxJQUFJLENBQUNtRCxFQUFyQjtBQUNBLFFBQUlKLEtBQUssR0FBR0MsVUFBWixFQUF3QjtBQUNwQkQsV0FBSyxJQUFJLElBQUkvQyxJQUFJLENBQUNtRCxFQUFsQjtBQUNIO0FBQ0o7O0FBRUQsU0FBT0osS0FBSyxJQUFJQyxVQUFULElBQXVCRCxLQUFLLElBQUlFLFFBQXZDO0FBQ0g7O0FBRUQsU0FBU0csa0JBQVQsQ0FBNEI5QyxDQUE1QixFQUErQk8sQ0FBL0IsRUFBa0N3QyxDQUFsQyxFQUFxQztBQUNqQyxNQUFJQyxFQUFFLEdBQUdoRCxDQUFUO0FBQ0EsTUFBSWlELEVBQUUsR0FBR0YsQ0FBQyxHQUFHeEMsQ0FBYjs7QUFFQSxNQUFJMkMsTUFBTSxHQUFHRixFQUFFLEdBQUcsQ0FBQ0QsQ0FBQyxHQUFHRSxFQUFKLEdBQVNELEVBQVYsSUFBZ0J0RCxJQUFJLENBQUN5RCxJQUFMLENBQVUsQ0FBVixDQUFsQztBQUNBRCxRQUFNLElBQUksQ0FBQyxDQUFYOztBQUVBLE1BQUlFLE1BQU0sR0FBRyxDQUFDTCxDQUFDLEdBQUdFLEVBQUwsS0FBWXZELElBQUksQ0FBQ3lELElBQUwsQ0FBVSxDQUFWLElBQWUsQ0FBM0IsSUFBZ0MsQ0FBQ0osQ0FBQyxHQUFHRSxFQUFKLEdBQVNELEVBQVYsSUFBZ0J0RCxJQUFJLENBQUN5RCxJQUFMLENBQVUsQ0FBVixDQUE3RDs7QUFFQSxTQUFPO0FBQ0hELFVBQU0sRUFBRUEsTUFETDtBQUVIRSxVQUFNLEVBQUVBLE1BRkwsRUFBUDs7QUFJSDs7QUFFRCxTQUFTQyx3QkFBVCxDQUFrQ0MsTUFBbEMsRUFBMENDLENBQTFDLEVBQTZDOztBQUV6QyxXQUFTQyxnQkFBVCxDQUEwQkYsTUFBMUIsRUFBa0NDLENBQWxDLEVBQXFDO0FBQ2pDLFFBQUlELE1BQU0sQ0FBQ0MsQ0FBQyxHQUFHLENBQUwsQ0FBTixJQUFpQkQsTUFBTSxDQUFDQyxDQUFDLEdBQUcsQ0FBTCxDQUEzQixFQUFvQztBQUNoQyxhQUFPRCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVaEQsQ0FBVixJQUFlYixJQUFJLENBQUMrRCxHQUFMLENBQVNILE1BQU0sQ0FBQ0MsQ0FBQyxHQUFHLENBQUwsQ0FBTixDQUFjaEQsQ0FBdkIsRUFBMEIrQyxNQUFNLENBQUNDLENBQUMsR0FBRyxDQUFMLENBQU4sQ0FBY2hELENBQXhDLENBQWYsSUFBNkQrQyxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVaEQsQ0FBVixJQUFlYixJQUFJLENBQUNnRSxHQUFMLENBQVNKLE1BQU0sQ0FBQ0MsQ0FBQyxHQUFHLENBQUwsQ0FBTixDQUFjaEQsQ0FBdkIsRUFBMEIrQyxNQUFNLENBQUNDLENBQUMsR0FBRyxDQUFMLENBQU4sQ0FBY2hELENBQXhDLENBQW5GO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsYUFBTyxLQUFQO0FBQ0g7QUFDSjs7QUFFRCxNQUFJb0QsQ0FBQyxHQUFHLEdBQVI7QUFDQSxNQUFJeEMsQ0FBQyxHQUFHLEdBQVI7QUFDQSxNQUFJeUMsR0FBRyxHQUFHLElBQVY7QUFDQSxNQUFJQyxHQUFHLEdBQUcsSUFBVjtBQUNBLE1BQUlDLEdBQUcsR0FBRyxJQUFWO0FBQ0EsTUFBSUMsR0FBRyxHQUFHLElBQVY7QUFDQSxNQUFJUixDQUFDLEdBQUcsQ0FBUixFQUFXO0FBQ1BLLE9BQUcsR0FBR04sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBVixHQUFjLENBQUNzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUFWLEdBQWNzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixJQUE4QjJELENBQWxEO0FBQ0FFLE9BQUcsR0FBR1AsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBVixHQUFjLENBQUMrQyxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUFWLEdBQWMrQyxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF6QixJQUE4Qm9ELENBQWxEO0FBQ0gsR0FIRCxNQUdPO0FBQ0hDLE9BQUcsR0FBR04sTUFBTSxDQUFDQyxDQUFELENBQU4sQ0FBVXZELENBQVYsR0FBYyxDQUFDc0QsTUFBTSxDQUFDQyxDQUFDLEdBQUcsQ0FBTCxDQUFOLENBQWN2RCxDQUFkLEdBQWtCc0QsTUFBTSxDQUFDQyxDQUFDLEdBQUcsQ0FBTCxDQUFOLENBQWN2RCxDQUFqQyxJQUFzQzJELENBQTFEO0FBQ0FFLE9BQUcsR0FBR1AsTUFBTSxDQUFDQyxDQUFELENBQU4sQ0FBVWhELENBQVYsR0FBYyxDQUFDK0MsTUFBTSxDQUFDQyxDQUFDLEdBQUcsQ0FBTCxDQUFOLENBQWNoRCxDQUFkLEdBQWtCK0MsTUFBTSxDQUFDQyxDQUFDLEdBQUcsQ0FBTCxDQUFOLENBQWNoRCxDQUFqQyxJQUFzQ29ELENBQTFEO0FBQ0g7O0FBRUQsTUFBSUosQ0FBQyxHQUFHRCxNQUFNLENBQUMxRSxNQUFQLEdBQWdCLENBQXhCLEVBQTJCO0FBQ3ZCLFFBQUlvRixJQUFJLEdBQUdWLE1BQU0sQ0FBQzFFLE1BQVAsR0FBZ0IsQ0FBM0I7QUFDQWtGLE9BQUcsR0FBR1IsTUFBTSxDQUFDVSxJQUFELENBQU4sQ0FBYWhFLENBQWIsR0FBaUIsQ0FBQ3NELE1BQU0sQ0FBQ1UsSUFBRCxDQUFOLENBQWFoRSxDQUFiLEdBQWlCc0QsTUFBTSxDQUFDVSxJQUFJLEdBQUcsQ0FBUixDQUFOLENBQWlCaEUsQ0FBbkMsSUFBd0NtQixDQUEvRDtBQUNBNEMsT0FBRyxHQUFHVCxNQUFNLENBQUNVLElBQUQsQ0FBTixDQUFhekQsQ0FBYixHQUFpQixDQUFDK0MsTUFBTSxDQUFDVSxJQUFELENBQU4sQ0FBYXpELENBQWIsR0FBaUIrQyxNQUFNLENBQUNVLElBQUksR0FBRyxDQUFSLENBQU4sQ0FBaUJ6RCxDQUFuQyxJQUF3Q1ksQ0FBL0Q7QUFDSCxHQUpELE1BSU87QUFDSDJDLE9BQUcsR0FBR1IsTUFBTSxDQUFDQyxDQUFDLEdBQUcsQ0FBTCxDQUFOLENBQWN2RCxDQUFkLEdBQWtCLENBQUNzRCxNQUFNLENBQUNDLENBQUMsR0FBRyxDQUFMLENBQU4sQ0FBY3ZELENBQWQsR0FBa0JzRCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVdkQsQ0FBN0IsSUFBa0NtQixDQUExRDtBQUNBNEMsT0FBRyxHQUFHVCxNQUFNLENBQUNDLENBQUMsR0FBRyxDQUFMLENBQU4sQ0FBY2hELENBQWQsR0FBa0IsQ0FBQytDLE1BQU0sQ0FBQ0MsQ0FBQyxHQUFHLENBQUwsQ0FBTixDQUFjaEQsQ0FBZCxHQUFrQitDLE1BQU0sQ0FBQ0MsQ0FBRCxDQUFOLENBQVVoRCxDQUE3QixJQUFrQ1ksQ0FBMUQ7QUFDSDs7QUFFRDtBQUNBLE1BQUlxQyxnQkFBZ0IsQ0FBQ0YsTUFBRCxFQUFTQyxDQUFDLEdBQUcsQ0FBYixDQUFwQixFQUFxQztBQUNqQ1EsT0FBRyxHQUFHVCxNQUFNLENBQUNDLENBQUMsR0FBRyxDQUFMLENBQU4sQ0FBY2hELENBQXBCO0FBQ0g7QUFDRCxNQUFJaUQsZ0JBQWdCLENBQUNGLE1BQUQsRUFBU0MsQ0FBVCxDQUFwQixFQUFpQztBQUM3Qk0sT0FBRyxHQUFHUCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVaEQsQ0FBaEI7QUFDSDs7QUFFRCxTQUFPO0FBQ0gwRCxRQUFJLEVBQUUsRUFBRWpFLENBQUMsRUFBRTRELEdBQUwsRUFBVXJELENBQUMsRUFBRXNELEdBQWIsRUFESDtBQUVISyxRQUFJLEVBQUUsRUFBRWxFLENBQUMsRUFBRThELEdBQUwsRUFBVXZELENBQUMsRUFBRXdELEdBQWIsRUFGSCxFQUFQOztBQUlIOztBQUVELFNBQVNJLHVCQUFULENBQWlDbkUsQ0FBakMsRUFBb0NPLENBQXBDLEVBQXVDNkQsTUFBdkMsRUFBK0M7QUFDM0MsU0FBTztBQUNIcEUsS0FBQyxFQUFFb0UsTUFBTSxDQUFDcEUsQ0FBUCxHQUFXQSxDQURYO0FBRUhPLEtBQUMsRUFBRTZELE1BQU0sQ0FBQzdELENBQVAsR0FBV0EsQ0FGWCxFQUFQOztBQUlIOztBQUVELFNBQVM4RCxjQUFULENBQXdCQyxHQUF4QixFQUE2QmpHLE1BQTdCLEVBQXFDO0FBQ2pDLE1BQUlBLE1BQUosRUFBWTtBQUNSO0FBQ0EsV0FBT2EsSUFBSSxDQUFDZSxXQUFMLENBQWlCcUUsR0FBakIsRUFBc0JqRyxNQUF0QixDQUFQLEVBQXNDO0FBQ2xDLFVBQUlpRyxHQUFHLENBQUNqRSxLQUFKLENBQVVMLENBQVYsR0FBYyxDQUFsQixFQUFxQjtBQUNqQnNFLFdBQUcsQ0FBQ2pFLEtBQUosQ0FBVUUsQ0FBVjtBQUNILE9BRkQsTUFFTyxJQUFJK0QsR0FBRyxDQUFDakUsS0FBSixDQUFVTCxDQUFWLEdBQWMsQ0FBbEIsRUFBcUI7QUFDeEJzRSxXQUFHLENBQUNqRSxLQUFKLENBQVVFLENBQVY7QUFDSCxPQUZNLE1BRUE7QUFDSCxZQUFJK0QsR0FBRyxDQUFDakUsS0FBSixDQUFVRSxDQUFWLEdBQWMsQ0FBbEIsRUFBcUI7QUFDakIrRCxhQUFHLENBQUNqRSxLQUFKLENBQVVFLENBQVY7QUFDSCxTQUZELE1BRU87QUFDSCtELGFBQUcsQ0FBQ2pFLEtBQUosQ0FBVUUsQ0FBVjtBQUNIO0FBQ0o7QUFDSjtBQUNKO0FBQ0QsU0FBTytELEdBQVA7QUFDSDs7QUFFRCxTQUFTQyxlQUFULENBQXlCQyxNQUF6QixFQUFpQ2hJLE1BQWpDLEVBQXlDO0FBQ3JDLE1BQUlrQyxLQUFLLEdBQUcsQ0FBWjtBQUNBLFNBQU84RixNQUFNLENBQUNDLEdBQVAsQ0FBVyxVQUFVQyxJQUFWLEVBQWdCO0FBQzlCLFFBQUksQ0FBQ0EsSUFBSSxDQUFDQyxLQUFWLEVBQWlCO0FBQ2JELFVBQUksQ0FBQ0MsS0FBTCxHQUFhbkksTUFBTSxDQUFDYSxNQUFQLENBQWNxQixLQUFkLENBQWI7QUFDQUEsV0FBSyxHQUFHLENBQUNBLEtBQUssR0FBRyxDQUFULElBQWNsQyxNQUFNLENBQUNhLE1BQVAsQ0FBY3VCLE1BQXBDO0FBQ0g7QUFDRCxXQUFPOEYsSUFBUDtBQUNILEdBTk0sQ0FBUDtBQU9IOztBQUVELFNBQVNFLGNBQVQsQ0FBd0JKLE1BQXhCLEVBQWdDdkMsSUFBaEMsRUFBc0M7QUFDbEMsU0FBT3VDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLFVBQVVDLElBQVYsRUFBZ0I7QUFDOUIsUUFBSSxDQUFDQSxJQUFJLENBQUNsRCxJQUFWLEVBQWdCO0FBQ1prRCxVQUFJLENBQUNsRCxJQUFMLEdBQVlTLElBQUksQ0FBQ1QsSUFBakI7QUFDSDtBQUNELFdBQU9rRCxJQUFQO0FBQ0gsR0FMTSxDQUFQO0FBTUg7O0FBRUQsU0FBU0csWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLE9BQS9CLEVBQXdDO0FBQ3BDLE1BQUkxRixLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUkyRixLQUFLLEdBQUdELE9BQU8sR0FBR0QsT0FBdEI7QUFDQSxNQUFJRSxLQUFLLElBQUksS0FBYixFQUFvQjtBQUNoQjNGLFNBQUssR0FBRyxJQUFSO0FBQ0gsR0FGRCxNQUVPLElBQUkyRixLQUFLLElBQUksSUFBYixFQUFtQjtBQUN0QjNGLFNBQUssR0FBRyxHQUFSO0FBQ0gsR0FGTSxNQUVBLElBQUkyRixLQUFLLElBQUksR0FBYixFQUFrQjtBQUNyQjNGLFNBQUssR0FBRyxFQUFSO0FBQ0gsR0FGTSxNQUVBLElBQUkyRixLQUFLLElBQUksRUFBYixFQUFpQjtBQUNwQjNGLFNBQUssR0FBRyxDQUFSO0FBQ0gsR0FGTSxNQUVBLElBQUkyRixLQUFLLElBQUksQ0FBYixFQUFnQjtBQUNuQjNGLFNBQUssR0FBRyxDQUFSO0FBQ0gsR0FGTSxNQUVBLElBQUkyRixLQUFLLElBQUksR0FBYixFQUFrQjtBQUNyQjNGLFNBQUssR0FBRyxHQUFSO0FBQ0gsR0FGTSxNQUVBO0FBQ0hBLFNBQUssR0FBRyxJQUFSO0FBQ0g7QUFDRCxTQUFPO0FBQ0g0RixZQUFRLEVBQUUxRCxTQUFTLENBQUN1RCxPQUFELEVBQVUsT0FBVixFQUFtQnpGLEtBQW5CLENBRGhCO0FBRUg2RixZQUFRLEVBQUUzRCxTQUFTLENBQUN3RCxPQUFELEVBQVUsT0FBVixFQUFtQjFGLEtBQW5CLENBRmhCLEVBQVA7O0FBSUg7O0FBRUQsU0FBUzhGLFdBQVQsQ0FBcUJDLElBQXJCLEVBQTJCO0FBQ3ZCLE1BQUlqSSxRQUFRLEdBQUd3QixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FbkMsTUFBTSxDQUFDVyxRQUExRjs7QUFFQTtBQUNIO0FBQ0dpSSxNQUFJLEdBQUdFLE1BQU0sQ0FBQ0YsSUFBRCxDQUFiO0FBQ0EsTUFBSUEsSUFBSSxHQUFHQSxJQUFJLENBQUNHLEtBQUwsQ0FBVyxFQUFYLENBQVg7QUFDQSxNQUFJakYsS0FBSyxHQUFHLENBQVo7QUFDQThFLE1BQUksQ0FBQ0ksT0FBTCxDQUFhLFVBQVVkLElBQVYsRUFBZ0I7QUFDekIsUUFBSSxXQUFXZSxJQUFYLENBQWdCZixJQUFoQixDQUFKLEVBQTJCO0FBQ3ZCcEUsV0FBSyxJQUFJLENBQVQ7QUFDSCxLQUZELE1BRU8sSUFBSSxRQUFRbUYsSUFBUixDQUFhZixJQUFiLENBQUosRUFBd0I7QUFDM0JwRSxXQUFLLElBQUksR0FBVDtBQUNILEtBRk0sTUFFQSxJQUFJLEtBQUttRixJQUFMLENBQVVmLElBQVYsQ0FBSixFQUFxQjtBQUN4QnBFLFdBQUssSUFBSSxHQUFUO0FBQ0gsS0FGTSxNQUVBLElBQUksSUFBSW1GLElBQUosQ0FBU2YsSUFBVCxDQUFKLEVBQW9CO0FBQ3ZCcEUsV0FBSyxJQUFJLElBQVQ7QUFDSCxLQUZNLE1BRUEsSUFBSSxrQkFBa0JtRixJQUFsQixDQUF1QmYsSUFBdkIsQ0FBSixFQUFrQztBQUNyQ3BFLFdBQUssSUFBSSxFQUFUO0FBQ0gsS0FGTSxNQUVBLElBQUksUUFBUW1GLElBQVIsQ0FBYWYsSUFBYixDQUFKLEVBQXdCO0FBQzNCcEUsV0FBSyxJQUFJLElBQVQ7QUFDSCxLQUZNLE1BRUEsSUFBSSxLQUFLbUYsSUFBTCxDQUFVZixJQUFWLENBQUosRUFBcUI7QUFDeEJwRSxXQUFLLElBQUksR0FBVDtBQUNILEtBRk0sTUFFQSxJQUFJLElBQUltRixJQUFKLENBQVNmLElBQVQsQ0FBSixFQUFvQjtBQUN2QnBFLFdBQUssSUFBSSxDQUFUO0FBQ0gsS0FGTSxNQUVBO0FBQ0hBLFdBQUssSUFBSSxFQUFUO0FBQ0g7QUFDSixHQXBCRDtBQXFCQSxTQUFPQSxLQUFLLEdBQUduRCxRQUFSLEdBQW1CLEVBQTFCO0FBQ0g7O0FBRUQsU0FBU3VJLFdBQVQsQ0FBcUJsQixNQUFyQixFQUE2QjtBQUN6QixTQUFPQSxNQUFNLENBQUNtQixNQUFQLENBQWMsVUFBVWhDLENBQVYsRUFBYXhDLENBQWIsRUFBZ0I7QUFDakMsV0FBTyxDQUFDd0MsQ0FBQyxDQUFDaUMsSUFBRixHQUFTakMsQ0FBQyxDQUFDaUMsSUFBWCxHQUFrQmpDLENBQW5CLEVBQXNCa0MsTUFBdEIsQ0FBNkIxRSxDQUFDLENBQUN5RSxJQUEvQixDQUFQO0FBQ0gsR0FGTSxFQUVKLEVBRkksQ0FBUDtBQUdIOztBQUVELFNBQVNFLGdCQUFULENBQTBCdEIsTUFBMUIsRUFBa0M7QUFDakMsTUFBSXVCLEdBQUcsR0FBRyxJQUFJQyxLQUFKLENBQVV4QixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVVvQixJQUFWLENBQWVoSCxNQUF6QixDQUFWO0FBQ0EsT0FBSSxJQUFJcUgsQ0FBQyxHQUFHLENBQVosRUFBZUEsQ0FBQyxHQUFHRixHQUFHLENBQUNuSCxNQUF2QixFQUErQnFILENBQUMsRUFBaEMsRUFBb0M7QUFDbENGLE9BQUcsQ0FBQ0UsQ0FBRCxDQUFILEdBQVEsQ0FBUjtBQUNEO0FBQ0QsT0FBSSxJQUFJMUMsQ0FBQyxHQUFHLENBQVosRUFBZUEsQ0FBQyxHQUFHaUIsTUFBTSxDQUFDNUYsTUFBMUIsRUFBa0MyRSxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFNBQUksSUFBSTBDLENBQUMsR0FBRyxDQUFaLEVBQWVBLENBQUMsR0FBR0YsR0FBRyxDQUFDbkgsTUFBdkIsRUFBK0JxSCxDQUFDLEVBQWhDLEVBQW9DO0FBQ3JDRixTQUFHLENBQUNFLENBQUQsQ0FBSCxJQUFVekIsTUFBTSxDQUFDakIsQ0FBRCxDQUFOLENBQVVxQyxJQUFWLENBQWVLLENBQWYsQ0FBVjtBQUNFO0FBQ0Y7QUFDRCxTQUFPekIsTUFBTSxDQUFDbUIsTUFBUCxDQUFjLFVBQVVoQyxDQUFWLEVBQWF4QyxDQUFiLEVBQWdCO0FBQ2pDLFdBQU8sQ0FBQ3dDLENBQUMsQ0FBQ2lDLElBQUYsR0FBU2pDLENBQUMsQ0FBQ2lDLElBQVgsR0FBa0JqQyxDQUFuQixFQUFzQmtDLE1BQXRCLENBQTZCMUUsQ0FBQyxDQUFDeUUsSUFBL0IsRUFBcUNDLE1BQXJDLENBQTRDRSxHQUE1QyxDQUFQO0FBQ0gsR0FGTSxFQUVKLEVBRkksQ0FBUDtBQUdBOztBQUVELFNBQVNHLFVBQVQsQ0FBb0JDLE9BQXBCLEVBQTZCbEUsSUFBN0IsRUFBbUNtRSxDQUFuQyxFQUFxQztBQUNwQyxNQUFJcEcsQ0FBSixFQUFNTyxDQUFOO0FBQ0EsTUFBRzRGLE9BQU8sQ0FBQ0UsT0FBWCxFQUFtQjtBQUNsQixRQUFHcEUsSUFBSSxDQUFDaEYsTUFBUixFQUFlLENBQUM7QUFDZnNELE9BQUMsR0FBRzBCLElBQUksQ0FBQ3pCLE1BQUwsR0FBWTJGLE9BQU8sQ0FBQ0UsT0FBUixHQUFnQnBFLElBQUksQ0FBQ2pGLFVBQXJDO0FBQ0FnRCxPQUFDLEdBQUcsQ0FBQ21HLE9BQU8sQ0FBQ0csS0FBUixHQUFjRixDQUFDLENBQUNHLEVBQUYsQ0FBS0MsYUFBTCxDQUFtQkMsU0FBakMsR0FBNEN4RSxJQUFJLENBQUN6QixNQUFMLEdBQVl5QixJQUFJLENBQUNqRixVQUFqQixHQUE0QixDQUE3QixJQUFpQ2lGLElBQUksQ0FBQ2pGLFVBQUwsR0FBZ0IsQ0FBakQsQ0FBNUMsSUFBaUdpRixJQUFJLENBQUNqRixVQUExRztBQUNBLEtBSEQsTUFHSztBQUNKZ0QsT0FBQyxHQUFHbUcsT0FBTyxDQUFDRSxPQUFSLEdBQWdCcEUsSUFBSSxDQUFDakYsVUFBekI7QUFDQXVELE9BQUMsR0FBRyxDQUFDNEYsT0FBTyxDQUFDRyxLQUFSLEdBQWNGLENBQUMsQ0FBQ0csRUFBRixDQUFLQyxhQUFMLENBQW1CQyxTQUFqQyxHQUE0Q3hFLElBQUksQ0FBQ3pCLE1BQUwsR0FBWXlCLElBQUksQ0FBQ2pGLFVBQWpCLEdBQTRCLENBQTdCLElBQWlDaUYsSUFBSSxDQUFDakYsVUFBTCxHQUFnQixDQUFqRCxDQUE1QyxJQUFpR2lGLElBQUksQ0FBQ2pGLFVBQTFHO0FBQ0E7QUFDRCxHQVJELE1BUUs7QUFDSixRQUFHaUYsSUFBSSxDQUFDaEYsTUFBUixFQUFlLENBQUM7QUFDZnNELE9BQUMsR0FBRzBCLElBQUksQ0FBQ3pCLE1BQUwsR0FBWTJGLE9BQU8sQ0FBQ25HLENBQVIsR0FBVWlDLElBQUksQ0FBQ2pGLFVBQS9CO0FBQ0FnRCxPQUFDLEdBQUdtRyxPQUFPLENBQUM1RixDQUFSLEdBQVUwQixJQUFJLENBQUNqRixVQUFuQjtBQUNBLEtBSEQsTUFHSztBQUNKZ0QsT0FBQyxHQUFHbUcsT0FBTyxDQUFDbkcsQ0FBUixHQUFVaUMsSUFBSSxDQUFDakYsVUFBbkI7QUFDQXVELE9BQUMsR0FBRzRGLE9BQU8sQ0FBQzVGLENBQVIsR0FBVTBCLElBQUksQ0FBQ2pGLFVBQW5CO0FBQ0E7QUFDRDtBQUNELFNBQU0sRUFBQ2dELENBQUMsRUFBQ0EsQ0FBSCxFQUFLTyxDQUFDLEVBQUNBLENBQVAsRUFBTjtBQUNBOztBQUVELFNBQVNtRyxpQkFBVCxDQUEyQmxDLE1BQTNCLEVBQW1DOUYsS0FBbkMsRUFBMEM7QUFDdEMsTUFBSWtILElBQUksR0FBRyxFQUFYO0FBQ0FwQixRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQjtBQUMzQixRQUFJQSxJQUFJLENBQUNrQixJQUFMLENBQVVsSCxLQUFWLE1BQXFCLElBQXJCLElBQTZCLE9BQU9nRyxJQUFJLENBQUNrQixJQUFMLENBQVVsSCxLQUFWLENBQVAsS0FBNEIsV0FBN0QsRUFBMEU7QUFDdEUsVUFBSWlJLFVBQVUsR0FBRyxFQUFqQjtBQUNBQSxnQkFBVSxDQUFDaEMsS0FBWCxHQUFtQkQsSUFBSSxDQUFDQyxLQUF4QjtBQUNBZ0MsZ0JBQVUsQ0FBQ0MsSUFBWCxHQUFrQmxDLElBQUksQ0FBQ2tDLElBQXZCO0FBQ0FELGdCQUFVLENBQUNmLElBQVgsR0FBa0JsQixJQUFJLENBQUNtQyxNQUFMLEdBQWNuQyxJQUFJLENBQUNtQyxNQUFMLENBQVluQyxJQUFJLENBQUNrQixJQUFMLENBQVVsSCxLQUFWLENBQVosQ0FBZCxHQUE4Q2dHLElBQUksQ0FBQ2tCLElBQUwsQ0FBVWxILEtBQVYsQ0FBaEU7QUFDQWtILFVBQUksQ0FBQ2tCLElBQUwsQ0FBVUgsVUFBVjtBQUNIO0FBQ0osR0FSRDs7QUFVQSxTQUFPZixJQUFQO0FBQ0g7O0FBRUQsU0FBU21CLG9CQUFULENBQThCQyxJQUE5QixFQUFvQztBQUNoQyxNQUFJQyxVQUFVLEdBQUdELElBQUksQ0FBQ3ZDLEdBQUwsQ0FBUyxVQUFVQyxJQUFWLEVBQWdCO0FBQ3RDLFdBQU9TLFdBQVcsQ0FBQ1QsSUFBRCxDQUFsQjtBQUNILEdBRmdCLENBQWpCO0FBR0EsU0FBT2hGLElBQUksQ0FBQytELEdBQUwsQ0FBU3lELEtBQVQsQ0FBZSxJQUFmLEVBQXFCRCxVQUFyQixDQUFQO0FBQ0g7O0FBRUQsU0FBU0Usd0JBQVQsQ0FBa0N2SSxNQUFsQyxFQUEwQztBQUN0QyxNQUFJd0ksU0FBUyxHQUFHLElBQUkxSCxJQUFJLENBQUNtRCxFQUFULEdBQWNqRSxNQUE5QjtBQUNBLE1BQUl5SSxnQkFBZ0IsR0FBRyxFQUF2QjtBQUNBLE9BQUssSUFBSTlELENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUczRSxNQUFwQixFQUE0QjJFLENBQUMsRUFBN0IsRUFBaUM7QUFDN0I4RCxvQkFBZ0IsQ0FBQ1AsSUFBakIsQ0FBc0JNLFNBQVMsR0FBRzdELENBQWxDO0FBQ0g7O0FBRUQsU0FBTzhELGdCQUFnQixDQUFDNUMsR0FBakIsQ0FBcUIsVUFBVUMsSUFBVixFQUFnQjtBQUN4QyxXQUFPLENBQUMsQ0FBRCxHQUFLQSxJQUFMLEdBQVloRixJQUFJLENBQUNtRCxFQUFMLEdBQVUsQ0FBN0I7QUFDSCxHQUZNLENBQVA7QUFHSDs7QUFFRCxTQUFTeUUsY0FBVCxDQUF3QkMsVUFBeEIsRUFBb0NDLFNBQXBDLEVBQStDOUksS0FBL0MsRUFBc0Q0RCxVQUF0RCxFQUFrRTtBQUM5RCxNQUFJbUYsTUFBTSxHQUFHOUksU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxFQUFqRjs7QUFFQSxNQUFJK0ksUUFBUSxHQUFHSCxVQUFVLENBQUM5QyxHQUFYLENBQWUsVUFBVUMsSUFBVixFQUFnQjtBQUMxQyxXQUFPO0FBQ0hVLFVBQUksRUFBRXFDLE1BQU0sQ0FBQ1osTUFBUCxHQUFnQlksTUFBTSxDQUFDWixNQUFQLENBQWNuQyxJQUFkLEVBQW9CcEMsVUFBVSxDQUFDNUQsS0FBRCxDQUE5QixDQUFoQixHQUF5RGdHLElBQUksQ0FBQ2tDLElBQUwsR0FBWSxJQUFaLEdBQW1CbEMsSUFBSSxDQUFDa0IsSUFEcEY7QUFFSGpCLFdBQUssRUFBRUQsSUFBSSxDQUFDQyxLQUZULEVBQVA7O0FBSUgsR0FMYyxDQUFmO0FBTUEsTUFBSWdELGNBQWMsR0FBRyxFQUFyQjtBQUNBLE1BQUlDLE1BQU0sR0FBRztBQUNUNUgsS0FBQyxFQUFFLENBRE07QUFFVE8sS0FBQyxFQUFFLENBRk0sRUFBYjs7QUFJQWlILFdBQVMsQ0FBQ2hDLE9BQVYsQ0FBa0IsVUFBVWxDLE1BQVYsRUFBa0I7QUFDaEMsUUFBSSxPQUFPQSxNQUFNLENBQUM1RSxLQUFELENBQWIsS0FBeUIsV0FBekIsSUFBd0M0RSxNQUFNLENBQUM1RSxLQUFELENBQU4sS0FBa0IsSUFBOUQsRUFBb0U7QUFDaEVpSixvQkFBYyxDQUFDYixJQUFmLENBQW9CeEQsTUFBTSxDQUFDNUUsS0FBRCxDQUExQjtBQUNIO0FBQ0osR0FKRDtBQUtBaUosZ0JBQWMsQ0FBQ25DLE9BQWYsQ0FBdUIsVUFBVWQsSUFBVixFQUFnQjtBQUNuQ2tELFVBQU0sQ0FBQzVILENBQVAsR0FBV04sSUFBSSxDQUFDbUksS0FBTCxDQUFXbkQsSUFBSSxDQUFDMUUsQ0FBaEIsQ0FBWDtBQUNBNEgsVUFBTSxDQUFDckgsQ0FBUCxJQUFZbUUsSUFBSSxDQUFDbkUsQ0FBakI7QUFDSCxHQUhEOztBQUtBcUgsUUFBTSxDQUFDckgsQ0FBUCxJQUFZb0gsY0FBYyxDQUFDL0ksTUFBM0I7QUFDQSxTQUFPLEVBQUU4SSxRQUFRLEVBQUVBLFFBQVosRUFBc0JFLE1BQU0sRUFBRUEsTUFBOUIsRUFBUDtBQUNIOztBQUVELFNBQVNFLG9CQUFULENBQThCdEQsTUFBOUIsRUFBcUMrQyxVQUFyQyxFQUFpREMsU0FBakQsRUFBNEQ5SSxLQUE1RCxFQUFtRTRELFVBQW5FLEVBQThFeUYsS0FBOUUsRUFBcUY7QUFDakYsTUFBSU4sTUFBTSxHQUFHOUksU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxFQUFqRjtBQUNILE1BQUlxSixPQUFPLEdBQUdELEtBQUssQ0FBQ3BELEtBQU4sQ0FBWXNELE1BQTFCO0FBQ0EsTUFBSUMsU0FBUyxHQUFHSCxLQUFLLENBQUNwRCxLQUFOLENBQVl3RCxRQUE1QjtBQUNBO0FBQ0EsTUFBSXhELEtBQUssR0FBQyxDQUFDcUQsT0FBRCxFQUFTQSxPQUFULEVBQWlCRSxTQUFqQixFQUEyQkYsT0FBM0IsQ0FBVjtBQUNHLE1BQUlOLFFBQVEsR0FBRyxFQUFmO0FBQ0gsTUFBSVUsS0FBSyxHQUFDO0FBQ1RoRCxRQUFJLEVBQUU5QyxVQUFVLENBQUM1RCxLQUFELENBRFA7QUFFVGlHLFNBQUssRUFBRSxJQUZFLEVBQVY7O0FBSUErQyxVQUFRLENBQUNaLElBQVQsQ0FBY3NCLEtBQWQ7QUFDQWIsWUFBVSxDQUFDOUMsR0FBWCxDQUFlLFVBQVVDLElBQVYsRUFBZ0I7QUFDOUI7QUFDQSxRQUFHaEcsS0FBSyxJQUFFLENBQVAsSUFBWWdHLElBQUksQ0FBQ2tCLElBQUwsQ0FBVSxDQUFWLElBQWFsQixJQUFJLENBQUNrQixJQUFMLENBQVUsQ0FBVixDQUFiLEdBQTBCLENBQXpDLEVBQTJDO0FBQzFDakIsV0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFTdUQsU0FBVDtBQUNBLEtBRkQsTUFFSztBQUNKLFVBQUd4RCxJQUFJLENBQUNrQixJQUFMLENBQVUsQ0FBVixJQUFhcEIsTUFBTSxDQUFDOUYsS0FBSyxHQUFDLENBQVAsQ0FBTixDQUFnQixDQUFoQixDQUFoQixFQUFtQztBQUNsQ2lHLGFBQUssQ0FBQyxDQUFELENBQUwsR0FBU3VELFNBQVQ7QUFDQTtBQUNELFVBQUd4RCxJQUFJLENBQUNrQixJQUFMLENBQVUsQ0FBVixJQUFhbEIsSUFBSSxDQUFDa0IsSUFBTCxDQUFVLENBQVYsQ0FBaEIsRUFBNkI7QUFDNUJqQixhQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVN1RCxTQUFUO0FBQ0E7QUFDRCxVQUFHeEQsSUFBSSxDQUFDa0IsSUFBTCxDQUFVLENBQVYsSUFBYXBCLE1BQU0sQ0FBQzlGLEtBQUssR0FBQyxDQUFQLENBQU4sQ0FBZ0IsQ0FBaEIsQ0FBaEIsRUFBbUM7QUFDbENpRyxhQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVNxRCxPQUFUO0FBQ0E7QUFDRCxVQUFHdEQsSUFBSSxDQUFDa0IsSUFBTCxDQUFVLENBQVYsSUFBYXBCLE1BQU0sQ0FBQzlGLEtBQUssR0FBQyxDQUFQLENBQU4sQ0FBZ0IsQ0FBaEIsQ0FBaEIsRUFBbUM7QUFDbENpRyxhQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVN1RCxTQUFUO0FBQ0E7QUFDRDs7QUFFRCxRQUFJRyxLQUFLLEdBQUM7QUFDVGpELFVBQUksRUFBRSxRQUFNVixJQUFJLENBQUNrQixJQUFMLENBQVUsQ0FBVixDQURIO0FBRVRqQixXQUFLLEVBQUVBLEtBQUssQ0FBQyxDQUFELENBRkgsRUFBVjs7QUFJQSxRQUFJMkQsS0FBSyxHQUFDO0FBQ1RsRCxVQUFJLEVBQUUsUUFBTVYsSUFBSSxDQUFDa0IsSUFBTCxDQUFVLENBQVYsQ0FESDtBQUVUakIsV0FBSyxFQUFFQSxLQUFLLENBQUMsQ0FBRCxDQUZILEVBQVY7O0FBSUEsUUFBSTRELEtBQUssR0FBQztBQUNUbkQsVUFBSSxFQUFFLFFBQU1WLElBQUksQ0FBQ2tCLElBQUwsQ0FBVSxDQUFWLENBREg7QUFFVGpCLFdBQUssRUFBRUEsS0FBSyxDQUFDLENBQUQsQ0FGSCxFQUFWOztBQUlBLFFBQUk2RCxLQUFLLEdBQUM7QUFDVHBELFVBQUksRUFBRSxRQUFNVixJQUFJLENBQUNrQixJQUFMLENBQVUsQ0FBVixDQURIO0FBRVRqQixXQUFLLEVBQUVBLEtBQUssQ0FBQyxDQUFELENBRkgsRUFBVjs7QUFJQStDLFlBQVEsQ0FBQ1osSUFBVCxDQUFjdUIsS0FBZCxFQUFvQkMsS0FBcEIsRUFBMEJDLEtBQTFCLEVBQWdDQyxLQUFoQztBQUNHLEdBcENKO0FBcUNHLE1BQUliLGNBQWMsR0FBRyxFQUFyQjtBQUNBLE1BQUlDLE1BQU0sR0FBRztBQUNUNUgsS0FBQyxFQUFFLENBRE07QUFFVE8sS0FBQyxFQUFFLENBRk0sRUFBYjs7QUFJQWlILFdBQVMsQ0FBQ2hDLE9BQVYsQ0FBa0IsVUFBVWxDLE1BQVYsRUFBa0I7QUFDaEMsUUFBSSxPQUFPQSxNQUFNLENBQUM1RSxLQUFELENBQWIsS0FBeUIsV0FBekIsSUFBd0M0RSxNQUFNLENBQUM1RSxLQUFELENBQU4sS0FBa0IsSUFBOUQsRUFBb0U7QUFDaEVpSixvQkFBYyxDQUFDYixJQUFmLENBQW9CeEQsTUFBTSxDQUFDNUUsS0FBRCxDQUExQjtBQUNIO0FBQ0osR0FKRDtBQUtIa0osUUFBTSxDQUFDNUgsQ0FBUCxHQUFTTixJQUFJLENBQUNtSSxLQUFMLENBQVdGLGNBQWMsQ0FBQyxDQUFELENBQWQsQ0FBa0IsQ0FBbEIsRUFBcUIzSCxDQUFoQyxDQUFUO0FBQ0csU0FBTyxFQUFFMEgsUUFBUSxFQUFFQSxRQUFaLEVBQXNCRSxNQUFNLEVBQUVBLE1BQTlCLEVBQVA7QUFDSDs7QUFFRCxTQUFTYSxnQkFBVCxDQUEwQkMsYUFBMUIsRUFBeUN2RyxXQUF6QyxFQUFzREYsSUFBdEQsRUFBNER6RixNQUE1RCxFQUFvRTtBQUNoRSxNQUFJb0wsTUFBTSxHQUFHakosU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxDQUFqRjtBQUNBLE1BQUlnSyxZQUFZLEdBQUcsQ0FBQyxDQUFwQjtBQUNBLE1BQUlDLGtCQUFrQixDQUFDRixhQUFELEVBQWdCekcsSUFBaEIsRUFBc0J6RixNQUF0QixDQUF0QixFQUFxRDtBQUNqRDJGLGVBQVcsQ0FBQ3FELE9BQVosQ0FBb0IsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3ZDLFVBQUlnSyxhQUFhLENBQUMxSSxDQUFkLEdBQWtCNEgsTUFBbEIsR0FBMkJsRCxJQUEvQixFQUFxQztBQUNqQ2lFLG9CQUFZLEdBQUdqSyxLQUFmO0FBQ0g7QUFDSixLQUpEO0FBS0g7O0FBRUQsU0FBT2lLLFlBQVA7QUFDSDs7QUFFRCxTQUFTQyxrQkFBVCxDQUE0QkYsYUFBNUIsRUFBMkN6RyxJQUEzQyxFQUFpRHpGLE1BQWpELEVBQXlEO0FBQ3JELFNBQU9rTSxhQUFhLENBQUMxSSxDQUFkLEdBQWtCaUMsSUFBSSxDQUFDM0IsS0FBTCxHQUFhOUQsTUFBTSxDQUFDTyxPQUF0QyxJQUFpRDJMLGFBQWEsQ0FBQzFJLENBQWQsR0FBa0J4RCxNQUFNLENBQUNPLE9BQVAsR0FBaUJQLE1BQU0sQ0FBQ0MsVUFBeEIsR0FBcUNELE1BQU0sQ0FBQ00sZUFBL0csSUFBa0k0TCxhQUFhLENBQUNuSSxDQUFkLEdBQWtCL0QsTUFBTSxDQUFDTyxPQUEzSixJQUFzSzJMLGFBQWEsQ0FBQ25JLENBQWQsR0FBa0IwQixJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNLLFlBQXJCLEdBQW9DTCxNQUFNLENBQUNHLFdBQTNDLEdBQXlESCxNQUFNLENBQUNPLE9BQS9QO0FBQ0g7O0FBRUQsU0FBUzhMLDBCQUFULENBQW9DSCxhQUFwQyxFQUFtREksU0FBbkQsRUFBOERDLEtBQTlELEVBQXFFO0FBQ2pFLE1BQUlDLGFBQWEsR0FBRyxJQUFJdEosSUFBSSxDQUFDbUQsRUFBVCxHQUFja0csS0FBbEM7QUFDQSxNQUFJSixZQUFZLEdBQUcsQ0FBQyxDQUFwQjtBQUNBLE1BQUlNLHFCQUFxQixDQUFDUCxhQUFELEVBQWdCSSxTQUFTLENBQUMxRSxNQUExQixFQUFrQzBFLFNBQVMsQ0FBQ0ksTUFBNUMsQ0FBekIsRUFBOEU7QUFDMUUsUUFBSUMsUUFBUSxHQUFHLFNBQVNBLFFBQVQsQ0FBa0IxRyxLQUFsQixFQUF5QjtBQUNwQyxVQUFJQSxLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ1hBLGFBQUssSUFBSSxJQUFJL0MsSUFBSSxDQUFDbUQsRUFBbEI7QUFDSDtBQUNELFVBQUlKLEtBQUssR0FBRyxJQUFJL0MsSUFBSSxDQUFDbUQsRUFBckIsRUFBeUI7QUFDckJKLGFBQUssSUFBSSxJQUFJL0MsSUFBSSxDQUFDbUQsRUFBbEI7QUFDSDtBQUNELGFBQU9KLEtBQVA7QUFDSCxLQVJEOztBQVVBLFFBQUlBLEtBQUssR0FBRy9DLElBQUksQ0FBQzBKLEtBQUwsQ0FBV04sU0FBUyxDQUFDMUUsTUFBVixDQUFpQjdELENBQWpCLEdBQXFCbUksYUFBYSxDQUFDbkksQ0FBOUMsRUFBaURtSSxhQUFhLENBQUMxSSxDQUFkLEdBQWtCOEksU0FBUyxDQUFDMUUsTUFBVixDQUFpQnBFLENBQXBGLENBQVo7QUFDQXlDLFNBQUssR0FBRyxDQUFDLENBQUQsR0FBS0EsS0FBYjtBQUNBLFFBQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWEEsV0FBSyxJQUFJLElBQUkvQyxJQUFJLENBQUNtRCxFQUFsQjtBQUNIOztBQUVELFFBQUl3RyxTQUFTLEdBQUdQLFNBQVMsQ0FBQ08sU0FBVixDQUFvQjVFLEdBQXBCLENBQXdCLFVBQVVDLElBQVYsRUFBZ0I7QUFDcERBLFVBQUksR0FBR3lFLFFBQVEsQ0FBQyxDQUFDLENBQUQsR0FBS3pFLElBQU4sQ0FBZjs7QUFFQSxhQUFPQSxJQUFQO0FBQ0gsS0FKZSxDQUFoQjs7QUFNQTJFLGFBQVMsQ0FBQzdELE9BQVYsQ0FBa0IsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3JDLFVBQUk0SyxVQUFVLEdBQUdILFFBQVEsQ0FBQ3pFLElBQUksR0FBR3NFLGFBQWEsR0FBRyxDQUF4QixDQUF6QjtBQUNBLFVBQUlPLFFBQVEsR0FBR0osUUFBUSxDQUFDekUsSUFBSSxHQUFHc0UsYUFBYSxHQUFHLENBQXhCLENBQXZCO0FBQ0EsVUFBSU8sUUFBUSxHQUFHRCxVQUFmLEVBQTJCO0FBQ3ZCQyxnQkFBUSxJQUFJLElBQUk3SixJQUFJLENBQUNtRCxFQUFyQjtBQUNIO0FBQ0QsVUFBSUosS0FBSyxJQUFJNkcsVUFBVCxJQUF1QjdHLEtBQUssSUFBSThHLFFBQWhDLElBQTRDOUcsS0FBSyxHQUFHLElBQUkvQyxJQUFJLENBQUNtRCxFQUFqQixJQUF1QnlHLFVBQXZCLElBQXFDN0csS0FBSyxHQUFHLElBQUkvQyxJQUFJLENBQUNtRCxFQUFqQixJQUF1QjBHLFFBQTVHLEVBQXNIO0FBQ2xIWixvQkFBWSxHQUFHakssS0FBZjtBQUNIO0FBQ0osS0FURDtBQVVIOztBQUVELFNBQU9pSyxZQUFQO0FBQ0g7O0FBRUQsU0FBU2Esd0JBQVQsQ0FBa0NkLGFBQWxDLEVBQWlEZSxPQUFqRCxFQUEwRDtBQUN0RCxNQUFJZCxZQUFZLEdBQUcsQ0FBQyxDQUFwQjtBQUNBLE1BQUlNLHFCQUFxQixDQUFDUCxhQUFELEVBQWdCZSxPQUFPLENBQUNyRixNQUF4QixFQUFnQ3FGLE9BQU8sQ0FBQ1AsTUFBeEMsQ0FBekIsRUFBMEU7QUFDdEUsUUFBSXpHLEtBQUssR0FBRy9DLElBQUksQ0FBQzBKLEtBQUwsQ0FBV0ssT0FBTyxDQUFDckYsTUFBUixDQUFlN0QsQ0FBZixHQUFtQm1JLGFBQWEsQ0FBQ25JLENBQTVDLEVBQStDbUksYUFBYSxDQUFDMUksQ0FBZCxHQUFrQnlKLE9BQU8sQ0FBQ3JGLE1BQVIsQ0FBZXBFLENBQWhGLENBQVo7QUFDQXlDLFNBQUssR0FBRyxDQUFDQSxLQUFUO0FBQ0EsU0FBSyxJQUFJYyxDQUFDLEdBQUcsQ0FBUixFQUFXbUcsR0FBRyxHQUFHRCxPQUFPLENBQUNqRixNQUFSLENBQWU1RixNQUFyQyxFQUE2QzJFLENBQUMsR0FBR21HLEdBQWpELEVBQXNEbkcsQ0FBQyxFQUF2RCxFQUEyRDtBQUN2RCxVQUFJbUIsSUFBSSxHQUFHK0UsT0FBTyxDQUFDakYsTUFBUixDQUFlakIsQ0FBZixDQUFYO0FBQ0EsVUFBSWYsY0FBYyxDQUFDQyxLQUFELEVBQVFpQyxJQUFJLENBQUNpRixPQUFiLEVBQXNCakYsSUFBSSxDQUFDaUYsT0FBTCxHQUFlakYsSUFBSSxDQUFDa0YsWUFBTCxHQUFvQixDQUFwQixHQUF3QmxLLElBQUksQ0FBQ21ELEVBQWxFLENBQWxCLEVBQXlGO0FBQ3JGOEYsb0JBQVksR0FBR3BGLENBQWY7QUFDQTtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxTQUFPb0YsWUFBUDtBQUNIOztBQUVELFNBQVNNLHFCQUFULENBQStCUCxhQUEvQixFQUE4Q3RFLE1BQTlDLEVBQXNEOEUsTUFBdEQsRUFBOEQ7QUFDMUQsU0FBT3hKLElBQUksQ0FBQ21LLEdBQUwsQ0FBU25CLGFBQWEsQ0FBQzFJLENBQWQsR0FBa0JvRSxNQUFNLENBQUNwRSxDQUFsQyxFQUFxQyxDQUFyQyxJQUEwQ04sSUFBSSxDQUFDbUssR0FBTCxDQUFTbkIsYUFBYSxDQUFDbkksQ0FBZCxHQUFrQjZELE1BQU0sQ0FBQzdELENBQWxDLEVBQXFDLENBQXJDLENBQTFDLElBQXFGYixJQUFJLENBQUNtSyxHQUFMLENBQVNYLE1BQVQsRUFBaUIsQ0FBakIsQ0FBNUY7QUFDSDs7QUFFRCxTQUFTWSxXQUFULENBQXFCeEcsTUFBckIsRUFBNkI7QUFDekIsTUFBSXlHLFNBQVMsR0FBRyxFQUFoQjtBQUNBLE1BQUlDLEtBQUssR0FBRyxFQUFaO0FBQ0ExRyxRQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ2xDLFFBQUlnRyxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNmc0YsV0FBSyxDQUFDbEQsSUFBTixDQUFXcEMsSUFBWDtBQUNILEtBRkQsTUFFTztBQUNILFVBQUlzRixLQUFLLENBQUNwTCxNQUFWLEVBQWtCO0FBQ2RtTCxpQkFBUyxDQUFDakQsSUFBVixDQUFla0QsS0FBZjtBQUNIO0FBQ0RBLFdBQUssR0FBRyxFQUFSO0FBQ0g7QUFDSixHQVREO0FBVUEsTUFBSUEsS0FBSyxDQUFDcEwsTUFBVixFQUFrQjtBQUNkbUwsYUFBUyxDQUFDakQsSUFBVixDQUFla0QsS0FBZjtBQUNIOztBQUVELFNBQU9ELFNBQVA7QUFDSDs7QUFFRCxTQUFTRSxhQUFULENBQXVCekYsTUFBdkIsRUFBK0J2QyxJQUEvQixFQUFxQ3pGLE1BQXJDLEVBQTZDO0FBQ3pDLE1BQUl5RixJQUFJLENBQUNpSSxNQUFMLEtBQWdCLEtBQXBCLEVBQTJCO0FBQ3ZCLFdBQU87QUFDSEMsZ0JBQVUsRUFBRSxFQURUO0FBRUh0TixrQkFBWSxFQUFFLENBRlgsRUFBUDs7QUFJSDtBQUNKO0FBQ0csTUFBSUUsT0FBTyxHQUFHLElBQUVrRixJQUFJLENBQUNqRixVQUFyQjtBQUNBLE1BQUlvTixTQUFTLEdBQUcsSUFBRW5JLElBQUksQ0FBQ2pGLFVBQXZCO0FBQ0EsTUFBSXFOLFVBQVUsR0FBRyxLQUFHcEksSUFBSSxDQUFDakYsVUFBekI7QUFDQSxNQUFJbU4sVUFBVSxHQUFHLEVBQWpCO0FBQ0EsTUFBSUcsVUFBVSxHQUFHLENBQWpCO0FBQ0EsTUFBSUMsVUFBVSxHQUFHLEVBQWpCO0FBQ0EvRixRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQjtBQUMzQixRQUFJOEYsU0FBUyxHQUFHLElBQUl6TixPQUFKLEdBQWNzTixVQUFkLEdBQTJCbEYsV0FBVyxDQUFDVCxJQUFJLENBQUNrQyxJQUFMLElBQWEsV0FBZCxDQUF0RDtBQUNBLFFBQUkwRCxVQUFVLEdBQUdFLFNBQWIsR0FBeUJ2SSxJQUFJLENBQUMzQixLQUFsQyxFQUF5QztBQUNyQzZKLGdCQUFVLENBQUNyRCxJQUFYLENBQWdCeUQsVUFBaEI7QUFDQUQsZ0JBQVUsR0FBR0UsU0FBYjtBQUNBRCxnQkFBVSxHQUFHLENBQUM3RixJQUFELENBQWI7QUFDSCxLQUpELE1BSU87QUFDSDRGLGdCQUFVLElBQUlFLFNBQWQ7QUFDQUQsZ0JBQVUsQ0FBQ3pELElBQVgsQ0FBZ0JwQyxJQUFoQjtBQUNIO0FBQ0osR0FWRDtBQVdBLE1BQUk2RixVQUFVLENBQUMzTCxNQUFmLEVBQXVCO0FBQ25CdUwsY0FBVSxDQUFDckQsSUFBWCxDQUFnQnlELFVBQWhCO0FBQ0g7O0FBRUQsU0FBTztBQUNISixjQUFVLEVBQUVBLFVBRFQ7QUFFSHROLGdCQUFZLEVBQUVzTixVQUFVLENBQUN2TCxNQUFYLElBQXFCcEMsTUFBTSxDQUFDVyxRQUFQLEdBQWtCaU4sU0FBdkMsSUFBb0RyTixPQUYvRCxFQUFQOztBQUlIOztBQUVELFNBQVMwTixpQkFBVCxDQUEyQm5JLFVBQTNCLEVBQXVDTCxJQUF2QyxFQUE2Q3pGLE1BQTdDLEVBQXFEO0FBQ2pELE1BQUlrTyxNQUFNLEdBQUc7QUFDVGpJLFNBQUssRUFBRSxDQURFO0FBRVQ5RixlQUFXLEVBQUVILE1BQU0sQ0FBQ0csV0FGWCxFQUFiOzs7QUFLQSxNQUFJZ08sZUFBZSxHQUFHQyxjQUFjLENBQUN0SSxVQUFELEVBQWFMLElBQWIsRUFBbUJ6RixNQUFuQixDQUFwQztBQUNJNkYsYUFBVyxHQUFHc0ksZUFBZSxDQUFDdEksV0FEbEM7O0FBR0E7OztBQUdBLE1BQUl3SSxtQkFBbUIsR0FBR3ZJLFVBQVUsQ0FBQ21DLEdBQVgsQ0FBZSxVQUFVQyxJQUFWLEVBQWdCO0FBQ3JELFdBQU9TLFdBQVcsQ0FBQ1QsSUFBRCxDQUFsQjtBQUNILEdBRnlCLENBQTFCOztBQUlBLE1BQUlvRyxhQUFhLEdBQUdwTCxJQUFJLENBQUMrRCxHQUFMLENBQVN5RCxLQUFULENBQWUsSUFBZixFQUFxQjJELG1CQUFyQixDQUFwQjs7QUFFQSxNQUFJNUksSUFBSSxDQUFDOEksS0FBTCxDQUFXQyxXQUFYLElBQXdCLElBQXhCLElBQWdDRixhQUFhLEdBQUcsSUFBSXRPLE1BQU0sQ0FBQ2dCLGdCQUEzQixHQUE4QzZFLFdBQWxGLEVBQStGO0FBQzNGcUksVUFBTSxDQUFDakksS0FBUCxHQUFlLEtBQUsvQyxJQUFJLENBQUNtRCxFQUFWLEdBQWUsR0FBOUI7QUFDQTZILFVBQU0sQ0FBQy9OLFdBQVAsR0FBcUIsSUFBSUgsTUFBTSxDQUFDZ0IsZ0JBQVgsR0FBOEJzTixhQUFhLEdBQUdwTCxJQUFJLENBQUN1TCxHQUFMLENBQVNQLE1BQU0sQ0FBQ2pJLEtBQWhCLENBQW5FO0FBQ0g7O0FBRUQsU0FBT2lJLE1BQVA7QUFDSDs7QUFFRCxTQUFTUSxrQkFBVCxDQUE0QjdCLFNBQTVCLEVBQXVDakYsTUFBdkMsRUFBK0M4RSxNQUEvQyxFQUF1RDFFLE1BQXZELEVBQStEdkMsSUFBL0QsRUFBcUU7QUFDakUsTUFBSWtKLE9BQU8sR0FBR3hNLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQjBHLFNBQXpDLEdBQXFEMUcsU0FBUyxDQUFDLENBQUQsQ0FBOUQsR0FBb0UsQ0FBbEY7O0FBRUEsTUFBSXlNLFdBQVcsR0FBR25KLElBQUksQ0FBQzhGLEtBQUwsQ0FBV3NELEtBQVgsSUFBb0IsRUFBdEM7QUFDQUQsYUFBVyxDQUFDM0gsR0FBWixHQUFrQjJILFdBQVcsQ0FBQzNILEdBQVosSUFBbUIsQ0FBckM7QUFDQSxNQUFJc0IsT0FBTyxHQUFHckYsSUFBSSxDQUFDK0QsR0FBTCxDQUFTMkgsV0FBVyxDQUFDM0gsR0FBckIsRUFBMEIvRCxJQUFJLENBQUMrRCxHQUFMLENBQVN5RCxLQUFULENBQWUsSUFBZixFQUFxQnhCLFdBQVcsQ0FBQ2xCLE1BQUQsQ0FBaEMsQ0FBMUIsQ0FBZDs7QUFFQSxNQUFJb0IsSUFBSSxHQUFHLEVBQVg7QUFDQXBCLFFBQU0sQ0FBQ2dCLE9BQVAsQ0FBZSxVQUFVOEYsSUFBVixFQUFnQjtBQUMzQixRQUFJQyxRQUFRLEdBQUcsRUFBZjtBQUNBQSxZQUFRLENBQUM1RyxLQUFULEdBQWlCMkcsSUFBSSxDQUFDM0csS0FBdEI7QUFDQTRHLFlBQVEsQ0FBQzNGLElBQVQsR0FBZ0IsRUFBaEI7QUFDQTBGLFFBQUksQ0FBQzFGLElBQUwsQ0FBVUosT0FBVixDQUFrQixVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDckMsVUFBSThNLEdBQUcsR0FBRyxFQUFWO0FBQ0FBLFNBQUcsQ0FBQy9JLEtBQUosR0FBWTRHLFNBQVMsQ0FBQzNLLEtBQUQsQ0FBckI7O0FBRUE4TSxTQUFHLENBQUNDLFVBQUosR0FBaUIvRyxJQUFJLEdBQUdLLE9BQXhCO0FBQ0F5RyxTQUFHLENBQUNFLFFBQUosR0FBZXZILHVCQUF1QixDQUFDK0UsTUFBTSxHQUFHc0MsR0FBRyxDQUFDQyxVQUFiLEdBQTBCTixPQUExQixHQUFvQ3pMLElBQUksQ0FBQ2lNLEdBQUwsQ0FBU0gsR0FBRyxDQUFDL0ksS0FBYixDQUFyQyxFQUEwRHlHLE1BQU0sR0FBR3NDLEdBQUcsQ0FBQ0MsVUFBYixHQUEwQk4sT0FBMUIsR0FBb0N6TCxJQUFJLENBQUN1TCxHQUFMLENBQVNPLEdBQUcsQ0FBQy9JLEtBQWIsQ0FBOUYsRUFBbUgyQixNQUFuSCxDQUF0QztBQUNBbUgsY0FBUSxDQUFDM0YsSUFBVCxDQUFja0IsSUFBZCxDQUFtQjBFLEdBQW5CO0FBQ0gsS0FQRDs7QUFTQTVGLFFBQUksQ0FBQ2tCLElBQUwsQ0FBVXlFLFFBQVY7QUFDSCxHQWREOztBQWdCQSxTQUFPM0YsSUFBUDtBQUNIOztBQUVELFNBQVNnRyxnQkFBVCxDQUEwQnBILE1BQTFCLEVBQWtDO0FBQzlCLE1BQUkyRyxPQUFPLEdBQUd4TSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLENBQWxGOztBQUVBLE1BQUlvSyxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUlZLE9BQU8sR0FBRyxDQUFkO0FBQ0FuRixRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQjtBQUMzQkEsUUFBSSxDQUFDa0IsSUFBTCxHQUFZbEIsSUFBSSxDQUFDa0IsSUFBTCxLQUFjLElBQWQsR0FBcUIsQ0FBckIsR0FBeUJsQixJQUFJLENBQUNrQixJQUExQztBQUNBbUQsU0FBSyxJQUFJckUsSUFBSSxDQUFDa0IsSUFBZDtBQUNILEdBSEQ7QUFJQXBCLFFBQU0sQ0FBQ2dCLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCO0FBQzNCQSxRQUFJLENBQUNrQixJQUFMLEdBQVlsQixJQUFJLENBQUNrQixJQUFMLEtBQWMsSUFBZCxHQUFxQixDQUFyQixHQUF5QmxCLElBQUksQ0FBQ2tCLElBQTFDO0FBQ0FsQixRQUFJLENBQUNrRixZQUFMLEdBQW9CbEYsSUFBSSxDQUFDa0IsSUFBTCxHQUFZbUQsS0FBWixHQUFvQm9DLE9BQXhDO0FBQ0gsR0FIRDtBQUlBM0csUUFBTSxDQUFDZ0IsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0I7QUFDM0JBLFFBQUksQ0FBQ2lGLE9BQUwsR0FBZUEsT0FBZjtBQUNBQSxXQUFPLElBQUksSUFBSWpGLElBQUksQ0FBQ2tGLFlBQVQsR0FBd0JsSyxJQUFJLENBQUNtRCxFQUF4QztBQUNILEdBSEQ7O0FBS0EsU0FBTzJCLE1BQVA7QUFDSDs7QUFFRCxTQUFTcUgsbUJBQVQsQ0FBNkJySCxNQUE3QixFQUFvQ3NILFlBQXBDLEVBQWtEO0FBQzlDLE1BQUlYLE9BQU8sR0FBR3hNLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQjBHLFNBQXpDLEdBQXFEMUcsU0FBUyxDQUFDLENBQUQsQ0FBOUQsR0FBb0UsQ0FBbEY7QUFDSCxNQUFHd00sT0FBTyxJQUFFLENBQVosRUFBYztBQUNiQSxXQUFPLEdBQUMsUUFBUjtBQUNBO0FBQ0UzRyxRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQjtBQUMzQkEsUUFBSSxDQUFDa0IsSUFBTCxHQUFZbEIsSUFBSSxDQUFDa0IsSUFBTCxLQUFjLElBQWQsR0FBcUIsQ0FBckIsR0FBeUJsQixJQUFJLENBQUNrQixJQUExQztBQUNOLFFBQUltRyxVQUFKO0FBQ0EsUUFBR0QsWUFBWSxDQUFDdEssSUFBYixJQUFtQixTQUF0QixFQUFnQztBQUMvQnVLLGdCQUFVLEdBQUNELFlBQVksQ0FBQ3BKLFVBQWIsR0FBd0JvSixZQUFZLENBQUNuSixRQUFyQyxHQUE4QyxDQUF6RDtBQUNBLEtBRkQsTUFFSztBQUNKb0osZ0JBQVUsR0FBQyxDQUFYO0FBQ0E7QUFDRHJILFFBQUksQ0FBQ2tGLFlBQUwsR0FBb0JtQyxVQUFVLEdBQUdySCxJQUFJLENBQUNrQixJQUFsQixHQUF3QnVGLE9BQXhCLEdBQWtDVyxZQUFZLENBQUNwSixVQUFuRTtBQUNBLFFBQUlnQyxJQUFJLENBQUNrRixZQUFMLElBQXFCLENBQXpCLEVBQTRCO0FBQzNCbEYsVUFBSSxDQUFDa0YsWUFBTCxHQUFvQmxGLElBQUksQ0FBQ2tGLFlBQUwsR0FBb0IsQ0FBeEM7QUFDQTtBQUNFLEdBWkQ7QUFhQSxTQUFPcEYsTUFBUDtBQUNIOztBQUVELFNBQVN3SCxrQkFBVCxDQUE0QjFKLFVBQTVCLEVBQXVDSSxVQUF2QyxFQUFrREMsUUFBbEQsRUFBNEQ7QUFDM0QsTUFBSW9KLFVBQVUsR0FBQ3JKLFVBQVUsR0FBQ0MsUUFBWCxHQUFvQixDQUFuQztBQUNBLE1BQUlzSixjQUFjLEdBQUN2SixVQUFuQjtBQUNBLE9BQUksSUFBSWEsQ0FBQyxHQUFDLENBQVYsRUFBY0EsQ0FBQyxHQUFDakIsVUFBVSxDQUFDMUQsTUFBM0IsRUFBbUMyRSxDQUFDLEVBQXBDLEVBQXVDO0FBQ3RDakIsY0FBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWMySSxLQUFkLEdBQXNCNUosVUFBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWMySSxLQUFkLEtBQXdCLElBQXhCLEdBQStCLENBQS9CLEdBQW1DNUosVUFBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWMySSxLQUF2RTtBQUNBNUosY0FBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWM0SSxZQUFkLEdBQTJCRixjQUEzQjtBQUNBM0osY0FBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWM2SSxVQUFkLEdBQXlCTCxVQUFVLEdBQUV6SixVQUFVLENBQUNpQixDQUFELENBQVYsQ0FBYzJJLEtBQTFCLEdBQWtDeEosVUFBM0Q7QUFDQSxRQUFJSixVQUFVLENBQUNpQixDQUFELENBQVYsQ0FBYzZJLFVBQWQsSUFBNEIsQ0FBaEMsRUFBbUM7QUFDbEM5SixnQkFBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWM2SSxVQUFkLEdBQTJCOUosVUFBVSxDQUFDaUIsQ0FBRCxDQUFWLENBQWM2SSxVQUFkLEdBQTJCLENBQXREO0FBQ0E7QUFDREgsa0JBQWMsR0FBQzNKLFVBQVUsQ0FBQ2lCLENBQUQsQ0FBVixDQUFjNkksVUFBN0I7QUFDQTtBQUNELFNBQU85SixVQUFQO0FBQ0E7O0FBRUQsU0FBUytKLGtCQUFULENBQTRCN0gsTUFBNUIsRUFBbUNsQyxVQUFuQyxFQUE4Q2dLLFdBQTlDLEVBQTJEO0FBQ3ZELE1BQUluQixPQUFPLEdBQUd4TSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLENBQWxGO0FBQ0E2RixRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQjtBQUMzQkEsUUFBSSxDQUFDa0IsSUFBTCxHQUFZbEIsSUFBSSxDQUFDa0IsSUFBTCxLQUFjLElBQWQsR0FBcUIsQ0FBckIsR0FBeUJsQixJQUFJLENBQUNrQixJQUExQztBQUNOLFFBQUcwRyxXQUFXLENBQUNDLE9BQVosQ0FBb0I1SCxLQUFwQixJQUEyQixNQUE5QixFQUFxQztBQUNwQyxXQUFJLElBQUlwQixDQUFDLEdBQUMsQ0FBVixFQUFhQSxDQUFDLEdBQUNqQixVQUFVLENBQUMxRCxNQUExQixFQUFpQzJFLENBQUMsRUFBbEMsRUFBcUM7QUFDcEMsWUFBR21CLElBQUksQ0FBQ2tCLElBQUwsSUFBV3RELFVBQVUsQ0FBQ2lCLENBQUQsQ0FBVixDQUFjMkksS0FBNUIsRUFBa0M7QUFDakN4SCxjQUFJLENBQUNDLEtBQUwsR0FBV3JDLFVBQVUsQ0FBQ2lCLENBQUQsQ0FBVixDQUFjb0IsS0FBekI7QUFDQTtBQUNBO0FBQ0Q7QUFDRCxLQVBELE1BT0s7QUFDSkQsVUFBSSxDQUFDQyxLQUFMLEdBQVcySCxXQUFXLENBQUNDLE9BQVosQ0FBb0I1SCxLQUEvQjtBQUNBO0FBQ0QsUUFBSW9ILFVBQVUsR0FBQ08sV0FBVyxDQUFDNUosVUFBWixHQUF1QjRKLFdBQVcsQ0FBQzNKLFFBQW5DLEdBQTRDLENBQTNEO0FBQ0ErQixRQUFJLENBQUMwSCxVQUFMLEdBQWdCTCxVQUFVLEdBQUdySCxJQUFJLENBQUNrQixJQUFsQixHQUF5QjBHLFdBQVcsQ0FBQzVKLFVBQXJEO0FBQ0FnQyxRQUFJLENBQUM4SCxVQUFMLEdBQWdCRixXQUFXLENBQUNHLFFBQTVCO0FBQ0EsUUFBR0gsV0FBVyxDQUFDRyxRQUFaLEdBQXFCSCxXQUFXLENBQUMzSixRQUFwQyxFQUE2QztBQUM1QytCLFVBQUksQ0FBQzhILFVBQUwsSUFBaUIsQ0FBakI7QUFDQTtBQUNELFFBQUc5SCxJQUFJLENBQUNrQixJQUFMLElBQVcwRyxXQUFXLENBQUNJLE9BQTFCLEVBQWtDO0FBQ2pDaEksVUFBSSxDQUFDa0YsWUFBTCxHQUFvQixDQUFDbEYsSUFBSSxDQUFDMEgsVUFBTCxHQUFnQjFILElBQUksQ0FBQzhILFVBQXRCLElBQW1DckIsT0FBbkMsR0FBMkNtQixXQUFXLENBQUNHLFFBQTNFO0FBQ0EsS0FGRCxNQUVLO0FBQ0ovSCxVQUFJLENBQUNrRixZQUFMLEdBQW1CbEYsSUFBSSxDQUFDOEgsVUFBTCxHQUFpQixDQUFDOUgsSUFBSSxDQUFDOEgsVUFBTCxHQUFnQjlILElBQUksQ0FBQzBILFVBQXRCLElBQW1DakIsT0FBdkU7QUFDQTtBQUNELFFBQUl6RyxJQUFJLENBQUNrRixZQUFMLElBQXFCLENBQXpCLEVBQTRCO0FBQzNCbEYsVUFBSSxDQUFDa0YsWUFBTCxHQUFvQmxGLElBQUksQ0FBQ2tGLFlBQUwsR0FBb0IsQ0FBeEM7QUFDQTtBQUNFLEdBMUJEO0FBMkJBLFNBQU9wRixNQUFQO0FBQ0g7OztBQUdELFNBQVNtSSxtQkFBVCxDQUE2Qm5JLE1BQTdCLEVBQXFDO0FBQ2pDQSxRQUFNLEdBQUdvSCxnQkFBZ0IsQ0FBQ3BILE1BQUQsQ0FBekI7QUFDQSxNQUFJb0ksU0FBUyxHQUFHLENBQWhCO0FBQ0FwSSxRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQjtBQUMzQixRQUFJVSxJQUFJLEdBQUdWLElBQUksQ0FBQ21DLE1BQUwsR0FBY25DLElBQUksQ0FBQ21DLE1BQUwsQ0FBWSxDQUFDbkMsSUFBSSxDQUFDa0YsWUFBTCxDQUFrQnpLLE9BQWxCLENBQTBCLENBQTFCLENBQWIsQ0FBZCxHQUEyREQsSUFBSSxDQUFDQyxPQUFMLENBQWF1RixJQUFJLENBQUNrRixZQUFMLEdBQW9CLEdBQWpDLElBQXdDLEdBQTlHO0FBQ0FnRCxhQUFTLEdBQUdsTixJQUFJLENBQUMrRCxHQUFMLENBQVNtSixTQUFULEVBQW9CekgsV0FBVyxDQUFDQyxJQUFELENBQS9CLENBQVo7QUFDSCxHQUhEOztBQUtBLFNBQU93SCxTQUFQO0FBQ0g7O0FBRUQsU0FBU0MsYUFBVCxDQUF1QnZKLE1BQXZCLEVBQStCakIsV0FBL0IsRUFBNEN5SyxTQUE1QyxFQUF1RHBPLEtBQXZELEVBQThEbEMsTUFBOUQsRUFBc0V5RixJQUF0RSxFQUE0RTtBQUN4RSxTQUFPcUIsTUFBTSxDQUFDbUIsR0FBUCxDQUFXLFVBQVVDLElBQVYsRUFBZ0I7QUFDOUIsUUFBSUEsSUFBSSxLQUFLLElBQWIsRUFBbUI7QUFDZixhQUFPLElBQVA7QUFDSDtBQUNEQSxRQUFJLENBQUNwRSxLQUFMLEdBQWEsQ0FBQytCLFdBQVcsR0FBRyxJQUFJN0YsTUFBTSxDQUFDVSxhQUExQixJQUEyQzRQLFNBQXhEOztBQUVBLFFBQUk3SyxJQUFJLENBQUM4RixLQUFMLENBQVdnRixNQUFYLElBQXFCOUssSUFBSSxDQUFDOEYsS0FBTCxDQUFXZ0YsTUFBWCxDQUFrQnpNLEtBQXZDLElBQWdELENBQUMyQixJQUFJLENBQUM4RixLQUFMLENBQVdnRixNQUFYLENBQWtCek0sS0FBbkIsR0FBMkIsQ0FBL0UsRUFBa0Y7QUFDOUU7QUFDQW9FLFVBQUksQ0FBQ3BFLEtBQUwsR0FBYVosSUFBSSxDQUFDZ0UsR0FBTCxDQUFTZ0IsSUFBSSxDQUFDcEUsS0FBZCxFQUFxQixDQUFDMkIsSUFBSSxDQUFDOEYsS0FBTCxDQUFXZ0YsTUFBWCxDQUFrQnpNLEtBQXhDLENBQWI7QUFDSCxLQUhELE1BR087QUFDSDtBQUNBO0FBQ0FvRSxVQUFJLENBQUNwRSxLQUFMLEdBQWFaLElBQUksQ0FBQ2dFLEdBQUwsQ0FBU2dCLElBQUksQ0FBQ3BFLEtBQWQsRUFBcUIsRUFBckIsQ0FBYjtBQUNIO0FBQ0RvRSxRQUFJLENBQUMxRSxDQUFMLElBQVUsQ0FBQ3RCLEtBQUssR0FBRyxHQUFSLEdBQWNvTyxTQUFTLEdBQUcsQ0FBM0IsSUFBZ0NwSSxJQUFJLENBQUNwRSxLQUEvQzs7QUFFQSxXQUFPb0UsSUFBUDtBQUNILEdBakJNLENBQVA7QUFrQkg7O0FBRUQsU0FBU3NJLGtCQUFULENBQTRCMUosTUFBNUIsRUFBb0NqQixXQUFwQyxFQUFpRHlLLFNBQWpELEVBQTREcE8sS0FBNUQsRUFBbUVsQyxNQUFuRSxFQUEyRXlGLElBQTNFLEVBQWlGZ0wsTUFBakYsRUFBeUY7QUFDckYsU0FBTzNKLE1BQU0sQ0FBQ21CLEdBQVAsQ0FBVyxVQUFVQyxJQUFWLEVBQWdCO0FBQzlCLFFBQUlBLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2YsYUFBTyxJQUFQO0FBQ0g7QUFDREEsUUFBSSxDQUFDcEUsS0FBTCxHQUFhK0IsV0FBVyxHQUFHLElBQUk3RixNQUFNLENBQUNVLGFBQXRDOztBQUVBLFFBQUkrRSxJQUFJLENBQUM4RixLQUFMLENBQVdnRixNQUFYLElBQXFCOUssSUFBSSxDQUFDOEYsS0FBTCxDQUFXZ0YsTUFBWCxDQUFrQnpNLEtBQXZDLElBQWdELENBQUMyQixJQUFJLENBQUM4RixLQUFMLENBQVdnRixNQUFYLENBQWtCek0sS0FBbkIsR0FBMkIsQ0FBL0UsRUFBa0Y7QUFDOUVvRSxVQUFJLENBQUNwRSxLQUFMLEdBQWFaLElBQUksQ0FBQ2dFLEdBQUwsQ0FBU2dCLElBQUksQ0FBQ3BFLEtBQWQsRUFBcUIsQ0FBQzJCLElBQUksQ0FBQzhGLEtBQUwsQ0FBV2dGLE1BQVgsQ0FBa0J6TSxLQUF4QyxDQUFiO0FBQ0gsS0FGRCxNQUVPO0FBQ0hvRSxVQUFJLENBQUNwRSxLQUFMLEdBQWFaLElBQUksQ0FBQ2dFLEdBQUwsQ0FBU2dCLElBQUksQ0FBQ3BFLEtBQWQsRUFBcUIsRUFBckIsQ0FBYjtBQUNIO0FBQ1AsUUFBRzVCLEtBQUssR0FBQyxDQUFULEVBQVc7QUFDVmdHLFVBQUksQ0FBQ3BFLEtBQUwsSUFBYyxJQUFFMk0sTUFBaEI7QUFDQTtBQUNLLFdBQU92SSxJQUFQO0FBQ0gsR0FmTSxDQUFQO0FBZ0JIOztBQUVELFNBQVN3SSxrQkFBVCxDQUE0QjVKLE1BQTVCLEVBQW9DakIsV0FBcEMsRUFBaUR5SyxTQUFqRCxFQUE0RHBPLEtBQTVELEVBQW1FbEMsTUFBbkUsRUFBMkV5RixJQUEzRSxFQUFnRnVDLE1BQWhGLEVBQXdGOztBQUVwRixTQUFPbEIsTUFBTSxDQUFDbUIsR0FBUCxDQUFXLFVBQVVDLElBQVYsRUFBZXlJLE1BQWYsRUFBdUI7O0FBRXJDLFFBQUl6SSxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNmLGFBQU8sSUFBUDtBQUNIO0FBQ0RBLFFBQUksQ0FBQ3BFLEtBQUwsR0FBYStCLFdBQVcsR0FBRyxJQUFJN0YsTUFBTSxDQUFDVSxhQUF0Qzs7QUFFQSxRQUFJK0UsSUFBSSxDQUFDOEYsS0FBTCxDQUFXZ0YsTUFBWCxJQUFxQjlLLElBQUksQ0FBQzhGLEtBQUwsQ0FBV2dGLE1BQVgsQ0FBa0J6TSxLQUF2QyxJQUFnRCxDQUFDMkIsSUFBSSxDQUFDOEYsS0FBTCxDQUFXZ0YsTUFBWCxDQUFrQnpNLEtBQW5CLEdBQTJCLENBQS9FLEVBQWtGO0FBQzlFb0UsVUFBSSxDQUFDcEUsS0FBTCxHQUFhWixJQUFJLENBQUNnRSxHQUFMLENBQVNnQixJQUFJLENBQUNwRSxLQUFkLEVBQXFCLENBQUMyQixJQUFJLENBQUM4RixLQUFMLENBQVdnRixNQUFYLENBQWtCek0sS0FBeEMsQ0FBYjtBQUNILEtBRkQsTUFFTztBQUNIb0UsVUFBSSxDQUFDcEUsS0FBTCxHQUFhWixJQUFJLENBQUNnRSxHQUFMLENBQVNnQixJQUFJLENBQUNwRSxLQUFkLEVBQXFCLEVBQXJCLENBQWI7QUFDSDtBQUNELFdBQU9vRSxJQUFQO0FBQ0gsR0FiTSxDQUFQO0FBY0g7O0FBRUQsU0FBU2tHLGNBQVQsQ0FBd0J0SSxVQUF4QixFQUFvQ0wsSUFBcEMsRUFBMEN6RixNQUExQyxFQUFrRDtBQUM5QyxNQUFJNFEsZUFBZSxHQUFHNVEsTUFBTSxDQUFDQyxVQUFQLEdBQW9CRCxNQUFNLENBQUNNLGVBQWpEO0FBQ0EsTUFBSXVRLFlBQVksR0FBR3BMLElBQUksQ0FBQzNCLEtBQUwsR0FBYSxJQUFJOUQsTUFBTSxDQUFDTyxPQUF4QixHQUFrQ3FRLGVBQXJEO0FBQ0EsTUFBSUUsU0FBUyxHQUFHckwsSUFBSSxDQUFDc0wsWUFBTCxHQUFvQjdOLElBQUksQ0FBQ2dFLEdBQUwsQ0FBU3pCLElBQUksQ0FBQzhJLEtBQUwsQ0FBV3lDLFNBQXBCLEVBQStCbEwsVUFBVSxDQUFDMUQsTUFBMUMsQ0FBcEIsR0FBd0UwRCxVQUFVLENBQUMxRCxNQUFuRztBQUNBLE1BQUl5RCxXQUFXLEdBQUdnTCxZQUFZLEdBQUdDLFNBQWpDOztBQUVBLE1BQUluTCxXQUFXLEdBQUcsRUFBbEI7QUFDQSxNQUFJc0wsTUFBTSxHQUFHalIsTUFBTSxDQUFDTyxPQUFQLEdBQWlCcVEsZUFBOUI7QUFDQSxNQUFJTSxJQUFJLEdBQUd6TCxJQUFJLENBQUMzQixLQUFMLEdBQWE5RCxNQUFNLENBQUNPLE9BQS9CO0FBQ0F1RixZQUFVLENBQUNrRCxPQUFYLENBQW1CLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUN0Q3lELGVBQVcsQ0FBQzJFLElBQVosQ0FBaUIyRyxNQUFNLEdBQUcvTyxLQUFLLEdBQUcyRCxXQUFsQztBQUNILEdBRkQ7QUFHQSxNQUFJSixJQUFJLENBQUNzTCxZQUFMLEtBQXNCLElBQTFCLEVBQWdDO0FBQzVCcEwsZUFBVyxDQUFDMkUsSUFBWixDQUFpQjJHLE1BQU0sR0FBR25MLFVBQVUsQ0FBQzFELE1BQVgsR0FBb0J5RCxXQUE5QztBQUNILEdBRkQsTUFFTztBQUNIRixlQUFXLENBQUMyRSxJQUFaLENBQWlCNEcsSUFBakI7QUFDSDs7QUFFRCxTQUFPLEVBQUV2TCxXQUFXLEVBQUVBLFdBQWYsRUFBNEJzTCxNQUFNLEVBQUVBLE1BQXBDLEVBQTRDQyxJQUFJLEVBQUVBLElBQWxELEVBQXdEckwsV0FBVyxFQUFFQSxXQUFyRSxFQUFQO0FBQ0g7O0FBRUQsU0FBU3NMLG1CQUFULENBQTZCL0gsSUFBN0IsRUFBbUNYLFFBQW5DLEVBQTZDQyxRQUE3QyxFQUF1RC9DLFdBQXZELEVBQW9FRSxXQUFwRSxFQUFpRkosSUFBakYsRUFBdUZ6RixNQUF2RixFQUErRjtBQUMzRixNQUFJMk8sT0FBTyxHQUFHeE0sU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxDQUFsRjs7QUFFQSxNQUFJMkUsTUFBTSxHQUFHLEVBQWI7QUFDQSxNQUFJc0ssV0FBVyxHQUFHM0wsSUFBSSxDQUFDekIsTUFBTCxHQUFjLElBQUloRSxNQUFNLENBQUNPLE9BQXpCLEdBQW1DUCxNQUFNLENBQUNHLFdBQTFDLEdBQXdESCxNQUFNLENBQUNLLFlBQWpGO0FBQ0ErSSxNQUFJLENBQUNKLE9BQUwsQ0FBYSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDaEMsUUFBSWdHLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2ZwQixZQUFNLENBQUN3RCxJQUFQLENBQVksSUFBWjtBQUNILEtBRkQsTUFFTztBQUNaLFVBQUkrRyxPQUFPLEdBQUcsRUFBZDtBQUNBbkosVUFBSSxDQUFDYyxPQUFMLENBQWEsVUFBVXdFLEtBQVYsRUFBaUI4RCxNQUFqQixFQUF5QjtBQUNwQyxZQUFJQyxLQUFLLEdBQUcsRUFBWjtBQUNBQSxhQUFLLENBQUMvTixDQUFOLEdBQVVtQyxXQUFXLENBQUN6RCxLQUFELENBQVgsR0FBcUJnQixJQUFJLENBQUNtSSxLQUFMLENBQVd4RixXQUFXLEdBQUcsQ0FBekIsQ0FBL0I7QUFDQSxZQUFJNkosS0FBSyxHQUFHbEMsS0FBSyxDQUFDa0MsS0FBTixJQUFlbEMsS0FBM0I7QUFDQSxZQUFJeEosTUFBTSxHQUFHb04sV0FBVyxJQUFJMUIsS0FBSyxHQUFHakgsUUFBWixDQUFYLElBQW9DQyxRQUFRLEdBQUdELFFBQS9DLENBQWI7QUFDQXpFLGNBQU0sSUFBSTJLLE9BQVY7QUFDQTRDLGFBQUssQ0FBQ3hOLENBQU4sR0FBVTBCLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ0csV0FBckIsR0FBbUNILE1BQU0sQ0FBQ0ssWUFBMUMsR0FBeUQ2QyxJQUFJLENBQUNtSSxLQUFMLENBQVdySCxNQUFYLENBQXpELEdBQThFaEUsTUFBTSxDQUFDTyxPQUEvRjtBQUNBOFEsZUFBTyxDQUFDL0csSUFBUixDQUFhaUgsS0FBYjtBQUNELE9BUkQ7QUFTU3pLLFlBQU0sQ0FBQ3dELElBQVAsQ0FBWStHLE9BQVo7QUFDSDtBQUNKLEdBaEJEOztBQWtCQSxTQUFPdkssTUFBUDtBQUNIOztBQUVELFNBQVMwSyxhQUFULENBQXVCcEksSUFBdkIsRUFBNkJYLFFBQTdCLEVBQXVDQyxRQUF2QyxFQUFpRC9DLFdBQWpELEVBQThERSxXQUE5RCxFQUEyRUosSUFBM0UsRUFBaUZ6RixNQUFqRixFQUF5RjtBQUNyRixNQUFJMk8sT0FBTyxHQUFHeE0sU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxDQUFsRjs7QUFFQSxNQUFJMkUsTUFBTSxHQUFHLEVBQWI7QUFDQSxNQUFJc0ssV0FBVyxHQUFHM0wsSUFBSSxDQUFDekIsTUFBTCxHQUFjLElBQUloRSxNQUFNLENBQUNPLE9BQXpCLEdBQW1DUCxNQUFNLENBQUNHLFdBQTFDLEdBQXdESCxNQUFNLENBQUNLLFlBQWpGO0FBQ0ErSSxNQUFJLENBQUNKLE9BQUwsQ0FBYSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDaEMsUUFBSWdHLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2ZwQixZQUFNLENBQUN3RCxJQUFQLENBQVksSUFBWjtBQUNILEtBRkQsTUFFTztBQUNILFVBQUlpSCxLQUFLLEdBQUcsRUFBWjtBQUNUQSxXQUFLLENBQUNwSixLQUFOLEdBQWNELElBQUksQ0FBQ0MsS0FBbkI7QUFDU29KLFdBQUssQ0FBQy9OLENBQU4sR0FBVW1DLFdBQVcsQ0FBQ3pELEtBQUQsQ0FBWCxHQUFxQmdCLElBQUksQ0FBQ21JLEtBQUwsQ0FBV3hGLFdBQVcsR0FBRyxDQUF6QixDQUEvQjtBQUNULFVBQUk2SixLQUFLLEdBQUd4SCxJQUFJLENBQUN3SCxLQUFMLElBQWN4SCxJQUExQjtBQUNTLFVBQUlsRSxNQUFNLEdBQUdvTixXQUFXLElBQUkxQixLQUFLLEdBQUdqSCxRQUFaLENBQVgsSUFBb0NDLFFBQVEsR0FBR0QsUUFBL0MsQ0FBYjtBQUNBekUsWUFBTSxJQUFJMkssT0FBVjtBQUNBNEMsV0FBSyxDQUFDeE4sQ0FBTixHQUFVMEIsSUFBSSxDQUFDekIsTUFBTCxHQUFjaEUsTUFBTSxDQUFDRyxXQUFyQixHQUFtQ0gsTUFBTSxDQUFDSyxZQUExQyxHQUF5RDZDLElBQUksQ0FBQ21JLEtBQUwsQ0FBV3JILE1BQVgsQ0FBekQsR0FBOEVoRSxNQUFNLENBQUNPLE9BQS9GO0FBQ0F1RyxZQUFNLENBQUN3RCxJQUFQLENBQVlpSCxLQUFaO0FBQ0g7QUFDSixHQWJEOztBQWVBLFNBQU96SyxNQUFQO0FBQ0g7O0FBRUQsU0FBUzJLLGtCQUFULENBQTRCckksSUFBNUIsRUFBa0NYLFFBQWxDLEVBQTRDQyxRQUE1QyxFQUFzRC9DLFdBQXRELEVBQW1FRSxXQUFuRSxFQUFnRkosSUFBaEYsRUFBc0Z6RixNQUF0RixFQUE2RjBSLFdBQTdGLEVBQTBHQyxXQUExRyxFQUF1SDtBQUNuSCxNQUFJaEQsT0FBTyxHQUFHeE0sU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxDQUFsRjtBQUNBLE1BQUkyRSxNQUFNLEdBQUcsRUFBYjtBQUNBLE1BQUlzSyxXQUFXLEdBQUczTCxJQUFJLENBQUN6QixNQUFMLEdBQWMsSUFBSWhFLE1BQU0sQ0FBQ08sT0FBekIsR0FBbUNQLE1BQU0sQ0FBQ0csV0FBMUMsR0FBd0RILE1BQU0sQ0FBQ0ssWUFBakY7O0FBRUErSSxNQUFJLENBQUNKLE9BQUwsQ0FBYSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDaEMsUUFBSWdHLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2ZwQixZQUFNLENBQUN3RCxJQUFQLENBQVksSUFBWjtBQUNILEtBRkQsTUFFTztBQUNILFVBQUlpSCxLQUFLLEdBQUcsRUFBWjtBQUNUQSxXQUFLLENBQUNwSixLQUFOLEdBQWNELElBQUksQ0FBQ0MsS0FBbkI7QUFDU29KLFdBQUssQ0FBQy9OLENBQU4sR0FBVW1DLFdBQVcsQ0FBQ3pELEtBQUQsQ0FBWCxHQUFxQmdCLElBQUksQ0FBQ21JLEtBQUwsQ0FBV3hGLFdBQVcsR0FBRyxDQUF6QixDQUEvQjs7QUFFVCxVQUFHNkwsV0FBVyxHQUFDLENBQWYsRUFBaUI7QUFDaEIsWUFBSWhDLEtBQUssR0FBQyxDQUFWO0FBQ0EsYUFBSSxJQUFJM0ksQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxJQUFFMkssV0FBZixFQUEyQjNLLENBQUMsRUFBNUIsRUFBK0I7QUFDOUIySSxlQUFLLElBQUVpQyxXQUFXLENBQUM1SyxDQUFELENBQVgsQ0FBZXFDLElBQWYsQ0FBb0JsSCxLQUFwQixDQUFQO0FBQ0E7QUFDRCxZQUFJMFAsTUFBTSxHQUFHbEMsS0FBSyxHQUFDeEgsSUFBbkI7QUFDQSxZQUFJbEUsTUFBTSxHQUFHb04sV0FBVyxJQUFJMUIsS0FBSyxHQUFHakgsUUFBWixDQUFYLElBQW9DQyxRQUFRLEdBQUdELFFBQS9DLENBQWI7QUFDQSxZQUFJb0osT0FBTyxHQUFHVCxXQUFXLElBQUlRLE1BQU0sR0FBR25KLFFBQWIsQ0FBWCxJQUFxQ0MsUUFBUSxHQUFHRCxRQUFoRCxDQUFkO0FBQ0EsT0FSRCxNQVFLO0FBQ0osWUFBSWlILEtBQUssR0FBR3hILElBQVo7QUFDQSxZQUFJbEUsTUFBTSxHQUFHb04sV0FBVyxJQUFJMUIsS0FBSyxHQUFHakgsUUFBWixDQUFYLElBQW9DQyxRQUFRLEdBQUdELFFBQS9DLENBQWI7QUFDQSxZQUFJb0osT0FBTyxHQUFHLENBQWQ7QUFDQTtBQUNELFVBQUlDLE9BQU8sR0FBQ0QsT0FBWjtBQUNTN04sWUFBTSxJQUFJMkssT0FBVjtBQUNUbUQsYUFBTyxJQUFJbkQsT0FBWDtBQUNBNEMsV0FBSyxDQUFDeE4sQ0FBTixHQUFVMEIsSUFBSSxDQUFDekIsTUFBTCxHQUFjaEUsTUFBTSxDQUFDRyxXQUFyQixHQUFtQ0gsTUFBTSxDQUFDSyxZQUExQyxHQUF5RDZDLElBQUksQ0FBQ21JLEtBQUwsQ0FBV3JILE1BQVgsQ0FBekQsR0FBOEVoRSxNQUFNLENBQUNPLE9BQS9GO0FBQ0FnUixXQUFLLENBQUNRLEVBQU4sR0FBV3RNLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ0csV0FBckIsR0FBbUNILE1BQU0sQ0FBQ0ssWUFBMUMsR0FBeUQ2QyxJQUFJLENBQUNtSSxLQUFMLENBQVd5RyxPQUFYLENBQXpELEdBQStFOVIsTUFBTSxDQUFDTyxPQUFqRztBQUNTdUcsWUFBTSxDQUFDd0QsSUFBUCxDQUFZaUgsS0FBWjtBQUNIO0FBQ0osR0E1QkQ7O0FBOEJBLFNBQU96SyxNQUFQO0FBQ0g7O0FBRUQsU0FBU2tMLGdCQUFULENBQTBCaEssTUFBMUIsRUFBa0N2QyxJQUFsQyxFQUF3Q3pGLE1BQXhDLEVBQWdEaVMsS0FBaEQsRUFBdUQ7QUFDdEQsTUFBSTdJLElBQUo7QUFDQSxNQUFHNkksS0FBSyxJQUFFLE9BQVYsRUFBa0I7QUFDakI7QUFDQTdJLFFBQUksR0FBR0UsZ0JBQWdCLENBQUN0QixNQUFELENBQXZCO0FBQ0EsR0FIRCxNQUdLO0FBQ0pvQixRQUFJLEdBQUdGLFdBQVcsQ0FBQ2xCLE1BQUQsQ0FBbEI7QUFDQTs7QUFFRCxNQUFJa0ssTUFBTSxHQUFHLEVBQWI7QUFDRztBQUNBOUksTUFBSSxHQUFHQSxJQUFJLENBQUMrSSxNQUFMLENBQVksVUFBVWpLLElBQVYsRUFBZ0I7QUFDL0I7QUFDTixRQUFHLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEJBLElBQUksS0FBSyxJQUF4QyxFQUE4QztBQUM3QztBQUNBLFVBQUdBLElBQUksQ0FBQ2tLLFdBQUwsSUFBb0I1SSxLQUF2QixFQUE2QjtBQUM1QixlQUFPdEIsSUFBSSxLQUFLLElBQWhCO0FBQ0EsT0FGRCxNQUVLO0FBQ0osZUFBT0EsSUFBSSxDQUFDd0gsS0FBTCxLQUFlLElBQXRCO0FBQ0E7QUFDSyxLQVBQLE1BT2E7QUFDSCxhQUFPeEgsSUFBSSxLQUFLLElBQWhCO0FBQ0g7QUFDSixHQVpNLENBQVA7QUFhQTtBQUNBO0FBQ0hrQixNQUFJLENBQUNuQixHQUFMLENBQVMsVUFBQ0MsSUFBRCxFQUFRO0FBQ2hCLFFBQUcsT0FBT0EsSUFBUCxLQUFnQixRQUFuQixFQUE2QjtBQUM1QixVQUFHQSxJQUFJLENBQUNrSyxXQUFMLElBQW9CNUksS0FBdkIsRUFBNkI7QUFDNUJ0QixZQUFJLENBQUNELEdBQUwsQ0FBUyxVQUFDb0ssT0FBRCxFQUFXO0FBQ25CSCxnQkFBTSxDQUFDNUgsSUFBUCxDQUFZK0gsT0FBWjtBQUNBLFNBRkQ7QUFHQSxPQUpELE1BSUs7QUFDSkgsY0FBTSxDQUFDNUgsSUFBUCxDQUFZcEMsSUFBSSxDQUFDd0gsS0FBakI7QUFDQTtBQUNELEtBUkQsTUFRTztBQUNId0MsWUFBTSxDQUFDNUgsSUFBUCxDQUFZcEMsSUFBWjtBQUNIO0FBQ0s7QUFDSCxHQWJKO0FBY0EsTUFBSUksT0FBTyxHQUFHLENBQWQ7QUFDQSxNQUFJQyxPQUFPLEdBQUcsQ0FBZDtBQUNBLE1BQUcySixNQUFNLENBQUM5UCxNQUFQLEdBQWMsQ0FBakIsRUFBbUI7QUFDbEJrRyxXQUFPLEdBQUdwRixJQUFJLENBQUNnRSxHQUFMLENBQVN3RCxLQUFULENBQWUsSUFBZixFQUFxQndILE1BQXJCLENBQVY7QUFDQTNKLFdBQU8sR0FBR3JGLElBQUksQ0FBQytELEdBQUwsQ0FBU3lELEtBQVQsQ0FBZSxJQUFmLEVBQXFCd0gsTUFBckIsQ0FBVjtBQUNBO0FBQ0UsTUFBSSxPQUFPek0sSUFBSSxDQUFDNk0sS0FBTCxDQUFXcEwsR0FBbEIsS0FBMEIsUUFBOUIsRUFBd0M7QUFDckNvQixXQUFPLEdBQUdwRixJQUFJLENBQUNnRSxHQUFMLENBQVN6QixJQUFJLENBQUM2TSxLQUFMLENBQVdwTCxHQUFwQixFQUF5Qm9CLE9BQXpCLENBQVY7QUFDRjtBQUNELE1BQUksT0FBTzdDLElBQUksQ0FBQzZNLEtBQUwsQ0FBV3JMLEdBQWxCLEtBQTBCLFFBQTlCLEVBQXdDO0FBQ3BDc0IsV0FBTyxHQUFHckYsSUFBSSxDQUFDK0QsR0FBTCxDQUFTeEIsSUFBSSxDQUFDNk0sS0FBTCxDQUFXckwsR0FBcEIsRUFBeUJzQixPQUF6QixDQUFWO0FBQ0g7O0FBRUQ7QUFDQSxNQUFJRCxPQUFPLEtBQUtDLE9BQWhCLEVBQXlCO0FBQ3JCLFFBQUlnSyxTQUFTLEdBQUdoSyxPQUFPLElBQUksRUFBM0I7QUFDQTtBQUNBQSxXQUFPLElBQUlnSyxTQUFYO0FBQ0g7O0FBRUQsTUFBSUMsU0FBUyxHQUFHbkssWUFBWSxDQUFDQyxPQUFELEVBQVVDLE9BQVYsQ0FBNUI7QUFDQSxNQUFJRSxRQUFRLEdBQUcrSixTQUFTLENBQUMvSixRQUF6QjtBQUNBLE1BQUlDLFFBQVEsR0FBRzhKLFNBQVMsQ0FBQzlKLFFBQXpCOztBQUVBLE1BQUlGLEtBQUssR0FBRyxFQUFaO0FBQ0EsTUFBSWlLLFNBQVMsR0FBRyxDQUFDL0osUUFBUSxHQUFHRCxRQUFaLElBQXdCekksTUFBTSxDQUFDRSxVQUEvQzs7QUFFQSxPQUFLLElBQUk2RyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxJQUFJL0csTUFBTSxDQUFDRSxVQUE1QixFQUF3QzZHLENBQUMsRUFBekMsRUFBNkM7QUFDekN5QixTQUFLLENBQUM4QixJQUFOLENBQVc3QixRQUFRLEdBQUdnSyxTQUFTLEdBQUcxTCxDQUFsQztBQUNIO0FBQ0QsU0FBT3lCLEtBQUssQ0FBQ2tLLE9BQU4sRUFBUDtBQUNIOztBQUVELFNBQVNDLFlBQVQsQ0FBc0IzSyxNQUF0QixFQUE4QnZDLElBQTlCLEVBQW9DekYsTUFBcEMsRUFBNEM7QUFDM0M7QUFDQSxNQUFJNFMsV0FBVyxHQUFDaFIsTUFBTSxDQUFDLEVBQUQsRUFBSTZELElBQUksQ0FBQzhGLEtBQUwsQ0FBV2dGLE1BQVgsSUFBbUIsRUFBQyxRQUFPLEVBQVIsRUFBdkIsQ0FBdEI7O0FBRUcsTUFBSXNDLE1BQU0sR0FBR2IsZ0JBQWdCLENBQUNoSyxNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLEVBQXVCNFMsV0FBVyxDQUFDNU4sSUFBbkMsQ0FBN0I7QUFDQSxNQUFJL0UsVUFBVSxHQUFHRCxNQUFNLENBQUNDLFVBQXhCO0FBQ0EsTUFBSTZTLFlBQVksR0FBR0QsTUFBTSxDQUFDNUssR0FBUCxDQUFXLFVBQVVDLElBQVYsRUFBZ0I7QUFDMUNBLFFBQUksR0FBR3hGLElBQUksQ0FBQ0MsT0FBTCxDQUFhdUYsSUFBYixFQUFtQixDQUFuQixDQUFQO0FBQ0FBLFFBQUksR0FBR3pDLElBQUksQ0FBQzZNLEtBQUwsQ0FBV2pJLE1BQVgsR0FBb0I1RSxJQUFJLENBQUM2TSxLQUFMLENBQVdqSSxNQUFYLENBQWtCMEksTUFBTSxDQUFDN0ssSUFBRCxDQUF4QixDQUFwQixHQUFzREEsSUFBN0Q7QUFDQWpJLGNBQVUsR0FBR2lELElBQUksQ0FBQytELEdBQUwsQ0FBU2hILFVBQVQsRUFBcUIwSSxXQUFXLENBQUNULElBQUQsQ0FBWCxHQUFvQixDQUF6QyxDQUFiO0FBQ0EsV0FBT0EsSUFBUDtBQUNILEdBTGtCLENBQW5CO0FBTUEsTUFBSXpDLElBQUksQ0FBQzZNLEtBQUwsQ0FBV1UsUUFBWCxLQUF3QixJQUE1QixFQUFrQztBQUM5Qi9TLGNBQVUsR0FBRyxDQUFiO0FBQ0g7O0FBRUQsU0FBTyxFQUFFNlMsWUFBWSxFQUFFQSxZQUFoQixFQUE4QkQsTUFBTSxFQUFFQSxNQUF0QyxFQUE4QzVTLFVBQVUsRUFBRUEsVUFBMUQsRUFBUDtBQUNIOztBQUVELFNBQVNnVCxtQkFBVCxDQUE2QjFCLEtBQTdCLEVBQW1DdkosTUFBbkMsRUFBMkN2QyxJQUEzQyxFQUFpRHpGLE1BQWpELEVBQXlENkYsV0FBekQsRUFBc0U7QUFDbEUsTUFBSWdOLE1BQU0sR0FBR2IsZ0JBQWdCLENBQUNoSyxNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLENBQTdCO0FBQ0gsTUFBSTZRLFlBQVksR0FBR3BMLElBQUksQ0FBQ3pCLE1BQUwsR0FBYyxJQUFJaEUsTUFBTSxDQUFDTyxPQUF6QixHQUFtQ1AsTUFBTSxDQUFDRyxXQUExQyxHQUF3REgsTUFBTSxDQUFDSyxZQUFsRjtBQUNBLE1BQUk2UyxNQUFNLEdBQUNMLE1BQU0sQ0FBQyxDQUFELENBQWpCO0FBQ0EsTUFBSU0sTUFBTSxHQUFDTixNQUFNLENBQUNBLE1BQU0sQ0FBQ3pRLE1BQVAsR0FBYyxDQUFmLENBQWpCO0FBQ0EsTUFBSWdSLE9BQU8sR0FBQ3BULE1BQU0sQ0FBQ08sT0FBbkI7QUFDQSxNQUFJOFMsT0FBTyxHQUFDclQsTUFBTSxDQUFDTyxPQUFQLEdBQWVzUSxZQUEzQjtBQUNBLE1BQUkzSSxJQUFJLEdBQUNnTCxNQUFNLEdBQUMsQ0FBQ0EsTUFBTSxHQUFDQyxNQUFSLEtBQWlCNUIsS0FBSyxHQUFDNkIsT0FBdkIsS0FBaUNDLE9BQU8sR0FBQ0QsT0FBekMsQ0FBaEI7QUFDQWxMLE1BQUksR0FBR3pDLElBQUksQ0FBQzZNLEtBQUwsQ0FBV2pJLE1BQVgsR0FBb0I1RSxJQUFJLENBQUM2TSxLQUFMLENBQVdqSSxNQUFYLENBQWtCMEksTUFBTSxDQUFDN0ssSUFBRCxDQUF4QixDQUFwQixHQUFzREEsSUFBN0Q7QUFDRyxTQUFPQSxJQUFQO0FBQ0g7O0FBRUQsU0FBU29MLGFBQVQsQ0FBdUJDLE9BQXZCLEVBQStCOU4sSUFBL0IsRUFBcUM7QUFDcEMsTUFBR0EsSUFBSSxDQUFDK04sVUFBTCxLQUFrQixJQUFyQixFQUEwQjtBQUN6QkQsV0FBTyxDQUFDRSxTQUFSLENBQWtCaE8sSUFBSSxDQUFDekIsTUFBdkIsRUFBK0IsQ0FBL0I7QUFDQXVQLFdBQU8sQ0FBQzlTLE1BQVIsQ0FBZSxLQUFLeUMsSUFBSSxDQUFDbUQsRUFBVixHQUFlLEdBQTlCO0FBQ0EsR0FIRCxNQUdNLElBQUdaLElBQUksQ0FBQ2lPLFFBQUwsS0FBZ0IsSUFBbkIsRUFBd0I7QUFDN0JILFdBQU8sQ0FBQ0UsU0FBUixDQUFrQmhPLElBQUksQ0FBQ3pCLE1BQXZCLEVBQStCLENBQS9CO0FBQ0F1UCxXQUFPLENBQUM5UyxNQUFSLENBQWUsS0FBS3lDLElBQUksQ0FBQ21ELEVBQVYsR0FBZSxHQUE5QjtBQUNBWixRQUFJLENBQUNpTyxRQUFMLEdBQWMsSUFBZDtBQUNBO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QjdNLE1BQXhCLEVBQWdDcUIsS0FBaEMsRUFBdUN5TCxLQUF2QyxFQUE4Q0wsT0FBOUMsRUFBc0Q5TixJQUF0RCxFQUE0RDtBQUN4RDhOLFNBQU8sQ0FBQ00sU0FBUjtBQUNBTixTQUFPLENBQUNPLGNBQVIsQ0FBdUIsU0FBdkI7QUFDQVAsU0FBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsU0FBTyxDQUFDUyxZQUFSLENBQXFCN0wsS0FBckI7QUFDQSxNQUFJeUwsS0FBSyxLQUFLLFNBQWQsRUFBeUI7QUFDckI5TSxVQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ2xDLFVBQUlnRyxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNmcUwsZUFBTyxDQUFDVSxNQUFSLENBQWUvTCxJQUFJLENBQUMxRSxDQUFwQixFQUF1QjBFLElBQUksQ0FBQ25FLENBQUwsR0FBUyxHQUFoQztBQUNBd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFMLEdBQVMsR0FBeEIsRUFBNkIwRSxJQUFJLENBQUNuRSxDQUFsQztBQUNBd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFwQixFQUF1QjBFLElBQUksQ0FBQ25FLENBQUwsR0FBUyxHQUFoQztBQUNBd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFMLEdBQVMsR0FBeEIsRUFBNkIwRSxJQUFJLENBQUNuRSxDQUFsQztBQUNBd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFwQixFQUF1QjBFLElBQUksQ0FBQ25FLENBQUwsR0FBUyxHQUFoQztBQUNIO0FBQ0osS0FSRDtBQVNILEdBVkQsTUFVTyxJQUFJNlAsS0FBSyxLQUFLLFFBQWQsRUFBd0I7QUFDM0I5TSxVQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ2xDLFVBQUlnRyxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNmcUwsZUFBTyxDQUFDVSxNQUFSLENBQWUvTCxJQUFJLENBQUMxRSxDQUFMLEdBQVMsTUFBSWlDLElBQUksQ0FBQ2pGLFVBQWpDLEVBQTZDMEgsSUFBSSxDQUFDbkUsQ0FBbEQ7QUFDQXdQLGVBQU8sQ0FBQ1ksR0FBUixDQUFZak0sSUFBSSxDQUFDMUUsQ0FBakIsRUFBb0IwRSxJQUFJLENBQUNuRSxDQUF6QixFQUE0QixJQUFFMEIsSUFBSSxDQUFDakYsVUFBbkMsRUFBK0MsQ0FBL0MsRUFBa0QsSUFBSTBDLElBQUksQ0FBQ21ELEVBQTNELEVBQStELEtBQS9EO0FBQ0g7QUFDSixLQUxEO0FBTUgsR0FQTSxNQU9BLElBQUl1TixLQUFLLEtBQUssTUFBZCxFQUFzQjtBQUN6QjlNLFVBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDbEMsVUFBSWdHLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2ZxTCxlQUFPLENBQUNVLE1BQVIsQ0FBZS9MLElBQUksQ0FBQzFFLENBQUwsR0FBUyxHQUF4QixFQUE2QjBFLElBQUksQ0FBQ25FLENBQUwsR0FBUyxHQUF0QztBQUNBd1AsZUFBTyxDQUFDYSxJQUFSLENBQWFsTSxJQUFJLENBQUMxRSxDQUFMLEdBQVMsR0FBdEIsRUFBMkIwRSxJQUFJLENBQUNuRSxDQUFMLEdBQVMsR0FBcEMsRUFBeUMsQ0FBekMsRUFBNEMsQ0FBNUM7QUFDSDtBQUNKLEtBTEQ7QUFNSCxHQVBNLE1BT0EsSUFBSTZQLEtBQUssS0FBSyxVQUFkLEVBQTBCO0FBQzdCOU0sVUFBTSxDQUFDa0MsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNsQyxVQUFJZ0csSUFBSSxLQUFLLElBQWIsRUFBbUI7QUFDZnFMLGVBQU8sQ0FBQ1UsTUFBUixDQUFlL0wsSUFBSSxDQUFDMUUsQ0FBcEIsRUFBdUIwRSxJQUFJLENBQUNuRSxDQUFMLEdBQVMsR0FBaEM7QUFDQXdQLGVBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBSSxDQUFDMUUsQ0FBTCxHQUFTLEdBQXhCLEVBQTZCMEUsSUFBSSxDQUFDbkUsQ0FBTCxHQUFTLEdBQXRDO0FBQ0F3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQzFFLENBQUwsR0FBUyxHQUF4QixFQUE2QjBFLElBQUksQ0FBQ25FLENBQUwsR0FBUyxHQUF0QztBQUNBd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFwQixFQUF1QjBFLElBQUksQ0FBQ25FLENBQUwsR0FBUyxHQUFoQztBQUNIO0FBQ0osS0FQRDtBQVFIO0FBQ0R3UCxTQUFPLENBQUNjLFNBQVI7QUFDQWQsU0FBTyxDQUFDZSxJQUFSO0FBQ0FmLFNBQU8sQ0FBQ2dCLE1BQVI7QUFDSDs7QUFFRCxTQUFTQyxhQUFULENBQXVCL08sSUFBdkIsRUFBNkJ6RixNQUE3QixFQUFxQ3VULE9BQXJDLEVBQThDO0FBQzFDLE1BQUlrQixhQUFhLEdBQUdoUCxJQUFJLENBQUNpUCxLQUFMLENBQVcvVCxRQUFYLElBQXVCWCxNQUFNLENBQUNrQixhQUFsRDtBQUNBLE1BQUl5VCxnQkFBZ0IsR0FBR2xQLElBQUksQ0FBQ21QLFFBQUwsQ0FBY2pVLFFBQWQsSUFBMEJYLE1BQU0sQ0FBQ29CLGdCQUF4RDtBQUNBLE1BQUlzVCxLQUFLLEdBQUdqUCxJQUFJLENBQUNpUCxLQUFMLENBQVd0SyxJQUFYLElBQW1CLEVBQS9CO0FBQ0EsTUFBSXdLLFFBQVEsR0FBR25QLElBQUksQ0FBQ21QLFFBQUwsQ0FBY3hLLElBQWQsSUFBc0IsRUFBckM7QUFDQSxNQUFJeUssY0FBYyxHQUFHcFAsSUFBSSxDQUFDaVAsS0FBTCxDQUFXdk0sS0FBWCxJQUFvQm5JLE1BQU0sQ0FBQ2lCLFVBQWhEO0FBQ0EsTUFBSTZULGlCQUFpQixHQUFHclAsSUFBSSxDQUFDbVAsUUFBTCxDQUFjek0sS0FBZCxJQUF1Qm5JLE1BQU0sQ0FBQ21CLGFBQXREO0FBQ0EsTUFBSTRULFdBQVcsR0FBR0wsS0FBSyxHQUFHRCxhQUFILEdBQW1CLENBQTFDO0FBQ0EsTUFBSU8sY0FBYyxHQUFHSixRQUFRLEdBQUdELGdCQUFILEdBQXNCLENBQW5EO0FBQ0EsTUFBSU0sTUFBTSxHQUFHLENBQWI7QUFDQSxNQUFJTCxRQUFKLEVBQWM7QUFDVixRQUFJTSxTQUFTLEdBQUd2TSxXQUFXLENBQUNpTSxRQUFELEVBQVdELGdCQUFYLENBQTNCO0FBQ0EsUUFBSTFELE1BQU0sR0FBRyxDQUFDeEwsSUFBSSxDQUFDM0IsS0FBTCxHQUFhb1IsU0FBZCxJQUEyQixDQUEzQixJQUFnQ3pQLElBQUksQ0FBQ21QLFFBQUwsQ0FBY08sT0FBZCxJQUF5QixDQUF6RCxDQUFiO0FBQ0EsUUFBSUMsTUFBTSxHQUFJLENBQUMzUCxJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNLLFlBQXJCLEdBQW9Dc1UsZ0JBQXJDLElBQXlELENBQTFELElBQWdFbFAsSUFBSSxDQUFDbVAsUUFBTCxDQUFjUyxPQUFkLElBQXlCLENBQXpGLENBQWI7QUFDQSxRQUFJWCxLQUFKLEVBQVc7QUFDUFUsWUFBTSxJQUFJLENBQUNMLFdBQVcsR0FBR0UsTUFBZixJQUF5QixDQUFuQztBQUNIO0FBQ0QxQixXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDK0IsV0FBUixDQUFvQlgsZ0JBQXBCO0FBQ0FwQixXQUFPLENBQUNTLFlBQVIsQ0FBcUJjLGlCQUFyQjtBQUNBdkIsV0FBTyxDQUFDZ0MsUUFBUixDQUFpQlgsUUFBakIsRUFBMkIzRCxNQUEzQixFQUFtQ21FLE1BQW5DO0FBQ0E3QixXQUFPLENBQUNjLFNBQVI7QUFDQWQsV0FBTyxDQUFDZ0IsTUFBUjtBQUNIO0FBQ0QsTUFBSUcsS0FBSixFQUFXO0FBQ1AsUUFBSWMsVUFBVSxHQUFHN00sV0FBVyxDQUFDK0wsS0FBRCxFQUFRRCxhQUFSLENBQTVCO0FBQ0EsUUFBSWdCLE9BQU8sR0FBRyxDQUFDaFEsSUFBSSxDQUFDM0IsS0FBTCxHQUFhMFIsVUFBZCxJQUE0QixDQUE1QixJQUFpQy9QLElBQUksQ0FBQ2lQLEtBQUwsQ0FBV1MsT0FBWCxJQUFzQixDQUF2RCxDQUFkO0FBQ0EsUUFBSU8sT0FBTyxHQUFJLENBQUNqUSxJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNLLFlBQXJCLEdBQW9Db1UsYUFBckMsSUFBc0QsQ0FBdkQsSUFBOERoUCxJQUFJLENBQUNpUCxLQUFMLENBQVdXLE9BQVgsSUFBc0IsQ0FBcEYsQ0FBZDtBQUNBLFFBQUlULFFBQUosRUFBYztBQUNWYyxhQUFPLElBQUksQ0FBQ1YsY0FBYyxHQUFHQyxNQUFsQixJQUE0QixDQUF2QztBQUNIO0FBQ0QxQixXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDK0IsV0FBUixDQUFvQmIsYUFBcEI7QUFDQWxCLFdBQU8sQ0FBQ1MsWUFBUixDQUFxQmEsY0FBckI7QUFDQXRCLFdBQU8sQ0FBQ2dDLFFBQVIsQ0FBaUJiLEtBQWpCLEVBQXdCZSxPQUF4QixFQUFpQ0MsT0FBakM7QUFDQW5DLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNnQixNQUFSO0FBQ0g7QUFDSjs7QUFFRCxTQUFTb0IsYUFBVCxDQUF1QjdPLE1BQXZCLEVBQStCa0IsTUFBL0IsRUFBdUNoSSxNQUF2QyxFQUErQ3VULE9BQS9DLEVBQXdEO0FBQ3BEO0FBQ0EsTUFBSW5LLElBQUksR0FBR3BCLE1BQU0sQ0FBQ29CLElBQWxCOzs7QUFHQXRDLFFBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDbEMsUUFBSWdHLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2Y7QUFDVHFMLGFBQU8sQ0FBQ00sU0FBUjtBQUNBTixhQUFPLENBQUMrQixXQUFSLENBQW9CdFYsTUFBTSxDQUFDVyxRQUEzQjtBQUNBNFMsYUFBTyxDQUFDUyxZQUFSLENBQXFCLFNBQXJCO0FBQ0EsVUFBSXRFLEtBQUssR0FBR3RHLElBQUksQ0FBQ2xILEtBQUQsQ0FBSixDQUFZd04sS0FBWixJQUFxQnRHLElBQUksQ0FBQ2xILEtBQUQsQ0FBckM7QUFDUyxVQUFJMFQsU0FBUyxHQUFHNU4sTUFBTSxDQUFDcUMsTUFBUCxHQUFnQnJDLE1BQU0sQ0FBQ3FDLE1BQVAsQ0FBY3FGLEtBQWQsQ0FBaEIsR0FBdUNBLEtBQXZEO0FBQ0E2RCxhQUFPLENBQUNnQyxRQUFSLENBQWlCSyxTQUFqQixFQUE0QjFOLElBQUksQ0FBQzFFLENBQUwsR0FBU21GLFdBQVcsQ0FBQ2lOLFNBQUQsQ0FBWCxHQUF5QixDQUE5RCxFQUFpRTFOLElBQUksQ0FBQ25FLENBQUwsR0FBUyxDQUExRTtBQUNUd1AsYUFBTyxDQUFDYyxTQUFSO0FBQ0FkLGFBQU8sQ0FBQ2dCLE1BQVI7QUFDTTtBQUNKLEdBWkQ7O0FBY0g7O0FBRUQsU0FBU3NCLGNBQVQsQ0FBd0IvRixXQUF4QixFQUFxQ3BELE1BQXJDLEVBQTZDb0osY0FBN0MsRUFBNkRyUSxJQUE3RCxFQUFtRXpGLE1BQW5FLEVBQTJFdVQsT0FBM0UsRUFBb0Y7QUFDaEY3RyxRQUFNLElBQUlvRCxXQUFXLENBQUNoTSxLQUFaLEdBQWtCLENBQWxCLEdBQW9COUQsTUFBTSxDQUFDMkIsb0JBQXJDOztBQUVILE1BQUk0TixVQUFVLEdBQUNPLFdBQVcsQ0FBQzVKLFVBQVosR0FBdUI0SixXQUFXLENBQUMzSixRQUFuQyxHQUE0QyxDQUEzRDtBQUNBLE1BQUk0UCxVQUFVLEdBQUN4RyxVQUFVLEdBQUNPLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JDLFdBQWhEO0FBQ0EsTUFBSUMsV0FBVyxHQUFDcEcsV0FBVyxDQUFDcUcsU0FBWixHQUFzQnJHLFdBQVcsQ0FBQ3NHLFdBQWxEO0FBQ0EsTUFBSUgsV0FBVyxHQUFDQyxXQUFXLEdBQUNwRyxXQUFXLENBQUNrRyxTQUFaLENBQXNCQyxXQUFsRDtBQUNBLE1BQUlJLFFBQVEsR0FBQ3ZHLFdBQVcsQ0FBQzVKLFVBQXpCO0FBQ0EsTUFBSW9RLFNBQVMsR0FBQ3hHLFdBQVcsQ0FBQ3NHLFdBQTFCO0FBQ0EsT0FBSSxJQUFJclAsQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxHQUFDK0ksV0FBVyxDQUFDa0csU0FBWixDQUFzQkMsV0FBdEIsR0FBa0MsQ0FBaEQsRUFBa0RsUCxDQUFDLEVBQW5ELEVBQXNEO0FBQ3JELFFBQUl3UCxHQUFHLEdBQUc7QUFDTi9TLE9BQUMsRUFBRWtKLE1BQU0sR0FBR3hKLElBQUksQ0FBQ2lNLEdBQUwsQ0FBU2tILFFBQVEsR0FBQ25ULElBQUksQ0FBQ21ELEVBQXZCLENBRE47QUFFTnRDLE9BQUMsRUFBRTJJLE1BQU0sR0FBR3hKLElBQUksQ0FBQ3VMLEdBQUwsQ0FBUzRILFFBQVEsR0FBQ25ULElBQUksQ0FBQ21ELEVBQXZCLENBRk4sRUFBVjs7QUFJQWtRLE9BQUcsQ0FBQy9TLENBQUosSUFBT3NTLGNBQWMsQ0FBQ3RTLENBQWYsR0FBaUJtRixXQUFXLENBQUMyTixTQUFELENBQVgsR0FBdUIsQ0FBL0M7QUFDQUMsT0FBRyxDQUFDeFMsQ0FBSixJQUFPK1IsY0FBYyxDQUFDL1IsQ0FBdEI7QUFDQSxRQUFJa04sTUFBTSxHQUFHc0YsR0FBRyxDQUFDL1MsQ0FBakI7QUFDQSxRQUFJNFIsTUFBTSxHQUFHbUIsR0FBRyxDQUFDeFMsQ0FBakI7O0FBRUF3UCxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDK0IsV0FBUixDQUFvQnRWLE1BQU0sQ0FBQ1csUUFBM0I7QUFDQTRTLFdBQU8sQ0FBQ1MsWUFBUixDQUFxQmxFLFdBQVcsQ0FBQzBHLFVBQVosSUFBMEIsU0FBL0M7QUFDQWpELFdBQU8sQ0FBQ2dDLFFBQVIsQ0FBaUJlLFNBQWpCLEVBQTRCckYsTUFBNUIsRUFBb0NtRSxNQUFNLEdBQUdwVixNQUFNLENBQUNXLFFBQVAsR0FBa0IsQ0FBL0Q7QUFDQTRTLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNnQixNQUFSOztBQUVBOEIsWUFBUSxJQUFFTixVQUFWO0FBQ0EsUUFBR00sUUFBUSxJQUFFLENBQWIsRUFBZTtBQUNkQSxjQUFRLEdBQUNBLFFBQVEsR0FBRyxDQUFwQjtBQUNBO0FBQ0RDLGFBQVMsSUFBRUwsV0FBWDtBQUNBOztBQUVEOztBQUVELFNBQVNRLGNBQVQsQ0FBd0I1SixTQUF4QixFQUFtQ0gsTUFBbkMsRUFBMkNvSixjQUEzQyxFQUEyRHJRLElBQTNELEVBQWlFekYsTUFBakUsRUFBeUV1VCxPQUF6RSxFQUFrRjtBQUM5RSxNQUFJM0UsV0FBVyxHQUFHbkosSUFBSSxDQUFDOEYsS0FBTCxDQUFXc0QsS0FBWCxJQUFvQixFQUF0QztBQUNBbkMsUUFBTSxJQUFJMU0sTUFBTSxDQUFDMEIsb0JBQWpCOztBQUVBbUwsV0FBUyxDQUFDN0QsT0FBVixDQUFrQixVQUFVL0MsS0FBVixFQUFpQi9ELEtBQWpCLEVBQXdCO0FBQ3RDLFFBQUlxVSxHQUFHLEdBQUc7QUFDTi9TLE9BQUMsRUFBRWtKLE1BQU0sR0FBR3hKLElBQUksQ0FBQ2lNLEdBQUwsQ0FBU2xKLEtBQVQsQ0FETjtBQUVObEMsT0FBQyxFQUFFMkksTUFBTSxHQUFHeEosSUFBSSxDQUFDdUwsR0FBTCxDQUFTeEksS0FBVCxDQUZOLEVBQVY7O0FBSUEsUUFBSXlRLGlCQUFpQixHQUFHL08sdUJBQXVCLENBQUM0TyxHQUFHLENBQUMvUyxDQUFMLEVBQVErUyxHQUFHLENBQUN4UyxDQUFaLEVBQWUrUixjQUFmLENBQS9DO0FBQ0EsUUFBSTdFLE1BQU0sR0FBR3lGLGlCQUFpQixDQUFDbFQsQ0FBL0I7QUFDQSxRQUFJNFIsTUFBTSxHQUFHc0IsaUJBQWlCLENBQUMzUyxDQUEvQjtBQUNBLFFBQUlyQixJQUFJLENBQUNLLGtCQUFMLENBQXdCd1QsR0FBRyxDQUFDL1MsQ0FBNUIsRUFBK0IsQ0FBL0IsQ0FBSixFQUF1QztBQUNuQ3lOLFlBQU0sSUFBSXRJLFdBQVcsQ0FBQ2xELElBQUksQ0FBQ0ssVUFBTCxDQUFnQjVELEtBQWhCLEtBQTBCLEVBQTNCLENBQVgsR0FBNEMsQ0FBdEQ7QUFDSCxLQUZELE1BRU8sSUFBSXFVLEdBQUcsQ0FBQy9TLENBQUosR0FBUSxDQUFaLEVBQWU7QUFDbEJ5TixZQUFNLElBQUl0SSxXQUFXLENBQUNsRCxJQUFJLENBQUNLLFVBQUwsQ0FBZ0I1RCxLQUFoQixLQUEwQixFQUEzQixDQUFyQjtBQUNIO0FBQ1BxUixXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDK0IsV0FBUixDQUFvQnRWLE1BQU0sQ0FBQ1csUUFBM0I7QUFDQTRTLFdBQU8sQ0FBQ1MsWUFBUixDQUFxQnBGLFdBQVcsQ0FBQzRILFVBQVosSUFBMEIsU0FBL0M7QUFDTWpELFdBQU8sQ0FBQ2dDLFFBQVIsQ0FBaUI5UCxJQUFJLENBQUNLLFVBQUwsQ0FBZ0I1RCxLQUFoQixLQUEwQixFQUEzQyxFQUErQytPLE1BQS9DLEVBQXVEbUUsTUFBTSxHQUFHcFYsTUFBTSxDQUFDVyxRQUFQLEdBQWtCLENBQWxGO0FBQ040UyxXQUFPLENBQUNjLFNBQVI7QUFDQWQsV0FBTyxDQUFDZ0IsTUFBUjtBQUNHLEdBbkJEOztBQXFCSDs7QUFFRCxTQUFTb0MsV0FBVCxDQUFxQjNPLE1BQXJCLEVBQTZCdkMsSUFBN0IsRUFBbUN6RixNQUFuQyxFQUEyQ3VULE9BQTNDLEVBQW9EN0csTUFBcEQsRUFBNEQ5RSxNQUE1RCxFQUFvRTtBQUNoRSxNQUFJZ1AsVUFBVSxHQUFHbEssTUFBTSxHQUFHMU0sTUFBTSxDQUFDYyxtQkFBakM7QUFDQSxNQUFJK1Ysb0JBQW9CLEdBQUcsRUFBM0I7QUFDQSxNQUFJQyxjQUFjLEdBQUcsSUFBckI7O0FBRUEsTUFBSUMsYUFBYSxHQUFHL08sTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBVUMsSUFBVixFQUFnQjtBQUMzQyxRQUFJaU0sR0FBRyxHQUFHLElBQUlqUixJQUFJLENBQUNtRCxFQUFULElBQWU2QixJQUFJLENBQUNpRixPQUFMLEdBQWUsSUFBSWpLLElBQUksQ0FBQ21ELEVBQVQsR0FBYzZCLElBQUksQ0FBQ2tGLFlBQW5CLEdBQWtDLENBQWhFLENBQVY7QUFDQSxRQUFJeEUsSUFBSSxHQUFHVixJQUFJLENBQUNtQyxNQUFMLEdBQWNuQyxJQUFJLENBQUNtQyxNQUFMLENBQVksQ0FBQ25DLElBQUksQ0FBQ2tGLFlBQUwsQ0FBa0J6SyxPQUFsQixDQUEwQixDQUExQixDQUFiLENBQWQsR0FBMkRELElBQUksQ0FBQ0MsT0FBTCxDQUFhdUYsSUFBSSxDQUFDa0YsWUFBTCxHQUFvQixHQUFqQyxJQUF3QyxHQUE5RztBQUNBLFFBQUlqRixLQUFLLEdBQUdELElBQUksQ0FBQ0MsS0FBakI7QUFDQSxXQUFPLEVBQUVnTSxHQUFHLEVBQUVBLEdBQVAsRUFBWXZMLElBQUksRUFBRUEsSUFBbEIsRUFBd0JULEtBQUssRUFBRUEsS0FBL0IsRUFBUDtBQUNILEdBTG1CLENBQXBCO0FBTUE0TyxlQUFhLENBQUMvTixPQUFkLENBQXNCLFVBQVVkLElBQVYsRUFBZ0I7QUFDbEM7QUFDQSxRQUFJOE8sT0FBTyxHQUFHOVQsSUFBSSxDQUFDaU0sR0FBTCxDQUFTakgsSUFBSSxDQUFDaU0sR0FBZCxJQUFxQnlDLFVBQW5DO0FBQ0EsUUFBSUssT0FBTyxHQUFHL1QsSUFBSSxDQUFDdUwsR0FBTCxDQUFTdkcsSUFBSSxDQUFDaU0sR0FBZCxJQUFxQnlDLFVBQW5DOztBQUVBO0FBQ0EsUUFBSU0sT0FBTyxHQUFHaFUsSUFBSSxDQUFDaU0sR0FBTCxDQUFTakgsSUFBSSxDQUFDaU0sR0FBZCxJQUFxQnpILE1BQW5DO0FBQ0EsUUFBSXlLLE9BQU8sR0FBR2pVLElBQUksQ0FBQ3VMLEdBQUwsQ0FBU3ZHLElBQUksQ0FBQ2lNLEdBQWQsSUFBcUJ6SCxNQUFuQzs7QUFFQTtBQUNBLFFBQUkwSyxPQUFPLEdBQUdKLE9BQU8sSUFBSSxDQUFYLEdBQWVBLE9BQU8sR0FBR2hYLE1BQU0sQ0FBQ2UsbUJBQWhDLEdBQXNEaVcsT0FBTyxHQUFHaFgsTUFBTSxDQUFDZSxtQkFBckY7QUFDQSxRQUFJc1csT0FBTyxHQUFHSixPQUFkOztBQUVBLFFBQUkvQixTQUFTLEdBQUd2TSxXQUFXLENBQUNULElBQUksQ0FBQ1UsSUFBTixDQUEzQjtBQUNBLFFBQUl3TSxNQUFNLEdBQUdpQyxPQUFiOztBQUVBLFFBQUlQLGNBQWMsSUFBSXBVLElBQUksQ0FBQ1cscUJBQUwsQ0FBMkJ5VCxjQUFjLENBQUNqVCxLQUExQyxFQUFpRCxFQUFFTCxDQUFDLEVBQUU0VCxPQUFMLEVBQWpELENBQXRCLEVBQXdGO0FBQ3BGLFVBQUlBLE9BQU8sR0FBRyxDQUFkLEVBQWlCO0FBQ2JoQyxjQUFNLEdBQUdsUyxJQUFJLENBQUNnRSxHQUFMLENBQVNtUSxPQUFULEVBQWtCUCxjQUFjLENBQUNqVCxLQUFmLENBQXFCRSxDQUF2QyxDQUFUO0FBQ0gsT0FGRCxNQUVPLElBQUlpVCxPQUFPLEdBQUcsQ0FBZCxFQUFpQjtBQUNwQjVCLGNBQU0sR0FBR2xTLElBQUksQ0FBQytELEdBQUwsQ0FBU29RLE9BQVQsRUFBa0JQLGNBQWMsQ0FBQ2pULEtBQWYsQ0FBcUJFLENBQXZDLENBQVQ7QUFDSCxPQUZNLE1BRUE7QUFDSCxZQUFJc1QsT0FBTyxHQUFHLENBQWQsRUFBaUI7QUFDYmpDLGdCQUFNLEdBQUdsUyxJQUFJLENBQUMrRCxHQUFMLENBQVNvUSxPQUFULEVBQWtCUCxjQUFjLENBQUNqVCxLQUFmLENBQXFCRSxDQUF2QyxDQUFUO0FBQ0gsU0FGRCxNQUVPO0FBQ0hxUixnQkFBTSxHQUFHbFMsSUFBSSxDQUFDZ0UsR0FBTCxDQUFTbVEsT0FBVCxFQUFrQlAsY0FBYyxDQUFDalQsS0FBZixDQUFxQkUsQ0FBdkMsQ0FBVDtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxRQUFJcVQsT0FBTyxHQUFHLENBQWQsRUFBaUI7QUFDYkEsYUFBTyxJQUFJbEMsU0FBWDtBQUNIOztBQUVELFFBQUlvQyxVQUFVLEdBQUc7QUFDYkMsZUFBUyxFQUFFO0FBQ1AvVCxTQUFDLEVBQUUwVCxPQURJO0FBRVBuVCxTQUFDLEVBQUVvVCxPQUZJLEVBREU7O0FBS2JLLGFBQU8sRUFBRTtBQUNMaFUsU0FBQyxFQUFFd1QsT0FERTtBQUVMalQsU0FBQyxFQUFFa1QsT0FGRSxFQUxJOztBQVNicFQsV0FBSyxFQUFFO0FBQ0hMLFNBQUMsRUFBRTRULE9BREE7QUFFSHJULFNBQUMsRUFBRXFSLE1BRkEsRUFUTTs7QUFhYnRSLFdBQUssRUFBRW9SLFNBYk07QUFjYmxSLFlBQU0sRUFBRWhFLE1BQU0sQ0FBQ1csUUFkRjtBQWViaUksVUFBSSxFQUFFVixJQUFJLENBQUNVLElBZkU7QUFnQmJULFdBQUssRUFBRUQsSUFBSSxDQUFDQyxLQWhCQyxFQUFqQjs7O0FBbUJBMk8sa0JBQWMsR0FBR2pQLGNBQWMsQ0FBQ3lQLFVBQUQsRUFBYVIsY0FBYixDQUEvQjtBQUNBRCx3QkFBb0IsQ0FBQ3ZNLElBQXJCLENBQTBCd00sY0FBMUI7QUFDSCxHQXZERDs7QUF5REFELHNCQUFvQixDQUFDN04sT0FBckIsQ0FBNkIsVUFBVWQsSUFBVixFQUFnQjtBQUN6QyxRQUFJdVAsaUJBQWlCLEdBQUc5UCx1QkFBdUIsQ0FBQ08sSUFBSSxDQUFDcVAsU0FBTCxDQUFlL1QsQ0FBaEIsRUFBbUIwRSxJQUFJLENBQUNxUCxTQUFMLENBQWV4VCxDQUFsQyxFQUFxQzZELE1BQXJDLENBQS9DO0FBQ0EsUUFBSThQLGVBQWUsR0FBRy9QLHVCQUF1QixDQUFDTyxJQUFJLENBQUNzUCxPQUFMLENBQWFoVSxDQUFkLEVBQWlCMEUsSUFBSSxDQUFDc1AsT0FBTCxDQUFhelQsQ0FBOUIsRUFBaUM2RCxNQUFqQyxDQUE3QztBQUNBLFFBQUkrUCxZQUFZLEdBQUdoUSx1QkFBdUIsQ0FBQ08sSUFBSSxDQUFDckUsS0FBTCxDQUFXTCxDQUFaLEVBQWUwRSxJQUFJLENBQUNyRSxLQUFMLENBQVdFLENBQTFCLEVBQTZCNkQsTUFBN0IsQ0FBMUM7QUFDQTJMLFdBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQStTLFdBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ0E0UyxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDTyxjQUFSLENBQXVCNUwsSUFBSSxDQUFDQyxLQUE1QjtBQUNBb0wsV0FBTyxDQUFDUyxZQUFSLENBQXFCOUwsSUFBSSxDQUFDQyxLQUExQjtBQUNBb0wsV0FBTyxDQUFDVSxNQUFSLENBQWV3RCxpQkFBaUIsQ0FBQ2pVLENBQWpDLEVBQW9DaVUsaUJBQWlCLENBQUMxVCxDQUF0RDtBQUNBLFFBQUk2VCxXQUFXLEdBQUcxUCxJQUFJLENBQUNyRSxLQUFMLENBQVdMLENBQVgsR0FBZSxDQUFmLEdBQW1CbVUsWUFBWSxDQUFDblUsQ0FBYixHQUFpQjBFLElBQUksQ0FBQ3BFLEtBQXpDLEdBQWlENlQsWUFBWSxDQUFDblUsQ0FBaEY7QUFDQSxRQUFJcVUsVUFBVSxHQUFHM1AsSUFBSSxDQUFDckUsS0FBTCxDQUFXTCxDQUFYLEdBQWUsQ0FBZixHQUFtQm1VLFlBQVksQ0FBQ25VLENBQWIsR0FBaUIsQ0FBcEMsR0FBd0NtVSxZQUFZLENBQUNuVSxDQUFiLEdBQWlCLENBQTFFO0FBQ0ErUCxXQUFPLENBQUN1RSxnQkFBUixDQUF5QkosZUFBZSxDQUFDbFUsQ0FBekMsRUFBNENrVSxlQUFlLENBQUMzVCxDQUE1RCxFQUErRDZULFdBQS9ELEVBQTRFRCxZQUFZLENBQUM1VCxDQUF6RjtBQUNBd1AsV0FBTyxDQUFDVSxNQUFSLENBQWV3RCxpQkFBaUIsQ0FBQ2pVLENBQWpDLEVBQW9DaVUsaUJBQWlCLENBQUMxVCxDQUF0RDtBQUNBd1AsV0FBTyxDQUFDZ0IsTUFBUjtBQUNBaEIsV0FBTyxDQUFDYyxTQUFSO0FBQ0FkLFdBQU8sQ0FBQ00sU0FBUjtBQUNBTixXQUFPLENBQUNVLE1BQVIsQ0FBZTBELFlBQVksQ0FBQ25VLENBQWIsR0FBaUIwRSxJQUFJLENBQUNwRSxLQUFyQyxFQUE0QzZULFlBQVksQ0FBQzVULENBQXpEO0FBQ0F3UCxXQUFPLENBQUNZLEdBQVIsQ0FBWXlELFdBQVosRUFBeUJELFlBQVksQ0FBQzVULENBQXRDLEVBQXlDLENBQXpDLEVBQTRDLENBQTVDLEVBQStDLElBQUliLElBQUksQ0FBQ21ELEVBQXhEO0FBQ0FrTixXQUFPLENBQUNjLFNBQVI7QUFDQWQsV0FBTyxDQUFDZSxJQUFSO0FBQ0FmLFdBQU8sQ0FBQ00sU0FBUjtBQUNOTixXQUFPLENBQUMrQixXQUFSLENBQW9CdFYsTUFBTSxDQUFDVyxRQUEzQjtBQUNNNFMsV0FBTyxDQUFDUyxZQUFSLENBQXFCLFNBQXJCO0FBQ0FULFdBQU8sQ0FBQ2dDLFFBQVIsQ0FBaUJyTixJQUFJLENBQUNVLElBQXRCLEVBQTRCaVAsVUFBNUIsRUFBd0NGLFlBQVksQ0FBQzVULENBQWIsR0FBaUIsQ0FBekQ7QUFDQXdQLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNnQixNQUFSO0FBQ0FoQixXQUFPLENBQUNjLFNBQVI7QUFDSCxHQTVCRDtBQTZCSDs7QUFFRCxTQUFTMEQsb0JBQVQsQ0FBOEI1QyxPQUE5QixFQUF1QzFQLElBQXZDLEVBQTZDekYsTUFBN0MsRUFBcUR1VCxPQUFyRCxFQUE4RDtBQUM3RCxNQUFJeUUsYUFBYSxHQUFHdlMsSUFBSSxDQUFDOEYsS0FBTCxDQUFXME0sT0FBWCxJQUFzQixFQUExQztBQUNBRCxlQUFhLENBQUNFLFFBQWQsR0FBdUJGLGFBQWEsQ0FBQ0UsUUFBZCxJQUF3QnJQLFNBQXhCLEdBQW1DLE9BQW5DLEdBQTJDbVAsYUFBYSxDQUFDRSxRQUFoRjtBQUNBRixlQUFhLENBQUNHLFVBQWQsR0FBeUJILGFBQWEsQ0FBQ0csVUFBZCxJQUEwQnRQLFNBQTFCLEdBQXFDLENBQXJDLEdBQXVDbVAsYUFBYSxDQUFDRyxVQUE5RTtBQUNHLE1BQUkvQyxNQUFNLEdBQUdwVixNQUFNLENBQUNPLE9BQXBCO0FBQ0EsTUFBSTZYLElBQUksR0FBRzNTLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ08sT0FBckIsR0FBK0JQLE1BQU0sQ0FBQ0csV0FBdEMsR0FBb0RILE1BQU0sQ0FBQ0ssWUFBdEU7O0FBRUgsTUFBRzJYLGFBQWEsQ0FBQ0UsUUFBZCxJQUF3QixNQUEzQixFQUFrQztBQUNqQzNFLFdBQU8sQ0FBQzhFLFdBQVIsQ0FBb0IsQ0FBQ0wsYUFBYSxDQUFDRyxVQUFmLEVBQTBCSCxhQUFhLENBQUNHLFVBQXhDLENBQXBCO0FBQ0E7QUFDRTVFLFNBQU8sQ0FBQ00sU0FBUjtBQUNITixTQUFPLENBQUNPLGNBQVIsQ0FBdUJrRSxhQUFhLENBQUNNLFNBQWQsSUFBMkIsU0FBbEQ7QUFDQS9FLFNBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDRytTLFNBQU8sQ0FBQ1UsTUFBUixDQUFla0IsT0FBZixFQUF3QkMsTUFBeEI7QUFDQTdCLFNBQU8sQ0FBQ1csTUFBUixDQUFlaUIsT0FBZixFQUF3QmlELElBQXhCO0FBQ0E3RSxTQUFPLENBQUNjLFNBQVI7QUFDQWQsU0FBTyxDQUFDZ0IsTUFBUjtBQUNIaEIsU0FBTyxDQUFDOEUsV0FBUixDQUFvQixFQUFwQjs7QUFFQSxNQUFHTCxhQUFhLENBQUNPLFVBQWpCLEVBQTRCO0FBQzNCLFFBQUlDLFNBQVMsR0FBRy9TLElBQUksQ0FBQ0ssVUFBTCxDQUFnQkwsSUFBSSxDQUFDd1MsT0FBTCxDQUFhL1YsS0FBN0IsQ0FBaEI7QUFDQXFSLFdBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ0EsUUFBSXVVLFNBQVMsR0FBRzNCLE9BQU8sQ0FBQzVLLFdBQVIsQ0FBb0I2UCxTQUFwQixFQUErQjFVLEtBQS9DOztBQUVBLFFBQUkyVSxLQUFLLEdBQUd0RCxPQUFPLEdBQUduVixNQUFNLENBQUNxQixjQUFqQixHQUFrQyxNQUFNNlQsU0FBcEQ7QUFDQSxRQUFJd0QsS0FBSyxHQUFHTixJQUFaO0FBQ0E3RSxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDUyxZQUFSLENBQXFCOVAsUUFBUSxDQUFDOFQsYUFBYSxDQUFDVyxZQUFkLElBQThCM1ksTUFBTSxDQUFDc0IsaUJBQXRDLEVBQXlEMFcsYUFBYSxDQUFDWSxjQUFkLElBQWdDNVksTUFBTSxDQUFDdUIsY0FBaEcsQ0FBN0I7QUFDQWdTLFdBQU8sQ0FBQ08sY0FBUixDQUF1QmtFLGFBQWEsQ0FBQ1csWUFBZCxJQUE4QjNZLE1BQU0sQ0FBQ3NCLGlCQUE1RDtBQUNBaVMsV0FBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsV0FBTyxDQUFDYSxJQUFSLENBQWFxRSxLQUFiLEVBQW9CQyxLQUFwQixFQUEyQnhELFNBQVMsR0FBRyxJQUFJbFYsTUFBTSxDQUFDcUIsY0FBbEQsRUFBbUVyQixNQUFNLENBQUNXLFFBQVAsR0FBa0IsSUFBSVgsTUFBTSxDQUFDcUIsY0FBaEc7QUFDQWtTLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNnQixNQUFSO0FBQ0FoQixXQUFPLENBQUNlLElBQVI7O0FBRUFmLFdBQU8sQ0FBQ00sU0FBUjtBQUNBTixXQUFPLENBQUMrQixXQUFSLENBQW9CdFYsTUFBTSxDQUFDVyxRQUEzQjtBQUNBNFMsV0FBTyxDQUFDUyxZQUFSLENBQXFCZ0UsYUFBYSxDQUFDYSxjQUFkLElBQWdDN1ksTUFBTSxDQUFDOFksU0FBNUQ7QUFDQXZGLFdBQU8sQ0FBQ2dDLFFBQVIsQ0FBaUJpRCxTQUFqQixFQUE0QkMsS0FBSyxHQUFDLElBQUV6WSxNQUFNLENBQUNxQixjQUEzQyxFQUEyRHFYLEtBQUssR0FBQzFZLE1BQU0sQ0FBQ3FCLGNBQWIsR0FBNEJyQixNQUFNLENBQUNXLFFBQTlGO0FBQ0E0UyxXQUFPLENBQUNjLFNBQVI7QUFDQWQsV0FBTyxDQUFDZ0IsTUFBUjtBQUNBO0FBQ0Q7O0FBRUQsU0FBU3dFLHlCQUFULENBQW1DdFQsSUFBbkMsRUFBeUN6RixNQUF6QyxFQUFpRHVULE9BQWpELEVBQTBEMU4sV0FBMUQsRUFBdUVGLFdBQXZFLEVBQW9GO0FBQ25GLE1BQUlxUyxhQUFhLEdBQUd2UyxJQUFJLENBQUM4RixLQUFMLENBQVcwTSxPQUFYLElBQXNCLEVBQTFDO0FBQ0FELGVBQWEsQ0FBQ0UsUUFBZCxHQUF1QkYsYUFBYSxDQUFDRSxRQUFkLElBQXdCclAsU0FBeEIsR0FBbUMsT0FBbkMsR0FBMkNtUCxhQUFhLENBQUNFLFFBQWhGO0FBQ0FGLGVBQWEsQ0FBQ0csVUFBZCxHQUF5QkgsYUFBYSxDQUFDRyxVQUFkLElBQTBCdFAsU0FBMUIsR0FBcUMsQ0FBckMsR0FBdUNtUCxhQUFhLENBQUNHLFVBQTlFO0FBQ0EsTUFBSWxILE1BQU0sR0FBR2pSLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQlAsTUFBTSxDQUFDQyxVQUF4QixHQUFxQ0QsTUFBTSxDQUFDTSxlQUF6RDtBQUNBLE1BQUk0USxJQUFJLEdBQUd6TCxJQUFJLENBQUMzQixLQUFMLEdBQVc5RCxNQUFNLENBQUNPLE9BQTdCOztBQUVBLE1BQUd5WCxhQUFhLENBQUNFLFFBQWQsSUFBd0IsTUFBM0IsRUFBa0M7QUFDakMzRSxXQUFPLENBQUM4RSxXQUFSLENBQW9CLENBQUNMLGFBQWEsQ0FBQ0csVUFBZixFQUEwQkgsYUFBYSxDQUFDRyxVQUF4QyxDQUFwQjtBQUNBO0FBQ0U1RSxTQUFPLENBQUNNLFNBQVI7QUFDSE4sU0FBTyxDQUFDTyxjQUFSLENBQXVCa0UsYUFBYSxDQUFDTSxTQUFkLElBQTJCLFNBQWxEO0FBQ0EvRSxTQUFPLENBQUNRLFlBQVIsQ0FBcUIsSUFBRXRPLElBQUksQ0FBQ2pGLFVBQTVCO0FBQ0ErUyxTQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUJ4TCxJQUFJLENBQUN3UyxPQUFMLENBQWE3TSxNQUFiLENBQW9CckgsQ0FBM0M7QUFDQXdQLFNBQU8sQ0FBQ1csTUFBUixDQUFlaEQsSUFBZixFQUFxQnpMLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYTdNLE1BQWIsQ0FBb0JySCxDQUF6QztBQUNHd1AsU0FBTyxDQUFDYyxTQUFSO0FBQ0FkLFNBQU8sQ0FBQ2dCLE1BQVI7QUFDSGhCLFNBQU8sQ0FBQzhFLFdBQVIsQ0FBb0IsRUFBcEI7O0FBRUEsTUFBR0wsYUFBYSxDQUFDZ0IsVUFBakIsRUFBNEI7O0FBRTNCLFFBQUlSLFNBQVMsR0FBR3ZGLG1CQUFtQixDQUFDeE4sSUFBSSxDQUFDd1MsT0FBTCxDQUFhN00sTUFBYixDQUFvQnJILENBQXJCLEVBQXVCMEIsSUFBSSxDQUFDdUMsTUFBNUIsRUFBb0N2QyxJQUFwQyxFQUEwQ3pGLE1BQTFDLEVBQWlENkYsV0FBakQsQ0FBbkM7QUFDQTBOLFdBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ0EsUUFBSXVVLFNBQVMsR0FBRzNCLE9BQU8sQ0FBQzVLLFdBQVIsQ0FBb0I2UCxTQUFwQixFQUErQjFVLEtBQS9DOztBQUVBLFFBQUkyVSxLQUFLLEdBQUd4SCxNQUFNLEdBQUcsSUFBRWpSLE1BQU0sQ0FBQ3FCLGNBQWxCLEdBQW1DNlQsU0FBL0M7QUFDQSxRQUFJd0QsS0FBSyxHQUFHalQsSUFBSSxDQUFDd1MsT0FBTCxDQUFhN00sTUFBYixDQUFvQnJILENBQWhDO0FBQ0F3UCxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDUyxZQUFSLENBQXFCOVAsUUFBUSxDQUFDOFQsYUFBYSxDQUFDVyxZQUFkLElBQThCM1ksTUFBTSxDQUFDc0IsaUJBQXRDLEVBQXlEMFcsYUFBYSxDQUFDWSxjQUFkLElBQWdDNVksTUFBTSxDQUFDdUIsY0FBaEcsQ0FBN0I7QUFDQWdTLFdBQU8sQ0FBQ08sY0FBUixDQUF1QmtFLGFBQWEsQ0FBQ1csWUFBZCxJQUE4QjNZLE1BQU0sQ0FBQ3NCLGlCQUE1RDtBQUNBaVMsV0FBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsV0FBTyxDQUFDYSxJQUFSLENBQWFxRSxLQUFiLEVBQW9CQyxLQUFLLEdBQUMsTUFBSTFZLE1BQU0sQ0FBQ1csUUFBakIsR0FBMEJYLE1BQU0sQ0FBQ3FCLGNBQXJELEVBQXFFNlQsU0FBUyxHQUFHLElBQUlsVixNQUFNLENBQUNxQixjQUE1RixFQUE2R3JCLE1BQU0sQ0FBQ1csUUFBUCxHQUFrQixJQUFJWCxNQUFNLENBQUNxQixjQUExSTtBQUNBa1MsV0FBTyxDQUFDYyxTQUFSO0FBQ0FkLFdBQU8sQ0FBQ2dCLE1BQVI7QUFDQWhCLFdBQU8sQ0FBQ2UsSUFBUjs7QUFFQWYsV0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFdBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ0E0UyxXQUFPLENBQUNTLFlBQVIsQ0FBcUJnRSxhQUFhLENBQUNhLGNBQWQsSUFBZ0M3WSxNQUFNLENBQUM4WSxTQUE1RDtBQUNBdkYsV0FBTyxDQUFDZ0MsUUFBUixDQUFpQmlELFNBQWpCLEVBQTRCQyxLQUFLLEdBQUN6WSxNQUFNLENBQUNxQixjQUF6QyxFQUF5RHFYLEtBQUssR0FBQyxNQUFJMVksTUFBTSxDQUFDVyxRQUExRTtBQUNBNFMsV0FBTyxDQUFDYyxTQUFSO0FBQ0FkLFdBQU8sQ0FBQ2dCLE1BQVI7QUFDQTtBQUNEOzs7QUFHRCxTQUFTMEUsb0JBQVQsQ0FBOEI5RCxPQUE5QixFQUF1QzFQLElBQXZDLEVBQTZDekYsTUFBN0MsRUFBcUR1VCxPQUFyRCxFQUE4RDFOLFdBQTlELEVBQTJFO0FBQ3ZFLE1BQUl1UCxNQUFNLEdBQUdwVixNQUFNLENBQUNPLE9BQXBCO0FBQ0EsTUFBSTZYLElBQUksR0FBRzNTLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ08sT0FBckIsR0FBK0JQLE1BQU0sQ0FBQ0csV0FBdEMsR0FBb0RILE1BQU0sQ0FBQ0ssWUFBdEU7QUFDQWtULFNBQU8sQ0FBQ00sU0FBUjtBQUNITixTQUFPLENBQUNTLFlBQVIsQ0FBcUI5UCxRQUFRLENBQUMsU0FBRCxFQUFZLElBQVosQ0FBN0I7QUFDQXFQLFNBQU8sQ0FBQ2EsSUFBUixDQUFhZSxPQUFPLEdBQUN0UCxXQUFXLEdBQUMsQ0FBakMsRUFBb0N1UCxNQUFwQyxFQUE0Q3ZQLFdBQTVDLEVBQXlEdVMsSUFBSSxHQUFDaEQsTUFBOUQ7QUFDQTdCLFNBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxTQUFPLENBQUNlLElBQVI7QUFDQTs7QUFFRCxTQUFTNEUsV0FBVCxDQUFxQmhPLFFBQXJCLEVBQStCRSxNQUEvQixFQUF1QzNGLElBQXZDLEVBQTZDekYsTUFBN0MsRUFBcUR1VCxPQUFyRCxFQUE4RDFOLFdBQTlELEVBQTJFRixXQUEzRSxFQUF3RjtBQUN2RixNQUFJcVMsYUFBYSxHQUFHdlMsSUFBSSxDQUFDOEYsS0FBTCxDQUFXME0sT0FBWCxJQUFzQixFQUExQztBQUNHLE1BQUlrQixXQUFXLEdBQUcsSUFBRTFULElBQUksQ0FBQ2pGLFVBQXpCO0FBQ0EsTUFBSTRZLGlCQUFpQixHQUFHLElBQUUzVCxJQUFJLENBQUNqRixVQUEvQjtBQUNBLE1BQUk2WSxVQUFVLEdBQUcsSUFBRTVULElBQUksQ0FBQ2pGLFVBQXhCO0FBQ0EsTUFBSThZLGlCQUFpQixHQUFHLEtBQXhCO0FBQ0gsTUFBRzdULElBQUksQ0FBQ1QsSUFBTCxJQUFXLE1BQVgsSUFBcUJTLElBQUksQ0FBQ1QsSUFBTCxJQUFXLE1BQWhDLElBQXlDUyxJQUFJLENBQUNULElBQUwsSUFBVyxRQUFwRCxJQUFnRVMsSUFBSSxDQUFDVCxJQUFMLElBQVcsS0FBOUUsRUFBb0Y7QUFDbkYrUyx3QkFBb0IsQ0FBQ3RTLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYTdNLE1BQWIsQ0FBb0I1SCxDQUFyQixFQUF3QmlDLElBQXhCLEVBQThCekYsTUFBOUIsRUFBc0N1VCxPQUF0QyxDQUFwQjtBQUNBOztBQUVFbkksUUFBTSxHQUFHeEosTUFBTSxDQUFDO0FBQ1o0QixLQUFDLEVBQUUsQ0FEUztBQUVaTyxLQUFDLEVBQUUsQ0FGUyxFQUFEO0FBR1pxSCxRQUhZLENBQWY7QUFJQUEsUUFBTSxDQUFDckgsQ0FBUCxJQUFZLElBQUUwQixJQUFJLENBQUNqRixVQUFuQjtBQUNBLE1BQUkwVSxTQUFTLEdBQUdoSyxRQUFRLENBQUNqRCxHQUFULENBQWEsVUFBVUMsSUFBVixFQUFnQjtBQUN6QyxXQUFPUyxXQUFXLENBQUNULElBQUksQ0FBQ1UsSUFBTixDQUFsQjtBQUNILEdBRmUsQ0FBaEI7O0FBSUEsTUFBSTJRLFlBQVksR0FBR0osV0FBVyxHQUFHQyxpQkFBZCxHQUFrQyxJQUFJcFosTUFBTSxDQUFDcUIsY0FBN0MsR0FBOEQ2QixJQUFJLENBQUMrRCxHQUFMLENBQVN5RCxLQUFULENBQWUsSUFBZixFQUFxQndLLFNBQXJCLENBQWpGO0FBQ0EsTUFBSXNFLGFBQWEsR0FBRyxJQUFJeFosTUFBTSxDQUFDcUIsY0FBWCxHQUE0QjZKLFFBQVEsQ0FBQzlJLE1BQVQsR0FBa0JwQyxNQUFNLENBQUN3QixpQkFBekU7O0FBRUE7QUFDQSxNQUFJNEosTUFBTSxDQUFDNUgsQ0FBUCxHQUFXTixJQUFJLENBQUNDLEdBQUwsQ0FBU3NDLElBQUksQ0FBQ2dVLGdCQUFkLENBQVgsR0FBNkNKLFVBQTdDLEdBQTBERSxZQUExRCxHQUF5RTlULElBQUksQ0FBQzNCLEtBQWxGLEVBQXlGO0FBQ3JGd1YscUJBQWlCLEdBQUcsSUFBcEI7QUFDSDs7QUFFRDtBQUNBL0YsU0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFNBQU8sQ0FBQ1MsWUFBUixDQUFxQjlQLFFBQVEsQ0FBQ3VCLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYWhOLE1BQWIsQ0FBb0J5TyxVQUFwQixJQUFrQzFaLE1BQU0sQ0FBQ3NCLGlCQUExQyxFQUE2RHRCLE1BQU0sQ0FBQ3VCLGNBQXBFLENBQTdCO0FBQ0EsTUFBSStYLGlCQUFKLEVBQXVCO0FBQ25CL0YsV0FBTyxDQUFDVSxNQUFSLENBQWU3SSxNQUFNLENBQUM1SCxDQUF0QixFQUF5QjRILE1BQU0sQ0FBQ3JILENBQVAsR0FBVyxLQUFHMEIsSUFBSSxDQUFDakYsVUFBNUM7QUFDQStTLFdBQU8sQ0FBQ1csTUFBUixDQUFlOUksTUFBTSxDQUFDNUgsQ0FBUCxHQUFXNlYsVUFBMUIsRUFBc0NqTyxNQUFNLENBQUNySCxDQUFQLEdBQVcsS0FBRzBCLElBQUksQ0FBQ2pGLFVBQW5CLEdBQWdDLElBQUVpRixJQUFJLENBQUNqRixVQUE3RTtBQUNBK1MsV0FBTyxDQUFDVyxNQUFSLENBQWU5SSxNQUFNLENBQUM1SCxDQUFQLEdBQVc2VixVQUExQixFQUFzQ2pPLE1BQU0sQ0FBQ3JILENBQTdDO0FBQ0F3UCxXQUFPLENBQUNXLE1BQVIsQ0FBZTlJLE1BQU0sQ0FBQzVILENBQVAsR0FBVzZWLFVBQVgsR0FBd0JuVyxJQUFJLENBQUNtSSxLQUFMLENBQVdrTyxZQUFYLENBQXZDLEVBQWlFbk8sTUFBTSxDQUFDckgsQ0FBeEU7QUFDQXdQLFdBQU8sQ0FBQ1csTUFBUixDQUFlOUksTUFBTSxDQUFDNUgsQ0FBUCxHQUFXNlYsVUFBWCxHQUF3Qm5XLElBQUksQ0FBQ21JLEtBQUwsQ0FBV2tPLFlBQVgsQ0FBdkMsRUFBaUVuTyxNQUFNLENBQUNySCxDQUFQLEdBQVN5VixhQUExRTtBQUNBakcsV0FBTyxDQUFDVyxNQUFSLENBQWU5SSxNQUFNLENBQUM1SCxDQUFQLEdBQVc2VixVQUExQixFQUFzQ2pPLE1BQU0sQ0FBQ3JILENBQVAsR0FBU3lWLGFBQS9DO0FBQ0FqRyxXQUFPLENBQUNXLE1BQVIsQ0FBZTlJLE1BQU0sQ0FBQzVILENBQVAsR0FBVzZWLFVBQTFCLEVBQXNDak8sTUFBTSxDQUFDckgsQ0FBUCxHQUFXLEtBQUcwQixJQUFJLENBQUNqRixVQUFuQixHQUFnQyxJQUFFaUYsSUFBSSxDQUFDakYsVUFBN0U7QUFDQStTLFdBQU8sQ0FBQ1csTUFBUixDQUFlOUksTUFBTSxDQUFDNUgsQ0FBdEIsRUFBeUI0SCxNQUFNLENBQUNySCxDQUFQLEdBQVcsS0FBRzBCLElBQUksQ0FBQ2pGLFVBQTVDO0FBQ0gsR0FURCxNQVNPO0FBQ0grUyxXQUFPLENBQUNVLE1BQVIsQ0FBZTdJLE1BQU0sQ0FBQzVILENBQXRCLEVBQXlCNEgsTUFBTSxDQUFDckgsQ0FBUCxHQUFXLEtBQUcwQixJQUFJLENBQUNqRixVQUE1QztBQUNBK1MsV0FBTyxDQUFDVyxNQUFSLENBQWU5SSxNQUFNLENBQUM1SCxDQUFQLEdBQVc2VixVQUExQixFQUFzQ2pPLE1BQU0sQ0FBQ3JILENBQVAsR0FBVyxLQUFHMEIsSUFBSSxDQUFDakYsVUFBbkIsR0FBZ0MsSUFBRWlGLElBQUksQ0FBQ2pGLFVBQTdFO0FBQ04rUyxXQUFPLENBQUNXLE1BQVIsQ0FBZTlJLE1BQU0sQ0FBQzVILENBQVAsR0FBVzZWLFVBQTFCLEVBQXNDak8sTUFBTSxDQUFDckgsQ0FBN0M7QUFDQXdQLFdBQU8sQ0FBQ1csTUFBUixDQUFlOUksTUFBTSxDQUFDNUgsQ0FBUCxHQUFXNlYsVUFBWCxHQUF3Qm5XLElBQUksQ0FBQ21JLEtBQUwsQ0FBV2tPLFlBQVgsQ0FBdkMsRUFBaUVuTyxNQUFNLENBQUNySCxDQUF4RTtBQUNBd1AsV0FBTyxDQUFDVyxNQUFSLENBQWU5SSxNQUFNLENBQUM1SCxDQUFQLEdBQVc2VixVQUFYLEdBQXdCblcsSUFBSSxDQUFDbUksS0FBTCxDQUFXa08sWUFBWCxDQUF2QyxFQUFpRW5PLE1BQU0sQ0FBQ3JILENBQVAsR0FBU3lWLGFBQTFFO0FBQ0FqRyxXQUFPLENBQUNXLE1BQVIsQ0FBZTlJLE1BQU0sQ0FBQzVILENBQVAsR0FBVzZWLFVBQTFCLEVBQXNDak8sTUFBTSxDQUFDckgsQ0FBUCxHQUFTeVYsYUFBL0M7QUFDTWpHLFdBQU8sQ0FBQ1csTUFBUixDQUFlOUksTUFBTSxDQUFDNUgsQ0FBUCxHQUFXNlYsVUFBMUIsRUFBc0NqTyxNQUFNLENBQUNySCxDQUFQLEdBQVcsS0FBRzBCLElBQUksQ0FBQ2pGLFVBQW5CLEdBQWdDLElBQUVpRixJQUFJLENBQUNqRixVQUE3RTtBQUNBK1MsV0FBTyxDQUFDVyxNQUFSLENBQWU5SSxNQUFNLENBQUM1SCxDQUF0QixFQUF5QjRILE1BQU0sQ0FBQ3JILENBQVAsR0FBVyxLQUFHMEIsSUFBSSxDQUFDakYsVUFBNUM7QUFDSDs7QUFFRCtTLFNBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxTQUFPLENBQUNlLElBQVI7O0FBRUE7QUFDQXBKLFVBQVEsQ0FBQ2xDLE9BQVQsQ0FBaUIsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQzFDLFFBQUdnRyxJQUFJLENBQUNDLEtBQUwsS0FBZSxJQUFsQixFQUF1QjtBQUN0Qm9MLGFBQU8sQ0FBQ00sU0FBUjtBQUNBTixhQUFPLENBQUNTLFlBQVIsQ0FBcUI5TCxJQUFJLENBQUNDLEtBQTFCO0FBQ0EsVUFBSThJLE1BQU0sR0FBRzdGLE1BQU0sQ0FBQzVILENBQVAsR0FBVzZWLFVBQVgsR0FBd0IsSUFBSXJaLE1BQU0sQ0FBQ3FCLGNBQWhEO0FBQ0EsVUFBSStULE1BQU0sR0FBR2hLLE1BQU0sQ0FBQ3JILENBQVAsR0FBVyxDQUFDL0QsTUFBTSxDQUFDd0IsaUJBQVAsR0FBMkJ4QixNQUFNLENBQUNXLFFBQW5DLElBQStDLENBQTFELEdBQThEWCxNQUFNLENBQUN3QixpQkFBUCxHQUEyQlUsS0FBekYsR0FBaUdsQyxNQUFNLENBQUNxQixjQUF4RyxHQUF5SCxDQUF0STtBQUNBLFVBQUlpWSxpQkFBSixFQUF1QjtBQUNuQnJJLGNBQU0sR0FBRzdGLE1BQU0sQ0FBQzVILENBQVAsR0FBVytWLFlBQVgsR0FBMEJGLFVBQTFCLEdBQXVDLElBQUlyWixNQUFNLENBQUNxQixjQUEzRDtBQUNIO0FBQ0RrUyxhQUFPLENBQUNvRyxRQUFSLENBQWlCMUksTUFBakIsRUFBeUJtRSxNQUF6QixFQUFpQytELFdBQWpDLEVBQThDblosTUFBTSxDQUFDVyxRQUFyRDtBQUNBNFMsYUFBTyxDQUFDYyxTQUFSO0FBQ0E7QUFDRSxHQVpEOztBQWNBOztBQUVBbkosVUFBUSxDQUFDbEMsT0FBVCxDQUFpQixVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDcEMsUUFBSStPLE1BQU0sR0FBRzdGLE1BQU0sQ0FBQzVILENBQVAsR0FBVzZWLFVBQVgsR0FBd0IsSUFBSXJaLE1BQU0sQ0FBQ3FCLGNBQW5DLEdBQW9EOFgsV0FBcEQsR0FBa0VDLGlCQUEvRTtBQUNBLFFBQUlFLGlCQUFKLEVBQXVCO0FBQ25CckksWUFBTSxHQUFHN0YsTUFBTSxDQUFDNUgsQ0FBUCxHQUFXK1YsWUFBWCxHQUEwQkYsVUFBMUIsR0FBdUMsSUFBSXJaLE1BQU0sQ0FBQ3FCLGNBQWxELEdBQW1FLENBQUM4WCxXQUFwRSxHQUFrRkMsaUJBQTNGO0FBQ0g7QUFDRCxRQUFJaEUsTUFBTSxHQUFHaEssTUFBTSxDQUFDckgsQ0FBUCxHQUFXLENBQUMvRCxNQUFNLENBQUN3QixpQkFBUCxHQUEyQnhCLE1BQU0sQ0FBQ1csUUFBbkMsSUFBK0MsQ0FBMUQsR0FBOERYLE1BQU0sQ0FBQ3dCLGlCQUFQLEdBQTJCVSxLQUF6RixHQUFpR2xDLE1BQU0sQ0FBQ3FCLGNBQXJIO0FBQ05rUyxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDK0IsV0FBUixDQUFvQnRWLE1BQU0sQ0FBQ1csUUFBM0I7QUFDQTRTLFdBQU8sQ0FBQ1MsWUFBUixDQUFxQixTQUFyQjtBQUNNVCxXQUFPLENBQUNnQyxRQUFSLENBQWlCck4sSUFBSSxDQUFDVSxJQUF0QixFQUE0QnFJLE1BQTVCLEVBQW9DbUUsTUFBTSxHQUFHcFYsTUFBTSxDQUFDVyxRQUFwRDtBQUNONFMsV0FBTyxDQUFDYyxTQUFSO0FBQ0FkLFdBQU8sQ0FBQ2dCLE1BQVI7QUFDRyxHQVpEO0FBYUg7O0FBRUQsU0FBU3FGLGNBQVQsQ0FBd0JsRixLQUF4QixFQUErQmpQLElBQS9CLEVBQXFDekYsTUFBckMsRUFBNkN1VCxPQUE3QyxFQUFzRDtBQUNsRCxNQUFJdEMsTUFBTSxHQUFHalIsTUFBTSxDQUFDRyxXQUFQLEdBQXFCLENBQUNzRixJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNHLFdBQXJCLEdBQW1Dd0ksV0FBVyxDQUFDK0wsS0FBRCxDQUEvQyxJQUEwRCxDQUE1RjtBQUNBbkIsU0FBTyxDQUFDc0csSUFBUjtBQUNBdEcsU0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFNBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ0E0UyxTQUFPLENBQUNTLFlBQVIsQ0FBcUJ2TyxJQUFJLENBQUM2TSxLQUFMLENBQVd1QyxjQUFYLElBQTZCLFNBQWxEO0FBQ0F0QixTQUFPLENBQUNFLFNBQVIsQ0FBa0IsQ0FBbEIsRUFBcUJoTyxJQUFJLENBQUN6QixNQUExQjtBQUNBdVAsU0FBTyxDQUFDOVMsTUFBUixDQUFlLENBQUMsRUFBRCxHQUFNeUMsSUFBSSxDQUFDbUQsRUFBWCxHQUFnQixHQUEvQjtBQUNBa04sU0FBTyxDQUFDZ0MsUUFBUixDQUFpQmIsS0FBakIsRUFBd0J6RCxNQUF4QixFQUFnQ2pSLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQixNQUFNUCxNQUFNLENBQUNXLFFBQTlEO0FBQ0E0UyxTQUFPLENBQUNjLFNBQVI7QUFDQWQsU0FBTyxDQUFDZ0IsTUFBUjtBQUNBaEIsU0FBTyxDQUFDdUcsT0FBUjtBQUNIOztBQUVELFNBQVNDLG9CQUFULENBQThCL1IsTUFBOUIsRUFBc0N2QyxJQUF0QyxFQUE0Q3pGLE1BQTVDLEVBQW9EdVQsT0FBcEQsRUFBNkQ7QUFDekQsTUFBSTVFLE9BQU8sR0FBR3hNLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQjBHLFNBQXpDLEdBQXFEMUcsU0FBUyxDQUFDLENBQUQsQ0FBOUQsR0FBb0UsQ0FBbEY7QUFDSCxNQUFJNlgsWUFBWSxHQUFHdlUsSUFBSSxDQUFDOEYsS0FBTCxDQUFXZ0YsTUFBWCxJQUFxQixFQUFDdkwsSUFBSSxFQUFDLEVBQU4sRUFBU2lWLEtBQUssRUFBQyxFQUFmLEVBQXhDO0FBQ0FELGNBQVksQ0FBQ2hWLElBQWIsR0FBa0JnVixZQUFZLENBQUNoVixJQUFiLElBQW1CNkQsU0FBbkIsR0FBOEIsT0FBOUIsR0FBc0NtUixZQUFZLENBQUNoVixJQUFyRTtBQUNBZ1YsY0FBWSxDQUFDQyxLQUFiLEdBQW1CRCxZQUFZLENBQUNDLEtBQWIsSUFBb0IsRUFBdkM7QUFDQUQsY0FBWSxDQUFDQyxLQUFiLENBQW1CeEosTUFBbkIsR0FBMEJ1SixZQUFZLENBQUNDLEtBQWIsQ0FBbUJ4SixNQUFuQixJQUEyQjVILFNBQTNCLEdBQXNDLENBQXRDLEdBQXdDbVIsWUFBWSxDQUFDQyxLQUFiLENBQW1CeEosTUFBckY7QUFDQXVKLGNBQVksQ0FBQ0MsS0FBYixDQUFtQkMsU0FBbkIsR0FBNkJGLFlBQVksQ0FBQ0MsS0FBYixDQUFtQkMsU0FBbkIsSUFBOEJyUixTQUE5QixHQUF5QyxTQUF6QyxHQUFtRG1SLFlBQVksQ0FBQ0MsS0FBYixDQUFtQkMsU0FBbkc7QUFDRyxNQUFJQyxhQUFhLEdBQUd4SCxZQUFZLENBQUMzSyxNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLENBQWhDO0FBQ0k2UyxRQUFNLEdBQUdzSCxhQUFhLENBQUN0SCxNQUQzQjs7QUFHQSxNQUFJMUUsZUFBZSxHQUFHQyxjQUFjLENBQUMzSSxJQUFJLENBQUNLLFVBQU4sRUFBa0JMLElBQWxCLEVBQXdCekYsTUFBeEIsQ0FBcEM7QUFDSTJGLGFBQVcsR0FBR3dJLGVBQWUsQ0FBQ3hJLFdBRGxDO0FBRUlFLGFBQVcsR0FBR3NJLGVBQWUsQ0FBQ3RJLFdBRmxDOztBQUlBLE1BQUk0QyxRQUFRLEdBQUdvSyxNQUFNLENBQUN1SCxHQUFQLEVBQWY7QUFDQSxNQUFJMVIsUUFBUSxHQUFHbUssTUFBTSxDQUFDd0gsS0FBUCxFQUFmO0FBQ0gsTUFBSXJQLFNBQVMsR0FBRyxFQUFoQjs7QUFFR3VJLFNBQU8sQ0FBQ3NHLElBQVI7QUFDQSxNQUFJcFUsSUFBSSxDQUFDZ1UsZ0JBQUwsSUFBeUJoVSxJQUFJLENBQUNnVSxnQkFBTCxLQUEwQixDQUFuRCxJQUF3RGhVLElBQUksQ0FBQ3NMLFlBQUwsS0FBc0IsSUFBbEYsRUFBd0Y7QUFDcEZ3QyxXQUFPLENBQUNFLFNBQVIsQ0FBa0JoTyxJQUFJLENBQUNnVSxnQkFBdkIsRUFBeUMsQ0FBekM7QUFDSDtBQUNKLE1BQUloVSxJQUFJLENBQUN3UyxPQUFMLElBQWdCeFMsSUFBSSxDQUFDd1MsT0FBTCxDQUFhL00sUUFBN0IsSUFBeUN6RixJQUFJLENBQUN3UyxPQUFMLENBQWEvTSxRQUFiLENBQXNCOUksTUFBL0QsSUFBeUV1TSxPQUFPLEtBQUssQ0FBekYsRUFBNEY7QUFDeEZzSyx3QkFBb0IsQ0FBQ3hULElBQUksQ0FBQ3dTLE9BQUwsQ0FBYTdNLE1BQWIsQ0FBb0I1SCxDQUFyQixFQUF3QmlDLElBQXhCLEVBQThCekYsTUFBOUIsRUFBc0N1VCxPQUF0QyxFQUErQzFOLFdBQS9DLENBQXBCO0FBQ0g7O0FBRUVtQyxRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVXNSLFVBQVYsRUFBc0I1SSxXQUF0QixFQUFtQztBQUM5QyxRQUFJdEksSUFBSSxHQUFHa1IsVUFBVSxDQUFDbFIsSUFBdEI7QUFDTixZQUFRNFEsWUFBWSxDQUFDaFYsSUFBckI7QUFDQSxXQUFLLE9BQUw7QUFDQyxZQUFJOEIsTUFBTSxHQUFHMEssYUFBYSxDQUFDcEksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTJPLE9BQW5FLENBQTFCO0FBQ0EsWUFBSTRMLGFBQWEsR0FBRzlJLGtCQUFrQixDQUFDckksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTBSLFdBQW5FLEVBQWdGMUosTUFBaEYsRUFBdUYyRyxPQUF2RixDQUF0QztBQUNBM0QsaUJBQVMsQ0FBQ1YsSUFBVixDQUFlaVEsYUFBZjtBQUNBelQsY0FBTSxHQUFHdUosYUFBYSxDQUFDdkosTUFBRCxFQUFTakIsV0FBVCxFQUFzQm1DLE1BQU0sQ0FBQzVGLE1BQTdCLEVBQXFDc1AsV0FBckMsRUFBa0QxUixNQUFsRCxFQUEwRHlGLElBQTFELENBQXRCO0FBQ0FxQixjQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3JDLGNBQUlnRyxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNsQnFMLG1CQUFPLENBQUNNLFNBQVI7QUFDQU4sbUJBQU8sQ0FBQ1MsWUFBUixDQUFxQjlMLElBQUksQ0FBQ0MsS0FBTCxJQUFjbVMsVUFBVSxDQUFDblMsS0FBOUM7QUFDQSxnQkFBSThJLE1BQU0sR0FBRy9JLElBQUksQ0FBQzFFLENBQUwsR0FBUzBFLElBQUksQ0FBQ3BFLEtBQUwsR0FBYSxDQUF0QixHQUEwQixDQUF2QztBQUNBLGdCQUFJRSxNQUFNLEdBQUd5QixJQUFJLENBQUN6QixNQUFMLEdBQWNrRSxJQUFJLENBQUNuRSxDQUFuQixHQUF1Qi9ELE1BQU0sQ0FBQ08sT0FBOUIsR0FBd0NQLE1BQU0sQ0FBQ0csV0FBL0MsR0FBNkRILE1BQU0sQ0FBQ0ssWUFBakY7QUFDQWtULG1CQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUIvSSxJQUFJLENBQUNuRSxDQUE1QjtBQUNBd1AsbUJBQU8sQ0FBQ29HLFFBQVIsQ0FBaUIxSSxNQUFqQixFQUF5Qi9JLElBQUksQ0FBQ25FLENBQTlCLEVBQWlDbUUsSUFBSSxDQUFDcEUsS0FBTCxHQUFhLENBQTlDLEVBQWlERSxNQUFqRDtBQUNBdVAsbUJBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxtQkFBTyxDQUFDZSxJQUFSO0FBQ0E7QUFDRCxTQVhEO0FBWUE7QUFDRCxXQUFLLE9BQUw7QUFDQztBQUNBLFlBQUl4TixNQUFNLEdBQUcySyxrQkFBa0IsQ0FBQ3JJLElBQUQsRUFBT1gsUUFBUCxFQUFpQkMsUUFBakIsRUFBMkIvQyxXQUEzQixFQUF3Q0UsV0FBeEMsRUFBcURKLElBQXJELEVBQTJEekYsTUFBM0QsRUFBbUUwUixXQUFuRSxFQUFnRjFKLE1BQWhGLEVBQXVGMkcsT0FBdkYsQ0FBL0I7QUFDQTNELGlCQUFTLENBQUNWLElBQVYsQ0FBZXhELE1BQWY7QUFDQUEsY0FBTSxHQUFHNEosa0JBQWtCLENBQUM1SixNQUFELEVBQVNqQixXQUFULEVBQXNCbUMsTUFBTSxDQUFDNUYsTUFBN0IsRUFBcUNzUCxXQUFyQyxFQUFrRDFSLE1BQWxELEVBQTBEeUYsSUFBMUQsRUFBK0R1QyxNQUEvRCxDQUEzQjs7QUFFQWxCLGNBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDckMsY0FBSWdHLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2xCcUwsbUJBQU8sQ0FBQ00sU0FBUjtBQUNBTixtQkFBTyxDQUFDUyxZQUFSLENBQXFCOUwsSUFBSSxDQUFDQyxLQUFMLElBQWNtUyxVQUFVLENBQUNuUyxLQUE5QztBQUNBLGdCQUFJOEksTUFBTSxHQUFHL0ksSUFBSSxDQUFDMUUsQ0FBTCxHQUFTMEUsSUFBSSxDQUFDcEUsS0FBTCxHQUFhLENBQXRCLEdBQTBCLENBQXZDO0FBQ0EsZ0JBQUlFLE1BQU0sR0FBR3lCLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2tFLElBQUksQ0FBQ25FLENBQW5CLEdBQXVCL0QsTUFBTSxDQUFDTyxPQUE5QixHQUF3Q1AsTUFBTSxDQUFDRyxXQUEvQyxHQUE2REgsTUFBTSxDQUFDSyxZQUFqRjtBQUNBLGdCQUFJd1IsT0FBTyxHQUFHcE0sSUFBSSxDQUFDekIsTUFBTCxHQUFja0UsSUFBSSxDQUFDNkosRUFBbkIsR0FBd0IvUixNQUFNLENBQUNPLE9BQS9CLEdBQXlDUCxNQUFNLENBQUNHLFdBQWhELEdBQThESCxNQUFNLENBQUNLLFlBQW5GO0FBQ0EsZ0JBQUdxUixXQUFXLEdBQUMsQ0FBZixFQUFpQjtBQUNoQjFOLG9CQUFNLElBQUk2TixPQUFWO0FBQ0E7QUFDRDBCLG1CQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUIvSSxJQUFJLENBQUNuRSxDQUE1QjtBQUNBd1AsbUJBQU8sQ0FBQ29HLFFBQVIsQ0FBaUIxSSxNQUFqQixFQUF5Qi9JLElBQUksQ0FBQ25FLENBQTlCLEVBQWlDbUUsSUFBSSxDQUFDcEUsS0FBTCxHQUFhLENBQTlDLEVBQWlERSxNQUFqRDtBQUNBdVAsbUJBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxtQkFBTyxDQUFDZSxJQUFSO0FBQ0E7QUFDRCxTQWZEO0FBZ0JBO0FBQ0QsV0FBSyxPQUFMO0FBQ0E7QUFDQyxZQUFJeE4sTUFBTSxHQUFHMEssYUFBYSxDQUFDcEksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTJPLE9BQW5FLENBQTFCO0FBQ0EzRCxpQkFBUyxDQUFDVixJQUFWLENBQWV4RCxNQUFmO0FBQ0FBLGNBQU0sR0FBRzBKLGtCQUFrQixDQUFDMUosTUFBRCxFQUFTakIsV0FBVCxFQUFzQm1DLE1BQU0sQ0FBQzVGLE1BQTdCLEVBQXFDc1AsV0FBckMsRUFBa0QxUixNQUFsRCxFQUEwRHlGLElBQTFELEVBQWdFdVUsWUFBWSxDQUFDQyxLQUFiLENBQW1CeEosTUFBbkYsQ0FBM0I7QUFDQSxZQUFHaUIsV0FBVyxJQUFFLENBQWhCLEVBQWtCO0FBQ2pCNUssZ0JBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDckMsZ0JBQUlnRyxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNsQjtBQUNBcUwscUJBQU8sQ0FBQ00sU0FBUjtBQUNBTixxQkFBTyxDQUFDUyxZQUFSLENBQXFCZ0csWUFBWSxDQUFDQyxLQUFiLENBQW1CQyxTQUF4QztBQUNBLGtCQUFJakosTUFBTSxHQUFHL0ksSUFBSSxDQUFDMUUsQ0FBTCxHQUFTMEUsSUFBSSxDQUFDcEUsS0FBTCxHQUFhLENBQXRCLEdBQTBCLENBQXZDO0FBQ0Esa0JBQUlFLE1BQU0sR0FBR3lCLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2tFLElBQUksQ0FBQ25FLENBQW5CLEdBQXVCL0QsTUFBTSxDQUFDTyxPQUE5QixHQUF3Q1AsTUFBTSxDQUFDRyxXQUEvQyxHQUE2REgsTUFBTSxDQUFDSyxZQUFqRjtBQUNBa1QscUJBQU8sQ0FBQ1UsTUFBUixDQUFlaEQsTUFBZixFQUF1Qi9JLElBQUksQ0FBQ25FLENBQTVCO0FBQ0F3UCxxQkFBTyxDQUFDb0csUUFBUixDQUFpQjFJLE1BQWpCLEVBQXlCL0ksSUFBSSxDQUFDbkUsQ0FBOUIsRUFBaUNtRSxJQUFJLENBQUNwRSxLQUFMLEdBQWEsQ0FBOUMsRUFBaURFLE1BQWpEO0FBQ0F1UCxxQkFBTyxDQUFDYyxTQUFSO0FBQ0FkLHFCQUFPLENBQUNlLElBQVI7QUFDQTtBQUNBZixxQkFBTyxDQUFDTSxTQUFSO0FBQ0FOLHFCQUFPLENBQUNPLGNBQVIsQ0FBdUJ3RyxVQUFVLENBQUNuUyxLQUFsQztBQUNBb0wscUJBQU8sQ0FBQ1EsWUFBUixDQUFxQmlHLFlBQVksQ0FBQ0MsS0FBYixDQUFtQnhKLE1BQW5CLEdBQTBCaEwsSUFBSSxDQUFDakYsVUFBcEQ7QUFDQStTLHFCQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQU0sR0FBQytJLFlBQVksQ0FBQ0MsS0FBYixDQUFtQnhKLE1BQW5CLEdBQTBCLEdBQWhELEVBQXFEdkksSUFBSSxDQUFDbkUsQ0FBTCxHQUFPQyxNQUE1RDtBQUNBdVAscUJBQU8sQ0FBQ1csTUFBUixDQUFlakQsTUFBTSxHQUFDK0ksWUFBWSxDQUFDQyxLQUFiLENBQW1CeEosTUFBbkIsR0FBMEIsR0FBaEQsRUFBcUR2SSxJQUFJLENBQUNuRSxDQUFMLEdBQU9pVyxZQUFZLENBQUNDLEtBQWIsQ0FBbUJ4SixNQUFuQixHQUEwQixHQUF0RjtBQUNBOEMscUJBQU8sQ0FBQ1csTUFBUixDQUFlakQsTUFBTSxHQUFDL0ksSUFBSSxDQUFDcEUsS0FBWixHQUFrQmtXLFlBQVksQ0FBQ0MsS0FBYixDQUFtQnhKLE1BQXBELEVBQTREdkksSUFBSSxDQUFDbkUsQ0FBTCxHQUFPaVcsWUFBWSxDQUFDQyxLQUFiLENBQW1CeEosTUFBbkIsR0FBMEIsR0FBN0Y7QUFDQThDLHFCQUFPLENBQUNXLE1BQVIsQ0FBZWpELE1BQU0sR0FBQy9JLElBQUksQ0FBQ3BFLEtBQVosR0FBa0JrVyxZQUFZLENBQUNDLEtBQWIsQ0FBbUJ4SixNQUFwRCxFQUE0RHZJLElBQUksQ0FBQ25FLENBQUwsR0FBT0MsTUFBbkU7QUFDQXVQLHFCQUFPLENBQUNnQixNQUFSO0FBQ0E7QUFDRCxXQXJCRDtBQXNCQSxTQXZCRCxNQXVCSztBQUNKek4sZ0JBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDckMsZ0JBQUlnRyxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNsQnFMLHFCQUFPLENBQUNNLFNBQVI7QUFDQU4scUJBQU8sQ0FBQ1MsWUFBUixDQUFxQjlMLElBQUksQ0FBQ0MsS0FBTCxJQUFjbVMsVUFBVSxDQUFDblMsS0FBOUM7QUFDQSxrQkFBSThJLE1BQU0sR0FBRy9JLElBQUksQ0FBQzFFLENBQUwsR0FBUzBFLElBQUksQ0FBQ3BFLEtBQUwsR0FBYSxDQUF0QixHQUEwQixDQUF2QztBQUNBLGtCQUFJRSxNQUFNLEdBQUd5QixJQUFJLENBQUN6QixNQUFMLEdBQWNrRSxJQUFJLENBQUNuRSxDQUFuQixHQUF1Qi9ELE1BQU0sQ0FBQ08sT0FBOUIsR0FBd0NQLE1BQU0sQ0FBQ0csV0FBL0MsR0FBNkRILE1BQU0sQ0FBQ0ssWUFBakY7QUFDQWtULHFCQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUIvSSxJQUFJLENBQUNuRSxDQUE1QjtBQUNBd1AscUJBQU8sQ0FBQ2EsSUFBUixDQUFhbkQsTUFBYixFQUFxQi9JLElBQUksQ0FBQ25FLENBQTFCLEVBQTZCbUUsSUFBSSxDQUFDcEUsS0FBTCxHQUFhLENBQTFDLEVBQTZDRSxNQUE3QztBQUNBdVAscUJBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxxQkFBTyxDQUFDZSxJQUFSO0FBQ0E7QUFDRCxXQVhEO0FBWUE7QUFDRCxjQXBGRDs7QUFzRkcsR0F4RkQ7QUF5RkgsTUFBSTdPLElBQUksQ0FBQytVLFNBQUwsS0FBbUIsS0FBbkIsSUFBNEI3TCxPQUFPLEtBQUssQ0FBNUMsRUFBK0M7QUFDM0MzRyxVQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVXNSLFVBQVYsRUFBc0I1SSxXQUF0QixFQUFtQztBQUM5QyxVQUFJdEksSUFBSSxHQUFHa1IsVUFBVSxDQUFDbFIsSUFBdEI7QUFDTixjQUFRNFEsWUFBWSxDQUFDaFYsSUFBckI7QUFDQyxhQUFLLE9BQUw7QUFDQSxjQUFJOEIsTUFBTSxHQUFHMEssYUFBYSxDQUFDcEksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTJPLE9BQW5FLENBQTFCO0FBQ0E3SCxnQkFBTSxHQUFHdUosYUFBYSxDQUFDdkosTUFBRCxFQUFTakIsV0FBVCxFQUFzQm1DLE1BQU0sQ0FBQzVGLE1BQTdCLEVBQXFDc1AsV0FBckMsRUFBa0QxUixNQUFsRCxFQUEwRHlGLElBQTFELENBQXRCO0FBQ0FrUSx1QkFBYSxDQUFDN08sTUFBRCxFQUFTd1QsVUFBVCxFQUFxQnRhLE1BQXJCLEVBQTZCdVQsT0FBN0IsQ0FBYjtBQUNBO0FBQ0EsYUFBSyxPQUFMO0FBQ0EsY0FBSXpNLE1BQU0sR0FBRzJLLGtCQUFrQixDQUFDckksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTBSLFdBQW5FLEVBQWdGMUosTUFBaEYsRUFBdUYyRyxPQUF2RixDQUEvQjtBQUNBZ0gsdUJBQWEsQ0FBQzdPLE1BQUQsRUFBU3dULFVBQVQsRUFBcUJ0YSxNQUFyQixFQUE2QnVULE9BQTdCLENBQWI7QUFDQTtBQUNBLGFBQUssT0FBTDtBQUNBLGNBQUl6TSxNQUFNLEdBQUcwSyxhQUFhLENBQUNwSSxJQUFELEVBQU9YLFFBQVAsRUFBaUJDLFFBQWpCLEVBQTJCL0MsV0FBM0IsRUFBd0NFLFdBQXhDLEVBQXFESixJQUFyRCxFQUEyRHpGLE1BQTNELEVBQW1FMk8sT0FBbkUsQ0FBMUI7QUFDQWdILHVCQUFhLENBQUM3TyxNQUFELEVBQVN3VCxVQUFULEVBQXFCdGEsTUFBckIsRUFBNkJ1VCxPQUE3QixDQUFiO0FBQ0EsZ0JBYkQ7O0FBZUcsS0FqQkQ7QUFrQkg7O0FBRUVBLFNBQU8sQ0FBQ3VHLE9BQVI7O0FBRUEsU0FBTztBQUNIblUsZUFBVyxFQUFFQSxXQURWO0FBRVRxRixhQUFTLEVBQUVBLFNBRkY7QUFHSG5GLGVBQVcsRUFBRUEsV0FIVixFQUFQOztBQUtIOztBQUVELFNBQVM0VSxvQkFBVCxDQUE4QnpTLE1BQTlCLEVBQXNDdkMsSUFBdEMsRUFBNEN6RixNQUE1QyxFQUFvRHVULE9BQXBELEVBQTZEO0FBQ3pELE1BQUk1RSxPQUFPLEdBQUd4TSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLENBQWxGO0FBQ0gsTUFBSXVZLFlBQVksR0FBR2pWLElBQUksQ0FBQzhGLEtBQUwsQ0FBV29QLE1BQVgsSUFBcUIsRUFBQ3hTLEtBQUssRUFBQyxFQUFQLEVBQVV5UyxPQUFPLEVBQUMsRUFBbEIsRUFBeEM7QUFDQUYsY0FBWSxDQUFDdlMsS0FBYixDQUFtQjBTLE1BQW5CLEdBQTBCSCxZQUFZLENBQUN2UyxLQUFiLENBQW1CMFMsTUFBbkIsR0FBMkJILFlBQVksQ0FBQ3ZTLEtBQWIsQ0FBbUIwUyxNQUE5QyxHQUFzRCxTQUFoRjtBQUNBSCxjQUFZLENBQUN2UyxLQUFiLENBQW1Cc0QsTUFBbkIsR0FBMEJpUCxZQUFZLENBQUN2UyxLQUFiLENBQW1Cc0QsTUFBbkIsR0FBMkJpUCxZQUFZLENBQUN2UyxLQUFiLENBQW1Cc0QsTUFBOUMsR0FBc0QsU0FBaEY7QUFDQWlQLGNBQVksQ0FBQ3ZTLEtBQWIsQ0FBbUIyUyxRQUFuQixHQUE0QkosWUFBWSxDQUFDdlMsS0FBYixDQUFtQjJTLFFBQW5CLEdBQTZCSixZQUFZLENBQUN2UyxLQUFiLENBQW1CMlMsUUFBaEQsR0FBMEQsU0FBdEY7QUFDQUosY0FBWSxDQUFDdlMsS0FBYixDQUFtQndELFFBQW5CLEdBQTRCK08sWUFBWSxDQUFDdlMsS0FBYixDQUFtQndELFFBQW5CLEdBQTZCK08sWUFBWSxDQUFDdlMsS0FBYixDQUFtQndELFFBQWhELEdBQTBELFNBQXRGO0FBQ0ErTyxjQUFZLENBQUNFLE9BQWIsQ0FBcUJHLElBQXJCLEdBQTRCTCxZQUFZLENBQUNFLE9BQWIsQ0FBcUJHLElBQXJCLEtBQTRCLElBQTVCLEdBQWtDLElBQWxDLEdBQXlDLEtBQXJFO0FBQ0FMLGNBQVksQ0FBQ0UsT0FBYixDQUFxQnhRLElBQXJCLEdBQTRCc1EsWUFBWSxDQUFDRSxPQUFiLENBQXFCeFEsSUFBckIsR0FBMkJzUSxZQUFZLENBQUNFLE9BQWIsQ0FBcUJ4USxJQUFoRCxHQUF1RCxFQUFuRjtBQUNBc1EsY0FBWSxDQUFDRSxPQUFiLENBQXFCSSxHQUFyQixHQUEyQk4sWUFBWSxDQUFDRSxPQUFiLENBQXFCSSxHQUFyQixHQUEwQk4sWUFBWSxDQUFDRSxPQUFiLENBQXFCSSxHQUEvQyxHQUFxRCxFQUFoRjtBQUNBTixjQUFZLENBQUNFLE9BQWIsQ0FBcUJ6UyxLQUFyQixHQUE2QnVTLFlBQVksQ0FBQ0UsT0FBYixDQUFxQnpTLEtBQXJCLEdBQTRCdVMsWUFBWSxDQUFDRSxPQUFiLENBQXFCelMsS0FBakQsR0FBeUQsQ0FBQyxTQUFELEVBQVksU0FBWixFQUF1QixTQUF2QixFQUFrQyxTQUFsQyxFQUE2QyxTQUE3QyxFQUF3RCxTQUF4RCxDQUF0RjtBQUNBMUMsTUFBSSxDQUFDOEYsS0FBTCxDQUFXb1AsTUFBWCxHQUFrQkQsWUFBbEI7O0FBRUcsTUFBSU8sY0FBYyxHQUFHdEksWUFBWSxDQUFDM0ssTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixDQUFqQztBQUNJNlMsUUFBTSxHQUFHb0ksY0FBYyxDQUFDcEksTUFENUI7O0FBR0EsTUFBSXFJLGdCQUFnQixHQUFHOU0sY0FBYyxDQUFDM0ksSUFBSSxDQUFDSyxVQUFOLEVBQWtCTCxJQUFsQixFQUF3QnpGLE1BQXhCLENBQXJDO0FBQ0kyRixhQUFXLEdBQUd1VixnQkFBZ0IsQ0FBQ3ZWLFdBRG5DO0FBRUlFLGFBQVcsR0FBR3FWLGdCQUFnQixDQUFDclYsV0FGbkM7O0FBSUEsTUFBSTRDLFFBQVEsR0FBR29LLE1BQU0sQ0FBQ3VILEdBQVAsRUFBZjtBQUNBLE1BQUkxUixRQUFRLEdBQUdtSyxNQUFNLENBQUN3SCxLQUFQLEVBQWY7QUFDQSxNQUFJclAsU0FBUyxHQUFHLEVBQWhCOztBQUVBdUksU0FBTyxDQUFDc0csSUFBUjtBQUNBLE1BQUlwVSxJQUFJLENBQUNnVSxnQkFBTCxJQUF5QmhVLElBQUksQ0FBQ2dVLGdCQUFMLEtBQTBCLENBQW5ELElBQXdEaFUsSUFBSSxDQUFDc0wsWUFBTCxLQUFzQixJQUFsRixFQUF3RjtBQUNwRndDLFdBQU8sQ0FBQ0UsU0FBUixDQUFrQmhPLElBQUksQ0FBQ2dVLGdCQUF2QixFQUF5QyxDQUF6QztBQUNIOztBQUVEelIsUUFBTSxDQUFDZ0IsT0FBUCxDQUFlLFVBQVVzUixVQUFWLEVBQXNCNUksV0FBdEIsRUFBbUM7QUFDOUMsUUFBSXRJLElBQUksR0FBR2tSLFVBQVUsQ0FBQ2xSLElBQXRCO0FBQ0EsUUFBSXRDLE1BQU0sR0FBR3FLLG1CQUFtQixDQUFDL0gsSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTJPLE9BQW5FLENBQWhDO0FBQ0EzRCxhQUFTLENBQUNWLElBQVYsQ0FBZXhELE1BQWY7QUFDQSxRQUFJcVUsY0FBYyxHQUFHN04sV0FBVyxDQUFDeEcsTUFBRCxDQUFoQztBQUNOcVUsa0JBQWMsR0FBQ0EsY0FBYyxDQUFDLENBQUQsQ0FBN0I7O0FBRU1BLGtCQUFjLENBQUNuUyxPQUFmLENBQXVCLFVBQVVsQyxNQUFWLEVBQWtCNUUsS0FBbEIsRUFBeUI7QUFDckRxUixhQUFPLENBQUNNLFNBQVI7QUFDQTtBQUNBLFVBQUd6SyxJQUFJLENBQUNsSCxLQUFELENBQUosQ0FBWSxDQUFaLElBQWVrSCxJQUFJLENBQUNsSCxLQUFELENBQUosQ0FBWSxDQUFaLENBQWYsR0FBOEIsQ0FBakMsRUFBbUM7QUFDbENxUixlQUFPLENBQUNPLGNBQVIsQ0FBdUI0RyxZQUFZLENBQUN2UyxLQUFiLENBQW1CMFMsTUFBMUM7QUFDQXRILGVBQU8sQ0FBQ1MsWUFBUixDQUFxQjBHLFlBQVksQ0FBQ3ZTLEtBQWIsQ0FBbUJzRCxNQUF4QztBQUNBOEgsZUFBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsZUFBTyxDQUFDVSxNQUFSLENBQWVuTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDLEVBSmtDLENBSU87QUFDekN3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEMsRUFMa0MsQ0FLTztBQUN6Q3dQLGVBQU8sQ0FBQ1csTUFBUixDQUFlcE4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBVixHQUFZcUMsV0FBVyxHQUFDLENBQXZDLEVBQTBDaUIsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBcEQsRUFOa0MsQ0FNcUI7QUFDdkR3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQVYsR0FBWXFDLFdBQVcsR0FBQyxDQUF2QyxFQUEwQ2lCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXBELEVBUGtDLENBT3FCO0FBQ3ZEd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVwTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDLEVBUmtDLENBUU87QUFDekN3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEMsRUFUa0MsQ0FTTztBQUN6Q3dQLGVBQU8sQ0FBQ1csTUFBUixDQUFlcE4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QyxFQVZrQyxDQVVPO0FBQ3pDd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVwTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUFWLEdBQVlxQyxXQUFXLEdBQUMsQ0FBdkMsRUFBMENpQixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUFwRCxFQVhrQyxDQVdxQjtBQUN2RHdQLGVBQU8sQ0FBQ1csTUFBUixDQUFlcE4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBVixHQUFZcUMsV0FBVyxHQUFDLENBQXZDLEVBQTBDaUIsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBcEQsRUFaa0MsQ0FZcUI7QUFDdkR3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEMsRUFia0MsQ0FhTztBQUN6Q3dQLGVBQU8sQ0FBQ1UsTUFBUixDQUFlbk4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QyxFQWRrQyxDQWNPO0FBQ3pDLE9BZkQsTUFlSztBQUNKd1AsZUFBTyxDQUFDTyxjQUFSLENBQXVCNEcsWUFBWSxDQUFDdlMsS0FBYixDQUFtQjJTLFFBQTFDO0FBQ0F2SCxlQUFPLENBQUNTLFlBQVIsQ0FBcUIwRyxZQUFZLENBQUN2UyxLQUFiLENBQW1Cd0QsUUFBeEM7QUFDQTRILGVBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQStTLGVBQU8sQ0FBQ1UsTUFBUixDQUFlbk4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QyxFQUpJLENBSXFDO0FBQ3pDd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVwTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDLEVBTEksQ0FLcUM7QUFDekN3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQVYsR0FBWXFDLFdBQVcsR0FBQyxDQUF2QyxFQUEwQ2lCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXBELEVBTkksQ0FNbUQ7QUFDdkR3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQVYsR0FBWXFDLFdBQVcsR0FBQyxDQUF2QyxFQUEwQ2lCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXBELEVBUEksQ0FPbUQ7QUFDdkR3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEMsRUFSSSxDQVFxQztBQUN6Q3dQLGVBQU8sQ0FBQ1csTUFBUixDQUFlcE4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QyxFQVRJLENBU3FDO0FBQ3pDd1AsZUFBTyxDQUFDVyxNQUFSLENBQWVwTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDLEVBVkksQ0FVcUM7QUFDekN3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQVYsR0FBWXFDLFdBQVcsR0FBQyxDQUF2QyxFQUEwQ2lCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXBELEVBWEksQ0FXbUQ7QUFDdkR3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQVYsR0FBWXFDLFdBQVcsR0FBQyxDQUF2QyxFQUEwQ2lCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXBELEVBWkksQ0FZbUQ7QUFDdkR3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXBOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEMsRUFiSSxDQWFxQztBQUN6Q3dQLGVBQU8sQ0FBQ1UsTUFBUixDQUFlbk4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QyxFQWRJLENBY3FDO0FBQ3pDO0FBQ0R3UCxhQUFPLENBQUNjLFNBQVI7QUFDQWQsYUFBTyxDQUFDZSxJQUFSO0FBQ0FmLGFBQU8sQ0FBQ2dCLE1BQVI7QUFDTSxLQXJDRDtBQXNDSCxHQTdDRDs7QUErQ0FoQixTQUFPLENBQUN1RyxPQUFSOztBQUVIO0FBQ0EsTUFBR1ksWUFBWSxDQUFDRSxPQUFiLENBQXFCRyxJQUF4QixFQUE2Qjs7QUFFNUI7O0FBRUUsU0FBTztBQUNIcFYsZUFBVyxFQUFFQSxXQURWO0FBRUhxRixhQUFTLEVBQUVBLFNBRlI7QUFHSG5GLGVBQVcsRUFBRUEsV0FIVixFQUFQOztBQUtIOztBQUVELFNBQVN1VixrQkFBVCxDQUE0QnBULE1BQTVCLEVBQW9DdkMsSUFBcEMsRUFBMEN6RixNQUExQyxFQUFrRHVULE9BQWxELEVBQTJEO0FBQ3ZELE1BQUk1RSxPQUFPLEdBQUd4TSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLENBQWxGOztBQUVBLE1BQUlrWixjQUFjLEdBQUcxSSxZQUFZLENBQUMzSyxNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLENBQWpDO0FBQ0k2UyxRQUFNLEdBQUd3SSxjQUFjLENBQUN4SSxNQUQ1Qjs7QUFHQSxNQUFJeUksZ0JBQWdCLEdBQUdsTixjQUFjLENBQUMzSSxJQUFJLENBQUNLLFVBQU4sRUFBa0JMLElBQWxCLEVBQXdCekYsTUFBeEIsQ0FBckM7QUFDSTJGLGFBQVcsR0FBRzJWLGdCQUFnQixDQUFDM1YsV0FEbkM7QUFFSUUsYUFBVyxHQUFHeVYsZ0JBQWdCLENBQUN6VixXQUZuQzs7QUFJQSxNQUFJNEMsUUFBUSxHQUFHb0ssTUFBTSxDQUFDdUgsR0FBUCxFQUFmO0FBQ0EsTUFBSTFSLFFBQVEsR0FBR21LLE1BQU0sQ0FBQ3dILEtBQVAsRUFBZjtBQUNBLE1BQUlqQyxJQUFJLEdBQUczUyxJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNPLE9BQXJCLEdBQStCUCxNQUFNLENBQUNHLFdBQXRDLEdBQW9ESCxNQUFNLENBQUNLLFlBQXRFO0FBQ0EsTUFBSTJLLFNBQVMsR0FBRyxFQUFoQjs7QUFFQXVJLFNBQU8sQ0FBQ3NHLElBQVI7QUFDQSxNQUFJcFUsSUFBSSxDQUFDZ1UsZ0JBQUwsSUFBeUJoVSxJQUFJLENBQUNnVSxnQkFBTCxLQUEwQixDQUFuRCxJQUF3RGhVLElBQUksQ0FBQ3NMLFlBQUwsS0FBc0IsSUFBbEYsRUFBd0Y7QUFDcEZ3QyxXQUFPLENBQUNFLFNBQVIsQ0FBa0JoTyxJQUFJLENBQUNnVSxnQkFBdkIsRUFBeUMsQ0FBekM7QUFDSDs7QUFFRCxNQUFJaFUsSUFBSSxDQUFDd1MsT0FBTCxJQUFnQnhTLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYS9NLFFBQTdCLElBQXlDekYsSUFBSSxDQUFDd1MsT0FBTCxDQUFhL00sUUFBYixDQUFzQjlJLE1BQS9ELElBQXlFdU0sT0FBTyxLQUFLLENBQXpGLEVBQTRGO0FBQ3hGb0osd0JBQW9CLENBQUN0UyxJQUFJLENBQUN3UyxPQUFMLENBQWE3TSxNQUFiLENBQW9CNUgsQ0FBckIsRUFBd0JpQyxJQUF4QixFQUE4QnpGLE1BQTlCLEVBQXNDdVQsT0FBdEMsQ0FBcEI7QUFDSDs7O0FBR0R2TCxRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVXNSLFVBQVYsRUFBc0I1SSxXQUF0QixFQUFtQztBQUM5QyxRQUFJdEksSUFBSSxHQUFHa1IsVUFBVSxDQUFDbFIsSUFBdEI7QUFDQSxRQUFJdEMsTUFBTSxHQUFHMEssYUFBYSxDQUFDcEksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTJPLE9BQW5FLENBQTFCO0FBQ0EzRCxhQUFTLENBQUNWLElBQVYsQ0FBZXhELE1BQWY7O0FBRUEsUUFBSXFVLGNBQWMsR0FBRzdOLFdBQVcsQ0FBQ3hHLE1BQUQsQ0FBaEM7O0FBRUFxVSxrQkFBYyxDQUFDblMsT0FBZixDQUF1QixVQUFVbEMsTUFBVixFQUFrQjtBQUNyQztBQUNBeU0sYUFBTyxDQUFDTSxTQUFSO0FBQ0FOLGFBQU8sQ0FBQ08sY0FBUixDQUF1QndHLFVBQVUsQ0FBQ25TLEtBQWxDO0FBQ0FvTCxhQUFPLENBQUNTLFlBQVIsQ0FBcUJzRyxVQUFVLENBQUNuUyxLQUFoQztBQUNBb0wsYUFBTyxDQUFDZ0ksY0FBUixDQUF1QixHQUF2QjtBQUNBaEksYUFBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBLFVBQUlzRyxNQUFNLENBQUMxRSxNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0FBQ25CLFlBQUlvWixVQUFVLEdBQUcxVSxNQUFNLENBQUMsQ0FBRCxDQUF2QjtBQUNBLFlBQUkyVSxTQUFTLEdBQUczVSxNQUFNLENBQUNBLE1BQU0sQ0FBQzFFLE1BQVAsR0FBZ0IsQ0FBakIsQ0FBdEI7O0FBRUFtUixlQUFPLENBQUNVLE1BQVIsQ0FBZXVILFVBQVUsQ0FBQ2hZLENBQTFCLEVBQTZCZ1ksVUFBVSxDQUFDelgsQ0FBeEM7QUFDQSxZQUFJMEIsSUFBSSxDQUFDOEYsS0FBTCxDQUFXbVEsU0FBWCxLQUF5QixPQUE3QixFQUFzQztBQUNsQzVVLGdCQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ2xDLGdCQUFJQSxLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ1gsa0JBQUl5WixTQUFTLEdBQUc5VSx3QkFBd0IsQ0FBQ0MsTUFBRCxFQUFTNUUsS0FBSyxHQUFHLENBQWpCLENBQXhDO0FBQ0FxUixxQkFBTyxDQUFDcUksYUFBUixDQUFzQkQsU0FBUyxDQUFDbFUsSUFBVixDQUFlakUsQ0FBckMsRUFBd0NtWSxTQUFTLENBQUNsVSxJQUFWLENBQWUxRCxDQUF2RCxFQUEwRDRYLFNBQVMsQ0FBQ2pVLElBQVYsQ0FBZWxFLENBQXpFLEVBQTRFbVksU0FBUyxDQUFDalUsSUFBVixDQUFlM0QsQ0FBM0YsRUFBOEZtRSxJQUFJLENBQUMxRSxDQUFuRyxFQUFzRzBFLElBQUksQ0FBQ25FLENBQTNHO0FBQ0g7QUFDSixXQUxEO0FBTUgsU0FQRCxNQU9PO0FBQ0grQyxnQkFBTSxDQUFDa0MsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNsQyxnQkFBSUEsS0FBSyxHQUFHLENBQVosRUFBZTtBQUNYcVIscUJBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBSSxDQUFDMUUsQ0FBcEIsRUFBdUIwRSxJQUFJLENBQUNuRSxDQUE1QjtBQUNIO0FBQ0osV0FKRDtBQUtIOztBQUVEd1AsZUFBTyxDQUFDVyxNQUFSLENBQWV1SCxTQUFTLENBQUNqWSxDQUF6QixFQUE0QjRVLElBQTVCO0FBQ0E3RSxlQUFPLENBQUNXLE1BQVIsQ0FBZXNILFVBQVUsQ0FBQ2hZLENBQTFCLEVBQTZCNFUsSUFBN0I7QUFDQTdFLGVBQU8sQ0FBQ1csTUFBUixDQUFlc0gsVUFBVSxDQUFDaFksQ0FBMUIsRUFBNkJnWSxVQUFVLENBQUN6WCxDQUF4QztBQUNILE9BdkJELE1BdUJPO0FBQ0gsWUFBSW1FLElBQUksR0FBR3BCLE1BQU0sQ0FBQyxDQUFELENBQWpCO0FBQ0F5TSxlQUFPLENBQUNVLE1BQVIsQ0FBZS9MLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3FDLElBQUksQ0FBQ25FLENBQTlDO0FBQ0F3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3FDLElBQUksQ0FBQ25FLENBQTlDO0FBQ0F3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3VTLElBQXpDO0FBQ0E3RSxlQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3VTLElBQXpDO0FBQ0E3RSxlQUFPLENBQUNVLE1BQVIsQ0FBZS9MLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3FDLElBQUksQ0FBQ25FLENBQTlDO0FBQ0g7QUFDRHdQLGFBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxhQUFPLENBQUNlLElBQVI7QUFDQWYsYUFBTyxDQUFDZ0ksY0FBUixDQUF1QixDQUF2Qjs7O0FBR1Q7QUFDQWhJLGFBQU8sQ0FBQ00sU0FBUjtBQUNBTixhQUFPLENBQUNPLGNBQVIsQ0FBdUJ3RyxVQUFVLENBQUNuUyxLQUFsQztBQUNBb0wsYUFBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBLFVBQUlzRyxNQUFNLENBQUMxRSxNQUFQLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3JCbVIsZUFBTyxDQUFDVSxNQUFSLENBQWVuTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDO0FBQ0F3UCxlQUFPLENBQUNZLEdBQVIsQ0FBWXJOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXRCLEVBQXlCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBbkMsRUFBc0MsQ0FBdEMsRUFBeUMsQ0FBekMsRUFBNEMsSUFBSWIsSUFBSSxDQUFDbUQsRUFBckQ7QUFDSCxPQUhELE1BR087QUFDSGtOLGVBQU8sQ0FBQ1UsTUFBUixDQUFlbk4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QztBQUNBLFlBQUkwQixJQUFJLENBQUM4RixLQUFMLENBQVdtUSxTQUFYLEtBQXlCLE9BQTdCLEVBQXNDO0FBQ2xDNVUsZ0JBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDbEMsZ0JBQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxrQkFBSXlaLFNBQVMsR0FBRzlVLHdCQUF3QixDQUFDQyxNQUFELEVBQVM1RSxLQUFLLEdBQUcsQ0FBakIsQ0FBeEM7QUFDQXFSLHFCQUFPLENBQUNxSSxhQUFSLENBQXNCRCxTQUFTLENBQUNsVSxJQUFWLENBQWVqRSxDQUFyQyxFQUF3Q21ZLFNBQVMsQ0FBQ2xVLElBQVYsQ0FBZTFELENBQXZELEVBQTBENFgsU0FBUyxDQUFDalUsSUFBVixDQUFlbEUsQ0FBekUsRUFBNEVtWSxTQUFTLENBQUNqVSxJQUFWLENBQWUzRCxDQUEzRixFQUE4Rm1FLElBQUksQ0FBQzFFLENBQW5HLEVBQXNHMEUsSUFBSSxDQUFDbkUsQ0FBM0c7QUFDSDtBQUNKLFdBTEQ7QUFNSCxTQVBELE1BT087QUFDSCtDLGdCQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ2xDLGdCQUFJQSxLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ1hxUixxQkFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFwQixFQUF1QjBFLElBQUksQ0FBQ25FLENBQTVCO0FBQ0g7QUFDSixXQUpEO0FBS0g7QUFDRHdQLGVBQU8sQ0FBQ1UsTUFBUixDQUFlbk4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBekIsRUFBNEJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUF0QztBQUNIO0FBQ0R3UCxhQUFPLENBQUNjLFNBQVI7QUFDQWQsYUFBTyxDQUFDZ0IsTUFBUjtBQUNNLEtBdEVEOztBQXdFTjtBQUNNLFFBQUk5TyxJQUFJLENBQUM3RSxjQUFMLEtBQXdCLEtBQTVCLEVBQW1DO0FBQy9CLFVBQUlnVCxLQUFLLEdBQUc1VCxNQUFNLENBQUNZLGNBQVAsQ0FBc0I4USxXQUFXLEdBQUcxUixNQUFNLENBQUNZLGNBQVAsQ0FBc0J3QixNQUExRCxDQUFaO0FBQ0F1UixvQkFBYyxDQUFDN00sTUFBRCxFQUFTd1QsVUFBVSxDQUFDblMsS0FBcEIsRUFBMkJ5TCxLQUEzQixFQUFrQ0wsT0FBbEMsRUFBMEM5TixJQUExQyxDQUFkO0FBQ0g7O0FBRUosR0FyRkQ7QUFzRkEsTUFBSUEsSUFBSSxDQUFDK1UsU0FBTCxLQUFtQixLQUFuQixJQUE0QjdMLE9BQU8sS0FBSyxDQUE1QyxFQUErQztBQUMzQzNHLFVBQU0sQ0FBQ2dCLE9BQVAsQ0FBZSxVQUFVc1IsVUFBVixFQUFzQjVJLFdBQXRCLEVBQW1DO0FBQzlDLFVBQUl0SSxJQUFJLEdBQUdrUixVQUFVLENBQUNsUixJQUF0QjtBQUNBLFVBQUl0QyxNQUFNLEdBQUcwSyxhQUFhLENBQUNwSSxJQUFELEVBQU9YLFFBQVAsRUFBaUJDLFFBQWpCLEVBQTJCL0MsV0FBM0IsRUFBd0NFLFdBQXhDLEVBQXFESixJQUFyRCxFQUEyRHpGLE1BQTNELEVBQW1FMk8sT0FBbkUsQ0FBMUI7QUFDQWdILG1CQUFhLENBQUM3TyxNQUFELEVBQVN3VCxVQUFULEVBQXFCdGEsTUFBckIsRUFBNkJ1VCxPQUE3QixDQUFiO0FBQ0gsS0FKRDtBQUtIOztBQUVEQSxTQUFPLENBQUN1RyxPQUFSOztBQUVBLFNBQU87QUFDSG5VLGVBQVcsRUFBRUEsV0FEVjtBQUVIcUYsYUFBUyxFQUFFQSxTQUZSO0FBR0huRixlQUFXLEVBQUVBLFdBSFYsRUFBUDs7QUFLSDs7QUFFRCxTQUFTZ1csa0JBQVQsQ0FBNEI3VCxNQUE1QixFQUFvQ3ZDLElBQXBDLEVBQTBDekYsTUFBMUMsRUFBa0R1VCxPQUFsRCxFQUEyRDtBQUN2RCxNQUFJNUUsT0FBTyxHQUFHeE0sU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxDQUFsRjs7QUFFQSxNQUFJMlosY0FBYyxHQUFHbkosWUFBWSxDQUFDM0ssTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixDQUFqQztBQUNJNlMsUUFBTSxHQUFHaUosY0FBYyxDQUFDakosTUFENUI7O0FBR0EsTUFBSWtKLGdCQUFnQixHQUFHM04sY0FBYyxDQUFDM0ksSUFBSSxDQUFDSyxVQUFOLEVBQWtCTCxJQUFsQixFQUF3QnpGLE1BQXhCLENBQXJDO0FBQ0kyRixhQUFXLEdBQUdvVyxnQkFBZ0IsQ0FBQ3BXLFdBRG5DO0FBRUlFLGFBQVcsR0FBR2tXLGdCQUFnQixDQUFDbFcsV0FGbkM7O0FBSUEsTUFBSTRDLFFBQVEsR0FBR29LLE1BQU0sQ0FBQ3VILEdBQVAsRUFBZjtBQUNBLE1BQUkxUixRQUFRLEdBQUdtSyxNQUFNLENBQUN3SCxLQUFQLEVBQWY7QUFDQSxNQUFJclAsU0FBUyxHQUFHLEVBQWhCOztBQUVBdUksU0FBTyxDQUFDc0csSUFBUjtBQUNBLE1BQUlwVSxJQUFJLENBQUNnVSxnQkFBTCxJQUF5QmhVLElBQUksQ0FBQ2dVLGdCQUFMLEtBQTBCLENBQW5ELElBQXdEaFUsSUFBSSxDQUFDc0wsWUFBTCxLQUFzQixJQUFsRixFQUF3RjtBQUNwRndDLFdBQU8sQ0FBQ0UsU0FBUixDQUFrQmhPLElBQUksQ0FBQ2dVLGdCQUF2QixFQUF5QyxDQUF6QztBQUNIOztBQUVELE1BQUloVSxJQUFJLENBQUN3UyxPQUFMLElBQWdCeFMsSUFBSSxDQUFDd1MsT0FBTCxDQUFhL00sUUFBN0IsSUFBeUN6RixJQUFJLENBQUN3UyxPQUFMLENBQWEvTSxRQUFiLENBQXNCOUksTUFBL0QsSUFBeUV1TSxPQUFPLEtBQUssQ0FBekYsRUFBNEY7QUFDeEZvSix3QkFBb0IsQ0FBQ3RTLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYTdNLE1BQWIsQ0FBb0I1SCxDQUFyQixFQUF3QmlDLElBQXhCLEVBQThCekYsTUFBOUIsRUFBc0N1VCxPQUF0QyxDQUFwQjtBQUNIOztBQUVEdkwsUUFBTSxDQUFDZ0IsT0FBUCxDQUFlLFVBQVVzUixVQUFWLEVBQXNCNUksV0FBdEIsRUFBbUM7QUFDOUMsUUFBSXRJLElBQUksR0FBR2tSLFVBQVUsQ0FBQ2xSLElBQXRCO0FBQ0EsUUFBSXRDLE1BQU0sR0FBRzBLLGFBQWEsQ0FBQ3BJLElBQUQsRUFBT1gsUUFBUCxFQUFpQkMsUUFBakIsRUFBMkIvQyxXQUEzQixFQUF3Q0UsV0FBeEMsRUFBcURKLElBQXJELEVBQTJEekYsTUFBM0QsRUFBbUUyTyxPQUFuRSxDQUExQjtBQUNBM0QsYUFBUyxDQUFDVixJQUFWLENBQWV4RCxNQUFmO0FBQ0EsUUFBSXFVLGNBQWMsR0FBRzdOLFdBQVcsQ0FBQ3hHLE1BQUQsQ0FBaEM7O0FBRUFxVSxrQkFBYyxDQUFDblMsT0FBZixDQUF1QixVQUFVbEMsTUFBVixFQUFrQjVFLEtBQWxCLEVBQXlCO0FBQzVDcVIsYUFBTyxDQUFDTSxTQUFSO0FBQ0FOLGFBQU8sQ0FBQ08sY0FBUixDQUF1QndHLFVBQVUsQ0FBQ25TLEtBQWxDO0FBQ0FvTCxhQUFPLENBQUNRLFlBQVIsQ0FBcUIsSUFBRXRPLElBQUksQ0FBQ2pGLFVBQTVCO0FBQ0EsVUFBSXNHLE1BQU0sQ0FBQzFFLE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDckJtUixlQUFPLENBQUNVLE1BQVIsQ0FBZW5OLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEM7QUFDQXdQLGVBQU8sQ0FBQ1ksR0FBUixDQUFZck4sTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVdEQsQ0FBdEIsRUFBeUJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUvQyxDQUFuQyxFQUFzQyxDQUF0QyxFQUF5QyxDQUF6QyxFQUE0QyxJQUFJYixJQUFJLENBQUNtRCxFQUFyRDtBQUNILE9BSEQsTUFHTztBQUNIa04sZUFBTyxDQUFDVSxNQUFSLENBQWVuTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDO0FBQ0EsWUFBSTBCLElBQUksQ0FBQzhGLEtBQUwsQ0FBV21RLFNBQVgsS0FBeUIsT0FBN0IsRUFBc0M7QUFDbEM1VSxnQkFBTSxDQUFDa0MsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNsQyxnQkFBSUEsS0FBSyxHQUFHLENBQVosRUFBZTtBQUNYLGtCQUFJeVosU0FBUyxHQUFHOVUsd0JBQXdCLENBQUNDLE1BQUQsRUFBUzVFLEtBQUssR0FBRyxDQUFqQixDQUF4QztBQUNBcVIscUJBQU8sQ0FBQ3FJLGFBQVIsQ0FBc0JELFNBQVMsQ0FBQ2xVLElBQVYsQ0FBZWpFLENBQXJDLEVBQXdDbVksU0FBUyxDQUFDbFUsSUFBVixDQUFlMUQsQ0FBdkQsRUFBMEQ0WCxTQUFTLENBQUNqVSxJQUFWLENBQWVsRSxDQUF6RSxFQUE0RW1ZLFNBQVMsQ0FBQ2pVLElBQVYsQ0FBZTNELENBQTNGLEVBQThGbUUsSUFBSSxDQUFDMUUsQ0FBbkcsRUFBc0cwRSxJQUFJLENBQUNuRSxDQUEzRztBQUNIO0FBQ0osV0FMRDtBQU1ILFNBUEQsTUFPTztBQUNIK0MsZ0JBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDbEMsZ0JBQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWHFSLHFCQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQzFFLENBQXBCLEVBQXVCMEUsSUFBSSxDQUFDbkUsQ0FBNUI7QUFDSDtBQUNKLFdBSkQ7QUFLSDtBQUNEd1AsZUFBTyxDQUFDVSxNQUFSLENBQWVuTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDO0FBQ0g7QUFDRHdQLGFBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxhQUFPLENBQUNnQixNQUFSO0FBQ0gsS0EzQkQ7O0FBNkJBLFFBQUk5TyxJQUFJLENBQUM3RSxjQUFMLEtBQXdCLEtBQTVCLEVBQW1DO0FBQy9CLFVBQUlnVCxLQUFLLEdBQUc1VCxNQUFNLENBQUNZLGNBQVAsQ0FBc0I4USxXQUFXLEdBQUcxUixNQUFNLENBQUNZLGNBQVAsQ0FBc0J3QixNQUExRCxDQUFaO0FBQ0F1UixvQkFBYyxDQUFDN00sTUFBRCxFQUFTd1QsVUFBVSxDQUFDblMsS0FBcEIsRUFBMkJ5TCxLQUEzQixFQUFrQ0wsT0FBbEMsRUFBMEM5TixJQUExQyxDQUFkO0FBQ0g7QUFDSixHQXZDRDtBQXdDQSxNQUFJQSxJQUFJLENBQUMrVSxTQUFMLEtBQW1CLEtBQW5CLElBQTRCN0wsT0FBTyxLQUFLLENBQTVDLEVBQStDO0FBQzNDM0csVUFBTSxDQUFDZ0IsT0FBUCxDQUFlLFVBQVVzUixVQUFWLEVBQXNCNUksV0FBdEIsRUFBbUM7QUFDOUMsVUFBSXRJLElBQUksR0FBR2tSLFVBQVUsQ0FBQ2xSLElBQXRCO0FBQ0EsVUFBSXRDLE1BQU0sR0FBRzBLLGFBQWEsQ0FBQ3BJLElBQUQsRUFBT1gsUUFBUCxFQUFpQkMsUUFBakIsRUFBMkIvQyxXQUEzQixFQUF3Q0UsV0FBeEMsRUFBcURKLElBQXJELEVBQTJEekYsTUFBM0QsRUFBbUUyTyxPQUFuRSxDQUExQjtBQUNBZ0gsbUJBQWEsQ0FBQzdPLE1BQUQsRUFBU3dULFVBQVQsRUFBcUJ0YSxNQUFyQixFQUE2QnVULE9BQTdCLENBQWI7QUFDSCxLQUpEO0FBS0g7O0FBRURBLFNBQU8sQ0FBQ3VHLE9BQVI7O0FBRUEsU0FBTztBQUNIblUsZUFBVyxFQUFFQSxXQURWO0FBRUhxRixhQUFTLEVBQUVBLFNBRlI7QUFHSG5GLGVBQVcsRUFBRUEsV0FIVixFQUFQOztBQUtIOztBQUVELFNBQVNtVyxpQkFBVCxDQUEyQmhVLE1BQTNCLEVBQW1DdkMsSUFBbkMsRUFBeUN6RixNQUF6QyxFQUFpRHVULE9BQWpELEVBQTBEO0FBQ3RELE1BQUk1RSxPQUFPLEdBQUd4TSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLENBQWxGOztBQUVBLE1BQUk4WixjQUFjLEdBQUd0SixZQUFZLENBQUMzSyxNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLENBQWpDO0FBQ0k2UyxRQUFNLEdBQUdvSixjQUFjLENBQUNwSixNQUQ1Qjs7QUFHQSxNQUFJcUosZ0JBQWdCLEdBQUc5TixjQUFjLENBQUMzSSxJQUFJLENBQUNLLFVBQU4sRUFBa0JMLElBQWxCLEVBQXdCekYsTUFBeEIsQ0FBckM7QUFDSTJGLGFBQVcsR0FBR3VXLGdCQUFnQixDQUFDdlcsV0FEbkM7QUFFSUUsYUFBVyxHQUFHcVcsZ0JBQWdCLENBQUNyVyxXQUZuQzs7QUFJQSxNQUFJNEMsUUFBUSxHQUFHb0ssTUFBTSxDQUFDdUgsR0FBUCxFQUFmO0FBQ0EsTUFBSTFSLFFBQVEsR0FBR21LLE1BQU0sQ0FBQ3dILEtBQVAsRUFBZjtBQUNILE1BQUlqQyxJQUFJLEdBQUczUyxJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNPLE9BQXJCLEdBQStCUCxNQUFNLENBQUNHLFdBQXRDLEdBQW9ESCxNQUFNLENBQUNLLFlBQXRFO0FBQ0csTUFBSTJLLFNBQVMsR0FBRyxFQUFoQjs7QUFFSCxNQUFJbVIsV0FBVyxHQUFDLENBQWhCO0FBQ0EsTUFBSUMsWUFBWSxHQUFDLENBQWpCO0FBQ0FwVSxRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVXNSLFVBQVYsRUFBc0I1SSxXQUF0QixFQUFtQztBQUNqRCxRQUFHNEksVUFBVSxDQUFDdFYsSUFBWCxJQUFpQixRQUFwQixFQUE2QjtBQUM1Qm9YLGtCQUFZLElBQUUsQ0FBZDtBQUNBO0FBQ0QsR0FKRDtBQUtHN0ksU0FBTyxDQUFDc0csSUFBUjtBQUNBLE1BQUlwVSxJQUFJLENBQUNnVSxnQkFBTCxJQUF5QmhVLElBQUksQ0FBQ2dVLGdCQUFMLEtBQTBCLENBQW5ELElBQXdEaFUsSUFBSSxDQUFDc0wsWUFBTCxLQUFzQixJQUFsRixFQUF3RjtBQUNwRndDLFdBQU8sQ0FBQ0UsU0FBUixDQUFrQmhPLElBQUksQ0FBQ2dVLGdCQUF2QixFQUF5QyxDQUF6QztBQUNIOztBQUVELE1BQUloVSxJQUFJLENBQUN3UyxPQUFMLElBQWdCeFMsSUFBSSxDQUFDd1MsT0FBTCxDQUFhL00sUUFBN0IsSUFBeUN6RixJQUFJLENBQUN3UyxPQUFMLENBQWEvTSxRQUFiLENBQXNCOUksTUFBL0QsSUFBeUV1TSxPQUFPLEtBQUssQ0FBekYsRUFBNEY7QUFDeEZvSix3QkFBb0IsQ0FBQ3RTLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYTdNLE1BQWIsQ0FBb0I1SCxDQUFyQixFQUF3QmlDLElBQXhCLEVBQThCekYsTUFBOUIsRUFBc0N1VCxPQUF0QyxDQUFwQjtBQUNIOztBQUVEdkwsUUFBTSxDQUFDZ0IsT0FBUCxDQUFlLFVBQVVzUixVQUFWLEVBQXNCNUksV0FBdEIsRUFBbUM7QUFDOUMsUUFBSXRJLElBQUksR0FBR2tSLFVBQVUsQ0FBQ2xSLElBQXRCO0FBQ0EsUUFBSXRDLE1BQU0sR0FBRzBLLGFBQWEsQ0FBQ3BJLElBQUQsRUFBT1gsUUFBUCxFQUFpQkMsUUFBakIsRUFBMkIvQyxXQUEzQixFQUF3Q0UsV0FBeEMsRUFBcURKLElBQXJELEVBQTJEekYsTUFBM0QsRUFBbUUyTyxPQUFuRSxDQUExQjtBQUNBM0QsYUFBUyxDQUFDVixJQUFWLENBQWV4RCxNQUFmOztBQUVOO0FBQ0EsUUFBR3dULFVBQVUsQ0FBQ3RWLElBQVgsSUFBaUIsUUFBcEIsRUFBNkI7QUFDNUI4QixZQUFNLEdBQUd1SixhQUFhLENBQUN2SixNQUFELEVBQVNqQixXQUFULEVBQXNCdVcsWUFBdEIsRUFBcUNELFdBQXJDLEVBQWtEbmMsTUFBbEQsRUFBMER5RixJQUExRCxDQUF0QjtBQUNBcUIsWUFBTSxDQUFDa0MsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNsQyxZQUFJZ0csSUFBSSxLQUFLLElBQWIsRUFBbUI7QUFDckJxTCxpQkFBTyxDQUFDTSxTQUFSO0FBQ0FOLGlCQUFPLENBQUNTLFlBQVIsQ0FBcUI5TCxJQUFJLENBQUNDLEtBQUwsSUFBY21TLFVBQVUsQ0FBQ25TLEtBQTlDO0FBQ00sY0FBSThJLE1BQU0sR0FBRy9JLElBQUksQ0FBQzFFLENBQUwsR0FBUzBFLElBQUksQ0FBQ3BFLEtBQUwsR0FBYSxDQUF0QixHQUEwQixDQUF2QztBQUNBLGNBQUlFLE1BQU0sR0FBR3lCLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2tFLElBQUksQ0FBQ25FLENBQW5CLEdBQXVCL0QsTUFBTSxDQUFDTyxPQUE5QixHQUF3Q1AsTUFBTSxDQUFDRyxXQUEvQyxHQUE2REgsTUFBTSxDQUFDSyxZQUFqRjtBQUNBa1QsaUJBQU8sQ0FBQ1UsTUFBUixDQUFlaEQsTUFBZixFQUF1Qi9JLElBQUksQ0FBQ25FLENBQTVCO0FBQ0F3UCxpQkFBTyxDQUFDYSxJQUFSLENBQWFuRCxNQUFiLEVBQXFCL0ksSUFBSSxDQUFDbkUsQ0FBMUIsRUFBNkJtRSxJQUFJLENBQUNwRSxLQUFMLEdBQWEsQ0FBMUMsRUFBNkNFLE1BQTdDO0FBQ051UCxpQkFBTyxDQUFDYyxTQUFSO0FBQ0FkLGlCQUFPLENBQUNlLElBQVI7QUFDRztBQUNKLE9BWEQ7QUFZQTZILGlCQUFXLElBQUUsQ0FBYjtBQUNBOztBQUVEOztBQUVBLFFBQUc3QixVQUFVLENBQUN0VixJQUFYLElBQWlCLE1BQXBCLEVBQTJCO0FBQzFCLFVBQUltVyxjQUFjLEdBQUc3TixXQUFXLENBQUN4RyxNQUFELENBQWhDO0FBQ0FxVSxvQkFBYyxDQUFDblMsT0FBZixDQUF1QixVQUFVbEMsTUFBVixFQUFrQjtBQUN4QztBQUNBeU0sZUFBTyxDQUFDTSxTQUFSO0FBQ0FOLGVBQU8sQ0FBQ08sY0FBUixDQUF1QndHLFVBQVUsQ0FBQ25TLEtBQWxDO0FBQ0FvTCxlQUFPLENBQUNTLFlBQVIsQ0FBcUJzRyxVQUFVLENBQUNuUyxLQUFoQztBQUNBb0wsZUFBTyxDQUFDZ0ksY0FBUixDQUF1QixHQUF2QjtBQUNBaEksZUFBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBLFlBQUlzRyxNQUFNLENBQUMxRSxNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0FBQ3RCLGNBQUlvWixVQUFVLEdBQUcxVSxNQUFNLENBQUMsQ0FBRCxDQUF2QjtBQUNBLGNBQUkyVSxTQUFTLEdBQUczVSxNQUFNLENBQUNBLE1BQU0sQ0FBQzFFLE1BQVAsR0FBZ0IsQ0FBakIsQ0FBdEI7QUFDQW1SLGlCQUFPLENBQUNVLE1BQVIsQ0FBZXVILFVBQVUsQ0FBQ2hZLENBQTFCLEVBQTZCZ1ksVUFBVSxDQUFDelgsQ0FBeEM7QUFDQSxjQUFJdVcsVUFBVSxDQUFDK0IsS0FBWCxLQUFxQixPQUF6QixFQUFrQztBQUNqQ3ZWLGtCQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3JDLGtCQUFJQSxLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ2Qsb0JBQUl5WixTQUFTLEdBQUc5VSx3QkFBd0IsQ0FBQ0MsTUFBRCxFQUFTNUUsS0FBSyxHQUFHLENBQWpCLENBQXhDO0FBQ0FxUix1QkFBTyxDQUFDcUksYUFBUixDQUFzQkQsU0FBUyxDQUFDbFUsSUFBVixDQUFlakUsQ0FBckMsRUFBd0NtWSxTQUFTLENBQUNsVSxJQUFWLENBQWUxRCxDQUF2RCxFQUEwRDRYLFNBQVMsQ0FBQ2pVLElBQVYsQ0FBZWxFLENBQXpFLEVBQTRFbVksU0FBUyxDQUFDalUsSUFBVixDQUFlM0QsQ0FBM0YsRUFBOEZtRSxJQUFJLENBQUMxRSxDQUFuRyxFQUFzRzBFLElBQUksQ0FBQ25FLENBQTNHO0FBQ0E7QUFDRCxhQUxEO0FBTUEsV0FQRCxNQU9PO0FBQ04rQyxrQkFBTSxDQUFDa0MsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNyQyxrQkFBSUEsS0FBSyxHQUFHLENBQVosRUFBZTtBQUNkcVIsdUJBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBSSxDQUFDMUUsQ0FBcEIsRUFBdUIwRSxJQUFJLENBQUNuRSxDQUE1QjtBQUNBO0FBQ0QsYUFKRDtBQUtBO0FBQ0R3UCxpQkFBTyxDQUFDVyxNQUFSLENBQWV1SCxTQUFTLENBQUNqWSxDQUF6QixFQUE0QjRVLElBQTVCO0FBQ0E3RSxpQkFBTyxDQUFDVyxNQUFSLENBQWVzSCxVQUFVLENBQUNoWSxDQUExQixFQUE2QjRVLElBQTdCO0FBQ0E3RSxpQkFBTyxDQUFDVyxNQUFSLENBQWVzSCxVQUFVLENBQUNoWSxDQUExQixFQUE2QmdZLFVBQVUsQ0FBQ3pYLENBQXhDO0FBQ0EsU0FyQkQsTUFxQk87QUFDTixjQUFJbUUsSUFBSSxHQUFHcEIsTUFBTSxDQUFDLENBQUQsQ0FBakI7QUFDQXlNLGlCQUFPLENBQUNVLE1BQVIsQ0FBZS9MLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3FDLElBQUksQ0FBQ25FLENBQTlDO0FBQ0F3UCxpQkFBTyxDQUFDVyxNQUFSLENBQWVoTSxJQUFJLENBQUMxRSxDQUFMLEdBQVNxQyxXQUFXLEdBQUcsQ0FBdEMsRUFBeUNxQyxJQUFJLENBQUNuRSxDQUE5QztBQUNBd1AsaUJBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBSSxDQUFDMUUsQ0FBTCxHQUFTcUMsV0FBVyxHQUFHLENBQXRDLEVBQXlDdVMsSUFBekM7QUFDQTdFLGlCQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQzFFLENBQUwsR0FBU3FDLFdBQVcsR0FBRyxDQUF0QyxFQUF5Q3VTLElBQXpDO0FBQ0E3RSxpQkFBTyxDQUFDVSxNQUFSLENBQWUvTCxJQUFJLENBQUMxRSxDQUFMLEdBQVNxQyxXQUFXLEdBQUcsQ0FBdEMsRUFBeUNxQyxJQUFJLENBQUNuRSxDQUE5QztBQUNBO0FBQ0R3UCxlQUFPLENBQUNjLFNBQVI7QUFDQWQsZUFBTyxDQUFDZSxJQUFSO0FBQ0FmLGVBQU8sQ0FBQ2dJLGNBQVIsQ0FBdUIsQ0FBdkI7QUFDQSxPQXZDRDtBQXdDQTs7OztBQUlEO0FBQ0EsUUFBR2pCLFVBQVUsQ0FBQ3RWLElBQVgsSUFBaUIsTUFBcEIsRUFBMkI7QUFDMUIsVUFBSW1XLGNBQWMsR0FBRzdOLFdBQVcsQ0FBQ3hHLE1BQUQsQ0FBaEM7QUFDQXFVLG9CQUFjLENBQUNuUyxPQUFmLENBQXVCLFVBQVVsQyxNQUFWLEVBQWtCNUUsS0FBbEIsRUFBeUI7QUFDL0NxUixlQUFPLENBQUNNLFNBQVI7QUFDQU4sZUFBTyxDQUFDTyxjQUFSLENBQXVCd0csVUFBVSxDQUFDblMsS0FBbEM7QUFDQW9MLGVBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQSxZQUFJc0csTUFBTSxDQUFDMUUsTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUN4Qm1SLGlCQUFPLENBQUNVLE1BQVIsQ0FBZW5OLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEM7QUFDQXdQLGlCQUFPLENBQUNZLEdBQVIsQ0FBWXJOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXRCLEVBQXlCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBbkMsRUFBc0MsQ0FBdEMsRUFBeUMsQ0FBekMsRUFBNEMsSUFBSWIsSUFBSSxDQUFDbUQsRUFBckQ7QUFDQSxTQUhELE1BR087QUFDTmtOLGlCQUFPLENBQUNVLE1BQVIsQ0FBZW5OLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXpCLEVBQTRCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBdEM7QUFDQSxjQUFJdVcsVUFBVSxDQUFDK0IsS0FBWCxJQUFrQixPQUF0QixFQUErQjtBQUM5QnZWLGtCQUFNLENBQUNrQyxPQUFQLENBQWUsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3JDLGtCQUFJQSxLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ2Qsb0JBQUl5WixTQUFTLEdBQUc5VSx3QkFBd0IsQ0FBQ0MsTUFBRCxFQUFTNUUsS0FBSyxHQUFHLENBQWpCLENBQXhDO0FBQ0FxUix1QkFBTyxDQUFDcUksYUFBUixDQUFzQkQsU0FBUyxDQUFDbFUsSUFBVixDQUFlakUsQ0FBckMsRUFBd0NtWSxTQUFTLENBQUNsVSxJQUFWLENBQWUxRCxDQUF2RCxFQUEwRDRYLFNBQVMsQ0FBQ2pVLElBQVYsQ0FBZWxFLENBQXpFLEVBQTRFbVksU0FBUyxDQUFDalUsSUFBVixDQUFlM0QsQ0FBM0YsRUFBOEZtRSxJQUFJLENBQUMxRSxDQUFuRyxFQUFzRzBFLElBQUksQ0FBQ25FLENBQTNHO0FBQ0E7QUFDRCxhQUxEO0FBTUEsV0FQRCxNQU9PO0FBQ04rQyxrQkFBTSxDQUFDa0MsT0FBUCxDQUFlLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNyQyxrQkFBSUEsS0FBSyxHQUFHLENBQVosRUFBZTtBQUNkcVIsdUJBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBSSxDQUFDMUUsQ0FBcEIsRUFBdUIwRSxJQUFJLENBQUNuRSxDQUE1QjtBQUNBO0FBQ0QsYUFKRDtBQUtBO0FBQ0R3UCxpQkFBTyxDQUFDVSxNQUFSLENBQWVuTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDO0FBQ0E7QUFDRHdQLGVBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxlQUFPLENBQUNnQixNQUFSO0FBQ0EsT0EzQkQ7QUE0QkE7O0FBRUQ7QUFDQSxRQUFHK0YsVUFBVSxDQUFDdFYsSUFBWCxJQUFpQixPQUFwQixFQUE0QjtBQUMzQixVQUFJbVcsY0FBYyxHQUFHN04sV0FBVyxDQUFDeEcsTUFBRCxDQUFoQztBQUNBcVUsb0JBQWMsQ0FBQ25TLE9BQWYsQ0FBdUIsVUFBVWxDLE1BQVYsRUFBa0I1RSxLQUFsQixFQUF5QjtBQUMvQ3FSLGVBQU8sQ0FBQ00sU0FBUjtBQUNBTixlQUFPLENBQUNPLGNBQVIsQ0FBdUJ3RyxVQUFVLENBQUNuUyxLQUFsQztBQUNBb0wsZUFBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsZUFBTyxDQUFDVSxNQUFSLENBQWVuTixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVV0RCxDQUF6QixFQUE0QnNELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVS9DLENBQXRDO0FBQ0F3UCxlQUFPLENBQUNZLEdBQVIsQ0FBWXJOLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXRELENBQXRCLEVBQXlCc0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVL0MsQ0FBbkMsRUFBc0MsQ0FBdEMsRUFBeUMsQ0FBekMsRUFBNEMsSUFBSWIsSUFBSSxDQUFDbUQsRUFBckQ7QUFDQWtOLGVBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxlQUFPLENBQUNnQixNQUFSO0FBQ0EsT0FSRDtBQVNBOztBQUVLLFFBQUk5TyxJQUFJLENBQUM3RSxjQUFMLEtBQXdCLEtBQXhCLElBQWlDMFosVUFBVSxDQUFDdFYsSUFBWCxLQUFrQixRQUF2RCxFQUFpRTtBQUM3RCxVQUFJNE8sS0FBSyxHQUFHNVQsTUFBTSxDQUFDWSxjQUFQLENBQXNCOFEsV0FBVyxHQUFHMVIsTUFBTSxDQUFDWSxjQUFQLENBQXNCd0IsTUFBMUQsQ0FBWjtBQUNBdVIsb0JBQWMsQ0FBQzdNLE1BQUQsRUFBU3dULFVBQVUsQ0FBQ25TLEtBQXBCLEVBQTJCeUwsS0FBM0IsRUFBa0NMLE9BQWxDLEVBQTBDOU4sSUFBMUMsQ0FBZDtBQUNIO0FBQ0osR0ExSEQ7QUEySEEsTUFBSUEsSUFBSSxDQUFDK1UsU0FBTCxLQUFtQixLQUFuQixJQUE0QjdMLE9BQU8sS0FBSyxDQUE1QyxFQUErQztBQUNqRCxRQUFJd04sV0FBVyxHQUFDLENBQWhCO0FBQ01uVSxVQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVXNSLFVBQVYsRUFBc0I1SSxXQUF0QixFQUFtQztBQUM5QyxVQUFJdEksSUFBSSxHQUFHa1IsVUFBVSxDQUFDbFIsSUFBdEI7QUFDVCxVQUFJdEMsTUFBTSxHQUFHMEssYUFBYSxDQUFDcEksSUFBRCxFQUFPWCxRQUFQLEVBQWlCQyxRQUFqQixFQUEyQi9DLFdBQTNCLEVBQXdDRSxXQUF4QyxFQUFxREosSUFBckQsRUFBMkR6RixNQUEzRCxFQUFtRTJPLE9BQW5FLENBQTFCO0FBQ0EsVUFBRzJMLFVBQVUsQ0FBQ3RWLElBQVgsS0FBa0IsUUFBckIsRUFBOEI7QUFDN0IyUSxxQkFBYSxDQUFDN08sTUFBRCxFQUFTd1QsVUFBVCxFQUFxQnRhLE1BQXJCLEVBQTZCdVQsT0FBN0IsQ0FBYjtBQUNBLE9BRkQsTUFFSztBQUNKek0sY0FBTSxHQUFHdUosYUFBYSxDQUFDdkosTUFBRCxFQUFTakIsV0FBVCxFQUFzQnVXLFlBQXRCLEVBQW9DRCxXQUFwQyxFQUFpRG5jLE1BQWpELEVBQXlEeUYsSUFBekQsQ0FBdEI7QUFDQWtRLHFCQUFhLENBQUM3TyxNQUFELEVBQVN3VCxVQUFULEVBQXFCdGEsTUFBckIsRUFBNkJ1VCxPQUE3QixDQUFiO0FBQ0E0SSxtQkFBVyxJQUFFLENBQWI7QUFDQTs7QUFFSyxLQVhEO0FBWUg7O0FBRUQ1SSxTQUFPLENBQUN1RyxPQUFSOztBQUVBLFNBQU87QUFDSG5VLGVBQVcsRUFBRUEsV0FEVjtBQUVIcUYsYUFBUyxFQUFFQSxTQUZSO0FBR0huRixlQUFXLEVBQUVBLFdBSFYsRUFBUDs7QUFLSDs7QUFFRCxTQUFTeVcsaUJBQVQsQ0FBMkI3VyxJQUEzQixFQUFpQ3pGLE1BQWpDLEVBQXlDdVQsT0FBekMsRUFBa0Q1RSxPQUFsRCxFQUEyRDlJLFdBQTNELEVBQXdFRixXQUF4RSxFQUFxRjtBQUNwRixNQUFJcVMsYUFBYSxHQUFHdlMsSUFBSSxDQUFDOEYsS0FBTCxDQUFXME0sT0FBWCxJQUFzQixFQUExQztBQUNBLE1BQUdELGFBQWEsQ0FBQ3VFLGNBQWQsSUFBZ0M5VyxJQUFJLENBQUN3UyxPQUFyQyxJQUFnRHRKLE9BQU8sS0FBSyxDQUE1RCxLQUFrRWxKLElBQUksQ0FBQ1QsSUFBTCxJQUFXLE1BQVgsSUFBcUJTLElBQUksQ0FBQ1QsSUFBTCxJQUFXLE1BQWhDLElBQTBDUyxJQUFJLENBQUNULElBQUwsSUFBVyxRQUFyRCxJQUFpRVMsSUFBSSxDQUFDVCxJQUFMLElBQVcsUUFBNUUsSUFBd0ZTLElBQUksQ0FBQ1QsSUFBTCxJQUFXLEtBQXJLLENBQUgsRUFBK0s7QUFDOUsrVCw2QkFBeUIsQ0FBQ3RULElBQUQsRUFBT3pGLE1BQVAsRUFBZXVULE9BQWYsRUFBd0IxTixXQUF4QixFQUFxQ0YsV0FBckMsQ0FBekI7QUFDQTtBQUNFNE4sU0FBTyxDQUFDc0csSUFBUjtBQUNBLE1BQUlwVSxJQUFJLENBQUNnVSxnQkFBTCxJQUF5QmhVLElBQUksQ0FBQ2dVLGdCQUFMLEtBQTBCLENBQW5ELElBQXdEaFUsSUFBSSxDQUFDc0wsWUFBTCxLQUFzQixJQUFsRixFQUF3RjtBQUNwRndDLFdBQU8sQ0FBQ0UsU0FBUixDQUFrQmhPLElBQUksQ0FBQ2dVLGdCQUF2QixFQUF5QyxDQUF6QztBQUNIO0FBQ0QsTUFBSWhVLElBQUksQ0FBQ3dTLE9BQUwsSUFBZ0J4UyxJQUFJLENBQUN3UyxPQUFMLENBQWEvTSxRQUE3QixJQUF5Q3pGLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYS9NLFFBQWIsQ0FBc0I5SSxNQUEvRCxJQUF5RXVNLE9BQU8sS0FBSyxDQUF6RixFQUE0RjtBQUN4RnVLLGVBQVcsQ0FBQ3pULElBQUksQ0FBQ3dTLE9BQUwsQ0FBYS9NLFFBQWQsRUFBd0J6RixJQUFJLENBQUN3UyxPQUFMLENBQWE3TSxNQUFyQyxFQUE2QzNGLElBQTdDLEVBQW1EekYsTUFBbkQsRUFBMkR1VCxPQUEzRCxFQUFvRTFOLFdBQXBFLEVBQWlGRixXQUFqRixDQUFYO0FBQ0g7QUFDRDROLFNBQU8sQ0FBQ3VHLE9BQVI7O0FBRUg7O0FBRUQsU0FBUzBDLFNBQVQsQ0FBbUIxVyxVQUFuQixFQUErQkwsSUFBL0IsRUFBcUN6RixNQUFyQyxFQUE2Q3VULE9BQTdDLEVBQXNEOztBQUVsRCxNQUFJa0osZ0JBQWdCLEdBQUdyTyxjQUFjLENBQUN0SSxVQUFELEVBQWFMLElBQWIsRUFBbUJ6RixNQUFuQixDQUFyQztBQUNJMkYsYUFBVyxHQUFHOFcsZ0JBQWdCLENBQUM5VyxXQURuQztBQUVJc0wsUUFBTSxHQUFHd0wsZ0JBQWdCLENBQUN4TCxNQUY5QjtBQUdJQyxNQUFJLEdBQUd1TCxnQkFBZ0IsQ0FBQ3ZMLElBSDVCO0FBSUlyTCxhQUFXLEdBQUc0VyxnQkFBZ0IsQ0FBQzVXLFdBSm5DOztBQU1BLE1BQUl1UCxNQUFNLEdBQUczUCxJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNPLE9BQXJCLEdBQStCUCxNQUFNLENBQUNHLFdBQXRDLEdBQW9ESCxNQUFNLENBQUNLLFlBQXhFO0FBQ0EsTUFBSStYLElBQUksR0FBR3BZLE1BQU0sQ0FBQ08sT0FBbEI7OztBQUdIO0FBQ0EsTUFBR2tGLElBQUksQ0FBQ3NMLFlBQUwsSUFBcUJ0TCxJQUFJLENBQUM4SSxLQUFMLENBQVdtTyxVQUFuQyxFQUE4QztBQUM3QyxRQUFJQyxPQUFPLEdBQUNsWCxJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNPLE9BQXJCLEdBQStCUCxNQUFNLENBQUNLLFlBQXRDLEdBQXFELElBQUVvRixJQUFJLENBQUNqRixVQUF4RTtBQUNBLFFBQUlvYyxpQkFBaUIsR0FBQzFMLElBQUksR0FBQ0QsTUFBM0I7QUFDQSxRQUFJNEwsZ0JBQWdCLEdBQUNoWCxXQUFXLElBQUVGLFdBQVcsQ0FBQ3ZELE1BQVosR0FBbUIsQ0FBckIsQ0FBaEM7QUFDQSxRQUFJMGEsV0FBVyxHQUFDRixpQkFBaUIsR0FBQ0EsaUJBQWxCLEdBQW9DQyxnQkFBcEQ7QUFDQSxRQUFJRSxVQUFVLEdBQUMsQ0FBZjtBQUNBLFFBQUl0WCxJQUFJLENBQUNnVSxnQkFBVCxFQUEwQjtBQUN6QnNELGdCQUFVLEdBQUMsQ0FBQ3RYLElBQUksQ0FBQ2dVLGdCQUFOLEdBQXdCbUQsaUJBQXhCLEdBQTJDQyxnQkFBdEQ7QUFDQTtBQUNEdEosV0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFdBQU8sQ0FBQ3lKLFVBQVIsQ0FBbUIsT0FBbkI7QUFDQXpKLFdBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQStTLFdBQU8sQ0FBQ08sY0FBUixDQUF1QnJPLElBQUksQ0FBQzhJLEtBQUwsQ0FBVzBPLHFCQUFYLElBQW9DLFNBQTNEO0FBQ0ExSixXQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUIwTCxPQUF2QjtBQUNBcEosV0FBTyxDQUFDVyxNQUFSLENBQWVoRCxJQUFmLEVBQXFCeUwsT0FBckI7QUFDQXBKLFdBQU8sQ0FBQ2dCLE1BQVI7QUFDQWhCLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDeUosVUFBUixDQUFtQixPQUFuQjtBQUNBekosV0FBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsV0FBTyxDQUFDTyxjQUFSLENBQXVCck8sSUFBSSxDQUFDOEksS0FBTCxDQUFXMk8sV0FBWCxJQUF5QixTQUFoRDtBQUNBM0osV0FBTyxDQUFDVSxNQUFSLENBQWVoRCxNQUFNLEdBQUM4TCxVQUF0QixFQUFrQ0osT0FBbEM7QUFDQXBKLFdBQU8sQ0FBQ1csTUFBUixDQUFlakQsTUFBTSxHQUFDOEwsVUFBUCxHQUFrQkQsV0FBakMsRUFBOENILE9BQTlDO0FBQ0FwSixXQUFPLENBQUNnQixNQUFSO0FBQ0FoQixXQUFPLENBQUNjLFNBQVI7QUFDQTs7QUFFRWQsU0FBTyxDQUFDc0csSUFBUjs7QUFFQSxNQUFJcFUsSUFBSSxDQUFDZ1UsZ0JBQUwsSUFBeUJoVSxJQUFJLENBQUNnVSxnQkFBTCxLQUEwQixDQUF2RCxFQUEwRDtBQUN0RGxHLFdBQU8sQ0FBQ0UsU0FBUixDQUFrQmhPLElBQUksQ0FBQ2dVLGdCQUF2QixFQUF5QyxDQUF6QztBQUNIOztBQUVEbEcsU0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFNBQU8sQ0FBQ08sY0FBUixDQUF1QnJPLElBQUksQ0FBQzhJLEtBQUwsQ0FBVytKLFNBQVgsSUFBd0IsU0FBL0M7QUFDSC9FLFNBQU8sQ0FBQ3lKLFVBQVIsQ0FBbUIsTUFBbkI7QUFDQXpKLFNBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQSxNQUFHaUYsSUFBSSxDQUFDOEksS0FBTCxDQUFXMkosUUFBWCxJQUFxQixNQUF4QixFQUErQjtBQUM5QjNFLFdBQU8sQ0FBQzhFLFdBQVIsQ0FBb0IsQ0FBQzVTLElBQUksQ0FBQzhJLEtBQUwsQ0FBVzRKLFVBQVosRUFBdUIxUyxJQUFJLENBQUM4SSxLQUFMLENBQVc0SixVQUFsQyxDQUFwQjtBQUNBO0FBQ0UsTUFBSTFTLElBQUksQ0FBQzhJLEtBQUwsQ0FBVzRPLFdBQVgsS0FBMkIsSUFBL0IsRUFBcUM7QUFDakMsUUFBSTFYLElBQUksQ0FBQzhJLEtBQUwsQ0FBV3ZKLElBQVgsS0FBb0IsYUFBeEIsRUFBdUM7QUFDbkNXLGlCQUFXLENBQUNxRCxPQUFaLENBQW9CLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUN2QyxZQUFJQSxLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ1hxUixpQkFBTyxDQUFDVSxNQUFSLENBQWUvTCxJQUFJLEdBQUdyQyxXQUFXLEdBQUcsQ0FBcEMsRUFBdUN1UCxNQUF2QztBQUNBN0IsaUJBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBSSxHQUFHckMsV0FBVyxHQUFHLENBQXBDLEVBQXVDdVAsTUFBTSxHQUFHLElBQUUzUCxJQUFJLENBQUNqRixVQUF2RDtBQUNIO0FBQ0osT0FMRDtBQU1ILEtBUEQsTUFPTztBQUNIbUYsaUJBQVcsQ0FBQ3FELE9BQVosQ0FBb0IsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3ZDcVIsZUFBTyxDQUFDVSxNQUFSLENBQWUvTCxJQUFmLEVBQXFCa04sTUFBckI7QUFDQTdCLGVBQU8sQ0FBQ1csTUFBUixDQUFlaE0sSUFBZixFQUFxQmtRLElBQXJCO0FBQ0gsT0FIRDtBQUlIO0FBQ0o7QUFDRDdFLFNBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxTQUFPLENBQUNnQixNQUFSO0FBQ0hoQixTQUFPLENBQUM4RSxXQUFSLENBQW9CLEVBQXBCOztBQUVBO0FBQ0EsTUFBSTVTLElBQUksQ0FBQzhJLEtBQUwsQ0FBV3lFLFFBQVgsS0FBd0IsSUFBNUIsRUFBa0M7QUFDakM7QUFDQSxRQUFJb0ssVUFBVSxHQUFHM1gsSUFBSSxDQUFDM0IsS0FBTCxHQUFhLElBQUk5RCxNQUFNLENBQUNPLE9BQXhCLEdBQWtDUCxNQUFNLENBQUNDLFVBQXpDLEdBQXNERCxNQUFNLENBQUNNLGVBQTlFO0FBQ0EsUUFBSStjLGtCQUFrQixHQUFHbmEsSUFBSSxDQUFDZ0UsR0FBTCxDQUFTcEIsVUFBVSxDQUFDMUQsTUFBcEIsRUFBNEJjLElBQUksQ0FBQ2tDLElBQUwsQ0FBVWdZLFVBQVUsR0FBR3BkLE1BQU0sQ0FBQ1csUUFBcEIsR0FBK0IsR0FBekMsQ0FBNUIsQ0FBekI7QUFDQSxRQUFJMmMsS0FBSyxHQUFHcGEsSUFBSSxDQUFDa0MsSUFBTCxDQUFVVSxVQUFVLENBQUMxRCxNQUFYLEdBQW9CaWIsa0JBQTlCLENBQVo7QUFDQXZYLGNBQVUsR0FBR0EsVUFBVSxDQUFDbUMsR0FBWCxDQUFlLFVBQVVDLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUNsRCxhQUFPQSxLQUFLLEdBQUdvYixLQUFSLEtBQWtCLENBQWxCLEdBQXNCLEVBQXRCLEdBQTJCcFYsSUFBbEM7QUFDQSxLQUZZLENBQWI7O0FBSUEsUUFBSWxJLE1BQU0sQ0FBQ3VkLGdCQUFQLEtBQTRCLENBQWhDLEVBQW1DO0FBQ2xDelgsZ0JBQVUsQ0FBQ2tELE9BQVgsQ0FBbUIsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3pDLFlBQUlrSixNQUFNLEdBQUd2RixXQUFXLEdBQUcsQ0FBZCxHQUFrQjhDLFdBQVcsQ0FBQ1QsSUFBRCxDQUFYLEdBQW9CLENBQW5EO0FBQ0FxTCxlQUFPLENBQUNNLFNBQVI7QUFDQU4sZUFBTyxDQUFDK0IsV0FBUixDQUFvQnRWLE1BQU0sQ0FBQ1csUUFBM0I7QUFDQTRTLGVBQU8sQ0FBQ1MsWUFBUixDQUFxQnZPLElBQUksQ0FBQzhJLEtBQUwsQ0FBV3VLLFNBQVgsSUFBd0IsU0FBN0M7QUFDQXZGLGVBQU8sQ0FBQ2dDLFFBQVIsQ0FBaUJyTixJQUFqQixFQUF1QnZDLFdBQVcsQ0FBQ3pELEtBQUQsQ0FBWCxHQUFxQmtKLE1BQTVDLEVBQW9EZ0ssTUFBTSxHQUFHcFYsTUFBTSxDQUFDVyxRQUFoQixHQUEyQixDQUEvRTtBQUNBNFMsZUFBTyxDQUFDYyxTQUFSO0FBQ0FkLGVBQU8sQ0FBQ2dCLE1BQVI7QUFDQSxPQVJEOztBQVVBLEtBWEQsTUFXTztBQUNOek8sZ0JBQVUsQ0FBQ2tELE9BQVgsQ0FBbUIsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3pDcVIsZUFBTyxDQUFDc0csSUFBUjtBQUNBdEcsZUFBTyxDQUFDTSxTQUFSO0FBQ0FOLGVBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ0E0UyxlQUFPLENBQUNTLFlBQVIsQ0FBcUJ2TyxJQUFJLENBQUM4SSxLQUFMLENBQVd1SyxTQUFYLElBQXdCLFNBQTdDO0FBQ0EsWUFBSTVELFNBQVMsR0FBR3ZNLFdBQVcsQ0FBQ1QsSUFBRCxDQUEzQjtBQUNBLFlBQUlrRCxNQUFNLEdBQUd2RixXQUFXLEdBQUcsQ0FBZCxHQUFrQnFQLFNBQS9COztBQUVBLFlBQUlzSSxtQkFBbUIsR0FBR2xYLGtCQUFrQixDQUFDWCxXQUFXLENBQUN6RCxLQUFELENBQVgsR0FBcUIyRCxXQUFXLEdBQUcsQ0FBcEMsRUFBdUN1UCxNQUFNLEdBQUdwVixNQUFNLENBQUNXLFFBQVAsR0FBa0IsQ0FBM0IsR0FBK0IsQ0FBdEUsRUFBeUU4RSxJQUFJLENBQUN6QixNQUE5RSxDQUE1QztBQUNDMEMsY0FBTSxHQUFHOFcsbUJBQW1CLENBQUM5VyxNQUQ5QjtBQUVDRSxjQUFNLEdBQUc0VyxtQkFBbUIsQ0FBQzVXLE1BRjlCOztBQUlBMk0sZUFBTyxDQUFDOVMsTUFBUixDQUFlLENBQUMsQ0FBRCxHQUFLVCxNQUFNLENBQUN1ZCxnQkFBM0I7QUFDQWhLLGVBQU8sQ0FBQ0UsU0FBUixDQUFrQi9NLE1BQWxCLEVBQTBCRSxNQUExQjtBQUNBMk0sZUFBTyxDQUFDZ0MsUUFBUixDQUFpQnJOLElBQWpCLEVBQXVCdkMsV0FBVyxDQUFDekQsS0FBRCxDQUFYLEdBQXFCa0osTUFBNUMsRUFBb0RnSyxNQUFNLEdBQUdwVixNQUFNLENBQUNXLFFBQWhCLEdBQTJCLENBQS9FO0FBQ0E0UyxlQUFPLENBQUNjLFNBQVI7QUFDQWQsZUFBTyxDQUFDZ0IsTUFBUjtBQUNBaEIsZUFBTyxDQUFDdUcsT0FBUjtBQUNBLE9BbEJEO0FBbUJBO0FBQ0Q7QUFDRXZHLFNBQU8sQ0FBQ3VHLE9BQVI7O0FBRUg7O0FBRUQsU0FBUzJELGFBQVQsQ0FBdUIzWCxVQUF2QixFQUFrQ0wsSUFBbEMsRUFBd0N6RixNQUF4QyxFQUFnRHVULE9BQWhELEVBQXlEO0FBQ3hELE1BQUk5TixJQUFJLENBQUM2TSxLQUFMLENBQVc2SyxXQUFYLEtBQTJCLElBQS9CLEVBQXFDO0FBQzlCO0FBQ0g7QUFDRCxNQUFJdE0sWUFBWSxHQUFHcEwsSUFBSSxDQUFDekIsTUFBTCxHQUFjLElBQUloRSxNQUFNLENBQUNPLE9BQXpCLEdBQW1DUCxNQUFNLENBQUNHLFdBQTFDLEdBQXdESCxNQUFNLENBQUNLLFlBQWxGO0FBQ0EsTUFBSXdGLFdBQVcsR0FBRzNDLElBQUksQ0FBQ21DLEtBQUwsQ0FBV3dMLFlBQVksR0FBRzdRLE1BQU0sQ0FBQ0UsVUFBakMsQ0FBbEI7QUFDQSxNQUFJMFEsZUFBZSxHQUFHNVEsTUFBTSxDQUFDQyxVQUFQLEdBQW9CRCxNQUFNLENBQUNNLGVBQWpEO0FBQ0EsTUFBSTJRLE1BQU0sR0FBR2pSLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQnFRLGVBQTlCO0FBQ0gsTUFBSTZMLGdCQUFnQixHQUFHck8sY0FBYyxDQUFDdEksVUFBRCxFQUFhTCxJQUFiLEVBQW1CekYsTUFBbkIsQ0FBckM7QUFDSTJGLGFBQVcsR0FBRzhXLGdCQUFnQixDQUFDOVcsV0FEbkM7QUFFSStYLGtCQUFnQixHQUFHakIsZ0JBQWdCLENBQUM1VyxXQUZ4QztBQUdBLE1BQUk4WCxVQUFVLEdBQUNELGdCQUFnQixJQUFFL1gsV0FBVyxDQUFDdkQsTUFBWixHQUFtQixDQUFyQixDQUEvQjtBQUNBLE1BQUk4TyxJQUFJLEdBQUdELE1BQU0sR0FBQzBNLFVBQWxCOztBQUVHLE1BQUk3VyxNQUFNLEdBQUcsRUFBYjtBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRy9HLE1BQU0sQ0FBQ0UsVUFBM0IsRUFBdUM2RyxDQUFDLEVBQXhDLEVBQTRDO0FBQ3hDRCxVQUFNLENBQUN3RCxJQUFQLENBQVl0SyxNQUFNLENBQUNPLE9BQVAsR0FBaUJzRixXQUFXLEdBQUdrQixDQUEzQztBQUNIO0FBQ0RELFFBQU0sQ0FBQ3dELElBQVAsQ0FBWXRLLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQnNGLFdBQVcsR0FBRzdGLE1BQU0sQ0FBQ0UsVUFBdEMsR0FBbUQsQ0FBL0Q7O0FBRUhxVCxTQUFPLENBQUNzRyxJQUFSO0FBQ0csTUFBSXBVLElBQUksQ0FBQ2dVLGdCQUFMLElBQXlCaFUsSUFBSSxDQUFDZ1UsZ0JBQUwsS0FBMEIsQ0FBdkQsRUFBMEQ7QUFDdERsRyxXQUFPLENBQUNFLFNBQVIsQ0FBa0JoTyxJQUFJLENBQUNnVSxnQkFBdkIsRUFBeUMsQ0FBekM7QUFDSDs7QUFFSixNQUFHaFUsSUFBSSxDQUFDNk0sS0FBTCxDQUFXNEYsUUFBWCxJQUFxQixNQUF4QixFQUErQjtBQUM5QjNFLFdBQU8sQ0FBQzhFLFdBQVIsQ0FBb0IsQ0FBQzVTLElBQUksQ0FBQzZNLEtBQUwsQ0FBVzZGLFVBQVosRUFBdUIxUyxJQUFJLENBQUM2TSxLQUFMLENBQVc2RixVQUFsQyxDQUFwQjtBQUNBO0FBQ0U1RSxTQUFPLENBQUNNLFNBQVI7QUFDQU4sU0FBTyxDQUFDTyxjQUFSLENBQXVCck8sSUFBSSxDQUFDNk0sS0FBTCxDQUFXZ0csU0FBWCxJQUF3QixTQUEvQzs7QUFFQS9FLFNBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQXNHLFFBQU0sQ0FBQ2tDLE9BQVAsQ0FBZSxVQUFVZCxJQUFWLEVBQWdCaEcsS0FBaEIsRUFBdUI7QUFDbENxUixXQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUIvSSxJQUF2QjtBQUNBcUwsV0FBTyxDQUFDVyxNQUFSLENBQWVoRCxJQUFmLEVBQXFCaEosSUFBckI7QUFDSCxHQUhEO0FBSUFxTCxTQUFPLENBQUNjLFNBQVI7QUFDQWQsU0FBTyxDQUFDZ0IsTUFBUjtBQUNIaEIsU0FBTyxDQUFDOEUsV0FBUixDQUFvQixFQUFwQjs7QUFFQTlFLFNBQU8sQ0FBQ3VHLE9BQVI7QUFDQTs7QUFFRCxTQUFTOEQsU0FBVCxDQUFtQjVWLE1BQW5CLEVBQTJCdkMsSUFBM0IsRUFBaUN6RixNQUFqQyxFQUF5Q3VULE9BQXpDLEVBQWtEO0FBQzlDLE1BQUk5TixJQUFJLENBQUM2TSxLQUFMLENBQVdVLFFBQVgsS0FBd0IsSUFBNUIsRUFBa0M7QUFDOUI7QUFDSDs7QUFFRCxNQUFJNkssY0FBYyxHQUFHbEwsWUFBWSxDQUFDM0ssTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixDQUFqQztBQUNJOFMsY0FBWSxHQUFHK0ssY0FBYyxDQUFDL0ssWUFEbEM7O0FBR0EsTUFBSWxDLGVBQWUsR0FBRzVRLE1BQU0sQ0FBQ0MsVUFBUCxHQUFvQkQsTUFBTSxDQUFDTSxlQUFqRDs7QUFFQSxNQUFJdVEsWUFBWSxHQUFHcEwsSUFBSSxDQUFDekIsTUFBTCxHQUFjLElBQUloRSxNQUFNLENBQUNPLE9BQXpCLEdBQW1DUCxNQUFNLENBQUNHLFdBQTFDLEdBQXdESCxNQUFNLENBQUNLLFlBQWxGO0FBQ0EsTUFBSXdGLFdBQVcsR0FBRzNDLElBQUksQ0FBQ21DLEtBQUwsQ0FBV3dMLFlBQVksR0FBRzdRLE1BQU0sQ0FBQ0UsVUFBakMsQ0FBbEI7QUFDQSxNQUFJK1EsTUFBTSxHQUFHalIsTUFBTSxDQUFDTyxPQUFQLEdBQWlCcVEsZUFBOUI7QUFDQSxNQUFJTSxJQUFJLEdBQUd6TCxJQUFJLENBQUMzQixLQUFMLEdBQWE5RCxNQUFNLENBQUNPLE9BQS9CO0FBQ0EsTUFBSTZYLElBQUksR0FBRzNTLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ08sT0FBckIsR0FBK0JQLE1BQU0sQ0FBQ0csV0FBdEMsR0FBb0RILE1BQU0sQ0FBQ0ssWUFBdEU7O0FBRUE7QUFDSGtULFNBQU8sQ0FBQ00sU0FBUjtBQUNHTixTQUFPLENBQUNTLFlBQVIsQ0FBcUJ2TyxJQUFJLENBQUNpVSxVQUFMLElBQW1CLFNBQXhDO0FBQ0EsTUFBSWpVLElBQUksQ0FBQ2dVLGdCQUFMLEdBQXdCLENBQTVCLEVBQStCO0FBQzNCbEcsV0FBTyxDQUFDb0csUUFBUixDQUFpQixDQUFqQixFQUFvQixDQUFwQixFQUF1QjFJLE1BQXZCLEVBQStCbUgsSUFBSSxHQUFHcFksTUFBTSxDQUFDRyxXQUE3QztBQUNIO0FBQ0RvVCxTQUFPLENBQUNvRyxRQUFSLENBQWlCekksSUFBakIsRUFBdUIsQ0FBdkIsRUFBMEJ6TCxJQUFJLENBQUMzQixLQUEvQixFQUFzQ3NVLElBQUksR0FBR3BZLE1BQU0sQ0FBQ0csV0FBcEQ7QUFDSG9ULFNBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxTQUFPLENBQUNnQixNQUFSOztBQUVHLE1BQUl6TixNQUFNLEdBQUcsRUFBYjtBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsSUFBSS9HLE1BQU0sQ0FBQ0UsVUFBNUIsRUFBd0M2RyxDQUFDLEVBQXpDLEVBQTZDO0FBQ3pDRCxVQUFNLENBQUN3RCxJQUFQLENBQVl0SyxNQUFNLENBQUNPLE9BQVAsR0FBaUJzRixXQUFXLEdBQUdrQixDQUEzQztBQUNIOzs7QUFHRCtMLGNBQVksQ0FBQzlKLE9BQWIsQ0FBcUIsVUFBVWQsSUFBVixFQUFnQmhHLEtBQWhCLEVBQXVCO0FBQ3hDLFFBQUlxVSxHQUFHLEdBQUd6UCxNQUFNLENBQUM1RSxLQUFELENBQU4sR0FBZ0I0RSxNQUFNLENBQUM1RSxLQUFELENBQXRCLEdBQWdDa1csSUFBMUM7QUFDTjdFLFdBQU8sQ0FBQ00sU0FBUjtBQUNBTixXQUFPLENBQUMrQixXQUFSLENBQW9CdFYsTUFBTSxDQUFDVyxRQUEzQjtBQUNBNFMsV0FBTyxDQUFDUyxZQUFSLENBQXFCdk8sSUFBSSxDQUFDNk0sS0FBTCxDQUFXd0csU0FBWCxJQUF3QixTQUE3QztBQUNNdkYsV0FBTyxDQUFDZ0MsUUFBUixDQUFpQnJOLElBQWpCLEVBQXVCbEksTUFBTSxDQUFDTyxPQUFQLEdBQWlCUCxNQUFNLENBQUNNLGVBQS9DLEVBQWdFaVcsR0FBRyxHQUFHdlcsTUFBTSxDQUFDVyxRQUFQLEdBQWtCLENBQXhGO0FBQ040UyxXQUFPLENBQUNjLFNBQVI7QUFDQWQsV0FBTyxDQUFDZ0IsTUFBUjtBQUNHLEdBUkQ7OztBQVdBLE1BQUk5TyxJQUFJLENBQUM2TSxLQUFMLENBQVdvQyxLQUFmLEVBQXNCO0FBQ2xCa0Ysa0JBQWMsQ0FBQ25VLElBQUksQ0FBQzZNLEtBQUwsQ0FBV29DLEtBQVosRUFBbUJqUCxJQUFuQixFQUF5QnpGLE1BQXpCLEVBQWlDdVQsT0FBakMsQ0FBZDtBQUNIO0FBQ0o7O0FBRUQsU0FBU3VLLFVBQVQsQ0FBb0I5VixNQUFwQixFQUE0QnZDLElBQTVCLEVBQWtDekYsTUFBbEMsRUFBMEN1VCxPQUExQyxFQUFtRDtBQUMvQyxNQUFJOU4sSUFBSSxDQUFDaUksTUFBTCxLQUFjLEtBQWxCLEVBQXlCO0FBQ3JCO0FBQ0g7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFJcVEsY0FBYyxHQUFHdFEsYUFBYSxDQUFDekYsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixDQUFsQztBQUNJMk4sWUFBVSxHQUFHb1EsY0FBYyxDQUFDcFEsVUFEaEM7O0FBR0EsTUFBSXBOLE9BQU8sR0FBRyxJQUFFa0YsSUFBSSxDQUFDakYsVUFBckI7QUFDQSxNQUFJb04sU0FBUyxHQUFHLEtBQUduSSxJQUFJLENBQUNqRixVQUF4QjtBQUNBLE1BQUlxTixVQUFVLEdBQUcsS0FBR3BJLElBQUksQ0FBQ2pGLFVBQXpCO0FBQ0FtTixZQUFVLENBQUMzRSxPQUFYLENBQW1CLFVBQVVnVixRQUFWLEVBQW9CQyxTQUFwQixFQUErQjtBQUM5QyxRQUFJbmEsS0FBSyxHQUFHLENBQVo7QUFDQWthLFlBQVEsQ0FBQ2hWLE9BQVQsQ0FBaUIsVUFBVWQsSUFBVixFQUFnQjtBQUM3QkEsVUFBSSxDQUFDa0MsSUFBTCxHQUFZbEMsSUFBSSxDQUFDa0MsSUFBTCxJQUFhLFdBQXpCO0FBQ0F0RyxXQUFLLElBQUksSUFBSXZELE9BQUosR0FBY29JLFdBQVcsQ0FBQ1QsSUFBSSxDQUFDa0MsSUFBTixDQUF6QixHQUF1Q3lELFVBQWhEO0FBQ0gsS0FIRDtBQUlBLFFBQUlvRCxNQUFNLEdBQUcsQ0FBQ3hMLElBQUksQ0FBQzNCLEtBQUwsR0FBYUEsS0FBZCxJQUF1QixDQUF2QixHQUEyQnZELE9BQXhDO0FBQ0EsUUFBSTZVLE1BQU0sR0FBRzNQLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ08sT0FBckIsR0FBK0JQLE1BQU0sQ0FBQ0ssWUFBdEMsR0FBcUQ0ZCxTQUFTLElBQUlqZSxNQUFNLENBQUNXLFFBQVAsR0FBa0JpTixTQUF0QixDQUE5RCxHQUFpR3JOLE9BQWpHLEdBQTJHcU4sU0FBeEg7O0FBRUEyRixXQUFPLENBQUMrQixXQUFSLENBQW9CdFYsTUFBTSxDQUFDVyxRQUEzQjtBQUNBcWQsWUFBUSxDQUFDaFYsT0FBVCxDQUFpQixVQUFVZCxJQUFWLEVBQWdCO0FBQzdCLGNBQVF6QyxJQUFJLENBQUNULElBQWI7QUFDSSxhQUFLLE1BQUw7QUFDSXVPLGlCQUFPLENBQUNNLFNBQVI7QUFDQU4saUJBQU8sQ0FBQ1EsWUFBUixDQUFxQixJQUFFdE8sSUFBSSxDQUFDakYsVUFBNUI7QUFDQStTLGlCQUFPLENBQUNPLGNBQVIsQ0FBdUI1TCxJQUFJLENBQUNDLEtBQTVCO0FBQ0FvTCxpQkFBTyxDQUFDUyxZQUFSLENBQXFCOUwsSUFBSSxDQUFDQyxLQUExQjtBQUNBb0wsaUJBQU8sQ0FBQ1UsTUFBUixDQUFlaEQsTUFBTSxHQUFHLE1BQUl4TCxJQUFJLENBQUNqRixVQUFqQyxFQUE2QzRVLE1BQU0sR0FBRyxJQUFFM1AsSUFBSSxDQUFDakYsVUFBN0Q7QUFDQStTLGlCQUFPLENBQUNZLEdBQVIsQ0FBWWxELE1BQU0sR0FBRyxNQUFJeEwsSUFBSSxDQUFDakYsVUFBOUIsRUFBMEM0VSxNQUFNLEdBQUcsSUFBRTNQLElBQUksQ0FBQ2pGLFVBQTFELEVBQXNFLElBQUVpRixJQUFJLENBQUNqRixVQUE3RSxFQUF5RixDQUF6RixFQUE0RixJQUFJMEMsSUFBSSxDQUFDbUQsRUFBckc7QUFDQWtOLGlCQUFPLENBQUNjLFNBQVI7QUFDQWQsaUJBQU8sQ0FBQ2UsSUFBUjtBQUNBZixpQkFBTyxDQUFDZ0IsTUFBUjtBQUNBO0FBQ0osYUFBSyxLQUFMO0FBQ1hoQixpQkFBTyxDQUFDTSxTQUFSO0FBQ0FOLGlCQUFPLENBQUNRLFlBQVIsQ0FBcUIsSUFBRXRPLElBQUksQ0FBQ2pGLFVBQTVCO0FBQ0ErUyxpQkFBTyxDQUFDTyxjQUFSLENBQXVCNUwsSUFBSSxDQUFDQyxLQUE1QjtBQUNBb0wsaUJBQU8sQ0FBQ1MsWUFBUixDQUFxQjlMLElBQUksQ0FBQ0MsS0FBMUI7QUFDQW9MLGlCQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQU0sR0FBRyxNQUFJeEwsSUFBSSxDQUFDakYsVUFBakMsRUFBNkM0VSxNQUFNLEdBQUcsSUFBRTNQLElBQUksQ0FBQ2pGLFVBQTdEO0FBQ0ErUyxpQkFBTyxDQUFDWSxHQUFSLENBQVlsRCxNQUFNLEdBQUcsTUFBSXhMLElBQUksQ0FBQ2pGLFVBQTlCLEVBQTBDNFUsTUFBTSxHQUFHLElBQUUzUCxJQUFJLENBQUNqRixVQUExRCxFQUFzRSxJQUFFaUYsSUFBSSxDQUFDakYsVUFBN0UsRUFBeUYsQ0FBekYsRUFBNEYsSUFBSTBDLElBQUksQ0FBQ21ELEVBQXJHO0FBQ0FrTixpQkFBTyxDQUFDYyxTQUFSO0FBQ0FkLGlCQUFPLENBQUNlLElBQVI7QUFDQWYsaUJBQU8sQ0FBQ2dCLE1BQVI7QUFDQTtBQUNXLGFBQUssTUFBTDtBQUNJaEIsaUJBQU8sQ0FBQ00sU0FBUjtBQUNBTixpQkFBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsaUJBQU8sQ0FBQ08sY0FBUixDQUF1QjVMLElBQUksQ0FBQ0MsS0FBNUI7QUFDQW9MLGlCQUFPLENBQUNTLFlBQVIsQ0FBcUI5TCxJQUFJLENBQUNDLEtBQTFCO0FBQ0FvTCxpQkFBTyxDQUFDVSxNQUFSLENBQWVoRCxNQUFNLEdBQUcsTUFBSXhMLElBQUksQ0FBQ2pGLFVBQWpDLEVBQTZDNFUsTUFBTSxHQUFHLElBQUUzUCxJQUFJLENBQUNqRixVQUE3RDtBQUNBK1MsaUJBQU8sQ0FBQ1ksR0FBUixDQUFZbEQsTUFBTSxHQUFHLE1BQUl4TCxJQUFJLENBQUNqRixVQUE5QixFQUEwQzRVLE1BQU0sR0FBRyxJQUFFM1AsSUFBSSxDQUFDakYsVUFBMUQsRUFBc0UsSUFBRWlGLElBQUksQ0FBQ2pGLFVBQTdFLEVBQXlGLENBQXpGLEVBQTRGLElBQUkwQyxJQUFJLENBQUNtRCxFQUFyRztBQUNBa04saUJBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxpQkFBTyxDQUFDZSxJQUFSO0FBQ0FmLGlCQUFPLENBQUNnQixNQUFSO0FBQ0E7QUFDaEI7QUFDQSxhQUFLLE9BQUw7QUFDQztBQUNELGFBQUssUUFBTDtBQUNDO0FBQ1c7QUFDSWhCLGlCQUFPLENBQUNNLFNBQVI7QUFDQU4saUJBQU8sQ0FBQ1MsWUFBUixDQUFxQjlMLElBQUksQ0FBQ0MsS0FBMUI7QUFDQW9MLGlCQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUJtRSxNQUF2QjtBQUNBN0IsaUJBQU8sQ0FBQ29HLFFBQVIsQ0FBaUIxSSxNQUFqQixFQUF5Qm1FLE1BQXpCLEVBQWlDLEtBQUczUCxJQUFJLENBQUNqRixVQUF6QyxFQUFxRCxLQUFHaUYsSUFBSSxDQUFDakYsVUFBN0Q7QUFDQStTLGlCQUFPLENBQUNjLFNBQVI7QUFDQWQsaUJBQU8sQ0FBQ2UsSUFBUjtBQUNBZixpQkFBTyxDQUFDZ0IsTUFBUixHQTlDUjs7QUFnREF0RCxZQUFNLElBQUkxUSxPQUFPLEdBQUdzTixVQUFwQjtBQUNBMEYsYUFBTyxDQUFDTSxTQUFSO0FBQ1ROLGFBQU8sQ0FBQytCLFdBQVIsQ0FBb0J0VixNQUFNLENBQUNXLFFBQTNCO0FBQ1M0UyxhQUFPLENBQUNTLFlBQVIsQ0FBcUJ2TyxJQUFJLENBQUM4RixLQUFMLENBQVcyUyxlQUFYLElBQThCLFNBQW5EO0FBQ0EzSyxhQUFPLENBQUNnQyxRQUFSLENBQWlCck4sSUFBSSxDQUFDa0MsSUFBdEIsRUFBNEI2RyxNQUE1QixFQUFvQ21FLE1BQU0sR0FBRyxJQUFFM1AsSUFBSSxDQUFDakYsVUFBaEIsR0FBMkIsSUFBRWlGLElBQUksQ0FBQ2pGLFVBQXRFO0FBQ0ErUyxhQUFPLENBQUNjLFNBQVI7QUFDQWQsYUFBTyxDQUFDZ0IsTUFBUjtBQUNBdEQsWUFBTSxJQUFJdEksV0FBVyxDQUFDVCxJQUFJLENBQUNrQyxJQUFOLENBQVgsR0FBeUIsSUFBSTdKLE9BQXZDO0FBQ0gsS0F6REQ7QUEwREgsR0FwRUQ7QUFxRUg7O0FBRUQsU0FBUzRkLGlCQUFULENBQTJCblcsTUFBM0IsRUFBbUN2QyxJQUFuQyxFQUF5Q3pGLE1BQXpDLEVBQWlEdVQsT0FBakQsRUFBMEQ7QUFDdEQsTUFBSTVFLE9BQU8sR0FBR3hNLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQjBHLFNBQXpDLEdBQXFEMUcsU0FBUyxDQUFDLENBQUQsQ0FBOUQsR0FBb0UsQ0FBbEY7O0FBRUEsTUFBSWljLFNBQVMsR0FBRzNZLElBQUksQ0FBQzhGLEtBQUwsQ0FBVzhTLEdBQVgsSUFBa0IsRUFBbEM7QUFDQXJXLFFBQU0sR0FBR29ILGdCQUFnQixDQUFDcEgsTUFBRCxFQUFTMkcsT0FBVCxDQUF6QjtBQUNBLE1BQUltSCxjQUFjLEdBQUc7QUFDakJ0UyxLQUFDLEVBQUVpQyxJQUFJLENBQUMzQixLQUFMLEdBQWEsQ0FEQztBQUVqQkMsS0FBQyxFQUFFLENBQUMwQixJQUFJLENBQUN6QixNQUFMLEdBQWNoRSxNQUFNLENBQUNLLFlBQXRCLElBQXNDLENBRnhCLEVBQXJCOztBQUlBLE1BQUlxTSxNQUFNLEdBQUd4SixJQUFJLENBQUNnRSxHQUFMLENBQVM0TyxjQUFjLENBQUN0UyxDQUFmLEdBQW1CeEQsTUFBTSxDQUFDYyxtQkFBMUIsR0FBZ0RkLE1BQU0sQ0FBQ2UsbUJBQXZELEdBQTZFZixNQUFNLENBQUNzZSxrQkFBN0YsRUFBaUh4SSxjQUFjLENBQUMvUixDQUFmLEdBQW1CL0QsTUFBTSxDQUFDYyxtQkFBMUIsR0FBZ0RkLE1BQU0sQ0FBQ2UsbUJBQXhLLENBQWI7QUFDQSxNQUFJMEUsSUFBSSxDQUFDK1UsU0FBVCxFQUFvQjtBQUNoQjlOLFVBQU0sSUFBSSxFQUFWO0FBQ0gsR0FGRCxNQUVPO0FBQ0hBLFVBQU0sSUFBSSxJQUFJMU0sTUFBTSxDQUFDTyxPQUFyQjtBQUNIOztBQUVKLE1BQUlnZSxZQUFZLEdBQUM3UixNQUFNLEdBQUMxTSxNQUFNLENBQUNjLG1CQUFQLEdBQTJCLENBQW5EOzs7QUFHR2tILFFBQU0sR0FBR0EsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBVXFTLFVBQVYsRUFBc0I7QUFDdENBLGNBQVUsQ0FBQ25OLE9BQVgsSUFBc0IsQ0FBQ2lSLFNBQVMsQ0FBQ0ksV0FBVixJQUF5QixDQUExQixJQUErQnRiLElBQUksQ0FBQ21ELEVBQXBDLEdBQXlDLEdBQS9EO0FBQ0EsV0FBT2lVLFVBQVA7QUFDSCxHQUhRLENBQVQ7QUFJQXRTLFFBQU0sQ0FBQ2dCLE9BQVAsQ0FBZSxVQUFVc1IsVUFBVixFQUFxQjVJLFdBQXJCLEVBQWtDO0FBQ25ELFFBQUdqTSxJQUFJLENBQUN3UyxPQUFSLEVBQWdCO0FBQ2YsVUFBR3hTLElBQUksQ0FBQ3dTLE9BQUwsQ0FBYS9WLEtBQWIsSUFBb0J3UCxXQUF2QixFQUFtQztBQUNsQzZCLGVBQU8sQ0FBQ00sU0FBUjtBQUNBTixlQUFPLENBQUNTLFlBQVIsQ0FBcUI5UCxRQUFRLENBQUNvVyxVQUFVLENBQUNuUyxLQUFaLEVBQW1CMUMsSUFBSSxDQUFDOEYsS0FBTCxDQUFXOFMsR0FBWCxDQUFlSSxhQUFmLElBQWdDLEdBQW5ELENBQTdCO0FBQ0FsTCxlQUFPLENBQUNVLE1BQVIsQ0FBZTZCLGNBQWMsQ0FBQ3RTLENBQTlCLEVBQWlDc1MsY0FBYyxDQUFDL1IsQ0FBaEQ7QUFDQXdQLGVBQU8sQ0FBQ1ksR0FBUixDQUFZMkIsY0FBYyxDQUFDdFMsQ0FBM0IsRUFBOEJzUyxjQUFjLENBQUMvUixDQUE3QyxFQUFnRHdhLFlBQWhELEVBQThEakUsVUFBVSxDQUFDbk4sT0FBekUsRUFBa0ZtTixVQUFVLENBQUNuTixPQUFYLEdBQXFCLElBQUltTixVQUFVLENBQUNsTixZQUFmLEdBQThCbEssSUFBSSxDQUFDbUQsRUFBMUk7QUFDQWtOLGVBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxlQUFPLENBQUNlLElBQVI7QUFDQTtBQUNEO0FBQ0tmLFdBQU8sQ0FBQ00sU0FBUjtBQUNBTixXQUFPLENBQUNRLFlBQVIsQ0FBcUIsSUFBRXRPLElBQUksQ0FBQ2pGLFVBQTVCO0FBQ0ErUyxXQUFPLENBQUNPLGNBQVIsQ0FBdUIsU0FBdkI7QUFDQVAsV0FBTyxDQUFDUyxZQUFSLENBQXFCc0csVUFBVSxDQUFDblMsS0FBaEM7QUFDQW9MLFdBQU8sQ0FBQ1UsTUFBUixDQUFlNkIsY0FBYyxDQUFDdFMsQ0FBOUIsRUFBaUNzUyxjQUFjLENBQUMvUixDQUFoRDtBQUNBd1AsV0FBTyxDQUFDWSxHQUFSLENBQVkyQixjQUFjLENBQUN0UyxDQUEzQixFQUE4QnNTLGNBQWMsQ0FBQy9SLENBQTdDLEVBQWdEMkksTUFBaEQsRUFBd0Q0TixVQUFVLENBQUNuTixPQUFuRSxFQUE0RW1OLFVBQVUsQ0FBQ25OLE9BQVgsR0FBcUIsSUFBSW1OLFVBQVUsQ0FBQ2xOLFlBQWYsR0FBOEJsSyxJQUFJLENBQUNtRCxFQUFwSTtBQUNBa04sV0FBTyxDQUFDYyxTQUFSO0FBQ0FkLFdBQU8sQ0FBQ2UsSUFBUjtBQUNBLFFBQUk3TyxJQUFJLENBQUNpWixnQkFBTCxLQUEwQixJQUE5QixFQUFvQztBQUNoQ25MLGFBQU8sQ0FBQ2dCLE1BQVI7QUFDSDtBQUNKLEdBdEJEOztBQXdCQSxNQUFJOU8sSUFBSSxDQUFDVCxJQUFMLEtBQWMsTUFBbEIsRUFBMEI7QUFDdEIsUUFBSTJaLGFBQWEsR0FBR2pTLE1BQU0sR0FBRyxHQUE3QjtBQUNBLFFBQUksT0FBT2pILElBQUksQ0FBQzhGLEtBQUwsQ0FBVzhTLEdBQVgsQ0FBZU8sU0FBdEIsS0FBb0MsUUFBcEMsSUFBZ0RuWixJQUFJLENBQUM4RixLQUFMLENBQVc4UyxHQUFYLENBQWVPLFNBQWYsR0FBMkIsQ0FBL0UsRUFBa0Y7QUFDOUVELG1CQUFhLEdBQUd6YixJQUFJLENBQUMrRCxHQUFMLENBQVMsQ0FBVCxFQUFZeUYsTUFBTSxHQUFHakgsSUFBSSxDQUFDOEYsS0FBTCxDQUFXOFMsR0FBWCxDQUFlTyxTQUFwQyxDQUFoQjtBQUNIO0FBQ0RyTCxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDUyxZQUFSLENBQXFCdk8sSUFBSSxDQUFDaVUsVUFBTCxJQUFtQixTQUF4QztBQUNBbkcsV0FBTyxDQUFDVSxNQUFSLENBQWU2QixjQUFjLENBQUN0UyxDQUE5QixFQUFpQ3NTLGNBQWMsQ0FBQy9SLENBQWhEO0FBQ0F3UCxXQUFPLENBQUNZLEdBQVIsQ0FBWTJCLGNBQWMsQ0FBQ3RTLENBQTNCLEVBQThCc1MsY0FBYyxDQUFDL1IsQ0FBN0MsRUFBZ0Q0YSxhQUFoRCxFQUErRCxDQUEvRCxFQUFrRSxJQUFJemIsSUFBSSxDQUFDbUQsRUFBM0U7QUFDQWtOLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNlLElBQVI7QUFDSDs7QUFFRCxNQUFJN08sSUFBSSxDQUFDK1UsU0FBTCxLQUFtQixLQUFuQixJQUE0QjdMLE9BQU8sS0FBSyxDQUE1QyxFQUErQztBQUMzQztBQUNBLFFBQUlrUSxLQUFLLEdBQUcsS0FBWjtBQUNBLFNBQUssSUFBSTlYLENBQUMsR0FBRyxDQUFSLEVBQVdtRyxHQUFHLEdBQUdsRixNQUFNLENBQUM1RixNQUE3QixFQUFxQzJFLENBQUMsR0FBR21HLEdBQXpDLEVBQThDbkcsQ0FBQyxFQUEvQyxFQUFtRDtBQUMvQyxVQUFJaUIsTUFBTSxDQUFDakIsQ0FBRCxDQUFOLENBQVVxQyxJQUFWLEdBQWlCLENBQXJCLEVBQXdCO0FBQ3BCeVYsYUFBSyxHQUFHLElBQVI7QUFDQTtBQUNIO0FBQ0o7O0FBRUQsUUFBSUEsS0FBSixFQUFXO0FBQ1BsSSxpQkFBVyxDQUFDM08sTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLEVBQWdDN0csTUFBaEMsRUFBd0NvSixjQUF4QyxDQUFYO0FBQ0g7QUFDSjs7QUFFRCxNQUFJbkgsT0FBTyxLQUFLLENBQVosSUFBaUJsSixJQUFJLENBQUNULElBQUwsS0FBYyxNQUFuQyxFQUEyQztBQUN2Q3dQLGlCQUFhLENBQUMvTyxJQUFELEVBQU96RixNQUFQLEVBQWV1VCxPQUFmLENBQWI7QUFDSDs7QUFFRCxTQUFPO0FBQ0gzTCxVQUFNLEVBQUVrTyxjQURMO0FBRUhwSixVQUFNLEVBQUVBLE1BRkw7QUFHSDFFLFVBQU0sRUFBRUEsTUFITCxFQUFQOztBQUtIOztBQUVELFNBQVM4VyxvQkFBVCxDQUE4QjlXLE1BQTlCLEVBQXNDdkMsSUFBdEMsRUFBNEN6RixNQUE1QyxFQUFvRHVULE9BQXBELEVBQTZEO0FBQ3pELE1BQUk1RSxPQUFPLEdBQUd4TSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLENBQWxGOztBQUVBLE1BQUltTixZQUFZLEdBQUc3SixJQUFJLENBQUM4RixLQUFMLENBQVd3VCxNQUFYLElBQXFCLEVBQXhDO0FBQ0h6UCxjQUFZLENBQUNwSixVQUFiLEdBQXdCb0osWUFBWSxDQUFDcEosVUFBYixHQUF5Qm9KLFlBQVksQ0FBQ3BKLFVBQXRDLEdBQWtELElBQTFFO0FBQ0FvSixjQUFZLENBQUNuSixRQUFiLEdBQXNCbUosWUFBWSxDQUFDbkosUUFBYixHQUF1Qm1KLFlBQVksQ0FBQ25KLFFBQXBDLEdBQStDLElBQXJFO0FBQ0FtSixjQUFZLENBQUN0SyxJQUFiLEdBQWtCc0ssWUFBWSxDQUFDdEssSUFBYixHQUFtQnNLLFlBQVksQ0FBQ3RLLElBQWhDLEdBQXVDLFNBQXpEOztBQUVHZ0QsUUFBTSxHQUFHcUgsbUJBQW1CLENBQUNySCxNQUFELEVBQVNzSCxZQUFULEVBQXVCWCxPQUF2QixDQUE1QjtBQUNBLE1BQUltSCxjQUFjLEdBQUc7QUFDakJ0UyxLQUFDLEVBQUVpQyxJQUFJLENBQUMzQixLQUFMLEdBQWEsQ0FEQztBQUVqQkMsS0FBQyxFQUFHMEIsSUFBSSxDQUFDekIsTUFBTixHQUFnQixDQUZGLEVBQXJCOztBQUlBLE1BQUkwSSxNQUFNLEdBQUd4SixJQUFJLENBQUNnRSxHQUFMLENBQVM0TyxjQUFjLENBQUN0UyxDQUF4QixFQUE0QnNTLGNBQWMsQ0FBQy9SLENBQTNDLENBQWI7O0FBRUgsTUFBSSxPQUFPdUwsWUFBWSxDQUFDeEwsS0FBcEIsS0FBOEIsUUFBOUIsSUFBMEN3TCxZQUFZLENBQUN4TCxLQUFiLEdBQXFCLENBQW5FLEVBQXNFO0FBQ2xFd0wsZ0JBQVksQ0FBQ3hMLEtBQWIsR0FBbUJ3TCxZQUFZLENBQUN4TCxLQUFoQztBQUNILEdBRkQsTUFFSztBQUNKd0wsZ0JBQVksQ0FBQ3hMLEtBQWIsR0FBbUIsS0FBRzJCLElBQUksQ0FBQ2pGLFVBQTNCO0FBQ0E7QUFDRGtNLFFBQU0sSUFBSTFNLE1BQU0sQ0FBQ08sT0FBUCxHQUFlK08sWUFBWSxDQUFDeEwsS0FBYixHQUFtQixDQUE1Qzs7QUFFQTtBQUNBeVAsU0FBTyxDQUFDUSxZQUFSLENBQXFCekUsWUFBWSxDQUFDeEwsS0FBbEMsRUF2QjRELENBdUJsQjtBQUMxQ3lQLFNBQU8sQ0FBQ08sY0FBUixDQUF1QnhFLFlBQVksQ0FBQzBQLGVBQWIsSUFBZ0MsU0FBdkQsRUF4QjRELENBd0JPO0FBQ25FekwsU0FBTyxDQUFDeUosVUFBUixDQUFtQixPQUFuQixFQXpCNEQsQ0F5Qi9CO0FBQzdCekosU0FBTyxDQUFDTSxTQUFSLEdBMUI0RCxDQTBCdkM7QUFDckIsTUFBR3ZFLFlBQVksQ0FBQ3RLLElBQWIsSUFBbUIsU0FBdEIsRUFBZ0M7QUFDL0J1TyxXQUFPLENBQUNZLEdBQVIsQ0FBWTJCLGNBQWMsQ0FBQ3RTLENBQTNCLEVBQThCc1MsY0FBYyxDQUFDL1IsQ0FBN0MsRUFBZ0QySSxNQUFoRCxFQUF3RDRDLFlBQVksQ0FBQ3BKLFVBQWIsR0FBMEJoRCxJQUFJLENBQUNtRCxFQUF2RixFQUEyRmlKLFlBQVksQ0FBQ25KLFFBQWIsR0FBd0JqRCxJQUFJLENBQUNtRCxFQUF4SCxFQUE0SCxLQUE1SDtBQUNBLEdBRkQsTUFFSztBQUNKa04sV0FBTyxDQUFDWSxHQUFSLENBQVkyQixjQUFjLENBQUN0UyxDQUEzQixFQUE4QnNTLGNBQWMsQ0FBQy9SLENBQTdDLEVBQWdEMkksTUFBaEQsRUFBd0QsQ0FBeEQsRUFBMkQsSUFBSXhKLElBQUksQ0FBQ21ELEVBQXBFLEVBQXdFLEtBQXhFO0FBQ0E7O0FBRURrTixTQUFPLENBQUNnQixNQUFSLEdBakM0RCxDQWlDMUM7OztBQUdmdk0sUUFBTSxDQUFDZ0IsT0FBUCxDQUFlLFVBQVVzUixVQUFWLEVBQXNCO0FBQ3ZDL0csV0FBTyxDQUFDUSxZQUFSLENBQXFCekUsWUFBWSxDQUFDeEwsS0FBbEM7QUFDQXlQLFdBQU8sQ0FBQ08sY0FBUixDQUF1QndHLFVBQVUsQ0FBQ25TLEtBQWxDO0FBQ0FvTCxXQUFPLENBQUN5SixVQUFSLENBQW1CLE9BQW5CO0FBQ0F6SixXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDWSxHQUFSLENBQVkyQixjQUFjLENBQUN0UyxDQUEzQixFQUE4QnNTLGNBQWMsQ0FBQy9SLENBQTdDLEVBQWdEMkksTUFBaEQsRUFBd0Q0QyxZQUFZLENBQUNwSixVQUFiLEdBQTBCaEQsSUFBSSxDQUFDbUQsRUFBdkYsRUFBMkZpVSxVQUFVLENBQUNsTixZQUFYLEdBQTBCbEssSUFBSSxDQUFDbUQsRUFBMUgsRUFBOEgsS0FBOUg7QUFDQWtOLFdBQU8sQ0FBQ2dCLE1BQVI7O0FBRUcsR0FSRDtBQVNBQyxlQUFhLENBQUMvTyxJQUFELEVBQU96RixNQUFQLEVBQWV1VCxPQUFmLENBQWI7QUFDQSxTQUFPO0FBQ0gzTCxVQUFNLEVBQUVrTyxjQURMO0FBRUhwSixVQUFNLEVBQUVBLE1BRkw7QUFHSDFFLFVBQU0sRUFBRUEsTUFITCxFQUFQOztBQUtIOztBQUVELFNBQVNpWCxtQkFBVCxDQUE2Qm5aLFVBQTdCLEVBQXdDa0MsTUFBeEMsRUFBZ0R2QyxJQUFoRCxFQUFzRHpGLE1BQXRELEVBQThEdVQsT0FBOUQsRUFBdUU7QUFDdEUsTUFBSTVFLE9BQU8sR0FBR3hNLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQjBHLFNBQXpDLEdBQXFEMUcsU0FBUyxDQUFDLENBQUQsQ0FBOUQsR0FBb0UsQ0FBbEY7QUFDQSxNQUFJMk4sV0FBVyxHQUFHckssSUFBSSxDQUFDOEYsS0FBTCxDQUFXMlQsS0FBWCxJQUFvQixFQUF0QztBQUNBcFAsYUFBVyxDQUFDNUosVUFBWixHQUF1QjRKLFdBQVcsQ0FBQzVKLFVBQVosR0FBd0I0SixXQUFXLENBQUM1SixVQUFwQyxHQUFnRCxJQUF2RTtBQUNBLE1BQUc0SixXQUFXLENBQUNHLFFBQVosSUFBc0JwSCxTQUF6QixFQUFtQztBQUNsQ2lILGVBQVcsQ0FBQ0csUUFBWixHQUFxQkgsV0FBVyxDQUFDNUosVUFBakM7QUFDQTtBQUNELE1BQUc0SixXQUFXLENBQUNJLE9BQVosSUFBcUJySCxTQUF4QixFQUFrQztBQUNqQ2lILGVBQVcsQ0FBQ0ksT0FBWixHQUFvQixDQUFwQjtBQUNBO0FBQ0RKLGFBQVcsQ0FBQzNKLFFBQVosR0FBcUIySixXQUFXLENBQUMzSixRQUFaLEdBQXNCMkosV0FBVyxDQUFDM0osUUFBbEMsR0FBNkMsSUFBbEU7QUFDQUwsWUFBVSxHQUFHMEosa0JBQWtCLENBQUMxSixVQUFELEVBQVlnSyxXQUFXLENBQUM1SixVQUF4QixFQUFtQzRKLFdBQVcsQ0FBQzNKLFFBQS9DLENBQS9CO0FBQ0EsTUFBSTJQLGNBQWMsR0FBRztBQUNqQnRTLEtBQUMsRUFBRWlDLElBQUksQ0FBQzNCLEtBQUwsR0FBYSxDQURDO0FBRWpCQyxLQUFDLEVBQUcwQixJQUFJLENBQUN6QixNQUFOLEdBQWdCLENBRkYsRUFBckI7O0FBSUEsTUFBSTBJLE1BQU0sR0FBR3hKLElBQUksQ0FBQ2dFLEdBQUwsQ0FBUzRPLGNBQWMsQ0FBQ3RTLENBQXhCLEVBQTRCc1MsY0FBYyxDQUFDL1IsQ0FBM0MsQ0FBYjtBQUNBLE1BQUksT0FBTytMLFdBQVcsQ0FBQ2hNLEtBQW5CLEtBQTZCLFFBQTdCLElBQXlDZ00sV0FBVyxDQUFDaE0sS0FBWixHQUFvQixDQUFqRSxFQUFvRTtBQUNoRWdNLGVBQVcsQ0FBQ2hNLEtBQVosR0FBa0JnTSxXQUFXLENBQUNoTSxLQUE5QjtBQUNILEdBRkQsTUFFSztBQUNKZ00sZUFBVyxDQUFDaE0sS0FBWixHQUFrQixLQUFHMkIsSUFBSSxDQUFDakYsVUFBMUI7QUFDQTtBQUNEa00sUUFBTSxJQUFJMU0sTUFBTSxDQUFDTyxPQUFQLEdBQWV1UCxXQUFXLENBQUNoTSxLQUFaLEdBQWtCLENBQTNDO0FBQ0EsTUFBSXFiLFdBQVcsR0FBR3pTLE1BQU0sR0FBQ29ELFdBQVcsQ0FBQ2hNLEtBQXJDOzs7O0FBSUE7QUFDQXlQLFNBQU8sQ0FBQ1EsWUFBUixDQUFxQmpFLFdBQVcsQ0FBQ2hNLEtBQWpDO0FBQ0F5UCxTQUFPLENBQUN5SixVQUFSLENBQW1CLE1BQW5CO0FBQ0FsWCxZQUFVLENBQUNrRCxPQUFYLENBQW1CLFVBQVVvVyxjQUFWLEVBQTBCO0FBQzVDN0wsV0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFdBQU8sQ0FBQ08sY0FBUixDQUF1QnNMLGNBQWMsQ0FBQ2pYLEtBQXRDO0FBQ0FvTCxXQUFPLENBQUNZLEdBQVIsQ0FBWTJCLGNBQWMsQ0FBQ3RTLENBQTNCLEVBQThCc1MsY0FBYyxDQUFDL1IsQ0FBN0MsRUFBZ0QySSxNQUFoRCxFQUF3RDBTLGNBQWMsQ0FBQ3pQLFlBQWYsR0FBOEJ6TSxJQUFJLENBQUNtRCxFQUEzRixFQUErRitZLGNBQWMsQ0FBQ3hQLFVBQWYsR0FBNEIxTSxJQUFJLENBQUNtRCxFQUFoSSxFQUFvSSxLQUFwSTtBQUNBa04sV0FBTyxDQUFDZ0IsTUFBUjtBQUNBLEdBTEQ7QUFNQWhCLFNBQU8sQ0FBQ3NHLElBQVI7O0FBRUE7QUFDQSxNQUFJdEssVUFBVSxHQUFDTyxXQUFXLENBQUM1SixVQUFaLEdBQXVCNEosV0FBVyxDQUFDM0osUUFBbkMsR0FBNEMsQ0FBM0Q7QUFDQTJKLGFBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JxSixTQUF0QixHQUFnQ3ZQLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JxSixTQUF0QixHQUFpQ3ZQLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JxSixTQUF2RCxHQUFtRSxDQUFuRztBQUNBdlAsYUFBVyxDQUFDa0csU0FBWixDQUFzQkMsV0FBdEIsR0FBa0NuRyxXQUFXLENBQUNrRyxTQUFaLENBQXNCQyxXQUF0QixHQUFtQ25HLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JDLFdBQXpELEdBQXVFLEVBQXpHO0FBQ0FuRyxhQUFXLENBQUNrRyxTQUFaLENBQXNCbFMsS0FBdEIsR0FBNEJnTSxXQUFXLENBQUNrRyxTQUFaLENBQXNCbFMsS0FBdEIsR0FBNkJnTSxXQUFXLENBQUNrRyxTQUFaLENBQXNCbFMsS0FBbkQsR0FBMkQsS0FBRzJCLElBQUksQ0FBQ2pGLFVBQS9GO0FBQ0FzUCxhQUFXLENBQUNrRyxTQUFaLENBQXNCN04sS0FBdEIsR0FBNEIySCxXQUFXLENBQUNrRyxTQUFaLENBQXNCN04sS0FBdEIsR0FBNkIySCxXQUFXLENBQUNrRyxTQUFaLENBQXNCN04sS0FBbkQsR0FBMkQsU0FBdkY7QUFDQTJILGFBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JzSixXQUF0QixHQUFrQ3hQLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JzSixXQUF0QixHQUFtQ3hQLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JzSixXQUF6RCxHQUF1RSxDQUF6RztBQUNBeFAsYUFBVyxDQUFDa0csU0FBWixDQUFzQnVKLFVBQXRCLEdBQWlDelAsV0FBVyxDQUFDa0csU0FBWixDQUFzQnVKLFVBQXRCLEdBQWtDelAsV0FBVyxDQUFDa0csU0FBWixDQUFzQnVKLFVBQXhELEdBQXFFLElBQUU5WixJQUFJLENBQUNqRixVQUE3Rzs7QUFFQSxNQUFJdVYsVUFBVSxHQUFDeEcsVUFBVSxHQUFDTyxXQUFXLENBQUNrRyxTQUFaLENBQXNCQyxXQUFoRDtBQUNBLE1BQUl1SixVQUFVLEdBQUNqUSxVQUFVLEdBQUNPLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JDLFdBQWpDLEdBQTZDbkcsV0FBVyxDQUFDa0csU0FBWixDQUFzQnNKLFdBQWxGO0FBQ0EsTUFBSXJPLE1BQU0sR0FBQyxDQUFDdkUsTUFBRCxHQUFRb0QsV0FBVyxDQUFDaE0sS0FBWixHQUFrQixHQUExQixHQUE4QmdNLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0JxSixTQUEvRDtBQUNBLE1BQUluTyxJQUFJLEdBQUMsQ0FBQ3hFLE1BQUQsR0FBUW9ELFdBQVcsQ0FBQ2hNLEtBQVosR0FBa0IsR0FBMUIsR0FBOEJnTSxXQUFXLENBQUNrRyxTQUFaLENBQXNCcUosU0FBcEQsR0FBOER2UCxXQUFXLENBQUNrRyxTQUFaLENBQXNCbFMsS0FBN0Y7QUFDQSxNQUFJMmIsU0FBUyxHQUFDLENBQUMvUyxNQUFELEdBQVFvRCxXQUFXLENBQUNoTSxLQUFaLEdBQWtCLEdBQTFCLEdBQThCZ00sV0FBVyxDQUFDa0csU0FBWixDQUFzQnFKLFNBQXBELEdBQThEdlAsV0FBVyxDQUFDa0csU0FBWixDQUFzQnVKLFVBQWxHOztBQUVBaE0sU0FBTyxDQUFDRSxTQUFSLENBQWtCcUMsY0FBYyxDQUFDdFMsQ0FBakMsRUFBb0NzUyxjQUFjLENBQUMvUixDQUFuRDtBQUNBd1AsU0FBTyxDQUFDOVMsTUFBUixDQUFlLENBQUNxUCxXQUFXLENBQUM1SixVQUFaLEdBQXVCLENBQXhCLElBQTRCaEQsSUFBSSxDQUFDbUQsRUFBaEQ7O0FBRUEsT0FBSSxJQUFJVSxDQUFDLEdBQUMsQ0FBVixFQUFjQSxDQUFDLEdBQUUrSSxXQUFXLENBQUNrRyxTQUFaLENBQXNCQyxXQUF0QixHQUFrQyxDQUFuRCxFQUFzRGxQLENBQUMsRUFBdkQsRUFBMEQ7QUFDekR3TSxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDTyxjQUFSLENBQXVCaEUsV0FBVyxDQUFDa0csU0FBWixDQUFzQjdOLEtBQTdDO0FBQ0FvTCxXQUFPLENBQUNRLFlBQVIsQ0FBcUIsSUFBRXRPLElBQUksQ0FBQ2pGLFVBQTVCO0FBQ0ErUyxXQUFPLENBQUNVLE1BQVIsQ0FBZWhELE1BQWYsRUFBdUIsQ0FBdkI7QUFDQXNDLFdBQU8sQ0FBQ1csTUFBUixDQUFlaEQsSUFBZixFQUFxQixDQUFyQjtBQUNBcUMsV0FBTyxDQUFDZ0IsTUFBUjtBQUNBaEIsV0FBTyxDQUFDOVMsTUFBUixDQUFlc1YsVUFBVSxHQUFFN1MsSUFBSSxDQUFDbUQsRUFBaEM7QUFDQTtBQUNEa04sU0FBTyxDQUFDdUcsT0FBUjs7QUFFQXZHLFNBQU8sQ0FBQ3NHLElBQVI7QUFDQXRHLFNBQU8sQ0FBQ0UsU0FBUixDQUFrQnFDLGNBQWMsQ0FBQ3RTLENBQWpDLEVBQW9Dc1MsY0FBYyxDQUFDL1IsQ0FBbkQ7QUFDQXdQLFNBQU8sQ0FBQzlTLE1BQVIsQ0FBZSxDQUFDcVAsV0FBVyxDQUFDNUosVUFBWixHQUF1QixDQUF4QixJQUE0QmhELElBQUksQ0FBQ21ELEVBQWhEOztBQUVBLE9BQUksSUFBSVUsRUFBQyxHQUFDLENBQVYsRUFBY0EsRUFBQyxHQUFFK0ksV0FBVyxDQUFDa0csU0FBWixDQUFzQkMsV0FBdEIsR0FBa0NuRyxXQUFXLENBQUNrRyxTQUFaLENBQXNCc0osV0FBeEQsR0FBb0UsQ0FBckYsRUFBd0Z2WSxFQUFDLEVBQXpGLEVBQTRGO0FBQzNGd00sV0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFdBQU8sQ0FBQ08sY0FBUixDQUF1QmhFLFdBQVcsQ0FBQ2tHLFNBQVosQ0FBc0I3TixLQUE3QztBQUNBb0wsV0FBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsV0FBTyxDQUFDVSxNQUFSLENBQWVoRCxNQUFmLEVBQXVCLENBQXZCO0FBQ0FzQyxXQUFPLENBQUNXLE1BQVIsQ0FBZXVMLFNBQWYsRUFBMEIsQ0FBMUI7QUFDQWxNLFdBQU8sQ0FBQ2dCLE1BQVI7QUFDQWhCLFdBQU8sQ0FBQzlTLE1BQVIsQ0FBZStlLFVBQVUsR0FBRXRjLElBQUksQ0FBQ21ELEVBQWhDO0FBQ0E7QUFDRGtOLFNBQU8sQ0FBQ3VHLE9BQVI7O0FBRUE7QUFDQWhLLGFBQVcsQ0FBQ0MsT0FBWixDQUFvQmpNLEtBQXBCLEdBQTBCZ00sV0FBVyxDQUFDQyxPQUFaLENBQW9Cak0sS0FBcEIsR0FBMkJnTSxXQUFXLENBQUNDLE9BQVosQ0FBb0JqTSxLQUEvQyxHQUF1RCxLQUFHMkIsSUFBSSxDQUFDakYsVUFBekY7QUFDQSxNQUFJc1AsV0FBVyxDQUFDQyxPQUFaLENBQW9CNUgsS0FBcEIsSUFBNkJVLFNBQTdCLElBQTBDaUgsV0FBVyxDQUFDQyxPQUFaLENBQW9CNUgsS0FBcEIsSUFBNkIsTUFBM0UsRUFBbUY7QUFDL0UySCxlQUFXLENBQUNDLE9BQVosQ0FBb0I1SCxLQUFwQixJQUE2QixNQUE3QjtBQUNILEdBRkQsTUFFSztBQUNKMkgsZUFBVyxDQUFDQyxPQUFaLENBQW9CNUgsS0FBcEIsSUFBNkIySCxXQUFXLENBQUNDLE9BQVosQ0FBb0I1SCxLQUFqRDtBQUNBO0FBQ0RILFFBQU0sR0FBRzZILGtCQUFrQixDQUFDN0gsTUFBRCxFQUFRbEMsVUFBUixFQUFtQmdLLFdBQW5CLEVBQWdDbkIsT0FBaEMsQ0FBM0I7O0FBRUEzRyxRQUFNLENBQUNnQixPQUFQLENBQWUsVUFBVXNSLFVBQVYsRUFBc0I7QUFDcEMvRyxXQUFPLENBQUNzRyxJQUFSO0FBQ0F0RyxXQUFPLENBQUNFLFNBQVIsQ0FBa0JxQyxjQUFjLENBQUN0UyxDQUFqQyxFQUFvQ3NTLGNBQWMsQ0FBQy9SLENBQW5EO0FBQ0F3UCxXQUFPLENBQUM5UyxNQUFSLENBQWUsQ0FBQzZaLFVBQVUsQ0FBQ2xOLFlBQVgsR0FBd0IsQ0FBekIsSUFBNkJsSyxJQUFJLENBQUNtRCxFQUFqRDtBQUNBa04sV0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFdBQU8sQ0FBQ1MsWUFBUixDQUFxQnNHLFVBQVUsQ0FBQ25TLEtBQWhDO0FBQ0FvTCxXQUFPLENBQUNVLE1BQVIsQ0FBZW5FLFdBQVcsQ0FBQ0MsT0FBWixDQUFvQmpNLEtBQW5DLEVBQTBDLENBQTFDO0FBQ0F5UCxXQUFPLENBQUNXLE1BQVIsQ0FBZSxDQUFmLEVBQWlCLENBQUNwRSxXQUFXLENBQUNDLE9BQVosQ0FBb0JqTSxLQUFyQixHQUEyQixDQUE1QztBQUNBeVAsV0FBTyxDQUFDVyxNQUFSLENBQWUsQ0FBQ2lMLFdBQWhCLEVBQTRCLENBQTVCO0FBQ0E1TCxXQUFPLENBQUNXLE1BQVIsQ0FBZSxDQUFmLEVBQWlCcEUsV0FBVyxDQUFDQyxPQUFaLENBQW9Cak0sS0FBcEIsR0FBMEIsQ0FBM0M7QUFDQXlQLFdBQU8sQ0FBQ1csTUFBUixDQUFlcEUsV0FBVyxDQUFDQyxPQUFaLENBQW9Cak0sS0FBbkMsRUFBeUMsQ0FBekM7QUFDQXlQLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNlLElBQVI7QUFDQWYsV0FBTyxDQUFDTSxTQUFSO0FBQ0FOLFdBQU8sQ0FBQ1MsWUFBUixDQUFxQixTQUFyQjtBQUNBVCxXQUFPLENBQUNZLEdBQVIsQ0FBWSxDQUFaLEVBQWUsQ0FBZixFQUFrQnJFLFdBQVcsQ0FBQ0MsT0FBWixDQUFvQmpNLEtBQXBCLEdBQTBCLENBQTVDLEVBQStDLENBQS9DLEVBQWlELElBQUdaLElBQUksQ0FBQ21ELEVBQXpELEVBQTZELEtBQTdEO0FBQ0FrTixXQUFPLENBQUNlLElBQVI7QUFDQWYsV0FBTyxDQUFDdUcsT0FBUjtBQUNBLEdBbEJEOztBQW9CQSxNQUFJclUsSUFBSSxDQUFDK1UsU0FBTCxLQUFtQixLQUF2QixFQUE4QjtBQUM3QjNFLGtCQUFjLENBQUMvRixXQUFELEVBQWNwRCxNQUFkLEVBQXNCb0osY0FBdEIsRUFBc0NyUSxJQUF0QyxFQUE0Q3pGLE1BQTVDLEVBQW9EdVQsT0FBcEQsQ0FBZDtBQUNBOztBQUVEaUIsZUFBYSxDQUFDL08sSUFBRCxFQUFPekYsTUFBUCxFQUFldVQsT0FBZixDQUFiOztBQUVBLE1BQUk1RSxPQUFPLEtBQUssQ0FBWixJQUFpQmxKLElBQUksQ0FBQ1QsSUFBTCxLQUFjLE9BQW5DLEVBQTRDO0FBQzNDOEssZUFBVyxDQUFDRyxRQUFaLEdBQXFCakksTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVb0YsWUFBL0I7QUFDQTBDLGVBQVcsQ0FBQ0ksT0FBWixHQUFvQmxJLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVW9CLElBQTlCO0FBQ0E7QUFDRCxTQUFPO0FBQ0h4QixVQUFNLEVBQUVrTyxjQURMO0FBRUhwSixVQUFNLEVBQUVBLE1BRkw7QUFHTnlTLGVBQVcsRUFBQ0EsV0FITjtBQUlIclosY0FBVSxFQUFFQSxVQUpUO0FBS055SixjQUFVLEVBQUNBLFVBTEwsRUFBUDs7QUFPQTs7QUFFRCxTQUFTbVEsbUJBQVQsQ0FBNkIxWCxNQUE3QixFQUFxQ3ZDLElBQXJDLEVBQTJDekYsTUFBM0MsRUFBbUR1VCxPQUFuRCxFQUE0RDtBQUN4RCxNQUFJNUUsT0FBTyxHQUFHeE0sU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxDQUFsRjs7QUFFQSxNQUFJeU0sV0FBVyxHQUFHbkosSUFBSSxDQUFDOEYsS0FBTCxDQUFXc0QsS0FBWCxJQUFvQixFQUF0QztBQUNBLE1BQUk4USxlQUFlLEdBQUdoVix3QkFBd0IsQ0FBQ2xGLElBQUksQ0FBQ0ssVUFBTCxDQUFnQjFELE1BQWpCLENBQTlDO0FBQ0EsTUFBSTBULGNBQWMsR0FBRztBQUNqQnRTLEtBQUMsRUFBRWlDLElBQUksQ0FBQzNCLEtBQUwsR0FBYSxDQURDO0FBRWpCQyxLQUFDLEVBQUUsQ0FBQzBCLElBQUksQ0FBQ3pCLE1BQUwsR0FBY2hFLE1BQU0sQ0FBQ0ssWUFBdEIsSUFBc0MsQ0FGeEIsRUFBckI7OztBQUtBLE1BQUlxTSxNQUFNLEdBQUd4SixJQUFJLENBQUNnRSxHQUFMLENBQVM0TyxjQUFjLENBQUN0UyxDQUFmLElBQW9CK0csb0JBQW9CLENBQUM5RSxJQUFJLENBQUNLLFVBQU4sQ0FBcEIsR0FBd0M5RixNQUFNLENBQUMwQixvQkFBbkUsQ0FBVCxFQUFtR29VLGNBQWMsQ0FBQy9SLENBQWYsR0FBbUIvRCxNQUFNLENBQUMwQixvQkFBN0gsQ0FBYjs7QUFFQWdMLFFBQU0sSUFBSTFNLE1BQU0sQ0FBQ08sT0FBakI7O0FBRUE7QUFDQWdULFNBQU8sQ0FBQ00sU0FBUjtBQUNBTixTQUFPLENBQUNRLFlBQVIsQ0FBcUIsSUFBRXRPLElBQUksQ0FBQ2pGLFVBQTVCO0FBQ0ErUyxTQUFPLENBQUNPLGNBQVIsQ0FBdUJsRixXQUFXLENBQUMwSixTQUFaLElBQXlCLFNBQWhEO0FBQ0FxSCxpQkFBZSxDQUFDM1csT0FBaEIsQ0FBd0IsVUFBVS9DLEtBQVYsRUFBaUI7QUFDckMsUUFBSXNRLEdBQUcsR0FBRzVPLHVCQUF1QixDQUFDK0UsTUFBTSxHQUFHeEosSUFBSSxDQUFDaU0sR0FBTCxDQUFTbEosS0FBVCxDQUFWLEVBQTJCeUcsTUFBTSxHQUFHeEosSUFBSSxDQUFDdUwsR0FBTCxDQUFTeEksS0FBVCxDQUFwQyxFQUFxRDZQLGNBQXJELENBQWpDO0FBQ0F2QyxXQUFPLENBQUNVLE1BQVIsQ0FBZTZCLGNBQWMsQ0FBQ3RTLENBQTlCLEVBQWlDc1MsY0FBYyxDQUFDL1IsQ0FBaEQ7QUFDQXdQLFdBQU8sQ0FBQ1csTUFBUixDQUFlcUMsR0FBRyxDQUFDL1MsQ0FBbkIsRUFBc0IrUyxHQUFHLENBQUN4UyxDQUExQjtBQUNILEdBSkQ7QUFLQXdQLFNBQU8sQ0FBQ2dCLE1BQVI7QUFDQWhCLFNBQU8sQ0FBQ2MsU0FBUjs7QUFFQTs7QUFFQSxNQUFJdUwsS0FBSyxHQUFHLFNBQVNBLEtBQVQsQ0FBZTdZLENBQWYsRUFBa0I7QUFDMUIsUUFBSThZLFFBQVEsR0FBRyxFQUFmO0FBQ0F0TSxXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDUSxZQUFSLENBQXFCLElBQUV0TyxJQUFJLENBQUNqRixVQUE1QjtBQUNBK1MsV0FBTyxDQUFDTyxjQUFSLENBQXVCbEYsV0FBVyxDQUFDMEosU0FBWixJQUF5QixTQUFoRDtBQUNBcUgsbUJBQWUsQ0FBQzNXLE9BQWhCLENBQXdCLFVBQVUvQyxLQUFWLEVBQWlCL0QsS0FBakIsRUFBd0I7QUFDNUMsVUFBSXFVLEdBQUcsR0FBRzVPLHVCQUF1QixDQUFDK0UsTUFBTSxHQUFHMU0sTUFBTSxDQUFDeUIsY0FBaEIsR0FBaUNzRixDQUFqQyxHQUFxQzdELElBQUksQ0FBQ2lNLEdBQUwsQ0FBU2xKLEtBQVQsQ0FBdEMsRUFBdUR5RyxNQUFNLEdBQUcxTSxNQUFNLENBQUN5QixjQUFoQixHQUFpQ3NGLENBQWpDLEdBQXFDN0QsSUFBSSxDQUFDdUwsR0FBTCxDQUFTeEksS0FBVCxDQUE1RixFQUE2RzZQLGNBQTdHLENBQWpDO0FBQ0EsVUFBSTVULEtBQUssS0FBSyxDQUFkLEVBQWlCO0FBQ2IyZCxnQkFBUSxHQUFHdEosR0FBWDtBQUNBaEQsZUFBTyxDQUFDVSxNQUFSLENBQWVzQyxHQUFHLENBQUMvUyxDQUFuQixFQUFzQitTLEdBQUcsQ0FBQ3hTLENBQTFCO0FBQ0gsT0FIRCxNQUdPO0FBQ0h3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZXFDLEdBQUcsQ0FBQy9TLENBQW5CLEVBQXNCK1MsR0FBRyxDQUFDeFMsQ0FBMUI7QUFDSDtBQUNKLEtBUkQ7QUFTQXdQLFdBQU8sQ0FBQ1csTUFBUixDQUFlMkwsUUFBUSxDQUFDcmMsQ0FBeEIsRUFBMkJxYyxRQUFRLENBQUM5YixDQUFwQztBQUNBd1AsV0FBTyxDQUFDZ0IsTUFBUjtBQUNBaEIsV0FBTyxDQUFDYyxTQUFSO0FBQ0gsR0FqQkQ7O0FBbUJBLE9BQUssSUFBSXROLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLElBQUkvRyxNQUFNLENBQUN5QixjQUE1QixFQUE0Q3NGLENBQUMsRUFBN0MsRUFBaUQ7QUFDN0M2WSxTQUFLLENBQUM3WSxDQUFELENBQUw7QUFDSDs7QUFFRCxNQUFJK1ksZUFBZSxHQUFHcFIsa0JBQWtCLENBQUNpUixlQUFELEVBQWtCN0osY0FBbEIsRUFBa0NwSixNQUFsQyxFQUEwQzFFLE1BQTFDLEVBQWtEdkMsSUFBbEQsRUFBd0RrSixPQUF4RCxDQUF4Qzs7QUFFQW1SLGlCQUFlLENBQUM5VyxPQUFoQixDQUF3QixVQUFVc1IsVUFBVixFQUFzQjVJLFdBQXRCLEVBQW1DO0FBQ3ZEO0FBQ0E2QixXQUFPLENBQUNNLFNBQVI7QUFDQU4sV0FBTyxDQUFDUyxZQUFSLENBQXFCc0csVUFBVSxDQUFDblMsS0FBaEM7QUFDQW9MLFdBQU8sQ0FBQ2dJLGNBQVIsQ0FBdUIsR0FBdkI7QUFDQWpCLGNBQVUsQ0FBQ2xSLElBQVgsQ0FBZ0JKLE9BQWhCLENBQXdCLFVBQVVkLElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QjtBQUMzQyxVQUFJQSxLQUFLLEtBQUssQ0FBZCxFQUFpQjtBQUNicVIsZUFBTyxDQUFDVSxNQUFSLENBQWUvTCxJQUFJLENBQUNnSCxRQUFMLENBQWMxTCxDQUE3QixFQUFnQzBFLElBQUksQ0FBQ2dILFFBQUwsQ0FBY25MLENBQTlDO0FBQ0gsT0FGRCxNQUVPO0FBQ0h3UCxlQUFPLENBQUNXLE1BQVIsQ0FBZWhNLElBQUksQ0FBQ2dILFFBQUwsQ0FBYzFMLENBQTdCLEVBQWdDMEUsSUFBSSxDQUFDZ0gsUUFBTCxDQUFjbkwsQ0FBOUM7QUFDSDtBQUNKLEtBTkQ7QUFPQXdQLFdBQU8sQ0FBQ2MsU0FBUjtBQUNBZCxXQUFPLENBQUNlLElBQVI7QUFDQWYsV0FBTyxDQUFDZ0ksY0FBUixDQUF1QixDQUF2Qjs7QUFFQSxRQUFJOVYsSUFBSSxDQUFDN0UsY0FBTCxLQUF3QixLQUE1QixFQUFtQztBQUMvQixVQUFJZ1QsS0FBSyxHQUFHNVQsTUFBTSxDQUFDWSxjQUFQLENBQXNCOFEsV0FBVyxHQUFHMVIsTUFBTSxDQUFDWSxjQUFQLENBQXNCd0IsTUFBMUQsQ0FBWjtBQUNBLFVBQUkwRSxNQUFNLEdBQUd3VCxVQUFVLENBQUNsUixJQUFYLENBQWdCbkIsR0FBaEIsQ0FBb0IsVUFBVUMsSUFBVixFQUFnQjtBQUM3QyxlQUFPQSxJQUFJLENBQUNnSCxRQUFaO0FBQ0gsT0FGWSxDQUFiO0FBR0F5RSxvQkFBYyxDQUFDN00sTUFBRCxFQUFTd1QsVUFBVSxDQUFDblMsS0FBcEIsRUFBMkJ5TCxLQUEzQixFQUFrQ0wsT0FBbEMsRUFBMEM5TixJQUExQyxDQUFkO0FBQ0g7QUFDSixHQXZCRDtBQXdCQTtBQUNBZ1IsZ0JBQWMsQ0FBQ2tKLGVBQUQsRUFBa0JqVCxNQUFsQixFQUEwQm9KLGNBQTFCLEVBQTBDclEsSUFBMUMsRUFBZ0R6RixNQUFoRCxFQUF3RHVULE9BQXhELENBQWQ7O0FBRUEsU0FBTztBQUNIM0wsVUFBTSxFQUFFa08sY0FETDtBQUVIcEosVUFBTSxFQUFFQSxNQUZMO0FBR0hHLGFBQVMsRUFBRThTLGVBSFIsRUFBUDs7QUFLSDs7QUFFRCxTQUFTSSxVQUFULENBQW9CdGEsSUFBcEIsRUFBMEI4TixPQUExQixFQUFtQztBQUMvQkEsU0FBTyxDQUFDeU0sSUFBUjtBQUNIOztBQUVELElBQUlDLE1BQU0sR0FBRztBQUNUQyxRQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQjNKLEdBQWhCLEVBQXFCO0FBQ3pCLFdBQU9yVCxJQUFJLENBQUNtSyxHQUFMLENBQVNrSixHQUFULEVBQWMsQ0FBZCxDQUFQO0FBQ0gsR0FIUTs7QUFLVDRKLFNBQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCNUosR0FBakIsRUFBc0I7QUFDM0IsV0FBT3JULElBQUksQ0FBQ21LLEdBQUwsQ0FBU2tKLEdBQUcsR0FBRyxDQUFmLEVBQWtCLENBQWxCLElBQXVCLENBQTlCO0FBQ0gsR0FQUTs7QUFTVDZKLFdBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1CN0osR0FBbkIsRUFBd0I7QUFDL0IsUUFBSSxDQUFDQSxHQUFHLElBQUksR0FBUixJQUFlLENBQW5CLEVBQXNCO0FBQ2xCLGFBQU8sTUFBTXJULElBQUksQ0FBQ21LLEdBQUwsQ0FBU2tKLEdBQVQsRUFBYyxDQUFkLENBQWI7QUFDSCxLQUZELE1BRU87QUFDSCxhQUFPLE9BQU9yVCxJQUFJLENBQUNtSyxHQUFMLENBQVNrSixHQUFHLEdBQUcsQ0FBZixFQUFrQixDQUFsQixJQUF1QixDQUE5QixDQUFQO0FBQ0g7QUFDSixHQWZROztBQWlCVDhKLFFBQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCOUosR0FBaEIsRUFBcUI7QUFDekIsV0FBT0EsR0FBUDtBQUNILEdBbkJRLEVBQWI7OztBQXNCQSxTQUFTK0osU0FBVCxDQUFtQjdhLElBQW5CLEVBQXlCO0FBQ3JCLE9BQUs4YSxNQUFMLEdBQWMsS0FBZDtBQUNBOWEsTUFBSSxDQUFDK2EsUUFBTCxHQUFnQixPQUFPL2EsSUFBSSxDQUFDK2EsUUFBWixLQUF5QixXQUF6QixHQUF1QyxJQUF2QyxHQUE4Qy9hLElBQUksQ0FBQythLFFBQW5FO0FBQ0EvYSxNQUFJLENBQUNnYixNQUFMLEdBQWNoYixJQUFJLENBQUNnYixNQUFMLElBQWUsUUFBN0I7O0FBRUEsTUFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBRUEsTUFBSUMsb0JBQW9CLEdBQUcsU0FBU0Esb0JBQVQsR0FBZ0M7O0FBRXZELFFBQUksT0FBT0MscUJBQVAsS0FBaUMsV0FBckMsRUFBa0Q7QUFDdkQsYUFBT0EscUJBQVA7QUFDTSxLQUZELE1BRU8sSUFBSSxPQUFPQyxVQUFQLEtBQXNCLFdBQTFCLEVBQXVDOztBQUUxQyxhQUFPLFVBQVVDLElBQVYsRUFBZ0JKLEtBQWhCLEVBQXVCO0FBQzFCRyxrQkFBVSxDQUFDLFlBQVk7QUFDbkIsY0FBSUUsU0FBUyxHQUFHLENBQUMsSUFBSUMsSUFBSixFQUFqQjtBQUNBRixjQUFJLENBQUNDLFNBQUQsQ0FBSjtBQUNILFNBSFMsRUFHUEwsS0FITyxDQUFWO0FBSUgsT0FMRDtBQU1ILEtBUk0sTUFRQTs7QUFFSCxhQUFPLFVBQVVJLElBQVYsRUFBZ0I7QUFDbkJBLFlBQUksQ0FBQyxJQUFELENBQUo7QUFDSCxPQUZEO0FBR0g7QUFDSixHQWxCRDtBQW1CQSxNQUFJRyxjQUFjLEdBQUdOLG9CQUFvQixFQUF6QztBQUNBLE1BQUlPLGNBQWMsR0FBRyxJQUFyQjs7QUFFQSxNQUFJQyxLQUFLLEdBQUcsU0FBU0wsSUFBVCxDQUFjTSxTQUFkLEVBQXlCOztBQUVqQyxRQUFJQSxTQUFTLEtBQUssSUFBZCxJQUFzQixLQUFLYixNQUFMLEtBQWdCLElBQTFDLEVBQWdEO0FBQzVDOWEsVUFBSSxDQUFDNGIsU0FBTCxJQUFrQjViLElBQUksQ0FBQzRiLFNBQUwsQ0FBZSxDQUFmLENBQWxCO0FBQ0E1YixVQUFJLENBQUM2YixpQkFBTCxJQUEwQjdiLElBQUksQ0FBQzZiLGlCQUFMLEVBQTFCO0FBQ0E7QUFDSDtBQUNELFFBQUlKLGNBQWMsS0FBSyxJQUF2QixFQUE2QjtBQUN6QkEsb0JBQWMsR0FBR0UsU0FBakI7QUFDSDtBQUNELFFBQUlBLFNBQVMsR0FBR0YsY0FBWixHQUE2QnpiLElBQUksQ0FBQythLFFBQXRDLEVBQWdEO0FBQzVDLFVBQUk3UixPQUFPLEdBQUcsQ0FBQ3lTLFNBQVMsR0FBR0YsY0FBYixJQUErQnpiLElBQUksQ0FBQythLFFBQWxEO0FBQ0EsVUFBSWUsY0FBYyxHQUFHdEIsTUFBTSxDQUFDeGEsSUFBSSxDQUFDZ2IsTUFBTixDQUEzQjtBQUNBOVIsYUFBTyxHQUFHNFMsY0FBYyxDQUFDNVMsT0FBRCxDQUF4Qjs7QUFFQWxKLFVBQUksQ0FBQzRiLFNBQUwsSUFBa0I1YixJQUFJLENBQUM0YixTQUFMLENBQWUxUyxPQUFmLENBQWxCO0FBQ0FzUyxvQkFBYyxDQUFDRSxLQUFELEVBQVFULEtBQVIsQ0FBZDtBQUNILEtBUEQsTUFPTztBQUNIamIsVUFBSSxDQUFDNGIsU0FBTCxJQUFrQjViLElBQUksQ0FBQzRiLFNBQUwsQ0FBZSxDQUFmLENBQWxCO0FBQ0E1YixVQUFJLENBQUM2YixpQkFBTCxJQUEwQjdiLElBQUksQ0FBQzZiLGlCQUFMLEVBQTFCO0FBQ0g7QUFDSixHQXJCRDtBQXNCQUgsT0FBSyxHQUFHQSxLQUFLLENBQUNLLElBQU4sQ0FBVyxJQUFYLENBQVI7QUFDQVAsZ0JBQWMsQ0FBQ0UsS0FBRCxFQUFRVCxLQUFSLENBQWQ7QUFDSDs7QUFFRDtBQUNBO0FBQ0FKLFNBQVMsQ0FBQy9kLFNBQVYsQ0FBb0JrZixJQUFwQixHQUEyQixZQUFZO0FBQ25DLE9BQUtsQixNQUFMLEdBQWMsSUFBZDtBQUNILENBRkQ7O0FBSUEsU0FBU21CLFVBQVQsQ0FBb0IxYyxJQUFwQixFQUEwQlMsSUFBMUIsRUFBZ0N6RixNQUFoQyxFQUF3Q3VULE9BQXhDLEVBQWlEO0FBQzdDLE1BQUlvTyxLQUFLLEdBQUcsSUFBWjs7QUFFQSxNQUFJM1osTUFBTSxHQUFHdkMsSUFBSSxDQUFDdUMsTUFBbEI7QUFDQSxNQUFJbEMsVUFBVSxHQUFHTCxJQUFJLENBQUNLLFVBQXRCO0FBQ0FrQyxRQUFNLEdBQUdELGVBQWUsQ0FBQ0MsTUFBRCxFQUFTaEksTUFBVCxDQUF4QjtBQUNIZ0ksUUFBTSxHQUFHSSxjQUFjLENBQUNKLE1BQUQsRUFBU3ZDLElBQVQsQ0FBdkI7O0FBRUcsTUFBSXNZLGNBQWMsR0FBR3RRLGFBQWEsQ0FBQ3pGLE1BQUQsRUFBU3ZDLElBQVQsRUFBZXpGLE1BQWYsQ0FBbEM7QUFDSUssY0FBWSxHQUFHMGQsY0FBYyxDQUFDMWQsWUFEbEM7O0FBR0FMLFFBQU0sQ0FBQ0ssWUFBUCxHQUFzQkEsWUFBdEI7O0FBRUEsTUFBSThaLGFBQWEsR0FBR3hILFlBQVksQ0FBQzNLLE1BQUQsRUFBU3ZDLElBQVQsRUFBZXpGLE1BQWYsQ0FBaEM7QUFDSUMsWUFBVSxHQUFHa2EsYUFBYSxDQUFDbGEsVUFEL0I7O0FBR0FELFFBQU0sQ0FBQ0MsVUFBUCxHQUFvQkEsVUFBcEI7QUFDQSxNQUFJNkYsVUFBVSxJQUFJQSxVQUFVLENBQUMxRCxNQUE3QixFQUFxQztBQUNqQyxRQUFJd2Ysa0JBQWtCLEdBQUczVCxpQkFBaUIsQ0FBQ25JLFVBQUQsRUFBYUwsSUFBYixFQUFtQnpGLE1BQW5CLENBQTFDO0FBQ0lHLGVBQVcsR0FBR3loQixrQkFBa0IsQ0FBQ3poQixXQURyQztBQUVJOEYsU0FBSyxHQUFHMmIsa0JBQWtCLENBQUMzYixLQUYvQjs7QUFJQWpHLFVBQU0sQ0FBQ0csV0FBUCxHQUFxQkEsV0FBckI7QUFDQUgsVUFBTSxDQUFDdWQsZ0JBQVAsR0FBMEJ0WCxLQUExQjtBQUNIO0FBQ0QsTUFBSWpCLElBQUksS0FBSyxLQUFULElBQWtCQSxJQUFJLEtBQUssTUFBL0IsRUFBdUM7QUFDbkNoRixVQUFNLENBQUNzZSxrQkFBUCxHQUE0QjdZLElBQUksQ0FBQytVLFNBQUwsS0FBbUIsS0FBbkIsR0FBMkIsQ0FBM0IsR0FBK0JySyxtQkFBbUIsQ0FBQ25JLE1BQUQsQ0FBOUU7QUFDSDs7QUFFRCxNQUFJd1ksUUFBUSxHQUFHL2EsSUFBSSxDQUFDb2MsU0FBTCxHQUFpQixJQUFqQixHQUF3QixDQUF2QztBQUNBLE9BQUtDLGlCQUFMLElBQTBCLEtBQUtBLGlCQUFMLENBQXVCTCxJQUF2QixFQUExQjs7QUFFSDtBQUNBbE8sU0FBTyxDQUFDd08sU0FBUixDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QnRjLElBQUksQ0FBQzNCLEtBQTdCLEVBQW9DMkIsSUFBSSxDQUFDekIsTUFBekM7OztBQUdHLFVBQVFnQixJQUFSO0FBQ0ksU0FBSyxNQUFMO0FBQ0ksV0FBSzhjLGlCQUFMLEdBQXlCLElBQUl4QixTQUFKLENBQWM7QUFDbkNHLGNBQU0sRUFBRSxRQUQyQjtBQUVuQ0QsZ0JBQVEsRUFBRUEsUUFGeUI7QUFHbkNhLGlCQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQjFTLE9BQW5CLEVBQTRCO0FBQ2xELGNBQUdsSixJQUFJLENBQUNoRixNQUFSLEVBQWU7QUFDZDZTLHlCQUFhLENBQUNDLE9BQUQsRUFBUzlOLElBQVQsQ0FBYjtBQUNBO0FBQ2NnWSx1QkFBYSxDQUFDM1gsVUFBRCxFQUFZTCxJQUFaLEVBQWtCekYsTUFBbEIsRUFBMEJ1VCxPQUExQixDQUFiO0FBQ0FpSixtQkFBUyxDQUFDMVcsVUFBRCxFQUFhTCxJQUFiLEVBQW1CekYsTUFBbkIsRUFBMkJ1VCxPQUEzQixDQUFUO0FBQ0EsY0FBSXlPLG1CQUFtQixHQUFHbkcsa0JBQWtCLENBQUM3VCxNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLEVBQXVCdVQsT0FBdkIsRUFBZ0M1RSxPQUFoQyxDQUE1QztBQUNJaEoscUJBQVcsR0FBR3FjLG1CQUFtQixDQUFDcmMsV0FEdEM7QUFFSXFGLG1CQUFTLEdBQUdnWCxtQkFBbUIsQ0FBQ2hYLFNBRnBDO0FBR0luRixxQkFBVyxHQUFHbWMsbUJBQW1CLENBQUNuYyxXQUh0Qzs7QUFLQThiLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0JHLFdBQWhCLEdBQThCQSxXQUE5QjtBQUNBZ2MsZUFBSyxDQUFDbmMsU0FBTixDQUFnQndGLFNBQWhCLEdBQTRCQSxTQUE1QjtBQUNBMlcsZUFBSyxDQUFDbmMsU0FBTixDQUFnQkssV0FBaEIsR0FBOEJBLFdBQTlCO0FBQ0FpWSxvQkFBVSxDQUFDclksSUFBSSxDQUFDdUMsTUFBTixFQUFjdkMsSUFBZCxFQUFvQnpGLE1BQXBCLEVBQTRCdVQsT0FBNUIsQ0FBVjtBQUNBcUssbUJBQVMsQ0FBQzVWLE1BQUQsRUFBU3ZDLElBQVQsRUFBZXpGLE1BQWYsRUFBdUJ1VCxPQUF2QixDQUFUO0FBQ2YrSSwyQkFBaUIsQ0FBQzdXLElBQUQsRUFBT3pGLE1BQVAsRUFBZXVULE9BQWYsRUFBd0I1RSxPQUF4QixFQUFpQzlJLFdBQWpDLEVBQThDRixXQUE5QyxDQUFqQjtBQUNlb2Esb0JBQVUsQ0FBQ3RhLElBQUQsRUFBTzhOLE9BQVAsQ0FBVjs7QUFFSCxTQXRCa0M7QUF1Qm5DK04seUJBQWlCLEVBQUUsU0FBU0EsaUJBQVQsR0FBNkI7QUFDNUNLLGVBQUssQ0FBQ00sS0FBTixDQUFZQyxPQUFaLENBQW9CLGdCQUFwQjtBQUNILFNBekJrQyxFQUFkLENBQXpCOzs7QUE0QkE7QUFDVixTQUFLLEtBQUw7QUFDSSxXQUFLSixpQkFBTCxHQUF5QixJQUFJeEIsU0FBSixDQUFjO0FBQ25DRyxjQUFNLEVBQUUsUUFEMkI7QUFFbkNELGdCQUFRLEVBQUVBLFFBRnlCO0FBR25DYSxpQkFBUyxFQUFFLFNBQVNBLFNBQVQsQ0FBbUIxUyxPQUFuQixFQUE0QjtBQUM1QyxjQUFHbEosSUFBSSxDQUFDaEYsTUFBUixFQUFlO0FBQ2Q2Uyx5QkFBYSxDQUFDQyxPQUFELEVBQVM5TixJQUFULENBQWI7QUFDQTtBQUNRZ1ksdUJBQWEsQ0FBQzNYLFVBQUQsRUFBWUwsSUFBWixFQUFrQnpGLE1BQWxCLEVBQTBCdVQsT0FBMUIsQ0FBYjtBQUNBaUosbUJBQVMsQ0FBQzFXLFVBQUQsRUFBYUwsSUFBYixFQUFtQnpGLE1BQW5CLEVBQTJCdVQsT0FBM0IsQ0FBVDtBQUNBLGNBQUk0TyxrQkFBa0IsR0FBR25HLGlCQUFpQixDQUFDaFUsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLEVBQWdDNUUsT0FBaEMsQ0FBMUM7QUFDSWhKLHFCQUFXLEdBQUd3YyxrQkFBa0IsQ0FBQ3hjLFdBRHJDO0FBRUlxRixtQkFBUyxHQUFHbVgsa0JBQWtCLENBQUNuWCxTQUZuQztBQUdJbkYscUJBQVcsR0FBR3NjLGtCQUFrQixDQUFDdGMsV0FIckM7O0FBS0E4YixlQUFLLENBQUNuYyxTQUFOLENBQWdCRyxXQUFoQixHQUE4QkEsV0FBOUI7QUFDQWdjLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0J3RixTQUFoQixHQUE0QkEsU0FBNUI7QUFDQTJXLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0JLLFdBQWhCLEdBQThCQSxXQUE5QjtBQUNBaVksb0JBQVUsQ0FBQ3JZLElBQUksQ0FBQ3VDLE1BQU4sRUFBY3ZDLElBQWQsRUFBb0J6RixNQUFwQixFQUE0QnVULE9BQTVCLENBQVY7QUFDQXFLLG1CQUFTLENBQUM1VixNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLEVBQXVCdVQsT0FBdkIsQ0FBVDtBQUNUK0ksMkJBQWlCLENBQUM3VyxJQUFELEVBQU96RixNQUFQLEVBQWV1VCxPQUFmLEVBQXdCNUUsT0FBeEIsRUFBaUM5SSxXQUFqQyxFQUE4Q0YsV0FBOUMsQ0FBakI7QUFDU29hLG9CQUFVLENBQUN0YSxJQUFELEVBQU84TixPQUFQLENBQVY7QUFDSCxTQXJCa0M7QUFzQm5DK04seUJBQWlCLEVBQUUsU0FBU0EsaUJBQVQsR0FBNkI7QUFDNUNLLGVBQUssQ0FBQ00sS0FBTixDQUFZQyxPQUFaLENBQW9CLGdCQUFwQjtBQUNILFNBeEJrQyxFQUFkLENBQXpCOzs7QUEyQkE7QUFDRSxTQUFLLFFBQUw7QUFDRixXQUFLSixpQkFBTCxHQUF5QixJQUFJeEIsU0FBSixDQUFjO0FBQzdCRyxjQUFNLEVBQUUsUUFEcUI7QUFFN0JELGdCQUFRLEVBQUVBLFFBRm1CO0FBRzdCYSxpQkFBUyxFQUFFLFNBQVNBLFNBQVQsQ0FBbUIxUyxPQUFuQixFQUE0QjtBQUNsRCxjQUFHbEosSUFBSSxDQUFDaEYsTUFBUixFQUFlO0FBQ2Q2Uyx5QkFBYSxDQUFDQyxPQUFELEVBQVM5TixJQUFULENBQWI7QUFDQTtBQUNEZ1ksdUJBQWEsQ0FBQzNYLFVBQUQsRUFBWUwsSUFBWixFQUFrQnpGLE1BQWxCLEVBQTBCdVQsT0FBMUIsQ0FBYjtBQUNlaUosbUJBQVMsQ0FBQzFXLFVBQUQsRUFBYUwsSUFBYixFQUFtQnpGLE1BQW5CLEVBQTJCdVQsT0FBM0IsQ0FBVDtBQUNBLGNBQUk2TyxxQkFBcUIsR0FBR3JJLG9CQUFvQixDQUFDL1IsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLEVBQWdDNUUsT0FBaEMsQ0FBaEQ7QUFDSWhKLHFCQUFXLEdBQUd5YyxxQkFBcUIsQ0FBQ3pjLFdBRHhDO0FBRWRxRixtQkFBUyxHQUFHb1gscUJBQXFCLENBQUNwWCxTQUZwQjtBQUdJbkYscUJBQVcsR0FBR3VjLHFCQUFxQixDQUFDdmMsV0FIeEM7QUFJQThiLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0JHLFdBQWhCLEdBQThCQSxXQUE5QjtBQUNmZ2MsZUFBSyxDQUFDbmMsU0FBTixDQUFnQndGLFNBQWhCLEdBQTRCQSxTQUE1QjtBQUNlMlcsZUFBSyxDQUFDbmMsU0FBTixDQUFnQkssV0FBaEIsR0FBOEJBLFdBQTlCO0FBQ0FpWSxvQkFBVSxDQUFDclksSUFBSSxDQUFDdUMsTUFBTixFQUFjdkMsSUFBZCxFQUFvQnpGLE1BQXBCLEVBQTRCdVQsT0FBNUIsQ0FBVjtBQUNBcUssbUJBQVMsQ0FBQzVWLE1BQUQsRUFBU3ZDLElBQVQsRUFBZXpGLE1BQWYsRUFBdUJ1VCxPQUF2QixDQUFUO0FBQ2YrSSwyQkFBaUIsQ0FBQzdXLElBQUQsRUFBT3pGLE1BQVAsRUFBZXVULE9BQWYsRUFBd0I1RSxPQUF4QixFQUFpQzlJLFdBQWpDLEVBQThDRixXQUE5QyxDQUFqQjtBQUNlb2Esb0JBQVUsQ0FBQ3RhLElBQUQsRUFBTzhOLE9BQVAsQ0FBVjtBQUNILFNBcEI0QjtBQXFCN0IrTix5QkFBaUIsRUFBRSxTQUFTQSxpQkFBVCxHQUE2QjtBQUM1Q0ssZUFBSyxDQUFDTSxLQUFOLENBQVlDLE9BQVosQ0FBb0IsZ0JBQXBCO0FBQ0gsU0F2QjRCLEVBQWQsQ0FBekI7O0FBeUJNO0FBQ0osU0FBSyxNQUFMO0FBQ0ksV0FBS0osaUJBQUwsR0FBeUIsSUFBSXhCLFNBQUosQ0FBYztBQUNuQ0csY0FBTSxFQUFFLFFBRDJCO0FBRW5DRCxnQkFBUSxFQUFFQSxRQUZ5QjtBQUduQ2EsaUJBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1CMVMsT0FBbkIsRUFBNEI7QUFDbEQsY0FBR2xKLElBQUksQ0FBQ2hGLE1BQVIsRUFBZTtBQUNkNlMseUJBQWEsQ0FBQ0MsT0FBRCxFQUFTOU4sSUFBVCxDQUFiO0FBQ0E7QUFDRGdZLHVCQUFhLENBQUMzWCxVQUFELEVBQVlMLElBQVosRUFBa0J6RixNQUFsQixFQUEwQnVULE9BQTFCLENBQWI7QUFDZWlKLG1CQUFTLENBQUMxVyxVQUFELEVBQWFMLElBQWIsRUFBbUJ6RixNQUFuQixFQUEyQnVULE9BQTNCLENBQVQ7QUFDQSxjQUFJOE8sbUJBQW1CLEdBQUdqSCxrQkFBa0IsQ0FBQ3BULE1BQUQsRUFBU3ZDLElBQVQsRUFBZXpGLE1BQWYsRUFBdUJ1VCxPQUF2QixFQUFnQzVFLE9BQWhDLENBQTVDO0FBQ0loSixxQkFBVyxHQUFHMGMsbUJBQW1CLENBQUMxYyxXQUR0QztBQUVJcUYsbUJBQVMsR0FBR3FYLG1CQUFtQixDQUFDclgsU0FGcEM7QUFHSW5GLHFCQUFXLEdBQUd3YyxtQkFBbUIsQ0FBQ3hjLFdBSHRDOztBQUtBOGIsZUFBSyxDQUFDbmMsU0FBTixDQUFnQkcsV0FBaEIsR0FBOEJBLFdBQTlCO0FBQ0FnYyxlQUFLLENBQUNuYyxTQUFOLENBQWdCd0YsU0FBaEIsR0FBNEJBLFNBQTVCO0FBQ0EyVyxlQUFLLENBQUNuYyxTQUFOLENBQWdCSyxXQUFoQixHQUE4QkEsV0FBOUI7QUFDQWlZLG9CQUFVLENBQUNyWSxJQUFJLENBQUN1QyxNQUFOLEVBQWN2QyxJQUFkLEVBQW9CekYsTUFBcEIsRUFBNEJ1VCxPQUE1QixDQUFWO0FBQ0FxSyxtQkFBUyxDQUFDNVYsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLENBQVQ7QUFDZitJLDJCQUFpQixDQUFDN1csSUFBRCxFQUFPekYsTUFBUCxFQUFldVQsT0FBZixFQUF3QjVFLE9BQXhCLEVBQWlDOUksV0FBakMsRUFBOENGLFdBQTlDLENBQWpCOztBQUVlb2Esb0JBQVUsQ0FBQ3RhLElBQUQsRUFBTzhOLE9BQVAsQ0FBVjtBQUNILFNBdEJrQztBQXVCbkMrTix5QkFBaUIsRUFBRSxTQUFTQSxpQkFBVCxHQUE2QjtBQUM1Q0ssZUFBSyxDQUFDTSxLQUFOLENBQVlDLE9BQVosQ0FBb0IsZ0JBQXBCO0FBQ0gsU0F6QmtDLEVBQWQsQ0FBekI7O0FBMkJBO0FBQ0osU0FBSyxNQUFMO0FBQ0EsU0FBSyxLQUFMO0FBQ0ksV0FBS0osaUJBQUwsR0FBeUIsSUFBSXhCLFNBQUosQ0FBYztBQUNuQ0csY0FBTSxFQUFFLFdBRDJCO0FBRW5DRCxnQkFBUSxFQUFFQSxRQUZ5QjtBQUduQ2EsaUJBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1CMVMsT0FBbkIsRUFBNEI7QUFDbEQsY0FBR2xKLElBQUksQ0FBQ2hGLE1BQVIsRUFBZTtBQUNkNlMseUJBQWEsQ0FBQ0MsT0FBRCxFQUFTOU4sSUFBVCxDQUFiO0FBQ0E7QUFDRGtjLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0J5SCxPQUFoQixHQUEwQmtSLGlCQUFpQixDQUFDblcsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLEVBQWdDNUUsT0FBaEMsQ0FBM0M7QUFDZW1QLG9CQUFVLENBQUNyWSxJQUFJLENBQUN1QyxNQUFOLEVBQWN2QyxJQUFkLEVBQW9CekYsTUFBcEIsRUFBNEJ1VCxPQUE1QixDQUFWO0FBQ2YrSSwyQkFBaUIsQ0FBQzdXLElBQUQsRUFBT3pGLE1BQVAsRUFBZXVULE9BQWYsRUFBd0I1RSxPQUF4QixDQUFqQjtBQUNlb1Isb0JBQVUsQ0FBQ3RhLElBQUQsRUFBTzhOLE9BQVAsQ0FBVjtBQUNILFNBWGtDO0FBWW5DK04seUJBQWlCLEVBQUUsU0FBU0EsaUJBQVQsR0FBNkI7QUFDNUNLLGVBQUssQ0FBQ00sS0FBTixDQUFZQyxPQUFaLENBQW9CLGdCQUFwQjtBQUNILFNBZGtDLEVBQWQsQ0FBekI7O0FBZ0JBO0FBQ0osU0FBSyxPQUFMO0FBQ0ksV0FBS0osaUJBQUwsR0FBeUIsSUFBSXhCLFNBQUosQ0FBYztBQUNuQ0csY0FBTSxFQUFFLFdBRDJCO0FBRW5DRCxnQkFBUSxFQUFFQSxRQUZ5QjtBQUduQ2EsaUJBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1CMVMsT0FBbkIsRUFBNEI7QUFDbEQsY0FBR2xKLElBQUksQ0FBQ2hGLE1BQVIsRUFBZTtBQUNkNlMseUJBQWEsQ0FBQ0MsT0FBRCxFQUFTOU4sSUFBVCxDQUFiO0FBQ0E7QUFDRGtjLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0I4RyxTQUFoQixHQUE0Qm9ULG1CQUFtQixDQUFDMVgsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLEVBQWdDNUUsT0FBaEMsQ0FBL0M7QUFDZW1QLG9CQUFVLENBQUNyWSxJQUFJLENBQUN1QyxNQUFOLEVBQWN2QyxJQUFkLEVBQW9CekYsTUFBcEIsRUFBNEJ1VCxPQUE1QixDQUFWO0FBQ0F3TSxvQkFBVSxDQUFDdGEsSUFBRCxFQUFPOE4sT0FBUCxDQUFWO0FBQ0gsU0FWa0M7QUFXbkMrTix5QkFBaUIsRUFBRSxTQUFTQSxpQkFBVCxHQUE2QjtBQUM1Q0ssZUFBSyxDQUFDTSxLQUFOLENBQVlDLE9BQVosQ0FBb0IsZ0JBQXBCO0FBQ0gsU0Fia0MsRUFBZCxDQUF6Qjs7QUFlQTtBQUNWLFNBQUssUUFBTDtBQUNDLFdBQUtKLGlCQUFMLEdBQXlCLElBQUl4QixTQUFKLENBQWM7QUFDbkNHLGNBQU0sRUFBRSxXQUQyQjtBQUVuQ0QsZ0JBQVEsRUFBRUEsUUFGeUI7QUFHbkNhLGlCQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQjFTLE9BQW5CLEVBQTRCO0FBQ3pDLGNBQUdsSixJQUFJLENBQUNoRixNQUFSLEVBQWU7QUFDZDZTLHlCQUFhLENBQUNDLE9BQUQsRUFBUzlOLElBQVQsQ0FBYjtBQUNBO0FBQ0RrYyxlQUFLLENBQUNuYyxTQUFOLENBQWdCOGMsVUFBaEIsR0FBNkJ4RCxvQkFBb0IsQ0FBQzlXLE1BQUQsRUFBU3ZDLElBQVQsRUFBZXpGLE1BQWYsRUFBdUJ1VCxPQUF2QixFQUFnQzVFLE9BQWhDLENBQWpEO0FBQ01vUixvQkFBVSxDQUFDdGEsSUFBRCxFQUFPOE4sT0FBUCxDQUFWO0FBQ0gsU0FUa0M7QUFVbkMrTix5QkFBaUIsRUFBRSxTQUFTQSxpQkFBVCxHQUE2QjtBQUM1Q0ssZUFBSyxDQUFDTSxLQUFOLENBQVlDLE9BQVosQ0FBb0IsZ0JBQXBCO0FBQ0gsU0Faa0MsRUFBZCxDQUF6Qjs7QUFjQTtBQUNELFNBQUssT0FBTDtBQUNDLFdBQUtKLGlCQUFMLEdBQXlCLElBQUl4QixTQUFKLENBQWM7QUFDbkNHLGNBQU0sRUFBRSxXQUQyQjtBQUVuQ0QsZ0JBQVEsRUFBRUEsUUFGeUI7QUFHbkNhLGlCQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQjFTLE9BQW5CLEVBQTRCO0FBQ3pDLGNBQUdsSixJQUFJLENBQUNoRixNQUFSLEVBQWU7QUFDZDZTLHlCQUFhLENBQUNDLE9BQUQsRUFBUzlOLElBQVQsQ0FBYjtBQUNBO0FBQ0RrYyxlQUFLLENBQUNuYyxTQUFOLENBQWdCK2MsU0FBaEIsR0FBNEJ0RCxtQkFBbUIsQ0FBQ25aLFVBQUQsRUFBYWtDLE1BQWIsRUFBb0J2QyxJQUFwQixFQUEwQnpGLE1BQTFCLEVBQWtDdVQsT0FBbEMsRUFBMkM1RSxPQUEzQyxDQUEvQztBQUNNb1Isb0JBQVUsQ0FBQ3RhLElBQUQsRUFBTzhOLE9BQVAsQ0FBVjtBQUNILFNBVGtDO0FBVW5DK04seUJBQWlCLEVBQUUsU0FBU0EsaUJBQVQsR0FBNkI7QUFDNUNLLGVBQUssQ0FBQ00sS0FBTixDQUFZQyxPQUFaLENBQW9CLGdCQUFwQjtBQUNILFNBWmtDLEVBQWQsQ0FBekI7O0FBY0E7QUFDRCxTQUFLLFFBQUw7QUFDSSxXQUFLSixpQkFBTCxHQUF5QixJQUFJeEIsU0FBSixDQUFjO0FBQ25DRyxjQUFNLEVBQUUsUUFEMkI7QUFFbkNELGdCQUFRLEVBQUVBLFFBRnlCO0FBR25DYSxpQkFBUyxFQUFFLFNBQVNBLFNBQVQsQ0FBbUIxUyxPQUFuQixFQUE0QjtBQUM1QyxjQUFHbEosSUFBSSxDQUFDaEYsTUFBUixFQUFlO0FBQ2Q2Uyx5QkFBYSxDQUFDQyxPQUFELEVBQVM5TixJQUFULENBQWI7QUFDQTtBQUNEZ1ksdUJBQWEsQ0FBQzNYLFVBQUQsRUFBWUwsSUFBWixFQUFrQnpGLE1BQWxCLEVBQTBCdVQsT0FBMUIsQ0FBYjtBQUNBaUosbUJBQVMsQ0FBQzFXLFVBQUQsRUFBYUwsSUFBYixFQUFtQnpGLE1BQW5CLEVBQTJCdVQsT0FBM0IsQ0FBVDtBQUNBLGNBQUlpUCxxQkFBcUIsR0FBRy9ILG9CQUFvQixDQUFDelMsTUFBRCxFQUFTdkMsSUFBVCxFQUFlekYsTUFBZixFQUF1QnVULE9BQXZCLEVBQWdDNUUsT0FBaEMsQ0FBaEQ7QUFDSWhKLHFCQUFXLEdBQUc2YyxxQkFBcUIsQ0FBQzdjLFdBRHhDO0FBRUlxRixtQkFBUyxHQUFHd1gscUJBQXFCLENBQUN4WCxTQUZ0QztBQUdJbkYscUJBQVcsR0FBRzJjLHFCQUFxQixDQUFDM2MsV0FIeEM7O0FBS0E4YixlQUFLLENBQUNuYyxTQUFOLENBQWdCRyxXQUFoQixHQUE4QkEsV0FBOUI7QUFDQWdjLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0J3RixTQUFoQixHQUE0QkEsU0FBNUI7QUFDQTJXLGVBQUssQ0FBQ25jLFNBQU4sQ0FBZ0JLLFdBQWhCLEdBQThCQSxXQUE5QjtBQUNBaVksb0JBQVUsQ0FBQ3JZLElBQUksQ0FBQ3VDLE1BQU4sRUFBY3ZDLElBQWQsRUFBb0J6RixNQUFwQixFQUE0QnVULE9BQTVCLENBQVY7QUFDQXFLLG1CQUFTLENBQUM1VixNQUFELEVBQVN2QyxJQUFULEVBQWV6RixNQUFmLEVBQXVCdVQsT0FBdkIsQ0FBVDtBQUNBK0ksMkJBQWlCLENBQUM3VyxJQUFELEVBQU96RixNQUFQLEVBQWV1VCxPQUFmLEVBQXdCNUUsT0FBeEIsRUFBaUM5SSxXQUFqQyxFQUE4Q0YsV0FBOUMsQ0FBakI7QUFDQW9hLG9CQUFVLENBQUN0YSxJQUFELEVBQU84TixPQUFQLENBQVY7QUFDTSxTQXJCa0M7QUFzQm5DK04seUJBQWlCLEVBQUUsU0FBU0EsaUJBQVQsR0FBNkI7QUFDNUNLLGVBQUssQ0FBQ00sS0FBTixDQUFZQyxPQUFaLENBQW9CLGdCQUFwQjtBQUNILFNBeEJrQyxFQUFkLENBQXpCOztBQTBCQSxZQW5ORjs7QUFxTkg7O0FBRUQ7O0FBRUEsU0FBU08sS0FBVCxHQUFpQjtBQUNoQixPQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNBOztBQUVERCxLQUFLLENBQUNsZ0IsU0FBTixDQUFnQm9nQixnQkFBaEIsR0FBbUMsVUFBVTNkLElBQVYsRUFBZ0I0ZCxRQUFoQixFQUEwQjtBQUM1RCxPQUFLRixNQUFMLENBQVkxZCxJQUFaLElBQW9CLEtBQUswZCxNQUFMLENBQVkxZCxJQUFaLEtBQXFCLEVBQXpDO0FBQ0EsT0FBSzBkLE1BQUwsQ0FBWTFkLElBQVosRUFBa0JzRixJQUFsQixDQUF1QnNZLFFBQXZCO0FBQ0EsQ0FIRDs7QUFLQUgsS0FBSyxDQUFDbGdCLFNBQU4sQ0FBZ0IyZixPQUFoQixHQUEwQixZQUFZO0FBQ3JDLE9BQUssSUFBSVcsSUFBSSxHQUFHMWdCLFNBQVMsQ0FBQ0MsTUFBckIsRUFBNkIwZ0IsSUFBSSxHQUFHdFosS0FBSyxDQUFDcVosSUFBRCxDQUF6QyxFQUFpREUsSUFBSSxHQUFHLENBQTdELEVBQWdFQSxJQUFJLEdBQUdGLElBQXZFLEVBQTZFRSxJQUFJLEVBQWpGLEVBQXFGO0FBQ3BGRCxRQUFJLENBQUNDLElBQUQsQ0FBSixHQUFhNWdCLFNBQVMsQ0FBQzRnQixJQUFELENBQXRCO0FBQ0E7O0FBRUQsTUFBSS9kLElBQUksR0FBRzhkLElBQUksQ0FBQyxDQUFELENBQWY7QUFDQSxNQUFJRSxNQUFNLEdBQUdGLElBQUksQ0FBQ0csS0FBTCxDQUFXLENBQVgsQ0FBYjtBQUNBLE1BQUksQ0FBQyxDQUFDLEtBQUtQLE1BQUwsQ0FBWTFkLElBQVosQ0FBTixFQUF5QjtBQUN4QixTQUFLMGQsTUFBTCxDQUFZMWQsSUFBWixFQUFrQmdFLE9BQWxCLENBQTBCLFVBQVU0WixRQUFWLEVBQW9CO0FBQzdDLFVBQUk7QUFDSEEsZ0JBQVEsQ0FBQ2xZLEtBQVQsQ0FBZSxJQUFmLEVBQXFCc1ksTUFBckI7QUFDQSxPQUZELENBRUUsT0FBT3BaLENBQVAsRUFBVTtBQUNYc1osZUFBTyxDQUFDQyxLQUFSLE9BQWN2WixDQUFkO0FBQ0E7QUFDRCxLQU5EO0FBT0E7QUFDRCxDQWhCRDs7QUFrQkEsSUFBSXdaLE1BQU0sR0FBRyxTQUFTQSxNQUFULENBQWdCM2QsSUFBaEIsRUFBc0I7QUFDbENBLE1BQUksQ0FBQzlFLFFBQUwsR0FBYzhFLElBQUksQ0FBQzlFLFFBQUwsR0FBZ0I4RSxJQUFJLENBQUM5RSxRQUFMLEdBQWM4RSxJQUFJLENBQUNqRixVQUFuQyxHQUFnRCxLQUFHaUYsSUFBSSxDQUFDakYsVUFBdEU7QUFDR2lGLE1BQUksQ0FBQ2lQLEtBQUwsR0FBYWpQLElBQUksQ0FBQ2lQLEtBQUwsSUFBYyxFQUEzQjtBQUNBalAsTUFBSSxDQUFDbVAsUUFBTCxHQUFnQm5QLElBQUksQ0FBQ21QLFFBQUwsSUFBaUIsRUFBakM7QUFDQW5QLE1BQUksQ0FBQzZNLEtBQUwsR0FBYTdNLElBQUksQ0FBQzZNLEtBQUwsSUFBYyxFQUEzQjtBQUNIN00sTUFBSSxDQUFDNk0sS0FBTCxDQUFXNEYsUUFBWCxHQUFvQnpTLElBQUksQ0FBQzZNLEtBQUwsQ0FBVzRGLFFBQVgsR0FBcUJ6UyxJQUFJLENBQUM2TSxLQUFMLENBQVc0RixRQUFoQyxHQUEyQyxPQUEvRDtBQUNBelMsTUFBSSxDQUFDNk0sS0FBTCxDQUFXNkYsVUFBWCxHQUFzQjFTLElBQUksQ0FBQzZNLEtBQUwsQ0FBVzZGLFVBQVgsR0FBdUIxUyxJQUFJLENBQUM2TSxLQUFMLENBQVc2RixVQUFsQyxHQUErQyxJQUFFMVMsSUFBSSxDQUFDakYsVUFBNUU7QUFDR2lGLE1BQUksQ0FBQzhJLEtBQUwsR0FBYTlJLElBQUksQ0FBQzhJLEtBQUwsSUFBYyxFQUEzQjtBQUNIOUksTUFBSSxDQUFDOEksS0FBTCxDQUFXQyxXQUFYLEdBQXlCL0ksSUFBSSxDQUFDOEksS0FBTCxDQUFXQyxXQUFYLEdBQXlCLElBQXpCLEdBQWdDLEtBQXpEO0FBQ0EvSSxNQUFJLENBQUM4SSxLQUFMLENBQVd2SixJQUFYLEdBQWdCUyxJQUFJLENBQUM4SSxLQUFMLENBQVd2SixJQUFYLEdBQWlCUyxJQUFJLENBQUM4SSxLQUFMLENBQVd2SixJQUE1QixHQUFtQyxhQUFuRDtBQUNBUyxNQUFJLENBQUM4SSxLQUFMLENBQVcySixRQUFYLEdBQW9CelMsSUFBSSxDQUFDOEksS0FBTCxDQUFXMkosUUFBWCxHQUFxQnpTLElBQUksQ0FBQzhJLEtBQUwsQ0FBVzJKLFFBQWhDLEdBQTJDLE9BQS9EO0FBQ0F6UyxNQUFJLENBQUM4SSxLQUFMLENBQVc0SixVQUFYLEdBQXNCMVMsSUFBSSxDQUFDOEksS0FBTCxDQUFXNEosVUFBWCxHQUF1QjFTLElBQUksQ0FBQzhJLEtBQUwsQ0FBVzRKLFVBQWxDLEdBQStDLElBQUUxUyxJQUFJLENBQUNqRixVQUE1RTtBQUNBaUYsTUFBSSxDQUFDOEksS0FBTCxDQUFXeUMsU0FBWCxHQUF1QnZMLElBQUksQ0FBQzhJLEtBQUwsQ0FBV3lDLFNBQVgsR0FBdUJ2TCxJQUFJLENBQUM4SSxLQUFMLENBQVd5QyxTQUFsQyxHQUE4QyxDQUFyRTtBQUNBdkwsTUFBSSxDQUFDOEksS0FBTCxDQUFXOFUsV0FBWCxHQUF5QjVkLElBQUksQ0FBQzhJLEtBQUwsQ0FBVzhVLFdBQVgsR0FBeUI1ZCxJQUFJLENBQUM4SSxLQUFMLENBQVc4VSxXQUFwQyxHQUFrRCxNQUEzRTtBQUNHNWQsTUFBSSxDQUFDOEYsS0FBTCxHQUFhOUYsSUFBSSxDQUFDOEYsS0FBTCxJQUFjLEVBQTNCOztBQUVBOUYsTUFBSSxDQUFDaUksTUFBTCxHQUFjakksSUFBSSxDQUFDaUksTUFBTCxLQUFnQixLQUFoQixHQUF3QixLQUF4QixHQUFnQyxJQUE5QztBQUNIakksTUFBSSxDQUFDaEYsTUFBTCxHQUFjZ0YsSUFBSSxDQUFDaEYsTUFBTCxHQUFjLElBQWQsR0FBcUIsS0FBbkM7QUFDR2dGLE1BQUksQ0FBQ29jLFNBQUwsR0FBaUJwYyxJQUFJLENBQUNvYyxTQUFMLEtBQW1CLEtBQW5CLEdBQTJCLEtBQTNCLEdBQW1DLElBQXBEO0FBQ0EsTUFBSXlCLFNBQVMsR0FBRzFoQixNQUFNLENBQUMsRUFBRCxFQUFLNUIsTUFBTCxDQUF0QjtBQUNBc2pCLFdBQVMsQ0FBQ2hqQixlQUFWLEdBQTRCbUYsSUFBSSxDQUFDNk0sS0FBTCxDQUFXVSxRQUFYLEtBQXdCLElBQXhCLElBQWdDdk4sSUFBSSxDQUFDNk0sS0FBTCxDQUFXb0MsS0FBM0MsR0FBbUQ0TyxTQUFTLENBQUNoakIsZUFBN0QsR0FBK0UsQ0FBM0c7QUFDQSxNQUFHbUYsSUFBSSxDQUFDVCxJQUFMLElBQWEsS0FBYixJQUFzQlMsSUFBSSxDQUFDVCxJQUFMLElBQWEsTUFBdEMsRUFBOEM7QUFDNUNzZSxhQUFTLENBQUN4aUIsbUJBQVYsR0FBZ0MyRSxJQUFJLENBQUMrVSxTQUFMLEtBQW1CLEtBQW5CLEdBQTJCLENBQTNCLEdBQStCL1UsSUFBSSxDQUFDOEYsS0FBTCxDQUFXOFMsR0FBWCxDQUFla0YsVUFBZixJQUE2QkQsU0FBUyxDQUFDeGlCLG1CQUFWLEdBQThCMkUsSUFBSSxDQUFDakYsVUFBL0g7QUFDRDtBQUNEOGlCLFdBQVMsQ0FBQ3ZpQixtQkFBVixHQUFnQzBFLElBQUksQ0FBQytVLFNBQUwsS0FBbUIsS0FBbkIsR0FBMkIsQ0FBM0IsR0FBK0I4SSxTQUFTLENBQUN2aUIsbUJBQVYsR0FBOEIwRSxJQUFJLENBQUNqRixVQUFsRztBQUNIOGlCLFdBQVMsQ0FBQ3BqQixVQUFWLEdBQXVCdUYsSUFBSSxDQUFDNk0sS0FBTCxDQUFXMkQsV0FBWCxHQUF3QnhRLElBQUksQ0FBQzZNLEtBQUwsQ0FBVzJELFdBQW5DLEdBQWlEalcsTUFBTSxDQUFDRSxVQUEvRTtBQUNBO0FBQ0FvakIsV0FBUyxDQUFDN2lCLE1BQVYsR0FBaUJnRixJQUFJLENBQUNoRixNQUF0QjtBQUNBLE1BQUdnRixJQUFJLENBQUNoRixNQUFSLEVBQWU7QUFDZCxRQUFJK2lCLFNBQVMsR0FBQy9kLElBQUksQ0FBQzNCLEtBQW5CO0FBQ0EsUUFBSTJmLFVBQVUsR0FBQ2hlLElBQUksQ0FBQ3pCLE1BQXBCO0FBQ0F5QixRQUFJLENBQUMzQixLQUFMLEdBQVcyZixVQUFYO0FBQ0FoZSxRQUFJLENBQUN6QixNQUFMLEdBQVl3ZixTQUFaO0FBQ0E7O0FBRUQ7QUFDQUYsV0FBUyxDQUFDcmpCLFVBQVYsR0FBcUJELE1BQU0sQ0FBQ0MsVUFBUCxHQUFrQndGLElBQUksQ0FBQ2pGLFVBQTVDO0FBQ0E4aUIsV0FBUyxDQUFDbmpCLFdBQVYsR0FBc0JILE1BQU0sQ0FBQ0csV0FBUCxHQUFtQnNGLElBQUksQ0FBQ2pGLFVBQTlDO0FBQ0EsTUFBR2lGLElBQUksQ0FBQ3NMLFlBQUwsSUFBcUJ0TCxJQUFJLENBQUM4SSxLQUFMLENBQVdtTyxVQUFuQyxFQUE4QztBQUM3QzRHLGFBQVMsQ0FBQ25qQixXQUFWLElBQXVCLElBQUVzRixJQUFJLENBQUNqRixVQUE5QjtBQUNBO0FBQ0Q4aUIsV0FBUyxDQUFDbGpCLGVBQVYsR0FBMEJKLE1BQU0sQ0FBQ0ksZUFBUCxHQUF1QnFGLElBQUksQ0FBQ2pGLFVBQXREO0FBQ0E4aUIsV0FBUyxDQUFDampCLFlBQVYsR0FBdUJMLE1BQU0sQ0FBQ0ssWUFBUCxHQUFvQm9GLElBQUksQ0FBQ2pGLFVBQWhEO0FBQ0E7QUFDQThpQixXQUFTLENBQUMvaUIsT0FBVixHQUFrQlAsTUFBTSxDQUFDTyxPQUFQLEdBQWVrRixJQUFJLENBQUNqRixVQUF0QztBQUNBOGlCLFdBQVMsQ0FBQzNpQixRQUFWLEdBQW1COEUsSUFBSSxDQUFDOUUsUUFBeEI7QUFDQTJpQixXQUFTLENBQUNwaUIsYUFBVixHQUF3QmxCLE1BQU0sQ0FBQ2tCLGFBQVAsR0FBcUJ1RSxJQUFJLENBQUNqRixVQUFsRDtBQUNBOGlCLFdBQVMsQ0FBQ2xpQixnQkFBVixHQUEyQnBCLE1BQU0sQ0FBQ29CLGdCQUFQLEdBQXdCcUUsSUFBSSxDQUFDakYsVUFBeEQ7QUFDQThpQixXQUFTLENBQUNqaUIsY0FBVixHQUF5QnJCLE1BQU0sQ0FBQ3FCLGNBQVAsR0FBc0JvRSxJQUFJLENBQUNqRixVQUFwRDtBQUNBOGlCLFdBQVMsQ0FBQzloQixpQkFBVixHQUE0QnhCLE1BQU0sQ0FBQ3dCLGlCQUFQLEdBQXlCaUUsSUFBSSxDQUFDakYsVUFBMUQ7QUFDQThpQixXQUFTLENBQUM1aUIsYUFBVixHQUF3QlYsTUFBTSxDQUFDVSxhQUFQLEdBQXFCK0UsSUFBSSxDQUFDakYsVUFBbEQ7QUFDQTs7QUFFQTtBQUNBUixRQUFNLENBQUNRLFVBQVAsR0FBa0JpRixJQUFJLENBQUNqRixVQUF2QjtBQUNBUixRQUFNLENBQUNXLFFBQVAsR0FBZ0I4RSxJQUFJLENBQUM5RSxRQUFyQjtBQUNBWCxRQUFNLENBQUNTLE1BQVAsR0FBY2dGLElBQUksQ0FBQ2hGLE1BQW5COztBQUVHLE9BQUtnRixJQUFMLEdBQVlBLElBQVo7QUFDQSxPQUFLekYsTUFBTCxHQUFjc2pCLFNBQWQ7QUFDSDdkLE1BQUksQ0FBQ2llLEtBQUwsR0FBYWplLElBQUksQ0FBQ2llLEtBQUwsR0FBWWplLElBQUksQ0FBQ2llLEtBQWpCLEdBQXlCLElBQXRDO0FBQ0csT0FBS25RLE9BQUwsR0FBZW9RLEdBQUcsQ0FBQ0MsbUJBQUosQ0FBd0JuZSxJQUFJLENBQUNvZSxRQUE3QixFQUF1Q3BlLElBQUksQ0FBQ2llLEtBQTVDLENBQWY7QUFDQTtBQUNBO0FBQ0EsT0FBS2xlLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxPQUFLeWMsS0FBTCxHQUFhLElBQUlRLEtBQUosRUFBYjs7QUFFQSxPQUFLcUIsWUFBTCxHQUFvQjtBQUNoQkMsaUJBQWEsRUFBRSxDQURDO0FBRWhCQyxlQUFXLEVBQUUsQ0FGRztBQUdoQnplLFlBQVEsRUFBRSxDQUhNLEVBQXBCOzs7QUFNSDtBQUNBLE1BQUdFLElBQUksQ0FBQ3NMLFlBQUwsSUFBcUJ0TCxJQUFJLENBQUM4SSxLQUFMLENBQVc4VSxXQUFYLElBQXdCLE9BQWhELEVBQXdEO0FBQ3ZELFFBQUlsSixhQUFhLEdBQUd4SCxZQUFZLENBQUNsTixJQUFJLENBQUN1QyxNQUFOLEVBQWN2QyxJQUFkLEVBQW9CNmQsU0FBcEIsQ0FBaEM7QUFDSXJqQixjQUFVLEdBQUdrYSxhQUFhLENBQUNsYSxVQUQvQjtBQUVBcWpCLGFBQVMsQ0FBQ3JqQixVQUFWLEdBQXVCQSxVQUF2QjtBQUNBLFFBQUlna0IsVUFBVSxHQUFDLENBQWY7QUFDQSxRQUFJQyxnQkFBZ0IsR0FBRzlWLGNBQWMsQ0FBQzNJLElBQUksQ0FBQ0ssVUFBTixFQUFrQkwsSUFBbEIsRUFBd0I2ZCxTQUF4QixDQUFyQztBQUNJM2QsZUFBVyxHQUFHdWUsZ0JBQWdCLENBQUN2ZSxXQURuQztBQUVJc0wsVUFBTSxHQUFHaVQsZ0JBQWdCLENBQUNqVCxNQUY5QjtBQUdJQyxRQUFJLEdBQUdnVCxnQkFBZ0IsQ0FBQ2hULElBSDVCO0FBSUlyTCxlQUFXLEdBQUdxZSxnQkFBZ0IsQ0FBQ3JlLFdBSm5DO0FBS0EsUUFBSXNlLFVBQVUsR0FBQ3RlLFdBQVcsSUFBRUYsV0FBVyxDQUFDdkQsTUFBWixHQUFtQixDQUFyQixDQUExQjtBQUNBLFFBQUlnaUIsV0FBVyxHQUFDbFQsSUFBSSxHQUFDRCxNQUFyQjtBQUNBZ1QsY0FBVSxHQUFDRyxXQUFXLEdBQUNELFVBQXZCO0FBQ0EsU0FBS0wsWUFBTCxHQUFvQjtBQUNoQkMsbUJBQWEsRUFBRUUsVUFEQztBQUVoQkQsaUJBQVcsRUFBRUMsVUFGRztBQUdoQjFlLGNBQVEsRUFBRSxDQUhNLEVBQXBCOztBQUtBRSxRQUFJLENBQUNnVSxnQkFBTCxHQUF1QndLLFVBQXZCO0FBQ0E7O0FBRUV2QyxZQUFVLENBQUNqZixJQUFYLENBQWdCLElBQWhCLEVBQXNCZ0QsSUFBSSxDQUFDVCxJQUEzQixFQUFpQ1MsSUFBakMsRUFBdUM2ZCxTQUF2QyxFQUFrRCxLQUFLL1AsT0FBdkQ7QUFDSCxDQWhHRDs7QUFrR0E2UCxNQUFNLENBQUM3Z0IsU0FBUCxDQUFpQjhoQixVQUFqQixHQUE4QixZQUFZO0FBQ3RDLE1BQUlqYixJQUFJLEdBQUdqSCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsSUFBd0JELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIwRyxTQUF6QyxHQUFxRDFHLFNBQVMsQ0FBQyxDQUFELENBQTlELEdBQW9FLEVBQS9FO0FBQ0EsT0FBS3NELElBQUwsQ0FBVXVDLE1BQVYsR0FBbUJvQixJQUFJLENBQUNwQixNQUFMLElBQWUsS0FBS3ZDLElBQUwsQ0FBVXVDLE1BQTVDO0FBQ0EsT0FBS3ZDLElBQUwsQ0FBVUssVUFBVixHQUF1QnNELElBQUksQ0FBQ3RELFVBQUwsSUFBbUIsS0FBS0wsSUFBTCxDQUFVSyxVQUFwRDs7QUFFQSxPQUFLTCxJQUFMLENBQVVpUCxLQUFWLEdBQWtCOVMsTUFBTSxDQUFDLEVBQUQsRUFBSyxLQUFLNkQsSUFBTCxDQUFVaVAsS0FBZixFQUFzQnRMLElBQUksQ0FBQ3NMLEtBQUwsSUFBYyxFQUFwQyxDQUF4QjtBQUNBLE9BQUtqUCxJQUFMLENBQVVtUCxRQUFWLEdBQXFCaFQsTUFBTSxDQUFDLEVBQUQsRUFBSyxLQUFLNkQsSUFBTCxDQUFVbVAsUUFBZixFQUF5QnhMLElBQUksQ0FBQ3dMLFFBQUwsSUFBaUIsRUFBMUMsQ0FBM0I7O0FBRUE4TSxZQUFVLENBQUNqZixJQUFYLENBQWdCLElBQWhCLEVBQXNCLEtBQUtnRCxJQUFMLENBQVVULElBQWhDLEVBQXNDLEtBQUtTLElBQTNDLEVBQWlELEtBQUt6RixNQUF0RCxFQUE4RCxLQUFLdVQsT0FBbkU7QUFDSCxDQVREOztBQVdBNlAsTUFBTSxDQUFDN2dCLFNBQVAsQ0FBaUIraEIsSUFBakIsR0FBd0IsWUFBWTtBQUNoQyxNQUFJQyxHQUFHLEdBQUdwaUIsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLElBQXdCRCxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCMEcsU0FBekMsR0FBcUQxRyxTQUFTLENBQUMsQ0FBRCxDQUE5RCxHQUFvRSxLQUFLc0QsSUFBTCxDQUFVOEksS0FBVixDQUFnQnlDLFNBQTlGO0FBQ0gsTUFBRyxLQUFLdkwsSUFBTCxDQUFVc0wsWUFBVixLQUF5QixJQUE1QixFQUFpQztBQUNoQ21TLFdBQU8sQ0FBQ3NCLEdBQVIsT0FBWSxZQUFaO0FBQ0E7QUFDQTtBQUNELE9BQUsvZSxJQUFMLENBQVVvYyxTQUFWLEdBQW9CLEtBQXBCO0FBQ0csT0FBS3BjLElBQUwsQ0FBVThJLEtBQVYsQ0FBZ0J5QyxTQUFoQixHQUE0QnVULEdBQUcsQ0FBQ3ZULFNBQWhDO0FBQ0EwUSxZQUFVLENBQUNqZixJQUFYLENBQWdCLElBQWhCLEVBQXNCLEtBQUtnRCxJQUFMLENBQVVULElBQWhDLEVBQXNDLEtBQUtTLElBQTNDLEVBQWlELEtBQUt6RixNQUF0RCxFQUE4RCxLQUFLdVQsT0FBbkU7QUFDSCxDQVREOztBQVdBNlAsTUFBTSxDQUFDN2dCLFNBQVAsQ0FBaUJraUIsYUFBakIsR0FBaUMsWUFBWTtBQUN6QyxPQUFLM0MsaUJBQUwsSUFBMEIsS0FBS0EsaUJBQUwsQ0FBdUJMLElBQXZCLEVBQTFCO0FBQ0gsQ0FGRDs7QUFJQTJCLE1BQU0sQ0FBQzdnQixTQUFQLENBQWlCb2dCLGdCQUFqQixHQUFvQyxVQUFVM2QsSUFBVixFQUFnQjRkLFFBQWhCLEVBQTBCO0FBQzFELE9BQUtYLEtBQUwsQ0FBV1UsZ0JBQVgsQ0FBNEIzZCxJQUE1QixFQUFrQzRkLFFBQWxDO0FBQ0gsQ0FGRDs7QUFJQVEsTUFBTSxDQUFDN2dCLFNBQVAsQ0FBaUJtaUIsbUJBQWpCLEdBQXVDLFVBQVU5YSxDQUFWLEVBQWE7QUFDaEQsTUFBSUQsT0FBTyxHQUFFQyxDQUFDLENBQUNHLEVBQUYsQ0FBSzRhLGNBQUwsQ0FBb0IsQ0FBcEIsQ0FBYjtBQUNBLE1BQUloYixPQUFKLEVBQWE7QUFDVCxRQUFJaWIsU0FBUyxHQUFFbGIsVUFBVSxDQUFDQyxPQUFELEVBQVUsS0FBS2xFLElBQWYsRUFBcUJtRSxDQUFyQixDQUF6QjtBQUNBLFFBQUksS0FBS25FLElBQUwsQ0FBVVQsSUFBVixLQUFtQixLQUFuQixJQUE0QixLQUFLUyxJQUFMLENBQVVULElBQVYsS0FBbUIsTUFBbkQsRUFBMkQ7QUFDdkQsYUFBT2dJLHdCQUF3QixDQUFDLEVBQUV4SixDQUFDLEVBQUVvaEIsU0FBUyxDQUFDcGhCLENBQWYsRUFBa0JPLENBQUMsRUFBRTZnQixTQUFTLENBQUM3Z0IsQ0FBL0IsRUFBRCxFQUFxQyxLQUFLeUIsU0FBTCxDQUFleUgsT0FBcEQsQ0FBL0I7QUFDSCxLQUZELE1BRU8sSUFBSSxLQUFLeEgsSUFBTCxDQUFVVCxJQUFWLEtBQW1CLE9BQXZCLEVBQWdDO0FBQ25DLGFBQU9xSCwwQkFBMEIsQ0FBQyxFQUFFN0ksQ0FBQyxFQUFFb2hCLFNBQVMsQ0FBQ3BoQixDQUFmLEVBQWtCTyxDQUFDLEVBQUU2Z0IsU0FBUyxDQUFDN2dCLENBQS9CLEVBQUQsRUFBcUMsS0FBS3lCLFNBQUwsQ0FBZThHLFNBQXBELEVBQStELEtBQUs3RyxJQUFMLENBQVVLLFVBQVYsQ0FBcUIxRCxNQUFwRixDQUFqQztBQUNILEtBRk0sTUFFQTtBQUNILGFBQU82SixnQkFBZ0IsQ0FBQyxFQUFFekksQ0FBQyxFQUFFb2hCLFNBQVMsQ0FBQ3BoQixDQUFmLEVBQWtCTyxDQUFDLEVBQUU2Z0IsU0FBUyxDQUFDN2dCLENBQS9CLEVBQUQsRUFBcUMsS0FBS3lCLFNBQUwsQ0FBZUcsV0FBcEQsRUFBaUUsS0FBS0YsSUFBdEUsRUFBNEUsS0FBS3pGLE1BQWpGLEVBQXlGa0QsSUFBSSxDQUFDQyxHQUFMLENBQVMsS0FBSzJnQixZQUFMLENBQWtCQyxhQUEzQixDQUF6RixDQUF2QjtBQUNIO0FBQ0o7QUFDRCxTQUFPLENBQUMsQ0FBUjtBQUNILENBYkQ7O0FBZUFYLE1BQU0sQ0FBQzdnQixTQUFQLENBQWlCc2lCLFdBQWpCLEdBQStCLFVBQVVqYixDQUFWLEVBQWE7QUFDeEMsTUFBSXFCLE1BQU0sR0FBRzlJLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQjBHLFNBQXpDLEdBQXFEMUcsU0FBUyxDQUFDLENBQUQsQ0FBOUQsR0FBb0UsRUFBakY7QUFDSCxNQUFJd0gsT0FBTyxHQUFFQyxDQUFDLENBQUNHLEVBQUYsQ0FBSzRhLGNBQUwsQ0FBb0IsQ0FBcEIsQ0FBYjtBQUNBLE1BQUlDLFNBQVMsR0FBRWxiLFVBQVUsQ0FBQ0MsT0FBRCxFQUFVLEtBQUtsRSxJQUFmLEVBQXFCbUUsQ0FBckIsQ0FBekI7O0FBRUcsTUFBSSxLQUFLbkUsSUFBTCxDQUFVVCxJQUFWLEtBQW1CLE1BQW5CLElBQTZCLEtBQUtTLElBQUwsQ0FBVVQsSUFBVixLQUFtQixNQUFoRCxJQUEwRCxLQUFLUyxJQUFMLENBQVVULElBQVYsS0FBbUIsS0FBN0UsSUFBc0YsS0FBS1MsSUFBTCxDQUFVVCxJQUFWLEtBQW1CLFFBQTdHLEVBQXVIO0FBQ25ILFFBQUk5QyxLQUFLLEdBQUcsS0FBS3dpQixtQkFBTCxDQUF5QjlhLENBQXpCLENBQVo7QUFDQSxRQUFJbWEsYUFBYSxHQUFHLEtBQUtELFlBQUwsQ0FBa0JDLGFBQXRDOztBQUVBLFFBQUl0ZSxJQUFJLEdBQUc3RCxNQUFNLENBQUMsRUFBRCxFQUFLLEtBQUs2RCxJQUFWLEVBQWdCO0FBQzdCZ1Usc0JBQWdCLEVBQUVzSyxhQURXO0FBRTdCbEMsZUFBUyxFQUFFLEtBRmtCLEVBQWhCLENBQWpCOztBQUlBLFFBQUkzZixLQUFLLEdBQUcsQ0FBQyxDQUFiLEVBQWdCOztBQUVaLFVBQUk2SSxVQUFVLEdBQUdiLGlCQUFpQixDQUFDLEtBQUt6RSxJQUFMLENBQVV1QyxNQUFYLEVBQW1COUYsS0FBbkIsQ0FBbEM7QUFDQSxVQUFJNkksVUFBVSxDQUFDM0ksTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUN6QixZQUFJMGlCLGVBQWUsR0FBR2hhLGNBQWMsQ0FBQ0MsVUFBRCxFQUFhLEtBQUt2RixTQUFMLENBQWV3RixTQUE1QixFQUF1QzlJLEtBQXZDLEVBQThDLEtBQUt1RCxJQUFMLENBQVVLLFVBQXhELEVBQW9FbUYsTUFBcEUsQ0FBcEM7QUFDSUMsZ0JBQVEsR0FBRzRaLGVBQWUsQ0FBQzVaLFFBRC9CO0FBRUlFLGNBQU0sR0FBRzBaLGVBQWUsQ0FBQzFaLE1BRjdCO0FBR1pBLGNBQU0sQ0FBQ3JILENBQVAsR0FBUzZnQixTQUFTLENBQUM3Z0IsQ0FBbkI7QUFDWTBCLFlBQUksQ0FBQ3dTLE9BQUwsR0FBZTtBQUNYL00sa0JBQVEsRUFBRUEsUUFEQztBQUVYRSxnQkFBTSxFQUFFQSxNQUZHO0FBR1hILGdCQUFNLEVBQUVBLE1BSEc7QUFJMUIvSSxlQUFLLEVBQUVBLEtBSm1CLEVBQWY7O0FBTUg7QUFDSjtBQUNEd2YsY0FBVSxDQUFDamYsSUFBWCxDQUFnQixJQUFoQixFQUFzQmdELElBQUksQ0FBQ1QsSUFBM0IsRUFBaUNTLElBQWpDLEVBQXVDLEtBQUt6RixNQUE1QyxFQUFvRCxLQUFLdVQsT0FBekQ7QUFDSDtBQUNKLE1BQUksS0FBSzlOLElBQUwsQ0FBVVQsSUFBVixLQUFtQixRQUF2QixFQUFpQzs7QUFFN0IsUUFBSTlDLEtBQUssR0FBRyxLQUFLd2lCLG1CQUFMLENBQXlCOWEsQ0FBekIsQ0FBWjtBQUNBLFFBQUltYSxhQUFhLEdBQUcsS0FBS0QsWUFBTCxDQUFrQkMsYUFBdEM7O0FBRUEsUUFBSXRlLElBQUksR0FBRzdELE1BQU0sQ0FBQyxFQUFELEVBQUssS0FBSzZELElBQVYsRUFBZ0I7QUFDN0JnVSxzQkFBZ0IsRUFBRXNLLGFBRFc7QUFFN0JsQyxlQUFTLEVBQUUsS0FGa0IsRUFBaEIsQ0FBakI7O0FBSUEsUUFBSTNmLEtBQUssR0FBRyxDQUFDLENBQWIsRUFBZ0I7QUFDWixVQUFJNkksVUFBVSxHQUFHYixpQkFBaUIsQ0FBQyxLQUFLekUsSUFBTCxDQUFVdUMsTUFBWCxFQUFtQjlGLEtBQW5CLENBQWxDO0FBQ0EsVUFBSTZJLFVBQVUsQ0FBQzNJLE1BQVgsS0FBc0IsQ0FBMUIsRUFBNkI7QUFDekIsWUFBSTBpQixlQUFlLEdBQUd4WixvQkFBb0IsQ0FBQyxLQUFLN0YsSUFBTCxDQUFVdUMsTUFBVixDQUFpQixDQUFqQixFQUFvQm9CLElBQXJCLEVBQTBCMkIsVUFBMUIsRUFBc0MsS0FBS3ZGLFNBQUwsQ0FBZXdGLFNBQXJELEVBQWdFOUksS0FBaEUsRUFBdUUsS0FBS3VELElBQUwsQ0FBVUssVUFBakYsRUFBNkYsS0FBS0wsSUFBTCxDQUFVOEYsS0FBVixDQUFnQm9QLE1BQTdHLEVBQXFIMVAsTUFBckgsQ0FBMUM7QUFDSUMsZ0JBQVEsR0FBRzRaLGVBQWUsQ0FBQzVaLFFBRC9CO0FBRUlFLGNBQU0sR0FBRzBaLGVBQWUsQ0FBQzFaLE1BRjdCO0FBR1RBLGNBQU0sQ0FBQ3JILENBQVAsR0FBUzZnQixTQUFTLENBQUM3Z0IsQ0FBbkI7QUFDUzBCLFlBQUksQ0FBQ3dTLE9BQUwsR0FBZTtBQUNYL00sa0JBQVEsRUFBRUEsUUFEQztBQUVYRSxnQkFBTSxFQUFFQSxNQUZHO0FBR1hILGdCQUFNLEVBQUVBLE1BSEc7QUFJdkIvSSxlQUFLLEVBQUVBLEtBSmdCLEVBQWY7O0FBTUg7QUFDSjtBQUNEd2YsY0FBVSxDQUFDamYsSUFBWCxDQUFnQixJQUFoQixFQUFzQmdELElBQUksQ0FBQ1QsSUFBM0IsRUFBaUNTLElBQWpDLEVBQXVDLEtBQUt6RixNQUE1QyxFQUFvRCxLQUFLdVQsT0FBekQ7QUFDSDtBQUNELE1BQUksS0FBSzlOLElBQUwsQ0FBVVQsSUFBVixLQUFtQixLQUFuQixJQUE0QixLQUFLUyxJQUFMLENBQVVULElBQVYsS0FBbUIsTUFBbkQsRUFBMkQ7QUFDdkQsUUFBSTlDLEtBQUssR0FBRyxLQUFLd2lCLG1CQUFMLENBQXlCOWEsQ0FBekIsQ0FBWjtBQUNBLFFBQUltYSxhQUFhLEdBQUcsS0FBS0QsWUFBTCxDQUFrQkMsYUFBdEM7O0FBRUEsUUFBSXRlLElBQUksR0FBRzdELE1BQU0sQ0FBQyxFQUFELEVBQUssS0FBSzZELElBQVYsRUFBZ0I7QUFDN0JnVSxzQkFBZ0IsRUFBRXNLLGFBRFc7QUFFN0JsQyxlQUFTLEVBQUUsS0FGa0IsRUFBaEIsQ0FBakI7O0FBSUEsUUFBSTNmLEtBQUssR0FBRyxDQUFDLENBQWIsRUFBZ0I7O0FBRVosVUFBSTZJLFVBQVUsR0FBRyxLQUFLdEYsSUFBTCxDQUFVdUMsTUFBVixDQUFpQjlGLEtBQWpCLENBQWpCO0FBQ04sVUFBSWdKLFFBQVEsR0FBRSxDQUFDO0FBQ2R0QyxZQUFJLEVBQUVxQyxNQUFNLENBQUNaLE1BQVAsR0FBZ0JZLE1BQU0sQ0FBQ1osTUFBUCxDQUFjVSxVQUFkLENBQWhCLEdBQTRDQSxVQUFVLENBQUNYLElBQVgsR0FBa0IsSUFBbEIsR0FBeUJXLFVBQVUsQ0FBQzNCLElBRHhFO0FBRWRqQixhQUFLLEVBQUU0QyxVQUFVLENBQUM1QyxLQUZKLEVBQUQsQ0FBZDs7QUFJQSxVQUFJaUQsTUFBTSxHQUFHLEVBQUM1SCxDQUFDLEVBQUNvaEIsU0FBUyxDQUFDcGhCLENBQWIsRUFBZU8sQ0FBQyxFQUFDNmdCLFNBQVMsQ0FBQzdnQixDQUEzQixFQUFiOztBQUVBMEIsVUFBSSxDQUFDd1MsT0FBTCxHQUFlO0FBQ2QvTSxnQkFBUSxFQUFFQSxRQURJO0FBRWRFLGNBQU0sRUFBRUEsTUFGTTtBQUdkSCxjQUFNLEVBQUVBLE1BSE07QUFJZC9JLGFBQUssRUFBRUEsS0FKTyxFQUFmOztBQU1HO0FBQ0R3ZixjQUFVLENBQUNqZixJQUFYLENBQWdCLElBQWhCLEVBQXNCZ0QsSUFBSSxDQUFDVCxJQUEzQixFQUFpQ1MsSUFBakMsRUFBdUMsS0FBS3pGLE1BQTVDLEVBQW9ELEtBQUt1VCxPQUF6RDtBQUNIO0FBQ0QsQ0FuRkQ7O0FBcUZBNlAsTUFBTSxDQUFDN2dCLFNBQVAsQ0FBaUJ3aUIsV0FBakIsR0FBK0IsVUFBVW5iLENBQVYsRUFBYTtBQUMzQyxNQUFJRCxPQUFPLEdBQUVDLENBQUMsQ0FBQ0csRUFBRixDQUFLNGEsY0FBTCxDQUFvQixDQUFwQixDQUFiO0FBQ0EsTUFBSUMsU0FBUyxHQUFFbGIsVUFBVSxDQUFDQyxPQUFELEVBQVUsS0FBS2xFLElBQWYsRUFBcUJtRSxDQUFyQixDQUF6QjtBQUNHLE1BQUlELE9BQU8sSUFBSSxLQUFLbEUsSUFBTCxDQUFVc0wsWUFBVixLQUEyQixJQUExQyxFQUFnRDtBQUNsRCxRQUFHcEgsT0FBTyxDQUFDbkcsQ0FBWCxFQUFhO0FBQ1osV0FBS3NnQixZQUFMLENBQWtCRSxXQUFsQixHQUFnQ1ksU0FBUyxDQUFDcGhCLENBQTFDO0FBQ0EsS0FGRCxNQUVLO0FBQ0osV0FBS3NnQixZQUFMLENBQWtCRSxXQUFsQixHQUFnQ1ksU0FBUyxDQUFDL2EsT0FBMUM7QUFDQTtBQUNFO0FBQ0osQ0FWRDs7QUFZQXVaLE1BQU0sQ0FBQzdnQixTQUFQLENBQWlCeWlCLE1BQWpCLEdBQTBCLFVBQVVwYixDQUFWLEVBQWE7QUFDbkM7QUFDSCxNQUFJRCxPQUFPLEdBQUVDLENBQUMsQ0FBQ0csRUFBRixDQUFLNGEsY0FBTCxDQUFvQixDQUFwQixDQUFiO0FBQ0EsTUFBSUMsU0FBUyxHQUFFbGIsVUFBVSxDQUFDQyxPQUFELEVBQVUsS0FBS2xFLElBQWYsRUFBcUJtRSxDQUFyQixDQUF6QjtBQUNHLE1BQUlELE9BQU8sSUFBSSxLQUFLbEUsSUFBTCxDQUFVc0wsWUFBVixLQUEyQixJQUExQyxFQUFnRDtBQUNsRCxRQUFJa1UsU0FBSjtBQUNBLFFBQUd0YixPQUFPLENBQUNuRyxDQUFYLEVBQWE7QUFDWnloQixlQUFTLEdBQUdMLFNBQVMsQ0FBQ3BoQixDQUFWLEdBQWMsS0FBS3NnQixZQUFMLENBQWtCRSxXQUE1QztBQUNBLEtBRkQsTUFFSztBQUNKaUIsZUFBUyxHQUFHTCxTQUFTLENBQUMvYSxPQUFWLEdBQW9CLEtBQUtpYSxZQUFMLENBQWtCRSxXQUFsRDtBQUNBO0FBQ0ssUUFBSUQsYUFBYSxHQUFHLEtBQUtELFlBQUwsQ0FBa0JDLGFBQXRDOztBQUVBLFFBQUloZSxhQUFhLEdBQUdULGdCQUFnQixDQUFDeWUsYUFBYSxHQUFHa0IsU0FBakIsRUFBNEIsS0FBS3pmLFNBQWpDLEVBQTRDLEtBQUt4RixNQUFqRCxFQUF5RCxLQUFLeUYsSUFBOUQsQ0FBcEM7O0FBRUEsU0FBS3FlLFlBQUwsQ0FBa0J2ZSxRQUFsQixHQUE2QjBmLFNBQVMsR0FBR2xmLGFBQWEsR0FBR2dlLGFBQXpEO0FBQ0EsUUFBSXRlLElBQUksR0FBRzdELE1BQU0sQ0FBQyxFQUFELEVBQUssS0FBSzZELElBQVYsRUFBZ0I7QUFDN0JnVSxzQkFBZ0IsRUFBRXNLLGFBQWEsR0FBR2tCLFNBREw7QUFFN0JwRCxlQUFTLEVBQUUsS0FGa0IsRUFBaEIsQ0FBakI7O0FBSUFILGNBQVUsQ0FBQ2pmLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0JnRCxJQUFJLENBQUNULElBQTNCLEVBQWlDUyxJQUFqQyxFQUF1QyxLQUFLekYsTUFBNUMsRUFBb0QsS0FBS3VULE9BQXpEO0FBQ0g7QUFDSixDQXRCRDs7QUF3QkE2UCxNQUFNLENBQUM3Z0IsU0FBUCxDQUFpQjJpQixTQUFqQixHQUE2QixVQUFVdGIsQ0FBVixFQUFhO0FBQ3RDLE1BQUksS0FBS25FLElBQUwsQ0FBVXNMLFlBQVYsS0FBMkIsSUFBL0IsRUFBcUM7QUFDakMsUUFBSW9VLGFBQWEsR0FBRyxLQUFLckIsWUFBekI7QUFDSUMsaUJBQWEsR0FBR29CLGFBQWEsQ0FBQ3BCLGFBRGxDO0FBRUl4ZSxZQUFRLEdBQUc0ZixhQUFhLENBQUM1ZixRQUY3Qjs7QUFJQSxTQUFLdWUsWUFBTCxDQUFrQkMsYUFBbEIsR0FBa0NBLGFBQWEsR0FBR3hlLFFBQWxEO0FBQ0EsU0FBS3VlLFlBQUwsQ0FBa0J2ZSxRQUFsQixHQUE2QixDQUE3QjtBQUNIO0FBQ0osQ0FURDs7QUFXQTZmLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmpDLE1BQWpCLEMiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiB1Q2hhcnRzIHYxLjcuMC40XHJcbiAqIHVuaS1hcHDlubPlj7Dpq5jmgKfog73ot6jlhajnq6/lm77ooahcclxuICog5pSv5oyBSDXjgIFBUFDjgIHlsI/nqIvluo/vvIjlvq7kv6Ev5pSv5LuY5a6dL+eZvuW6pi/lpLTmnaHvvIlcclxuICogRGVzaWduZWQgYnkgUUlVTueni+S6kVxyXG4gKiBcclxuICogdUNoYXJ0c+WumOaWuee9keermVxyXG4gKiBodHRwczovL3d3dy51Q2hhcnRzLmNuXHJcbiAqIFxyXG4gKiDlvIDmupDlnLDlnYA6XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS8xNmNoZW5nL3VDaGFydHMo5YGc5pu0KVxyXG4gKiDlvIDmupDlnLDlnYDljbPlsIblj5jmm7TkuLrvvJpcclxuICogaHR0cHM6Ly9naXRlZS5jb20vcWl1eXVua2VqaS91Q2hhcnRzKOWwmuacquS4iuS8oClcclxuICog5byA5rqQ5Y2P6K6u5Y+Y5pu05Li6QXBhY2hlLTIuMFxyXG4gKiBcclxuICogdW5pLWFwcOaPkuS7tuW4guWcuuWcsOWdgO+8mlxyXG4gKiBodHRwOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTI3MVxyXG4gKiBcclxuICog5Li76KaB5pu05paw6K6w5b2VXHJcbiAqIDIwMTktMDQtMDFcclxuICog5pS56YCg5Li65YW85a65dW5pLWFwcOeahHVDaGFydHNcclxuICogMjAxOS0wNC0xNFxyXG4gKiDmlK/mjIHmlK/ku5jlrp0v55m+5bqmL+WktOadoeWwj+eoi+W6j+WunueOsOi3qOWFqOerr1xyXG4gKiAyMDE5LTA0LTE1XHJcbiAqIOaUr+aMgeaoquWxj+aooeW8j++8jOaWsOWinnJvdGF0ZeWPguaVsO+8jOm7mOiupGZsYXNlXHJcbiAqIDIwMTktMDQtMTZcclxuICog5paw5aKe5ZyG5byn6L+b5bqm5Zu+77yM5Zu+6KGo57G75Z6LYXJjYmFyXHJcbiAqIDIwMTktMDQtMjJcclxuICog5L+u5pS55Zu+6KGo5ouW5ou95Yqf6IO96Leo56uv5pSv5oyB77yM5aKe5Yqg5ouW5ou95pe25pi+56S65rua5Yqo5p2hXHJcbiAqIDIwMTktMDQtMjhcclxuICog5paw5aKe5p+x54q25Zu+6Ieq5a6a5LmJ6aKc6ImyXHJcbiAqIDIwMTktMDUtMDFcclxuICog5paw5aKe5Luq6KGo55uY5Zu+XHJcbiAqIDIwMTktMDUtMTRcclxuICog5paw5aKeS+e6v+WbvlxyXG4gKiAyMDE5LTA1LTIwXHJcbiAqIOaWsOWinua3t+WQiOWbvuOAgeWghuWPoOWbvuOAgea4qeW6puiuoeWbvuOAgeafseeKtuWbvuexu1Rvb2xUaXDmlYjmnpxcclxuICogXHJcbiAqIFxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb25maWcgPSB7XHJcbiAgICB5QXhpc1dpZHRoOiAxNSxcclxuICAgIHlBeGlzU3BsaXQ6IDUsLy9Z6L205aSa5bCR5Liq5pWw5YC8XHJcbiAgICB4QXhpc0hlaWdodDogMTUsXHJcbiAgICB4QXhpc0xpbmVIZWlnaHQ6IDE1LFxyXG4gICAgbGVnZW5kSGVpZ2h0OiAxNSxcclxuICAgIHlBeGlzVGl0bGVXaWR0aDogMTUsXHJcbiAgICBwYWRkaW5nOiAxMixcclxuXHRwaXhlbFJhdGlvOjEsLy/pgILphY1INemrmOWIhuWxj1xyXG5cdHJvdGF0ZTpmYWxzZSwvL+aoquWxj+aooeW8j1xyXG4gICAgY29sdW1lUGFkZGluZzogMyxcclxuICAgIGZvbnRTaXplOiAxMSxcclxuICAgIC8vZGF0YVBvaW50U2hhcGU6IFsnZGlhbW9uZCcsICdjaXJjbGUnLCAndHJpYW5nbGUnLCAncmVjdCddLFxyXG5cdGRhdGFQb2ludFNoYXBlOiBbJ2NpcmNsZScsICdjaXJjbGUnLCAnY2lyY2xlJywgJ2NpcmNsZSddLC8v5Lu/RjLlm77kvovmoLflvI/mlLnkuLrlnIbngrlcclxuICAgIGNvbG9yczogWycjMEI4MEUzJywgJyNGQzlGMzInLCAnI2ZhY2MxNCcsICcjZjA0ODY0JywgJyM4NTQzZTAnLCAnIzkwZWQ3ZCddLFxyXG4gICAgcGllQ2hhcnRMaW5lUGFkZGluZzogMTUsXHJcbiAgICBwaWVDaGFydFRleHRQYWRkaW5nOiA1LFxyXG4gICAgeEF4aXNUZXh0UGFkZGluZzogMyxcclxuICAgIHRpdGxlQ29sb3I6ICcjMzMzMzMzJyxcclxuICAgIHRpdGxlRm9udFNpemU6IDIwLFxyXG4gICAgc3VidGl0bGVDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgc3VidGl0bGVGb250U2l6ZTogMTUsXHJcbiAgICB0b29sVGlwUGFkZGluZzogMyxcclxuICAgIHRvb2xUaXBCYWNrZ3JvdW5kOiAnIzAwMDAwMCcsXHJcbiAgICB0b29sVGlwT3BhY2l0eTogMC43LFxyXG4gICAgdG9vbFRpcExpbmVIZWlnaHQ6IDIwLFxyXG4gICAgcmFkYXJHcmlkQ291bnQ6IDMsXHJcbiAgICByYWRhckxhYmVsVGV4dE1hcmdpbjogMTUsXHJcblx0Z2F1Z2VMYWJlbFRleHRNYXJnaW46MTVcclxufTtcclxuXHJcbi8vIE9iamVjdC5hc3NpZ24gcG9seWZpbGxcclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxyXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCB2YXJBcmdzKSB7XHJcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcclxuICAgICAgICAvLyBUeXBlRXJyb3IgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcclxuXHJcbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIHZhciBuZXh0U291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRTb3VyY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBTa2lwIG92ZXIgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0U291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBdm9pZCBidWdzIHdoZW4gaGFzT3duUHJvcGVydHkgaXMgc2hhZG93ZWRcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV4dFNvdXJjZSwgbmV4dEtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuXHJcbnZhciB1dGlsID0ge1xyXG4gICAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChudW0sIGxpbWl0KSB7XHJcbiAgICAgICAgbGltaXQgPSBsaW1pdCB8fCAyO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRmxvYXQobnVtKSkge1xyXG4gICAgICAgICAgICBudW0gPSBudW0udG9GaXhlZChsaW1pdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW07XHJcbiAgICB9LFxyXG4gICAgaXNGbG9hdDogZnVuY3Rpb24gaXNGbG9hdChudW0pIHtcclxuICAgICAgICByZXR1cm4gbnVtICUgMSAhPT0gMDtcclxuICAgIH0sXHJcbiAgICBhcHByb3hpbWF0ZWx5RXF1YWw6IGZ1bmN0aW9uIGFwcHJveGltYXRlbHlFcXVhbChudW0xLCBudW0yKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKG51bTEgLSBudW0yKSA8IDFlLTEwO1xyXG4gICAgfSxcclxuICAgIGlzU2FtZVNpZ246IGZ1bmN0aW9uIGlzU2FtZVNpZ24obnVtMSwgbnVtMikge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmFicyhudW0xKSA9PT0gbnVtMSAmJiBNYXRoLmFicyhudW0yKSA9PT0gbnVtMiB8fCBNYXRoLmFicyhudW0xKSAhPT0gbnVtMSAmJiBNYXRoLmFicyhudW0yKSAhPT0gbnVtMjtcclxuICAgIH0sXHJcbiAgICBpc1NhbWVYQ29vcmRpbmF0ZUFyZWE6IGZ1bmN0aW9uIGlzU2FtZVhDb29yZGluYXRlQXJlYShwMSwgcDIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWVTaWduKHAxLngsIHAyLngpO1xyXG4gICAgfSxcclxuICAgIGlzQ29sbGlzaW9uOiBmdW5jdGlvbiBpc0NvbGxpc2lvbihvYmoxLCBvYmoyKSB7XHJcbiAgICAgICAgb2JqMS5lbmQgPSB7fTtcclxuICAgICAgICBvYmoxLmVuZC54ID0gb2JqMS5zdGFydC54ICsgb2JqMS53aWR0aDtcclxuICAgICAgICBvYmoxLmVuZC55ID0gb2JqMS5zdGFydC55IC0gb2JqMS5oZWlnaHQ7XHJcbiAgICAgICAgb2JqMi5lbmQgPSB7fTtcclxuICAgICAgICBvYmoyLmVuZC54ID0gb2JqMi5zdGFydC54ICsgb2JqMi53aWR0aDtcclxuICAgICAgICBvYmoyLmVuZC55ID0gb2JqMi5zdGFydC55IC0gb2JqMi5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGZsYWcgPSBvYmoyLnN0YXJ0LnggPiBvYmoxLmVuZC54IHx8IG9iajIuZW5kLnggPCBvYmoxLnN0YXJ0LnggfHwgb2JqMi5lbmQueSA+IG9iajEuc3RhcnQueSB8fCBvYmoyLnN0YXJ0LnkgPCBvYmoxLmVuZC55O1xyXG5cclxuICAgICAgICByZXR1cm4gIWZsYWc7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBoZXgg6L2sIHJnYmFcclxuZnVuY3Rpb24gaGV4VG9SZ2IoaGV4VmFsdWUsIG9wYykge1xyXG4gICAgdmFyIHJneCA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XHJcbiAgICB2YXIgaGV4ID0gaGV4VmFsdWUucmVwbGFjZShyZ3gsIGZ1bmN0aW9uIChtLCByLCBnLCBiKSB7XHJcbiAgICAgICAgcmV0dXJuIHIgKyByICsgZyArIGcgKyBiICsgYjtcclxuICAgIH0pO1xyXG4gICAgdmFyIHJnYiA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xyXG4gICAgdmFyIHIgPSBwYXJzZUludChyZ2JbMV0sIDE2KTtcclxuICAgIHZhciBnID0gcGFyc2VJbnQocmdiWzJdLCAxNik7XHJcbiAgICB2YXIgYiA9IHBhcnNlSW50KHJnYlszXSwgMTYpO1xyXG4gICAgcmV0dXJuICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBvcGMgKyAnKSc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbmRSYW5nZShudW0sIHR5cGUsIGxpbWl0KSB7XHJcbiAgICBpZiAoaXNOYU4obnVtKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW3d4Q2hhcnRzXSB1bnZhbGlkIHNlcmllcyBkYXRhIScpO1xyXG4gICAgfVxyXG4gICAgbGltaXQgPSBsaW1pdCB8fCAxMDtcclxuICAgIHR5cGUgPSB0eXBlID8gdHlwZSA6ICd1cHBlcic7XHJcbiAgICB2YXIgbXVsdGlwbGUgPSAxO1xyXG4gICAgd2hpbGUgKGxpbWl0IDwgMSkge1xyXG4gICAgICAgIGxpbWl0ICo9IDEwO1xyXG4gICAgICAgIG11bHRpcGxlICo9IDEwO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09ICd1cHBlcicpIHtcclxuICAgICAgICBudW0gPSBNYXRoLmNlaWwobnVtICogbXVsdGlwbGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBudW0gPSBNYXRoLmZsb29yKG51bSAqIG11bHRpcGxlKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChudW0gJSBsaW1pdCAhPT0gMCkge1xyXG4gICAgICAgIGlmICh0eXBlID09PSAndXBwZXInKSB7XHJcbiAgICAgICAgICAgIG51bSsrO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG51bS0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVtIC8gbXVsdGlwbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbFZhbGlkRGlzdGFuY2UoZGlzdGFuY2UsIGNoYXJ0RGF0YSwgY29uZmlnLCBvcHRzKSB7XHJcblxyXG4gICAgdmFyIGRhdGFDaGFydEFyZWFXaWR0aCA9IG9wdHMud2lkdGggLSBjb25maWcucGFkZGluZyAtIGNoYXJ0RGF0YS54QXhpc1BvaW50c1swXTtcclxuICAgIHZhciBkYXRhQ2hhcnRXaWR0aCA9IGNoYXJ0RGF0YS5lYWNoU3BhY2luZyAqIG9wdHMuY2F0ZWdvcmllcy5sZW5ndGg7XHJcbiAgICB2YXIgdmFsaWREaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG4gICAgaWYgKGRpc3RhbmNlID49IDApIHtcclxuICAgICAgICB2YWxpZERpc3RhbmNlID0gMDtcclxuICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlzdGFuY2UpID49IGRhdGFDaGFydFdpZHRoIC0gZGF0YUNoYXJ0QXJlYVdpZHRoKSB7XHJcbiAgICAgICAgdmFsaWREaXN0YW5jZSA9IGRhdGFDaGFydEFyZWFXaWR0aCAtIGRhdGFDaGFydFdpZHRoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkRGlzdGFuY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW5BbmdsZVJhbmdlKGFuZ2xlLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSkge1xyXG4gICAgZnVuY3Rpb24gYWRqdXN0KGFuZ2xlKSB7XHJcbiAgICAgICAgd2hpbGUgKGFuZ2xlIDwgMCkge1xyXG4gICAgICAgICAgICBhbmdsZSArPSAyICogTWF0aC5QSTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKGFuZ2xlID4gMiAqIE1hdGguUEkpIHtcclxuICAgICAgICAgICAgYW5nbGUgLT0gMiAqIE1hdGguUEk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5nbGU7XHJcbiAgICB9XHJcblxyXG4gICAgYW5nbGUgPSBhZGp1c3QoYW5nbGUpO1xyXG4gICAgc3RhcnRBbmdsZSA9IGFkanVzdChzdGFydEFuZ2xlKTtcclxuICAgIGVuZEFuZ2xlID0gYWRqdXN0KGVuZEFuZ2xlKTtcclxuICAgIGlmIChzdGFydEFuZ2xlID4gZW5kQW5nbGUpIHtcclxuICAgICAgICBlbmRBbmdsZSArPSAyICogTWF0aC5QSTtcclxuICAgICAgICBpZiAoYW5nbGUgPCBzdGFydEFuZ2xlKSB7XHJcbiAgICAgICAgICAgIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYW5nbGUgPj0gc3RhcnRBbmdsZSAmJiBhbmdsZSA8PSBlbmRBbmdsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsUm90YXRlVHJhbnNsYXRlKHgsIHksIGgpIHtcclxuICAgIHZhciB4diA9IHg7XHJcbiAgICB2YXIgeXYgPSBoIC0geTtcclxuXHJcbiAgICB2YXIgdHJhbnNYID0geHYgKyAoaCAtIHl2IC0geHYpIC8gTWF0aC5zcXJ0KDIpO1xyXG4gICAgdHJhbnNYICo9IC0xO1xyXG5cclxuICAgIHZhciB0cmFuc1kgPSAoaCAtIHl2KSAqIChNYXRoLnNxcnQoMikgLSAxKSAtIChoIC0geXYgLSB4dikgLyBNYXRoLnNxcnQoMik7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0cmFuc1g6IHRyYW5zWCxcclxuICAgICAgICB0cmFuc1k6IHRyYW5zWVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50cywgaSkge1xyXG5cclxuICAgIGZ1bmN0aW9uIGlzTm90TWlkZGxlUG9pbnQocG9pbnRzLCBpKSB7XHJcbiAgICAgICAgaWYgKHBvaW50c1tpIC0gMV0gJiYgcG9pbnRzW2kgKyAxXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcG9pbnRzW2ldLnkgPj0gTWF0aC5tYXgocG9pbnRzW2kgLSAxXS55LCBwb2ludHNbaSArIDFdLnkpIHx8IHBvaW50c1tpXS55IDw9IE1hdGgubWluKHBvaW50c1tpIC0gMV0ueSwgcG9pbnRzW2kgKyAxXS55KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBhID0gMC4yO1xyXG4gICAgdmFyIGIgPSAwLjI7XHJcbiAgICB2YXIgcEF4ID0gbnVsbDtcclxuICAgIHZhciBwQXkgPSBudWxsO1xyXG4gICAgdmFyIHBCeCA9IG51bGw7XHJcbiAgICB2YXIgcEJ5ID0gbnVsbDtcclxuICAgIGlmIChpIDwgMSkge1xyXG4gICAgICAgIHBBeCA9IHBvaW50c1swXS54ICsgKHBvaW50c1sxXS54IC0gcG9pbnRzWzBdLngpICogYTtcclxuICAgICAgICBwQXkgPSBwb2ludHNbMF0ueSArIChwb2ludHNbMV0ueSAtIHBvaW50c1swXS55KSAqIGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBBeCA9IHBvaW50c1tpXS54ICsgKHBvaW50c1tpICsgMV0ueCAtIHBvaW50c1tpIC0gMV0ueCkgKiBhO1xyXG4gICAgICAgIHBBeSA9IHBvaW50c1tpXS55ICsgKHBvaW50c1tpICsgMV0ueSAtIHBvaW50c1tpIC0gMV0ueSkgKiBhO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID4gcG9pbnRzLmxlbmd0aCAtIDMpIHtcclxuICAgICAgICB2YXIgbGFzdCA9IHBvaW50cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHBCeCA9IHBvaW50c1tsYXN0XS54IC0gKHBvaW50c1tsYXN0XS54IC0gcG9pbnRzW2xhc3QgLSAxXS54KSAqIGI7XHJcbiAgICAgICAgcEJ5ID0gcG9pbnRzW2xhc3RdLnkgLSAocG9pbnRzW2xhc3RdLnkgLSBwb2ludHNbbGFzdCAtIDFdLnkpICogYjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcEJ4ID0gcG9pbnRzW2kgKyAxXS54IC0gKHBvaW50c1tpICsgMl0ueCAtIHBvaW50c1tpXS54KSAqIGI7XHJcbiAgICAgICAgcEJ5ID0gcG9pbnRzW2kgKyAxXS55IC0gKHBvaW50c1tpICsgMl0ueSAtIHBvaW50c1tpXS55KSAqIGI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZml4IGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS94aWFvbGluMzMwMy93eC1jaGFydHMvaXNzdWVzLzc5XHJcbiAgICBpZiAoaXNOb3RNaWRkbGVQb2ludChwb2ludHMsIGkgKyAxKSkge1xyXG4gICAgICAgIHBCeSA9IHBvaW50c1tpICsgMV0ueTtcclxuICAgIH1cclxuICAgIGlmIChpc05vdE1pZGRsZVBvaW50KHBvaW50cywgaSkpIHtcclxuICAgICAgICBwQXkgPSBwb2ludHNbaV0ueTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGN0ckE6IHsgeDogcEF4LCB5OiBwQXkgfSxcclxuICAgICAgICBjdHJCOiB7IHg6IHBCeCwgeTogcEJ5IH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRDb29yZGluYXRlT3JpZ2luKHgsIHksIGNlbnRlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB4OiBjZW50ZXIueCArIHgsXHJcbiAgICAgICAgeTogY2VudGVyLnkgLSB5XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdm9pZENvbGxpc2lvbihvYmosIHRhcmdldCkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgIC8vIGlzIGNvbGxpc2lvbiB0ZXN0XHJcbiAgICAgICAgd2hpbGUgKHV0aWwuaXNDb2xsaXNpb24ob2JqLCB0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouc3RhcnQueCA+IDApIHtcclxuICAgICAgICAgICAgICAgIG9iai5zdGFydC55LS07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqLnN0YXJ0LnggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBvYmouc3RhcnQueSsrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5zdGFydC55ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5zdGFydC55Kys7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5zdGFydC55LS07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxsU2VyaWVzQ29sb3Ioc2VyaWVzLCBjb25maWcpIHtcclxuICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICByZXR1cm4gc2VyaWVzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS5jb2xvcikge1xyXG4gICAgICAgICAgICBpdGVtLmNvbG9yID0gY29uZmlnLmNvbG9yc1tpbmRleF07XHJcbiAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJSBjb25maWcuY29sb3JzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsbFNlcmllc1R5cGUoc2VyaWVzLCBvcHRzKSB7XHJcbiAgICByZXR1cm4gc2VyaWVzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS50eXBlKSB7XHJcbiAgICAgICAgICAgIGl0ZW0udHlwZSA9IG9wdHMudHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGF0YVJhbmdlKG1pbkRhdGEsIG1heERhdGEpIHtcclxuICAgIHZhciBsaW1pdCA9IDA7XHJcbiAgICB2YXIgcmFuZ2UgPSBtYXhEYXRhIC0gbWluRGF0YTtcclxuICAgIGlmIChyYW5nZSA+PSAxMDAwMCkge1xyXG4gICAgICAgIGxpbWl0ID0gMTAwMDtcclxuICAgIH0gZWxzZSBpZiAocmFuZ2UgPj0gMTAwMCkge1xyXG4gICAgICAgIGxpbWl0ID0gMTAwO1xyXG4gICAgfSBlbHNlIGlmIChyYW5nZSA+PSAxMDApIHtcclxuICAgICAgICBsaW1pdCA9IDEwO1xyXG4gICAgfSBlbHNlIGlmIChyYW5nZSA+PSAxMCkge1xyXG4gICAgICAgIGxpbWl0ID0gNTtcclxuICAgIH0gZWxzZSBpZiAocmFuZ2UgPj0gMSkge1xyXG4gICAgICAgIGxpbWl0ID0gMTtcclxuICAgIH0gZWxzZSBpZiAocmFuZ2UgPj0gMC4xKSB7XHJcbiAgICAgICAgbGltaXQgPSAwLjE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxpbWl0ID0gMC4wMTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWluUmFuZ2U6IGZpbmRSYW5nZShtaW5EYXRhLCAnbG93ZXInLCBsaW1pdCksXHJcbiAgICAgICAgbWF4UmFuZ2U6IGZpbmRSYW5nZShtYXhEYXRhLCAndXBwZXInLCBsaW1pdClcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1lYXN1cmVUZXh0KHRleHQpIHtcclxuICAgIHZhciBmb250U2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogY29uZmlnLmZvbnRTaXplO1xyXG5cclxuICAgIC8vIHd4IGNhbnZhcyDmnKrlrp7njrBtZWFzdXJlVGV4dOaWueazlSwg5q2k5aSE6Ieq6KGM5a6e546wXHJcblx0Ly8g6YCC6YWN5L+u5pS55Yid5aeL5a2X5L2TMTBweOS4uuWFtuS7luWkp+Wwj+eahOaWueazlVxyXG4gICAgdGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgIHZhciB0ZXh0ID0gdGV4dC5zcGxpdCgnJyk7XHJcbiAgICB2YXIgd2lkdGggPSAwO1xyXG4gICAgdGV4dC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgaWYgKC9bYS16QS1aXS8udGVzdChpdGVtKSkge1xyXG4gICAgICAgICAgICB3aWR0aCArPSA3O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoL1swLTldLy50ZXN0KGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHdpZHRoICs9IDUuNTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9cXC4vLnRlc3QoaXRlbSkpIHtcclxuICAgICAgICAgICAgd2lkdGggKz0gMi43O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoLy0vLnRlc3QoaXRlbSkpIHtcclxuICAgICAgICAgICAgd2lkdGggKz0gMy4yNTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9bXFx1NGUwMC1cXHU5ZmE1XS8udGVzdChpdGVtKSkge1xyXG4gICAgICAgICAgICB3aWR0aCArPSAxMDtcclxuICAgICAgICB9IGVsc2UgaWYgKC9cXCh8XFwpLy50ZXN0KGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHdpZHRoICs9IDMuNzM7XHJcbiAgICAgICAgfSBlbHNlIGlmICgvXFxzLy50ZXN0KGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHdpZHRoICs9IDIuNTtcclxuICAgICAgICB9IGVsc2UgaWYgKC8lLy50ZXN0KGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHdpZHRoICs9IDg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2lkdGggKz0gMTA7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkdGggKiBmb250U2l6ZSAvIDEwIDtcclxufVxyXG5cclxuZnVuY3Rpb24gZGF0YUNvbWJpbmUoc2VyaWVzKSB7XHJcbiAgICByZXR1cm4gc2VyaWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHJldHVybiAoYS5kYXRhID8gYS5kYXRhIDogYSkuY29uY2F0KGIuZGF0YSk7XHJcbiAgICB9LCBbXSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRhdGFDb21iaW5lU3RhY2soc2VyaWVzKSB7XHJcblx0dmFyIHN1bSA9IG5ldyBBcnJheShzZXJpZXNbMF0uZGF0YS5sZW5ndGgpO1xyXG5cdGZvcih2YXIgaiA9IDA7IGogPCBzdW0ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0c3VtW2pdID0wO1xyXG5cdH1cclxuXHRmb3IodmFyIGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0ICBmb3IodmFyIGogPSAwOyBqIDwgc3VtLmxlbmd0aDsgaisrKSB7XHJcblx0XHRzdW1bal0gKz0gc2VyaWVzW2ldLmRhdGFbal07XHJcblx0ICB9XHJcblx0fVxyXG5cdHJldHVybiBzZXJpZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XHJcblx0ICAgIHJldHVybiAoYS5kYXRhID8gYS5kYXRhIDogYSkuY29uY2F0KGIuZGF0YSkuY29uY2F0KHN1bSk7XHJcblx0fSwgW10pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUb3VjaGVzKHRvdWNoZXMsIG9wdHMsIGUpe1xyXG5cdGxldCB4LHk7XHJcblx0aWYodG91Y2hlcy5jbGllbnRYKXtcclxuXHRcdGlmKG9wdHMucm90YXRlKXsvL+mAgumFjeaoquWxj1xyXG5cdFx0XHR5ID0gb3B0cy5oZWlnaHQtdG91Y2hlcy5jbGllbnRYKm9wdHMucGl4ZWxSYXRpbztcclxuXHRcdFx0eCA9ICh0b3VjaGVzLnBhZ2VZLWUubXAuY3VycmVudFRhcmdldC5vZmZzZXRUb3AtKG9wdHMuaGVpZ2h0L29wdHMucGl4ZWxSYXRpby8yKSoob3B0cy5waXhlbFJhdGlvLTEpKSpvcHRzLnBpeGVsUmF0aW87XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0eCA9IHRvdWNoZXMuY2xpZW50WCpvcHRzLnBpeGVsUmF0aW87XHJcblx0XHRcdHkgPSAodG91Y2hlcy5wYWdlWS1lLm1wLmN1cnJlbnRUYXJnZXQub2Zmc2V0VG9wLShvcHRzLmhlaWdodC9vcHRzLnBpeGVsUmF0aW8vMikqKG9wdHMucGl4ZWxSYXRpby0xKSkqb3B0cy5waXhlbFJhdGlvO1xyXG5cdFx0fVxyXG5cdH1lbHNle1xyXG5cdFx0aWYob3B0cy5yb3RhdGUpey8v6YCC6YWN5qiq5bGPXHJcblx0XHRcdHkgPSBvcHRzLmhlaWdodC10b3VjaGVzLngqb3B0cy5waXhlbFJhdGlvO1xyXG5cdFx0XHR4ID0gdG91Y2hlcy55Km9wdHMucGl4ZWxSYXRpbztcclxuXHRcdH1lbHNle1xyXG5cdFx0XHR4ID0gdG91Y2hlcy54Km9wdHMucGl4ZWxSYXRpbztcclxuXHRcdFx0eSA9IHRvdWNoZXMueSpvcHRzLnBpeGVsUmF0aW87XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybnt4OngseTp5fVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZXJpZXNEYXRhSXRlbShzZXJpZXMsIGluZGV4KSB7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5kYXRhW2luZGV4XSAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5kYXRhW2luZGV4XSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdmFyIHNlcmllc0l0ZW0gPSB7fTtcclxuICAgICAgICAgICAgc2VyaWVzSXRlbS5jb2xvciA9IGl0ZW0uY29sb3I7XHJcbiAgICAgICAgICAgIHNlcmllc0l0ZW0ubmFtZSA9IGl0ZW0ubmFtZTtcclxuICAgICAgICAgICAgc2VyaWVzSXRlbS5kYXRhID0gaXRlbS5mb3JtYXQgPyBpdGVtLmZvcm1hdChpdGVtLmRhdGFbaW5kZXhdKSA6IGl0ZW0uZGF0YVtpbmRleF07XHJcbiAgICAgICAgICAgIGRhdGEucHVzaChzZXJpZXNJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWF4VGV4dExpc3RMZW5ndGgobGlzdCkge1xyXG4gICAgdmFyIGxlbmd0aExpc3QgPSBsaXN0Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBtZWFzdXJlVGV4dChpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGxlbmd0aExpc3QpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSYWRhckNvb3JkaW5hdGVTZXJpZXMobGVuZ3RoKSB7XHJcbiAgICB2YXIgZWFjaEFuZ2xlID0gMiAqIE1hdGguUEkgLyBsZW5ndGg7XHJcbiAgICB2YXIgQ29vcmRpbmF0ZVNlcmllcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIENvb3JkaW5hdGVTZXJpZXMucHVzaChlYWNoQW5nbGUgKiBpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gQ29vcmRpbmF0ZVNlcmllcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gLTEgKiBpdGVtICsgTWF0aC5QSSAvIDI7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9vbFRpcERhdGEoc2VyaWVzRGF0YSwgY2FsUG9pbnRzLCBpbmRleCwgY2F0ZWdvcmllcykge1xyXG4gICAgdmFyIG9wdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XHJcblxyXG4gICAgdmFyIHRleHRMaXN0ID0gc2VyaWVzRGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0ZXh0OiBvcHRpb24uZm9ybWF0ID8gb3B0aW9uLmZvcm1hdChpdGVtLCBjYXRlZ29yaWVzW2luZGV4XSkgOiBpdGVtLm5hbWUgKyAnOiAnICsgaXRlbS5kYXRhLFxyXG4gICAgICAgICAgICBjb2xvcjogaXRlbS5jb2xvclxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHZhciB2YWxpZENhbFBvaW50cyA9IFtdO1xyXG4gICAgdmFyIG9mZnNldCA9IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDBcclxuICAgIH07XHJcbiAgICBjYWxQb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwb2ludHNbaW5kZXhdICE9PSAndW5kZWZpbmVkJyAmJiBwb2ludHNbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhbGlkQ2FsUG9pbnRzLnB1c2gocG9pbnRzW2luZGV4XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB2YWxpZENhbFBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgb2Zmc2V0LnggPSBNYXRoLnJvdW5kKGl0ZW0ueCk7XHJcbiAgICAgICAgb2Zmc2V0LnkgKz0gaXRlbS55O1xyXG4gICAgfSk7XHJcblxyXG4gICAgb2Zmc2V0LnkgLz0gdmFsaWRDYWxQb2ludHMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHsgdGV4dExpc3Q6IHRleHRMaXN0LCBvZmZzZXQ6IG9mZnNldCB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDYW5kbGVUb29sVGlwRGF0YShzZXJpZXMsc2VyaWVzRGF0YSwgY2FsUG9pbnRzLCBpbmRleCwgY2F0ZWdvcmllcyxleHRyYSkge1xyXG4gICAgdmFyIG9wdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ICYmIGFyZ3VtZW50c1s2XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzZdIDoge307XHJcblx0bGV0IHVwQ29sb3IgPSBleHRyYS5jb2xvci51cEZpbGw7XHJcblx0bGV0IGRvd25Db2xvciA9IGV4dHJhLmNvbG9yLmRvd25GaWxsO1xyXG5cdC8v6aKc6Imy6aG65bqP5Li65byA55uY77yM5pS255uY77yM5pyA5L2O77yM5pyA6auYXHJcblx0bGV0IGNvbG9yPVt1cENvbG9yLHVwQ29sb3IsZG93bkNvbG9yLHVwQ29sb3JdO1xyXG4gICAgdmFyIHRleHRMaXN0ID0gW107XHJcblx0bGV0IHRleHQwPXtcclxuXHRcdHRleHQ6IGNhdGVnb3JpZXNbaW5kZXhdLFxyXG5cdFx0Y29sb3I6IG51bGxcclxuXHR9O1xyXG5cdHRleHRMaXN0LnB1c2godGV4dDApO1xyXG5cdHNlcmllc0RhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKGNvbG9yKVxyXG5cdFx0aWYoaW5kZXg9PTAgJiYgaXRlbS5kYXRhWzFdLWl0ZW0uZGF0YVswXTwwKXtcclxuXHRcdFx0Y29sb3JbMV09ZG93bkNvbG9yO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGlmKGl0ZW0uZGF0YVswXTxzZXJpZXNbaW5kZXgtMV1bMV0pe1xyXG5cdFx0XHRcdGNvbG9yWzBdPWRvd25Db2xvcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihpdGVtLmRhdGFbMV08aXRlbS5kYXRhWzBdKXtcclxuXHRcdFx0XHRjb2xvclsxXT1kb3duQ29sb3I7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoaXRlbS5kYXRhWzJdPnNlcmllc1tpbmRleC0xXVsxXSl7XHJcblx0XHRcdFx0Y29sb3JbMl09dXBDb2xvcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihpdGVtLmRhdGFbM108c2VyaWVzW2luZGV4LTFdWzFdKXtcclxuXHRcdFx0XHRjb2xvclszXT1kb3duQ29sb3I7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0bGV0IHRleHQxPXtcclxuXHRcdFx0dGV4dDogJ+W8gOebmO+8micraXRlbS5kYXRhWzBdLFxyXG5cdFx0XHRjb2xvcjogY29sb3JbMF1cclxuXHRcdH07XHJcblx0XHRsZXQgdGV4dDI9e1xyXG5cdFx0XHR0ZXh0OiAn5pS255uY77yaJytpdGVtLmRhdGFbMV0sXHJcblx0XHRcdGNvbG9yOiBjb2xvclsxXVxyXG5cdFx0fTtcclxuXHRcdGxldCB0ZXh0Mz17XHJcblx0XHRcdHRleHQ6ICfmnIDkvY7vvJonK2l0ZW0uZGF0YVsyXSxcclxuXHRcdFx0Y29sb3I6IGNvbG9yWzJdXHJcblx0XHR9O1xyXG5cdFx0bGV0IHRleHQ0PXtcclxuXHRcdFx0dGV4dDogJ+acgOmrmO+8micraXRlbS5kYXRhWzNdLFxyXG5cdFx0XHRjb2xvcjogY29sb3JbM11cclxuXHRcdH07XHJcblx0XHR0ZXh0TGlzdC5wdXNoKHRleHQxLHRleHQyLHRleHQzLHRleHQ0KTtcclxuICAgIH0pO1xyXG4gICAgdmFyIHZhbGlkQ2FsUG9pbnRzID0gW107XHJcbiAgICB2YXIgb2Zmc2V0ID0ge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMFxyXG4gICAgfTtcclxuICAgIGNhbFBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludHMpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBvaW50c1tpbmRleF0gIT09ICd1bmRlZmluZWQnICYmIHBvaW50c1tpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdmFsaWRDYWxQb2ludHMucHVzaChwb2ludHNbaW5kZXhdKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHRvZmZzZXQueD1NYXRoLnJvdW5kKHZhbGlkQ2FsUG9pbnRzWzBdWzBdLngpO1xyXG4gICAgcmV0dXJuIHsgdGV4dExpc3Q6IHRleHRMaXN0LCBvZmZzZXQ6IG9mZnNldCB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kQ3VycmVudEluZGV4KGN1cnJlbnRQb2ludHMsIHhBeGlzUG9pbnRzLCBvcHRzLCBjb25maWcpIHtcclxuICAgIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDA7XHJcbiAgICB2YXIgY3VycmVudEluZGV4ID0gLTE7XHJcbiAgICBpZiAoaXNJbkV4YWN0Q2hhcnRBcmVhKGN1cnJlbnRQb2ludHMsIG9wdHMsIGNvbmZpZykpIHtcclxuICAgICAgICB4QXhpc1BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFBvaW50cy54ICsgb2Zmc2V0ID4gaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudEluZGV4O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0luRXhhY3RDaGFydEFyZWEoY3VycmVudFBvaW50cywgb3B0cywgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gY3VycmVudFBvaW50cy54IDwgb3B0cy53aWR0aCAtIGNvbmZpZy5wYWRkaW5nICYmIGN1cnJlbnRQb2ludHMueCA+IGNvbmZpZy5wYWRkaW5nICsgY29uZmlnLnlBeGlzV2lkdGggKyBjb25maWcueUF4aXNUaXRsZVdpZHRoICYmIGN1cnJlbnRQb2ludHMueSA+IGNvbmZpZy5wYWRkaW5nICYmIGN1cnJlbnRQb2ludHMueSA8IG9wdHMuaGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodCAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5wYWRkaW5nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kUmFkYXJDaGFydEN1cnJlbnRJbmRleChjdXJyZW50UG9pbnRzLCByYWRhckRhdGEsIGNvdW50KSB7XHJcbiAgICB2YXIgZWFjaEFuZ2xlQXJlYSA9IDIgKiBNYXRoLlBJIC8gY291bnQ7XHJcbiAgICB2YXIgY3VycmVudEluZGV4ID0gLTE7XHJcbiAgICBpZiAoaXNJbkV4YWN0UGllQ2hhcnRBcmVhKGN1cnJlbnRQb2ludHMsIHJhZGFyRGF0YS5jZW50ZXIsIHJhZGFyRGF0YS5yYWRpdXMpKSB7XHJcbiAgICAgICAgdmFyIGZpeEFuZ2xlID0gZnVuY3Rpb24gZml4QW5nbGUoYW5nbGUpIHtcclxuICAgICAgICAgICAgaWYgKGFuZ2xlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFuZ2xlID4gMiAqIE1hdGguUEkpIHtcclxuICAgICAgICAgICAgICAgIGFuZ2xlIC09IDIgKiBNYXRoLlBJO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhbmdsZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHJhZGFyRGF0YS5jZW50ZXIueSAtIGN1cnJlbnRQb2ludHMueSwgY3VycmVudFBvaW50cy54IC0gcmFkYXJEYXRhLmNlbnRlci54KTtcclxuICAgICAgICBhbmdsZSA9IC0xICogYW5nbGU7XHJcbiAgICAgICAgaWYgKGFuZ2xlIDwgMCkge1xyXG4gICAgICAgICAgICBhbmdsZSArPSAyICogTWF0aC5QSTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhbmdsZUxpc3QgPSByYWRhckRhdGEuYW5nbGVMaXN0Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtID0gZml4QW5nbGUoLTEgKiBpdGVtKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBhbmdsZUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIHJhbmdlU3RhcnQgPSBmaXhBbmdsZShpdGVtIC0gZWFjaEFuZ2xlQXJlYSAvIDIpO1xyXG4gICAgICAgICAgICB2YXIgcmFuZ2VFbmQgPSBmaXhBbmdsZShpdGVtICsgZWFjaEFuZ2xlQXJlYSAvIDIpO1xyXG4gICAgICAgICAgICBpZiAocmFuZ2VFbmQgPCByYW5nZVN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZUVuZCArPSAyICogTWF0aC5QSTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYW5nbGUgPj0gcmFuZ2VTdGFydCAmJiBhbmdsZSA8PSByYW5nZUVuZCB8fCBhbmdsZSArIDIgKiBNYXRoLlBJID49IHJhbmdlU3RhcnQgJiYgYW5nbGUgKyAyICogTWF0aC5QSSA8PSByYW5nZUVuZCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudEluZGV4O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kUGllQ2hhcnRDdXJyZW50SW5kZXgoY3VycmVudFBvaW50cywgcGllRGF0YSkge1xyXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IC0xO1xyXG4gICAgaWYgKGlzSW5FeGFjdFBpZUNoYXJ0QXJlYShjdXJyZW50UG9pbnRzLCBwaWVEYXRhLmNlbnRlciwgcGllRGF0YS5yYWRpdXMpKSB7XHJcbiAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihwaWVEYXRhLmNlbnRlci55IC0gY3VycmVudFBvaW50cy55LCBjdXJyZW50UG9pbnRzLnggLSBwaWVEYXRhLmNlbnRlci54KTtcclxuICAgICAgICBhbmdsZSA9IC1hbmdsZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGllRGF0YS5zZXJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBwaWVEYXRhLnNlcmllc1tpXTtcclxuICAgICAgICAgICAgaWYgKGlzSW5BbmdsZVJhbmdlKGFuZ2xlLCBpdGVtLl9zdGFydF8sIGl0ZW0uX3N0YXJ0XyArIGl0ZW0uX3Byb3BvcnRpb25fICogMiAqIE1hdGguUEkpKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNJbkV4YWN0UGllQ2hhcnRBcmVhKGN1cnJlbnRQb2ludHMsIGNlbnRlciwgcmFkaXVzKSB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3coY3VycmVudFBvaW50cy54IC0gY2VudGVyLngsIDIpICsgTWF0aC5wb3coY3VycmVudFBvaW50cy55IC0gY2VudGVyLnksIDIpIDw9IE1hdGgucG93KHJhZGl1cywgMik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNwbGl0UG9pbnRzKHBvaW50cykge1xyXG4gICAgdmFyIG5ld1BvaW50cyA9IFtdO1xyXG4gICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICBpZiAoaXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG5ld1BvaW50cy5wdXNoKGl0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtcyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgIG5ld1BvaW50cy5wdXNoKGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3UG9pbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxMZWdlbmREYXRhKHNlcmllcywgb3B0cywgY29uZmlnKSB7XHJcbiAgICBpZiAob3B0cy5sZWdlbmQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGVnZW5kTGlzdDogW10sXHJcbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodDogMFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblx0Ly/pgILphY1INemrmOWIhuWxj1xyXG4gICAgdmFyIHBhZGRpbmcgPSA1Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIHZhciBtYXJnaW5Ub3AgPSA4Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIHZhciBzaGFwZVdpZHRoID0gMTUqb3B0cy5waXhlbFJhdGlvO1xyXG4gICAgdmFyIGxlZ2VuZExpc3QgPSBbXTtcclxuICAgIHZhciB3aWR0aENvdW50ID0gMDtcclxuICAgIHZhciBjdXJyZW50Um93ID0gW107XHJcbiAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSAzICogcGFkZGluZyArIHNoYXBlV2lkdGggKyBtZWFzdXJlVGV4dChpdGVtLm5hbWUgfHwgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIGlmICh3aWR0aENvdW50ICsgaXRlbVdpZHRoID4gb3B0cy53aWR0aCkge1xyXG4gICAgICAgICAgICBsZWdlbmRMaXN0LnB1c2goY3VycmVudFJvdyk7XHJcbiAgICAgICAgICAgIHdpZHRoQ291bnQgPSBpdGVtV2lkdGg7XHJcbiAgICAgICAgICAgIGN1cnJlbnRSb3cgPSBbaXRlbV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2lkdGhDb3VudCArPSBpdGVtV2lkdGg7XHJcbiAgICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChjdXJyZW50Um93Lmxlbmd0aCkge1xyXG4gICAgICAgIGxlZ2VuZExpc3QucHVzaChjdXJyZW50Um93KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGxlZ2VuZExpc3Q6IGxlZ2VuZExpc3QsXHJcbiAgICAgICAgbGVnZW5kSGVpZ2h0OiBsZWdlbmRMaXN0Lmxlbmd0aCAqIChjb25maWcuZm9udFNpemUgKyBtYXJnaW5Ub3ApICsgcGFkZGluZ1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsQ2F0ZWdvcmllc0RhdGEoY2F0ZWdvcmllcywgb3B0cywgY29uZmlnKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgIHhBeGlzSGVpZ2h0OiBjb25maWcueEF4aXNIZWlnaHRcclxuICAgIH07XHJcblxyXG4gICAgdmFyIF9nZXRYQXhpc1BvaW50cyA9IGdldFhBeGlzUG9pbnRzKGNhdGVnb3JpZXMsIG9wdHMsIGNvbmZpZyksXHJcbiAgICAgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHMuZWFjaFNwYWNpbmc7XHJcblxyXG4gICAgLy8gZ2V0IG1heCBsZW5ndGggb2YgY2F0ZWdvcmllcyB0ZXh0XHJcblxyXG5cclxuICAgIHZhciBjYXRlZ29yaWVzVGV4dExlbnRoID0gY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gbWVhc3VyZVRleHQoaXRlbSk7XHJcbiAgICB9KTtcclxuXHRcclxuICAgIHZhciBtYXhUZXh0TGVuZ3RoID0gTWF0aC5tYXguYXBwbHkodGhpcywgY2F0ZWdvcmllc1RleHRMZW50aCk7XHJcblxyXG4gICAgaWYgKG9wdHMueEF4aXMucm90YXRlTGFiZWw9PXRydWUgJiYgbWF4VGV4dExlbmd0aCArIDIgKiBjb25maWcueEF4aXNUZXh0UGFkZGluZyA+IGVhY2hTcGFjaW5nKSB7XHJcbiAgICAgICAgcmVzdWx0LmFuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgICAgIHJlc3VsdC54QXhpc0hlaWdodCA9IDIgKiBjb25maWcueEF4aXNUZXh0UGFkZGluZyArIG1heFRleHRMZW5ndGggKiBNYXRoLnNpbihyZXN1bHQuYW5nbGUpO1xyXG4gICAgfVxyXG5cdFxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmFkYXJEYXRhUG9pbnRzKGFuZ2xlTGlzdCwgY2VudGVyLCByYWRpdXMsIHNlcmllcywgb3B0cykge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IDE7XHJcblxyXG4gICAgdmFyIHJhZGFyT3B0aW9uID0gb3B0cy5leHRyYS5yYWRhciB8fCB7fTtcclxuICAgIHJhZGFyT3B0aW9uLm1heCA9IHJhZGFyT3B0aW9uLm1heCB8fCAwO1xyXG4gICAgdmFyIG1heERhdGEgPSBNYXRoLm1heChyYWRhck9wdGlvbi5tYXgsIE1hdGgubWF4LmFwcGx5KG51bGwsIGRhdGFDb21iaW5lKHNlcmllcykpKTtcclxuXHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVhY2gpIHtcclxuICAgICAgICB2YXIgbGlzdEl0ZW0gPSB7fTtcclxuICAgICAgICBsaXN0SXRlbS5jb2xvciA9IGVhY2guY29sb3I7XHJcbiAgICAgICAgbGlzdEl0ZW0uZGF0YSA9IFtdO1xyXG4gICAgICAgIGVhY2guZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICB2YXIgdG1wID0ge307XHJcbiAgICAgICAgICAgIHRtcC5hbmdsZSA9IGFuZ2xlTGlzdFtpbmRleF07XHJcblxyXG4gICAgICAgICAgICB0bXAucHJvcG9ydGlvbiA9IGl0ZW0gLyBtYXhEYXRhO1xyXG4gICAgICAgICAgICB0bXAucG9zaXRpb24gPSBjb252ZXJ0Q29vcmRpbmF0ZU9yaWdpbihyYWRpdXMgKiB0bXAucHJvcG9ydGlvbiAqIHByb2Nlc3MgKiBNYXRoLmNvcyh0bXAuYW5nbGUpLCByYWRpdXMgKiB0bXAucHJvcG9ydGlvbiAqIHByb2Nlc3MgKiBNYXRoLnNpbih0bXAuYW5nbGUpLCBjZW50ZXIpO1xyXG4gICAgICAgICAgICBsaXN0SXRlbS5kYXRhLnB1c2godG1wKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RJdGVtKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQaWVEYXRhUG9pbnRzKHNlcmllcykge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XHJcblxyXG4gICAgdmFyIGNvdW50ID0gMDtcclxuICAgIHZhciBfc3RhcnRfID0gMDtcclxuICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgaXRlbS5kYXRhID0gaXRlbS5kYXRhID09PSBudWxsID8gMCA6IGl0ZW0uZGF0YTtcclxuICAgICAgICBjb3VudCArPSBpdGVtLmRhdGE7XHJcbiAgICB9KTtcclxuICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgaXRlbS5kYXRhID0gaXRlbS5kYXRhID09PSBudWxsID8gMCA6IGl0ZW0uZGF0YTtcclxuICAgICAgICBpdGVtLl9wcm9wb3J0aW9uXyA9IGl0ZW0uZGF0YSAvIGNvdW50ICogcHJvY2VzcztcclxuICAgIH0pO1xyXG4gICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBpdGVtLl9zdGFydF8gPSBfc3RhcnRfO1xyXG4gICAgICAgIF9zdGFydF8gKz0gMiAqIGl0ZW0uX3Byb3BvcnRpb25fICogTWF0aC5QSTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzZXJpZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFyY2JhckRhdGFQb2ludHMoc2VyaWVzLGFyY2Jhck9wdGlvbikge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XHJcblx0aWYocHJvY2Vzcz09MSl7XHJcblx0XHRwcm9jZXNzPTAuOTk5OTk5O1xyXG5cdH1cclxuICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgaXRlbS5kYXRhID0gaXRlbS5kYXRhID09PSBudWxsID8gMCA6IGl0ZW0uZGF0YTtcclxuXHRcdGxldCB0b3RhbEFuZ2xlO1xyXG5cdFx0aWYoYXJjYmFyT3B0aW9uLnR5cGU9PSdkZWZhdWx0Jyl7XHJcblx0XHRcdHRvdGFsQW5nbGU9YXJjYmFyT3B0aW9uLnN0YXJ0QW5nbGUtYXJjYmFyT3B0aW9uLmVuZEFuZ2xlKzE7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0dG90YWxBbmdsZT0yO1xyXG5cdFx0fVxyXG5cdFx0aXRlbS5fcHJvcG9ydGlvbl8gPSB0b3RhbEFuZ2xlICogaXRlbS5kYXRhKiBwcm9jZXNzICsgYXJjYmFyT3B0aW9uLnN0YXJ0QW5nbGU7XHJcblx0XHRpZiAoaXRlbS5fcHJvcG9ydGlvbl8gPj0gMikge1xyXG5cdFx0XHRpdGVtLl9wcm9wb3J0aW9uXyA9IGl0ZW0uX3Byb3BvcnRpb25fICUgMjtcclxuXHRcdH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNlcmllcztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2F1Z2VBeGlzUG9pbnRzKGNhdGVnb3JpZXMsc3RhcnRBbmdsZSxlbmRBbmdsZSkge1xyXG5cdGxldCB0b3RhbEFuZ2xlPXN0YXJ0QW5nbGUtZW5kQW5nbGUrMTtcclxuXHRsZXQgdGVtcFN0YXJ0QW5nbGU9c3RhcnRBbmdsZTtcclxuXHRmb3IobGV0IGk9MCA7IGk8Y2F0ZWdvcmllcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRjYXRlZ29yaWVzW2ldLnZhbHVlID0gY2F0ZWdvcmllc1tpXS52YWx1ZSA9PT0gbnVsbCA/IDAgOiBjYXRlZ29yaWVzW2ldLnZhbHVlO1xyXG5cdFx0Y2F0ZWdvcmllc1tpXS5fc3RhcnRBbmdsZV89dGVtcFN0YXJ0QW5nbGU7XHJcblx0XHRjYXRlZ29yaWVzW2ldLl9lbmRBbmdsZV89dG90YWxBbmdsZSogY2F0ZWdvcmllc1tpXS52YWx1ZSArIHN0YXJ0QW5nbGU7XHJcblx0XHRpZiAoY2F0ZWdvcmllc1tpXS5fZW5kQW5nbGVfID49IDIpIHtcclxuXHRcdFx0Y2F0ZWdvcmllc1tpXS5fZW5kQW5nbGVfID0gY2F0ZWdvcmllc1tpXS5fZW5kQW5nbGVfICUgMjtcclxuXHRcdH1cclxuXHRcdHRlbXBTdGFydEFuZ2xlPWNhdGVnb3JpZXNbaV0uX2VuZEFuZ2xlXztcclxuXHR9XHJcblx0cmV0dXJuIGNhdGVnb3JpZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEdhdWdlRGF0YVBvaW50cyhzZXJpZXMsY2F0ZWdvcmllcyxnYXVnZU9wdGlvbikge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDE7XHJcbiAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGl0ZW0uZGF0YSA9IGl0ZW0uZGF0YSA9PT0gbnVsbCA/IDAgOiBpdGVtLmRhdGE7XHJcblx0XHRpZihnYXVnZU9wdGlvbi5wb2ludGVyLmNvbG9yPT0nYXV0bycpe1xyXG5cdFx0XHRmb3IobGV0IGk9MCA7aTxjYXRlZ29yaWVzLmxlbmd0aDtpKyspe1xyXG5cdFx0XHRcdGlmKGl0ZW0uZGF0YTw9Y2F0ZWdvcmllc1tpXS52YWx1ZSl7XHJcblx0XHRcdFx0XHRpdGVtLmNvbG9yPWNhdGVnb3JpZXNbaV0uY29sb3I7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1lbHNle1xyXG5cdFx0XHRpdGVtLmNvbG9yPWdhdWdlT3B0aW9uLnBvaW50ZXIuY29sb3I7XHJcblx0XHR9XHJcblx0XHRsZXQgdG90YWxBbmdsZT1nYXVnZU9wdGlvbi5zdGFydEFuZ2xlLWdhdWdlT3B0aW9uLmVuZEFuZ2xlKzE7XHJcblx0XHRpdGVtLl9lbmRBbmdsZV89dG90YWxBbmdsZSAqIGl0ZW0uZGF0YSArIGdhdWdlT3B0aW9uLnN0YXJ0QW5nbGU7XHJcblx0XHRpdGVtLl9vbGRBbmdsZV89Z2F1Z2VPcHRpb24ub2xkQW5nbGU7XHJcblx0XHRpZihnYXVnZU9wdGlvbi5vbGRBbmdsZTxnYXVnZU9wdGlvbi5lbmRBbmdsZSl7XHJcblx0XHRcdGl0ZW0uX29sZEFuZ2xlXys9MjtcclxuXHRcdH1cclxuXHRcdGlmKGl0ZW0uZGF0YT49Z2F1Z2VPcHRpb24ub2xkRGF0YSl7XHJcblx0XHRcdGl0ZW0uX3Byb3BvcnRpb25fID0gKGl0ZW0uX2VuZEFuZ2xlXy1pdGVtLl9vbGRBbmdsZV8pKiBwcm9jZXNzK2dhdWdlT3B0aW9uLm9sZEFuZ2xlO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGl0ZW0uX3Byb3BvcnRpb25fID1pdGVtLl9vbGRBbmdsZV8tIChpdGVtLl9vbGRBbmdsZV8taXRlbS5fZW5kQW5nbGVfKSogcHJvY2VzcztcclxuXHRcdH1cclxuXHRcdGlmIChpdGVtLl9wcm9wb3J0aW9uXyA+PSAyKSB7XHJcblx0XHRcdGl0ZW0uX3Byb3BvcnRpb25fID0gaXRlbS5fcHJvcG9ydGlvbl8gJSAyO1xyXG5cdFx0fVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2VyaWVzO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0UGllVGV4dE1heExlbmd0aChzZXJpZXMpIHtcclxuICAgIHNlcmllcyA9IGdldFBpZURhdGFQb2ludHMoc2VyaWVzKTtcclxuICAgIHZhciBtYXhMZW5ndGggPSAwO1xyXG4gICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICB2YXIgdGV4dCA9IGl0ZW0uZm9ybWF0ID8gaXRlbS5mb3JtYXQoK2l0ZW0uX3Byb3BvcnRpb25fLnRvRml4ZWQoMikpIDogdXRpbC50b0ZpeGVkKGl0ZW0uX3Byb3BvcnRpb25fICogMTAwKSArICclJztcclxuICAgICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIG1lYXN1cmVUZXh0KHRleHQpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtYXhMZW5ndGg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpeENvbHVtZURhdGEocG9pbnRzLCBlYWNoU3BhY2luZywgY29sdW1uTGVuLCBpbmRleCwgY29uZmlnLCBvcHRzKSB7XHJcbiAgICByZXR1cm4gcG9pbnRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVtLndpZHRoID0gKGVhY2hTcGFjaW5nIC0gMiAqIGNvbmZpZy5jb2x1bWVQYWRkaW5nKSAvIGNvbHVtbkxlbjtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMuZXh0cmEuY29sdW1uICYmIG9wdHMuZXh0cmEuY29sdW1uLndpZHRoICYmICtvcHRzLmV4dHJhLmNvbHVtbi53aWR0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gY3VzdG9tZXIgY29sdW1uIHdpZHRoXHJcbiAgICAgICAgICAgIGl0ZW0ud2lkdGggPSBNYXRoLm1pbihpdGVtLndpZHRoLCArb3B0cy5leHRyYS5jb2x1bW4ud2lkdGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgd2lkdGggc2hvdWxkIGxlc3MgdHJhbiAyNXB4XHJcbiAgICAgICAgICAgIC8vIGRvbid0IGFzayBtZSB3aHksIEkgZG9uJ3Qga25vd1xyXG4gICAgICAgICAgICBpdGVtLndpZHRoID0gTWF0aC5taW4oaXRlbS53aWR0aCwgMjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVtLnggKz0gKGluZGV4ICsgMC41IC0gY29sdW1uTGVuIC8gMikgKiBpdGVtLndpZHRoO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaXhDb2x1bWVNZXRlckRhdGEocG9pbnRzLCBlYWNoU3BhY2luZywgY29sdW1uTGVuLCBpbmRleCwgY29uZmlnLCBvcHRzLCBib3JkZXIpIHtcclxuICAgIHJldHVybiBwb2ludHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZW0ud2lkdGggPSBlYWNoU3BhY2luZyAtIDIgKiBjb25maWcuY29sdW1lUGFkZGluZztcclxuXHJcbiAgICAgICAgaWYgKG9wdHMuZXh0cmEuY29sdW1uICYmIG9wdHMuZXh0cmEuY29sdW1uLndpZHRoICYmICtvcHRzLmV4dHJhLmNvbHVtbi53aWR0aCA+IDApIHtcclxuICAgICAgICAgICAgaXRlbS53aWR0aCA9IE1hdGgubWluKGl0ZW0ud2lkdGgsICtvcHRzLmV4dHJhLmNvbHVtbi53aWR0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS53aWR0aCA9IE1hdGgubWluKGl0ZW0ud2lkdGgsIDI1KTtcclxuICAgICAgICB9XHJcblx0XHRpZihpbmRleD4wKXtcclxuXHRcdFx0aXRlbS53aWR0aCAtPSAyKmJvcmRlcjtcclxuXHRcdH1cclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaXhDb2x1bWVTdGFja0RhdGEocG9pbnRzLCBlYWNoU3BhY2luZywgY29sdW1uTGVuLCBpbmRleCwgY29uZmlnLCBvcHRzLHNlcmllcykge1xyXG5cdFxyXG4gICAgcmV0dXJuIHBvaW50cy5tYXAoZnVuY3Rpb24gKGl0ZW0saW5kZXhuKSB7XHJcblx0XHRcclxuICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlbS53aWR0aCA9IGVhY2hTcGFjaW5nIC0gMiAqIGNvbmZpZy5jb2x1bWVQYWRkaW5nO1xyXG5cclxuICAgICAgICBpZiAob3B0cy5leHRyYS5jb2x1bW4gJiYgb3B0cy5leHRyYS5jb2x1bW4ud2lkdGggJiYgK29wdHMuZXh0cmEuY29sdW1uLndpZHRoID4gMCkge1xyXG4gICAgICAgICAgICBpdGVtLndpZHRoID0gTWF0aC5taW4oaXRlbS53aWR0aCwgK29wdHMuZXh0cmEuY29sdW1uLndpZHRoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtLndpZHRoID0gTWF0aC5taW4oaXRlbS53aWR0aCwgMjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRYQXhpc1BvaW50cyhjYXRlZ29yaWVzLCBvcHRzLCBjb25maWcpIHtcclxuICAgIHZhciB5QXhpc1RvdGFsV2lkdGggPSBjb25maWcueUF4aXNXaWR0aCArIGNvbmZpZy55QXhpc1RpdGxlV2lkdGg7XHJcbiAgICB2YXIgc3BhY2luZ1ZhbGlkID0gb3B0cy53aWR0aCAtIDIgKiBjb25maWcucGFkZGluZyAtIHlBeGlzVG90YWxXaWR0aDtcclxuICAgIHZhciBkYXRhQ291bnQgPSBvcHRzLmVuYWJsZVNjcm9sbCA/IE1hdGgubWluKG9wdHMueEF4aXMuaXRlbUNvdW50LCBjYXRlZ29yaWVzLmxlbmd0aCkgOiBjYXRlZ29yaWVzLmxlbmd0aDtcclxuICAgIHZhciBlYWNoU3BhY2luZyA9IHNwYWNpbmdWYWxpZCAvIGRhdGFDb3VudDtcclxuXHJcbiAgICB2YXIgeEF4aXNQb2ludHMgPSBbXTtcclxuICAgIHZhciBzdGFydFggPSBjb25maWcucGFkZGluZyArIHlBeGlzVG90YWxXaWR0aDtcclxuICAgIHZhciBlbmRYID0gb3B0cy53aWR0aCAtIGNvbmZpZy5wYWRkaW5nO1xyXG4gICAgY2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgIHhBeGlzUG9pbnRzLnB1c2goc3RhcnRYICsgaW5kZXggKiBlYWNoU3BhY2luZyk7XHJcbiAgICB9KTtcclxuICAgIGlmIChvcHRzLmVuYWJsZVNjcm9sbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHhBeGlzUG9pbnRzLnB1c2goc3RhcnRYICsgY2F0ZWdvcmllcy5sZW5ndGggKiBlYWNoU3BhY2luZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHhBeGlzUG9pbnRzLnB1c2goZW5kWCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgeEF4aXNQb2ludHM6IHhBeGlzUG9pbnRzLCBzdGFydFg6IHN0YXJ0WCwgZW5kWDogZW5kWCwgZWFjaFNwYWNpbmc6IGVhY2hTcGFjaW5nIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENhbmRsZURhdGFQb2ludHMoZGF0YSwgbWluUmFuZ2UsIG1heFJhbmdlLCB4QXhpc1BvaW50cywgZWFjaFNwYWNpbmcsIG9wdHMsIGNvbmZpZykge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNyAmJiBhcmd1bWVudHNbN10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s3XSA6IDE7XHJcblxyXG4gICAgdmFyIHBvaW50cyA9IFtdO1xyXG4gICAgdmFyIHZhbGlkSGVpZ2h0ID0gb3B0cy5oZWlnaHQgLSAyICogY29uZmlnLnBhZGRpbmcgLSBjb25maWcueEF4aXNIZWlnaHQgLSBjb25maWcubGVnZW5kSGVpZ2h0O1xyXG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblx0XHRcdHZhciBjUG9pbnRzID0gW107XHJcblx0XHRcdGl0ZW0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbXMsIGluZGV4cykge1xyXG5cdFx0XHRcdCB2YXIgcG9pbnQgPSB7fTtcclxuXHRcdFx0XHQgcG9pbnQueCA9IHhBeGlzUG9pbnRzW2luZGV4XSArIE1hdGgucm91bmQoZWFjaFNwYWNpbmcgLyAyKTtcclxuXHRcdFx0XHQgdmFyIHZhbHVlID0gaXRlbXMudmFsdWUgfHwgaXRlbXM7XHJcblx0XHRcdFx0IHZhciBoZWlnaHQgPSB2YWxpZEhlaWdodCAqICh2YWx1ZSAtIG1pblJhbmdlKSAvIChtYXhSYW5nZSAtIG1pblJhbmdlKTtcclxuXHRcdFx0XHQgaGVpZ2h0ICo9IHByb2Nlc3M7XHJcblx0XHRcdFx0IHBvaW50LnkgPSBvcHRzLmhlaWdodCAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQgLSBNYXRoLnJvdW5kKGhlaWdodCkgLSBjb25maWcucGFkZGluZztcclxuXHRcdFx0XHQgY1BvaW50cy5wdXNoKHBvaW50KTtcclxuXHRcdFx0fSk7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKGNQb2ludHMpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwb2ludHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldERhdGFQb2ludHMoZGF0YSwgbWluUmFuZ2UsIG1heFJhbmdlLCB4QXhpc1BvaW50cywgZWFjaFNwYWNpbmcsIG9wdHMsIGNvbmZpZykge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNyAmJiBhcmd1bWVudHNbN10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s3XSA6IDE7XHJcblxyXG4gICAgdmFyIHBvaW50cyA9IFtdO1xyXG4gICAgdmFyIHZhbGlkSGVpZ2h0ID0gb3B0cy5oZWlnaHQgLSAyICogY29uZmlnLnBhZGRpbmcgLSBjb25maWcueEF4aXNIZWlnaHQgLSBjb25maWcubGVnZW5kSGVpZ2h0O1xyXG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBwb2ludCA9IHt9O1xyXG5cdFx0XHRwb2ludC5jb2xvciA9IGl0ZW0uY29sb3I7XHJcbiAgICAgICAgICAgIHBvaW50LnggPSB4QXhpc1BvaW50c1tpbmRleF0gKyBNYXRoLnJvdW5kKGVhY2hTcGFjaW5nIC8gMik7XHJcblx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWUgfHwgaXRlbTtcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHZhbGlkSGVpZ2h0ICogKHZhbHVlIC0gbWluUmFuZ2UpIC8gKG1heFJhbmdlIC0gbWluUmFuZ2UpO1xyXG4gICAgICAgICAgICBoZWlnaHQgKj0gcHJvY2VzcztcclxuICAgICAgICAgICAgcG9pbnQueSA9IG9wdHMuaGVpZ2h0IC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodCAtIE1hdGgucm91bmQoaGVpZ2h0KSAtIGNvbmZpZy5wYWRkaW5nO1xyXG4gICAgICAgICAgICBwb2ludHMucHVzaChwb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBvaW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RhY2tEYXRhUG9pbnRzKGRhdGEsIG1pblJhbmdlLCBtYXhSYW5nZSwgeEF4aXNQb2ludHMsIGVhY2hTcGFjaW5nLCBvcHRzLCBjb25maWcsc2VyaWVzSW5kZXgsIHN0YWNrU2VyaWVzKSB7XHJcbiAgICB2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA5ICYmIGFyZ3VtZW50c1s5XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzldIDogMTtcclxuICAgIHZhciBwb2ludHMgPSBbXTtcclxuICAgIHZhciB2YWxpZEhlaWdodCA9IG9wdHMuaGVpZ2h0IC0gMiAqIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuXHRcclxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwb2ludHMucHVzaChudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcG9pbnQgPSB7fTtcclxuXHRcdFx0cG9pbnQuY29sb3IgPSBpdGVtLmNvbG9yO1xyXG4gICAgICAgICAgICBwb2ludC54ID0geEF4aXNQb2ludHNbaW5kZXhdICsgTWF0aC5yb3VuZChlYWNoU3BhY2luZyAvIDIpO1xyXG5cdFx0XHRcclxuXHRcdFx0aWYoc2VyaWVzSW5kZXg+MCl7XHJcblx0XHRcdFx0dmFyIHZhbHVlPTA7XHJcblx0XHRcdFx0Zm9yKGxldCBpPTA7aTw9c2VyaWVzSW5kZXg7aSsrKXtcclxuXHRcdFx0XHRcdHZhbHVlKz1zdGFja1Nlcmllc1tpXS5kYXRhW2luZGV4XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIHZhbHVlMCA9IHZhbHVlLWl0ZW07XHJcblx0XHRcdFx0dmFyIGhlaWdodCA9IHZhbGlkSGVpZ2h0ICogKHZhbHVlIC0gbWluUmFuZ2UpIC8gKG1heFJhbmdlIC0gbWluUmFuZ2UpO1xyXG5cdFx0XHRcdHZhciBoZWlnaHQwID0gdmFsaWRIZWlnaHQgKiAodmFsdWUwIC0gbWluUmFuZ2UpIC8gKG1heFJhbmdlIC0gbWluUmFuZ2UpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtO1xyXG5cdFx0XHRcdHZhciBoZWlnaHQgPSB2YWxpZEhlaWdodCAqICh2YWx1ZSAtIG1pblJhbmdlKSAvIChtYXhSYW5nZSAtIG1pblJhbmdlKTtcclxuXHRcdFx0XHR2YXIgaGVpZ2h0MCA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGhlaWdodGM9aGVpZ2h0MDtcclxuICAgICAgICAgICAgaGVpZ2h0ICo9IHByb2Nlc3M7XHJcblx0XHRcdGhlaWdodGMgKj0gcHJvY2VzcztcclxuXHRcdFx0cG9pbnQueSA9IG9wdHMuaGVpZ2h0IC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodCAtIE1hdGgucm91bmQoaGVpZ2h0KSAtIGNvbmZpZy5wYWRkaW5nO1xyXG5cdFx0XHRwb2ludC55MCA9IG9wdHMuaGVpZ2h0IC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodCAtIE1hdGgucm91bmQoaGVpZ2h0YykgLSBjb25maWcucGFkZGluZztcclxuICAgICAgICAgICAgcG9pbnRzLnB1c2gocG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwb2ludHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFlBeGlzVGV4dExpc3Qoc2VyaWVzLCBvcHRzLCBjb25maWcgLHN0YWNrKSB7XHJcblx0dmFyIGRhdGE7XHJcblx0aWYoc3RhY2s9PSdzdGFjaycpe1xyXG5cdFx0Ly9kYXRhID0gZGF0YUNvbWJpbmUoc2VyaWVzKTtcclxuXHRcdGRhdGEgPSBkYXRhQ29tYmluZVN0YWNrKHNlcmllcyk7XHJcblx0fWVsc2V7XHJcblx0XHRkYXRhID0gZGF0YUNvbWJpbmUoc2VyaWVzKTtcclxuXHR9XHJcblx0XHJcblx0dmFyIHNvcnRlZCA9IFtdO1xyXG4gICAgLy8gcmVtb3ZlIG51bGwgZnJvbSBkYXRhXHJcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAvL3JldHVybiBpdGVtICE9PSBudWxsO1xyXG5cdFx0aWYodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcclxuXHRcdFx0Ly/liKTmlq3mmK/lkKbkuLrmlbDnu4RcclxuXHRcdFx0aWYoaXRlbS5jb25zdHJ1Y3RvciA9PSBBcnJheSl7XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW0gIT09IG51bGw7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHJldHVybiBpdGVtLnZhbHVlICE9PSBudWxsO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gIT09IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvL3ZhciBtaW5EYXRhID0gTWF0aC5taW4uYXBwbHkodGhpcywgZGF0YSk7XHJcbiAgICAvL3ZhciBtYXhEYXRhID0gTWF0aC5tYXguYXBwbHkodGhpcywgZGF0YSk7XHJcblx0ZGF0YS5tYXAoKGl0ZW0pPT57XHJcblx0XHRpZih0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdFx0aWYoaXRlbS5jb25zdHJ1Y3RvciA9PSBBcnJheSl7XHJcblx0XHRcdFx0aXRlbS5tYXAoKHN1Yml0ZW0pPT57XHJcblx0XHRcdFx0XHRzb3J0ZWQucHVzaChzdWJpdGVtKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRzb3J0ZWQucHVzaChpdGVtLnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdCAgICBzb3J0ZWQucHVzaChpdGVtKTtcclxuXHRcdH1cclxuICAgICAgICAvL3R5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IHNvcnRlZC5wdXNoKGl0ZW0udmFsdWUpIDogc29ydGVkLnB1c2goaXRlbSlcclxuICAgIH0pXHJcblx0dmFyIG1pbkRhdGEgPSAwO1xyXG5cdHZhciBtYXhEYXRhID0gMDtcclxuXHRpZihzb3J0ZWQubGVuZ3RoPjApe1xyXG5cdFx0bWluRGF0YSA9IE1hdGgubWluLmFwcGx5KHRoaXMsIHNvcnRlZCk7XHJcblx0XHRtYXhEYXRhID0gTWF0aC5tYXguYXBwbHkodGhpcywgc29ydGVkKTtcclxuXHR9XHJcbiAgICBpZiAodHlwZW9mIG9wdHMueUF4aXMubWluID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgbWluRGF0YSA9IE1hdGgubWluKG9wdHMueUF4aXMubWluLCBtaW5EYXRhKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygb3B0cy55QXhpcy5tYXggPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgbWF4RGF0YSA9IE1hdGgubWF4KG9wdHMueUF4aXMubWF4LCBtYXhEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaXggaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL3hpYW9saW4zMzAzL3d4LWNoYXJ0cy9pc3N1ZXMvOVxyXG4gICAgaWYgKG1pbkRhdGEgPT09IG1heERhdGEpIHtcclxuICAgICAgICB2YXIgcmFuZ2VTcGFuID0gbWF4RGF0YSB8fCAxMDtcclxuICAgICAgICAvL21pbkRhdGEgLT0gcmFuZ2VTcGFuO1xyXG4gICAgICAgIG1heERhdGEgKz0gcmFuZ2VTcGFuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkYXRhUmFuZ2UgPSBnZXREYXRhUmFuZ2UobWluRGF0YSwgbWF4RGF0YSk7XHJcbiAgICB2YXIgbWluUmFuZ2UgPSBkYXRhUmFuZ2UubWluUmFuZ2U7XHJcbiAgICB2YXIgbWF4UmFuZ2UgPSBkYXRhUmFuZ2UubWF4UmFuZ2U7XHJcblxyXG4gICAgdmFyIHJhbmdlID0gW107XHJcbiAgICB2YXIgZWFjaFJhbmdlID0gKG1heFJhbmdlIC0gbWluUmFuZ2UpIC8gY29uZmlnLnlBeGlzU3BsaXQ7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gY29uZmlnLnlBeGlzU3BsaXQ7IGkrKykge1xyXG4gICAgICAgIHJhbmdlLnB1c2gobWluUmFuZ2UgKyBlYWNoUmFuZ2UgKiBpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByYW5nZS5yZXZlcnNlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbFlBeGlzRGF0YShzZXJpZXMsIG9wdHMsIGNvbmZpZykge1xyXG5cdC8v5aCG5Y+g5Zu+6YeN566XWei9tFxyXG5cdHZhciBjb2x1bW5zdHlsZT1hc3NpZ24oe30sb3B0cy5leHRyYS5jb2x1bW58fHtcInR5cGVcIjpcIlwifSk7XHJcblx0XHJcbiAgICB2YXIgcmFuZ2VzID0gZ2V0WUF4aXNUZXh0TGlzdChzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29sdW1uc3R5bGUudHlwZSk7XHJcbiAgICB2YXIgeUF4aXNXaWR0aCA9IGNvbmZpZy55QXhpc1dpZHRoO1xyXG4gICAgdmFyIHJhbmdlc0Zvcm1hdCA9IHJhbmdlcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBpdGVtID0gdXRpbC50b0ZpeGVkKGl0ZW0sIDIpO1xyXG4gICAgICAgIGl0ZW0gPSBvcHRzLnlBeGlzLmZvcm1hdCA/IG9wdHMueUF4aXMuZm9ybWF0KE51bWJlcihpdGVtKSkgOiBpdGVtO1xyXG4gICAgICAgIHlBeGlzV2lkdGggPSBNYXRoLm1heCh5QXhpc1dpZHRoLCBtZWFzdXJlVGV4dChpdGVtKSArIDUpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICBpZiAob3B0cy55QXhpcy5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHlBeGlzV2lkdGggPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHJhbmdlc0Zvcm1hdDogcmFuZ2VzRm9ybWF0LCByYW5nZXM6IHJhbmdlcywgeUF4aXNXaWR0aDogeUF4aXNXaWR0aCB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxUb29sdGlwWUF4aXNEYXRhKHBvaW50LHNlcmllcywgb3B0cywgY29uZmlnLCBlYWNoU3BhY2luZykge1xyXG4gICAgdmFyIHJhbmdlcyA9IGdldFlBeGlzVGV4dExpc3Qoc2VyaWVzLCBvcHRzLCBjb25maWcpO1xyXG5cdHZhciBzcGFjaW5nVmFsaWQgPSBvcHRzLmhlaWdodCAtIDIgKiBjb25maWcucGFkZGluZyAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQ7XHJcblx0bGV0IG1heFZhbD1yYW5nZXNbMF07XHJcblx0bGV0IG1pblZhbD1yYW5nZXNbcmFuZ2VzLmxlbmd0aC0xXTtcclxuXHRsZXQgbWluQXhpcz1jb25maWcucGFkZGluZztcclxuXHRsZXQgbWF4QXhpcz1jb25maWcucGFkZGluZytzcGFjaW5nVmFsaWQ7XHJcblx0bGV0IGl0ZW09bWF4VmFsLShtYXhWYWwtbWluVmFsKSoocG9pbnQtbWluQXhpcykvKG1heEF4aXMtbWluQXhpcyk7XHJcblx0aXRlbSA9IG9wdHMueUF4aXMuZm9ybWF0ID8gb3B0cy55QXhpcy5mb3JtYXQoTnVtYmVyKGl0ZW0pKSA6IGl0ZW07XHJcbiAgICByZXR1cm4gaXRlbTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGV4dFJvdGF0ZShjb250ZXh0LG9wdHMpIHtcclxuXHRpZihvcHRzLnJvdGF0ZUxvY2shPT10cnVlKXtcclxuXHRcdGNvbnRleHQudHJhbnNsYXRlKG9wdHMuaGVpZ2h0LCAwKTtcclxuXHRcdGNvbnRleHQucm90YXRlKDkwICogTWF0aC5QSSAvIDE4MCk7XHJcblx0fWVsc2UgaWYob3B0cy5fcm90YXRlXyE9PXRydWUpe1xyXG5cdFx0Y29udGV4dC50cmFuc2xhdGUob3B0cy5oZWlnaHQsIDApO1xyXG5cdFx0Y29udGV4dC5yb3RhdGUoOTAgKiBNYXRoLlBJIC8gMTgwKTtcclxuXHRcdG9wdHMuX3JvdGF0ZV89dHJ1ZTtcclxuXHR9XHJcbn1cclxuXHRcclxuZnVuY3Rpb24gZHJhd1BvaW50U2hhcGUocG9pbnRzLCBjb2xvciwgc2hhcGUsIGNvbnRleHQsb3B0cykge1xyXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoXCIjZmZmZmZmXCIpO1xyXG4gICAgY29udGV4dC5zZXRMaW5lV2lkdGgoMSpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgY29udGV4dC5zZXRGaWxsU3R5bGUoY29sb3IpO1xyXG4gICAgaWYgKHNoYXBlID09PSAnZGlhbW9uZCcpIHtcclxuICAgICAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKGl0ZW0ueCwgaXRlbS55IC0gNC41KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCAtIDQuNSwgaXRlbS55KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCwgaXRlbS55ICsgNC41KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCArIDQuNSwgaXRlbS55KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCwgaXRlbS55IC0gNC41KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ2NpcmNsZScpIHtcclxuICAgICAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKGl0ZW0ueCArIDMuNSpvcHRzLnBpeGVsUmF0aW8sIGl0ZW0ueSk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmFyYyhpdGVtLngsIGl0ZW0ueSwgNCpvcHRzLnBpeGVsUmF0aW8sIDAsIDIgKiBNYXRoLlBJLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdyZWN0Jykge1xyXG4gICAgICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oaXRlbS54IC0gMy41LCBpdGVtLnkgLSAzLjUpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5yZWN0KGl0ZW0ueCAtIDMuNSwgaXRlbS55IC0gMy41LCA3LCA3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3RyaWFuZ2xlJykge1xyXG4gICAgICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oaXRlbS54LCBpdGVtLnkgLSA0LjUpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oaXRlbS54IC0gNC41LCBpdGVtLnkgKyA0LjUpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oaXRlbS54ICsgNC41LCBpdGVtLnkgKyA0LjUpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oaXRlbS54LCBpdGVtLnkgLSA0LjUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgY29udGV4dC5maWxsKCk7XHJcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3UmluZ1RpdGxlKG9wdHMsIGNvbmZpZywgY29udGV4dCkge1xyXG4gICAgdmFyIHRpdGxlZm9udFNpemUgPSBvcHRzLnRpdGxlLmZvbnRTaXplIHx8IGNvbmZpZy50aXRsZUZvbnRTaXplO1xyXG4gICAgdmFyIHN1YnRpdGxlZm9udFNpemUgPSBvcHRzLnN1YnRpdGxlLmZvbnRTaXplIHx8IGNvbmZpZy5zdWJ0aXRsZUZvbnRTaXplO1xyXG4gICAgdmFyIHRpdGxlID0gb3B0cy50aXRsZS5uYW1lIHx8ICcnO1xyXG4gICAgdmFyIHN1YnRpdGxlID0gb3B0cy5zdWJ0aXRsZS5uYW1lIHx8ICcnO1xyXG4gICAgdmFyIHRpdGxlRm9udENvbG9yID0gb3B0cy50aXRsZS5jb2xvciB8fCBjb25maWcudGl0bGVDb2xvcjtcclxuICAgIHZhciBzdWJ0aXRsZUZvbnRDb2xvciA9IG9wdHMuc3VidGl0bGUuY29sb3IgfHwgY29uZmlnLnN1YnRpdGxlQ29sb3I7XHJcbiAgICB2YXIgdGl0bGVIZWlnaHQgPSB0aXRsZSA/IHRpdGxlZm9udFNpemUgOiAwO1xyXG4gICAgdmFyIHN1YnRpdGxlSGVpZ2h0ID0gc3VidGl0bGUgPyBzdWJ0aXRsZWZvbnRTaXplIDogMDtcclxuICAgIHZhciBtYXJnaW4gPSA1O1xyXG4gICAgaWYgKHN1YnRpdGxlKSB7XHJcbiAgICAgICAgdmFyIHRleHRXaWR0aCA9IG1lYXN1cmVUZXh0KHN1YnRpdGxlLCBzdWJ0aXRsZWZvbnRTaXplKTtcclxuICAgICAgICB2YXIgc3RhcnRYID0gKG9wdHMud2lkdGggLSB0ZXh0V2lkdGgpIC8gMiArIChvcHRzLnN1YnRpdGxlLm9mZnNldFggfHwgMCk7XHJcbiAgICAgICAgdmFyIHN0YXJ0WSA9ICgob3B0cy5oZWlnaHQgLSBjb25maWcubGVnZW5kSGVpZ2h0ICsgc3VidGl0bGVmb250U2l6ZSkgLyAyICkrIChvcHRzLnN1YnRpdGxlLm9mZnNldFkgfHwgMCk7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0WSAtPSAodGl0bGVIZWlnaHQgKyBtYXJnaW4pIC8gMiA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5zZXRGb250U2l6ZShzdWJ0aXRsZWZvbnRTaXplKTtcclxuICAgICAgICBjb250ZXh0LnNldEZpbGxTdHlsZShzdWJ0aXRsZUZvbnRDb2xvcik7XHJcbiAgICAgICAgY29udGV4dC5maWxsVGV4dChzdWJ0aXRsZSwgc3RhcnRYLCBzdGFydFkpO1xyXG4gICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5zdHJva2UoKTtcclxuICAgIH1cclxuICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgIHZhciBfdGV4dFdpZHRoID0gbWVhc3VyZVRleHQodGl0bGUsIHRpdGxlZm9udFNpemUpO1xyXG4gICAgICAgIHZhciBfc3RhcnRYID0gKG9wdHMud2lkdGggLSBfdGV4dFdpZHRoKSAvIDIgKyAob3B0cy50aXRsZS5vZmZzZXRYIHx8IDApO1xyXG4gICAgICAgIHZhciBfc3RhcnRZID0gKChvcHRzLmhlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQgKyB0aXRsZWZvbnRTaXplKSAvIDIgKSArIChvcHRzLnRpdGxlLm9mZnNldFkgfHwgMCk7XHJcbiAgICAgICAgaWYgKHN1YnRpdGxlKSB7XHJcbiAgICAgICAgICAgIF9zdGFydFkgKz0gKHN1YnRpdGxlSGVpZ2h0ICsgbWFyZ2luKSAvIDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5zZXRGb250U2l6ZSh0aXRsZWZvbnRTaXplKTtcclxuICAgICAgICBjb250ZXh0LnNldEZpbGxTdHlsZSh0aXRsZUZvbnRDb2xvcik7XHJcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCh0aXRsZSwgX3N0YXJ0WCwgX3N0YXJ0WSk7XHJcbiAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3UG9pbnRUZXh0KHBvaW50cywgc2VyaWVzLCBjb25maWcsIGNvbnRleHQpIHtcclxuICAgIC8vIOe7mOWItuaVsOaNruaWh+ahiFxyXG4gICAgdmFyIGRhdGEgPSBzZXJpZXMuZGF0YTtcclxuXHJcbiAgICBcclxuICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vdmFyIGZvcm1hdFZhbCA9IHNlcmllcy5mb3JtYXQgPyBzZXJpZXMuZm9ybWF0KGRhdGFbaW5kZXhdKSA6IGRhdGFbaW5kZXhdO1xyXG5cdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKCcjNjY2NjY2Jyk7XHJcblx0XHRcdHZhciB2YWx1ZSA9IGRhdGFbaW5kZXhdLnZhbHVlIHx8IGRhdGFbaW5kZXhdXHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRWYWwgPSBzZXJpZXMuZm9ybWF0ID8gc2VyaWVzLmZvcm1hdCh2YWx1ZSkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dChmb3JtYXRWYWwsIGl0ZW0ueCAtIG1lYXN1cmVUZXh0KGZvcm1hdFZhbCkgLyAyLCBpdGVtLnkgLSAyKTtcclxuXHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0Y29udGV4dC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRyYXdHYXVnZUxhYmVsKGdhdWdlT3B0aW9uLCByYWRpdXMsIGNlbnRlclBvc2l0aW9uLCBvcHRzLCBjb25maWcsIGNvbnRleHQpIHtcclxuICAgIHJhZGl1cyAtPSBnYXVnZU9wdGlvbi53aWR0aC8yK2NvbmZpZy5nYXVnZUxhYmVsVGV4dE1hcmdpbjtcclxuICAgIFxyXG5cdGxldCB0b3RhbEFuZ2xlPWdhdWdlT3B0aW9uLnN0YXJ0QW5nbGUtZ2F1Z2VPcHRpb24uZW5kQW5nbGUrMTtcclxuXHRsZXQgc3BsaXRBbmdsZT10b3RhbEFuZ2xlL2dhdWdlT3B0aW9uLnNwbGl0TGluZS5zcGxpdE51bWJlcjtcclxuXHRsZXQgdG90YWxOdW1iZXI9Z2F1Z2VPcHRpb24uZW5kTnVtYmVyLWdhdWdlT3B0aW9uLnN0YXJ0TnVtYmVyO1xyXG5cdGxldCBzcGxpdE51bWJlcj10b3RhbE51bWJlci9nYXVnZU9wdGlvbi5zcGxpdExpbmUuc3BsaXROdW1iZXI7XHJcblx0bGV0IG5vd0FuZ2xlPWdhdWdlT3B0aW9uLnN0YXJ0QW5nbGU7XHJcblx0bGV0IG5vd051bWJlcj1nYXVnZU9wdGlvbi5zdGFydE51bWJlcjtcclxuXHRmb3IobGV0IGk9MDtpPGdhdWdlT3B0aW9uLnNwbGl0TGluZS5zcGxpdE51bWJlcisxO2krKyl7XHJcblx0XHR2YXIgcG9zID0ge1xyXG5cdFx0ICAgIHg6IHJhZGl1cyAqIE1hdGguY29zKG5vd0FuZ2xlKk1hdGguUEkpLFxyXG5cdFx0ICAgIHk6IHJhZGl1cyAqIE1hdGguc2luKG5vd0FuZ2xlKk1hdGguUEkpXHJcblx0XHR9O1xyXG5cdFx0cG9zLngrPWNlbnRlclBvc2l0aW9uLngtbWVhc3VyZVRleHQobm93TnVtYmVyKS8yO1xyXG5cdFx0cG9zLnkrPWNlbnRlclBvc2l0aW9uLnk7XHJcblx0XHR2YXIgc3RhcnRYID0gcG9zLng7XHJcblx0XHR2YXIgc3RhcnRZID0gcG9zLnk7XHJcblx0XHRcclxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShnYXVnZU9wdGlvbi5sYWJlbENvbG9yIHx8ICcjNjY2NjY2Jyk7XHJcblx0XHRjb250ZXh0LmZpbGxUZXh0KG5vd051bWJlciwgc3RhcnRYLCBzdGFydFkgKyBjb25maWcuZm9udFNpemUgLyAyKTtcclxuXHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHRjb250ZXh0LnN0cm9rZSgpO1xyXG5cdFx0XHJcblx0XHRub3dBbmdsZSs9c3BsaXRBbmdsZTtcclxuXHRcdGlmKG5vd0FuZ2xlPj0yKXtcclxuXHRcdFx0bm93QW5nbGU9bm93QW5nbGUgJSAyO1xyXG5cdFx0fVxyXG5cdFx0bm93TnVtYmVyKz1zcGxpdE51bWJlcjtcclxuXHR9XHJcblx0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRyYXdSYWRhckxhYmVsKGFuZ2xlTGlzdCwgcmFkaXVzLCBjZW50ZXJQb3NpdGlvbiwgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcmFkYXJPcHRpb24gPSBvcHRzLmV4dHJhLnJhZGFyIHx8IHt9O1xyXG4gICAgcmFkaXVzICs9IGNvbmZpZy5yYWRhckxhYmVsVGV4dE1hcmdpbjtcclxuICAgIFxyXG4gICAgYW5nbGVMaXN0LmZvckVhY2goZnVuY3Rpb24gKGFuZ2xlLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBwb3MgPSB7XHJcbiAgICAgICAgICAgIHg6IHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSxcclxuICAgICAgICAgICAgeTogcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcG9zUmVsYXRpdmVDYW52YXMgPSBjb252ZXJ0Q29vcmRpbmF0ZU9yaWdpbihwb3MueCwgcG9zLnksIGNlbnRlclBvc2l0aW9uKTtcclxuICAgICAgICB2YXIgc3RhcnRYID0gcG9zUmVsYXRpdmVDYW52YXMueDtcclxuICAgICAgICB2YXIgc3RhcnRZID0gcG9zUmVsYXRpdmVDYW52YXMueTtcclxuICAgICAgICBpZiAodXRpbC5hcHByb3hpbWF0ZWx5RXF1YWwocG9zLngsIDApKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0WCAtPSBtZWFzdXJlVGV4dChvcHRzLmNhdGVnb3JpZXNbaW5kZXhdIHx8ICcnKSAvIDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwb3MueCA8IDApIHtcclxuICAgICAgICAgICAgc3RhcnRYIC09IG1lYXN1cmVUZXh0KG9wdHMuY2F0ZWdvcmllc1tpbmRleF0gfHwgJycpO1xyXG4gICAgICAgIH1cclxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShyYWRhck9wdGlvbi5sYWJlbENvbG9yIHx8ICcjNjY2NjY2Jyk7XHJcbiAgICAgICAgY29udGV4dC5maWxsVGV4dChvcHRzLmNhdGVnb3JpZXNbaW5kZXhdIHx8ICcnLCBzdGFydFgsIHN0YXJ0WSArIGNvbmZpZy5mb250U2l6ZSAvIDIpO1xyXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICB9KTtcclxuICAgIFxyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3UGllVGV4dChzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCwgcmFkaXVzLCBjZW50ZXIpIHtcclxuICAgIHZhciBsaW5lUmFkaXVzID0gcmFkaXVzICsgY29uZmlnLnBpZUNoYXJ0TGluZVBhZGRpbmc7XHJcbiAgICB2YXIgdGV4dE9iamVjdENvbGxlY3Rpb24gPSBbXTtcclxuICAgIHZhciBsYXN0VGV4dE9iamVjdCA9IG51bGw7XHJcblxyXG4gICAgdmFyIHNlcmllc0NvbnZlcnQgPSBzZXJpZXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgdmFyIGFyYyA9IDIgKiBNYXRoLlBJIC0gKGl0ZW0uX3N0YXJ0XyArIDIgKiBNYXRoLlBJICogaXRlbS5fcHJvcG9ydGlvbl8gLyAyKTtcclxuICAgICAgICB2YXIgdGV4dCA9IGl0ZW0uZm9ybWF0ID8gaXRlbS5mb3JtYXQoK2l0ZW0uX3Byb3BvcnRpb25fLnRvRml4ZWQoMikpIDogdXRpbC50b0ZpeGVkKGl0ZW0uX3Byb3BvcnRpb25fICogMTAwKSArICclJztcclxuICAgICAgICB2YXIgY29sb3IgPSBpdGVtLmNvbG9yO1xyXG4gICAgICAgIHJldHVybiB7IGFyYzogYXJjLCB0ZXh0OiB0ZXh0LCBjb2xvcjogY29sb3IgfTtcclxuICAgIH0pO1xyXG4gICAgc2VyaWVzQ29udmVydC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgLy8gbGluZSBlbmRcclxuICAgICAgICB2YXIgb3JnaW5YMSA9IE1hdGguY29zKGl0ZW0uYXJjKSAqIGxpbmVSYWRpdXM7XHJcbiAgICAgICAgdmFyIG9yZ2luWTEgPSBNYXRoLnNpbihpdGVtLmFyYykgKiBsaW5lUmFkaXVzO1xyXG5cclxuICAgICAgICAvLyBsaW5lIHN0YXJ0XHJcbiAgICAgICAgdmFyIG9yZ2luWDIgPSBNYXRoLmNvcyhpdGVtLmFyYykgKiByYWRpdXM7XHJcbiAgICAgICAgdmFyIG9yZ2luWTIgPSBNYXRoLnNpbihpdGVtLmFyYykgKiByYWRpdXM7XHJcblxyXG4gICAgICAgIC8vIHRleHQgc3RhcnRcclxuICAgICAgICB2YXIgb3JnaW5YMyA9IG9yZ2luWDEgPj0gMCA/IG9yZ2luWDEgKyBjb25maWcucGllQ2hhcnRUZXh0UGFkZGluZyA6IG9yZ2luWDEgLSBjb25maWcucGllQ2hhcnRUZXh0UGFkZGluZztcclxuICAgICAgICB2YXIgb3JnaW5ZMyA9IG9yZ2luWTE7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0V2lkdGggPSBtZWFzdXJlVGV4dChpdGVtLnRleHQpO1xyXG4gICAgICAgIHZhciBzdGFydFkgPSBvcmdpblkzO1xyXG5cclxuICAgICAgICBpZiAobGFzdFRleHRPYmplY3QgJiYgdXRpbC5pc1NhbWVYQ29vcmRpbmF0ZUFyZWEobGFzdFRleHRPYmplY3Quc3RhcnQsIHsgeDogb3JnaW5YMyB9KSkge1xyXG4gICAgICAgICAgICBpZiAob3JnaW5YMyA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0WSA9IE1hdGgubWluKG9yZ2luWTMsIGxhc3RUZXh0T2JqZWN0LnN0YXJ0LnkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9yZ2luWDEgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydFkgPSBNYXRoLm1heChvcmdpblkzLCBsYXN0VGV4dE9iamVjdC5zdGFydC55KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmdpblkzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0WSA9IE1hdGgubWF4KG9yZ2luWTMsIGxhc3RUZXh0T2JqZWN0LnN0YXJ0LnkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFkgPSBNYXRoLm1pbihvcmdpblkzLCBsYXN0VGV4dE9iamVjdC5zdGFydC55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9yZ2luWDMgPCAwKSB7XHJcbiAgICAgICAgICAgIG9yZ2luWDMgLT0gdGV4dFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHRPYmplY3QgPSB7XHJcbiAgICAgICAgICAgIGxpbmVTdGFydDoge1xyXG4gICAgICAgICAgICAgICAgeDogb3JnaW5YMixcclxuICAgICAgICAgICAgICAgIHk6IG9yZ2luWTJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGluZUVuZDoge1xyXG4gICAgICAgICAgICAgICAgeDogb3JnaW5YMSxcclxuICAgICAgICAgICAgICAgIHk6IG9yZ2luWTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3RhcnQ6IHtcclxuICAgICAgICAgICAgICAgIHg6IG9yZ2luWDMsXHJcbiAgICAgICAgICAgICAgICB5OiBzdGFydFlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgd2lkdGg6IHRleHRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBjb25maWcuZm9udFNpemUsXHJcbiAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcclxuICAgICAgICAgICAgY29sb3I6IGl0ZW0uY29sb3JcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsYXN0VGV4dE9iamVjdCA9IGF2b2lkQ29sbGlzaW9uKHRleHRPYmplY3QsIGxhc3RUZXh0T2JqZWN0KTtcclxuICAgICAgICB0ZXh0T2JqZWN0Q29sbGVjdGlvbi5wdXNoKGxhc3RUZXh0T2JqZWN0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRleHRPYmplY3RDb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICB2YXIgbGluZVN0YXJ0UG9pc3Rpb24gPSBjb252ZXJ0Q29vcmRpbmF0ZU9yaWdpbihpdGVtLmxpbmVTdGFydC54LCBpdGVtLmxpbmVTdGFydC55LCBjZW50ZXIpO1xyXG4gICAgICAgIHZhciBsaW5lRW5kUG9pc3Rpb24gPSBjb252ZXJ0Q29vcmRpbmF0ZU9yaWdpbihpdGVtLmxpbmVFbmQueCwgaXRlbS5saW5lRW5kLnksIGNlbnRlcik7XHJcbiAgICAgICAgdmFyIHRleHRQb3NpdGlvbiA9IGNvbnZlcnRDb29yZGluYXRlT3JpZ2luKGl0ZW0uc3RhcnQueCwgaXRlbS5zdGFydC55LCBjZW50ZXIpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0TGluZVdpZHRoKDEqb3B0cy5waXhlbFJhdGlvKTtcclxuICAgICAgICBjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKGl0ZW0uY29sb3IpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKGl0ZW0uY29sb3IpO1xyXG4gICAgICAgIGNvbnRleHQubW92ZVRvKGxpbmVTdGFydFBvaXN0aW9uLngsIGxpbmVTdGFydFBvaXN0aW9uLnkpO1xyXG4gICAgICAgIHZhciBjdXJ2ZVN0YXJ0WCA9IGl0ZW0uc3RhcnQueCA8IDAgPyB0ZXh0UG9zaXRpb24ueCArIGl0ZW0ud2lkdGggOiB0ZXh0UG9zaXRpb24ueDtcclxuICAgICAgICB2YXIgdGV4dFN0YXJ0WCA9IGl0ZW0uc3RhcnQueCA8IDAgPyB0ZXh0UG9zaXRpb24ueCAtIDUgOiB0ZXh0UG9zaXRpb24ueCArIDU7XHJcbiAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKGxpbmVFbmRQb2lzdGlvbi54LCBsaW5lRW5kUG9pc3Rpb24ueSwgY3VydmVTdGFydFgsIHRleHRQb3NpdGlvbi55KTtcclxuICAgICAgICBjb250ZXh0Lm1vdmVUbyhsaW5lU3RhcnRQb2lzdGlvbi54LCBsaW5lU3RhcnRQb2lzdGlvbi55KTtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0ZXh0UG9zaXRpb24ueCArIGl0ZW0ud2lkdGgsIHRleHRQb3NpdGlvbi55KTtcclxuICAgICAgICBjb250ZXh0LmFyYyhjdXJ2ZVN0YXJ0WCwgdGV4dFBvc2l0aW9uLnksIDIsIDAsIDIgKiBNYXRoLlBJKTtcclxuICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xyXG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcbiAgICAgICAgY29udGV4dC5zZXRGaWxsU3R5bGUoJyM2NjY2NjYnKTtcclxuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KGl0ZW0udGV4dCwgdGV4dFN0YXJ0WCwgdGV4dFBvc2l0aW9uLnkgKyAzKTtcclxuICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3VG9vbFRpcFNwbGl0TGluZShvZmZzZXRYLCBvcHRzLCBjb25maWcsIGNvbnRleHQpIHtcclxuXHR2YXIgdG9vbFRpcE9wdGlvbiA9IG9wdHMuZXh0cmEudG9vbHRpcCB8fCB7fTtcclxuXHR0b29sVGlwT3B0aW9uLmdyaWRUeXBlPXRvb2xUaXBPcHRpb24uZ3JpZFR5cGU9PXVuZGVmaW5lZD8gJ3NvbGlkJzp0b29sVGlwT3B0aW9uLmdyaWRUeXBlO1xyXG5cdHRvb2xUaXBPcHRpb24uZGFzaExlbmd0aD10b29sVGlwT3B0aW9uLmRhc2hMZW5ndGg9PXVuZGVmaW5lZD8gNDp0b29sVGlwT3B0aW9uLmRhc2hMZW5ndGg7XHJcbiAgICB2YXIgc3RhcnRZID0gY29uZmlnLnBhZGRpbmc7XHJcbiAgICB2YXIgZW5kWSA9IG9wdHMuaGVpZ2h0IC0gY29uZmlnLnBhZGRpbmcgLSBjb25maWcueEF4aXNIZWlnaHQgLSBjb25maWcubGVnZW5kSGVpZ2h0O1xyXG5cclxuXHRpZih0b29sVGlwT3B0aW9uLmdyaWRUeXBlPT0nZGFzaCcpe1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lRGFzaChbdG9vbFRpcE9wdGlvbi5kYXNoTGVuZ3RoLHRvb2xUaXBPcHRpb24uZGFzaExlbmd0aF0pO1xyXG5cdH1cclxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0Y29udGV4dC5zZXRTdHJva2VTdHlsZSh0b29sVGlwT3B0aW9uLmdyaWRDb2xvciB8fCAnI2NjY2NjYycpO1xyXG5cdGNvbnRleHQuc2V0TGluZVdpZHRoKDEqb3B0cy5waXhlbFJhdGlvKTtcclxuICAgIGNvbnRleHQubW92ZVRvKG9mZnNldFgsIHN0YXJ0WSk7XHJcbiAgICBjb250ZXh0LmxpbmVUbyhvZmZzZXRYLCBlbmRZKTtcclxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG5cdGNvbnRleHQuc2V0TGluZURhc2goW10pO1xyXG5cdFxyXG5cdGlmKHRvb2xUaXBPcHRpb24ueEF4aXNMYWJlbCl7XHJcblx0XHRsZXQgbGFibGVUZXh0ID0gb3B0cy5jYXRlZ29yaWVzW29wdHMudG9vbHRpcC5pbmRleF07XHJcblx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRsZXQgdGV4dFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChsYWJsZVRleHQpLndpZHRoO1xyXG5cdFx0XHJcblx0XHRsZXQgdGV4dFggPSBvZmZzZXRYIC0gY29uZmlnLnRvb2xUaXBQYWRkaW5nIC0gMC41ICogdGV4dFdpZHRoIDtcclxuXHRcdGxldCB0ZXh0WSA9IGVuZFk7XHJcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5zZXRGaWxsU3R5bGUoaGV4VG9SZ2IodG9vbFRpcE9wdGlvbi5sYWJlbEJnQ29sb3IgfHwgY29uZmlnLnRvb2xUaXBCYWNrZ3JvdW5kLCB0b29sVGlwT3B0aW9uLmxhYmVsQmdPcGFjaXR5IHx8IGNvbmZpZy50b29sVGlwT3BhY2l0eSkpO1xyXG5cdFx0Y29udGV4dC5zZXRTdHJva2VTdHlsZSh0b29sVGlwT3B0aW9uLmxhYmVsQmdDb2xvciB8fCBjb25maWcudG9vbFRpcEJhY2tncm91bmQpO1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lV2lkdGgoMSpvcHRzLnBpeGVsUmF0aW8pO1xyXG5cdFx0Y29udGV4dC5yZWN0KHRleHRYLCB0ZXh0WSwgdGV4dFdpZHRoICsgMiAqIGNvbmZpZy50b29sVGlwUGFkZGluZyAsIGNvbmZpZy5mb250U2l6ZSArIDIgKiBjb25maWcudG9vbFRpcFBhZGRpbmcpO1xyXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0XHRjb250ZXh0LmZpbGwoKTtcclxuXHRcdFxyXG5cdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdGNvbnRleHQuc2V0Rm9udFNpemUoY29uZmlnLmZvbnRTaXplKTtcclxuXHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvb2xUaXBPcHRpb24ubGFiZWxGb250Q29sb3IgfHwgY29uZmlnLmZvbnRDb2xvcik7XHJcblx0XHRjb250ZXh0LmZpbGxUZXh0KGxhYmxlVGV4dCwgdGV4dFgrMipjb25maWcudG9vbFRpcFBhZGRpbmcsIHRleHRZK2NvbmZpZy50b29sVGlwUGFkZGluZytjb25maWcuZm9udFNpemUpO1xyXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3VG9vbFRpcEhvcml6ZW50YWxMaW5lKG9wdHMsIGNvbmZpZywgY29udGV4dCwgZWFjaFNwYWNpbmcsIHhBeGlzUG9pbnRzKSB7XHJcblx0dmFyIHRvb2xUaXBPcHRpb24gPSBvcHRzLmV4dHJhLnRvb2x0aXAgfHwge307XHJcblx0dG9vbFRpcE9wdGlvbi5ncmlkVHlwZT10b29sVGlwT3B0aW9uLmdyaWRUeXBlPT11bmRlZmluZWQ/ICdzb2xpZCc6dG9vbFRpcE9wdGlvbi5ncmlkVHlwZTtcclxuXHR0b29sVGlwT3B0aW9uLmRhc2hMZW5ndGg9dG9vbFRpcE9wdGlvbi5kYXNoTGVuZ3RoPT11bmRlZmluZWQ/IDQ6dG9vbFRpcE9wdGlvbi5kYXNoTGVuZ3RoO1xyXG5cdHZhciBzdGFydFggPSBjb25maWcucGFkZGluZyArIGNvbmZpZy55QXhpc1dpZHRoICsgY29uZmlnLnlBeGlzVGl0bGVXaWR0aDtcclxuXHR2YXIgZW5kWCA9IG9wdHMud2lkdGgtY29uZmlnLnBhZGRpbmc7XHJcblx0XHJcblx0aWYodG9vbFRpcE9wdGlvbi5ncmlkVHlwZT09J2Rhc2gnKXtcclxuXHRcdGNvbnRleHQuc2V0TGluZURhc2goW3Rvb2xUaXBPcHRpb24uZGFzaExlbmd0aCx0b29sVGlwT3B0aW9uLmRhc2hMZW5ndGhdKTtcclxuXHR9XHJcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUodG9vbFRpcE9wdGlvbi5ncmlkQ29sb3IgfHwgJyNjY2NjY2MnKTtcclxuXHRjb250ZXh0LnNldExpbmVXaWR0aCgxKm9wdHMucGl4ZWxSYXRpbyk7XHJcblx0Y29udGV4dC5tb3ZlVG8oc3RhcnRYLCBvcHRzLnRvb2x0aXAub2Zmc2V0LnkpO1xyXG5cdGNvbnRleHQubGluZVRvKGVuZFgsIG9wdHMudG9vbHRpcC5vZmZzZXQueSk7XHJcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgY29udGV4dC5zdHJva2UoKTtcclxuXHRjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcclxuXHRcclxuXHRpZih0b29sVGlwT3B0aW9uLnlBeGlzTGFiZWwpe1xyXG5cdFx0XHJcblx0XHRsZXQgbGFibGVUZXh0ID0gY2FsVG9vbHRpcFlBeGlzRGF0YShvcHRzLnRvb2x0aXAub2Zmc2V0Lnksb3B0cy5zZXJpZXMsIG9wdHMsIGNvbmZpZyxlYWNoU3BhY2luZyk7XHJcblx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRsZXQgdGV4dFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChsYWJsZVRleHQpLndpZHRoO1xyXG5cdFx0XHJcblx0XHRsZXQgdGV4dFggPSBzdGFydFggLSAyKmNvbmZpZy50b29sVGlwUGFkZGluZyAtIHRleHRXaWR0aCA7XHJcblx0XHRsZXQgdGV4dFkgPSBvcHRzLnRvb2x0aXAub2Zmc2V0Lnk7XHJcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5zZXRGaWxsU3R5bGUoaGV4VG9SZ2IodG9vbFRpcE9wdGlvbi5sYWJlbEJnQ29sb3IgfHwgY29uZmlnLnRvb2xUaXBCYWNrZ3JvdW5kLCB0b29sVGlwT3B0aW9uLmxhYmVsQmdPcGFjaXR5IHx8IGNvbmZpZy50b29sVGlwT3BhY2l0eSkpO1xyXG5cdFx0Y29udGV4dC5zZXRTdHJva2VTdHlsZSh0b29sVGlwT3B0aW9uLmxhYmVsQmdDb2xvciB8fCBjb25maWcudG9vbFRpcEJhY2tncm91bmQpO1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lV2lkdGgoMSpvcHRzLnBpeGVsUmF0aW8pO1xyXG5cdFx0Y29udGV4dC5yZWN0KHRleHRYLCB0ZXh0WS0wLjUqY29uZmlnLmZvbnRTaXplLWNvbmZpZy50b29sVGlwUGFkZGluZywgdGV4dFdpZHRoICsgMiAqIGNvbmZpZy50b29sVGlwUGFkZGluZyAsIGNvbmZpZy5mb250U2l6ZSArIDIgKiBjb25maWcudG9vbFRpcFBhZGRpbmcpO1xyXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0XHRjb250ZXh0LmZpbGwoKTtcclxuXHRcdFxyXG5cdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdGNvbnRleHQuc2V0Rm9udFNpemUoY29uZmlnLmZvbnRTaXplKTtcclxuXHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvb2xUaXBPcHRpb24ubGFiZWxGb250Q29sb3IgfHwgY29uZmlnLmZvbnRDb2xvcik7XHJcblx0XHRjb250ZXh0LmZpbGxUZXh0KGxhYmxlVGV4dCwgdGV4dFgrY29uZmlnLnRvb2xUaXBQYWRkaW5nLCB0ZXh0WSswLjUqY29uZmlnLmZvbnRTaXplKTtcclxuXHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHRjb250ZXh0LnN0cm9rZSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGRyYXdUb29sVGlwU3BsaXRBcmVhKG9mZnNldFgsIG9wdHMsIGNvbmZpZywgY29udGV4dCwgZWFjaFNwYWNpbmcpIHtcclxuICAgIHZhciBzdGFydFkgPSBjb25maWcucGFkZGluZztcclxuICAgIHZhciBlbmRZID0gb3B0cy5oZWlnaHQgLSBjb25maWcucGFkZGluZyAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQ7XHJcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdGNvbnRleHQuc2V0RmlsbFN0eWxlKGhleFRvUmdiKCcjMDAwMDAwJywgMC4wOCkpO1xyXG5cdGNvbnRleHQucmVjdChvZmZzZXRYLWVhY2hTcGFjaW5nLzIsIHN0YXJ0WSwgZWFjaFNwYWNpbmcsIGVuZFktc3RhcnRZKTtcclxuXHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdGNvbnRleHQuZmlsbCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3VG9vbFRpcCh0ZXh0TGlzdCwgb2Zmc2V0LCBvcHRzLCBjb25maWcsIGNvbnRleHQsIGVhY2hTcGFjaW5nLCB4QXhpc1BvaW50cykge1xyXG5cdHZhciB0b29sVGlwT3B0aW9uID0gb3B0cy5leHRyYS50b29sdGlwIHx8IHt9O1xyXG4gICAgdmFyIGxlZ2VuZFdpZHRoID0gNCpvcHRzLnBpeGVsUmF0aW87XHJcbiAgICB2YXIgbGVnZW5kTWFyZ2luUmlnaHQgPSA1Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIHZhciBhcnJvd1dpZHRoID0gOCpvcHRzLnBpeGVsUmF0aW87XHJcbiAgICB2YXIgaXNPdmVyUmlnaHRCb3JkZXIgPSBmYWxzZTtcclxuXHRpZihvcHRzLnR5cGU9PSdsaW5lJyB8fCBvcHRzLnR5cGU9PSdhcmVhJyB8fG9wdHMudHlwZT09J2NhbmRsZScgfHwgb3B0cy50eXBlPT0nbWl4Jyl7XHJcblx0XHRkcmF3VG9vbFRpcFNwbGl0TGluZShvcHRzLnRvb2x0aXAub2Zmc2V0LngsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0fVxyXG5cdFxyXG4gICAgb2Zmc2V0ID0gYXNzaWduKHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDBcclxuICAgIH0sIG9mZnNldCk7XHJcbiAgICBvZmZzZXQueSAtPSA4Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIHZhciB0ZXh0V2lkdGggPSB0ZXh0TGlzdC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gbWVhc3VyZVRleHQoaXRlbS50ZXh0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciB0b29sVGlwV2lkdGggPSBsZWdlbmRXaWR0aCArIGxlZ2VuZE1hcmdpblJpZ2h0ICsgNCAqIGNvbmZpZy50b29sVGlwUGFkZGluZyArIE1hdGgubWF4LmFwcGx5KG51bGwsIHRleHRXaWR0aCk7XHJcbiAgICB2YXIgdG9vbFRpcEhlaWdodCA9IDIgKiBjb25maWcudG9vbFRpcFBhZGRpbmcgKyB0ZXh0TGlzdC5sZW5ndGggKiBjb25maWcudG9vbFRpcExpbmVIZWlnaHQ7XHJcblxyXG4gICAgLy8gaWYgYmV5b25kIHRoZSByaWdodCBib3JkZXJcclxuICAgIGlmIChvZmZzZXQueCAtIE1hdGguYWJzKG9wdHMuX3Njcm9sbERpc3RhbmNlXykgKyBhcnJvd1dpZHRoICsgdG9vbFRpcFdpZHRoID4gb3B0cy53aWR0aCkge1xyXG4gICAgICAgIGlzT3ZlclJpZ2h0Qm9yZGVyID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkcmF3IGJhY2tncm91bmQgcmVjdFxyXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKGhleFRvUmdiKG9wdHMudG9vbHRpcC5vcHRpb24uYmFja2dyb3VuZCB8fCBjb25maWcudG9vbFRpcEJhY2tncm91bmQsIGNvbmZpZy50b29sVGlwT3BhY2l0eSkpO1xyXG4gICAgaWYgKGlzT3ZlclJpZ2h0Qm9yZGVyKSB7XHJcbiAgICAgICAgY29udGV4dC5tb3ZlVG8ob2Zmc2V0LngsIG9mZnNldC55ICsgMTAqb3B0cy5waXhlbFJhdGlvKTtcclxuICAgICAgICBjb250ZXh0LmxpbmVUbyhvZmZzZXQueCAtIGFycm93V2lkdGgsIG9mZnNldC55ICsgMTAqb3B0cy5waXhlbFJhdGlvIC0gNSpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgIGNvbnRleHQubGluZVRvKG9mZnNldC54IC0gYXJyb3dXaWR0aCwgb2Zmc2V0LnkpO1xyXG4gICAgICAgIGNvbnRleHQubGluZVRvKG9mZnNldC54IC0gYXJyb3dXaWR0aCAtIE1hdGgucm91bmQodG9vbFRpcFdpZHRoKSwgb2Zmc2V0LnkpO1xyXG4gICAgICAgIGNvbnRleHQubGluZVRvKG9mZnNldC54IC0gYXJyb3dXaWR0aCAtIE1hdGgucm91bmQodG9vbFRpcFdpZHRoKSwgb2Zmc2V0LnkrdG9vbFRpcEhlaWdodCk7XHJcbiAgICAgICAgY29udGV4dC5saW5lVG8ob2Zmc2V0LnggLSBhcnJvd1dpZHRoLCBvZmZzZXQueSt0b29sVGlwSGVpZ2h0KTtcclxuICAgICAgICBjb250ZXh0LmxpbmVUbyhvZmZzZXQueCAtIGFycm93V2lkdGgsIG9mZnNldC55ICsgMTAqb3B0cy5waXhlbFJhdGlvICsgNSpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgIGNvbnRleHQubGluZVRvKG9mZnNldC54LCBvZmZzZXQueSArIDEwKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQubW92ZVRvKG9mZnNldC54LCBvZmZzZXQueSArIDEwKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICAgICAgY29udGV4dC5saW5lVG8ob2Zmc2V0LnggKyBhcnJvd1dpZHRoLCBvZmZzZXQueSArIDEwKm9wdHMucGl4ZWxSYXRpbyAtIDUqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdGNvbnRleHQubGluZVRvKG9mZnNldC54ICsgYXJyb3dXaWR0aCwgb2Zmc2V0LnkpO1xyXG5cdFx0Y29udGV4dC5saW5lVG8ob2Zmc2V0LnggKyBhcnJvd1dpZHRoICsgTWF0aC5yb3VuZCh0b29sVGlwV2lkdGgpLCBvZmZzZXQueSk7XHJcblx0XHRjb250ZXh0LmxpbmVUbyhvZmZzZXQueCArIGFycm93V2lkdGggKyBNYXRoLnJvdW5kKHRvb2xUaXBXaWR0aCksIG9mZnNldC55K3Rvb2xUaXBIZWlnaHQpO1xyXG5cdFx0Y29udGV4dC5saW5lVG8ob2Zmc2V0LnggKyBhcnJvd1dpZHRoLCBvZmZzZXQueSt0b29sVGlwSGVpZ2h0KTtcclxuICAgICAgICBjb250ZXh0LmxpbmVUbyhvZmZzZXQueCArIGFycm93V2lkdGgsIG9mZnNldC55ICsgMTAqb3B0cy5waXhlbFJhdGlvICsgNSpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgIGNvbnRleHQubGluZVRvKG9mZnNldC54LCBvZmZzZXQueSArIDEwKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuICAgIGNvbnRleHQuZmlsbCgpO1xyXG5cclxuICAgIC8vIGRyYXcgbGVnZW5kXHJcbiAgICB0ZXh0TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG5cdFx0aWYoaXRlbS5jb2xvciAhPT0gbnVsbCl7XHJcblx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKGl0ZW0uY29sb3IpO1xyXG5cdFx0XHR2YXIgc3RhcnRYID0gb2Zmc2V0LnggKyBhcnJvd1dpZHRoICsgMiAqIGNvbmZpZy50b29sVGlwUGFkZGluZztcclxuXHRcdFx0dmFyIHN0YXJ0WSA9IG9mZnNldC55ICsgKGNvbmZpZy50b29sVGlwTGluZUhlaWdodCAtIGNvbmZpZy5mb250U2l6ZSkgLyAyICsgY29uZmlnLnRvb2xUaXBMaW5lSGVpZ2h0ICogaW5kZXggKyBjb25maWcudG9vbFRpcFBhZGRpbmcgKyAxO1xyXG5cdFx0XHRpZiAoaXNPdmVyUmlnaHRCb3JkZXIpIHtcclxuXHRcdFx0ICAgIHN0YXJ0WCA9IG9mZnNldC54IC0gdG9vbFRpcFdpZHRoIC0gYXJyb3dXaWR0aCArIDIgKiBjb25maWcudG9vbFRpcFBhZGRpbmc7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29udGV4dC5maWxsUmVjdChzdGFydFgsIHN0YXJ0WSwgbGVnZW5kV2lkdGgsIGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHR9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBkcmF3IHRleHQgbGlzdFxyXG4gICAgXHJcbiAgICB0ZXh0TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBzdGFydFggPSBvZmZzZXQueCArIGFycm93V2lkdGggKyAyICogY29uZmlnLnRvb2xUaXBQYWRkaW5nICsgbGVnZW5kV2lkdGggKyBsZWdlbmRNYXJnaW5SaWdodDtcclxuICAgICAgICBpZiAoaXNPdmVyUmlnaHRCb3JkZXIpIHtcclxuICAgICAgICAgICAgc3RhcnRYID0gb2Zmc2V0LnggLSB0b29sVGlwV2lkdGggLSBhcnJvd1dpZHRoICsgMiAqIGNvbmZpZy50b29sVGlwUGFkZGluZyArICtsZWdlbmRXaWR0aCArIGxlZ2VuZE1hcmdpblJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3RhcnRZID0gb2Zmc2V0LnkgKyAoY29uZmlnLnRvb2xUaXBMaW5lSGVpZ2h0IC0gY29uZmlnLmZvbnRTaXplKSAvIDIgKyBjb25maWcudG9vbFRpcExpbmVIZWlnaHQgKiBpbmRleCArIGNvbmZpZy50b29sVGlwUGFkZGluZztcclxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRjb250ZXh0LnNldEZpbGxTdHlsZSgnI2ZmZmZmZicpO1xyXG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoaXRlbS50ZXh0LCBzdGFydFgsIHN0YXJ0WSArIGNvbmZpZy5mb250U2l6ZSk7XHJcblx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5zdHJva2UoKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3WUF4aXNUaXRsZSh0aXRsZSwgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgc3RhcnRYID0gY29uZmlnLnhBeGlzSGVpZ2h0ICsgKG9wdHMuaGVpZ2h0IC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gbWVhc3VyZVRleHQodGl0bGUpKSAvIDI7XHJcbiAgICBjb250ZXh0LnNhdmUoKTtcclxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICBjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcbiAgICBjb250ZXh0LnNldEZpbGxTdHlsZShvcHRzLnlBeGlzLnRpdGxlRm9udENvbG9yIHx8ICcjMzMzMzMzJyk7XHJcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBvcHRzLmhlaWdodCk7XHJcbiAgICBjb250ZXh0LnJvdGF0ZSgtOTAgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgIGNvbnRleHQuZmlsbFRleHQodGl0bGUsIHN0YXJ0WCwgY29uZmlnLnBhZGRpbmcgKyAwLjUgKiBjb25maWcuZm9udFNpemUpO1xyXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuICAgIGNvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd0NvbHVtbkRhdGFQb2ludHMoc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpIHtcclxuICAgIHZhciBwcm9jZXNzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAxO1xyXG5cdHZhciBjb2x1bW5PcHRpb24gPSBvcHRzLmV4dHJhLmNvbHVtbiB8fCB7dHlwZTp7fSxtZXRlcjp7fX07XHJcblx0Y29sdW1uT3B0aW9uLnR5cGU9Y29sdW1uT3B0aW9uLnR5cGU9PXVuZGVmaW5lZD8gJ2dyb3VwJzpjb2x1bW5PcHRpb24udHlwZTtcclxuXHRjb2x1bW5PcHRpb24ubWV0ZXI9Y29sdW1uT3B0aW9uLm1ldGVyfHx7fVxyXG5cdGNvbHVtbk9wdGlvbi5tZXRlci5ib3JkZXI9Y29sdW1uT3B0aW9uLm1ldGVyLmJvcmRlcj09dW5kZWZpbmVkPyA0OmNvbHVtbk9wdGlvbi5tZXRlci5ib3JkZXI7XHJcblx0Y29sdW1uT3B0aW9uLm1ldGVyLmZpbGxDb2xvcj1jb2x1bW5PcHRpb24ubWV0ZXIuZmlsbENvbG9yPT11bmRlZmluZWQ/ICcjRkZGRkZGJzpjb2x1bW5PcHRpb24ubWV0ZXIuZmlsbENvbG9yO1xyXG4gICAgdmFyIF9jYWxZQXhpc0RhdGEgPSBjYWxZQXhpc0RhdGEoc2VyaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHJhbmdlcyA9IF9jYWxZQXhpc0RhdGEucmFuZ2VzO1xyXG5cdFx0XHJcbiAgICB2YXIgX2dldFhBeGlzUG9pbnRzID0gZ2V0WEF4aXNQb2ludHMob3B0cy5jYXRlZ29yaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHhBeGlzUG9pbnRzID0gX2dldFhBeGlzUG9pbnRzLnhBeGlzUG9pbnRzLFxyXG4gICAgICAgIGVhY2hTcGFjaW5nID0gX2dldFhBeGlzUG9pbnRzLmVhY2hTcGFjaW5nO1xyXG5cclxuICAgIHZhciBtaW5SYW5nZSA9IHJhbmdlcy5wb3AoKTtcclxuICAgIHZhciBtYXhSYW5nZSA9IHJhbmdlcy5zaGlmdCgpO1xyXG5cdHZhciBjYWxQb2ludHMgPSBbXTtcclxuXHRcclxuICAgIGNvbnRleHQuc2F2ZSgpO1xyXG4gICAgaWYgKG9wdHMuX3Njcm9sbERpc3RhbmNlXyAmJiBvcHRzLl9zY3JvbGxEaXN0YW5jZV8gIT09IDAgJiYgb3B0cy5lbmFibGVTY3JvbGwgPT09IHRydWUpIHtcclxuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvcHRzLl9zY3JvbGxEaXN0YW5jZV8sIDApO1xyXG4gICAgfVxyXG5cdGlmIChvcHRzLnRvb2x0aXAgJiYgb3B0cy50b29sdGlwLnRleHRMaXN0ICYmIG9wdHMudG9vbHRpcC50ZXh0TGlzdC5sZW5ndGggJiYgcHJvY2VzcyA9PT0gMSkge1xyXG5cdCAgICBkcmF3VG9vbFRpcFNwbGl0QXJlYShvcHRzLnRvb2x0aXAub2Zmc2V0LngsIG9wdHMsIGNvbmZpZywgY29udGV4dCwgZWFjaFNwYWNpbmcpO1xyXG5cdH1cclxuXHRcclxuICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlYWNoU2VyaWVzLCBzZXJpZXNJbmRleCkge1xyXG4gICAgICAgIHZhciBkYXRhID0gZWFjaFNlcmllcy5kYXRhO1xyXG5cdFx0c3dpdGNoIChjb2x1bW5PcHRpb24udHlwZSl7XHJcblx0XHRjYXNlICdncm91cCc6XHJcblx0XHRcdHZhciBwb2ludHMgPSBnZXREYXRhUG9pbnRzKGRhdGEsIG1pblJhbmdlLCBtYXhSYW5nZSwgeEF4aXNQb2ludHMsIGVhY2hTcGFjaW5nLCBvcHRzLCBjb25maWcsIHByb2Nlc3MpO1xyXG5cdFx0XHR2YXIgdG9vbHRpcFBvaW50cyA9IGdldFN0YWNrRGF0YVBvaW50cyhkYXRhLCBtaW5SYW5nZSwgbWF4UmFuZ2UsIHhBeGlzUG9pbnRzLCBlYWNoU3BhY2luZywgb3B0cywgY29uZmlnLCBzZXJpZXNJbmRleCwgc2VyaWVzLHByb2Nlc3MpO1xyXG5cdFx0XHRjYWxQb2ludHMucHVzaCh0b29sdGlwUG9pbnRzKTtcclxuXHRcdFx0cG9pbnRzID0gZml4Q29sdW1lRGF0YShwb2ludHMsIGVhY2hTcGFjaW5nLCBzZXJpZXMubGVuZ3RoLCBzZXJpZXNJbmRleCwgY29uZmlnLCBvcHRzKTtcclxuXHRcdFx0cG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblx0XHRcdFx0aWYgKGl0ZW0gIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShpdGVtLmNvbG9yIHx8IGVhY2hTZXJpZXMuY29sb3IpO1xyXG5cdFx0XHRcdFx0dmFyIHN0YXJ0WCA9IGl0ZW0ueCAtIGl0ZW0ud2lkdGggLyAyICsgMTtcclxuXHRcdFx0XHRcdHZhciBoZWlnaHQgPSBvcHRzLmhlaWdodCAtIGl0ZW0ueSAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuXHRcdFx0XHRcdGNvbnRleHQubW92ZVRvKHN0YXJ0WCwgaXRlbS55KTtcclxuXHRcdFx0XHRcdGNvbnRleHQuZmlsbFJlY3Qoc3RhcnRYLCBpdGVtLnksIGl0ZW0ud2lkdGggLSAyLCBoZWlnaHQpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0XHRcdGNvbnRleHQuZmlsbCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnc3RhY2snOlxyXG5cdFx0XHQvLyDnu5jliLbloIblj6DmlbDmja7lm75cclxuXHRcdFx0dmFyIHBvaW50cyA9IGdldFN0YWNrRGF0YVBvaW50cyhkYXRhLCBtaW5SYW5nZSwgbWF4UmFuZ2UsIHhBeGlzUG9pbnRzLCBlYWNoU3BhY2luZywgb3B0cywgY29uZmlnLCBzZXJpZXNJbmRleCwgc2VyaWVzLHByb2Nlc3MpO1xyXG5cdFx0XHRjYWxQb2ludHMucHVzaChwb2ludHMpO1xyXG5cdFx0XHRwb2ludHMgPSBmaXhDb2x1bWVTdGFja0RhdGEocG9pbnRzLCBlYWNoU3BhY2luZywgc2VyaWVzLmxlbmd0aCwgc2VyaWVzSW5kZXgsIGNvbmZpZywgb3B0cyxzZXJpZXMpO1xyXG5cdFx0XHRcclxuXHRcdFx0cG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblx0XHRcdFx0aWYgKGl0ZW0gIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShpdGVtLmNvbG9yIHx8IGVhY2hTZXJpZXMuY29sb3IpO1xyXG5cdFx0XHRcdFx0dmFyIHN0YXJ0WCA9IGl0ZW0ueCAtIGl0ZW0ud2lkdGggLyAyICsgMTtcclxuXHRcdFx0XHRcdHZhciBoZWlnaHQgPSBvcHRzLmhlaWdodCAtIGl0ZW0ueSAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuXHRcdFx0XHRcdHZhciBoZWlnaHQwID0gb3B0cy5oZWlnaHQgLSBpdGVtLnkwIC0gY29uZmlnLnBhZGRpbmcgLSBjb25maWcueEF4aXNIZWlnaHQgLSBjb25maWcubGVnZW5kSGVpZ2h0O1xyXG5cdFx0XHRcdFx0aWYoc2VyaWVzSW5kZXg+MCl7XHJcblx0XHRcdFx0XHRcdGhlaWdodCAtPSBoZWlnaHQwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29udGV4dC5tb3ZlVG8oc3RhcnRYLCBpdGVtLnkpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5maWxsUmVjdChzdGFydFgsIGl0ZW0ueSwgaXRlbS53aWR0aCAtIDIsIGhlaWdodCk7XHJcblx0XHRcdFx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlICdtZXRlcic6XHJcblx0XHQvLyDnu5jliLbmuKnluqborqHmlbDmja7lm75cclxuXHRcdFx0dmFyIHBvaW50cyA9IGdldERhdGFQb2ludHMoZGF0YSwgbWluUmFuZ2UsIG1heFJhbmdlLCB4QXhpc1BvaW50cywgZWFjaFNwYWNpbmcsIG9wdHMsIGNvbmZpZywgcHJvY2Vzcyk7XHJcblx0XHRcdGNhbFBvaW50cy5wdXNoKHBvaW50cyk7XHJcblx0XHRcdHBvaW50cyA9IGZpeENvbHVtZU1ldGVyRGF0YShwb2ludHMsIGVhY2hTcGFjaW5nLCBzZXJpZXMubGVuZ3RoLCBzZXJpZXNJbmRleCwgY29uZmlnLCBvcHRzLCBjb2x1bW5PcHRpb24ubWV0ZXIuYm9yZGVyKTtcclxuXHRcdFx0aWYoc2VyaWVzSW5kZXg9PTApe1xyXG5cdFx0XHRcdHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW0gIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0Ly/nlLvog4zmma/popzoibJcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRGaWxsU3R5bGUoY29sdW1uT3B0aW9uLm1ldGVyLmZpbGxDb2xvcik7XHJcblx0XHRcdFx0XHRcdHZhciBzdGFydFggPSBpdGVtLnggLSBpdGVtLndpZHRoIC8gMiArIDE7XHJcblx0XHRcdFx0XHRcdHZhciBoZWlnaHQgPSBvcHRzLmhlaWdodCAtIGl0ZW0ueSAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5tb3ZlVG8oc3RhcnRYLCBpdGVtLnkpO1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0LmZpbGxSZWN0KHN0YXJ0WCwgaXRlbS55LCBpdGVtLndpZHRoIC0gMiwgaGVpZ2h0KTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRcdFx0XHRcdC8v55S76L655qGG57q/XHJcblx0XHRcdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0XHRcdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoZWFjaFNlcmllcy5jb2xvcik7XHJcblx0XHRcdFx0XHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKGNvbHVtbk9wdGlvbi5tZXRlci5ib3JkZXIqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5tb3ZlVG8oc3RhcnRYK2NvbHVtbk9wdGlvbi5tZXRlci5ib3JkZXIqMC41LCBpdGVtLnkraGVpZ2h0KTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5saW5lVG8oc3RhcnRYK2NvbHVtbk9wdGlvbi5tZXRlci5ib3JkZXIqMC41LCBpdGVtLnkrY29sdW1uT3B0aW9uLm1ldGVyLmJvcmRlciowLjUpO1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhzdGFydFgraXRlbS53aWR0aC1jb2x1bW5PcHRpb24ubWV0ZXIuYm9yZGVyLCBpdGVtLnkrY29sdW1uT3B0aW9uLm1ldGVyLmJvcmRlciowLjUpO1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhzdGFydFgraXRlbS53aWR0aC1jb2x1bW5PcHRpb24ubWV0ZXIuYm9yZGVyLCBpdGVtLnkraGVpZ2h0KTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5zdHJva2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0cG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShpdGVtLmNvbG9yIHx8IGVhY2hTZXJpZXMuY29sb3IpO1xyXG5cdFx0XHRcdFx0XHR2YXIgc3RhcnRYID0gaXRlbS54IC0gaXRlbS53aWR0aCAvIDIgKyAxO1xyXG5cdFx0XHRcdFx0XHR2YXIgaGVpZ2h0ID0gb3B0cy5oZWlnaHQgLSBpdGVtLnkgLSBjb25maWcucGFkZGluZyAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQ7XHJcblx0XHRcdFx0XHRcdGNvbnRleHQubW92ZVRvKHN0YXJ0WCwgaXRlbS55KTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5yZWN0KHN0YXJ0WCwgaXRlbS55LCBpdGVtLndpZHRoIC0gMiwgaGVpZ2h0KTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcbiAgICB9KTtcclxuXHRpZiAob3B0cy5kYXRhTGFiZWwgIT09IGZhbHNlICYmIHByb2Nlc3MgPT09IDEpIHtcclxuXHQgICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVhY2hTZXJpZXMsIHNlcmllc0luZGV4KSB7XHJcblx0ICAgICAgICB2YXIgZGF0YSA9IGVhY2hTZXJpZXMuZGF0YTtcclxuXHRcdFx0c3dpdGNoIChjb2x1bW5PcHRpb24udHlwZSl7XHJcblx0XHRcdFx0Y2FzZSAnZ3JvdXAnOlxyXG5cdFx0XHRcdHZhciBwb2ludHMgPSBnZXREYXRhUG9pbnRzKGRhdGEsIG1pblJhbmdlLCBtYXhSYW5nZSwgeEF4aXNQb2ludHMsIGVhY2hTcGFjaW5nLCBvcHRzLCBjb25maWcsIHByb2Nlc3MpO1xyXG5cdFx0XHRcdHBvaW50cyA9IGZpeENvbHVtZURhdGEocG9pbnRzLCBlYWNoU3BhY2luZywgc2VyaWVzLmxlbmd0aCwgc2VyaWVzSW5kZXgsIGNvbmZpZywgb3B0cyk7XHJcblx0XHRcdFx0ZHJhd1BvaW50VGV4dChwb2ludHMsIGVhY2hTZXJpZXMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnc3RhY2snOlxyXG5cdFx0XHRcdHZhciBwb2ludHMgPSBnZXRTdGFja0RhdGFQb2ludHMoZGF0YSwgbWluUmFuZ2UsIG1heFJhbmdlLCB4QXhpc1BvaW50cywgZWFjaFNwYWNpbmcsIG9wdHMsIGNvbmZpZywgc2VyaWVzSW5kZXgsIHNlcmllcyxwcm9jZXNzKTtcclxuXHRcdFx0XHRkcmF3UG9pbnRUZXh0KHBvaW50cywgZWFjaFNlcmllcywgY29uZmlnLCBjb250ZXh0KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICdtZXRlcic6XHJcblx0XHRcdFx0dmFyIHBvaW50cyA9IGdldERhdGFQb2ludHMoZGF0YSwgbWluUmFuZ2UsIG1heFJhbmdlLCB4QXhpc1BvaW50cywgZWFjaFNwYWNpbmcsIG9wdHMsIGNvbmZpZywgcHJvY2Vzcyk7XHJcblx0XHRcdFx0ZHJhd1BvaW50VGV4dChwb2ludHMsIGVhY2hTZXJpZXMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHQgICAgfSk7XHJcblx0fVxyXG5cdFxyXG4gICAgY29udGV4dC5yZXN0b3JlKCk7XHJcblx0XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHhBeGlzUG9pbnRzOiB4QXhpc1BvaW50cyxcclxuXHRcdGNhbFBvaW50czogY2FsUG9pbnRzLFxyXG4gICAgICAgIGVhY2hTcGFjaW5nOiBlYWNoU3BhY2luZ1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd0NhbmRsZURhdGFQb2ludHMoc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpIHtcclxuICAgIHZhciBwcm9jZXNzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAxO1xyXG5cdHZhciBjYW5kbGVPcHRpb24gPSBvcHRzLmV4dHJhLmNhbmRsZSB8fCB7Y29sb3I6e30sYXZlcmFnZTp7fX07XHJcblx0Y2FuZGxlT3B0aW9uLmNvbG9yLnVwTGluZT1jYW5kbGVPcHRpb24uY29sb3IudXBMaW5lPyBjYW5kbGVPcHRpb24uY29sb3IudXBMaW5lOiAnI2YwNDg2NCc7XHJcblx0Y2FuZGxlT3B0aW9uLmNvbG9yLnVwRmlsbD1jYW5kbGVPcHRpb24uY29sb3IudXBGaWxsPyBjYW5kbGVPcHRpb24uY29sb3IudXBGaWxsOiAnI2YwNDg2NCc7XHJcblx0Y2FuZGxlT3B0aW9uLmNvbG9yLmRvd25MaW5lPWNhbmRsZU9wdGlvbi5jb2xvci5kb3duTGluZT8gY2FuZGxlT3B0aW9uLmNvbG9yLmRvd25MaW5lOiAnIzJmYzI1Yic7XHJcblx0Y2FuZGxlT3B0aW9uLmNvbG9yLmRvd25GaWxsPWNhbmRsZU9wdGlvbi5jb2xvci5kb3duRmlsbD8gY2FuZGxlT3B0aW9uLmNvbG9yLmRvd25GaWxsOiAnIzJmYzI1Yic7XHJcblx0Y2FuZGxlT3B0aW9uLmF2ZXJhZ2Uuc2hvdyA9IGNhbmRsZU9wdGlvbi5hdmVyYWdlLnNob3c9PT10cnVlPyB0cnVlIDogZmFsc2U7XHJcblx0Y2FuZGxlT3B0aW9uLmF2ZXJhZ2UubmFtZSA9IGNhbmRsZU9wdGlvbi5hdmVyYWdlLm5hbWU/IGNhbmRsZU9wdGlvbi5hdmVyYWdlLm5hbWUgOiBbXTtcclxuXHRjYW5kbGVPcHRpb24uYXZlcmFnZS5kYXkgPSBjYW5kbGVPcHRpb24uYXZlcmFnZS5kYXk/IGNhbmRsZU9wdGlvbi5hdmVyYWdlLmRheSA6IFtdO1xyXG5cdGNhbmRsZU9wdGlvbi5hdmVyYWdlLmNvbG9yID0gY2FuZGxlT3B0aW9uLmF2ZXJhZ2UuY29sb3I/IGNhbmRsZU9wdGlvbi5hdmVyYWdlLmNvbG9yIDogWycjMTg5MGZmJywgJyMyZmMyNWInLCAnI2ZhY2MxNCcsICcjZjA0ODY0JywgJyM4NTQzZTAnLCAnIzkwZWQ3ZCddO1xyXG5cdG9wdHMuZXh0cmEuY2FuZGxlPWNhbmRsZU9wdGlvbjtcclxuXHRcclxuICAgIHZhciBfY2FsWUF4aXNEYXRhNSA9IGNhbFlBeGlzRGF0YShzZXJpZXMsIG9wdHMsIGNvbmZpZyksXHJcbiAgICAgICAgcmFuZ2VzID0gX2NhbFlBeGlzRGF0YTUucmFuZ2VzO1xyXG5cdFx0XHJcbiAgICB2YXIgX2dldFhBeGlzUG9pbnRzNSA9IGdldFhBeGlzUG9pbnRzKG9wdHMuY2F0ZWdvcmllcywgb3B0cywgY29uZmlnKSxcclxuICAgICAgICB4QXhpc1BvaW50cyA9IF9nZXRYQXhpc1BvaW50czUueEF4aXNQb2ludHMsXHJcbiAgICAgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHM1LmVhY2hTcGFjaW5nO1xyXG5cclxuICAgIHZhciBtaW5SYW5nZSA9IHJhbmdlcy5wb3AoKTtcclxuICAgIHZhciBtYXhSYW5nZSA9IHJhbmdlcy5zaGlmdCgpO1xyXG4gICAgdmFyIGNhbFBvaW50cyA9IFtdO1xyXG5cclxuICAgIGNvbnRleHQuc2F2ZSgpO1xyXG4gICAgaWYgKG9wdHMuX3Njcm9sbERpc3RhbmNlXyAmJiBvcHRzLl9zY3JvbGxEaXN0YW5jZV8gIT09IDAgJiYgb3B0cy5lbmFibGVTY3JvbGwgPT09IHRydWUpIHtcclxuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvcHRzLl9zY3JvbGxEaXN0YW5jZV8sIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlYWNoU2VyaWVzLCBzZXJpZXNJbmRleCkge1xyXG4gICAgICAgIHZhciBkYXRhID0gZWFjaFNlcmllcy5kYXRhO1xyXG4gICAgICAgIHZhciBwb2ludHMgPSBnZXRDYW5kbGVEYXRhUG9pbnRzKGRhdGEsIG1pblJhbmdlLCBtYXhSYW5nZSwgeEF4aXNQb2ludHMsIGVhY2hTcGFjaW5nLCBvcHRzLCBjb25maWcsIHByb2Nlc3MpO1xyXG4gICAgICAgIGNhbFBvaW50cy5wdXNoKHBvaW50cyk7XHJcbiAgICAgICAgdmFyIHNwbGl0UG9pbnRMaXN0ID0gc3BsaXRQb2ludHMocG9pbnRzKTtcclxuXHRcdHNwbGl0UG9pbnRMaXN0PXNwbGl0UG9pbnRMaXN0WzBdO1xyXG5cdFx0XHJcbiAgICAgICAgc3BsaXRQb2ludExpc3QuZm9yRWFjaChmdW5jdGlvbiAocG9pbnRzLCBpbmRleCkge1xyXG5cdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHQvL+WmguaenOS4iua2qFxyXG5cdFx0XHRpZihkYXRhW2luZGV4XVsxXS1kYXRhW2luZGV4XVswXT4wKXtcclxuXHRcdFx0XHRjb250ZXh0LnNldFN0cm9rZVN0eWxlKGNhbmRsZU9wdGlvbi5jb2xvci51cExpbmUpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKGNhbmRsZU9wdGlvbi5jb2xvci51cEZpbGwpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKDEqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhwb2ludHNbM10ueCwgcG9pbnRzWzNdLnkpOy8v6aG254K5XHJcblx0XHRcdFx0Y29udGV4dC5saW5lVG8ocG9pbnRzWzFdLngsIHBvaW50c1sxXS55KTsvL+aUtuebmOS4remXtOeCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1sxXS54LWVhY2hTcGFjaW5nLzQsIHBvaW50c1sxXS55KTsvL+aUtuebmOW3puS+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1swXS54LWVhY2hTcGFjaW5nLzQsIHBvaW50c1swXS55KTsvL+W8gOebmOW3puS+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7Ly/lvIDnm5jkuK3pl7TngrlcclxuXHRcdFx0XHRjb250ZXh0LmxpbmVUbyhwb2ludHNbMl0ueCwgcG9pbnRzWzJdLnkpOy8v5bqV54K5XHJcblx0XHRcdFx0Y29udGV4dC5saW5lVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTsvL+W8gOebmOS4remXtOeCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1swXS54K2VhY2hTcGFjaW5nLzQsIHBvaW50c1swXS55KTsvL+W8gOebmOWPs+S+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1sxXS54K2VhY2hTcGFjaW5nLzQsIHBvaW50c1sxXS55KTsvL+aUtuebmOWPs+S+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7Ly/mlLbnm5jkuK3pl7TngrlcclxuXHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhwb2ludHNbM10ueCwgcG9pbnRzWzNdLnkpOy8v6aG254K5XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoY2FuZGxlT3B0aW9uLmNvbG9yLmRvd25MaW5lKTtcclxuXHRcdFx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShjYW5kbGVPcHRpb24uY29sb3IuZG93bkZpbGwpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKDEqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhwb2ludHNbM10ueCwgcG9pbnRzWzNdLnkpOy8v6aG254K5XHJcblx0XHRcdFx0Y29udGV4dC5saW5lVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTsvL+W8gOebmOS4remXtOeCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1swXS54LWVhY2hTcGFjaW5nLzQsIHBvaW50c1swXS55KTsvL+W8gOebmOW3puS+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1sxXS54LWVhY2hTcGFjaW5nLzQsIHBvaW50c1sxXS55KTsvL+aUtuebmOW3puS+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7Ly/mlLbnm5jkuK3pl7TngrlcclxuXHRcdFx0XHRjb250ZXh0LmxpbmVUbyhwb2ludHNbMl0ueCwgcG9pbnRzWzJdLnkpOy8v5bqV54K5XHJcblx0XHRcdFx0Y29udGV4dC5saW5lVG8ocG9pbnRzWzFdLngsIHBvaW50c1sxXS55KTsvL+aUtuebmOS4remXtOeCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1sxXS54K2VhY2hTcGFjaW5nLzQsIHBvaW50c1sxXS55KTsvL+aUtuebmOWPs+S+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1swXS54K2VhY2hTcGFjaW5nLzQsIHBvaW50c1swXS55KTsvL+W8gOebmOWPs+S+p+eCuVxyXG5cdFx0XHRcdGNvbnRleHQubGluZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7Ly/lvIDnm5jkuK3pl7TngrlcclxuXHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhwb2ludHNbM10ueCwgcG9pbnRzWzNdLnkpOy8v6aG254K5XHJcblx0XHRcdH1cclxuXHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcclxuXHRcclxuXHQvL+eUu+Wdh+e6v1xyXG5cdGlmKGNhbmRsZU9wdGlvbi5hdmVyYWdlLnNob3cpe1xyXG5cdFx0XHJcblx0fVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgeEF4aXNQb2ludHM6IHhBeGlzUG9pbnRzLFxyXG4gICAgICAgIGNhbFBvaW50czogY2FsUG9pbnRzLFxyXG4gICAgICAgIGVhY2hTcGFjaW5nOiBlYWNoU3BhY2luZ1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd0FyZWFEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMTtcclxuXHJcbiAgICB2YXIgX2NhbFlBeGlzRGF0YTIgPSBjYWxZQXhpc0RhdGEoc2VyaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHJhbmdlcyA9IF9jYWxZQXhpc0RhdGEyLnJhbmdlcztcclxuXHJcbiAgICB2YXIgX2dldFhBeGlzUG9pbnRzMiA9IGdldFhBeGlzUG9pbnRzKG9wdHMuY2F0ZWdvcmllcywgb3B0cywgY29uZmlnKSxcclxuICAgICAgICB4QXhpc1BvaW50cyA9IF9nZXRYQXhpc1BvaW50czIueEF4aXNQb2ludHMsXHJcbiAgICAgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHMyLmVhY2hTcGFjaW5nO1xyXG5cclxuICAgIHZhciBtaW5SYW5nZSA9IHJhbmdlcy5wb3AoKTtcclxuICAgIHZhciBtYXhSYW5nZSA9IHJhbmdlcy5zaGlmdCgpO1xyXG4gICAgdmFyIGVuZFkgPSBvcHRzLmhlaWdodCAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuICAgIHZhciBjYWxQb2ludHMgPSBbXTtcclxuXHJcbiAgICBjb250ZXh0LnNhdmUoKTtcclxuICAgIGlmIChvcHRzLl9zY3JvbGxEaXN0YW5jZV8gJiYgb3B0cy5fc2Nyb2xsRGlzdGFuY2VfICE9PSAwICYmIG9wdHMuZW5hYmxlU2Nyb2xsID09PSB0cnVlKSB7XHJcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUob3B0cy5fc2Nyb2xsRGlzdGFuY2VfLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0cy50b29sdGlwICYmIG9wdHMudG9vbHRpcC50ZXh0TGlzdCAmJiBvcHRzLnRvb2x0aXAudGV4dExpc3QubGVuZ3RoICYmIHByb2Nlc3MgPT09IDEpIHtcclxuICAgICAgICBkcmF3VG9vbFRpcFNwbGl0TGluZShvcHRzLnRvb2x0aXAub2Zmc2V0LngsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcbiAgICB9XHJcblx0XHJcblx0XHJcbiAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcywgc2VyaWVzSW5kZXgpIHtcclxuICAgICAgICB2YXIgZGF0YSA9IGVhY2hTZXJpZXMuZGF0YTtcclxuICAgICAgICB2YXIgcG9pbnRzID0gZ2V0RGF0YVBvaW50cyhkYXRhLCBtaW5SYW5nZSwgbWF4UmFuZ2UsIHhBeGlzUG9pbnRzLCBlYWNoU3BhY2luZywgb3B0cywgY29uZmlnLCBwcm9jZXNzKTtcclxuICAgICAgICBjYWxQb2ludHMucHVzaChwb2ludHMpO1xyXG5cclxuICAgICAgICB2YXIgc3BsaXRQb2ludExpc3QgPSBzcGxpdFBvaW50cyhwb2ludHMpO1xyXG5cclxuICAgICAgICBzcGxpdFBvaW50TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludHMpIHtcclxuICAgICAgICAgICAgLy8g57uY5Yi25Yy65Z+f5pWw5o2uXHJcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoZWFjaFNlcmllcy5jb2xvcik7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKGVhY2hTZXJpZXMuY29sb3IpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNldEdsb2JhbEFscGhhKDAuMik7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZVdpZHRoKDIqb3B0cy5waXhlbFJhdGlvKTtcclxuICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RQb2ludCA9IHBvaW50c1swXTtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRzLmV4dHJhLmxpbmVTdHlsZSA9PT0gJ2N1cnZlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3RybFBvaW50ID0gY3JlYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50cywgaW5kZXggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyhjdHJsUG9pbnQuY3RyQS54LCBjdHJsUG9pbnQuY3RyQS55LCBjdHJsUG9pbnQuY3RyQi54LCBjdHJsUG9pbnQuY3RyQi55LCBpdGVtLngsIGl0ZW0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCwgaXRlbS55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGxhc3RQb2ludC54LCBlbmRZKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGZpcnN0UG9pbnQueCwgZW5kWSk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHBvaW50c1swXTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKGl0ZW0ueCAtIGVhY2hTcGFjaW5nIC8gMiwgaXRlbS55KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCArIGVhY2hTcGFjaW5nIC8gMiwgaXRlbS55KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCArIGVhY2hTcGFjaW5nIC8gMiwgZW5kWSk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhpdGVtLnggLSBlYWNoU3BhY2luZyAvIDIsIGVuZFkpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oaXRlbS54IC0gZWFjaFNwYWNpbmcgLyAyLCBpdGVtLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbCgpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNldEdsb2JhbEFscGhhKDEpO1xyXG5cdFx0XHRcclxuXHRcdFx0XHJcblx0XHRcdC8v55S76L+e57q/XHJcblx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoZWFjaFNlcmllcy5jb2xvcik7XHJcblx0XHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKDIqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdFx0aWYgKHBvaW50cy5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0ICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblx0XHRcdCAgICBjb250ZXh0LmFyYyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnksIDEsIDAsIDIgKiBNYXRoLlBJKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0ICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblx0XHRcdCAgICBpZiAob3B0cy5leHRyYS5saW5lU3R5bGUgPT09ICdjdXJ2ZScpIHtcclxuXHRcdFx0ICAgICAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuXHRcdFx0ICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG5cdFx0XHQgICAgICAgICAgICAgICAgdmFyIGN0cmxQb2ludCA9IGNyZWF0ZUN1cnZlQ29udHJvbFBvaW50cyhwb2ludHMsIGluZGV4IC0gMSk7XHJcblx0XHRcdCAgICAgICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oY3RybFBvaW50LmN0ckEueCwgY3RybFBvaW50LmN0ckEueSwgY3RybFBvaW50LmN0ckIueCwgY3RybFBvaW50LmN0ckIueSwgaXRlbS54LCBpdGVtLnkpO1xyXG5cdFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdCAgICAgICAgfSk7XHJcblx0XHRcdCAgICB9IGVsc2Uge1xyXG5cdFx0XHQgICAgICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG5cdFx0XHQgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcblx0XHRcdCAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhpdGVtLngsIGl0ZW0ueSk7XHJcblx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgICB9KTtcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0ICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0Y29udGV4dC5zdHJva2UoKTtcclxuICAgICAgICB9KTtcclxuXHRcdFxyXG5cdFx0Ly/nlLvngrlcclxuICAgICAgICBpZiAob3B0cy5kYXRhUG9pbnRTaGFwZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHNoYXBlID0gY29uZmlnLmRhdGFQb2ludFNoYXBlW3Nlcmllc0luZGV4ICUgY29uZmlnLmRhdGFQb2ludFNoYXBlLmxlbmd0aF07XHJcbiAgICAgICAgICAgIGRyYXdQb2ludFNoYXBlKHBvaW50cywgZWFjaFNlcmllcy5jb2xvciwgc2hhcGUsIGNvbnRleHQsb3B0cyk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9KTtcclxuICAgIGlmIChvcHRzLmRhdGFMYWJlbCAhPT0gZmFsc2UgJiYgcHJvY2VzcyA9PT0gMSkge1xyXG4gICAgICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlYWNoU2VyaWVzLCBzZXJpZXNJbmRleCkge1xyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IGVhY2hTZXJpZXMuZGF0YTtcclxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IGdldERhdGFQb2ludHMoZGF0YSwgbWluUmFuZ2UsIG1heFJhbmdlLCB4QXhpc1BvaW50cywgZWFjaFNwYWNpbmcsIG9wdHMsIGNvbmZpZywgcHJvY2Vzcyk7XHJcbiAgICAgICAgICAgIGRyYXdQb2ludFRleHQocG9pbnRzLCBlYWNoU2VyaWVzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnRleHQucmVzdG9yZSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgeEF4aXNQb2ludHM6IHhBeGlzUG9pbnRzLFxyXG4gICAgICAgIGNhbFBvaW50czogY2FsUG9pbnRzLFxyXG4gICAgICAgIGVhY2hTcGFjaW5nOiBlYWNoU3BhY2luZ1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd0xpbmVEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMTtcclxuXHJcbiAgICB2YXIgX2NhbFlBeGlzRGF0YTMgPSBjYWxZQXhpc0RhdGEoc2VyaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHJhbmdlcyA9IF9jYWxZQXhpc0RhdGEzLnJhbmdlcztcclxuXHJcbiAgICB2YXIgX2dldFhBeGlzUG9pbnRzMyA9IGdldFhBeGlzUG9pbnRzKG9wdHMuY2F0ZWdvcmllcywgb3B0cywgY29uZmlnKSxcclxuICAgICAgICB4QXhpc1BvaW50cyA9IF9nZXRYQXhpc1BvaW50czMueEF4aXNQb2ludHMsXHJcbiAgICAgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHMzLmVhY2hTcGFjaW5nO1xyXG5cclxuICAgIHZhciBtaW5SYW5nZSA9IHJhbmdlcy5wb3AoKTtcclxuICAgIHZhciBtYXhSYW5nZSA9IHJhbmdlcy5zaGlmdCgpO1xyXG4gICAgdmFyIGNhbFBvaW50cyA9IFtdO1xyXG5cclxuICAgIGNvbnRleHQuc2F2ZSgpO1xyXG4gICAgaWYgKG9wdHMuX3Njcm9sbERpc3RhbmNlXyAmJiBvcHRzLl9zY3JvbGxEaXN0YW5jZV8gIT09IDAgJiYgb3B0cy5lbmFibGVTY3JvbGwgPT09IHRydWUpIHtcclxuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvcHRzLl9zY3JvbGxEaXN0YW5jZV8sIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRzLnRvb2x0aXAgJiYgb3B0cy50b29sdGlwLnRleHRMaXN0ICYmIG9wdHMudG9vbHRpcC50ZXh0TGlzdC5sZW5ndGggJiYgcHJvY2VzcyA9PT0gMSkge1xyXG4gICAgICAgIGRyYXdUb29sVGlwU3BsaXRMaW5lKG9wdHMudG9vbHRpcC5vZmZzZXQueCwgb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcywgc2VyaWVzSW5kZXgpIHtcclxuICAgICAgICB2YXIgZGF0YSA9IGVhY2hTZXJpZXMuZGF0YTtcclxuICAgICAgICB2YXIgcG9pbnRzID0gZ2V0RGF0YVBvaW50cyhkYXRhLCBtaW5SYW5nZSwgbWF4UmFuZ2UsIHhBeGlzUG9pbnRzLCBlYWNoU3BhY2luZywgb3B0cywgY29uZmlnLCBwcm9jZXNzKTtcclxuICAgICAgICBjYWxQb2ludHMucHVzaChwb2ludHMpO1xyXG4gICAgICAgIHZhciBzcGxpdFBvaW50TGlzdCA9IHNwbGl0UG9pbnRzKHBvaW50cyk7XHJcblxyXG4gICAgICAgIHNwbGl0UG9pbnRMaXN0LmZvckVhY2goZnVuY3Rpb24gKHBvaW50cywgaW5kZXgpIHtcclxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShlYWNoU2VyaWVzLmNvbG9yKTtcclxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lV2lkdGgoMipvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgICAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuYXJjKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSwgMSwgMCwgMiAqIE1hdGguUEkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRzLmV4dHJhLmxpbmVTdHlsZSA9PT0gJ2N1cnZlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3RybFBvaW50ID0gY3JlYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50cywgaW5kZXggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyhjdHJsUG9pbnQuY3RyQS54LCBjdHJsUG9pbnQuY3RyQS55LCBjdHJsUG9pbnQuY3RyQi54LCBjdHJsUG9pbnQuY3RyQi55LCBpdGVtLngsIGl0ZW0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0ueCwgaXRlbS55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAob3B0cy5kYXRhUG9pbnRTaGFwZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHNoYXBlID0gY29uZmlnLmRhdGFQb2ludFNoYXBlW3Nlcmllc0luZGV4ICUgY29uZmlnLmRhdGFQb2ludFNoYXBlLmxlbmd0aF07XHJcbiAgICAgICAgICAgIGRyYXdQb2ludFNoYXBlKHBvaW50cywgZWFjaFNlcmllcy5jb2xvciwgc2hhcGUsIGNvbnRleHQsb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAob3B0cy5kYXRhTGFiZWwgIT09IGZhbHNlICYmIHByb2Nlc3MgPT09IDEpIHtcclxuICAgICAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcywgc2VyaWVzSW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSBlYWNoU2VyaWVzLmRhdGE7XHJcbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBnZXREYXRhUG9pbnRzKGRhdGEsIG1pblJhbmdlLCBtYXhSYW5nZSwgeEF4aXNQb2ludHMsIGVhY2hTcGFjaW5nLCBvcHRzLCBjb25maWcsIHByb2Nlc3MpO1xyXG4gICAgICAgICAgICBkcmF3UG9pbnRUZXh0KHBvaW50cywgZWFjaFNlcmllcywgY29uZmlnLCBjb250ZXh0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHhBeGlzUG9pbnRzOiB4QXhpc1BvaW50cyxcclxuICAgICAgICBjYWxQb2ludHM6IGNhbFBvaW50cyxcclxuICAgICAgICBlYWNoU3BhY2luZzogZWFjaFNwYWNpbmdcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRyYXdNaXhEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMTtcclxuXHJcbiAgICB2YXIgX2NhbFlBeGlzRGF0YTYgPSBjYWxZQXhpc0RhdGEoc2VyaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHJhbmdlcyA9IF9jYWxZQXhpc0RhdGE2LnJhbmdlcztcclxuXHJcbiAgICB2YXIgX2dldFhBeGlzUG9pbnRzNiA9IGdldFhBeGlzUG9pbnRzKG9wdHMuY2F0ZWdvcmllcywgb3B0cywgY29uZmlnKSxcclxuICAgICAgICB4QXhpc1BvaW50cyA9IF9nZXRYQXhpc1BvaW50czYueEF4aXNQb2ludHMsXHJcbiAgICAgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHM2LmVhY2hTcGFjaW5nO1xyXG5cclxuICAgIHZhciBtaW5SYW5nZSA9IHJhbmdlcy5wb3AoKTtcclxuICAgIHZhciBtYXhSYW5nZSA9IHJhbmdlcy5zaGlmdCgpO1xyXG5cdHZhciBlbmRZID0gb3B0cy5oZWlnaHQgLSBjb25maWcucGFkZGluZyAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQ7XHJcbiAgICB2YXIgY2FsUG9pbnRzID0gW107XHJcblx0XHJcblx0dmFyIGNvbHVtbkluZGV4PTA7XHJcblx0dmFyIGNvbHVtbkxlbmd0aD0wO1xyXG5cdHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlYWNoU2VyaWVzLCBzZXJpZXNJbmRleCkge1xyXG5cdFx0aWYoZWFjaFNlcmllcy50eXBlPT0nY29sdW1uJyl7XHJcblx0XHRcdGNvbHVtbkxlbmd0aCs9MTtcclxuXHRcdH1cclxuXHR9KTtcclxuICAgIGNvbnRleHQuc2F2ZSgpO1xyXG4gICAgaWYgKG9wdHMuX3Njcm9sbERpc3RhbmNlXyAmJiBvcHRzLl9zY3JvbGxEaXN0YW5jZV8gIT09IDAgJiYgb3B0cy5lbmFibGVTY3JvbGwgPT09IHRydWUpIHtcclxuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvcHRzLl9zY3JvbGxEaXN0YW5jZV8sIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRzLnRvb2x0aXAgJiYgb3B0cy50b29sdGlwLnRleHRMaXN0ICYmIG9wdHMudG9vbHRpcC50ZXh0TGlzdC5sZW5ndGggJiYgcHJvY2VzcyA9PT0gMSkge1xyXG4gICAgICAgIGRyYXdUb29sVGlwU3BsaXRMaW5lKG9wdHMudG9vbHRpcC5vZmZzZXQueCwgb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcywgc2VyaWVzSW5kZXgpIHtcclxuICAgICAgICB2YXIgZGF0YSA9IGVhY2hTZXJpZXMuZGF0YTtcclxuICAgICAgICB2YXIgcG9pbnRzID0gZ2V0RGF0YVBvaW50cyhkYXRhLCBtaW5SYW5nZSwgbWF4UmFuZ2UsIHhBeGlzUG9pbnRzLCBlYWNoU3BhY2luZywgb3B0cywgY29uZmlnLCBwcm9jZXNzKTtcclxuICAgICAgICBjYWxQb2ludHMucHVzaChwb2ludHMpO1xyXG4gICAgICAgIFxyXG5cdFx0Ly8g57uY5Yi25p+x54q25pWw5o2u5Zu+XHJcblx0XHRpZihlYWNoU2VyaWVzLnR5cGU9PSdjb2x1bW4nKXtcclxuXHRcdFx0cG9pbnRzID0gZml4Q29sdW1lRGF0YShwb2ludHMsIGVhY2hTcGFjaW5nLCBjb2x1bW5MZW5ndGggLCBjb2x1bW5JbmRleCwgY29uZmlnLCBvcHRzKTtcclxuXHRcdFx0cG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblx0XHRcdCAgICBpZiAoaXRlbSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdFx0XHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKGl0ZW0uY29sb3IgfHwgZWFjaFNlcmllcy5jb2xvcik7XHJcblx0XHRcdCAgICAgICAgdmFyIHN0YXJ0WCA9IGl0ZW0ueCAtIGl0ZW0ud2lkdGggLyAyICsgMTtcclxuXHRcdFx0ICAgICAgICB2YXIgaGVpZ2h0ID0gb3B0cy5oZWlnaHQgLSBpdGVtLnkgLSBjb25maWcucGFkZGluZyAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQ7XHJcblx0XHRcdCAgICAgICAgY29udGV4dC5tb3ZlVG8oc3RhcnRYLCBpdGVtLnkpO1xyXG5cdFx0XHQgICAgICAgIGNvbnRleHQucmVjdChzdGFydFgsIGl0ZW0ueSwgaXRlbS53aWR0aCAtIDIsIGhlaWdodCk7XHJcblx0XHRcdFx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRcdCAgICB9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb2x1bW5JbmRleCs9MTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly/nu5jliLbljLrln5/lm77mlbDmja5cclxuXHRcdFxyXG5cdFx0aWYoZWFjaFNlcmllcy50eXBlPT0nYXJlYScpe1xyXG5cdFx0XHR2YXIgc3BsaXRQb2ludExpc3QgPSBzcGxpdFBvaW50cyhwb2ludHMpO1xyXG5cdFx0XHRzcGxpdFBvaW50TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludHMpIHtcclxuXHRcdFx0XHQvLyDnu5jliLbljLrln5/mlbDmja5cclxuXHRcdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoZWFjaFNlcmllcy5jb2xvcik7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRGaWxsU3R5bGUoZWFjaFNlcmllcy5jb2xvcik7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRHbG9iYWxBbHBoYSgwLjIpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKDIqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdFx0XHRpZiAocG9pbnRzLmxlbmd0aCA+IDEpIHtcclxuXHRcdFx0XHRcdHZhciBmaXJzdFBvaW50ID0gcG9pbnRzWzBdO1xyXG5cdFx0XHRcdFx0dmFyIGxhc3RQb2ludCA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XHJcblx0XHRcdFx0XHRpZiAoZWFjaFNlcmllcy5zdHlsZSA9PT0gJ2N1cnZlJykge1xyXG5cdFx0XHRcdFx0XHRwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoaW5kZXggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgY3RybFBvaW50ID0gY3JlYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50cywgaW5kZXggLSAxKTtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQuYmV6aWVyQ3VydmVUbyhjdHJsUG9pbnQuY3RyQS54LCBjdHJsUG9pbnQuY3RyQS55LCBjdHJsUG9pbnQuY3RyQi54LCBjdHJsUG9pbnQuY3RyQi55LCBpdGVtLngsIGl0ZW0ueSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpbmRleCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQubGluZVRvKGl0ZW0ueCwgaXRlbS55KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29udGV4dC5saW5lVG8obGFzdFBvaW50LngsIGVuZFkpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5saW5lVG8oZmlyc3RQb2ludC54LCBlbmRZKTtcclxuXHRcdFx0XHRcdGNvbnRleHQubGluZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dmFyIGl0ZW0gPSBwb2ludHNbMF07XHJcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhpdGVtLnggLSBlYWNoU3BhY2luZyAvIDIsIGl0ZW0ueSk7XHJcblx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhpdGVtLnggKyBlYWNoU3BhY2luZyAvIDIsIGl0ZW0ueSk7XHJcblx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhpdGVtLnggKyBlYWNoU3BhY2luZyAvIDIsIGVuZFkpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5saW5lVG8oaXRlbS54IC0gZWFjaFNwYWNpbmcgLyAyLCBlbmRZKTtcclxuXHRcdFx0XHRcdGNvbnRleHQubW92ZVRvKGl0ZW0ueCAtIGVhY2hTcGFjaW5nIC8gMiwgaXRlbS55KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0XHRjb250ZXh0LmZpbGwoKTtcclxuXHRcdFx0XHRjb250ZXh0LnNldEdsb2JhbEFscGhhKDEpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0XHJcblx0XHRcclxuXHRcdC8vIOe7mOWItuaKmOe6v+aVsOaNruWbvlxyXG5cdFx0aWYoZWFjaFNlcmllcy50eXBlPT0nbGluZScpe1xyXG5cdFx0XHR2YXIgc3BsaXRQb2ludExpc3QgPSBzcGxpdFBvaW50cyhwb2ludHMpO1xyXG5cdFx0XHRzcGxpdFBvaW50TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludHMsIGluZGV4KSB7XHJcblx0XHRcdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdFx0XHRjb250ZXh0LnNldFN0cm9rZVN0eWxlKGVhY2hTZXJpZXMuY29sb3IpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKDIqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdFx0XHRpZiAocG9pbnRzLmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0XHRcdFx0Y29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuXHRcdFx0XHRcdGNvbnRleHQuYXJjKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSwgMSwgMCwgMiAqIE1hdGguUEkpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xyXG5cdFx0XHRcdFx0aWYgKGVhY2hTZXJpZXMuc3R5bGU9PSdjdXJ2ZScpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGN0cmxQb2ludCA9IGNyZWF0ZUN1cnZlQ29udHJvbFBvaW50cyhwb2ludHMsIGluZGV4IC0gMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0LmJlemllckN1cnZlVG8oY3RybFBvaW50LmN0ckEueCwgY3RybFBvaW50LmN0ckEueSwgY3RybFBvaW50LmN0ckIueCwgY3RybFBvaW50LmN0ckIueSwgaXRlbS54LCBpdGVtLnkpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoaW5kZXggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhpdGVtLngsIGl0ZW0ueSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbnRleHQubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHRcdFx0Y29udGV4dC5zdHJva2UoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIOe7mOWItueCueaVsOaNruWbvlxyXG5cdFx0aWYoZWFjaFNlcmllcy50eXBlPT0ncG9pbnQnKXtcclxuXHRcdFx0dmFyIHNwbGl0UG9pbnRMaXN0ID0gc3BsaXRQb2ludHMocG9pbnRzKTtcclxuXHRcdFx0c3BsaXRQb2ludExpc3QuZm9yRWFjaChmdW5jdGlvbiAocG9pbnRzLCBpbmRleCkge1xyXG5cdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRTdHJva2VTdHlsZShlYWNoU2VyaWVzLmNvbG9yKTtcclxuXHRcdFx0XHRjb250ZXh0LnNldExpbmVXaWR0aCgyKm9wdHMucGl4ZWxSYXRpbyk7XHJcblx0XHRcdFx0Y29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuXHRcdFx0XHRjb250ZXh0LmFyYyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnksIDEsIDAsIDIgKiBNYXRoLlBJKTtcclxuXHRcdFx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0XHJcbiAgICAgICAgaWYgKG9wdHMuZGF0YVBvaW50U2hhcGUgIT09IGZhbHNlICYmIGVhY2hTZXJpZXMudHlwZSE9PSdjb2x1bW4nKSB7XHJcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IGNvbmZpZy5kYXRhUG9pbnRTaGFwZVtzZXJpZXNJbmRleCAlIGNvbmZpZy5kYXRhUG9pbnRTaGFwZS5sZW5ndGhdO1xyXG4gICAgICAgICAgICBkcmF3UG9pbnRTaGFwZShwb2ludHMsIGVhY2hTZXJpZXMuY29sb3IsIHNoYXBlLCBjb250ZXh0LG9wdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKG9wdHMuZGF0YUxhYmVsICE9PSBmYWxzZSAmJiBwcm9jZXNzID09PSAxKSB7XHJcblx0XHR2YXIgY29sdW1uSW5kZXg9MDtcclxuICAgICAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcywgc2VyaWVzSW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSBlYWNoU2VyaWVzLmRhdGE7XHJcblx0XHRcdHZhciBwb2ludHMgPSBnZXREYXRhUG9pbnRzKGRhdGEsIG1pblJhbmdlLCBtYXhSYW5nZSwgeEF4aXNQb2ludHMsIGVhY2hTcGFjaW5nLCBvcHRzLCBjb25maWcsIHByb2Nlc3MpO1xyXG5cdFx0XHRpZihlYWNoU2VyaWVzLnR5cGUhPT0nY29sdW1uJyl7XHJcblx0XHRcdFx0ZHJhd1BvaW50VGV4dChwb2ludHMsIGVhY2hTZXJpZXMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHBvaW50cyA9IGZpeENvbHVtZURhdGEocG9pbnRzLCBlYWNoU3BhY2luZywgY29sdW1uTGVuZ3RoLCBjb2x1bW5JbmRleCwgY29uZmlnLCBvcHRzKTtcclxuXHRcdFx0XHRkcmF3UG9pbnRUZXh0KHBvaW50cywgZWFjaFNlcmllcywgY29uZmlnLCBjb250ZXh0KTtcclxuXHRcdFx0XHRjb2x1bW5JbmRleCs9MTtcclxuXHRcdFx0fVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHhBeGlzUG9pbnRzOiB4QXhpc1BvaW50cyxcclxuICAgICAgICBjYWxQb2ludHM6IGNhbFBvaW50cyxcclxuICAgICAgICBlYWNoU3BhY2luZzogZWFjaFNwYWNpbmdcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRyYXdUb29sVGlwQnJpZGdlKG9wdHMsIGNvbmZpZywgY29udGV4dCwgcHJvY2VzcywgZWFjaFNwYWNpbmcsIHhBeGlzUG9pbnRzKSB7XHJcblx0dmFyIHRvb2xUaXBPcHRpb24gPSBvcHRzLmV4dHJhLnRvb2x0aXAgfHwge307XHJcblx0aWYodG9vbFRpcE9wdGlvbi5ob3JpemVudGFsTGluZSAmJiBvcHRzLnRvb2x0aXAgJiYgcHJvY2VzcyA9PT0gMSAmJiAob3B0cy50eXBlPT0nbGluZScgfHwgb3B0cy50eXBlPT0nYXJlYScgfHwgb3B0cy50eXBlPT0nY29sdW1uJyB8fCBvcHRzLnR5cGU9PSdjYW5kbGUnIHx8IG9wdHMudHlwZT09J21peCcpKXtcclxuXHRcdGRyYXdUb29sVGlwSG9yaXplbnRhbExpbmUob3B0cywgY29uZmlnLCBjb250ZXh0LCBlYWNoU3BhY2luZywgeEF4aXNQb2ludHMpXHJcblx0fVxyXG4gICAgY29udGV4dC5zYXZlKCk7XHJcbiAgICBpZiAob3B0cy5fc2Nyb2xsRGlzdGFuY2VfICYmIG9wdHMuX3Njcm9sbERpc3RhbmNlXyAhPT0gMCAmJiBvcHRzLmVuYWJsZVNjcm9sbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9wdHMuX3Njcm9sbERpc3RhbmNlXywgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy50b29sdGlwICYmIG9wdHMudG9vbHRpcC50ZXh0TGlzdCAmJiBvcHRzLnRvb2x0aXAudGV4dExpc3QubGVuZ3RoICYmIHByb2Nlc3MgPT09IDEpIHtcclxuICAgICAgICBkcmF3VG9vbFRpcChvcHRzLnRvb2x0aXAudGV4dExpc3QsIG9wdHMudG9vbHRpcC5vZmZzZXQsIG9wdHMsIGNvbmZpZywgY29udGV4dCwgZWFjaFNwYWNpbmcsIHhBeGlzUG9pbnRzKTtcclxuICAgIH1cclxuICAgIGNvbnRleHQucmVzdG9yZSgpO1xyXG5cdFxyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3WEF4aXMoY2F0ZWdvcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcblx0XHJcbiAgICB2YXIgX2dldFhBeGlzUG9pbnRzNCA9IGdldFhBeGlzUG9pbnRzKGNhdGVnb3JpZXMsIG9wdHMsIGNvbmZpZyksXHJcbiAgICAgICAgeEF4aXNQb2ludHMgPSBfZ2V0WEF4aXNQb2ludHM0LnhBeGlzUG9pbnRzLFxyXG4gICAgICAgIHN0YXJ0WCA9IF9nZXRYQXhpc1BvaW50czQuc3RhcnRYLFxyXG4gICAgICAgIGVuZFggPSBfZ2V0WEF4aXNQb2ludHM0LmVuZFgsXHJcbiAgICAgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHM0LmVhY2hTcGFjaW5nO1xyXG5cclxuICAgIHZhciBzdGFydFkgPSBvcHRzLmhlaWdodCAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuICAgIHZhciBlbmRZID0gY29uZmlnLnBhZGRpbmc7XHJcblxyXG5cclxuXHQvL+e7mOWItua7muWKqOadoVxyXG5cdGlmKG9wdHMuZW5hYmxlU2Nyb2xsICYmIG9wdHMueEF4aXMuc2Nyb2xsU2hvdyl7XHJcblx0XHR2YXIgc2Nyb2xsWT1vcHRzLmhlaWdodCAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLmxlZ2VuZEhlaWdodCArIDQqb3B0cy5waXhlbFJhdGlvO1xyXG5cdFx0dmFyIHNjcm9sbFNjcmVlbldpZHRoPWVuZFgtc3RhcnRYO1xyXG5cdFx0dmFyIHNjcm9sbFRvdGFsV2lkdGg9ZWFjaFNwYWNpbmcqKHhBeGlzUG9pbnRzLmxlbmd0aC0xKTtcclxuXHRcdHZhciBzY3JvbGxXaWR0aD1zY3JvbGxTY3JlZW5XaWR0aCpzY3JvbGxTY3JlZW5XaWR0aC9zY3JvbGxUb3RhbFdpZHRoO1xyXG5cdFx0dmFyIHNjcm9sbExlZnQ9MDtcclxuXHRcdGlmIChvcHRzLl9zY3JvbGxEaXN0YW5jZV8pe1xyXG5cdFx0XHRzY3JvbGxMZWZ0PS1vcHRzLl9zY3JvbGxEaXN0YW5jZV8qKHNjcm9sbFNjcmVlbldpZHRoKS9zY3JvbGxUb3RhbFdpZHRoO1xyXG5cdFx0fVxyXG5cdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdGNvbnRleHQuc2V0TGluZUNhcCgncm91bmQnKTtcclxuXHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKDYqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRcdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUob3B0cy54QXhpcy5zY3JvbGxCYWNrZ3JvdW5kQ29sb3IgfHwgXCIjRUZFQkVGXCIpO1xyXG5cdFx0Y29udGV4dC5tb3ZlVG8oc3RhcnRYLCBzY3JvbGxZKTtcclxuXHRcdGNvbnRleHQubGluZVRvKGVuZFgsIHNjcm9sbFkpO1xyXG5cdFx0Y29udGV4dC5zdHJva2UoKTtcclxuXHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lQ2FwKCdyb3VuZCcpO1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lV2lkdGgoNipvcHRzLnBpeGVsUmF0aW8pO1xyXG5cdFx0Y29udGV4dC5zZXRTdHJva2VTdHlsZShvcHRzLnhBeGlzLnNjcm9sbENvbG9yIHx8XCIjQTZBNkE2XCIpO1xyXG5cdFx0Y29udGV4dC5tb3ZlVG8oc3RhcnRYK3Njcm9sbExlZnQsIHNjcm9sbFkpO1xyXG5cdFx0Y29udGV4dC5saW5lVG8oc3RhcnRYK3Njcm9sbExlZnQrc2Nyb2xsV2lkdGgsIHNjcm9sbFkpO1xyXG5cdFx0Y29udGV4dC5zdHJva2UoKTtcclxuXHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0fVxyXG5cdFxyXG4gICAgY29udGV4dC5zYXZlKCk7XHJcblx0XHJcbiAgICBpZiAob3B0cy5fc2Nyb2xsRGlzdGFuY2VfICYmIG9wdHMuX3Njcm9sbERpc3RhbmNlXyAhPT0gMCkge1xyXG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9wdHMuX3Njcm9sbERpc3RhbmNlXywgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUob3B0cy54QXhpcy5ncmlkQ29sb3IgfHwgXCIjY2NjY2NjXCIpO1xyXG5cdGNvbnRleHQuc2V0TGluZUNhcCgnYnV0dCcpO1xyXG5cdGNvbnRleHQuc2V0TGluZVdpZHRoKDEqb3B0cy5waXhlbFJhdGlvKTtcclxuXHRpZihvcHRzLnhBeGlzLmdyaWRUeXBlPT0nZGFzaCcpe1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lRGFzaChbb3B0cy54QXhpcy5kYXNoTGVuZ3RoLG9wdHMueEF4aXMuZGFzaExlbmd0aF0pO1xyXG5cdH1cclxuICAgIGlmIChvcHRzLnhBeGlzLmRpc2FibGVHcmlkICE9PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKG9wdHMueEF4aXMudHlwZSA9PT0gJ2NhbGlicmF0aW9uJykge1xyXG4gICAgICAgICAgICB4QXhpc1BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKGl0ZW0gLSBlYWNoU3BhY2luZyAvIDIsIHN0YXJ0WSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oaXRlbSAtIGVhY2hTcGFjaW5nIC8gMiwgc3RhcnRZICsgNCpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4QXhpc1BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oaXRlbSwgc3RhcnRZKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGl0ZW0sIGVuZFkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgY29udGV4dC5zdHJva2UoKTtcclxuXHRjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcclxuXHJcblx0Ly/kuI3nu5jliLZY6L20XHJcblx0aWYgKG9wdHMueEF4aXMuZGlzYWJsZWQgIT09IHRydWUpIHtcclxuXHRcdC8vIOWvuVjovbTliJfooajlgZrmir3nqIDlpITnkIZcclxuXHRcdHZhciB2YWxpZFdpZHRoID0gb3B0cy53aWR0aCAtIDIgKiBjb25maWcucGFkZGluZyAtIGNvbmZpZy55QXhpc1dpZHRoIC0gY29uZmlnLnlBeGlzVGl0bGVXaWR0aDtcclxuXHRcdHZhciBtYXhYQXhpc0xpc3RMZW5ndGggPSBNYXRoLm1pbihjYXRlZ29yaWVzLmxlbmd0aCwgTWF0aC5jZWlsKHZhbGlkV2lkdGggLyBjb25maWcuZm9udFNpemUgLyAxLjUpKTtcclxuXHRcdHZhciByYXRpbyA9IE1hdGguY2VpbChjYXRlZ29yaWVzLmxlbmd0aCAvIG1heFhBeGlzTGlzdExlbmd0aCk7XHJcblx0XHRjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblx0XHRcdHJldHVybiBpbmRleCAlIHJhdGlvICE9PSAwID8gJycgOiBpdGVtO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKGNvbmZpZy5feEF4aXNUZXh0QW5nbGVfID09PSAwKSB7XHJcblx0XHRcdGNhdGVnb3JpZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gZWFjaFNwYWNpbmcgLyAyIC0gbWVhc3VyZVRleHQoaXRlbSkgLyAyO1xyXG5cdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRGb250U2l6ZShjb25maWcuZm9udFNpemUpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKG9wdHMueEF4aXMuZm9udENvbG9yIHx8ICcjNjY2NjY2Jyk7XHJcblx0XHRcdFx0Y29udGV4dC5maWxsVGV4dChpdGVtLCB4QXhpc1BvaW50c1tpbmRleF0gKyBvZmZzZXQsIHN0YXJ0WSArIGNvbmZpZy5mb250U2l6ZSArIDUpO1xyXG5cdFx0XHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHRcdFx0Y29udGV4dC5zdHJva2UoKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG5cdFx0XHRcdGNvbnRleHQuc2F2ZSgpO1xyXG5cdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRGb250U2l6ZShjb25maWcuZm9udFNpemUpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKG9wdHMueEF4aXMuZm9udENvbG9yIHx8ICcjNjY2NjY2Jyk7XHJcblx0XHRcdFx0dmFyIHRleHRXaWR0aCA9IG1lYXN1cmVUZXh0KGl0ZW0pO1xyXG5cdFx0XHRcdHZhciBvZmZzZXQgPSBlYWNoU3BhY2luZyAvIDIgLSB0ZXh0V2lkdGg7XHJcblxyXG5cdFx0XHRcdHZhciBfY2FsUm90YXRlVHJhbnNsYXRlID0gY2FsUm90YXRlVHJhbnNsYXRlKHhBeGlzUG9pbnRzW2luZGV4XSArIGVhY2hTcGFjaW5nIC8gMiwgc3RhcnRZICsgY29uZmlnLmZvbnRTaXplIC8gMiArIDUsIG9wdHMuaGVpZ2h0KSxcclxuXHRcdFx0XHRcdHRyYW5zWCA9IF9jYWxSb3RhdGVUcmFuc2xhdGUudHJhbnNYLFxyXG5cdFx0XHRcdFx0dHJhbnNZID0gX2NhbFJvdGF0ZVRyYW5zbGF0ZS50cmFuc1k7XHJcblxyXG5cdFx0XHRcdGNvbnRleHQucm90YXRlKC0xICogY29uZmlnLl94QXhpc1RleHRBbmdsZV8pO1xyXG5cdFx0XHRcdGNvbnRleHQudHJhbnNsYXRlKHRyYW5zWCwgdHJhbnNZKTtcclxuXHRcdFx0XHRjb250ZXh0LmZpbGxUZXh0KGl0ZW0sIHhBeGlzUG9pbnRzW2luZGV4XSArIG9mZnNldCwgc3RhcnRZICsgY29uZmlnLmZvbnRTaXplICsgNSk7XHJcblx0XHRcdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0XHRjb250ZXh0LnN0cm9rZSgpO1xyXG5cdFx0XHRcdGNvbnRleHQucmVzdG9yZSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHRcclxuICAgIGNvbnRleHQucmVzdG9yZSgpO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd1lBeGlzR3JpZChjYXRlZ29yaWVzLG9wdHMsIGNvbmZpZywgY29udGV4dCkge1xyXG5cdGlmIChvcHRzLnlBeGlzLmRpc2FibGVHcmlkID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHNwYWNpbmdWYWxpZCA9IG9wdHMuaGVpZ2h0IC0gMiAqIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuICAgIHZhciBlYWNoU3BhY2luZyA9IE1hdGguZmxvb3Ioc3BhY2luZ1ZhbGlkIC8gY29uZmlnLnlBeGlzU3BsaXQpO1xyXG4gICAgdmFyIHlBeGlzVG90YWxXaWR0aCA9IGNvbmZpZy55QXhpc1dpZHRoICsgY29uZmlnLnlBeGlzVGl0bGVXaWR0aDtcclxuICAgIHZhciBzdGFydFggPSBjb25maWcucGFkZGluZyArIHlBeGlzVG90YWxXaWR0aDtcclxuXHR2YXIgX2dldFhBeGlzUG9pbnRzNCA9IGdldFhBeGlzUG9pbnRzKGNhdGVnb3JpZXMsIG9wdHMsIGNvbmZpZyksXHJcblx0ICAgIHhBeGlzUG9pbnRzID0gX2dldFhBeGlzUG9pbnRzNC54QXhpc1BvaW50cyxcclxuXHQgICAgeEF4aXNlYWNoU3BhY2luZyA9IF9nZXRYQXhpc1BvaW50czQuZWFjaFNwYWNpbmc7XHJcblx0dmFyIFRvdGFsV2lkdGg9eEF4aXNlYWNoU3BhY2luZyooeEF4aXNQb2ludHMubGVuZ3RoLTEpO1xyXG5cdHZhciBlbmRYID0gc3RhcnRYK1RvdGFsV2lkdGg7XHJcblx0XHJcbiAgICB2YXIgcG9pbnRzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmZpZy55QXhpc1NwbGl0OyBpKyspIHtcclxuICAgICAgICBwb2ludHMucHVzaChjb25maWcucGFkZGluZyArIGVhY2hTcGFjaW5nICogaSk7XHJcbiAgICB9XHJcbiAgICBwb2ludHMucHVzaChjb25maWcucGFkZGluZyArIGVhY2hTcGFjaW5nICogY29uZmlnLnlBeGlzU3BsaXQgKyAyKTtcclxuXHJcblx0Y29udGV4dC5zYXZlKCk7XHJcbiAgICBpZiAob3B0cy5fc2Nyb2xsRGlzdGFuY2VfICYmIG9wdHMuX3Njcm9sbERpc3RhbmNlXyAhPT0gMCkge1xyXG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9wdHMuX3Njcm9sbERpc3RhbmNlXywgMCk7XHJcbiAgICB9XHJcblx0XHJcblx0aWYob3B0cy55QXhpcy5ncmlkVHlwZT09J2Rhc2gnKXtcclxuXHRcdGNvbnRleHQuc2V0TGluZURhc2goW29wdHMueUF4aXMuZGFzaExlbmd0aCxvcHRzLnlBeGlzLmRhc2hMZW5ndGhdKTtcclxuXHR9XHJcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShvcHRzLnlBeGlzLmdyaWRDb2xvciB8fCBcIiNjY2NjY2NcIik7XHJcblx0XHJcbiAgICBjb250ZXh0LnNldExpbmVXaWR0aCgxKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICBjb250ZXh0Lm1vdmVUbyhzdGFydFgsIGl0ZW0pO1xyXG4gICAgICAgIGNvbnRleHQubGluZVRvKGVuZFgsIGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgY29udGV4dC5zdHJva2UoKTtcclxuXHRjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcclxuXHRcclxuXHRjb250ZXh0LnJlc3RvcmUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd1lBeGlzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICBpZiAob3B0cy55QXhpcy5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgX2NhbFlBeGlzRGF0YTQgPSBjYWxZQXhpc0RhdGEoc2VyaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHJhbmdlc0Zvcm1hdCA9IF9jYWxZQXhpc0RhdGE0LnJhbmdlc0Zvcm1hdDtcclxuXHJcbiAgICB2YXIgeUF4aXNUb3RhbFdpZHRoID0gY29uZmlnLnlBeGlzV2lkdGggKyBjb25maWcueUF4aXNUaXRsZVdpZHRoO1xyXG5cclxuICAgIHZhciBzcGFjaW5nVmFsaWQgPSBvcHRzLmhlaWdodCAtIDIgKiBjb25maWcucGFkZGluZyAtIGNvbmZpZy54QXhpc0hlaWdodCAtIGNvbmZpZy5sZWdlbmRIZWlnaHQ7XHJcbiAgICB2YXIgZWFjaFNwYWNpbmcgPSBNYXRoLmZsb29yKHNwYWNpbmdWYWxpZCAvIGNvbmZpZy55QXhpc1NwbGl0KTtcclxuICAgIHZhciBzdGFydFggPSBjb25maWcucGFkZGluZyArIHlBeGlzVG90YWxXaWR0aDtcclxuICAgIHZhciBlbmRYID0gb3B0cy53aWR0aCAtIGNvbmZpZy5wYWRkaW5nO1xyXG4gICAgdmFyIGVuZFkgPSBvcHRzLmhlaWdodCAtIGNvbmZpZy5wYWRkaW5nIC0gY29uZmlnLnhBeGlzSGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodDtcclxuXHJcbiAgICAvLyBzZXQgWUF4aXMgYmFja2dyb3VuZFxyXG5cdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICBjb250ZXh0LnNldEZpbGxTdHlsZShvcHRzLmJhY2tncm91bmQgfHwgJyNmZmZmZmYnKTtcclxuICAgIGlmIChvcHRzLl9zY3JvbGxEaXN0YW5jZV8gPCAwKSB7XHJcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBzdGFydFgsIGVuZFkgKyBjb25maWcueEF4aXNIZWlnaHQgKTtcclxuICAgIH1cclxuICAgIGNvbnRleHQuZmlsbFJlY3QoZW5kWCwgMCwgb3B0cy53aWR0aCwgZW5kWSArIGNvbmZpZy54QXhpc0hlaWdodCApO1xyXG5cdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0Y29udGV4dC5zdHJva2UoKTtcclxuXHJcbiAgICB2YXIgcG9pbnRzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBjb25maWcueUF4aXNTcGxpdDsgaSsrKSB7XHJcbiAgICAgICAgcG9pbnRzLnB1c2goY29uZmlnLnBhZGRpbmcgKyBlYWNoU3BhY2luZyAqIGkpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIHJhbmdlc0Zvcm1hdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBwb3MgPSBwb2ludHNbaW5kZXhdID8gcG9pbnRzW2luZGV4XSA6IGVuZFk7XHJcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5zZXRGb250U2l6ZShjb25maWcuZm9udFNpemUpO1xyXG5cdFx0Y29udGV4dC5zZXRGaWxsU3R5bGUob3B0cy55QXhpcy5mb250Q29sb3IgfHwgJyM2NjY2NjYnKTtcclxuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KGl0ZW0sIGNvbmZpZy5wYWRkaW5nICsgY29uZmlnLnlBeGlzVGl0bGVXaWR0aCwgcG9zICsgY29uZmlnLmZvbnRTaXplIC8gMik7XHJcblx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5zdHJva2UoKTtcclxuICAgIH0pO1xyXG4gICAgXHJcblxyXG4gICAgaWYgKG9wdHMueUF4aXMudGl0bGUpIHtcclxuICAgICAgICBkcmF3WUF4aXNUaXRsZShvcHRzLnlBeGlzLnRpdGxlLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3TGVnZW5kKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICBpZiAob3B0cy5sZWdlbmQ9PT1mYWxzZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGVhY2ggbGVnZW5kIHNoYXBlIHdpZHRoIDE1cHhcclxuICAgIC8vIHRoZSBzcGFjaW5nIGJldHdlZW4gc2hhcGUgYW5kIHRleHQgaW4gZWFjaCBsZWdlbmQgaXMgdGhlIGBwYWRkaW5nYFxyXG4gICAgLy8gZWFjaCBsZWdlbmQgc3BhY2luZyBpcyB0aGUgYHBhZGRpbmdgXHJcbiAgICAvLyBsZWdlbmQgbWFyZ2luIHRvcCBgY29uZmlnLnBhZGRpbmdgXHJcblxyXG4gICAgdmFyIF9jYWxMZWdlbmREYXRhID0gY2FsTGVnZW5kRGF0YShzZXJpZXMsIG9wdHMsIGNvbmZpZyksXHJcbiAgICAgICAgbGVnZW5kTGlzdCA9IF9jYWxMZWdlbmREYXRhLmxlZ2VuZExpc3Q7XHJcblxyXG4gICAgdmFyIHBhZGRpbmcgPSA1Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIHZhciBtYXJnaW5Ub3AgPSAxMCpvcHRzLnBpeGVsUmF0aW87XHJcbiAgICB2YXIgc2hhcGVXaWR0aCA9IDE1Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIGxlZ2VuZExpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbUxpc3QsIGxpc3RJbmRleCkge1xyXG4gICAgICAgIHZhciB3aWR0aCA9IDA7XHJcbiAgICAgICAgaXRlbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSBpdGVtLm5hbWUgfHwgJ3VuZGVmaW5lZCc7XHJcbiAgICAgICAgICAgIHdpZHRoICs9IDMgKiBwYWRkaW5nICsgbWVhc3VyZVRleHQoaXRlbS5uYW1lKSArIHNoYXBlV2lkdGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIHN0YXJ0WCA9IChvcHRzLndpZHRoIC0gd2lkdGgpIC8gMiArIHBhZGRpbmc7XHJcbiAgICAgICAgdmFyIHN0YXJ0WSA9IG9wdHMuaGVpZ2h0IC0gY29uZmlnLnBhZGRpbmcgLSBjb25maWcubGVnZW5kSGVpZ2h0ICsgbGlzdEluZGV4ICogKGNvbmZpZy5mb250U2l6ZSArIG1hcmdpblRvcCkgKyBwYWRkaW5nICsgbWFyZ2luVG9wO1xyXG5cclxuICAgICAgICBjb250ZXh0LnNldEZvbnRTaXplKGNvbmZpZy5mb250U2l6ZSk7XHJcbiAgICAgICAgaXRlbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wdHMudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbGluZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVXaWR0aCgxKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShpdGVtLmNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNldEZpbGxTdHlsZShpdGVtLmNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhzdGFydFggKyA3LjUqb3B0cy5waXhlbFJhdGlvLCBzdGFydFkgKyA1Km9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmMoc3RhcnRYICsgNy41Km9wdHMucGl4ZWxSYXRpbywgc3RhcnRZICsgNSpvcHRzLnBpeGVsUmF0aW8sIDYqb3B0cy5waXhlbFJhdGlvLCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncGllJzpcclxuXHRcdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldExpbmVXaWR0aCgxKm9wdHMucGl4ZWxSYXRpbyk7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldFN0cm9rZVN0eWxlKGl0ZW0uY29sb3IpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5zZXRGaWxsU3R5bGUoaXRlbS5jb2xvcik7XHJcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhzdGFydFggKyA3LjUqb3B0cy5waXhlbFJhdGlvLCBzdGFydFkgKyA1Km9wdHMucGl4ZWxSYXRpbyk7XHJcblx0XHRcdFx0XHRjb250ZXh0LmFyYyhzdGFydFggKyA3LjUqb3B0cy5waXhlbFJhdGlvLCBzdGFydFkgKyA1Km9wdHMucGl4ZWxSYXRpbywgNipvcHRzLnBpeGVsUmF0aW8sIDAsIDIgKiBNYXRoLlBJKTtcclxuXHRcdFx0XHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblx0XHRcdFx0XHRjb250ZXh0LmZpbGwoKTtcclxuXHRcdFx0XHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JpbmcnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lV2lkdGgoMSpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoaXRlbS5jb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRGaWxsU3R5bGUoaXRlbS5jb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oc3RhcnRYICsgNy41Km9wdHMucGl4ZWxSYXRpbywgc3RhcnRZICsgNSpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJjKHN0YXJ0WCArIDcuNSpvcHRzLnBpeGVsUmF0aW8sIHN0YXJ0WSArIDUqb3B0cy5waXhlbFJhdGlvLCA2Km9wdHMucGl4ZWxSYXRpbywgMCwgMiAqIE1hdGguUEkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHRcdFx0XHQvL+WchuW8p+i/m+W6puWbvuS4jeaYvuekuuWbvuS+i1xyXG5cdFx0XHRcdGNhc2UgJ2dhdWdlJzpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgJ2FyY2Jhcic6XHJcblx0XHRcdFx0XHRicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNldEZpbGxTdHlsZShpdGVtLmNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzdGFydFgsIHN0YXJ0WSwgMTUqb3B0cy5waXhlbFJhdGlvLCAxMCpvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGFydFggKz0gcGFkZGluZyArIHNoYXBlV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRcdGNvbnRleHQuc2V0Rm9udFNpemUoY29uZmlnLmZvbnRTaXplKTtcclxuICAgICAgICAgICAgY29udGV4dC5zZXRGaWxsU3R5bGUob3B0cy5leHRyYS5sZWdlbmRUZXh0Q29sb3IgfHwgJyMzMzMzMzMnKTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dChpdGVtLm5hbWUsIHN0YXJ0WCwgc3RhcnRZICsgNipvcHRzLnBpeGVsUmF0aW8rMypvcHRzLnBpeGVsUmF0aW8pO1xyXG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgICAgICAgICBzdGFydFggKz0gbWVhc3VyZVRleHQoaXRlbS5uYW1lKSArIDIgKiBwYWRkaW5nO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRyYXdQaWVEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMTtcclxuXHJcbiAgICB2YXIgcGllT3B0aW9uID0gb3B0cy5leHRyYS5waWUgfHwge307XHJcbiAgICBzZXJpZXMgPSBnZXRQaWVEYXRhUG9pbnRzKHNlcmllcywgcHJvY2Vzcyk7XHJcbiAgICB2YXIgY2VudGVyUG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogb3B0cy53aWR0aCAvIDIsXHJcbiAgICAgICAgeTogKG9wdHMuaGVpZ2h0IC0gY29uZmlnLmxlZ2VuZEhlaWdodCkgLyAyXHJcbiAgICB9O1xyXG4gICAgdmFyIHJhZGl1cyA9IE1hdGgubWluKGNlbnRlclBvc2l0aW9uLnggLSBjb25maWcucGllQ2hhcnRMaW5lUGFkZGluZyAtIGNvbmZpZy5waWVDaGFydFRleHRQYWRkaW5nIC0gY29uZmlnLl9waWVUZXh0TWF4TGVuZ3RoXywgY2VudGVyUG9zaXRpb24ueSAtIGNvbmZpZy5waWVDaGFydExpbmVQYWRkaW5nIC0gY29uZmlnLnBpZUNoYXJ0VGV4dFBhZGRpbmcpO1xyXG4gICAgaWYgKG9wdHMuZGF0YUxhYmVsKSB7XHJcbiAgICAgICAgcmFkaXVzIC09IDEwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByYWRpdXMgLT0gMiAqIGNvbmZpZy5wYWRkaW5nO1xyXG4gICAgfVxyXG5cdFxyXG5cdHZhciBhY3RpdmVSYWRpdXM9cmFkaXVzK2NvbmZpZy5waWVDaGFydExpbmVQYWRkaW5nLzI7XHJcblx0XHJcblx0XHJcbiAgICBzZXJpZXMgPSBzZXJpZXMubWFwKGZ1bmN0aW9uIChlYWNoU2VyaWVzKSB7XHJcbiAgICAgICAgZWFjaFNlcmllcy5fc3RhcnRfICs9IChwaWVPcHRpb24ub2Zmc2V0QW5nbGUgfHwgMCkgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgICAgIHJldHVybiBlYWNoU2VyaWVzO1xyXG4gICAgfSk7XHJcbiAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcyxzZXJpZXNJbmRleCkge1xyXG5cdFx0aWYob3B0cy50b29sdGlwKXtcclxuXHRcdFx0aWYob3B0cy50b29sdGlwLmluZGV4PT1zZXJpZXNJbmRleCl7XHJcblx0XHRcdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdFx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShoZXhUb1JnYihlYWNoU2VyaWVzLmNvbG9yLCBvcHRzLmV4dHJhLnBpZS5hY3RpdmVPcGFjaXR5IHx8IDAuNSkpO1xyXG5cdFx0XHRcdGNvbnRleHQubW92ZVRvKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnkpO1xyXG5cdFx0XHRcdGNvbnRleHQuYXJjKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnksIGFjdGl2ZVJhZGl1cywgZWFjaFNlcmllcy5fc3RhcnRfLCBlYWNoU2VyaWVzLl9zdGFydF8gKyAyICogZWFjaFNlcmllcy5fcHJvcG9ydGlvbl8gKiBNYXRoLlBJKTtcclxuXHRcdFx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRcdGNvbnRleHQuZmlsbCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjb250ZXh0LnNldExpbmVXaWR0aCgyKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZSgnI2ZmZmZmZicpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKGVhY2hTZXJpZXMuY29sb3IpO1xyXG4gICAgICAgIGNvbnRleHQubW92ZVRvKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnkpO1xyXG4gICAgICAgIGNvbnRleHQuYXJjKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnksIHJhZGl1cywgZWFjaFNlcmllcy5fc3RhcnRfLCBlYWNoU2VyaWVzLl9zdGFydF8gKyAyICogZWFjaFNlcmllcy5fcHJvcG9ydGlvbl8gKiBNYXRoLlBJKTtcclxuICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xyXG4gICAgICAgIGlmIChvcHRzLmRpc2FibGVQaWVTdHJva2UgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAob3B0cy50eXBlID09PSAncmluZycpIHtcclxuICAgICAgICB2YXIgaW5uZXJQaWVXaWR0aCA9IHJhZGl1cyAqIDAuNjtcclxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuZXh0cmEucGllLnJpbmdXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0cy5leHRyYS5waWUucmluZ1dpZHRoID4gMCkge1xyXG4gICAgICAgICAgICBpbm5lclBpZVdpZHRoID0gTWF0aC5tYXgoMCwgcmFkaXVzIC0gb3B0cy5leHRyYS5waWUucmluZ1dpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjb250ZXh0LnNldEZpbGxTdHlsZShvcHRzLmJhY2tncm91bmQgfHwgJyNmZmZmZmYnKTtcclxuICAgICAgICBjb250ZXh0Lm1vdmVUbyhjZW50ZXJQb3NpdGlvbi54LCBjZW50ZXJQb3NpdGlvbi55KTtcclxuICAgICAgICBjb250ZXh0LmFyYyhjZW50ZXJQb3NpdGlvbi54LCBjZW50ZXJQb3NpdGlvbi55LCBpbm5lclBpZVdpZHRoLCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuICAgICAgICBjb250ZXh0LmZpbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0cy5kYXRhTGFiZWwgIT09IGZhbHNlICYmIHByb2Nlc3MgPT09IDEpIHtcclxuICAgICAgICAvLyBmaXggaHR0cHM6Ly9naXRodWIuY29tL3hpYW9saW4zMzAzL3d4LWNoYXJ0cy9pc3N1ZXMvMTMyXHJcbiAgICAgICAgdmFyIHZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlcmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2VyaWVzW2ldLmRhdGEgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgIGRyYXdQaWVUZXh0KHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0LCByYWRpdXMsIGNlbnRlclBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2Nlc3MgPT09IDEgJiYgb3B0cy50eXBlID09PSAncmluZycpIHtcclxuICAgICAgICBkcmF3UmluZ1RpdGxlKG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjZW50ZXI6IGNlbnRlclBvc2l0aW9uLFxyXG4gICAgICAgIHJhZGl1czogcmFkaXVzLFxyXG4gICAgICAgIHNlcmllczogc2VyaWVzXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3QXJjYmFyRGF0YVBvaW50cyhzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCkge1xyXG4gICAgdmFyIHByb2Nlc3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDE7XHJcblxyXG4gICAgdmFyIGFyY2Jhck9wdGlvbiA9IG9wdHMuZXh0cmEuYXJjYmFyIHx8IHt9O1xyXG5cdGFyY2Jhck9wdGlvbi5zdGFydEFuZ2xlPWFyY2Jhck9wdGlvbi5zdGFydEFuZ2xlPyBhcmNiYXJPcHRpb24uc3RhcnRBbmdsZTogMC43NTtcclxuXHRhcmNiYXJPcHRpb24uZW5kQW5nbGU9YXJjYmFyT3B0aW9uLmVuZEFuZ2xlPyBhcmNiYXJPcHRpb24uZW5kQW5nbGUgOiAwLjI1O1xyXG5cdGFyY2Jhck9wdGlvbi50eXBlPWFyY2Jhck9wdGlvbi50eXBlPyBhcmNiYXJPcHRpb24udHlwZSA6ICdkZWZhdWx0JztcclxuXHRcclxuICAgIHNlcmllcyA9IGdldEFyY2JhckRhdGFQb2ludHMoc2VyaWVzLCBhcmNiYXJPcHRpb24sIHByb2Nlc3MpO1xyXG4gICAgdmFyIGNlbnRlclBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IG9wdHMud2lkdGggLyAyLFxyXG4gICAgICAgIHk6IChvcHRzLmhlaWdodCkgLyAyXHJcbiAgICB9O1xyXG4gICAgdmFyIHJhZGl1cyA9IE1hdGgubWluKGNlbnRlclBvc2l0aW9uLnggLCBjZW50ZXJQb3NpdGlvbi55KTtcclxuICAgXHJcblx0aWYgKHR5cGVvZiBhcmNiYXJPcHRpb24ud2lkdGggPT09ICdudW1iZXInICYmIGFyY2Jhck9wdGlvbi53aWR0aCA+IDApIHtcclxuXHQgICAgYXJjYmFyT3B0aW9uLndpZHRoPWFyY2Jhck9wdGlvbi53aWR0aDtcclxuXHR9ZWxzZXtcclxuXHRcdGFyY2Jhck9wdGlvbi53aWR0aD0xMipvcHRzLnBpeGVsUmF0aW87XHJcblx0fVxyXG5cdHJhZGl1cyAtPSBjb25maWcucGFkZGluZythcmNiYXJPcHRpb24ud2lkdGgvMjtcclxuXHRcclxuXHQvL+iDjOaZr+minOiJslxyXG5cdGNvbnRleHQuc2V0TGluZVdpZHRoKGFyY2Jhck9wdGlvbi53aWR0aCk7IC8vIOiuvue9ruWchueOr+eahOWuveW6plxyXG5cdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoYXJjYmFyT3B0aW9uLmJhY2tncm91bmRDb2xvciB8fCAnI0U5RTlFOScpOyAvLyDorr7nva7lnIbnjq/nmoTpopzoibJcclxuXHRjb250ZXh0LnNldExpbmVDYXAoJ3JvdW5kJyk7IC8vIOiuvue9ruWchueOr+err+eCueeahOW9oueKtlxyXG5cdGNvbnRleHQuYmVnaW5QYXRoKCk7IC8v5byA5aeL5LiA5Liq5paw55qE6Lev5b6EXHJcblx0aWYoYXJjYmFyT3B0aW9uLnR5cGU9PSdkZWZhdWx0Jyl7XHJcblx0XHRjb250ZXh0LmFyYyhjZW50ZXJQb3NpdGlvbi54LCBjZW50ZXJQb3NpdGlvbi55LCByYWRpdXMsIGFyY2Jhck9wdGlvbi5zdGFydEFuZ2xlICogTWF0aC5QSSwgYXJjYmFyT3B0aW9uLmVuZEFuZ2xlICogTWF0aC5QSSwgZmFsc2UpO1xyXG5cdH1lbHNle1xyXG5cdFx0Y29udGV4dC5hcmMoY2VudGVyUG9zaXRpb24ueCwgY2VudGVyUG9zaXRpb24ueSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xyXG5cdH1cclxuXHRcclxuXHRjb250ZXh0LnN0cm9rZSgpOyAvL+WvueW9k+WJjei3r+W+hOi/m+ihjOaPj+i+uVxyXG5cdFx0XHJcblx0XHRcdFxyXG4gICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVhY2hTZXJpZXMpIHtcclxuXHRcdGNvbnRleHQuc2V0TGluZVdpZHRoKGFyY2Jhck9wdGlvbi53aWR0aCk7XHJcblx0XHRjb250ZXh0LnNldFN0cm9rZVN0eWxlKGVhY2hTZXJpZXMuY29sb3IpO1xyXG5cdFx0Y29udGV4dC5zZXRMaW5lQ2FwKCdyb3VuZCcpO1xyXG5cdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcclxuXHRcdGNvbnRleHQuYXJjKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnksIHJhZGl1cywgYXJjYmFyT3B0aW9uLnN0YXJ0QW5nbGUgKiBNYXRoLlBJLCBlYWNoU2VyaWVzLl9wcm9wb3J0aW9uXyAqIE1hdGguUEksIGZhbHNlKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0XHRcclxuICAgIH0pO1xyXG4gICAgZHJhd1JpbmdUaXRsZShvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjZW50ZXI6IGNlbnRlclBvc2l0aW9uLFxyXG4gICAgICAgIHJhZGl1czogcmFkaXVzLFxyXG4gICAgICAgIHNlcmllczogc2VyaWVzXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3R2F1Z2VEYXRhUG9pbnRzKGNhdGVnb3JpZXMsc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpIHtcclxuXHR2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogMTtcclxuXHR2YXIgZ2F1Z2VPcHRpb24gPSBvcHRzLmV4dHJhLmdhdWdlIHx8IHt9O1xyXG5cdGdhdWdlT3B0aW9uLnN0YXJ0QW5nbGU9Z2F1Z2VPcHRpb24uc3RhcnRBbmdsZT8gZ2F1Z2VPcHRpb24uc3RhcnRBbmdsZTogMC43NTtcclxuXHRpZihnYXVnZU9wdGlvbi5vbGRBbmdsZT09dW5kZWZpbmVkKXtcclxuXHRcdGdhdWdlT3B0aW9uLm9sZEFuZ2xlPWdhdWdlT3B0aW9uLnN0YXJ0QW5nbGU7XHJcblx0fVxyXG5cdGlmKGdhdWdlT3B0aW9uLm9sZERhdGE9PXVuZGVmaW5lZCl7XHJcblx0XHRnYXVnZU9wdGlvbi5vbGREYXRhPTA7XHJcblx0fVxyXG5cdGdhdWdlT3B0aW9uLmVuZEFuZ2xlPWdhdWdlT3B0aW9uLmVuZEFuZ2xlPyBnYXVnZU9wdGlvbi5lbmRBbmdsZSA6IDAuMjU7XHJcblx0Y2F0ZWdvcmllcyA9IGdldEdhdWdlQXhpc1BvaW50cyhjYXRlZ29yaWVzLGdhdWdlT3B0aW9uLnN0YXJ0QW5nbGUsZ2F1Z2VPcHRpb24uZW5kQW5nbGUpO1xyXG5cdHZhciBjZW50ZXJQb3NpdGlvbiA9IHtcclxuXHQgICAgeDogb3B0cy53aWR0aCAvIDIsXHJcblx0ICAgIHk6IChvcHRzLmhlaWdodCkgLyAyXHJcblx0fTtcclxuXHR2YXIgcmFkaXVzID0gTWF0aC5taW4oY2VudGVyUG9zaXRpb24ueCAsIGNlbnRlclBvc2l0aW9uLnkpO1xyXG5cdGlmICh0eXBlb2YgZ2F1Z2VPcHRpb24ud2lkdGggPT09ICdudW1iZXInICYmIGdhdWdlT3B0aW9uLndpZHRoID4gMCkge1xyXG5cdCAgICBnYXVnZU9wdGlvbi53aWR0aD1nYXVnZU9wdGlvbi53aWR0aDtcclxuXHR9ZWxzZXtcclxuXHRcdGdhdWdlT3B0aW9uLndpZHRoPTE1Km9wdHMucGl4ZWxSYXRpbztcclxuXHR9XHJcblx0cmFkaXVzIC09IGNvbmZpZy5wYWRkaW5nK2dhdWdlT3B0aW9uLndpZHRoLzI7XHJcblx0dmFyIGlubmVyUmFkaXVzID0gcmFkaXVzLWdhdWdlT3B0aW9uLndpZHRoO1xyXG5cdFxyXG5cdFxyXG5cdFxyXG5cdC8v55S76IOM5pmvXHJcblx0Y29udGV4dC5zZXRMaW5lV2lkdGgoZ2F1Z2VPcHRpb24ud2lkdGgpO1xyXG5cdGNvbnRleHQuc2V0TGluZUNhcCgnYnV0dCcpOyBcclxuXHRjYXRlZ29yaWVzLmZvckVhY2goZnVuY3Rpb24gKGVhY2hDYXRlZ29yaWVzKSB7XHJcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpOyBcclxuXHRcdGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoZWFjaENhdGVnb3JpZXMuY29sb3IpOyBcclxuXHRcdGNvbnRleHQuYXJjKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnksIHJhZGl1cywgZWFjaENhdGVnb3JpZXMuX3N0YXJ0QW5nbGVfICogTWF0aC5QSSwgZWFjaENhdGVnb3JpZXMuX2VuZEFuZ2xlXyAqIE1hdGguUEksIGZhbHNlKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7IFxyXG5cdH0pO1xyXG5cdGNvbnRleHQuc2F2ZSgpO1xyXG5cdFxyXG5cdC8v55S75Yi75bqm57q/XHJcblx0bGV0IHRvdGFsQW5nbGU9Z2F1Z2VPcHRpb24uc3RhcnRBbmdsZS1nYXVnZU9wdGlvbi5lbmRBbmdsZSsxO1xyXG5cdGdhdWdlT3B0aW9uLnNwbGl0TGluZS5maXhSYWRpdXM9Z2F1Z2VPcHRpb24uc3BsaXRMaW5lLmZpeFJhZGl1cz8gZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLmZpeFJhZGl1cyA6IDA7XHJcblx0Z2F1Z2VPcHRpb24uc3BsaXRMaW5lLnNwbGl0TnVtYmVyPWdhdWdlT3B0aW9uLnNwbGl0TGluZS5zcGxpdE51bWJlcj8gZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLnNwbGl0TnVtYmVyIDogMTA7XHJcblx0Z2F1Z2VPcHRpb24uc3BsaXRMaW5lLndpZHRoPWdhdWdlT3B0aW9uLnNwbGl0TGluZS53aWR0aD8gZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLndpZHRoIDogMTUqb3B0cy5waXhlbFJhdGlvIDtcclxuXHRnYXVnZU9wdGlvbi5zcGxpdExpbmUuY29sb3I9Z2F1Z2VPcHRpb24uc3BsaXRMaW5lLmNvbG9yPyBnYXVnZU9wdGlvbi5zcGxpdExpbmUuY29sb3IgOiAnI0ZGRkZGRic7XHJcblx0Z2F1Z2VPcHRpb24uc3BsaXRMaW5lLmNoaWxkTnVtYmVyPWdhdWdlT3B0aW9uLnNwbGl0TGluZS5jaGlsZE51bWJlcj8gZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLmNoaWxkTnVtYmVyIDogNTtcclxuXHRnYXVnZU9wdGlvbi5zcGxpdExpbmUuY2hpbGRXaWR0aD1nYXVnZU9wdGlvbi5zcGxpdExpbmUuY2hpbGRXaWR0aD8gZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLmNoaWxkV2lkdGggOiA1Km9wdHMucGl4ZWxSYXRpbztcclxuXHRcclxuXHRsZXQgc3BsaXRBbmdsZT10b3RhbEFuZ2xlL2dhdWdlT3B0aW9uLnNwbGl0TGluZS5zcGxpdE51bWJlcjtcclxuXHRsZXQgY2hpbGRBbmdsZT10b3RhbEFuZ2xlL2dhdWdlT3B0aW9uLnNwbGl0TGluZS5zcGxpdE51bWJlci9nYXVnZU9wdGlvbi5zcGxpdExpbmUuY2hpbGROdW1iZXI7XHJcblx0bGV0IHN0YXJ0WD0tcmFkaXVzLWdhdWdlT3B0aW9uLndpZHRoKjAuNS1nYXVnZU9wdGlvbi5zcGxpdExpbmUuZml4UmFkaXVzO1xyXG5cdGxldCBlbmRYPS1yYWRpdXMtZ2F1Z2VPcHRpb24ud2lkdGgqMC41LWdhdWdlT3B0aW9uLnNwbGl0TGluZS5maXhSYWRpdXMrZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLndpZHRoO1xyXG5cdGxldCBjaGlsZGVuZFg9LXJhZGl1cy1nYXVnZU9wdGlvbi53aWR0aCowLjUtZ2F1Z2VPcHRpb24uc3BsaXRMaW5lLmZpeFJhZGl1cytnYXVnZU9wdGlvbi5zcGxpdExpbmUuY2hpbGRXaWR0aDtcclxuXHRcclxuXHRjb250ZXh0LnRyYW5zbGF0ZShjZW50ZXJQb3NpdGlvbi54LCBjZW50ZXJQb3NpdGlvbi55KTtcclxuXHRjb250ZXh0LnJvdGF0ZSgoZ2F1Z2VPcHRpb24uc3RhcnRBbmdsZS0xKSogTWF0aC5QSSk7XHJcblx0XHJcblx0Zm9yKGxldCBpPTAgOyBpPCBnYXVnZU9wdGlvbi5zcGxpdExpbmUuc3BsaXROdW1iZXIrMTsgaSsrKXtcclxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldFN0cm9rZVN0eWxlKGdhdWdlT3B0aW9uLnNwbGl0TGluZS5jb2xvcik7XHJcblx0XHRjb250ZXh0LnNldExpbmVXaWR0aCgyKm9wdHMucGl4ZWxSYXRpbyk7XHJcblx0XHRjb250ZXh0Lm1vdmVUbyhzdGFydFgsIDApO1xyXG5cdFx0Y29udGV4dC5saW5lVG8oZW5kWCwgMCk7XHJcblx0XHRjb250ZXh0LnN0cm9rZSgpO1xyXG5cdFx0Y29udGV4dC5yb3RhdGUoc3BsaXRBbmdsZSogTWF0aC5QSSk7XHJcblx0fVxyXG5cdGNvbnRleHQucmVzdG9yZSgpO1xyXG5cdFxyXG5cdGNvbnRleHQuc2F2ZSgpO1xyXG5cdGNvbnRleHQudHJhbnNsYXRlKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnkpO1xyXG5cdGNvbnRleHQucm90YXRlKChnYXVnZU9wdGlvbi5zdGFydEFuZ2xlLTEpKiBNYXRoLlBJKTtcclxuXHRcclxuXHRmb3IobGV0IGk9MCA7IGk8IGdhdWdlT3B0aW9uLnNwbGl0TGluZS5zcGxpdE51bWJlcipnYXVnZU9wdGlvbi5zcGxpdExpbmUuY2hpbGROdW1iZXIrMTsgaSsrKXtcclxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldFN0cm9rZVN0eWxlKGdhdWdlT3B0aW9uLnNwbGl0TGluZS5jb2xvcik7XHJcblx0XHRjb250ZXh0LnNldExpbmVXaWR0aCgxKm9wdHMucGl4ZWxSYXRpbyk7XHJcblx0XHRjb250ZXh0Lm1vdmVUbyhzdGFydFgsIDApO1xyXG5cdFx0Y29udGV4dC5saW5lVG8oY2hpbGRlbmRYLCAwKTtcclxuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XHJcblx0XHRjb250ZXh0LnJvdGF0ZShjaGlsZEFuZ2xlKiBNYXRoLlBJKTtcclxuXHR9XHJcblx0Y29udGV4dC5yZXN0b3JlKCk7XHJcblx0XHJcblx0Ly/nlLvmjIfpkohcclxuXHRnYXVnZU9wdGlvbi5wb2ludGVyLndpZHRoPWdhdWdlT3B0aW9uLnBvaW50ZXIud2lkdGg/IGdhdWdlT3B0aW9uLnBvaW50ZXIud2lkdGggOiAxNSpvcHRzLnBpeGVsUmF0aW87XHJcblx0aWYgKGdhdWdlT3B0aW9uLnBvaW50ZXIuY29sb3IgPT0gdW5kZWZpbmVkIHx8IGdhdWdlT3B0aW9uLnBvaW50ZXIuY29sb3IgPT0gJ2F1dG8nKSB7XHJcblx0ICAgIGdhdWdlT3B0aW9uLnBvaW50ZXIuY29sb3IgPT0gJ2F1dG8nO1xyXG5cdH1lbHNle1xyXG5cdFx0Z2F1Z2VPcHRpb24ucG9pbnRlci5jb2xvciA9PSBnYXVnZU9wdGlvbi5wb2ludGVyLmNvbG9yO1xyXG5cdH1cclxuXHRzZXJpZXMgPSBnZXRHYXVnZURhdGFQb2ludHMoc2VyaWVzLGNhdGVnb3JpZXMsZ2F1Z2VPcHRpb24sIHByb2Nlc3MpO1xyXG5cdFxyXG5cdHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlYWNoU2VyaWVzKSB7XHJcblx0XHRjb250ZXh0LnNhdmUoKTtcclxuXHRcdGNvbnRleHQudHJhbnNsYXRlKGNlbnRlclBvc2l0aW9uLngsIGNlbnRlclBvc2l0aW9uLnkpO1xyXG5cdFx0Y29udGV4dC5yb3RhdGUoKGVhY2hTZXJpZXMuX3Byb3BvcnRpb25fLTEpKiBNYXRoLlBJKTtcclxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblx0XHRjb250ZXh0LnNldEZpbGxTdHlsZShlYWNoU2VyaWVzLmNvbG9yKTtcclxuXHRcdGNvbnRleHQubW92ZVRvKGdhdWdlT3B0aW9uLnBvaW50ZXIud2lkdGgsIDApO1xyXG5cdFx0Y29udGV4dC5saW5lVG8oMCwtZ2F1Z2VPcHRpb24ucG9pbnRlci53aWR0aC8yKTtcclxuXHRcdGNvbnRleHQubGluZVRvKC1pbm5lclJhZGl1cywwKTtcclxuXHRcdGNvbnRleHQubGluZVRvKDAsZ2F1Z2VPcHRpb24ucG9pbnRlci53aWR0aC8yKTtcclxuXHRcdGNvbnRleHQubGluZVRvKGdhdWdlT3B0aW9uLnBvaW50ZXIud2lkdGgsMCk7XHJcblx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG5cdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpOyBcclxuXHRcdGNvbnRleHQuc2V0RmlsbFN0eWxlKCcjRkZGRkZGJyk7XHJcblx0XHRjb250ZXh0LmFyYygwLCAwLCBnYXVnZU9wdGlvbi5wb2ludGVyLndpZHRoLzYsIDAsMiogTWF0aC5QSSwgZmFsc2UpO1xyXG5cdFx0Y29udGV4dC5maWxsKCk7XHJcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcclxuXHR9KTtcclxuXHRcclxuXHRpZiAob3B0cy5kYXRhTGFiZWwgIT09IGZhbHNlKSB7XHJcblx0XHRkcmF3R2F1Z2VMYWJlbChnYXVnZU9wdGlvbiwgcmFkaXVzLCBjZW50ZXJQb3NpdGlvbiwgb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuXHR9XHJcblx0XHJcblx0ZHJhd1JpbmdUaXRsZShvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG5cdFxyXG5cdGlmIChwcm9jZXNzID09PSAxICYmIG9wdHMudHlwZSA9PT0gJ2dhdWdlJykge1xyXG5cdFx0Z2F1Z2VPcHRpb24ub2xkQW5nbGU9c2VyaWVzWzBdLl9wcm9wb3J0aW9uXztcclxuXHRcdGdhdWdlT3B0aW9uLm9sZERhdGE9c2VyaWVzWzBdLmRhdGE7XHJcblx0fVxyXG5cdHJldHVybiB7XHJcblx0ICAgIGNlbnRlcjogY2VudGVyUG9zaXRpb24sXHJcblx0ICAgIHJhZGl1czogcmFkaXVzLFxyXG5cdFx0aW5uZXJSYWRpdXM6aW5uZXJSYWRpdXMsXHJcblx0ICAgIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMsXHJcblx0XHR0b3RhbEFuZ2xlOnRvdGFsQW5nbGVcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3UmFkYXJEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcHJvY2VzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMTtcclxuXHJcbiAgICB2YXIgcmFkYXJPcHRpb24gPSBvcHRzLmV4dHJhLnJhZGFyIHx8IHt9O1xyXG4gICAgdmFyIGNvb3JkaW5hdGVBbmdsZSA9IGdldFJhZGFyQ29vcmRpbmF0ZVNlcmllcyhvcHRzLmNhdGVnb3JpZXMubGVuZ3RoKTtcclxuICAgIHZhciBjZW50ZXJQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiBvcHRzLndpZHRoIC8gMixcclxuICAgICAgICB5OiAob3B0cy5oZWlnaHQgLSBjb25maWcubGVnZW5kSGVpZ2h0KSAvIDJcclxuICAgIH07XHJcblxyXG4gICAgdmFyIHJhZGl1cyA9IE1hdGgubWluKGNlbnRlclBvc2l0aW9uLnggLSAoZ2V0TWF4VGV4dExpc3RMZW5ndGgob3B0cy5jYXRlZ29yaWVzKSArIGNvbmZpZy5yYWRhckxhYmVsVGV4dE1hcmdpbiksIGNlbnRlclBvc2l0aW9uLnkgLSBjb25maWcucmFkYXJMYWJlbFRleHRNYXJnaW4pO1xyXG5cclxuICAgIHJhZGl1cyAtPSBjb25maWcucGFkZGluZztcclxuXHJcbiAgICAvLyBkcmF3IGdyaWRcclxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICBjb250ZXh0LnNldExpbmVXaWR0aCgxKm9wdHMucGl4ZWxSYXRpbyk7XHJcbiAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHJhZGFyT3B0aW9uLmdyaWRDb2xvciB8fCBcIiNjY2NjY2NcIik7XHJcbiAgICBjb29yZGluYXRlQW5nbGUuZm9yRWFjaChmdW5jdGlvbiAoYW5nbGUpIHtcclxuICAgICAgICB2YXIgcG9zID0gY29udmVydENvb3JkaW5hdGVPcmlnaW4ocmFkaXVzICogTWF0aC5jb3MoYW5nbGUpLCByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSksIGNlbnRlclBvc2l0aW9uKTtcclxuICAgICAgICBjb250ZXh0Lm1vdmVUbyhjZW50ZXJQb3NpdGlvbi54LCBjZW50ZXJQb3NpdGlvbi55KTtcclxuICAgICAgICBjb250ZXh0LmxpbmVUbyhwb3MueCwgcG9zLnkpO1xyXG4gICAgfSk7XHJcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcclxuXHJcbiAgICAvLyBkcmF3IHNwbGl0IGxpbmUgZ3JpZFxyXG5cclxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcclxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB7fTtcclxuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0TGluZVdpZHRoKDEqb3B0cy5waXhlbFJhdGlvKTtcclxuICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHJhZGFyT3B0aW9uLmdyaWRDb2xvciB8fCBcIiNjY2NjY2NcIik7XHJcbiAgICAgICAgY29vcmRpbmF0ZUFuZ2xlLmZvckVhY2goZnVuY3Rpb24gKGFuZ2xlLCBpbmRleCkge1xyXG4gICAgICAgICAgICB2YXIgcG9zID0gY29udmVydENvb3JkaW5hdGVPcmlnaW4ocmFkaXVzIC8gY29uZmlnLnJhZGFyR3JpZENvdW50ICogaSAqIE1hdGguY29zKGFuZ2xlKSwgcmFkaXVzIC8gY29uZmlnLnJhZGFyR3JpZENvdW50ICogaSAqIE1hdGguc2luKGFuZ2xlKSwgY2VudGVyUG9zaXRpb24pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0UG9zID0gcG9zO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9zLngsIHBvcy55KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvcy54LCBwb3MueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb250ZXh0LmxpbmVUbyhzdGFydFBvcy54LCBzdGFydFBvcy55KTtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IGNvbmZpZy5yYWRhckdyaWRDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgX2xvb3AoaSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJhZGFyRGF0YVBvaW50cyA9IGdldFJhZGFyRGF0YVBvaW50cyhjb29yZGluYXRlQW5nbGUsIGNlbnRlclBvc2l0aW9uLCByYWRpdXMsIHNlcmllcywgb3B0cywgcHJvY2Vzcyk7XHJcblx0XHJcbiAgICByYWRhckRhdGFQb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoZWFjaFNlcmllcywgc2VyaWVzSW5kZXgpIHtcclxuICAgICAgICAvLyDnu5jliLbljLrln5/mlbDmja5cclxuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKGVhY2hTZXJpZXMuY29sb3IpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC4zKTtcclxuICAgICAgICBlYWNoU2VyaWVzLmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhpdGVtLnBvc2l0aW9uLngsIGl0ZW0ucG9zaXRpb24ueSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhpdGVtLnBvc2l0aW9uLngsIGl0ZW0ucG9zaXRpb24ueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xyXG4gICAgICAgIGNvbnRleHQuc2V0R2xvYmFsQWxwaGEoMSk7XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmRhdGFQb2ludFNoYXBlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBjb25maWcuZGF0YVBvaW50U2hhcGVbc2VyaWVzSW5kZXggJSBjb25maWcuZGF0YVBvaW50U2hhcGUubGVuZ3RoXTtcclxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IGVhY2hTZXJpZXMuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnBvc2l0aW9uO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZHJhd1BvaW50U2hhcGUocG9pbnRzLCBlYWNoU2VyaWVzLmNvbG9yLCBzaGFwZSwgY29udGV4dCxvcHRzKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIGRyYXcgbGFiZWwgdGV4dFxyXG4gICAgZHJhd1JhZGFyTGFiZWwoY29vcmRpbmF0ZUFuZ2xlLCByYWRpdXMsIGNlbnRlclBvc2l0aW9uLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2VudGVyOiBjZW50ZXJQb3NpdGlvbixcclxuICAgICAgICByYWRpdXM6IHJhZGl1cyxcclxuICAgICAgICBhbmdsZUxpc3Q6IGNvb3JkaW5hdGVBbmdsZVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd0NhbnZhcyhvcHRzLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmRyYXcoKTtcclxufVxyXG5cclxudmFyIFRpbWluZyA9IHtcclxuICAgIGVhc2VJbjogZnVuY3Rpb24gZWFzZUluKHBvcykge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhwb3MsIDMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlYXNlT3V0OiBmdW5jdGlvbiBlYXNlT3V0KHBvcykge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhwb3MgLSAxLCAzKSArIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIGVhc2VJbk91dDogZnVuY3Rpb24gZWFzZUluT3V0KHBvcykge1xyXG4gICAgICAgIGlmICgocG9zIC89IDAuNSkgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBNYXRoLnBvdyhwb3MsIDMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiAoTWF0aC5wb3cocG9zIC0gMiwgMykgKyAyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxpbmVhcjogZnVuY3Rpb24gbGluZWFyKHBvcykge1xyXG4gICAgICAgIHJldHVybiBwb3M7XHJcbiAgICB9XHJcbn07XHJcblxyXG5mdW5jdGlvbiBBbmltYXRpb24ob3B0cykge1xyXG4gICAgdGhpcy5pc1N0b3AgPSBmYWxzZTtcclxuICAgIG9wdHMuZHVyYXRpb24gPSB0eXBlb2Ygb3B0cy5kdXJhdGlvbiA9PT0gJ3VuZGVmaW5lZCcgPyAxMDAwIDogb3B0cy5kdXJhdGlvbjtcclxuICAgIG9wdHMudGltaW5nID0gb3B0cy50aW1pbmcgfHwgJ2xpbmVhcic7XHJcblxyXG4gICAgdmFyIGRlbGF5ID0gMTc7XHJcblxyXG4gICAgdmFyIGNyZWF0ZUFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gY3JlYXRlQW5pbWF0aW9uRnJhbWUoKSB7XHJcblx0XHRcclxuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuXHRcdFx0cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ICE9PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdGVwLCBkZWxheSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVTdGFtcCA9ICtuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAodGltZVN0YW1wKTtcclxuICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cdFx0XHRcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdGVwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwKG51bGwpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgYW5pbWF0aW9uRnJhbWUgPSBjcmVhdGVBbmltYXRpb25GcmFtZSgpO1xyXG4gICAgdmFyIHN0YXJ0VGltZVN0YW1wID0gbnVsbDtcclxuXHRcclxuICAgIHZhciBfc3RlcCA9IGZ1bmN0aW9uIHN0ZXAodGltZXN0YW1wKSB7XHJcblx0XHRcclxuICAgICAgICBpZiAodGltZXN0YW1wID09PSBudWxsIHx8IHRoaXMuaXNTdG9wID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIG9wdHMub25Qcm9jZXNzICYmIG9wdHMub25Qcm9jZXNzKDEpO1xyXG4gICAgICAgICAgICBvcHRzLm9uQW5pbWF0aW9uRmluaXNoICYmIG9wdHMub25BbmltYXRpb25GaW5pc2goKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhcnRUaW1lU3RhbXAgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lU3RhbXAgPSB0aW1lc3RhbXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aW1lc3RhbXAgLSBzdGFydFRpbWVTdGFtcCA8IG9wdHMuZHVyYXRpb24pIHtcclxuICAgICAgICAgICAgdmFyIHByb2Nlc3MgPSAodGltZXN0YW1wIC0gc3RhcnRUaW1lU3RhbXApIC8gb3B0cy5kdXJhdGlvbjtcclxuICAgICAgICAgICAgdmFyIHRpbWluZ0Z1bmN0aW9uID0gVGltaW5nW29wdHMudGltaW5nXTtcclxuICAgICAgICAgICAgcHJvY2VzcyA9IHRpbWluZ0Z1bmN0aW9uKHByb2Nlc3MpO1xyXG5cdFx0XHRcclxuICAgICAgICAgICAgb3B0cy5vblByb2Nlc3MgJiYgb3B0cy5vblByb2Nlc3MocHJvY2Vzcyk7XHJcbiAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lKF9zdGVwLCBkZWxheSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb3B0cy5vblByb2Nlc3MgJiYgb3B0cy5vblByb2Nlc3MoMSk7XHJcbiAgICAgICAgICAgIG9wdHMub25BbmltYXRpb25GaW5pc2ggJiYgb3B0cy5vbkFuaW1hdGlvbkZpbmlzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBfc3RlcCA9IF9zdGVwLmJpbmQodGhpcyk7XHJcbiAgICBhbmltYXRpb25GcmFtZShfc3RlcCwgZGVsYXkpO1xyXG59XHJcblxyXG4vLyBzdG9wIGFuaW1hdGlvbiBpbW1lZGlhdGVseVxyXG4vLyBhbmQgdGlnZ2VyIG9uQW5pbWF0aW9uRmluaXNoXHJcbkFuaW1hdGlvbi5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaXNTdG9wID0gdHJ1ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGRyYXdDaGFydHModHlwZSwgb3B0cywgY29uZmlnLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgIHZhciBzZXJpZXMgPSBvcHRzLnNlcmllcztcclxuICAgIHZhciBjYXRlZ29yaWVzID0gb3B0cy5jYXRlZ29yaWVzO1xyXG4gICAgc2VyaWVzID0gZmlsbFNlcmllc0NvbG9yKHNlcmllcywgY29uZmlnKTtcclxuXHRzZXJpZXMgPSBmaWxsU2VyaWVzVHlwZShzZXJpZXMsIG9wdHMpO1xyXG5cdFxyXG4gICAgdmFyIF9jYWxMZWdlbmREYXRhID0gY2FsTGVnZW5kRGF0YShzZXJpZXMsIG9wdHMsIGNvbmZpZyksXHJcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0gX2NhbExlZ2VuZERhdGEubGVnZW5kSGVpZ2h0O1xyXG5cclxuICAgIGNvbmZpZy5sZWdlbmRIZWlnaHQgPSBsZWdlbmRIZWlnaHQ7XHJcblxyXG4gICAgdmFyIF9jYWxZQXhpc0RhdGEgPSBjYWxZQXhpc0RhdGEoc2VyaWVzLCBvcHRzLCBjb25maWcpLFxyXG4gICAgICAgIHlBeGlzV2lkdGggPSBfY2FsWUF4aXNEYXRhLnlBeGlzV2lkdGg7XHJcblxyXG4gICAgY29uZmlnLnlBeGlzV2lkdGggPSB5QXhpc1dpZHRoO1xyXG4gICAgaWYgKGNhdGVnb3JpZXMgJiYgY2F0ZWdvcmllcy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgX2NhbENhdGVnb3JpZXNEYXRhID0gY2FsQ2F0ZWdvcmllc0RhdGEoY2F0ZWdvcmllcywgb3B0cywgY29uZmlnKSxcclxuICAgICAgICAgICAgeEF4aXNIZWlnaHQgPSBfY2FsQ2F0ZWdvcmllc0RhdGEueEF4aXNIZWlnaHQsXHJcbiAgICAgICAgICAgIGFuZ2xlID0gX2NhbENhdGVnb3JpZXNEYXRhLmFuZ2xlO1xyXG5cclxuICAgICAgICBjb25maWcueEF4aXNIZWlnaHQgPSB4QXhpc0hlaWdodDtcclxuICAgICAgICBjb25maWcuX3hBeGlzVGV4dEFuZ2xlXyA9IGFuZ2xlO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09ICdwaWUnIHx8IHR5cGUgPT09ICdyaW5nJykge1xyXG4gICAgICAgIGNvbmZpZy5fcGllVGV4dE1heExlbmd0aF8gPSBvcHRzLmRhdGFMYWJlbCA9PT0gZmFsc2UgPyAwIDogZ2V0UGllVGV4dE1heExlbmd0aChzZXJpZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkdXJhdGlvbiA9IG9wdHMuYW5pbWF0aW9uID8gMTAwMCA6IDA7XHJcbiAgICB0aGlzLmFuaW1hdGlvbkluc3RhbmNlICYmIHRoaXMuYW5pbWF0aW9uSW5zdGFuY2Uuc3RvcCgpO1xyXG5cdFxyXG5cdC8v5YWI5riF56m655S75biDLOS4jeeEtueZvuW6puWSjOaUr+S7mOWunVRvb2xUaXDmnInph43lvbFcclxuXHRjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCk7XHJcblx0XHJcblx0XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlICdsaW5lJzpcclxuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25JbnN0YW5jZSA9IG5ldyBBbmltYXRpb24oe1xyXG4gICAgICAgICAgICAgICAgdGltaW5nOiAnZWFzZUluJyxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIG9uUHJvY2VzczogZnVuY3Rpb24gb25Qcm9jZXNzKHByb2Nlc3MpIHtcclxuXHRcdFx0XHRcdGlmKG9wdHMucm90YXRlKXtcclxuXHRcdFx0XHRcdFx0Y29udGV4dFJvdGF0ZShjb250ZXh0LG9wdHMpO1xyXG5cdFx0XHRcdFx0fVxyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdZQXhpc0dyaWQoY2F0ZWdvcmllcyxvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdYQXhpcyhjYXRlZ29yaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfZHJhd0xpbmVEYXRhUG9pbnRzID0gZHJhd0xpbmVEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0LCBwcm9jZXNzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeEF4aXNQb2ludHMgPSBfZHJhd0xpbmVEYXRhUG9pbnRzLnhBeGlzUG9pbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxQb2ludHMgPSBfZHJhd0xpbmVEYXRhUG9pbnRzLmNhbFBvaW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFNwYWNpbmcgPSBfZHJhd0xpbmVEYXRhUG9pbnRzLmVhY2hTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jaGFydERhdGEueEF4aXNQb2ludHMgPSB4QXhpc1BvaW50cztcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jaGFydERhdGEuY2FsUG9pbnRzID0gY2FsUG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNoYXJ0RGF0YS5lYWNoU3BhY2luZyA9IGVhY2hTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdMZWdlbmQob3B0cy5zZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd1lBeGlzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuXHRcdFx0XHRcdGRyYXdUb29sVGlwQnJpZGdlKG9wdHMsIGNvbmZpZywgY29udGV4dCwgcHJvY2VzcywgZWFjaFNwYWNpbmcsIHhBeGlzUG9pbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICBkcmF3Q2FudmFzKG9wdHMsIGNvbnRleHQpO1xyXG5cdFx0XHRcdFx0XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25BbmltYXRpb25GaW5pc2g6IGZ1bmN0aW9uIG9uQW5pbWF0aW9uRmluaXNoKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmV2ZW50LnRyaWdnZXIoJ3JlbmRlckNvbXBsZXRlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cdFx0XHRcclxuICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRjYXNlICdtaXgnOlxyXG5cdFx0ICAgIHRoaXMuYW5pbWF0aW9uSW5zdGFuY2UgPSBuZXcgQW5pbWF0aW9uKHtcclxuXHRcdCAgICAgICAgdGltaW5nOiAnZWFzZUluJyxcclxuXHRcdCAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxyXG5cdFx0ICAgICAgICBvblByb2Nlc3M6IGZ1bmN0aW9uIG9uUHJvY2Vzcyhwcm9jZXNzKSB7XHJcblx0XHRcdFx0XHRpZihvcHRzLnJvdGF0ZSl7XHJcblx0XHRcdFx0XHRcdGNvbnRleHRSb3RhdGUoY29udGV4dCxvcHRzKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdCAgICAgICAgICAgIGRyYXdZQXhpc0dyaWQoY2F0ZWdvcmllcyxvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG5cdFx0ICAgICAgICAgICAgZHJhd1hBeGlzKGNhdGVnb3JpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHQgICAgICAgICAgICB2YXIgX2RyYXdNaXhEYXRhUG9pbnRzID0gZHJhd01peERhdGFQb2ludHMoc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MpLFxyXG5cdFx0ICAgICAgICAgICAgICAgIHhBeGlzUG9pbnRzID0gX2RyYXdNaXhEYXRhUG9pbnRzLnhBeGlzUG9pbnRzLFxyXG5cdFx0ICAgICAgICAgICAgICAgIGNhbFBvaW50cyA9IF9kcmF3TWl4RGF0YVBvaW50cy5jYWxQb2ludHMsXHJcblx0XHQgICAgICAgICAgICAgICAgZWFjaFNwYWNpbmcgPSBfZHJhd01peERhdGFQb2ludHMuZWFjaFNwYWNpbmc7XHJcblx0XHRcclxuXHRcdCAgICAgICAgICAgIF90aGlzLmNoYXJ0RGF0YS54QXhpc1BvaW50cyA9IHhBeGlzUG9pbnRzO1xyXG5cdFx0ICAgICAgICAgICAgX3RoaXMuY2hhcnREYXRhLmNhbFBvaW50cyA9IGNhbFBvaW50cztcclxuXHRcdCAgICAgICAgICAgIF90aGlzLmNoYXJ0RGF0YS5lYWNoU3BhY2luZyA9IGVhY2hTcGFjaW5nO1xyXG5cdFx0ICAgICAgICAgICAgZHJhd0xlZ2VuZChvcHRzLnNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuXHRcdCAgICAgICAgICAgIGRyYXdZQXhpcyhzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0XHRkcmF3VG9vbFRpcEJyaWRnZShvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MsIGVhY2hTcGFjaW5nLCB4QXhpc1BvaW50cyk7XHJcblx0XHQgICAgICAgICAgICBkcmF3Q2FudmFzKG9wdHMsIGNvbnRleHQpO1xyXG5cdFx0ICAgICAgICB9LFxyXG5cdFx0ICAgICAgICBvbkFuaW1hdGlvbkZpbmlzaDogZnVuY3Rpb24gb25BbmltYXRpb25GaW5pc2goKSB7XHJcblx0XHQgICAgICAgICAgICBfdGhpcy5ldmVudC50cmlnZ2VyKCdyZW5kZXJDb21wbGV0ZScpO1xyXG5cdFx0ICAgICAgICB9XHJcblx0XHQgICAgfSk7XHJcblx0XHRcdFxyXG5cdFx0ICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2NvbHVtbic6XHJcblx0XHQgICAgdGhpcy5hbmltYXRpb25JbnN0YW5jZSA9IG5ldyBBbmltYXRpb24oe1xyXG4gICAgICAgICAgICAgICAgdGltaW5nOiAnZWFzZUluJyxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIG9uUHJvY2VzczogZnVuY3Rpb24gb25Qcm9jZXNzKHByb2Nlc3MpIHtcclxuXHRcdFx0XHRcdGlmKG9wdHMucm90YXRlKXtcclxuXHRcdFx0XHRcdFx0Y29udGV4dFJvdGF0ZShjb250ZXh0LG9wdHMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZHJhd1lBeGlzR3JpZChjYXRlZ29yaWVzLG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd1hBeGlzKGNhdGVnb3JpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9kcmF3Q29sdW1uRGF0YVBvaW50cyA9IGRyYXdDb2x1bW5EYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0LCBwcm9jZXNzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeEF4aXNQb2ludHMgPSBfZHJhd0NvbHVtbkRhdGFQb2ludHMueEF4aXNQb2ludHMsXHJcblx0XHRcdFx0XHRcdGNhbFBvaW50cyA9IF9kcmF3Q29sdW1uRGF0YVBvaW50cy5jYWxQb2ludHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hTcGFjaW5nID0gX2RyYXdDb2x1bW5EYXRhUG9pbnRzLmVhY2hTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNoYXJ0RGF0YS54QXhpc1BvaW50cyA9IHhBeGlzUG9pbnRzO1xyXG5cdFx0XHRcdFx0X3RoaXMuY2hhcnREYXRhLmNhbFBvaW50cyA9IGNhbFBvaW50cztcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jaGFydERhdGEuZWFjaFNwYWNpbmcgPSBlYWNoU3BhY2luZztcclxuICAgICAgICAgICAgICAgICAgICBkcmF3TGVnZW5kKG9wdHMuc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdZQXhpcyhzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0XHRkcmF3VG9vbFRpcEJyaWRnZShvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MsIGVhY2hTcGFjaW5nLCB4QXhpc1BvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd0NhbnZhcyhvcHRzLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkZpbmlzaDogZnVuY3Rpb24gb25BbmltYXRpb25GaW5pc2goKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZXZlbnQudHJpZ2dlcigncmVuZGVyQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2FyZWEnOlxyXG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkluc3RhbmNlID0gbmV3IEFuaW1hdGlvbih7XHJcbiAgICAgICAgICAgICAgICB0aW1pbmc6ICdlYXNlSW4nLFxyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgb25Qcm9jZXNzOiBmdW5jdGlvbiBvblByb2Nlc3MocHJvY2Vzcykge1xyXG5cdFx0XHRcdFx0aWYob3B0cy5yb3RhdGUpe1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0Um90YXRlKGNvbnRleHQsb3B0cyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRkcmF3WUF4aXNHcmlkKGNhdGVnb3JpZXMsb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBkcmF3WEF4aXMoY2F0ZWdvcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2RyYXdBcmVhRGF0YVBvaW50cyA9IGRyYXdBcmVhRGF0YVBvaW50cyhzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCwgcHJvY2VzcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhBeGlzUG9pbnRzID0gX2RyYXdBcmVhRGF0YVBvaW50cy54QXhpc1BvaW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsUG9pbnRzID0gX2RyYXdBcmVhRGF0YVBvaW50cy5jYWxQb2ludHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hTcGFjaW5nID0gX2RyYXdBcmVhRGF0YVBvaW50cy5lYWNoU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2hhcnREYXRhLnhBeGlzUG9pbnRzID0geEF4aXNQb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2hhcnREYXRhLmNhbFBvaW50cyA9IGNhbFBvaW50cztcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jaGFydERhdGEuZWFjaFNwYWNpbmcgPSBlYWNoU3BhY2luZztcclxuICAgICAgICAgICAgICAgICAgICBkcmF3TGVnZW5kKG9wdHMuc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdZQXhpcyhzZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0XHRkcmF3VG9vbFRpcEJyaWRnZShvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MsIGVhY2hTcGFjaW5nLCB4QXhpc1BvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd0NhbnZhcyhvcHRzLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkZpbmlzaDogZnVuY3Rpb24gb25BbmltYXRpb25GaW5pc2goKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZXZlbnQudHJpZ2dlcigncmVuZGVyQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JpbmcnOlxyXG4gICAgICAgIGNhc2UgJ3BpZSc6XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uSW5zdGFuY2UgPSBuZXcgQW5pbWF0aW9uKHtcclxuICAgICAgICAgICAgICAgIHRpbWluZzogJ2Vhc2VJbk91dCcsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBvblByb2Nlc3M6IGZ1bmN0aW9uIG9uUHJvY2Vzcyhwcm9jZXNzKSB7XHJcblx0XHRcdFx0XHRpZihvcHRzLnJvdGF0ZSl7XHJcblx0XHRcdFx0XHRcdGNvbnRleHRSb3RhdGUoY29udGV4dCxvcHRzKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF90aGlzLmNoYXJ0RGF0YS5waWVEYXRhID0gZHJhd1BpZURhdGFQb2ludHMoc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdMZWdlbmQob3B0cy5zZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0XHRkcmF3VG9vbFRpcEJyaWRnZShvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdDYW52YXMob3B0cywgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25BbmltYXRpb25GaW5pc2g6IGZ1bmN0aW9uIG9uQW5pbWF0aW9uRmluaXNoKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmV2ZW50LnRyaWdnZXIoJ3JlbmRlckNvbXBsZXRlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdyYWRhcic6XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uSW5zdGFuY2UgPSBuZXcgQW5pbWF0aW9uKHtcclxuICAgICAgICAgICAgICAgIHRpbWluZzogJ2Vhc2VJbk91dCcsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBvblByb2Nlc3M6IGZ1bmN0aW9uIG9uUHJvY2Vzcyhwcm9jZXNzKSB7XHJcblx0XHRcdFx0XHRpZihvcHRzLnJvdGF0ZSl7XHJcblx0XHRcdFx0XHRcdGNvbnRleHRSb3RhdGUoY29udGV4dCxvcHRzKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF90aGlzLmNoYXJ0RGF0YS5yYWRhckRhdGEgPSBkcmF3UmFkYXJEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0LCBwcm9jZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBkcmF3TGVnZW5kKG9wdHMuc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdDYW52YXMob3B0cywgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25BbmltYXRpb25GaW5pc2g6IGZ1bmN0aW9uIG9uQW5pbWF0aW9uRmluaXNoKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmV2ZW50LnRyaWdnZXIoJ3JlbmRlckNvbXBsZXRlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHRcdGNhc2UgJ2FyY2Jhcic6XHJcblx0XHRcdHRoaXMuYW5pbWF0aW9uSW5zdGFuY2UgPSBuZXcgQW5pbWF0aW9uKHtcclxuXHRcdFx0ICAgIHRpbWluZzogJ2Vhc2VJbk91dCcsXHJcblx0XHRcdCAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcblx0XHRcdCAgICBvblByb2Nlc3M6IGZ1bmN0aW9uIG9uUHJvY2Vzcyhwcm9jZXNzKSB7XHJcblx0XHRcdFx0XHRpZihvcHRzLnJvdGF0ZSl7XHJcblx0XHRcdFx0XHRcdGNvbnRleHRSb3RhdGUoY29udGV4dCxvcHRzKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF90aGlzLmNoYXJ0RGF0YS5hcmNiYXJEYXRhID0gZHJhd0FyY2JhckRhdGFQb2ludHMoc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQsIHByb2Nlc3MpO1xyXG5cdFx0XHQgICAgICAgIGRyYXdDYW52YXMob3B0cywgY29udGV4dCk7XHJcblx0XHRcdCAgICB9LFxyXG5cdFx0XHQgICAgb25BbmltYXRpb25GaW5pc2g6IGZ1bmN0aW9uIG9uQW5pbWF0aW9uRmluaXNoKCkge1xyXG5cdFx0XHQgICAgICAgIF90aGlzLmV2ZW50LnRyaWdnZXIoJ3JlbmRlckNvbXBsZXRlJyk7XHJcblx0XHRcdCAgICB9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgJ2dhdWdlJzpcclxuXHRcdFx0dGhpcy5hbmltYXRpb25JbnN0YW5jZSA9IG5ldyBBbmltYXRpb24oe1xyXG5cdFx0XHQgICAgdGltaW5nOiAnZWFzZUluT3V0JyxcclxuXHRcdFx0ICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuXHRcdFx0ICAgIG9uUHJvY2VzczogZnVuY3Rpb24gb25Qcm9jZXNzKHByb2Nlc3MpIHtcclxuXHRcdFx0XHRcdGlmKG9wdHMucm90YXRlKXtcclxuXHRcdFx0XHRcdFx0Y29udGV4dFJvdGF0ZShjb250ZXh0LG9wdHMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0X3RoaXMuY2hhcnREYXRhLmdhdWdlRGF0YSA9IGRyYXdHYXVnZURhdGFQb2ludHMoY2F0ZWdvcmllcywgc2VyaWVzLG9wdHMsIGNvbmZpZywgY29udGV4dCwgcHJvY2Vzcyk7XHJcblx0XHRcdCAgICAgICAgZHJhd0NhbnZhcyhvcHRzLCBjb250ZXh0KTtcclxuXHRcdFx0ICAgIH0sXHJcblx0XHRcdCAgICBvbkFuaW1hdGlvbkZpbmlzaDogZnVuY3Rpb24gb25BbmltYXRpb25GaW5pc2goKSB7XHJcblx0XHRcdCAgICAgICAgX3RoaXMuZXZlbnQudHJpZ2dlcigncmVuZGVyQ29tcGxldGUnKTtcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnY2FuZGxlJzpcclxuXHRcdCAgICB0aGlzLmFuaW1hdGlvbkluc3RhbmNlID0gbmV3IEFuaW1hdGlvbih7XHJcblx0XHQgICAgICAgIHRpbWluZzogJ2Vhc2VJbicsXHJcblx0XHQgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuXHRcdCAgICAgICAgb25Qcm9jZXNzOiBmdW5jdGlvbiBvblByb2Nlc3MocHJvY2Vzcykge1xyXG5cdFx0XHRcdFx0aWYob3B0cy5yb3RhdGUpe1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0Um90YXRlKGNvbnRleHQsb3B0cyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRkcmF3WUF4aXNHcmlkKGNhdGVnb3JpZXMsb3B0cywgY29uZmlnLCBjb250ZXh0KTtcclxuXHRcdFx0XHRcdGRyYXdYQXhpcyhjYXRlZ29yaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG5cdFx0XHRcdFx0dmFyIF9kcmF3Q2FuZGxlRGF0YVBvaW50cyA9IGRyYXdDYW5kbGVEYXRhUG9pbnRzKHNlcmllcywgb3B0cywgY29uZmlnLCBjb250ZXh0LCBwcm9jZXNzKSxcclxuXHRcdFx0XHRcdCAgICB4QXhpc1BvaW50cyA9IF9kcmF3Q2FuZGxlRGF0YVBvaW50cy54QXhpc1BvaW50cyxcclxuXHRcdFx0XHRcdCAgICBjYWxQb2ludHMgPSBfZHJhd0NhbmRsZURhdGFQb2ludHMuY2FsUG9pbnRzLFxyXG5cdFx0XHRcdFx0ICAgIGVhY2hTcGFjaW5nID0gX2RyYXdDYW5kbGVEYXRhUG9pbnRzLmVhY2hTcGFjaW5nO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRfdGhpcy5jaGFydERhdGEueEF4aXNQb2ludHMgPSB4QXhpc1BvaW50cztcclxuXHRcdFx0XHRcdF90aGlzLmNoYXJ0RGF0YS5jYWxQb2ludHMgPSBjYWxQb2ludHM7XHJcblx0XHRcdFx0XHRfdGhpcy5jaGFydERhdGEuZWFjaFNwYWNpbmcgPSBlYWNoU3BhY2luZztcclxuXHRcdFx0XHRcdGRyYXdMZWdlbmQob3B0cy5zZXJpZXMsIG9wdHMsIGNvbmZpZywgY29udGV4dCk7XHJcblx0XHRcdFx0XHRkcmF3WUF4aXMoc2VyaWVzLCBvcHRzLCBjb25maWcsIGNvbnRleHQpO1xyXG5cdFx0XHRcdFx0ZHJhd1Rvb2xUaXBCcmlkZ2Uob3B0cywgY29uZmlnLCBjb250ZXh0LCBwcm9jZXNzLCBlYWNoU3BhY2luZywgeEF4aXNQb2ludHMpO1xyXG5cdFx0XHRcdFx0ZHJhd0NhbnZhcyhvcHRzLCBjb250ZXh0KTtcclxuXHRcdCAgICAgICAgfSxcclxuXHRcdCAgICAgICAgb25BbmltYXRpb25GaW5pc2g6IGZ1bmN0aW9uIG9uQW5pbWF0aW9uRmluaXNoKCkge1xyXG5cdFx0ICAgICAgICAgICAgX3RoaXMuZXZlbnQudHJpZ2dlcigncmVuZGVyQ29tcGxldGUnKTtcclxuXHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIH0pO1xyXG5cdFx0ICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBzaW1wbGUgZXZlbnQgaW1wbGVtZW50XHJcblxyXG5mdW5jdGlvbiBFdmVudCgpIHtcclxuXHR0aGlzLmV2ZW50cyA9IHt9O1xyXG59XHJcblxyXG5FdmVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xyXG5cdHRoaXMuZXZlbnRzW3R5cGVdID0gdGhpcy5ldmVudHNbdHlwZV0gfHwgW107XHJcblx0dGhpcy5ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XHJcbn07XHJcblxyXG5FdmVudC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uICgpIHtcclxuXHRmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xyXG5cdFx0YXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcclxuXHR9XHJcblxyXG5cdHZhciB0eXBlID0gYXJnc1swXTtcclxuXHR2YXIgcGFyYW1zID0gYXJncy5zbGljZSgxKTtcclxuXHRpZiAoISF0aGlzLmV2ZW50c1t0eXBlXSkge1xyXG5cdFx0dGhpcy5ldmVudHNbdHlwZV0uZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsaXN0ZW5lci5hcHBseShudWxsLCBwYXJhbXMpO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG59O1xyXG5cclxudmFyIENoYXJ0cyA9IGZ1bmN0aW9uIENoYXJ0cyhvcHRzKSB7XHJcblx0b3B0cy5mb250U2l6ZT1vcHRzLmZvbnRTaXplID8gb3B0cy5mb250U2l6ZSpvcHRzLnBpeGVsUmF0aW8gOiAxMypvcHRzLnBpeGVsUmF0aW87XHJcbiAgICBvcHRzLnRpdGxlID0gb3B0cy50aXRsZSB8fCB7fTtcclxuICAgIG9wdHMuc3VidGl0bGUgPSBvcHRzLnN1YnRpdGxlIHx8IHt9O1xyXG4gICAgb3B0cy55QXhpcyA9IG9wdHMueUF4aXMgfHwge307XHJcblx0b3B0cy55QXhpcy5ncmlkVHlwZT1vcHRzLnlBeGlzLmdyaWRUeXBlPyBvcHRzLnlBeGlzLmdyaWRUeXBlIDogJ3NvbGlkJztcclxuXHRvcHRzLnlBeGlzLmRhc2hMZW5ndGg9b3B0cy55QXhpcy5kYXNoTGVuZ3RoPyBvcHRzLnlBeGlzLmRhc2hMZW5ndGggOiA0Km9wdHMucGl4ZWxSYXRpbztcclxuICAgIG9wdHMueEF4aXMgPSBvcHRzLnhBeGlzIHx8IHt9O1xyXG5cdG9wdHMueEF4aXMucm90YXRlTGFiZWwgPSBvcHRzLnhBeGlzLnJvdGF0ZUxhYmVsID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdG9wdHMueEF4aXMudHlwZT1vcHRzLnhBeGlzLnR5cGU/IG9wdHMueEF4aXMudHlwZSA6ICdjYWxpYnJhdGlvbic7XHJcblx0b3B0cy54QXhpcy5ncmlkVHlwZT1vcHRzLnhBeGlzLmdyaWRUeXBlPyBvcHRzLnhBeGlzLmdyaWRUeXBlIDogJ3NvbGlkJztcclxuXHRvcHRzLnhBeGlzLmRhc2hMZW5ndGg9b3B0cy54QXhpcy5kYXNoTGVuZ3RoPyBvcHRzLnhBeGlzLmRhc2hMZW5ndGggOiA0Km9wdHMucGl4ZWxSYXRpbztcclxuXHRvcHRzLnhBeGlzLml0ZW1Db3VudCA9IG9wdHMueEF4aXMuaXRlbUNvdW50ID8gb3B0cy54QXhpcy5pdGVtQ291bnQgOiA1O1xyXG5cdG9wdHMueEF4aXMuc2Nyb2xsQWxpZ24gPSBvcHRzLnhBeGlzLnNjcm9sbEFsaWduID8gb3B0cy54QXhpcy5zY3JvbGxBbGlnbiA6ICdsZWZ0JztcclxuICAgIG9wdHMuZXh0cmEgPSBvcHRzLmV4dHJhIHx8IHt9O1xyXG5cdFxyXG4gICAgb3B0cy5sZWdlbmQgPSBvcHRzLmxlZ2VuZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcblx0b3B0cy5yb3RhdGUgPSBvcHRzLnJvdGF0ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIG9wdHMuYW5pbWF0aW9uID0gb3B0cy5hbmltYXRpb24gPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgdmFyIGNvbmZpZyQkMSA9IGFzc2lnbih7fSwgY29uZmlnKTtcclxuICAgIGNvbmZpZyQkMS55QXhpc1RpdGxlV2lkdGggPSBvcHRzLnlBeGlzLmRpc2FibGVkICE9PSB0cnVlICYmIG9wdHMueUF4aXMudGl0bGUgPyBjb25maWckJDEueUF4aXNUaXRsZVdpZHRoIDogMDtcclxuICAgIGlmKG9wdHMudHlwZSA9PSAncGllJyB8fCBvcHRzLnR5cGUgPT0gJ3JpbmcnICl7XHJcbiAgICBcdCBjb25maWckJDEucGllQ2hhcnRMaW5lUGFkZGluZyA9IG9wdHMuZGF0YUxhYmVsID09PSBmYWxzZSA/IDAgOiBvcHRzLmV4dHJhLnBpZS5sYWJsZVdpZHRoIHx8IGNvbmZpZyQkMS5waWVDaGFydExpbmVQYWRkaW5nKm9wdHMucGl4ZWxSYXRpbztcclxuICAgIH1cclxuICAgIGNvbmZpZyQkMS5waWVDaGFydFRleHRQYWRkaW5nID0gb3B0cy5kYXRhTGFiZWwgPT09IGZhbHNlID8gMCA6IGNvbmZpZyQkMS5waWVDaGFydFRleHRQYWRkaW5nKm9wdHMucGl4ZWxSYXRpbztcclxuXHRjb25maWckJDEueUF4aXNTcGxpdCA9IG9wdHMueUF4aXMuc3BsaXROdW1iZXI/IG9wdHMueUF4aXMuc3BsaXROdW1iZXIgOiBjb25maWcueUF4aXNTcGxpdDtcclxuXHQvL+Wxj+W5leaXi+i9rFxyXG5cdGNvbmZpZyQkMS5yb3RhdGU9b3B0cy5yb3RhdGU7XHJcblx0aWYob3B0cy5yb3RhdGUpe1xyXG5cdFx0bGV0IHRlbXBXaWR0aD1vcHRzLndpZHRoO1xyXG5cdFx0bGV0IHRlbXBIZWlnaHQ9b3B0cy5oZWlnaHQ7XHJcblx0XHRvcHRzLndpZHRoPXRlbXBIZWlnaHQ7XHJcblx0XHRvcHRzLmhlaWdodD10ZW1wV2lkdGg7XHJcblx0fVxyXG5cdFxyXG5cdC8v6YCC6YWNSDXpq5jliIblsY9cclxuXHRjb25maWckJDEueUF4aXNXaWR0aD1jb25maWcueUF4aXNXaWR0aCpvcHRzLnBpeGVsUmF0aW87XHJcblx0Y29uZmlnJCQxLnhBeGlzSGVpZ2h0PWNvbmZpZy54QXhpc0hlaWdodCpvcHRzLnBpeGVsUmF0aW87XHJcblx0aWYob3B0cy5lbmFibGVTY3JvbGwgJiYgb3B0cy54QXhpcy5zY3JvbGxTaG93KXtcclxuXHRcdGNvbmZpZyQkMS54QXhpc0hlaWdodCs9NCpvcHRzLnBpeGVsUmF0aW87XHJcblx0fVxyXG5cdGNvbmZpZyQkMS54QXhpc0xpbmVIZWlnaHQ9Y29uZmlnLnhBeGlzTGluZUhlaWdodCpvcHRzLnBpeGVsUmF0aW87XHJcblx0Y29uZmlnJCQxLmxlZ2VuZEhlaWdodD1jb25maWcubGVnZW5kSGVpZ2h0Km9wdHMucGl4ZWxSYXRpbztcclxuXHQvL2NvbmZpZyQkMS55QXhpc1RpdGxlV2lkdGg9Y29uZmlnLnlBeGlzVGl0bGVXaWR0aCpvcHRzLnBpeGVsUmF0aW87XHJcblx0Y29uZmlnJCQxLnBhZGRpbmc9Y29uZmlnLnBhZGRpbmcqb3B0cy5waXhlbFJhdGlvO1xyXG5cdGNvbmZpZyQkMS5mb250U2l6ZT1vcHRzLmZvbnRTaXplO1xyXG5cdGNvbmZpZyQkMS50aXRsZUZvbnRTaXplPWNvbmZpZy50aXRsZUZvbnRTaXplKm9wdHMucGl4ZWxSYXRpbztcclxuXHRjb25maWckJDEuc3VidGl0bGVGb250U2l6ZT1jb25maWcuc3VidGl0bGVGb250U2l6ZSpvcHRzLnBpeGVsUmF0aW87XHJcblx0Y29uZmlnJCQxLnRvb2xUaXBQYWRkaW5nPWNvbmZpZy50b29sVGlwUGFkZGluZypvcHRzLnBpeGVsUmF0aW87XHJcblx0Y29uZmlnJCQxLnRvb2xUaXBMaW5lSGVpZ2h0PWNvbmZpZy50b29sVGlwTGluZUhlaWdodCpvcHRzLnBpeGVsUmF0aW87XHJcblx0Y29uZmlnJCQxLmNvbHVtZVBhZGRpbmc9Y29uZmlnLmNvbHVtZVBhZGRpbmcqb3B0cy5waXhlbFJhdGlvO1xyXG5cdC8vY29uZmlnJCQxLnhBeGlzVGV4dFBhZGRpbmc9Y29uZmlnLnhBeGlzVGV4dFBhZGRpbmcqb3B0cy5waXhlbFJhdGlvO1xyXG5cdFxyXG5cdC8v5ZCR6YWN572u5Lit5Lyg5YWl5b2T5YmNcGl4ZWxSYXRpb+WPiuWtl+S9k+Wkp+Wwj1xyXG5cdGNvbmZpZy5waXhlbFJhdGlvPW9wdHMucGl4ZWxSYXRpbztcclxuXHRjb25maWcuZm9udFNpemU9b3B0cy5mb250U2l6ZTtcclxuXHRjb25maWcucm90YXRlPW9wdHMucm90YXRlO1xyXG5cdFxyXG4gICAgdGhpcy5vcHRzID0gb3B0cztcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnJCQxO1xyXG5cdG9wdHMuJHRoaXMgPSBvcHRzLiR0aGlzPyBvcHRzLiR0aGlzIDogdGhpcztcclxuICAgIHRoaXMuY29udGV4dCA9IHVuaS5jcmVhdGVDYW52YXNDb250ZXh0KG9wdHMuY2FudmFzSWQsIG9wdHMuJHRoaXMpO1xyXG4gICAgLy8gc3RvcmUgY2FsY3VhdGVkIGNoYXJ0IGRhdGFcclxuICAgIC8vIHN1Y2ggYXMgY2hhcnQgcG9pbnQgY29vcmRpbmF0ZVxyXG4gICAgdGhpcy5jaGFydERhdGEgPSB7fTtcclxuICAgIHRoaXMuZXZlbnQgPSBuZXcgRXZlbnQoKTtcclxuXHRcclxuICAgIHRoaXMuc2Nyb2xsT3B0aW9uID0ge1xyXG4gICAgICAgIGN1cnJlbnRPZmZzZXQ6IDAsXHJcbiAgICAgICAgc3RhcnRUb3VjaFg6IDAsXHJcbiAgICAgICAgZGlzdGFuY2U6IDBcclxuICAgIH07XHJcblx0XHJcblx0Ly/orqHnrpflj7Plr7npvZDlgY/np7vot53nprtcclxuXHRpZihvcHRzLmVuYWJsZVNjcm9sbCAmJiBvcHRzLnhBeGlzLnNjcm9sbEFsaWduPT0ncmlnaHQnKXtcclxuXHRcdGxldCBfY2FsWUF4aXNEYXRhID0gY2FsWUF4aXNEYXRhKG9wdHMuc2VyaWVzLCBvcHRzLCBjb25maWckJDEpLFxyXG5cdFx0ICAgIHlBeGlzV2lkdGggPSBfY2FsWUF4aXNEYXRhLnlBeGlzV2lkdGg7XHJcblx0XHRjb25maWckJDEueUF4aXNXaWR0aCA9IHlBeGlzV2lkdGg7XHJcblx0XHRsZXQgb2Zmc2V0TGVmdD0wO1xyXG5cdFx0bGV0IF9nZXRYQXhpc1BvaW50czAgPSBnZXRYQXhpc1BvaW50cyhvcHRzLmNhdGVnb3JpZXMsIG9wdHMsIGNvbmZpZyQkMSksXHJcblx0XHQgICAgeEF4aXNQb2ludHMgPSBfZ2V0WEF4aXNQb2ludHMwLnhBeGlzUG9pbnRzLFxyXG5cdFx0ICAgIHN0YXJ0WCA9IF9nZXRYQXhpc1BvaW50czAuc3RhcnRYLFxyXG5cdFx0ICAgIGVuZFggPSBfZ2V0WEF4aXNQb2ludHMwLmVuZFgsXHJcblx0XHQgICAgZWFjaFNwYWNpbmcgPSBfZ2V0WEF4aXNQb2ludHMwLmVhY2hTcGFjaW5nO1xyXG5cdFx0bGV0IHRvdGFsV2lkdGg9ZWFjaFNwYWNpbmcqKHhBeGlzUG9pbnRzLmxlbmd0aC0xKTtcclxuXHRcdGxldCBzY3JlZW5XaWR0aD1lbmRYLXN0YXJ0WDtcclxuXHRcdG9mZnNldExlZnQ9c2NyZWVuV2lkdGgtdG90YWxXaWR0aDtcclxuXHRcdHRoaXMuc2Nyb2xsT3B0aW9uID0ge1xyXG5cdFx0ICAgIGN1cnJlbnRPZmZzZXQ6IG9mZnNldExlZnQsXHJcblx0XHQgICAgc3RhcnRUb3VjaFg6IG9mZnNldExlZnQsXHJcblx0XHQgICAgZGlzdGFuY2U6IDBcclxuXHRcdH07XHJcblx0XHRvcHRzLl9zY3JvbGxEaXN0YW5jZV89IG9mZnNldExlZnQ7XHJcblx0fVxyXG5cdFxyXG4gICAgZHJhd0NoYXJ0cy5jYWxsKHRoaXMsIG9wdHMudHlwZSwgb3B0cywgY29uZmlnJCQxLCB0aGlzLmNvbnRleHQpO1xyXG59O1xyXG5cclxuQ2hhcnRzLnByb3RvdHlwZS51cGRhdGVEYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xyXG4gICAgdGhpcy5vcHRzLnNlcmllcyA9IGRhdGEuc2VyaWVzIHx8IHRoaXMub3B0cy5zZXJpZXM7XHJcbiAgICB0aGlzLm9wdHMuY2F0ZWdvcmllcyA9IGRhdGEuY2F0ZWdvcmllcyB8fCB0aGlzLm9wdHMuY2F0ZWdvcmllcztcclxuXHJcbiAgICB0aGlzLm9wdHMudGl0bGUgPSBhc3NpZ24oe30sIHRoaXMub3B0cy50aXRsZSwgZGF0YS50aXRsZSB8fCB7fSk7XHJcbiAgICB0aGlzLm9wdHMuc3VidGl0bGUgPSBhc3NpZ24oe30sIHRoaXMub3B0cy5zdWJ0aXRsZSwgZGF0YS5zdWJ0aXRsZSB8fCB7fSk7XHJcblxyXG4gICAgZHJhd0NoYXJ0cy5jYWxsKHRoaXMsIHRoaXMub3B0cy50eXBlLCB0aGlzLm9wdHMsIHRoaXMuY29uZmlnLCB0aGlzLmNvbnRleHQpO1xyXG59O1xyXG5cclxuQ2hhcnRzLnByb3RvdHlwZS56b29tID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHZhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5vcHRzLnhBeGlzLml0ZW1Db3VudDtcclxuXHRpZih0aGlzLm9wdHMuZW5hYmxlU2Nyb2xsIT09dHJ1ZSl7XHJcblx0XHRjb25zb2xlLmxvZygn6K+35ZCv55So5rua5Yqo5p2h5ZCO5L2/55So77yBJylcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0dGhpcy5vcHRzLmFuaW1hdGlvbj1mYWxzZTtcclxuICAgIHRoaXMub3B0cy54QXhpcy5pdGVtQ291bnQgPSB2YWwuaXRlbUNvdW50O1xyXG4gICAgZHJhd0NoYXJ0cy5jYWxsKHRoaXMsIHRoaXMub3B0cy50eXBlLCB0aGlzLm9wdHMsIHRoaXMuY29uZmlnLCB0aGlzLmNvbnRleHQpO1xyXG59O1xyXG5cclxuQ2hhcnRzLnByb3RvdHlwZS5zdG9wQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5hbmltYXRpb25JbnN0YW5jZSAmJiB0aGlzLmFuaW1hdGlvbkluc3RhbmNlLnN0b3AoKTtcclxufTtcclxuXHJcbkNoYXJ0cy5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgdGhpcy5ldmVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxufTtcclxuXHJcbkNoYXJ0cy5wcm90b3R5cGUuZ2V0Q3VycmVudERhdGFJbmRleCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgdG91Y2hlcz0gZS5tcC5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgIGlmICh0b3VjaGVzKSB7XHJcbiAgICAgICAgdmFyIF90b3VjaGVzJD0gZ2V0VG91Y2hlcyh0b3VjaGVzLCB0aGlzLm9wdHMsIGUpO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdHMudHlwZSA9PT0gJ3BpZScgfHwgdGhpcy5vcHRzLnR5cGUgPT09ICdyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmluZFBpZUNoYXJ0Q3VycmVudEluZGV4KHsgeDogX3RvdWNoZXMkLngsIHk6IF90b3VjaGVzJC55IH0sIHRoaXMuY2hhcnREYXRhLnBpZURhdGEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLnR5cGUgPT09ICdyYWRhcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbmRSYWRhckNoYXJ0Q3VycmVudEluZGV4KHsgeDogX3RvdWNoZXMkLngsIHk6IF90b3VjaGVzJC55IH0sIHRoaXMuY2hhcnREYXRhLnJhZGFyRGF0YSwgdGhpcy5vcHRzLmNhdGVnb3JpZXMubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmluZEN1cnJlbnRJbmRleCh7IHg6IF90b3VjaGVzJC54LCB5OiBfdG91Y2hlcyQueSB9LCB0aGlzLmNoYXJ0RGF0YS54QXhpc1BvaW50cywgdGhpcy5vcHRzLCB0aGlzLmNvbmZpZywgTWF0aC5hYnModGhpcy5zY3JvbGxPcHRpb24uY3VycmVudE9mZnNldCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufTtcclxuXHJcbkNoYXJ0cy5wcm90b3R5cGUuc2hvd1Rvb2xUaXAgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIG9wdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XHJcblx0dmFyIHRvdWNoZXM9IGUubXAuY2hhbmdlZFRvdWNoZXNbMF07XHJcblx0dmFyIF90b3VjaGVzJD0gZ2V0VG91Y2hlcyh0b3VjaGVzLCB0aGlzLm9wdHMsIGUpO1xyXG5cdFxyXG4gICAgaWYgKHRoaXMub3B0cy50eXBlID09PSAnbGluZScgfHwgdGhpcy5vcHRzLnR5cGUgPT09ICdhcmVhJyB8fCB0aGlzLm9wdHMudHlwZSA9PT0gJ21peCcgfHwgdGhpcy5vcHRzLnR5cGUgPT09ICdjb2x1bW4nKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRDdXJyZW50RGF0YUluZGV4KGUpO1xyXG4gICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5zY3JvbGxPcHRpb24uY3VycmVudE9mZnNldDtcclxuXHRcdFxyXG4gICAgICAgIHZhciBvcHRzID0gYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcclxuICAgICAgICAgICAgX3Njcm9sbERpc3RhbmNlXzogY3VycmVudE9mZnNldCxcclxuICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcblx0XHRcdFxyXG4gICAgICAgICAgICB2YXIgc2VyaWVzRGF0YSA9IGdldFNlcmllc0RhdGFJdGVtKHRoaXMub3B0cy5zZXJpZXMsIGluZGV4KTtcclxuICAgICAgICAgICAgaWYgKHNlcmllc0RhdGEubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2dldFRvb2xUaXBEYXRhID0gZ2V0VG9vbFRpcERhdGEoc2VyaWVzRGF0YSwgdGhpcy5jaGFydERhdGEuY2FsUG9pbnRzLCBpbmRleCwgdGhpcy5vcHRzLmNhdGVnb3JpZXMsIG9wdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dExpc3QgPSBfZ2V0VG9vbFRpcERhdGEudGV4dExpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gX2dldFRvb2xUaXBEYXRhLm9mZnNldDtcclxuXHRcdFx0XHRvZmZzZXQueT1fdG91Y2hlcyQueTtcclxuICAgICAgICAgICAgICAgIG9wdHMudG9vbHRpcCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0TGlzdDogdGV4dExpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiBvcHRpb24sXHJcblx0XHRcdFx0XHRpbmRleDogaW5kZXhcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZHJhd0NoYXJ0cy5jYWxsKHRoaXMsIG9wdHMudHlwZSwgb3B0cywgdGhpcy5jb25maWcsIHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcblx0aWYgKHRoaXMub3B0cy50eXBlID09PSAnY2FuZGxlJykge1xyXG5cdFx0XHJcblx0ICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0Q3VycmVudERhdGFJbmRleChlKTtcclxuXHQgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLnNjcm9sbE9wdGlvbi5jdXJyZW50T2Zmc2V0O1xyXG5cdFx0XHJcblx0ICAgIHZhciBvcHRzID0gYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcclxuXHQgICAgICAgIF9zY3JvbGxEaXN0YW5jZV86IGN1cnJlbnRPZmZzZXQsXHJcblx0ICAgICAgICBhbmltYXRpb246IGZhbHNlXHJcblx0ICAgIH0pO1xyXG5cdCAgICBpZiAoaW5kZXggPiAtMSkge1xyXG5cdCAgICAgICAgdmFyIHNlcmllc0RhdGEgPSBnZXRTZXJpZXNEYXRhSXRlbSh0aGlzLm9wdHMuc2VyaWVzLCBpbmRleCk7XHJcblx0ICAgICAgICBpZiAoc2VyaWVzRGF0YS5sZW5ndGggIT09IDApIHtcclxuXHQgICAgICAgICAgICB2YXIgX2dldFRvb2xUaXBEYXRhID0gZ2V0Q2FuZGxlVG9vbFRpcERhdGEodGhpcy5vcHRzLnNlcmllc1swXS5kYXRhLHNlcmllc0RhdGEsIHRoaXMuY2hhcnREYXRhLmNhbFBvaW50cywgaW5kZXgsIHRoaXMub3B0cy5jYXRlZ29yaWVzLCB0aGlzLm9wdHMuZXh0cmEuY2FuZGxlLCBvcHRpb24pLFxyXG5cdCAgICAgICAgICAgICAgICB0ZXh0TGlzdCA9IF9nZXRUb29sVGlwRGF0YS50ZXh0TGlzdCxcclxuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gX2dldFRvb2xUaXBEYXRhLm9mZnNldDtcclxuXHRcdFx0XHRvZmZzZXQueT1fdG91Y2hlcyQueTtcclxuXHQgICAgICAgICAgICBvcHRzLnRvb2x0aXAgPSB7XHJcblx0ICAgICAgICAgICAgICAgIHRleHRMaXN0OiB0ZXh0TGlzdCxcclxuXHQgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXHJcblx0ICAgICAgICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxyXG5cdFx0XHRcdFx0aW5kZXg6IGluZGV4XHJcblx0ICAgICAgICAgICAgfTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cdCAgICBkcmF3Q2hhcnRzLmNhbGwodGhpcywgb3B0cy50eXBlLCBvcHRzLCB0aGlzLmNvbmZpZywgdGhpcy5jb250ZXh0KTtcclxuXHR9XHJcblx0aWYgKHRoaXMub3B0cy50eXBlID09PSAncGllJyB8fCB0aGlzLm9wdHMudHlwZSA9PT0gJ3JpbmcnKSB7XHJcblx0ICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0Q3VycmVudERhdGFJbmRleChlKTtcclxuXHQgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLnNjcm9sbE9wdGlvbi5jdXJyZW50T2Zmc2V0O1xyXG5cdFx0XHJcblx0ICAgIHZhciBvcHRzID0gYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcclxuXHQgICAgICAgIF9zY3JvbGxEaXN0YW5jZV86IGN1cnJlbnRPZmZzZXQsXHJcblx0ICAgICAgICBhbmltYXRpb246IGZhbHNlXHJcblx0ICAgIH0pO1xyXG5cdCAgICBpZiAoaW5kZXggPiAtMSkge1xyXG5cdFx0XHRcclxuXHQgICAgICAgIHZhciBzZXJpZXNEYXRhID0gdGhpcy5vcHRzLnNlcmllc1tpbmRleF07XHJcblx0XHRcdHZhciB0ZXh0TGlzdCA9W3tcclxuXHRcdFx0XHR0ZXh0OiBvcHRpb24uZm9ybWF0ID8gb3B0aW9uLmZvcm1hdChzZXJpZXNEYXRhKSA6IHNlcmllc0RhdGEubmFtZSArICc6ICcgKyBzZXJpZXNEYXRhLmRhdGEsXHJcblx0XHRcdFx0Y29sb3I6IHNlcmllc0RhdGEuY29sb3JcclxuXHRcdFx0fV07XHJcblx0XHRcdHZhciBvZmZzZXQgPSB7eDpfdG91Y2hlcyQueCx5Ol90b3VjaGVzJC55fTtcclxuXHRcdFx0XHJcblx0XHRcdG9wdHMudG9vbHRpcCA9IHtcclxuXHRcdFx0XHR0ZXh0TGlzdDogdGV4dExpc3QsXHJcblx0XHRcdFx0b2Zmc2V0OiBvZmZzZXQsXHJcblx0XHRcdFx0b3B0aW9uOiBvcHRpb24sXHJcblx0XHRcdFx0aW5kZXg6IGluZGV4XHJcblx0XHRcdH07XHJcblx0ICAgIH1cclxuXHQgICAgZHJhd0NoYXJ0cy5jYWxsKHRoaXMsIG9wdHMudHlwZSwgb3B0cywgdGhpcy5jb25maWcsIHRoaXMuY29udGV4dCk7XHJcblx0fVxyXG59O1xyXG5cclxuQ2hhcnRzLnByb3RvdHlwZS5zY3JvbGxTdGFydCA9IGZ1bmN0aW9uIChlKSB7XHJcblx0dmFyIHRvdWNoZXM9IGUubXAuY2hhbmdlZFRvdWNoZXNbMF07XHJcblx0dmFyIF90b3VjaGVzJD0gZ2V0VG91Y2hlcyh0b3VjaGVzLCB0aGlzLm9wdHMsIGUpO1xyXG4gICAgaWYgKHRvdWNoZXMgJiYgdGhpcy5vcHRzLmVuYWJsZVNjcm9sbCA9PT0gdHJ1ZSkge1xyXG5cdFx0aWYodG91Y2hlcy54KXtcclxuXHRcdFx0dGhpcy5zY3JvbGxPcHRpb24uc3RhcnRUb3VjaFggPSBfdG91Y2hlcyQueDtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHR0aGlzLnNjcm9sbE9wdGlvbi5zdGFydFRvdWNoWCA9IF90b3VjaGVzJC5jbGllbnRYO1xyXG5cdFx0fVxyXG4gICAgfVxyXG59O1xyXG5cclxuQ2hhcnRzLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgLy8gVE9ETyB0aHJvdHRpbmcuLi5cclxuXHR2YXIgdG91Y2hlcz0gZS5tcC5jaGFuZ2VkVG91Y2hlc1swXTtcclxuXHR2YXIgX3RvdWNoZXMkPSBnZXRUb3VjaGVzKHRvdWNoZXMsIHRoaXMub3B0cywgZSk7XHJcbiAgICBpZiAodG91Y2hlcyAmJiB0aGlzLm9wdHMuZW5hYmxlU2Nyb2xsID09PSB0cnVlKSB7XHJcblx0XHR2YXIgX2Rpc3RhbmNlO1xyXG5cdFx0aWYodG91Y2hlcy54KXtcclxuXHRcdFx0X2Rpc3RhbmNlID0gX3RvdWNoZXMkLnggLSB0aGlzLnNjcm9sbE9wdGlvbi5zdGFydFRvdWNoWDtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRfZGlzdGFuY2UgPSBfdG91Y2hlcyQuY2xpZW50WCAtIHRoaXMuc2Nyb2xsT3B0aW9uLnN0YXJ0VG91Y2hYO1xyXG5cdFx0fVxyXG4gICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5zY3JvbGxPcHRpb24uY3VycmVudE9mZnNldDtcclxuXHJcbiAgICAgICAgdmFyIHZhbGlkRGlzdGFuY2UgPSBjYWxWYWxpZERpc3RhbmNlKGN1cnJlbnRPZmZzZXQgKyBfZGlzdGFuY2UsIHRoaXMuY2hhcnREYXRhLCB0aGlzLmNvbmZpZywgdGhpcy5vcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxPcHRpb24uZGlzdGFuY2UgPSBfZGlzdGFuY2UgPSB2YWxpZERpc3RhbmNlIC0gY3VycmVudE9mZnNldDtcclxuICAgICAgICB2YXIgb3B0cyA9IGFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XHJcbiAgICAgICAgICAgIF9zY3JvbGxEaXN0YW5jZV86IGN1cnJlbnRPZmZzZXQgKyBfZGlzdGFuY2UsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbjogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBkcmF3Q2hhcnRzLmNhbGwodGhpcywgb3B0cy50eXBlLCBvcHRzLCB0aGlzLmNvbmZpZywgdGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxufTtcclxuXHJcbkNoYXJ0cy5wcm90b3R5cGUuc2Nyb2xsRW5kID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICh0aGlzLm9wdHMuZW5hYmxlU2Nyb2xsID09PSB0cnVlKSB7XHJcbiAgICAgICAgdmFyIF9zY3JvbGxPcHRpb24gPSB0aGlzLnNjcm9sbE9wdGlvbixcclxuICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IF9zY3JvbGxPcHRpb24uY3VycmVudE9mZnNldCxcclxuICAgICAgICAgICAgZGlzdGFuY2UgPSBfc2Nyb2xsT3B0aW9uLmRpc3RhbmNlO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbE9wdGlvbi5jdXJyZW50T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGRpc3RhbmNlO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsT3B0aW9uLmRpc3RhbmNlID0gMDtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2hhcnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n");
- /***/ }),
- /* 45 */
- /*!***************************************!*\
- !*** E:/sheverAPP/APP/common/util.js ***!
- \***************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("function formatTime(time) {\n if (typeof time !== 'number' || time < 0) {\n return time;\n }\n\n var hour = parseInt(time / 3600);\n time = time % 3600;\n var minute = parseInt(time / 60);\n time = time % 60;\n var second = time;\n\n return [hour, minute, second].map(function (n) {\n n = n.toString();\n return n[1] ? n : '0' + n;\n }).join(':');\n}\n\nfunction formatLocation(longitude, latitude) {\n if (typeof longitude === 'string' && typeof latitude === 'string') {\n longitude = parseFloat(longitude);\n latitude = parseFloat(latitude);\n }\n\n longitude = longitude.toFixed(2);\n latitude = latitude.toFixed(2);\n\n return {\n longitude: longitude.toString().split('.'),\n latitude: latitude.toString().split('.') };\n\n}\nvar dateUtils = {\n UNITS: {\n '年': 31557600000,\n '月': 2629800000,\n '天': 86400000,\n '小时': 3600000,\n '分钟': 60000,\n '秒': 1000 },\n\n humanize: function humanize(milliseconds) {\n var humanize = '';\n for (var key in this.UNITS) {\n if (milliseconds >= this.UNITS[key]) {\n humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';\n break;\n }\n }\n return humanize || '刚刚';\n },\n format: function format(dateStr) {\n var date = this.parse(dateStr);\n var diff = Date.now() - date.getTime();\n if (diff < this.UNITS['天']) {\n return this.humanize(diff);\n }\n var _format = function _format(number) {\n return number < 10 ? '0' + number : number;\n };\n return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +\n _format(date.getHours()) + ':' + _format(date.getMinutes());\n },\n parse: function parse(str) {//将\"yyyy-mm-dd HH:MM:ss\"格式的字符串,转化为一个Date对象\n var a = str.split(/[^0-9]/);\n return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);\n },\n formateDate: function formateDate(newdate, format) {\n var date = {\n 'M+': newdate.getMonth() + 1,\n 'd+': newdate.getDate(),\n 'h+': newdate.getHours(),\n 'm+': newdate.getMinutes(),\n 's+': newdate.getSeconds(),\n 'q+': Math.floor((newdate.getMonth() + 3) / 3),\n 'S+': newdate.getMilliseconds() };\n\n if (/(y+)/i.test(format)) {\n format = format.replace(RegExp.$1, (newdate.getFullYear() + '').substr(4 - RegExp.$1.length));\n }\n for (var k in date) {\n if (new RegExp('(' + k + ')').test(format)) {\n format = format.replace(RegExp.$1, RegExp.$1.length === 1 ?\n date[k] : ('00' + date[k]).substr(('' + date[k]).length));\n }\n }\n return format;\n },\n getFirstDayOfWeek: function getFirstDayOfWeek(date) {\n var day = date.getDay() || 7;\n var result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1 - day);\n return result;\n },\n getLastDayOfWeek: function getLastDayOfWeek(date) {\n var day = date.getDay() || 7;\n var result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 7 - day);\n return result;\n },\n /**获取当年第一天 */\n getCurrentYearFirstDate: function getCurrentYearFirstDate(now) {\n var nowyear = now.getFullYear() + ''; // 获取年(yyyy)\n // 调用格式化方法\n var firstDate = new Date(nowyear + '/01' + '/01');\n return firstDate;\n },\n /**获取当年最后一天 */\n getCurrentYearLastDate: function getCurrentYearLastDate(now) {\n var year = now.getFullYear() + 1; // 获取年(yyyy)\n // 调用格式化方法\n var nextyear = new Date(year + '/01' + '/01');\n nextyear.setDate(nextyear.getDate() - 1);\n return nextyear;\n },\n /**获取当月月第一天 */\n getCurrentMonFirstDate: function getCurrentMonFirstDate(now) {\n var nowyear = now.getFullYear() + ''; // 获取年(yyyy)\n var nowmonth = now.getMonth() + 1 + ''; // 获取月份(0-11,0代表1月)\n // 调用格式化方法\n nowmonth = this.dateformat(nowmonth);\n var firstDate = new Date(nowyear + '/' + nowmonth + '/01');\n return firstDate;\n },\n /**获取当月月最后一天 */\n getCurrentMonLastDate: function getCurrentMonLastDate(now) {\n var nextMonFirstDate = this.getNextMonFirstDate(now);\n nextMonFirstDate.setDate(nextMonFirstDate.getDate() - 1);\n return nextMonFirstDate;\n },\n /**获取下个月第一天 */\n getNextMonFirstDate: function getNextMonFirstDate(now) {\n var currentMonFirstDate = this.getCurrentMonFirstDate(now);\n currentMonFirstDate.setMonth(currentMonFirstDate.getMonth() + 1);\n return currentMonFirstDate;\n },\n dateformat: function dateformat(fmt) {\n if (fmt.length === 1) {\n fmt = '0' + fmt;\n }\n return fmt;\n } };\n\n\nmodule.exports = {\n formatTime: formatTime,\n formatLocation: formatLocation,\n dateUtils: dateUtils };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tbW9uL3V0aWwuanMiXSwibmFtZXMiOlsiZm9ybWF0VGltZSIsInRpbWUiLCJob3VyIiwicGFyc2VJbnQiLCJtaW51dGUiLCJzZWNvbmQiLCJtYXAiLCJuIiwidG9TdHJpbmciLCJqb2luIiwiZm9ybWF0TG9jYXRpb24iLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwic3BsaXQiLCJkYXRlVXRpbHMiLCJVTklUUyIsImh1bWFuaXplIiwibWlsbGlzZWNvbmRzIiwia2V5IiwiTWF0aCIsImZsb29yIiwiZm9ybWF0IiwiZGF0ZVN0ciIsImRhdGUiLCJwYXJzZSIsImRpZmYiLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsIl9mb3JtYXQiLCJudW1iZXIiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF5IiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwic3RyIiwiYSIsImZvcm1hdGVEYXRlIiwibmV3ZGF0ZSIsImdldERhdGUiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwidGVzdCIsInJlcGxhY2UiLCJSZWdFeHAiLCIkMSIsInN1YnN0ciIsImxlbmd0aCIsImsiLCJnZXRGaXJzdERheU9mV2VlayIsImRheSIsInJlc3VsdCIsImdldExhc3REYXlPZldlZWsiLCJnZXRDdXJyZW50WWVhckZpcnN0RGF0ZSIsIm5vd3llYXIiLCJmaXJzdERhdGUiLCJnZXRDdXJyZW50WWVhckxhc3REYXRlIiwieWVhciIsIm5leHR5ZWFyIiwic2V0RGF0ZSIsImdldEN1cnJlbnRNb25GaXJzdERhdGUiLCJub3dtb250aCIsImRhdGVmb3JtYXQiLCJnZXRDdXJyZW50TW9uTGFzdERhdGUiLCJuZXh0TW9uRmlyc3REYXRlIiwiZ2V0TmV4dE1vbkZpcnN0RGF0ZSIsImN1cnJlbnRNb25GaXJzdERhdGUiLCJzZXRNb250aCIsImZtdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBLFNB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Y3Rpb24gZm9ybWF0VGltZSh0aW1lKSB7XHJcblx0aWYgKHR5cGVvZiB0aW1lICE9PSAnbnVtYmVyJyB8fCB0aW1lIDwgMCkge1xyXG5cdFx0cmV0dXJuIHRpbWVcclxuXHR9XHJcblxyXG5cdHZhciBob3VyID0gcGFyc2VJbnQodGltZSAvIDM2MDApXHJcblx0dGltZSA9IHRpbWUgJSAzNjAwXHJcblx0dmFyIG1pbnV0ZSA9IHBhcnNlSW50KHRpbWUgLyA2MClcclxuXHR0aW1lID0gdGltZSAlIDYwXHJcblx0dmFyIHNlY29uZCA9IHRpbWVcclxuXHJcblx0cmV0dXJuIChbaG91ciwgbWludXRlLCBzZWNvbmRdKS5tYXAoZnVuY3Rpb24obikge1xyXG5cdFx0biA9IG4udG9TdHJpbmcoKVxyXG5cdFx0cmV0dXJuIG5bMV0gPyBuIDogJzAnICsgblxyXG5cdH0pLmpvaW4oJzonKVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRMb2NhdGlvbihsb25naXR1ZGUsIGxhdGl0dWRlKSB7XHJcblx0aWYgKHR5cGVvZiBsb25naXR1ZGUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBsYXRpdHVkZSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdGxvbmdpdHVkZSA9IHBhcnNlRmxvYXQobG9uZ2l0dWRlKVxyXG5cdFx0bGF0aXR1ZGUgPSBwYXJzZUZsb2F0KGxhdGl0dWRlKVxyXG5cdH1cclxuXHJcblx0bG9uZ2l0dWRlID0gbG9uZ2l0dWRlLnRvRml4ZWQoMilcclxuXHRsYXRpdHVkZSA9IGxhdGl0dWRlLnRvRml4ZWQoMilcclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGxvbmdpdHVkZTogbG9uZ2l0dWRlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKSxcclxuXHRcdGxhdGl0dWRlOiBsYXRpdHVkZS50b1N0cmluZygpLnNwbGl0KCcuJylcclxuXHR9XHJcbn1cclxudmFyIGRhdGVVdGlscyA9IHtcclxuXHRVTklUUzoge1xyXG5cdFx0J+W5tCc6IDMxNTU3NjAwMDAwLFxyXG5cdFx0J+aciCc6IDI2Mjk4MDAwMDAsXHJcblx0XHQn5aSpJzogODY0MDAwMDAsXHJcblx0XHQn5bCP5pe2JzogMzYwMDAwMCxcclxuXHRcdCfliIbpkp8nOiA2MDAwMCxcclxuXHRcdCfnp5InOiAxMDAwXHJcblx0fSxcclxuXHRodW1hbml6ZTogZnVuY3Rpb24obWlsbGlzZWNvbmRzKSB7XHJcblx0XHR2YXIgaHVtYW5pemUgPSAnJztcclxuXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLlVOSVRTKSB7XHJcblx0XHRcdGlmIChtaWxsaXNlY29uZHMgPj0gdGhpcy5VTklUU1trZXldKSB7XHJcblx0XHRcdFx0aHVtYW5pemUgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAvIHRoaXMuVU5JVFNba2V5XSkgKyBrZXkgKyAn5YmNJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGh1bWFuaXplIHx8ICfliJrliJonO1xyXG5cdH0sXHJcblx0Zm9ybWF0OiBmdW5jdGlvbihkYXRlU3RyKSB7XHJcblx0XHR2YXIgZGF0ZSA9IHRoaXMucGFyc2UoZGF0ZVN0cilcclxuXHRcdHZhciBkaWZmID0gRGF0ZS5ub3coKSAtIGRhdGUuZ2V0VGltZSgpO1xyXG5cdFx0aWYgKGRpZmYgPCB0aGlzLlVOSVRTWyflpKknXSkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5odW1hbml6ZShkaWZmKTtcclxuXHRcdH1cclxuXHRcdHZhciBfZm9ybWF0ID0gZnVuY3Rpb24obnVtYmVyKSB7XHJcblx0XHRcdHJldHVybiAobnVtYmVyIDwgMTAgPyAoJzAnICsgbnVtYmVyKSA6IG51bWJlcik7XHJcblx0XHR9O1xyXG5cdFx0cmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArICcvJyArIF9mb3JtYXQoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnLycgKyBfZm9ybWF0KGRhdGUuZ2V0RGF5KCkpICsgJy0nICtcclxuXHRcdFx0X2Zvcm1hdChkYXRlLmdldEhvdXJzKCkpICsgJzonICsgX2Zvcm1hdChkYXRlLmdldE1pbnV0ZXMoKSk7XHJcblx0fSxcclxuXHRwYXJzZTogZnVuY3Rpb24oc3RyKSB7IC8v5bCGXCJ5eXl5LW1tLWRkIEhIOk1NOnNzXCLmoLzlvI/nmoTlrZfnrKbkuLLvvIzovazljJbkuLrkuIDkuKpEYXRl5a+56LGhXHJcblx0XHR2YXIgYSA9IHN0ci5zcGxpdCgvW14wLTldLyk7XHJcblx0XHRyZXR1cm4gbmV3IERhdGUoYVswXSwgYVsxXSAtIDEsIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0pO1xyXG5cdH0sXHJcblx0Zm9ybWF0ZURhdGU6IGZ1bmN0aW9uKG5ld2RhdGUsIGZvcm1hdCkge1xyXG5cdFx0Y29uc3QgZGF0ZSA9IHtcclxuXHRcdFx0J00rJzogbmV3ZGF0ZS5nZXRNb250aCgpICsgMSxcclxuXHRcdFx0J2QrJzogbmV3ZGF0ZS5nZXREYXRlKCksXHJcblx0XHRcdCdoKyc6IG5ld2RhdGUuZ2V0SG91cnMoKSxcclxuXHRcdFx0J20rJzogbmV3ZGF0ZS5nZXRNaW51dGVzKCksXHJcblx0XHRcdCdzKyc6IG5ld2RhdGUuZ2V0U2Vjb25kcygpLFxyXG5cdFx0XHQncSsnOiBNYXRoLmZsb29yKChuZXdkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLFxyXG5cdFx0XHQnUysnOiBuZXdkYXRlLmdldE1pbGxpc2Vjb25kcygpXHJcblx0XHR9O1xyXG5cdFx0aWYgKC8oeSspL2kudGVzdChmb3JtYXQpKSB7XHJcblx0XHRcdGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKG5ld2RhdGUuZ2V0RnVsbFllYXIoKSArICcnKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcclxuXHRcdH1cclxuXHRcdGZvciAoY29uc3QgayBpbiBkYXRlKSB7XHJcblx0XHRcdGlmIChuZXcgUmVnRXhwKCcoJyArIGsgKyAnKScpLnRlc3QoZm9ybWF0KSkge1xyXG5cdFx0XHRcdGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFJlZ0V4cC4kMSwgUmVnRXhwLiQxLmxlbmd0aCA9PT0gMSA/XHJcblx0XHRcdFx0XHRkYXRlW2tdIDogKCcwMCcgKyBkYXRlW2tdKS5zdWJzdHIoKCcnICsgZGF0ZVtrXSkubGVuZ3RoKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBmb3JtYXQ7XHJcblx0fSxcclxuXHRnZXRGaXJzdERheU9mV2VlazogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdFx0dmFyIGRheSA9IGRhdGUuZ2V0RGF5KCkgfHwgNztcclxuXHRcdHZhciByZXN1bHQgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgKyAxIC0gZGF5KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fSxcclxuXHRnZXRMYXN0RGF5T2ZXZWVrOiBmdW5jdGlvbihkYXRlKSB7XHJcblx0XHR2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKSB8fCA3O1xyXG5cdFx0dmFyIHJlc3VsdCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSArIDcgLSBkYXkpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9LFxyXG5cdC8qKuiOt+WPluW9k+W5tOesrOS4gOWkqSAqL1xyXG5cdGdldEN1cnJlbnRZZWFyRmlyc3REYXRlOiBmdW5jdGlvbihub3cpIHtcclxuXHRcdGNvbnN0IG5vd3llYXIgPSBub3cuZ2V0RnVsbFllYXIoKSArICcnOyAvLyDojrflj5blubTvvIh5eXl577yJXHJcblx0XHQvLyDosIPnlKjmoLzlvI/ljJbmlrnms5VcclxuXHRcdGNvbnN0IGZpcnN0RGF0ZSA9IG5ldyBEYXRlKG5vd3llYXIgKyAnLzAxJyArICcvMDEnKTtcclxuXHRcdHJldHVybiBmaXJzdERhdGU7XHJcblx0fSxcclxuXHQvKirojrflj5blvZPlubTmnIDlkI7kuIDlpKkgKi9cclxuXHRnZXRDdXJyZW50WWVhckxhc3REYXRlOiBmdW5jdGlvbihub3cpIHtcclxuXHRcdGNvbnN0IHllYXIgPSBub3cuZ2V0RnVsbFllYXIoKSArIDE7IC8vIOiOt+WPluW5tO+8iHl5eXnvvIlcclxuXHRcdC8vIOiwg+eUqOagvOW8j+WMluaWueazlVxyXG5cdFx0Y29uc3QgbmV4dHllYXIgPSBuZXcgRGF0ZSh5ZWFyICsgJy8wMScgKyAnLzAxJyk7XHJcblx0XHRuZXh0eWVhci5zZXREYXRlKG5leHR5ZWFyLmdldERhdGUoKSAtIDEpO1xyXG5cdFx0cmV0dXJuIG5leHR5ZWFyO1xyXG5cdH0sXHJcblx0Lyoq6I635Y+W5b2T5pyI5pyI56ys5LiA5aSpICovXHJcblx0Z2V0Q3VycmVudE1vbkZpcnN0RGF0ZTogZnVuY3Rpb24obm93KSB7XHJcblx0XHRjb25zdCBub3d5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCkgKyAnJzsgLy8g6I635Y+W5bm077yIeXl5ee+8iVxyXG5cdFx0bGV0IG5vd21vbnRoID0gbm93LmdldE1vbnRoKCkgKyAxICsgJyc7IC8vIOiOt+WPluaciOS7ve+8iDAtMTHvvIww5Luj6KGoMeaciO+8iVxyXG5cdFx0Ly8g6LCD55So5qC85byP5YyW5pa55rOVXHJcblx0XHRub3dtb250aCA9IHRoaXMuZGF0ZWZvcm1hdChub3dtb250aCk7XHJcblx0XHRjb25zdCBmaXJzdERhdGUgPSBuZXcgRGF0ZShub3d5ZWFyICsgJy8nICsgbm93bW9udGggKyAnLzAxJyk7XHJcblx0XHRyZXR1cm4gZmlyc3REYXRlO1xyXG5cdH0sXHJcblx0Lyoq6I635Y+W5b2T5pyI5pyI5pyA5ZCO5LiA5aSpICovXHJcblx0Z2V0Q3VycmVudE1vbkxhc3REYXRlOiBmdW5jdGlvbihub3cpIHtcclxuXHRcdGNvbnN0IG5leHRNb25GaXJzdERhdGUgPSB0aGlzLmdldE5leHRNb25GaXJzdERhdGUobm93KTtcclxuXHRcdG5leHRNb25GaXJzdERhdGUuc2V0RGF0ZShuZXh0TW9uRmlyc3REYXRlLmdldERhdGUoKSAtIDEpO1xyXG5cdFx0cmV0dXJuIG5leHRNb25GaXJzdERhdGU7XHJcblx0fSxcclxuXHQvKirojrflj5bkuIvkuKrmnIjnrKzkuIDlpKkgKi9cclxuXHRnZXROZXh0TW9uRmlyc3REYXRlOiBmdW5jdGlvbihub3cpIHtcclxuXHRcdGNvbnN0IGN1cnJlbnRNb25GaXJzdERhdGUgPSB0aGlzLmdldEN1cnJlbnRNb25GaXJzdERhdGUobm93KTtcclxuXHRcdGN1cnJlbnRNb25GaXJzdERhdGUuc2V0TW9udGgoY3VycmVudE1vbkZpcnN0RGF0ZS5nZXRNb250aCgpICsgMSk7XHJcblx0XHRyZXR1cm4gY3VycmVudE1vbkZpcnN0RGF0ZTtcclxuXHR9LFxyXG5cdGRhdGVmb3JtYXQ6IGZ1bmN0aW9uKGZtdCkge1xyXG5cdFx0aWYgKGZtdC5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0Zm10ID0gJzAnICsgZm10O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZtdDtcclxuXHR9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRmb3JtYXRUaW1lOiBmb3JtYXRUaW1lLFxyXG5cdGZvcm1hdExvY2F0aW9uOiBmb3JtYXRMb2NhdGlvbixcclxuXHRkYXRlVXRpbHM6IGRhdGVVdGlsc1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45\n");
- /***/ })
- ]]);
|