/
home
/
henzagold
/
branch
/
export
/
File Upload :
llllll
Current File: /home/henzagold/branch/export/2.js
((typeof self !== 'undefined' ? self : this)["webpackJsonp"] = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] || []).push([[2],{ /***/ "./node_modules/vue-persian-datetime-picker/dist/vue-persian-datetime-picker.common.js": /*!*********************************************************************************************!*\ !*** ./node_modules/vue-persian-datetime-picker/dist/vue-persian-datetime-picker.common.js ***! \*********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"24fb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}\n\n/***/ }),\n\n/***/ \"4595\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(\"24fb\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \".fade-enter-active,.fade-leave-active{transition:opacity .5s}.fade-enter,.fade-leave-active{opacity:0}.vpd-fade-scale-enter-active,.vpd-fade-scale-leave-active{transition:opacity .5s}.vpd-fade-scale-enter,.vpd-fade-scale-leave-active{opacity:0}.vpd-fade-scale-enter .vpd-content,.vpd-fade-scale-leave-active .vpd-content{transform:scale(.7);opacity:0}.slideX-enter-active,.slideX-leave-active{position:absolute;top:0;bottom:0;right:0;left:0;opacity:1;transform:translateX(0);transition:all .3s ease-out}.slideX-enter,.slideX-leave-to{opacity:0}.direction-next .slideX-leave-to{transform:translateX(-100%)}.direction-next .slideX-enter,.direction-prev .slideX-leave-to{transform:translateX(100%)}.direction-prev .slideX-enter{transform:translateX(-100%)}.slideY-enter-active,.slideY-leave-active{position:absolute;top:0;bottom:0;right:0;left:0;opacity:1;transform:translateY(0);transition:all .3s ease-in-out}.slideY-enter,.slideY-leave-to{opacity:0}.direction-next .slideY-leave-to{transform:translateY(100%)}.direction-next .slideY-enter,.direction-prev .slideY-leave-to{transform:translateY(-100%)}.direction-prev .slideY-enter{transform:translateY(100%)}.fade-transition{opacity:1;transition:all .3s ease}.fade-enter,.fade-leave{opacity:0}.fast-updating .slideY-enter-active,.fast-updating .slideY-leave-active{transition:all .17s ease-in-out}.fast-updating .direction-next .slideY-leave-to{transform:translateY(45%)}.fast-updating .direction-next .slideY-enter{transform:translateY(-5%)}.fast-updating .direction-prev .slideY-leave-to{transform:translateY(-45%)}.fast-updating .direction-prev .slideY-enter{transform:translateY(5%)}.vpd-dir-rtl .direction-next .slideX-leave-to{transform:translateX(100%)}.vpd-dir-rtl .direction-next .slideX-enter,.vpd-dir-rtl .direction-prev .slideX-leave-to{transform:translateX(-100%)}.vpd-dir-rtl .direction-prev .slideX-enter{transform:translateX(100%)}.vpd-main *,.vpd-wrapper *{box-sizing:border-box}.vpd-clearfix:after,.vpd-clearfix:before{content:\\\" \\\";display:table}.vpd-clearfix:after{clear:both}.vpd-input-group{display:flex;position:relative}.vpd-input-group input{flex-grow:1;border:1px solid #dadada;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;line-height:30px;padding:0 10px}.vpd-input-group input:not(.vpd-is-editable){cursor:pointer}.vpd-input-group label{color:#fff;white-space:nowrap}.vpd-input-group label svg+span{display:inline-block;margin-right:4px;vertical-align:middle}.vpd-input-group.vpd-disabled input,.vpd-input-group.vpd-disabled label{cursor:default}.vpd-input-group .vpd-clear-btn{position:absolute;left:0;top:0;line-height:32px;width:30px;cursor:pointer;text-align:center;font-style:normal;font-family:monospace,sans-serif;opacity:.4}.vpd-input-group .vpd-clear-btn:hover{opacity:.7}.vpd-icon-btn{cursor:pointer;padding:0 10px;display:flex;justify-content:center;align-items:center}.vpd-wrapper{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);z-index:9999}.vpd-container{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.vpd-content{opacity:1;transition:all .4s cubic-bezier(.25,.1,.17,1.84);text-align:right;direction:rtl;width:316px;background-color:#fff;box-shadow:5px 22px 95px -14px #000;cursor:default}.vpd-header{color:#fff;padding:10px 20px}.vpd-body,.vpd-header,.vpd-year-label{position:relative}.vpd-year-label{margin-bottom:2px;height:24px;opacity:.7;overflow:hidden;cursor:pointer;font-size:16px}.vpd-year-label>span{display:inline-block;padding:0 10px;line-height:22px;height:22px;border-width:1px;border-style:solid;border-radius:2px;transition:all .1s ease-out}.vpd-year-label>span:not(:hover){border-color:transparent!important;color:inherit!important}.vpd-date{position:relative;font-size:28px;line-height:40px;height:40px;overflow:hidden}.vpd-date span{display:block;height:inherit;line-height:inherit}.vpd-week{font-size:12px;padding:0 14px;line-height:20px;color:#b9b9b9;margin-bottom:10px;height:20px}.vpd-weekday{float:right;width:40px;text-align:center}.vpd-days{padding:0 18px;position:relative;overflow:hidden;transition:height .3s cubic-bezier(.75,.02,.27,.99)}.vpd-day{width:40px;height:40px;float:right;line-height:40px;position:relative}.vpd-day:not(.vpd-empty){cursor:pointer;transition:color .45s ease;text-align:center}.vpd-day[disabled]{cursor:default;color:#ccc}.vpd-day[disabled] .vpd-day-effect{background-color:transparent}.vpd-day[disabled] .vpd-day-text{color:#ccc}.vpd-day:not([disabled]):hover{color:#fff}.vpd-day:not([disabled]):hover .vpd-day-effect{transform:scale(1);opacity:.6}.vpd-day:not([disabled]).vpd-selected{color:#fff}.vpd-day:not([disabled]).vpd-selected .vpd-day-effect{transform:scale(1);opacity:1}.vpd-day:not([disabled]).vpd-range-between{color:#fff}.vpd-day:not([disabled]).vpd-range-between .vpd-day-effect{transform:scale(.75);opacity:1}.vpd-day:not([disabled]).vpd-range-hover{color:#fff}.vpd-day:not([disabled]).vpd-range-hover .vpd-day-effect{transform:scale(.7);opacity:.6}.vpd-day-effect{position:absolute;width:36px;height:36px;border-radius:50%;top:2px;left:2px;transform:scale(0);opacity:0;transition:all .45s ease}.vpd-controls,.vpd-day-text{position:relative}.vpd-controls{z-index:2;height:50px;line-height:50px;text-align:center}.vpd-controls button{position:relative;background-color:transparent;border:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none;cursor:pointer}.vpd-controls button[disabled]{opacity:.3;cursor:default}.vpd-next,.vpd-prev{width:50px;height:50px;line-height:50px}.vpd-next{float:right}.vpd-prev{float:left}.vpd-arrow{width:11px;height:11px}.vpd-month{position:relative;overflow:hidden}.vpd-month-label{position:absolute;top:0;left:50px;right:50px;overflow:hidden;width:95px;margin-left:auto;margin-right:auto;line-height:50px;height:50px;text-align:center;cursor:pointer}.vpd-month-label>span{display:inline-block;padding:0 5px;line-height:26px;height:26px;border-width:1px;border-style:solid;border-radius:2px;transition:all .1s ease-out;white-space:nowrap}.vpd-month-label>span:not(:hover){border-color:transparent!important;color:inherit!important}.vpd-actions{text-align:right;padding:8px}.vpd-actions button{border:none;background-color:transparent;display:inline-block;cursor:pointer;outline:none;font-size:14px;text-transform:uppercase;min-width:88px;text-align:center;-webkit-appearance:none;line-height:36px;height:36px;transition:all .3s ease}.vpd-actions button:hover{background-color:#f2f2f2}.vpd-actions button[disabled]{opacity:.6;cursor:default}.vpd-addon-list-content{direction:rtl}.vpd-addon-list-item{width:33.33333%;text-align:center;font-size:14px;height:44px;line-height:36px;transition:all .3s ease;color:#8a8a8a;cursor:pointer;float:right;border:4px solid #fff}.vpd-addon-list-item.vpd-selected,.vpd-addon-list-item:hover{background-color:#f9f9f9}.vpd-addon-list-item.vpd-selected{font-weight:700;background-color:#f5f5f5}.vpd-addon-list{width:100%;background-color:#fff;position:absolute;z-index:2;overflow:auto;top:0;bottom:52px;border-bottom:1px solid #eee;direction:ltr}.vpd-addon-list.vpd-can-close{padding-top:30px}.vpd-month-list{padding-top:15px}.vpd-month-list .vpd-addon-list-item{height:54px;line-height:46px}.vpd-addon-list-item[disabled]{opacity:.3;cursor:default!important;background-color:transparent!important}.vpd-close-addon{position:absolute;top:4px;left:4px;z-index:2;width:30px;height:30px;line-height:30px;color:#444;font-family:sans-serif;text-align:center;cursor:pointer;background-color:rgba(0,0,0,.1)}.vpd-time{-ms-user-select:none;user-select:none;-moz-user-select:none;-webkit-user-select:none}.vpd-time .vpd-time-h,.vpd-time .vpd-time-m{position:relative;margin-top:70px;float:left;width:50%;height:100%;text-align:center;color:#a2a2a2}.vpd-time .vpd-time-h .vpd-counter,.vpd-time .vpd-time-m .vpd-counter{font-size:90px;height:100px;line-height:100px;overflow:hidden;position:relative;direction:ltr;transition:opacity .3s ease-in-out}.vpd-time .vpd-time-h .vpd-counter-item,.vpd-time .vpd-time-m .vpd-counter-item{height:inherit;width:51px;display:inline-block;vertical-align:text-top;position:relative}.vpd-time .vpd-time-h:after{position:absolute;top:50%;right:0;content:\\\":\\\";font-size:70px;transform:translate(50%,-50%);transition:inherit}.vpd-time .vpd-down-arrow-btn,.vpd-time .vpd-up-arrow-btn{display:block;cursor:pointer;outline:none;height:34px}.vpd-time.vpd-disabled .vpd-counter-item{opacity:.5}.vpd-time-column .vpd-counter{position:relative}.vpd-time-column .vpd-counter input{position:absolute;z-index:5;border:none;background-color:transparent;top:0;left:0;width:100%;height:100%;text-align:center;outline:none;color:inherit;font-size:inherit;line-height:inherit;font-family:inherit;opacity:0;padding:5% 0 0 0}.vpd-time-column .vpd-counter input:focus{opacity:1}.vpd-time-column .vpd-counter input:focus:not(.is-empty)~div{opacity:0}.vpd-prev-step{position:absolute;top:0;left:0;width:30px;height:30px;text-align:center;padding:9px;cursor:pointer}.vpd-prev-step:hover{background-color:rgba(0,0,0,.2)}[data-type=time] .vpd-time .vpd-time-h,[data-type=time] .vpd-time .vpd-time-m{margin-top:40px}.vpd-is-inline{position:static;background-color:transparent;height:auto;width:auto;display:block;margin-top:2px}.vpd-is-inline .vpd-container{position:static;transform:none}.vpd-is-inline .vpd-content{box-shadow:0 0 1px -1px #000}.vpd-wrapper.vpd-is-popover{position:fixed;width:100px;height:0;z-index:500;right:unset;bottom:unset}.vpd-wrapper.vpd-is-popover .vpd-container{position:absolute;transform:none;top:unset;left:unset;z-index:1}.vpd-wrapper.vpd-is-popover .vpd-content{transition:none;box-shadow:0 3px 8px rgba(0,0,0,.4)}.vpd-wrapper.vpd-is-popover[data-placement=top-left] .vpd-container{bottom:0;right:0}.vpd-wrapper.vpd-is-popover[data-placement=top-left] .vpd-content{box-shadow:0 -3px 8px rgba(0,0,0,.4)}.vpd-wrapper.vpd-is-popover[data-placement=top-right] .vpd-container{bottom:0;left:0}.vpd-wrapper.vpd-is-popover[data-placement=top-right] .vpd-content{box-shadow:0 -3px 8px rgba(0,0,0,.4)}.vpd-wrapper.vpd-is-popover[data-placement=bottom-left] .vpd-container{top:0;right:0}.vpd-wrapper.vpd-is-popover[data-placement=bottom-right] .vpd-container{top:0;left:0}.vpd-no-footer .vpd-addon-list{bottom:0;border-bottom:none}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time{margin-top:10px;display:block!important;position:relative;border-top:1px solid #eee;overflow:hidden}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-addon-list-content{display:flex;justify-content:center;direction:ltr}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-counter-item{width:18px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-counter{height:30px;font-size:20px;line-height:34px;width:40px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-down-arrow-btn,.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-up-arrow-btn{position:absolute;top:0;height:26px;width:26px;margin:2px;border-radius:50%;display:flex;justify-content:center;align-items:center;background-color:rgba(0,0,0,.05)}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-m{margin-top:0;float:none;width:100px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-m .vpd-up-arrow-btn{right:30px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-m .vpd-down-arrow-btn{right:0}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-h{margin-top:0;float:none;width:100px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-h:after{font-size:20px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-h .vpd-counter{margin-left:auto}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-h .vpd-up-arrow-btn{left:0}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time .vpd-time-h .vpd-down-arrow-btn{left:30px}.vpd-wrapper[data-type=datetime].vpd-compact-time .vpd-time svg{height:10px}.vpd-wrapper[data-type=datetime] .vpd-date{font-size:22px}.vpd-wrapper.vpd-is-range .vpd-date{font-size:16px}.vpd-wrapper.vpd-is-multiple .vpd-date{font-size:14px;white-space:normal;line-height:20px}@media screen and (max-height:460px){.vpd-wrapper{overflow:auto;text-align:center}.vpd-wrapper .vpd-container{position:relative;top:0;left:0;transform:none;display:inline-block;margin:20px auto}}.vpd-locales{list-style-type:none;padding:0;margin:0;position:absolute;left:14px;top:12px;line-height:24px;text-align:center;opacity:.7}.vpd-locales li{cursor:pointer}.vpd-simple-body .vpd-header{display:flex;padding:10px;justify-content:space-between}.vpd-simple-body .vpd-locales{position:static;padding:0 5px;line-height:unset}.vpd-simple-content{display:flex;justify-content:center;height:240px;direction:ltr}.vpd-simple-content .vpd-column{height:100%;flex-grow:1;display:flex;flex-flow:column;padding:5px}.vpd-simple-content .vpd-column .vpd-column-header{text-align:center;font-weight:700;color:#000;height:30px;line-height:30px}.vpd-simple-content .vpd-column .vpd-column-content{flex-grow:1;height:100%;overflow:auto;padding-right:4px;position:relative}.vpd-simple-content .vpd-column .vpd-column-content:after,.vpd-simple-content .vpd-column .vpd-column-content:before{display:block;height:80px;content:\\\"\\\"}@media screen and (min-width:640px){.vpd-simple-content .vpd-column .vpd-column-content::-webkit-scrollbar{width:8px}.vpd-simple-content .vpd-column .vpd-column-content::-webkit-scrollbar-track{background:rgba(0,0,0,.05);border-radius:5px}.vpd-simple-content .vpd-column .vpd-column-content::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:5px}.vpd-simple-content .vpd-column .vpd-column-content::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5)}}.vpd-simple-content .vpd-addon-list-item{width:100%;float:none!important;line-height:42px;height:44px;border:1px solid #fff}.vpd-simple-content .vpd-range-first{border-radius:40px 40px 0 0}.vpd-simple-content .vpd-range-between{font-weight:700;background-color:#f5f5f5}.vpd-simple-content .vpd-range-last{border-radius:0 0 40px 40px}.vpd-simple-content .vpd-range-last.vpd-range-first{border-radius:40px}.vpd-simple-content .vpd-column.vpd-is-mounted .vpd-selected:not(.vpd-range-first):not(.vpd-range-last):not([disabled]){position:sticky;top:0;bottom:0}.vpd-is-multiple .vpd-simple-content .vpd-column .vpd-selected{position:static!important}.vpd-dir-ltr .vpd-actions,.vpd-dir-ltr .vpd-addon-list-content,.vpd-dir-ltr .vpd-content{direction:ltr}.vpd-dir-ltr .vpd-actions,.vpd-dir-ltr .vpd-content{text-align:left;font-family:sans-serif}.vpd-dir-ltr .vpd-month-label{font-size:90%}.vpd-dir-ltr .vpd-addon-list-item,.vpd-dir-ltr .vpd-day,.vpd-dir-ltr .vpd-weekday{float:left}.vpd-dir-ltr .vpd-locales{left:auto;right:14px}.vpd-dir-rtl .vpd-next,.vpd-dir-rtl .vpd-prev{transform:rotateY(180deg)}.vpd-dir-rtl .vpd-next{float:left}.vpd-dir-rtl .vpd-prev{float:right}\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n/***/ }),\n\n/***/ \"499e\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, \"default\", function() { return /* binding */ addStylesClient; });\n\n// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/listToStyles.js\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nfunction listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n\n// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/addStylesClient.js\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\n\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nfunction addStylesClient (parentId, list, _isProduction, _options) {\n isProduction = _isProduction\n\n options = _options || {}\n\n var styles = listToStyles(parentId, list)\n addStylesToDom(styles)\n\n return function update (newList) {\n var mayRemove = []\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n domStyle.refs--\n mayRemove.push(domStyle)\n }\n if (newList) {\n styles = listToStyles(parentId, newList)\n addStylesToDom(styles)\n } else {\n styles = []\n }\n for (var i = 0; i < mayRemove.length; i++) {\n var domStyle = mayRemove[i]\n if (domStyle.refs === 0) {\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j]()\n }\n delete stylesInDom[domStyle.id]\n }\n }\n }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n if (domStyle) {\n domStyle.refs++\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j])\n }\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j]))\n }\n if (domStyle.parts.length > item.parts.length) {\n domStyle.parts.length = item.parts.length\n }\n } else {\n var parts = []\n for (var j = 0; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j]))\n }\n stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n }\n }\n}\n\nfunction createStyleElement () {\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n head.appendChild(styleElement)\n return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n var update, remove\n var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n if (styleElement) {\n if (isProduction) {\n // has SSR styles and in production mode.\n // simply do nothing.\n return noop\n } else {\n // has SSR styles but in dev mode.\n // for some reason Chrome can't handle source map in server-rendered\n // style tags - source maps in <style> only works if the style tag is\n // created and inserted dynamically. So we remove the server rendered\n // styles and inject new ones.\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n if (isOldIE) {\n // use singleton mode for IE9.\n var styleIndex = singletonCounter++\n styleElement = singletonElement || (singletonElement = createStyleElement())\n update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n } else {\n // use multi-style-tag mode in all other cases\n styleElement = createStyleElement()\n update = applyToTag.bind(null, styleElement)\n remove = function () {\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n update(obj)\n\n return function updateStyle (newObj /* StyleObjectPart */) {\n if (newObj) {\n if (newObj.css === obj.css &&\n newObj.media === obj.media &&\n newObj.sourceMap === obj.sourceMap) {\n return\n }\n update(obj = newObj)\n } else {\n remove()\n }\n }\n}\n\nvar replaceText = (function () {\n var textStore = []\n\n return function (index, replacement) {\n textStore[index] = replacement\n return textStore.filter(Boolean).join('\\n')\n }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n var css = remove ? '' : obj.css\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css)\n } else {\n var cssNode = document.createTextNode(css)\n var childNodes = styleElement.childNodes\n if (childNodes[index]) styleElement.removeChild(childNodes[index])\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index])\n } else {\n styleElement.appendChild(cssNode)\n }\n }\n}\n\nfunction applyToTag (styleElement, obj) {\n var css = obj.css\n var media = obj.media\n var sourceMap = obj.sourceMap\n\n if (media) {\n styleElement.setAttribute('media', media)\n }\n if (options.ssrId) {\n styleElement.setAttribute(ssrIdKey, obj.id)\n }\n\n if (sourceMap) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n }\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild)\n }\n styleElement.appendChild(document.createTextNode(css))\n }\n}\n\n\n/***/ }),\n\n/***/ \"78a7\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(\"4595\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(\"499e\").default\nvar update = add(\"7baa0944\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ \"8875\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// addapted from the document.currentScript polyfill by Adam Miller\n// MIT license\n// source: https://github.com/amiller-gh/currentScript-polyfill\n\n// added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505\n\n(function (root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(typeof self !== 'undefined' ? self : this, function () {\n function getCurrentScript () {\n var descriptor = Object.getOwnPropertyDescriptor(document, 'currentScript')\n // for chrome\n if (!descriptor && 'currentScript' in document && document.currentScript) {\n return document.currentScript\n }\n\n // for other browsers with native support for currentScript\n if (descriptor && descriptor.get !== getCurrentScript && document.currentScript) {\n return document.currentScript\n }\n \n // IE 8-10 support script readyState\n // IE 11+ & Firefox support stack trace\n try {\n throw new Error();\n }\n catch (err) {\n // Find the second match for the \"at\" string to get file src url from stack.\n var ieStackRegExp = /.*at [^(]*\\((.*):(.+):(.+)\\)$/ig,\n ffStackRegExp = /@([^@]*):(\\d+):(\\d+)\\s*$/ig,\n stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack),\n scriptLocation = (stackDetails && stackDetails[1]) || false,\n line = (stackDetails && stackDetails[2]) || false,\n currentLocation = document.location.href.replace(document.location.hash, ''),\n pageSource,\n inlineScriptSourceRegExp,\n inlineScriptSource,\n scripts = document.getElementsByTagName('script'); // Live NodeList collection\n \n if (scriptLocation === currentLocation) {\n pageSource = document.documentElement.outerHTML;\n inlineScriptSourceRegExp = new RegExp('(?:[^\\\\n]+?\\\\n){0,' + (line - 2) + '}[^<]*<script>([\\\\d\\\\D]*?)<\\\\/script>[\\\\d\\\\D]*', 'i');\n inlineScriptSource = pageSource.replace(inlineScriptSourceRegExp, '$1').trim();\n }\n \n for (var i = 0; i < scripts.length; i++) {\n // If ready state is interactive, return the script tag\n if (scripts[i].readyState === 'interactive') {\n return scripts[i];\n }\n \n // If src matches, return the script tag\n if (scripts[i].src === scriptLocation) {\n return scripts[i];\n }\n \n // If inline source matches, return the script tag\n if (\n scriptLocation === currentLocation &&\n scripts[i].innerHTML &&\n scripts[i].innerHTML.trim() === inlineScriptSource\n ) {\n return scripts[i];\n }\n }\n \n // If no match, return null\n return null;\n }\n };\n\n return getCurrentScript\n}));\n\n\n/***/ }),\n\n/***/ \"b9b3\":\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! moment-jalaali */ \"./node_modules/moment-jalaali/index.js\");\n\n/***/ }),\n\n/***/ \"c32d\":\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! moment */ \"./node_modules/moment/moment.js\");\n\n/***/ }),\n\n/***/ \"fb15\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (true) {\n var getCurrentScript = __webpack_require__(\"8875\")\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/VuePersianDatetimePicker.vue?vue&type=template&id=11456d37&\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"vpd-main\",class:{ 'vpd-is-popover': _vm.isPopover },attrs:{\"data-type\":_vm.type,\"data-locale\":_vm.localeData.name,\"data-locale-dir\":_vm.localeData.config.dir}},[(!_vm.customInputElement)?_c('span',{ref:\"inputGroup\",class:['vpd-input-group', { 'vpd-disabled': _vm.disabled }]},[_c('label',{staticClass:\"vpd-icon-btn\",style:({ 'background-color': _vm.color }),attrs:{\"for\":_vm.id},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();_vm.visible = !_vm.visible}}},[_vm._t(\"label\",[(_vm.type === 'time')?_c('time-icon',{attrs:{\"width\":\"16px\",\"height\":\"16px\"}}):_c('calendar-icon',{attrs:{\"width\":\"16px\",\"height\":\"16px\"}}),(_vm.label)?_c('span',{domProps:{\"textContent\":_vm._s(_vm.label)}}):_vm._e()])],2),_c('input',_vm._b({ref:\"input\",class:[_vm.inputClass, { 'vpd-is-editable': _vm.editable }],attrs:{\"id\":_vm.id,\"type\":\"text\",\"name\":_vm.name,\"placeholder\":_vm.placeholder,\"disabled\":_vm.disabled},domProps:{\"value\":_vm.displayValue},on:{\"focus\":_vm.focus,\"blur\":_vm.setOutput,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.setOutput($event)}}},'input',_vm.inputAttrs,false)),(_vm.altName)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":_vm.altName},domProps:{\"value\":_vm.altFormatted}}):_vm._e(),(_vm.clearable && !_vm.disabled && _vm.displayValue)?_c('i',{staticClass:\"vpd-clear-btn\",on:{\"click\":_vm.clearValue}},[_vm._t(\"clear-btn\",[_vm._v(\"x\")],null,{ vm: _vm.vm })],2):_vm._e()]):(_vm.altName)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":_vm.altName},domProps:{\"value\":_vm.altFormatted}}):_vm._e(),_c('transition',{attrs:{\"name\":_vm.isPopover ? '' : 'vpd-fade-scale'}},[(_vm.visible)?_c('div',{ref:\"picker\",class:[\n 'vpd-wrapper',\n (\"vpd-dir-\" + (_vm.localeData.config.dir)),\n {\n 'vpd-is-range': _vm.range,\n 'vpd-is-inline': _vm.inline,\n 'vpd-is-popover': _vm.isPopover,\n 'vpd-is-multiple': _vm.multiple,\n 'vpd-compact-time': _vm.isCompactTime,\n 'vpd-no-footer': _vm.autoSubmit && !_vm.hasStep('t')\n }\n ],attrs:{\"data-type\":_vm.type},on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.wrapperClick($event)}}},[_c('div',{ref:\"container\",staticClass:\"vpd-container\"},[_c('div',{staticClass:\"vpd-content\"},[(!_vm.simple)?_c('div',{staticClass:\"vpd-header\",style:({ 'background-color': _vm.color })},[(['date', 'datetime', 'year-month'].indexOf(_vm.type) !== -1)?_c('div',{class:['vpd-year-label', _vm.directionClass],on:{\"click\":function($event){return _vm.goStep('y')}}},[_c('transition',{attrs:{\"name\":\"slideY\"}},[_c('span',{key:_vm.selectedDate.xYear()},[_vm._t(\"header-year\",[_vm._v(\" \"+_vm._s(_vm.convertToLocaleNumber(_vm.selectedDate.xYear()))+\" \")],null,{ vm: _vm.vm, selectedDate: _vm.selectedDate })],2)])],1):_vm._e(),(_vm.type !== 'year-month')?_c('div',{class:['vpd-date', _vm.directionClass]},[_c('transition',{attrs:{\"name\":\"slideY\"}},[_c('span',{key:_vm.formattedDate},[_vm._t(\"header-date\",[_vm._v(\" \"+_vm._s(_vm.convertToLocaleNumber(_vm.formattedDate))+\" \")],null,{ vm: _vm.vm, formattedDate: _vm.formattedDate })],2)])],1):_vm._e(),(_vm.locales.length > 1)?_vm._t(\"locales\",[_c('locale-change',{staticClass:\"vpd-locales\",attrs:{\"locale-data\":_vm.localeData,\"core\":_vm.core,\"locales\":_vm.locales},on:{\"change\":_vm.setLocale}})],null,{ vm: _vm.vm, locales: _vm.locales, setLocale: _vm.setLocale }):_vm._e()],2):_vm._e(),_c('div',{staticClass:\"vpd-body\"},[(_vm.simple)?_c('simple-mode',{attrs:{\"lang\":_vm.lang,\"core\":_vm.core,\"range\":_vm.range,\"color\":_vm.color,\"locales\":_vm.locales,\"visible\":_vm.visible,\"multiple\":_vm.multiple,\"years\":_vm.years,\"months\":_vm.months,\"month-days\":_vm.monthDays,\"has-step\":_vm.hasStep,\"selected-dates\":_vm.selectedDates,\"formatted-date\":_vm.formattedDate,\"hovered-item\":_vm.hoveredItem,\"set-locale\":_vm.setLocale,\"convert-to-locale-number\":_vm.convertToLocaleNumber},on:{\"update:hoveredItem\":function($event){_vm.hoveredItem=$event},\"update:hovered-item\":function($event){_vm.hoveredItem=$event},\"select-year\":_vm.selectYear,\"select-month\":_vm.selectMonth,\"select-day\":_vm.selectDay},scopedSlots:_vm._u([{key:\"header-date\",fn:function(slotData){return [_vm._t(\"header-date\",null,null,slotData)]}},{key:\"locales\",fn:function(slotData){return [_vm._t(\"locales\",null,null,slotData)]}},{key:\"year-item\",fn:function(slotData){return [_vm._t(\"year-item\",null,null,slotData)]}},{key:\"month-item\",fn:function(slotData){return [_vm._t(\"month-item\",null,null,slotData)]}},{key:\"day-item\",fn:function(slotData){return [_vm._t(\"day-item\",null,null,slotData)]}}],null,true)}):[(_vm.hasStep('d'))?[_c('div',{class:['vpd-controls', _vm.directionClassDate]},[_c('button',{staticClass:\"vpd-next\",attrs:{\"type\":\"button\",\"title\":_vm.lang.nextMonth,\"disabled\":_vm.nextMonthDisabled},on:{\"click\":_vm.nextMonth}},[_vm._t(\"next-month\",[_c('arrow',{staticStyle:{\"vertical-align\":\"middle\"},attrs:{\"width\":\"10\",\"fill\":\"#000\",\"direction\":\"right\"}})])],2),_c('button',{staticClass:\"vpd-prev\",attrs:{\"type\":\"button\",\"title\":_vm.lang.prevMonth,\"disabled\":_vm.prevMonthDisabled},on:{\"click\":_vm.prevMonth}},[_vm._t(\"prev-month\",[_c('arrow',{staticStyle:{\"vertical-align\":\"middle\"},attrs:{\"width\":\"10\",\"fill\":\"#000\",\"direction\":\"left\"}})])],2),_c('transition',{attrs:{\"name\":\"slideX\"}},[_c('div',{key:_vm.date.xMonth(),staticClass:\"vpd-month-label\",on:{\"click\":function($event){return _vm.goStep('m')}}},[_vm._t(\"month-name\",[_c('span',{style:({ 'border-color': _vm.color, color: _vm.color }),domProps:{\"textContent\":_vm._s(\n _vm.convertToLocaleNumber(_vm.date.xFormat('jMMMM jYYYY'))\n )}})],null,{ vm: _vm.vm, date: _vm.date, color: _vm.color })],2)])],1),_c('div',{staticClass:\"vpd-clearfix\",class:['vpd-month', _vm.directionClassDate]},[_c('div',{staticClass:\"vpd-clearfix vpd-week\"},_vm._l((_vm.weekDays),function(day,i){return _c('div',{key:(i + \"-\" + day),staticClass:\"vpd-weekday\"},[_vm._t(\"weekday\",[_vm._v(\" \"+_vm._s(day)+\" \")],null,{ vm: _vm.vm, day: day })],2)}),0),_c('div',{staticClass:\"vpd-days\",style:({ height: _vm.month.length * 40 + 'px' }),on:{\"mouseleave\":function($event){_vm.hoveredItem = null}}},[_c('transition',{class:_vm.directionClassDate,attrs:{\"name\":\"slideX\"}},[_c('div',{key:_vm.date.xMonth()},_vm._l((_vm.monthDays),function(m,mi){return _c('div',{key:mi,staticClass:\"vpd-clearfix\"},_vm._l((m),function(day,di){return _c('div',_vm._b({key:di,class:[\n 'vpd-day',\n {\n 'vpd-selected': day.selected,\n 'vpd-empty': day.date == null,\n 'vpd-range-first': day.isFirst,\n 'vpd-range-last': day.isLast,\n 'vpd-range-between': day.isBetween,\n 'vpd-range-hover': _vm.hoveredItem && day.isHover\n },\n day.attributes.class\n ],attrs:{\"disabled\":day.disabled},on:{\"click\":function($event){return _vm.selectDay(day)},\"mouseover\":function($event){_vm.hoveredItem = day.date}}},'div',day.attributes,false),[(day.date != null)?[_vm._t(\"day-item\",[_c('span',{staticClass:\"vpd-day-effect\",style:({ 'background-color': _vm.color })}),_c('span',{staticClass:\"vpd-day-text\",domProps:{\"textContent\":_vm._s(\n _vm.convertToLocaleNumber(day.formatted)\n )}})],null,{ vm: _vm.vm, day: day, color: _vm.color })]:_vm._e()],2)}),0)}),0)])],1)])]:_c('div',{staticStyle:{\"height\":\"250px\"}}),_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.hasStep('y'))?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentStep === 'y'),expression:\"currentStep === 'y'\"}],ref:\"year\",class:[\n 'vpd-addon-list',\n { 'vpd-can-close': _vm.steps.length > 1 }\n ]},[_c('div',{staticClass:\"vpd-addon-list-content\"},_vm._l((_vm.years),function(year,yi){return _c('div',_vm._b({key:yi,class:[\n 'vpd-addon-list-item',\n { 'vpd-selected': year.selected },\n year.attributes.class\n ],style:([\n { color: year.selected ? _vm.color : '' },\n year.attributes.style\n ]),attrs:{\"disabled\":year.disabled},on:{\"click\":function($event){return _vm.selectYear(year)}}},'div',year.attributes,false),[_vm._t(\"year-item\",[_vm._v(\" \"+_vm._s(_vm.convertToLocaleNumber(year.xFormat('jYYYY')))+\" \")],null,{ vm: _vm.vm, year: year, color: _vm.color })],2)}),0)]):_vm._e()]),_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.hasStep('m'))?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentStep === 'm'),expression:\"currentStep === 'm'\"}],ref:\"month\",class:[\n 'vpd-addon-list vpd-month-list',\n { 'vpd-can-close': _vm.steps.length > 1 }\n ]},[_c('div',{staticClass:\"vpd-addon-list-content\"},_vm._l((_vm.months),function(monthItem,mi){return _c('div',_vm._b({key:mi,class:[\n 'vpd-addon-list-item',\n { 'vpd-selected': monthItem.selected },\n monthItem.attributes.class\n ],style:([\n { color: monthItem.selected ? _vm.color : '' },\n monthItem.attributes.style\n ]),attrs:{\"disabled\":monthItem.disabled},on:{\"click\":function($event){return _vm.selectMonth(monthItem)}}},'div',monthItem.attributes,false),[_vm._t(\"month-item\",[_vm._v(\" \"+_vm._s(monthItem.xFormat('jMMMM'))+\" \")],null,{ vm: _vm.vm, monthItem: monthItem, color: _vm.color })],2)}),0)]):_vm._e()]),_c('transition',{attrs:{\"name\":\"fade\"}},[(\n _vm.steps.length > 1 && _vm.currentStep !== 'd' && _vm.hasStep('d')\n )?_c('span',{staticClass:\"vpd-close-addon\",on:{\"click\":function($event){return _vm.goStep('d')}}},[_vm._t(\"close-btn\",[_vm._v(\"x\")],null,{ vm: _vm.vm })],2):_vm._e()])],_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.hasStep('t'))?_c('time-section',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentStep === 't'),expression:\"currentStep === 't'\"}],ref:\"time\",attrs:{\"date\":_vm.date,\"time\":_vm.time,\"is-more\":_vm.isMore,\"is-lower\":_vm.isLower,\"min-date\":_vm.minDate,\"max-date\":_vm.maxDate,\"jump-minute\":_vm.jumpMinute,\"round-minute\":_vm.roundMinute,\"get-highlights\":_vm.getHighlights,\"selected-dates\":_vm.selectedDates,\"convert-to-locale-number\":_vm.convertToLocaleNumber},on:{\"update:date\":function($event){_vm.date=$event},\"update:time\":function($event){_vm.time=$event}}}):_vm._e()],1),(_vm.autoSubmit && !_vm.hasStep('t'))?[(!_vm.simple)?_c('br'):_vm._e()]:_c('div',{staticClass:\"vpd-actions\"},[_vm._t(\"submit-btn\",[_c('button',{style:({ color: _vm.color }),attrs:{\"type\":\"button\",\"disabled\":!_vm.canSubmit},domProps:{\"textContent\":_vm._s(_vm.lang.submit)},on:{\"click\":_vm.submit}})],null,{ vm: _vm.vm, canSubmit: _vm.canSubmit, color: _vm.color, submit: _vm.submit, lang: _vm.lang }),(!_vm.inline)?_vm._t(\"cancel-btn\",[_c('button',{style:({ color: _vm.color }),attrs:{\"type\":\"button\"},domProps:{\"textContent\":_vm._s(_vm.lang.cancel)},on:{\"click\":function($event){_vm.visible = false}}})],null,{ vm: _vm.vm, color: _vm.color, lang: _vm.lang }):_vm._e(),(_vm.showNowBtn && _vm.canGoToday)?_vm._t(\"now-btn\",[_c('button',{style:({ color: _vm.color }),attrs:{\"type\":\"button\"},domProps:{\"textContent\":_vm._s(_vm.lang.now)},on:{\"click\":_vm.goToday}})],null,{ vm: _vm.vm, color: _vm.color, goToday: _vm.goToday, lang: _vm.lang }):_vm._e()],2)],2)])])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/VuePersianDatetimePicker.vue?vue&type=template&id=11456d37&\n\n// EXTERNAL MODULE: ./src/assets/scss/style.scss\nvar style = __webpack_require__(\"78a7\");\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Arrow.vue?vue&type=template&id=374124c8&\nvar Arrowvue_type_template_id_374124c8_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{style:({ transform: (\"rotate(\" + _vm.rotation + \"deg)\") }),attrs:{\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 129 129\",\"width\":\"30\",\"height\":\"30\",\"perspectiveAspectRato\":\"none\"}},[_c('path',{attrs:{\"fill\":_vm.fill,\"d\":\"M88.6 121.3c.8.8 1.8 1.2 2.9 1.2s2.1-.4 2.9-1.2a4.1 4.1 0 0 0 0-5.8l-51-51 51-51a4.1 4.1 0 0 0-5.8-5.8l-54\\n 53.9a4.1 4.1 0 0 0 0 5.8l54 53.9z\"}})])}\nvar Arrowvue_type_template_id_374124c8_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/Arrow.vue?vue&type=template&id=374124c8&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Arrow.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var Arrowvue_type_script_lang_js_ = ({\n props: {\n fill: {\n type: String,\n default: '#a2a2a2'\n },\n direction: {\n type: String,\n default: 'up'\n }\n },\n computed: {\n rotation: function rotation() {\n return {\n up: 90,\n left: 0,\n right: 180,\n down: -90\n }[this.direction];\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/Arrow.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_Arrowvue_type_script_lang_js_ = (Arrowvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = 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 () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n// CONCATENATED MODULE: ./src/components/Arrow.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n components_Arrowvue_type_script_lang_js_,\n Arrowvue_type_template_id_374124c8_render,\n Arrowvue_type_template_id_374124c8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var Arrow = (component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/TimeIcon.vue?vue&type=template&id=3b53c8ae&\nvar TimeIconvue_type_template_id_3b53c8ae_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"version\":\"1.1\",\"role\":\"presentation\",\"width\":\"16\",\"height\":\"16\",\"fill\":_vm.fill,\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M256 8C119 8 8 119 8 256S119 504 256 504 504 393 504 256 393 8 256 8zM313.1 358.1L224.9 294C221.8 291.7 220\\n 288.1 220 284.3V116C220 109.4 225.4 104 232 104H280C286.6 104 292 109.4 292 116V253.7L355.5 299.9C360.9 303.8\\n 362 311.3 358.1 316.7L329.9 355.5C326 360.8 318.5 362 313.1 358.1z\"}})])}\nvar TimeIconvue_type_template_id_3b53c8ae_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/TimeIcon.vue?vue&type=template&id=3b53c8ae&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/TimeIcon.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var TimeIconvue_type_script_lang_js_ = ({\n props: {\n fill: {\n type: String,\n default: '#f9f9f9'\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/TimeIcon.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_TimeIconvue_type_script_lang_js_ = (TimeIconvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/TimeIcon.vue\n\n\n\n\n\n/* normalize component */\n\nvar TimeIcon_component = normalizeComponent(\n components_TimeIconvue_type_script_lang_js_,\n TimeIconvue_type_template_id_3b53c8ae_render,\n TimeIconvue_type_template_id_3b53c8ae_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var TimeIcon = (TimeIcon_component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/CalendarIcon.vue?vue&type=template&id=786fd7a5&\nvar CalendarIconvue_type_template_id_786fd7a5_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"version\":\"1.1\",\"width\":\"14\",\"height\":\"16\",\"viewBox\":\"0 0 448 512\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":_vm.fill}},[_c('path',{attrs:{\"d\":\"M436 160H12C5.4 160 0 154.6 0 148V112C0 85.5 21.5 64 48 64H96V12C96 5.4 101.4 0 108 0H148C154.6 0 160 5.4 160\\n 12V64H288V12C288 5.4 293.4 0 300 0H340C346.6 0 352 5.4 352 12V64H400C426.5 64 448 85.5 448 112V148C448 154.6\\n 442.6 160 436 160zM12 192H436C442.6 192 448 197.4 448 204V464C448 490.5 426.5 512 400 512H48C21.5 512 0 490.5 0\\n 464V204C0 197.4 5.4 192 12 192zM128 396C128 389.4 122.6 384 116 384H76C69.4 384 64 389.4 64 396V436C64 442.6 69.4\\n 448 76 448H116C122.6 448 128 442.6 128 436V396zM128 268C128 261.4 122.6 256 116 256H76C69.4 256 64 261.4 64\\n 268V308C64 314.6 69.4 320 76 320H116C122.6 320 128 314.6 128 308V268zM256 396C256 389.4 250.6 384 244\\n 384H204C197.4 384 192 389.4 192 396V436C192 442.6 197.4 448 204 448H244C250.6 448 256 442.6 256 436V396zM256\\n 268C256 261.4 250.6 256 244 256H204C197.4 256 192 261.4 192 268V308C192 314.6 197.4 320 204 320H244C250.6 320 256\\n 314.6 256 308V268zM384 396C384 389.4 378.6 384 372 384H332C325.4 384 320 389.4 320 396V436C320 442.6 325.4 448\\n 332 448H372C378.6 448 384 442.6 384 436V396zM384 268C384 261.4 378.6 256 372 256H332C325.4 256 320 261.4 320\\n 268V308C320 314.6 325.4 320 332 320H372C378.6 320 384 314.6 384 308V268z\"}})])}\nvar CalendarIconvue_type_template_id_786fd7a5_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/CalendarIcon.vue?vue&type=template&id=786fd7a5&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/CalendarIcon.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var CalendarIconvue_type_script_lang_js_ = ({\n props: {\n fill: {\n type: String,\n default: '#f9f9f9'\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/CalendarIcon.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_CalendarIconvue_type_script_lang_js_ = (CalendarIconvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/CalendarIcon.vue\n\n\n\n\n\n/* normalize component */\n\nvar CalendarIcon_component = normalizeComponent(\n components_CalendarIconvue_type_script_lang_js_,\n CalendarIconvue_type_template_id_786fd7a5_render,\n CalendarIconvue_type_template_id_786fd7a5_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var CalendarIcon = (CalendarIcon_component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/LocaleChange.vue?vue&type=template&id=652aafc2&\nvar LocaleChangevue_type_template_id_652aafc2_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_c('li',{domProps:{\"textContent\":_vm._s(_vm.label)},on:{\"click\":function($event){return _vm.$emit('change', _vm.activeItem)}}})])}\nvar LocaleChangevue_type_template_id_652aafc2_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/LocaleChange.vue?vue&type=template&id=652aafc2&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/LocaleChange.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var LocaleChangevue_type_script_lang_js_ = ({\n name: 'LocaleChange',\n props: {\n locales: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n core: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n localeData: {\n type: Object,\n default: function _default() {\n return {};\n }\n }\n },\n computed: {\n activeItem: function activeItem() {\n var activeIndex = this.locales.indexOf(this.localeData.name) + 1;\n if (activeIndex === this.locales.length) activeIndex = 0;\n return String(this.locales[activeIndex]);\n },\n label: function label() {\n return this.core.localesConfig[this.activeItem].lang.label || this.activeItem.toUpperCase();\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/LocaleChange.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_LocaleChangevue_type_script_lang_js_ = (LocaleChangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/LocaleChange.vue\n\n\n\n\n\n/* normalize component */\n\nvar LocaleChange_component = normalizeComponent(\n components_LocaleChangevue_type_script_lang_js_,\n LocaleChangevue_type_template_id_652aafc2_render,\n LocaleChangevue_type_template_id_652aafc2_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var LocaleChange = (LocaleChange_component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/time/TimeSection.vue?vue&type=template&id=1e44cb88&\nvar TimeSectionvue_type_template_id_1e44cb88_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:['vpd-addon-list vpd-time', { 'vpd-disabled': _vm.isDisableTime }]},[_c('div',{staticClass:\"vpd-addon-list-content\"},[_c('time-column',{ref:\"hour\",staticClass:\"vpd-time-h\",attrs:{\"attributes\":_vm.timeAttributes,\"formatter\":_vm.convertToLocaleNumber},on:{\"filled\":_vm.focusNext},model:{value:(_vm.hourModel),callback:function ($$v) {_vm.hourModel=$$v},expression:\"hourModel\"}}),_c('time-column',{ref:\"minute\",staticClass:\"vpd-time-m\",attrs:{\"jump\":_vm.jumpMinute,\"attributes\":_vm.timeAttributes,\"formatter\":_vm.convertToLocaleNumber},model:{value:(_vm.minuteModel),callback:function ($$v) {_vm.minuteModel=$$v},expression:\"minuteModel\"}})],1)])}\nvar TimeSectionvue_type_template_id_1e44cb88_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/time/TimeSection.vue?vue&type=template&id=1e44cb88&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/time/TimeColumn.vue?vue&type=template&id=4c237f17&\nvar TimeColumnvue_type_template_id_4c237f17_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"vpd-time-column\",class:_vm.classFastCounter},[_c('btn',{staticClass:\"vpd-up-arrow-btn\",on:{\"update\":function($event){return _vm.update(1)},\"fastUpdate\":_vm.fastUpdateCounter}},[_c('arrow',{attrs:{\"width\":\"20\",\"direction\":\"up\"}})],1),_c('div',{staticClass:\"vpd-counter\",class:[_vm.directionClass, { 'vpd-is-focused': _vm.isInputFocused }],on:{\"mousewheel\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wheelUpdate($event)},\"DOMMouseScroll\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wheelUpdate($event)}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inputValue),expression:\"inputValue\"}],ref:\"input\",class:{ 'is-empty': !_vm.inputValue.length },attrs:{\"type\":\"tel\",\"maxlength\":_vm.selfValue.length},domProps:{\"value\":(_vm.inputValue)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.inputValue=$event.target.value},_vm.onInputChange],\"focus\":function($event){_vm.isInputFocused = true},\"blur\":function($event){_vm.isInputFocused = false},\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"up\",38,$event.key,[\"Up\",\"ArrowUp\"])){ return null; }$event.preventDefault();return _vm.update(1)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }$event.preventDefault();return _vm.update(-1)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }$event.preventDefault();return _vm.onInputSubmit($event)}]}}),_vm._l((_vm.value.toString().split('')),function(item,i){return _c('div',_vm._b({key:(\"h__\" + i),staticClass:\"vpd-counter-item\"},'div',_vm.attributes,false),[_c('transition',{attrs:{\"name\":\"slideY\"}},[_c('span',{key:(item + \"__\" + i + \"_h\"),style:({\n transition: 'all ' + _vm.transitionSpeed + 'ms ease-in-out'\n }),domProps:{\"textContent\":_vm._s(_vm.formatter(item))}})])],1)})],2),_c('btn',{staticClass:\"vpd-down-arrow-btn\",on:{\"update\":function($event){return _vm.update(-1)},\"fastUpdate\":_vm.fastUpdateCounter}},[_c('arrow',{attrs:{\"width\":\"20\",\"direction\":\"down\"}})],1)],1)}\nvar TimeColumnvue_type_template_id_4c237f17_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/time/TimeColumn.vue?vue&type=template&id=4c237f17&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Btn.vue?vue&type=template&id=770c78cf&\nvar Btnvue_type_template_id_770c78cf_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{on:{\"mousedown\":_vm.down,\"touchstart\":_vm.down,\"mouseup\":_vm.click}},[_vm._t(\"default\")],2)}\nvar Btnvue_type_template_id_770c78cf_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/Btn.vue?vue&type=template&id=770c78cf&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Btn.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n/* harmony default export */ var Btnvue_type_script_lang_js_ = ({\n name: 'Btn',\n data: function data() {\n return {\n interval: false,\n timeout: false,\n intervalDelay: 150\n };\n },\n computed: {},\n mounted: function mounted() {\n var _this = this;\n\n document.addEventListener('mouseup', function () {\n if (_this.timeout || _this.interval) _this.up();\n });\n document.addEventListener('touchend', function () {\n if (_this.timeout || _this.interval) _this.up();\n });\n },\n methods: {\n click: function click() {\n if (!this.interval) {\n this.$emit('update', 1);\n }\n },\n down: function down() {\n var _this2 = this;\n\n window.clearTimeout(this.timeout);\n window.clearInterval(this.interval);\n this.interval = false;\n this.timeout = window.setTimeout(function () {\n _this2.intervalFn();\n }, 600);\n },\n up: function up() {\n window.clearTimeout(this.timeout);\n window.clearInterval(this.interval);\n this.$emit('fastUpdate', false);\n this.timeout = false;\n this.interval = false;\n this.intervalDelay = 150;\n },\n intervalFn: function intervalFn() {\n var _this3 = this;\n\n this.interval = window.setTimeout(function () {\n _this3.$emit('update', 1);\n\n _this3.$emit('fastUpdate', true);\n\n _this3.intervalFn();\n\n if (_this3.intervalDelay > 30) _this3.intervalDelay -= 3;\n }, this.intervalDelay);\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/Btn.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_Btnvue_type_script_lang_js_ = (Btnvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/Btn.vue\n\n\n\n\n\n/* normalize component */\n\nvar Btn_component = normalizeComponent(\n components_Btnvue_type_script_lang_js_,\n Btnvue_type_template_id_770c78cf_render,\n Btnvue_type_template_id_770c78cf_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var Btn = (Btn_component.exports);\n// CONCATENATED MODULE: ./src/modules/utils.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar utils_toString = Object.prototype.toString,\n utils_hasOwnProperty = Object.prototype.hasOwnProperty;\nvar tools = {\n isFunction: function isFunction(obj) {\n return utils_toString.call(obj) === '[object Function]';\n },\n isArray: function isArray(obj) {\n return utils_toString.call(obj) === '[object Array]';\n },\n isPlainObject: function isPlainObject(obj) {\n // Must be an Object.\n // Because of IE, we also have to check the presence of the constructor property.\n // Make sure that DOM nodes and window objects don't pass through, as well\n if (!obj || utils_toString.call(obj) !== '[object Object]' || obj.nodeType || obj.setInterval) {\n return false;\n } // Not own constructor property must be Object\n\n\n if (obj.constructor && !utils_hasOwnProperty.call(obj, 'constructor') && !utils_hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf')) {\n return false;\n } // Own properties are enumerated firstly, so to speed up,\n // if last one is own, then all properties are own.\n\n\n var key;\n\n for (key in obj) {\n ;\n }\n\n return key === undefined || utils_hasOwnProperty.call(obj, key);\n }\n};\n/*\n * jQuery extend function\n * https://gist.github.com/bentsai/3150936\n */\n\nvar extend = function extend() {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false; // Handle a deep copy situation\n\n if (typeof target === 'boolean') {\n deep = target;\n target = arguments[1] || {}; // skip the boolean and the target\n\n i = 2;\n } // Handle case when target is a string or something (possible in deep copy)\n\n\n if (_typeof(target) !== 'object' && !tools.isFunction(target)) {\n target = {};\n } // extend jQuery itself if only one argument is passed\n\n\n if (length === i) {\n target = this;\n --i;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) !== null) {\n // Extend the base object\n for (name in options) {\n src = target[name];\n copy = options[name]; // Prevent never-ending loop\n\n if (target === copy) {\n continue;\n } // Recurse if we're merging plain objects or arrays\n\n\n if (deep && copy && (tools.isPlainObject(copy) || (copyIsArray = tools.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && tools.isArray(src) ? src : [];\n } else {\n clone = src && tools.isPlainObject(src) ? src : {};\n } // Never move original objects, clone them\n\n\n target[name] = extend(deep, clone, copy); // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n};\n/**\n * Simple helper for clone an Array of dates (in moment)\n * @param arr Array\n * @returns Array\n */\n\n\nvar cloneDates = function cloneDates(arr) {\n return arr.map(function (d) {\n return d.clone();\n });\n};\n/**\n * Check if two dates are on the same day\n * @param a Moment date\n * @param b Moment date\n * @returns {boolean}\n */\n\nvar isSameDay = function isSameDay(a, b) {\n a = a.clone().set({\n h: 12,\n m: 0\n });\n return Math.abs(a.diff(b, 'hours')) < 20;\n};\n/**\n * full clone using JSON.stringify\n * @param obj\n * @returns {any}\n */\n\nvar clone = function clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n};\n/**\n * https://stackoverflow.com/a/51029299/3183699\n * @param element\n * @param duration\n * @param callback\n */\n\nvar scrollIntoCenter = function scrollIntoCenter(element) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var parent = element.parentNode;\n var startingTop = parent.scrollTop;\n var parentCenter = parent.offsetHeight / 2;\n var elementCenter = element.offsetHeight / 2;\n var distance = element.offsetTop - startingTop - parentCenter + elementCenter;\n var start;\n\n var done = function done() {\n if (typeof callback === 'function') {\n callback();\n }\n };\n\n if (!duration) {\n parent.scrollTo(0, startingTop + distance);\n done();\n return;\n }\n\n window.requestAnimationFrame(function step(timestamp) {\n if (!start) start = timestamp;\n var time = timestamp - start;\n var percent = Math.min(time / duration, 1);\n parent.scrollTo(0, startingTop + distance * percent); // Proceed with animation as long as we wanted it to.\n\n if (time < duration) {\n window.requestAnimationFrame(step);\n } else {\n done();\n }\n });\n};\nvar addEventListener = function addEventListener(el, type, handler) {\n if (typeof el === 'string') el = document.querySelector(el);\n if (!el) throw new Error('Cant find custom element: ' + el);\n if (el.addEventListener) el.addEventListener(type, handler, true);else el.attachEvent('on' + type, handler, true);\n};\nvar addLiveEvent = function addLiveEvent(selector, event, callback, context) {\n addEventListener(context || document, event, function (e) {\n if (e.target.closest(selector)) callback.call(e.target, e);\n });\n};\n/* harmony default export */ var utils = ({\n extend: extend,\n clone: clone\n});\n// CONCATENATED MODULE: ./src/modules/mixins.js\n\n/**\n * Model Mixin\n */\n\nvar modelMixin = {\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n value: {\n type: [String, Number, Array, Object, Boolean],\n default: ''\n }\n },\n data: function data() {\n return {\n selfValue: ''\n };\n },\n watch: {\n value: {\n handler: function handler(val) {\n if (this.selfValue !== val) this.selfValue = val;\n },\n immediate: true,\n deep: true\n },\n selfValue: function selfValue(val) {\n if (val !== this.value) this.$emit('input', val);\n }\n }\n};\n/**\n * Change route when visible changes\n * @type Object\n */\n\nvar popupRouteChanger = {\n data: function data() {\n return {\n routerQueryName: null\n };\n },\n mounted: function mounted() {\n this.initRouter();\n },\n methods: {\n initRouter: function initRouter() {\n var _this = this;\n\n var isSet = function isSet(prop) {\n return prop || typeof prop === 'string';\n };\n\n var useRouter = this.useRouter;\n if (!isSet(useRouter) || this.isPopover || this.inline || !this.$router) return;\n this.$watch('visible', this.onVisibleChange);\n this.$watch(function () {\n return _this.$route.query;\n }, this.onRouteChange, {\n deep: true,\n immediate: true\n });\n this.routerQueryName = typeof useRouter === 'string' && useRouter ? useRouter : this.id;\n },\n onVisibleChange: function onVisibleChange(visible) {\n var currentRoute = this.$route;\n var query = clone(currentRoute.query || {});\n\n if (visible) {\n query[this.routerQueryName] = 'active';\n this.$router.push({\n query: query\n });\n } else if (query[this.routerQueryName]) {\n this.$router.back();\n }\n },\n onRouteChange: function onRouteChange() {\n var visible = !!this.$route.query[this.routerQueryName];\n if (visible && this.disabled) return;\n this.visible = visible;\n }\n }\n};\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/time/TimeColumn.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var TimeColumnvue_type_script_lang_js_ = ({\n name: 'TimeColumn',\n components: {\n Btn: Btn,\n Arrow: Arrow\n },\n mixins: [modelMixin],\n props: {\n jump: {\n type: Number,\n default: 1\n },\n formatter: {\n type: Function,\n default: null\n },\n attributes: {\n type: Object,\n default: function _default() {\n return {};\n }\n }\n },\n data: function data() {\n return {\n directionClass: 'direction-next',\n classFastCounter: '',\n transitionSpeed: 300,\n timeout: false,\n lastUpdate: new Date().getTime(),\n isInputFocused: false,\n inputValue: ''\n };\n },\n watch: {\n selfValue: {\n handler: function handler(val, old) {\n var _this = this;\n\n if (old) this.setDirection(val, old);\n this.inputValue = this.selfValue;\n this.$nextTick(function () {\n if (_this.value.toString() !== _this.selfValue.toString()) _this.selfValue = _this.value;\n });\n },\n immediate: true\n },\n isInputFocused: function isInputFocused(focused) {\n var _this2 = this;\n\n if (focused) {\n this.inputValue = this.selfValue;\n this.$nextTick(function () {\n _this2.$refs.input.select();\n });\n } else if (this.inputValue) {\n this.onInputSubmit();\n }\n }\n },\n methods: {\n update: function update(value) {\n var _this3 = this;\n\n this.selfValue = +this.selfValue + value * this.jump;\n var now = new Date().getTime(),\n def = now - this.lastUpdate;\n if (20 < def && def < 300) this.transitionSpeed = def;\n this.lastUpdate = now;\n window.clearTimeout(this.timeout);\n this.timeout = window.setTimeout(function () {\n _this3.transitionSpeed = 300;\n }, 300);\n },\n wheelUpdate: function wheelUpdate(e) {\n var goUp = (e.wheelDeltaY || -e.detail) > 0;\n this.update(goUp ? 1 : -1);\n },\n fastUpdateCounter: function fastUpdateCounter(e) {\n if (!e) this.transitionSpeed = 300;\n this.classFastCounter = e ? 'fast-updating' : '';\n },\n setDirection: function setDirection(val, old) {\n this.directionClass = val > old ? 'direction-next' : 'direction-prev';\n },\n onInputSubmit: function onInputSubmit() {\n this.selfValue = this.inputValue;\n this.transitionSpeed = 0;\n },\n onInputChange: function onInputChange(event) {\n if (event.target.value.length >= this.selfValue.length) this.$emit('filled');\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/time/TimeColumn.vue?vue&type=script&lang=js&\n /* harmony default export */ var time_TimeColumnvue_type_script_lang_js_ = (TimeColumnvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/time/TimeColumn.vue\n\n\n\n\n\n/* normalize component */\n\nvar TimeColumn_component = normalizeComponent(\n time_TimeColumnvue_type_script_lang_js_,\n TimeColumnvue_type_template_id_4c237f17_render,\n TimeColumnvue_type_template_id_4c237f17_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var TimeColumn = (TimeColumn_component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/time/TimeSection.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var TimeSectionvue_type_script_lang_js_ = ({\n name: 'TimeSection',\n components: {\n TimeColumn: TimeColumn\n },\n props: {\n date: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n time: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n jumpMinute: {\n type: Number,\n default: 1\n },\n roundMinute: {\n type: Boolean,\n default: false\n },\n isDisableTime: {\n type: Boolean,\n default: false\n },\n getHighlights: {\n type: Function,\n default: null\n },\n isMore: {\n type: Function,\n default: null\n },\n isLower: {\n type: Function,\n default: null\n },\n minDate: {\n type: [Object, Boolean],\n default: false\n },\n maxDate: {\n type: [Object, Boolean],\n default: false\n },\n selectedDates: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n convertToLocaleNumber: {\n type: Function,\n default: null\n }\n },\n computed: {\n timeAttributes: function timeAttributes() {\n return this.getHighlights('t', this.time);\n },\n hourModel: {\n get: function get() {\n return this.time.format('HH');\n },\n set: function set(val) {\n this.setTime(val, 'hours');\n }\n },\n minuteModel: {\n get: function get() {\n return this.time.format('mm');\n },\n set: function set(val) {\n this.setTime(val, 'minutes');\n }\n }\n },\n watch: {\n time: {\n handler: function handler() {\n if (this.roundMinute) {\n var time = this.time.clone();\n var jm = this.jumpMinute;\n var m = (jm - time.minute() % jm) % jm;\n time.add({\n m: m\n });\n\n if (time.valueOf() !== this.time.valueOf()) {\n this.$emit('update:time', time); // @todo: this line should apply time to current date selection,\n // not all of them\n\n this.selectedDates.forEach(function (d) {\n return d.set({\n m: time.minute()\n });\n });\n }\n }\n },\n immediate: true\n }\n },\n methods: {\n setTime: function setTime(v, k) {\n var time = this.time.clone();\n time.set(k, v);\n\n if (this.type !== 'time') {\n var date = this.date.clone();\n time.set({\n year: date.year(),\n month: date.month(),\n date: date.date()\n });\n date.set({\n hour: time.hour(),\n minute: time.minute()\n });\n this.$emit('update:date', date);\n }\n\n if (this.isLower(time)) time = this.minDate.clone();\n if (this.isMore(time)) time = this.maxDate.clone();\n this.$emit('update:time', time);\n },\n focusNext: function focusNext() {\n this.$refs.minute.$el.querySelector('input').focus();\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/time/TimeSection.vue?vue&type=script&lang=js&\n /* harmony default export */ var time_TimeSectionvue_type_script_lang_js_ = (TimeSectionvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/time/TimeSection.vue\n\n\n\n\n\n/* normalize component */\n\nvar TimeSection_component = normalizeComponent(\n time_TimeSectionvue_type_script_lang_js_,\n TimeSectionvue_type_template_id_1e44cb88_render,\n TimeSectionvue_type_template_id_1e44cb88_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var TimeSection = (TimeSection_component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/simple/SimpleMode.vue?vue&type=template&id=80c3a516&\nvar SimpleModevue_type_template_id_80c3a516_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"vpd-simple-body\"},[(_vm.showHeader)?_c('div',{staticClass:\"vpd-header\",style:({ 'background-color': _vm.color })},[_c('div',[_vm._t(\"header-date\",[_vm._v(\" \"+_vm._s(_vm.convertToLocaleNumber(_vm.formattedDate))+\" \")],null,{ vm: _vm.vm, formattedDate: _vm.formattedDate })],2),(_vm.locales.length > 1)?_vm._t(\"locales\",[_c('locale-change',{staticClass:\"vpd-locales\",attrs:{\"locale-data\":_vm.core.locale,\"core\":_vm.core,\"locales\":_vm.locales},on:{\"change\":_vm.setLocale}})],null,{ vm: _vm.vm, locales: _vm.locales, setLocale: _vm.setLocale }):_vm._e()],2):_vm._e(),_c('div',{staticClass:\"vpd-simple-content\",on:{\"mouseleave\":function($event){return _vm.$emit('update:hovered-item', null)}}},[(_vm.hasStep('y'))?_c('simple-mode-column',{attrs:{\"label\":_vm.lang.year,\"value\":_vm.selectedYear,\"locale\":_vm.core.locale.name}},_vm._l((_vm.years),function(year,yi){return _c('div',_vm._b({key:yi,class:[\n 'vpd-addon-list-item',\n { 'vpd-selected': year.selected },\n year.attributes.class\n ],style:([\n { color: year.selected ? _vm.color : '' },\n year.attributes.style\n ]),attrs:{\"disabled\":year.disabled},on:{\"click\":function($event){return _vm.$emit('select-year', year)}}},'div',year.attributes,false),[_vm._t(\"year-item\",[_vm._v(\" \"+_vm._s(_vm.convertToLocaleNumber(year.xFormat('jYYYY')))+\" \")],null,{ vm: _vm.vm, year: year, color: _vm.color })],2)}),0):_vm._e(),(_vm.hasStep('m'))?_c('simple-mode-column',{attrs:{\"label\":_vm.lang.month,\"value\":_vm.selectedMonth,\"locale\":_vm.core.locale.name}},_vm._l((_vm.months),function(month,mi){return _c('div',_vm._b({key:mi,class:[\n 'vpd-addon-list-item',\n { 'vpd-selected': month.selected },\n month.attributes.class\n ],style:([\n { color: month.selected ? _vm.color : '' },\n month.attributes.style\n ]),attrs:{\"disabled\":month.disabled},on:{\"click\":function($event){return _vm.$emit('select-month', month)}}},'div',month.attributes,false),[_vm._t(\"month-item\",[_vm._v(\" \"+_vm._s(month.xFormat('jMMMM'))+\" \")],null,{ vm: _vm.vm, monthItem: month, color: _vm.color })],2)}),0):_vm._e(),(_vm.hasStep('d'))?_c('simple-mode-column',{attrs:{\"label\":_vm.lang.day,\"value\":_vm.selectedDay,\"locale\":_vm.core.locale.name}},_vm._l((_vm.days),function(day,di){return _c('div',_vm._b({key:di,class:[\n 'vpd-addon-list-item',\n {\n 'vpd-selected': day.selected,\n 'vpd-empty': day.date == null,\n 'vpd-range-first': day.isFirst,\n 'vpd-range-last': day.isLast,\n 'vpd-range-between': day.isBetween,\n 'vpd-range-hover': _vm.hoveredItem && day.isHover\n },\n day.attributes.class\n ],style:([\n { color: day.selected || day.isBetween ? _vm.color : '' },\n day.attributes.style\n ]),attrs:{\"disabled\":day.disabled},on:{\"click\":function($event){return _vm.$emit('select-day', day)},\"mouseover\":function($event){return _vm.$emit('update:hovered-item', day.date)}}},'div',day.attributes,false),[(day.date != null)?[_vm._t(\"day-item\",[_vm._v(\" \"+_vm._s(_vm.convertToLocaleNumber(day.formatted))+\" \")],null,{ vm: _vm.vm, day: day, color: _vm.color })]:_vm._e()],2)}),0):_vm._e()],1)])}\nvar SimpleModevue_type_template_id_80c3a516_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/simple/SimpleMode.vue?vue&type=template&id=80c3a516&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"19e1a0a4-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/simple/SimpleModeColumn.vue?vue&type=template&id=396e7ab4&\nvar SimpleModeColumnvue_type_template_id_396e7ab4_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"vpd-column\",class:{ 'vpd-is-mounted': _vm.isMounted },on:{\"mousewheel\":function($event){$event.stopPropagation();}}},[(_vm.label)?_c('div',{staticClass:\"vpd-column-header\",domProps:{\"textContent\":_vm._s(_vm.label)}}):_vm._e(),_c('div',{ref:\"content\",staticClass:\"vpd-column-content\"},[_vm._t(\"default\")],2)])}\nvar SimpleModeColumnvue_type_template_id_396e7ab4_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./src/components/simple/SimpleModeColumn.vue?vue&type=template&id=396e7ab4&\n\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/simple/SimpleModeColumn.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var SimpleModeColumnvue_type_script_lang_js_ = ({\n name: 'SimpleModeColumn',\n props: {\n label: {\n type: String,\n default: null\n },\n locale: {\n type: String,\n default: null\n },\n value: {\n type: [String, Number],\n default: null\n }\n },\n data: function data() {\n return {\n isMounted: false\n };\n },\n watch: {\n value: function value() {\n this.scrollIntoView(200);\n },\n locale: function locale() {\n this.scrollIntoView(200);\n }\n },\n mounted: function mounted() {\n this.scrollIntoView(0);\n },\n methods: {\n scrollIntoView: function scrollIntoView(duration) {\n var _this = this;\n\n try {\n this.isMounted = false;\n this.$nextTick(function () {\n var activeElement = _this.$refs.content.querySelector('.vpd-selected') || _this.$refs.content.querySelector('.vpd-addon-list-item:not([disabled])'); // we want to scroll multiple containers at same time\n // the native `scrollIntoView` method does not work in this case,\n // so we use this method\n\n\n if (activeElement) scrollIntoCenter(activeElement, duration, function () {\n _this.isMounted = true;\n });\n });\n } catch (e) {\n // eslint-disable-next-line\n console.warn(e);\n }\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/simple/SimpleModeColumn.vue?vue&type=script&lang=js&\n /* harmony default export */ var simple_SimpleModeColumnvue_type_script_lang_js_ = (SimpleModeColumnvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/simple/SimpleModeColumn.vue\n\n\n\n\n\n/* normalize component */\n\nvar SimpleModeColumn_component = normalizeComponent(\n simple_SimpleModeColumnvue_type_script_lang_js_,\n SimpleModeColumnvue_type_template_id_396e7ab4_render,\n SimpleModeColumnvue_type_template_id_396e7ab4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var SimpleModeColumn = (SimpleModeColumn_component.exports);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/simple/SimpleMode.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var SimpleModevue_type_script_lang_js_ = ({\n name: 'SimpleMode',\n components: {\n LocaleChange: LocaleChange,\n SimpleModeColumn: SimpleModeColumn\n },\n props: {\n visible: {\n type: Boolean,\n default: false\n },\n multiple: {\n type: Boolean,\n default: false\n },\n range: {\n type: Boolean,\n default: false\n },\n lang: {\n type: Object,\n default: null\n },\n color: {\n type: String,\n default: null\n },\n hasStep: {\n type: Function,\n default: null\n },\n years: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n months: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n monthDays: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n selectedDates: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n formattedDate: {\n type: String,\n default: null\n },\n hoveredItem: {\n type: Date,\n default: null\n },\n locales: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n core: {\n type: Object,\n default: null\n },\n setLocale: {\n type: Function,\n default: null\n },\n convertToLocaleNumber: {\n type: Function,\n default: null\n }\n },\n data: function data() {\n return {\n vm: this\n };\n },\n computed: {\n days: function days() {\n var days = [];\n this.monthDays.forEach(function (week) {\n week.forEach(function (day) {\n if (day.date) days.push(day);\n });\n });\n return days;\n },\n selectedYear: function selectedYear() {\n var year = this.years.find(function (year) {\n return year.selected;\n });\n return year ? year.xFormat('YYYY') : '';\n },\n selectedMonth: function selectedMonth() {\n var month = this.months.find(function (month) {\n return month.selected;\n });\n return month ? month.xFormat('MM') : '';\n },\n selectedDay: function selectedDay() {\n var day = this.days.find(function (day) {\n return day.selected;\n }) || {};\n return day && day.date ? day.date.getDate() : '';\n },\n showHeader: function showHeader() {\n var selectedDatesLength = this.selectedDates.length;\n return this.locales.length > 1 || selectedDatesLength > 1 || this.range && selectedDatesLength || this.multiple && selectedDatesLength;\n }\n }\n});\n// CONCATENATED MODULE: ./src/components/simple/SimpleMode.vue?vue&type=script&lang=js&\n /* harmony default export */ var simple_SimpleModevue_type_script_lang_js_ = (SimpleModevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/components/simple/SimpleMode.vue\n\n\n\n\n\n/* normalize component */\n\nvar SimpleMode_component = normalizeComponent(\n simple_SimpleModevue_type_script_lang_js_,\n SimpleModevue_type_template_id_80c3a516_render,\n SimpleModevue_type_template_id_80c3a516_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var SimpleMode = (SimpleMode_component.exports);\n// EXTERNAL MODULE: external \"moment\"\nvar external_moment_ = __webpack_require__(\"c32d\");\nvar external_moment_default = /*#__PURE__*/__webpack_require__.n(external_moment_);\n\n// EXTERNAL MODULE: external \"moment-jalaali\"\nvar external_moment_jalaali_ = __webpack_require__(\"b9b3\");\nvar external_moment_jalaali_default = /*#__PURE__*/__webpack_require__.n(external_moment_jalaali_);\n\n// CONCATENATED MODULE: ./src/modules/moment.locale.fa.js\n//! moment.js locale configuration\nvar symbolMap = {\n '1': '۱',\n '2': '۲',\n '3': '۳',\n '4': '۴',\n '5': '۵',\n '6': '۶',\n '7': '۷',\n '8': '۸',\n '9': '۹',\n '0': '۰'\n},\n numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0'\n};\n/* harmony default export */ var moment_locale_fa = ({\n months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n weekdays: \"\\u06CC\\u06A9\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062F\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200C\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067E\\u0646\\u062C\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062C\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split('_'),\n weekdaysShort: \"\\u06CC\\u06A9\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062F\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200C\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067E\\u0646\\u062C\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062C\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split('_'),\n weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function isPM(input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem: function meridiem(hour) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar: {\n sameDay: '[امروز ساعت] LT',\n nextDay: '[فردا ساعت] LT',\n nextWeek: 'dddd [ساعت] LT',\n lastDay: '[دیروز ساعت] LT',\n lastWeek: 'dddd [پیش] [ساعت] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'در %s',\n past: '%s پیش',\n s: 'چند ثانیه',\n ss: 'ثانیه d%',\n m: 'یک دقیقه',\n mm: '%d دقیقه',\n h: 'یک ساعت',\n hh: '%d ساعت',\n d: 'یک روز',\n dd: '%d روز',\n M: 'یک ماه',\n MM: '%d ماه',\n y: 'یک سال',\n yy: '%d سال'\n },\n preparse: function preparse(string) {\n return string.replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function postformat(string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n dayOfMonthOrdinalParse: /\\d{1,2}م/,\n ordinal: '%dم',\n week: {\n dow: 6,\n // Saturday is the first day of the week.\n doy: 12 // The week that contains Jan 1st is the first week of the year.\n\n }\n});\n// CONCATENATED MODULE: ./src/modules/core.js\n/*global getYear*/\n\n/*eslint no-undef: [\"error\", { \"typeof\": true }] */\n\n\n\n\nexternal_moment_jalaali_default.a.updateLocale('en', {\n weekdaysMin: 'S_M_T_W_T_F_S'.split('_')\n});\nexternal_moment_jalaali_default.a.updateLocale('fa', moment_locale_fa);\nexternal_moment_jalaali_default.a.loadPersian({\n dialect: 'persian-modern'\n});\n\nexternal_moment_jalaali_default.a.daysInMonth = function (year, month) {\n return external_moment_jalaali_default()({\n year: year,\n month: month\n }).daysInMonth();\n}; //=====================================\n// CONFIG\n//=====================================\n\n\nvar localMethods = {\n fa: {\n daysInMonth: 'jDaysInMonth',\n year: 'jYear',\n month: 'jMonth',\n date: 'jDate',\n day: 'day'\n },\n en: {\n daysInMonth: 'daysInMonth',\n year: 'year',\n month: 'month',\n date: 'date',\n day: 'day'\n }\n};\nvar localesConfig = {\n fa: {\n dow: 6,\n dir: 'rtl',\n displayFormat: null,\n lang: {\n label: 'شمسی',\n submit: 'تایید',\n cancel: 'انصراف',\n now: 'اکنون',\n nextMonth: 'ماه بعد',\n prevMonth: 'ماه قبل',\n year: 'سال',\n month: 'ماه',\n day: 'روز'\n }\n },\n en: {\n dow: 0,\n dir: 'ltr',\n displayFormat: null,\n lang: {\n label: 'میلادی',\n submit: 'Select',\n cancel: 'Cancel',\n now: 'Now',\n nextMonth: 'Next month',\n prevMonth: 'Previous month',\n year: 'Year',\n month: 'Month',\n day: 'Day'\n }\n }\n};\n\nvar core_Core = function Core(defaultLocaleName, defaultOptions) {\n 'use strict';\n\n var Instance = {\n moment: external_moment_jalaali_default.a,\n momentBase: external_moment_default.a,\n locale: {\n name: 'fa',\n config: {}\n },\n localesConfig: {},\n setLocalesConfig: null,\n changeLocale: null,\n getWeekArray: null,\n getYearsList: null,\n getMonthsList: null\n }; //=====================================\n // METHODS\n //=====================================\n\n var xDaysInMonth;\n\n Instance.changeLocale = function changeLocale() {\n var localeName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'fa';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var locale = this.locale;\n var config = utils.clone(localesConfig[localeName] || localesConfig.en);\n var methods = localMethods[localeName] || localMethods.en;\n options = options[localeName] || {};\n if (!localesConfig[localeName]) options = utils.extend(true, {}, utils.clone(localesConfig.en), options);\n locale.name = localeName;\n locale.config = utils.extend(true, config, options);\n xDaysInMonth = external_moment_jalaali_default.a[methods.daysInMonth];\n\n function addMethods(date) {\n if (date === undefined) return;\n\n var nameInLocale = function nameInLocale(name) {\n if (locale.name !== 'fa') name = name.replace(/j/g, '');\n return name;\n };\n\n date.xYear = external_moment_jalaali_default.a.fn[methods.year];\n date.xMonth = external_moment_jalaali_default.a.fn[methods.month];\n date.xDate = external_moment_jalaali_default.a.fn[methods.date];\n\n date.xFormat = function (format) {\n return this.format(nameInLocale(format));\n };\n\n date.xStartOf = function (value) {\n return this.startOf(methods[value]);\n };\n\n date.xEndOf = function (value) {\n return this.endOf(methods[value]);\n };\n\n date.xAdd = function (amount, key) {\n return this.add(amount, methods[key]);\n };\n\n date.xDaysInMonth = function () {\n return xDaysInMonth(this.xYear(), this.xMonth());\n };\n\n date.clone = function () {\n return Instance.moment(this.toDate());\n };\n }\n\n this.moment = function () {\n var date = external_moment_jalaali_default.a.apply(null, arguments);\n date.locale(locale.name);\n addMethods(date);\n return date;\n };\n };\n\n Instance.setLocalesConfig = function (config) {\n var defaults = utils.clone(localesConfig);\n\n for (var key in config) {\n if (config.hasOwnProperty(key) && defaults[key] === undefined) defaults[key] = utils.extend(true, {}, utils.clone(defaults.en), {\n lang: {\n label: key\n }\n }, config[key]);\n }\n\n this.localesConfig = utils.extend(true, defaults, config);\n };\n\n Instance.getWeekArray = function getWeekArray(date) {\n var _this = this;\n\n function addWeek(weekArray, week) {\n var emptyDays = 7 - week.length;\n\n for (var i = 0; i < emptyDays; ++i) {\n week[weekArray.length ? 'push' : 'unshift'](null);\n }\n\n weekArray.push(week);\n }\n\n date.set({\n h: 12,\n m: 0\n });\n var daysInMonth = xDaysInMonth(date.xYear(), date.xMonth());\n var day = date.clone().xDate(1);\n var dayArray = [day.toDate()];\n\n for (var i = 2; i <= daysInMonth; i++) {\n dayArray.push(day.xAdd(1, 'day').toDate());\n }\n\n var weekArray = [];\n var week = [];\n dayArray.forEach(function (day) {\n if (week.length > 0 && day.getDay() === _this.locale.config.dow) {\n addWeek(weekArray, week);\n week = [];\n }\n\n week.push(day);\n\n if (dayArray.indexOf(day) === dayArray.length - 1) {\n addWeek(weekArray, week);\n }\n });\n return weekArray;\n };\n\n Instance.getYearsList = function getYearsList(from, to) {\n var range = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var date = arguments.length > 3 ? arguments[3] : undefined;\n var years = [];\n\n if (range) {\n var year = getYear(date);\n from = year - range;\n to = year + range;\n }\n\n for (var i = from; i <= to; i++) {\n years.push(i);\n }\n\n return years;\n };\n\n Instance.getMonthsList = function getMonthsList(minDate, maxDate, date) {\n var list = [],\n min = minDate ? minDate.clone().xStartOf('month') : -Infinity,\n max = maxDate ? maxDate.clone().xEndOf('month') : Infinity;\n\n for (var i = 0; i < 12; i++) {\n var month = date.clone().xMonth(i);\n var start = month.clone().xStartOf('month');\n var end = month.clone().xEndOf('month');\n month.disabled = start < min || end > max;\n list.push(month);\n }\n\n return list;\n };\n\n Instance.changeLocale(defaultLocaleName, defaultOptions);\n return Instance;\n};\n\n/* harmony default export */ var core = (core_Core);\n\n// CONCATENATED MODULE: ./src/modules/popover-util.js\nvar popover = {\n shouldAppendPicker: function shouldAppendPicker(appendTo, isPopover) {\n return appendTo || isPopover;\n },\n appendChild: function appendChild(parent, child) {\n try {\n var container = document.querySelector(parent || 'body');\n container.appendChild(child);\n } catch (er) {\n document.body.appendChild(child);\n console.warn(\"Cannot append picker to \\\"\".concat(parent, \"\\\"!\"));\n }\n },\n removeChild: function removeChild(element) {\n if (!element) return;\n\n try {\n if (element.$el) element = element.$el;\n if (element.parentNode) element.parentNode.removeChild(element);\n } catch (e) {\n console.warn(\"can't remove child\", e);\n }\n },\n setPickerPosition: function setPickerPosition(pickerWrapperEl, containerEl, inputWrapperEl, options) {\n if (!inputWrapperEl || !pickerWrapperEl) return;\n var _options$placement = options.placement,\n placement = _options$placement === void 0 ? '' : _options$placement,\n _options$offsetX = options.offsetX,\n offsetX = _options$offsetX === void 0 ? 0 : _options$offsetX,\n _options$offsetY = options.offsetY,\n offsetY = _options$offsetY === void 0 ? 0 : _options$offsetY;\n var dataPlacement = '';\n var isOnTop = /top/.test(placement);\n var isOnLeft = /left/.test(placement);\n var isOnRight = /right/.test(placement);\n var isOnBottom = /bottom/.test(placement);\n pickerWrapperEl.style.width = inputWrapperEl.offsetWidth + 'px';\n pickerWrapperEl.style.top = '0px';\n pickerWrapperEl.style.left = '0px';\n var inputWrapperHeight = inputWrapperEl.offsetHeight;\n var inputWrapperRect = inputWrapperEl.getBoundingClientRect();\n var top = inputWrapperRect.top + inputWrapperHeight;\n var distanceY = 0;\n if (!isOnTop && !isOnBottom) isOnTop = top + containerEl.offsetHeight > window.innerHeight;\n if (!isOnLeft && !isOnRight) isOnLeft = inputWrapperRect.right > containerEl.offsetWidth;\n dataPlacement += isOnTop ? 'top' : 'bottom';\n dataPlacement += isOnLeft ? '-left' : '-right';\n\n if (isOnTop) {\n pickerWrapperEl.style.top = inputWrapperRect.top - distanceY - offsetY + 'px';\n } else {\n pickerWrapperEl.style.top = top + distanceY + offsetY + 'px';\n }\n\n offsetX *= isOnRight ? 1 : -1;\n pickerWrapperEl.setAttribute('data-placement', dataPlacement);\n pickerWrapperEl.style.left = inputWrapperRect.left + offsetX + 'px';\n }\n};\n/* harmony default export */ var popover_util = (popover);\n// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/VuePersianDatetimePicker.vue?vue&type=script&lang=js&\nfunction VuePersianDatetimePickervue_type_script_lang_js_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { VuePersianDatetimePickervue_type_script_lang_js_typeof = function _typeof(obj) { return typeof obj; }; } else { VuePersianDatetimePickervue_type_script_lang_js_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return VuePersianDatetimePickervue_type_script_lang_js_typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var VuePersianDatetimePickervue_type_script_lang_js_ = ({\n components: {\n SimpleMode: SimpleMode,\n TimeSection: TimeSection,\n LocaleChange: LocaleChange,\n Arrow: Arrow,\n CalendarIcon: CalendarIcon,\n TimeIcon: TimeIcon\n },\n mixins: [popupRouteChanger],\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n /**\n * Default input value\n * @type Number String\n * @default []\n * @example 1396/08/01 22:45 | 2017/07/07 20:45 | {unix} | 20:45\n */\n value: {\n type: [Number, String, Date, Array],\n default: ''\n },\n\n /**\n * Initial value of picker (if value is empty)\n * @type Number String\n * @default []\n * @example 1370/01/01 22:45 | 2017/01/01 20:45 | {unix} | 20:45\n * @version 1.0.9\n */\n initialValue: {\n type: [Number, String],\n default: ''\n },\n\n /**\n * Format for {value}\n * @type String\n * @default Null\n * @example jYYYY/jMM/jDD HH:mm | YYYY/MM/DD HH:mm | x | HH:mm\n * @if empty {inputFormat} = {format}\n * @see https://github.com/jalaali/moment-jalaali\n */\n inputFormat: {\n type: String,\n default: ''\n },\n\n /**\n * Format only to display the date in the field\n * @type String\n * @default Null\n * @example jYYYY/jMM/jDD HH:mm | YYYY/MM/DD HH:mm | x | HH:mm\n * @if empty {displayFormat} = {format}\n * @see https://github.com/jalaali/moment-jalaali\n */\n displayFormat: {\n type: String,\n default: ''\n },\n\n /**\n * Format for output value\n * @type String\n * @default Null\n * @example jYYYY/jMM/jDD HH:mm | YYYY/MM/DD HH:mm | x | date | HH:mm\n * @if empty, it will be built according to the type of picker:\n *\n * --- time: HH:mm\n * --- datetime: jYYYY/jMM/jDD HH:mm\n * --- date: jYYYY/jMM/jDD\n * --- year: jYYYY\n * --- month: jMM\n *\n * @see https://github.com/jalaali/moment-jalaali\n */\n format: {\n type: String,\n default: ''\n },\n\n /**\n * Step to view on startup\n * @type String\n * @default \"day\"\n * @supported day | month | year | time\n * @example year\n * @desc {year} will show the \"year\" panel at first\n */\n view: {\n type: String,\n default: 'day'\n },\n\n /**\n * The picker type\n * @type String\n * @default \"date\"\n * @supported date | datetime | year | month | time\n */\n type: {\n type: String,\n default: 'date'\n },\n\n /**\n * The minimum of selectable period\n * Based on {inputFormat}\n * @type String\n * @default Null\n * @example 1396/08/01 22:45 | 22:45\n */\n min: {\n type: [String],\n default: ''\n },\n\n /**\n * The maximum of selectable period\n * Based on {inputFormat}\n * @type String\n * @default Null\n * @example 1396/08/01 22:45 | 22:45\n */\n max: {\n type: [String],\n default: ''\n },\n\n /**\n * Editable input or just readonly\n * @type Boolean\n * @default False\n * @if false, the picker will shown on input focus\n * @if true, the picker will shown on label click\n * @note if use <... :editable=\"true\"> with <... :element=\"...\">\n * then you have to control the <... :show=\"true or false\">\n */\n editable: {\n type: Boolean,\n default: false\n },\n\n /**\n * @deprecated\n * The specified input element ID\n * @type String\n * @default Undefined\n * @desc Sometimes you don't want to use picker default input,\n * so you can use our own input element with \"id\" attribute\n * and use <... element=\"the_id_of_input\">\n */\n element: {\n type: String,\n default: undefined\n },\n\n /**\n * New version of `element`\n * @type String (DOMString containing a selector list)\n * @desc use this instead of `element`,\n * this custom input does not need v-model, and it will be automatically updated\n * also supports `display-format`\n * @example .my-custom-input | #my-custom-input | div.foo > input\n * @version 2.10.0\n */\n customInput: {\n type: String,\n default: undefined\n },\n\n /**\n * The form input name when not using {element}\n * @type String\n * @default Undefined\n */\n name: {\n type: String,\n default: undefined\n },\n\n /**\n * The form input className when not using {element}\n * @type String\n * @default \"form-control\"\n */\n inputClass: {\n type: String,\n default: 'form-control'\n },\n\n /**\n * The form input placeholder when not using {element}\n * @type String\n * @default Null\n */\n placeholder: {\n type: String,\n default: ''\n },\n\n /**\n * The name of hidden input element\n * @type String\n * @default Null\n * @if empty, the hidden input will not be created\n */\n altName: {\n type: String,\n default: ''\n },\n\n /**\n * Format for hidden input\n * @type String\n * @default Null\n * @example YYYY-MM-DD HH:mm:ss [GMT]ZZ\n * @if empty, it will be built according to the type of picker:\n *\n * --- time: HH:mm:ss [GMT]ZZ\n * --- datetime: YYYY-MM-DD HH:mm:ss [GMT]ZZ\n * --- date: YYYY-MM-DD\n * --- year: YYYY\n * --- month: MM\n */\n altFormat: {\n type: String,\n default: ''\n },\n\n /**\n * Show or hide the picker\n * @type Boolean\n * @default False\n */\n show: {\n type: Boolean,\n default: false\n },\n\n /**\n * Primary color of picker\n * @type String\n */\n color: {\n type: String,\n default: '#417df4'\n },\n\n /**\n * Auto submit and hide picker when date selected\n * @type Boolean\n * @default False\n */\n autoSubmit: {\n type: Boolean,\n default: false\n },\n\n /**\n * Auto submit when clicking the wrapper\n * @type Boolean\n * @default false\n * @version 1.0.6\n */\n wrapperSubmit: {\n type: Boolean,\n default: false\n },\n\n /**\n * Place to append picker\n * @type String query selector\n * @default null\n * @desc If you want to append picker to another container like 'body',\n * pass the container as append-to=\"body\", append-to=\"#app\", append-to=\"#my-container\"\n * @example 'body', '.main-container', '#app' ...\n * @version 1.1.1\n */\n appendTo: {\n type: String,\n default: null\n },\n\n /**\n * Disable or enable the datepicker\n * @type Boolean\n * @default false\n * @version 1.1.4\n */\n disabled: {\n type: Boolean,\n default: false\n },\n\n /**\n * Disabling\n * @type Array, String, Function, RegExp\n * @default undefined\n * @desc disable some dates\n * @example ['1397/02/02', '1390/10/10'] - \"1397/05/20\" - /1397\\/05\\/(.*)/ ...\n * @version 1.1.4\n */\n disable: {\n type: [Array, String, Function, RegExp],\n default: undefined\n },\n\n /**\n * Label\n * @type String\n * @version 1.1.4\n */\n label: {\n type: String,\n default: ''\n },\n\n /**\n * Highlight items\n * @type Function\n * @desc This prop accepts only function that return an object of attributes.\n * @version 1.1.5\n */\n highlight: {\n type: Function,\n default: null\n },\n\n /**\n * Change minutes by step\n * @type Number\n * @default 1\n * @version: 1.1.6\n */\n jumpMinute: {\n type: Number,\n default: 1\n },\n\n /**\n * Round minutes when jumpMinute is grater than 1\n * @example when jumpMinute = 15 thin will result: 13:00, 13:15, 13:30, 13:45 ...\n * @type Boolean\n * @default false\n * @version: 1.1.6\n */\n roundMinute: {\n type: Boolean,\n default: false\n },\n\n /**\n * Show clear button\n * @type Boolean\n * @default false\n * @version 1.1.6\n */\n clearable: {\n type: Boolean,\n default: false\n },\n\n /**\n * Inline mode\n * @type Boolean\n * @default false\n * @version 1.1.6\n */\n inline: {\n type: Boolean,\n default: false\n },\n\n /**\n * Locales config (\"fa\" for jalali and \"en\" for gregorian)\n * @type String\n * @default fa\n * @example fa | en | fa,en | en,fa\n * @supported fa,en\n * @version 2.0.0\n */\n locale: {\n type: String,\n default: 'fa'\n },\n\n /**\n * Locale configuration\n * @type Object\n * @default {}\n * @version 2.0.0\n * @example\n * {\n * fa: {\n * dow: 6, --first day of week\n * dir: 'rtl', --language direction\n * lang: {\n * label: \"شمسی\",\n * submit: \"تایید\",\n * cancel: \"انصراف\",\n * now: \"اکنون\",\n * nextMonth: \"ماه بعد\",\n * prevMonth: \"ماه قبل\",\n * }\n * },\n * en: { ... }\n * }\n */\n localeConfig: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n\n /**\n * Timezone configuration\n * @type String | Boolean | Function\n * @default false\n * @example true | false | +03:30 | +04:30\n * @version 2.1.0\n */\n timezone: {\n type: [Boolean, String, Function],\n default: false\n },\n\n /**\n * Show or hide NOW button\n * @type Boolean\n * @default true\n * @version 2.1.6\n */\n showNowBtn: {\n type: Boolean,\n default: true\n },\n\n /**\n * Convert to locale numbers or not\n * @type Boolean\n * @default false\n * @example <date-picker convert-numbers />\n * @version 2.3.0\n */\n convertNumbers: {\n type: Boolean,\n default: false\n },\n\n /**\n * Display the time on the front page\n * @type Boolean\n * @default false\n * @example <date-picker compact-time />\n * @version 2.4.0\n */\n compactTime: {\n type: Boolean,\n default: false\n },\n\n /**\n * Enable or disable range mode\n * @type Boolean\n * @default false\n * @example <date-picker range />\n * @version 2.5.0\n */\n range: {\n type: Boolean,\n default: false\n },\n\n /**\n * Enable or disable multiple mode\n * @type Boolean\n * @default false\n * @example <date-picker multiple />\n * @version 2.6.0\n */\n multiple: {\n type: Boolean,\n default: false\n },\n\n /**\n * Enable or disable popover mode\n * @type Boolean | String\n * @accepted:\n * true | false\n * top | bottom | right | left\n * top-left | top-right | bottom-right | bottom-left\n * { offsetX: -10, offsetY: 10 }\n * { placement: 'right', offsetX: 10, offsetY: 10 }\n * @default false\n * @example <date-picker popover />\n * @example <date-picker popover=\"right\" />\n * @example <date-picker popover=\"top-left\" />\n * @version 2.6.0\n */\n popover: {\n type: [Boolean, String, Object],\n default: false\n },\n\n /**\n * If you want to change route address in open/close action,\n * then enable this prop\n * @type Boolean | String\n * @default false\n * @example <date-picker use-router /> => example.com/home?vpd-75454=active\n * @example <date-picker use-router=\"foo\" /> => example.com/home?vpd-foo=active\n * @example <date-picker id=\"bar\" use-router /> => example.com/home?vpd-bar=active\n */\n useRouter: {\n type: [Boolean, String],\n default: false\n },\n\n /**\n * Enable or disable simple mode\n * @type Boolean\n * @default false\n * @example <date-picker simple />\n * @version 2.9.0\n */\n simple: {\n type: Boolean,\n default: false\n },\n\n /**\n * Additional attributes for input element\n * @type Object\n * @default null\n * @example <date-picker :input-attrs=\"{ foo: 'bar' }\" />\n * @version 2.9.0\n */\n inputAttrs: {\n type: Object,\n default: null\n }\n },\n data: function data() {\n var defaultLocale = this.locale.split(',')[0];\n var coreModule = new core(defaultLocale, this.localeConfig);\n return {\n core: coreModule,\n now: coreModule.moment(),\n date: {},\n selectedDates: [],\n hoveredItem: null,\n visible: false,\n directionClass: '',\n directionClassDate: '',\n steps: ['y', 'm', 'd', 't'],\n step: 0,\n shortCodes: {\n year: 'y',\n month: 'm',\n day: 'd',\n time: 't'\n },\n time: {},\n minDate: false,\n maxDate: false,\n output: [],\n updateNowInterval: null,\n locales: ['fa'],\n localeData: coreModule.locale,\n windowWidth: window.innerWidth\n };\n },\n computed: {\n vm: function vm() {\n return this;\n },\n id: function id() {\n var randId = Math.round(Math.random() * 1000000);\n return \"vpd-\".concat(this.$attrs.id || randId);\n },\n currentStep: function currentStep() {\n return this.steps[this.step];\n },\n selectedDate: function selectedDate() {\n var dates = this.selectedDates;\n return dates.length ? dates[dates.length - 1] : this.date;\n },\n formattedDate: function formattedDate() {\n var format = '';\n if (this.hasStep('y')) format = 'jYYYY';\n if (this.hasStep('m')) format += ' jMMMM ';\n\n if (this.hasStep('d')) {\n format = this.isDataArray ? 'jD jMMMM jYYYY' : 'ddd jD jMMMM';\n }\n\n if (this.hasStep('t')) format += ' HH:mm ';\n if (!format) return '';\n var separator = this.multiple ? ' | ' : ' ~ ';\n return this.selectedDates.map(function (d) {\n return d.xFormat(format);\n }).join(separator);\n },\n month: function month() {\n var _this = this;\n\n if (!this.hasStep('d')) return [];\n var min = this.minDate ? this.minDate.clone().startOf('day') : -Infinity;\n var max = this.maxDate ? this.maxDate.clone().endOf('day') : Infinity;\n return this.core.getWeekArray(this.date.clone()).map(function (weekItem) {\n return weekItem.map(function (day) {\n var data = {\n date: day,\n formatted: '',\n selected: false,\n disabled: false,\n attributes: {}\n };\n if (!day) return data;\n\n var dayMoment = _this.core.moment(day);\n\n data.formatted = dayMoment.xDate();\n data.selected = _this.selectedDates.find(function (item) {\n return isSameDay(item, day);\n });\n data.disabled = _this.minDate && dayMoment.clone().startOf('day') < min || _this.maxDate && dayMoment.clone().endOf('day') > max || _this.checkDisable('d', dayMoment);\n\n if (_this.range && !data.disabled) {\n var _this$selectedDates = _slicedToArray(_this.selectedDates, 2),\n start = _this$selectedDates[0],\n end = _this$selectedDates[1];\n\n data.isFirst = data.selected && start && isSameDay(start, day);\n data.isLast = data.selected && end && isSameDay(end, day);\n data.isBetween = !data.selected && start && end && day > start && day < end;\n }\n\n data.attributes = _this.getHighlights('d', dayMoment);\n return data;\n });\n });\n },\n monthDays: function monthDays() {\n var _this2 = this;\n\n if (!this.range || this.selectedDates.length !== 1 || !this.hoveredItem) return this.month;\n var dates = [this.hoveredItem, this.selectedDates[0]];\n dates.sort(function (a, b) {\n return a - b;\n });\n var start = dates[0],\n end = dates[1];\n return this.month.map(function (weekItem) {\n return weekItem.map(function (data) {\n if (!data.date) return data;\n\n if (_this2.range && !data.disabled) {\n var day = data.date;\n data.isHover = !data.selected && day > start && day < end;\n }\n\n return data;\n });\n });\n },\n years: function years() {\n var _this3 = this;\n\n var isYearSectionVisible = this.currentStep === 'y' || this.simple;\n if (!this.hasStep('y') || !isYearSectionVisible) return [];\n var moment = this.core.moment;\n var min = this.minDate ? this.minDate : moment('1300', 'jYYYY');\n var max = this.maxDate ? this.maxDate : min.clone().add(150, 'year');\n var cy = this.date.xYear();\n return this.core.getYearsList(min.xYear(), max.xYear()).reverse().map(function (item) {\n var year = moment().xYear(item);\n year.selected = cy === item;\n year.disabled = _this3.checkDisable('y', item);\n year.attributes = _this3.getHighlights('y', item);\n return year;\n });\n },\n months: function months() {\n var _this4 = this;\n\n if (this.hasStep('m')) {\n var date = this.date.clone().xStartOf('month');\n var months = this.core.getMonthsList(this.minDate, this.maxDate, date);\n months.forEach(function (m) {\n m.selected = _this4.date.xMonth() === m.xMonth();\n m.disabled = m.disabled || _this4.checkDisable('m', m);\n m.attributes = _this4.getHighlights('m', m);\n });\n return months;\n }\n\n return [];\n },\n prevMonthDisabled: function prevMonthDisabled() {\n return this.hasStep('d') && this.minDate && this.minDate.clone().xStartOf('month') >= this.date.clone().xStartOf('month');\n },\n nextMonthDisabled: function nextMonthDisabled() {\n return this.hasStep('d') && this.maxDate && this.maxDate.clone().xStartOf('month') <= this.date.clone().xStartOf('month');\n },\n canGoToday: function canGoToday() {\n if (!this.minDate && !this.maxDate) return true;\n var now = this.now,\n min = this.minDate && this.minDate <= now,\n max = this.maxDate && now <= this.maxDate;\n\n if (this.type === 'time') {\n if (this.minDate) {\n min = now.clone().hour(this.minDate.hour()).minute(this.minDate.minute());\n min = min <= now;\n }\n\n if (this.maxDate) {\n max = this.now.clone().hour(this.maxDate.hour()).minute(this.maxDate.minute());\n max = now <= max;\n }\n }\n\n if (this.minDate && this.maxDate) return min && max;\n if (this.minDate) return min;\n if (this.maxDate) return max;\n return false;\n },\n altFormatted: function altFormatted() {\n var format = this.altFormat;\n\n if (format === '' || format === undefined) {\n switch (this.type) {\n case 'time':\n format = 'HH:mm:ss [GMT]ZZ';\n break;\n\n case 'datetime':\n format = 'YYYY-MM-DD HH:mm:ss [GMT]ZZ';\n break;\n\n case 'date':\n format = 'YYYY-MM-DD';\n break;\n\n case 'year':\n format = 'YYYY';\n break;\n\n case 'month':\n format = 'MM';\n break;\n\n case 'year-month':\n format = 'YYYY-MM';\n break;\n }\n }\n\n return this.output.map(function (d) {\n return d.format(format);\n }).join(' ~ ');\n },\n selfFormat: function selfFormat() {\n var format = this.format;\n\n if (['', undefined, 'date'].indexOf(format) !== -1) {\n switch (this.type) {\n case 'time':\n format = 'HH:mm';\n break;\n\n case 'datetime':\n format = 'jYYYY/jMM/jDD HH:mm';\n break;\n\n case 'date':\n format = 'jYYYY/jMM/jDD';\n break;\n\n case 'year':\n format = 'jYYYY';\n break;\n\n case 'month':\n format = 'jMM';\n break;\n\n case 'year-month':\n format = 'jYYYY/jMM';\n break;\n }\n }\n\n return format;\n },\n selfInputFormat: function selfInputFormat() {\n return this.inputFormat === '' || this.inputFormat === undefined ? this.selfFormat : this.inputFormat;\n },\n outputValue: function outputValue() {\n var _this5 = this;\n\n var output = cloneDates(this.output);\n var format = this.selfFormat;\n var isDate = this.value instanceof Date || this.format === 'date';\n return output.map(function (item) {\n ;\n /j\\w/.test(format) && item.locale('fa');\n\n _this5.setTimezone(item, 'out');\n\n return isDate ? item.toDate() : item.format(format);\n });\n },\n selfDisplayFormat: function selfDisplayFormat() {\n var format = this.displayFormat || this.selfFormat;\n var localeFormat = this.localeData.config.displayFormat;\n\n if (localeFormat) {\n return typeof localeFormat === 'function' ? localeFormat(this) : localeFormat;\n }\n\n if (this.localeData.name !== 'fa') {\n format = format.replace(/j/g, '');\n }\n\n return format;\n },\n displayValue: function displayValue() {\n var _this6 = this;\n\n var format = this.selfDisplayFormat;\n return this.output.map(function (item) {\n var output = item.clone();\n /j\\w/.test(format) && output.locale('fa');\n return _this6.convertToLocaleNumber(output.format(format));\n }).join(' ~ ');\n },\n isDisableTime: function isDisableTime() {\n return this.hasStep('t') && this.checkDisable('t', this.time);\n },\n canSubmit: function canSubmit() {\n if (!this.disable) return true;\n var can = true;\n if (this.hasStep('t')) can = !this.isDisableTime;\n if (can && this.type !== 'time') can = !this.checkDisable('d', this.date);\n return can;\n },\n weekDays: function weekDays() {\n var names = JSON.parse(JSON.stringify(this.core.moment().localeData().weekdaysMin()));\n var dow = this.core.locale.config.dow;\n\n while (dow > 0) {\n names.push(names.shift());\n dow--;\n }\n\n return names;\n },\n lang: function lang() {\n return this.localeData.config.lang;\n },\n isPopover: function isPopover() {\n return (this.popover === '' || this.popover) && this.windowWidth > 480;\n },\n isDataArray: function isDataArray() {\n return this.range || this.multiple;\n },\n isCompactTime: function isCompactTime() {\n return this.compactTime || this.type === 'datetime' && this.simple;\n },\n customInputElement: function customInputElement() {\n if (this.element) return \"#\".concat(this.element);\n return this.customInput;\n }\n },\n watch: {\n type: {\n handler: 'setType',\n immediate: true\n },\n view: {\n handler: 'setView',\n immediate: true\n },\n value: {\n handler: 'updateDates',\n immediate: true\n },\n min: {\n handler: 'setMinMax',\n immediate: true\n },\n max: {\n handler: 'setMinMax',\n immediate: true\n },\n timezone: {\n handler: 'updateDates'\n },\n inline: {\n handler: function handler(val) {\n if (!this.disabled) this.visible = !!val;\n },\n immediate: true\n },\n disabled: {\n handler: function handler(val) {\n if (val) this.visible = false;else if (this.inline) this.visible = true;\n },\n immediate: true\n },\n selectedDate: function selectedDate(val, old) {\n this.setDirection('directionClass', val, old);\n },\n date: function date(val, old) {\n this.setDirection('directionClassDate', val, old);\n if (this.isLower(this.date)) this.date = this.minDate.clone();\n if (this.isMore(this.date)) this.date = this.maxDate.clone();\n },\n visible: function visible(val) {\n var _this7 = this;\n\n if (val) {\n if (this.disabled) return this.visible = false;\n if (this.type === 'datetime' && this.view === 'day') this.goStep('d');\n if (this.view !== 'day') this.goStep(this.shortCodes[this.view] || 'd');\n this.$nextTick(function () {\n if (popover_util.shouldAppendPicker(_this7.appendTo, _this7.isPopover)) {\n popover_util.appendChild(_this7.appendTo, _this7.$refs.picker);\n }\n });\n this.checkScroll();\n this.$nextTick(this.setPlacement);\n this.$emit('open', this);\n } else {\n if (this.inline && !this.disabled) return this.visible = true;\n this.$emit('close', this);\n }\n },\n show: function show(val) {\n this.visible = val;\n },\n locale: {\n immediate: true,\n handler: function handler(val) {\n var locales = val.toString().split(',');\n this.locales = locales.length ? locales : ['fa'];\n if (this.core.locale.name !== this.locales[0]) this.setLocale(this.locales[0]);\n }\n },\n localeConfig: {\n deep: true,\n immediate: true,\n handler: function handler(config) {\n this.core.setLocalesConfig(config);\n this.setLocale(this.localeData.name);\n }\n },\n 'localeData.name': function localeDataName() {\n this.$emit('localeChange', this.localeData);\n this.setMinMax();\n },\n displayValue: {\n immediate: true,\n handler: function handler(displayValue) {\n if (!this.customInput) return;\n var customInput = document.querySelector(this.customInput);\n if (customInput) customInput.value = displayValue;\n }\n }\n },\n created: function created() {\n var _this8 = this;\n\n this.updateNowInterval = setInterval(function () {\n _this8.now = _this8.core.moment();\n }, 1000);\n },\n mounted: function mounted() {\n var _this9 = this;\n\n this.$nextTick(function () {\n if (_this9.customInputElement && !_this9.editable) addLiveEvent(_this9.customInputElement, 'click', _this9.focus);\n if (_this9.customInput && _this9.editable) addLiveEvent(_this9.customInput, 'blur', _this9.setOutput);\n });\n document.body.addEventListener('keydown', function (e) {\n e = e || event;\n var code = e.keyCode;\n if ((code === 9 || code === 27) && _this9.visible) _this9.visible = false;\n });\n window.addEventListener('scroll', this.onWindowScroll, true);\n window.addEventListener('resize', this.onWindowResize, true);\n window.addEventListener('mousedown', this.onWindowClick, true);\n },\n beforeDestroy: function beforeDestroy() {\n window.clearInterval(this.updateNowInterval);\n window.removeEventListener('scroll', this.onWindowScroll, true);\n window.removeEventListener('resize', this.onWindowResize, true);\n window.removeEventListener('mousedown', this.onWindowClick, true);\n\n if (popover_util.shouldAppendPicker(this.appendTo, this.isPopover)) {\n popover_util.removeChild(this.$refs.picker);\n }\n },\n methods: {\n nextStep: function nextStep(fromStep) {\n var _this10 = this;\n\n var checkAndSubmit = function checkAndSubmit() {\n var minLengthToSubmit = _this10.range ? 2 : _this10.multiple ? 0 : 1;\n var passSelected = _this10.selectedDates.length >= minLengthToSubmit;\n\n if ((_this10.autoSubmit || _this10.inline) && passSelected) {\n _this10.submit(!_this10.multiple);\n }\n };\n\n if (this.simple) {\n if (this.type === 'date' && fromStep === 'day' || this.type === 'year-month' && fromStep === 'month' || this.type === 'year' || this.type === 'month') checkAndSubmit();\n return;\n }\n\n var step = this.step + 1;\n if (this.isCompactTime && this.type === 'datetime') step += 1;\n\n if (this.steps.length <= step) {\n checkAndSubmit();\n } else {\n this.step++;\n this.goStep(this.step);\n }\n },\n goStep: function goStep(i) {\n this.step = typeof i === 'number' ? i : this.steps.indexOf(i);\n this.checkScroll();\n },\n checkScroll: function checkScroll() {\n var _this11 = this;\n\n var step = this.currentStep;\n\n if (step === 'y' || step === 'm' && this.visible) {\n setTimeout(function () {\n var container = _this11.$refs[{\n y: 'year',\n m: 'month'\n }[step]];\n\n if (container) {\n var selected = container.querySelector('.vpd-selected');\n\n if (selected && 'scrollIntoView' in selected) {\n try {\n selected.scrollIntoView({\n block: 'center'\n });\n } catch (er) {\n selected.scrollIntoView();\n }\n }\n }\n }, 100);\n }\n },\n nextMonth: function nextMonth() {\n this.date = this.date.clone().xAdd(1, 'month');\n this.$emit('next-month', this.date.clone());\n },\n prevMonth: function prevMonth() {\n this.date = this.date.clone().xAdd(-1, 'month');\n this.$emit('prev-month', this.date.clone());\n },\n selectDay: function selectDay(day) {\n if (!day.date || day.disabled) return;\n var date = this.core.moment(day.date);\n date.set({\n hour: this.time.hour(),\n minute: this.time.minute(),\n second: 0\n });\n this.date = date.clone();\n this.time = date.clone();\n\n if (this.range) {\n var length = this.selectedDates.length;\n\n if (!length || length > 1) {\n this.selectedDates = [date.clone()];\n } else {\n this.selectedDates.push(date.clone());\n this.selectedDates.sort(function (a, b) {\n return a - b;\n });\n }\n } else if (this.multiple) {\n var exists = this.selectedDates.findIndex(function (d) {\n return d.valueOf() === date.valueOf();\n });\n\n if (exists > -1) {\n this.selectedDates.splice(exists, 1);\n } else {\n this.selectedDates.push(date.clone());\n }\n } else {\n this.selectedDates = [date.clone()];\n }\n\n this.nextStep('day');\n },\n selectYear: function selectYear(year) {\n if (year.disabled) return;\n this.date = this.date.clone().xYear(year.xYear());\n this.keepCurrentSelectedDay();\n this.resetSelectedDates(this.date);\n this.$emit('year-change', year);\n this.nextStep('year');\n },\n selectMonth: function selectMonth(month) {\n if (month.disabled) return;\n this.date = this.date.clone().xMonth(month.xMonth());\n this.keepCurrentSelectedDay();\n this.resetSelectedDates(this.date);\n this.$emit('month-change', month);\n this.nextStep('month');\n },\n keepCurrentSelectedDay: function keepCurrentSelectedDay() {\n if (!this.simple || this.multiple || this.range) return;\n var currentDay = this.selectedDate.xDate();\n this.date.xDate(Math.min(currentDay, this.date.xDaysInMonth()));\n this.selectedDates = [this.date.clone()];\n this.autoSubmit && this.submit(false);\n },\n resetSelectedDates: function resetSelectedDates(date) {\n if (['month', 'year-month'].indexOf(this.type) !== -1) this.selectedDates = [date.clone()];\n },\n submit: function submit() {\n var _this12 = this;\n\n var close = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var steps = this.steps.length - 1;\n var selected = this.selectedDates;\n if (this.isCompactTime && this.type === 'datetime') steps -= 1;\n if (this.step < steps && !this.simple) return this.nextStep();\n\n if (this.hasStep('t')) {\n var t = {\n hour: this.time.hour(),\n minute: this.time.minute()\n };\n this.date = this.date.set(t).clone();\n this.selectedDates = selected.map(function (d) {\n return d.set(t).clone();\n });\n }\n\n if (['year', 'month', 'year-month'].indexOf(this.type) !== -1) this.selectedDates = selected.map(function () {\n return _this12.date.clone();\n });\n\n if (this.range && selected.length > 1) {\n selected[0].xStartOf('day');\n selected[1].xEndOf('day');\n }\n\n this.output = cloneDates(selected);\n if (close) this.visible = false;\n\n if (this.isDataArray) {\n this.$emit('input', this.outputValue);\n this.$emit('change', cloneDates(selected));\n } else {\n this.$emit('input', this.outputValue[0]);\n this.$emit('change', selected[0].clone());\n }\n },\n updateDates: function updateDates(payload) {\n var _this13 = this;\n\n if (!payload) payload = this.isDataArray ? [] : ''; // fix: don't update dates if they are already up to date\n\n if (this.date.clone && payload.toString() === this.outputValue.toString()) return;\n var payloadIsArray = payload instanceof Array;\n\n var getDate = function getDate(input) {\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var date;\n var startValue = _this13.value instanceof Array ? _this13.value[index] : _this13.value;\n\n try {\n var isObject = VuePersianDatetimePickervue_type_script_lang_js_typeof(input) === 'object';\n\n if (input instanceof Date) {\n date = _this13.getMoment(input);\n } else if (input && isObject && 'clone' in input) {\n date = input.clone();\n } else if (null === input || !isObject) {\n date = _this13.getMoment(input || startValue || _this13.initialValue);\n }\n\n date = date.isValid() ? date : _this13.core.moment();\n } catch (e) {\n date = _this13.core.moment();\n }\n\n _this13.setTimezone(date, 'in');\n\n return date;\n };\n\n if (payloadIsArray) {\n this.date = getDate(payload[0]);\n this.selectedDates = payload.map(getDate);\n } else {\n this.date = getDate(payload);\n }\n\n if (!this.hasStep('t')) this.date.set({\n hour: 0,\n minute: 0,\n second: 0\n });\n\n if (this.isLower(this.date)) {\n this.date = this.minDate.clone();\n } else if (this.isMore(this.date)) {\n this.date = this.maxDate.clone();\n }\n\n if (!payloadIsArray) this.selectedDates = [this.date.clone()];\n this.time = this.date.clone();\n\n if (this.value !== '' && this.value !== null && this.value.length) {\n this.output = cloneDates(this.selectedDates);\n } else {\n this.output = [];\n this.$forceUpdate();\n }\n },\n goToday: function goToday() {\n var now = this.core.moment();\n if (!this.hasStep('t')) now.set({\n hour: 0,\n minute: 0,\n second: 0\n });\n this.date = now.clone();\n this.time = now.clone();\n this.selectedDates = [now.clone()];\n },\n setType: function setType() {\n switch (this.type) {\n case 'date':\n this.steps = ['y', 'm', 'd'];\n this.goStep('d');\n break;\n\n case 'datetime':\n this.steps = ['y', 'm', 'd', 't'];\n this.goStep('d');\n break;\n\n case 'year':\n this.steps = ['y'];\n this.goStep('y');\n break;\n\n case 'month':\n this.steps = ['m'];\n this.goStep('m');\n break;\n\n case 'time':\n this.steps = ['t'];\n this.goStep('t');\n break;\n\n case 'year-month':\n this.steps = ['y', 'm'];\n this.goStep('y');\n break;\n }\n },\n setView: function setView() {\n var s = this.shortCodes[this.view];\n if (this.hasStep(s)) this.goStep(s);\n },\n setDirection: function setDirection(prop, val, old) {\n this[prop] = val > old ? 'direction-next' : 'direction-prev';\n },\n setMinMax: function setMinMax() {\n var min = this.getMoment(this.min),\n max = this.getMoment(this.max);\n this.minDate = this.min && min.isValid() ? min : false;\n this.maxDate = this.max && max.isValid() ? max : false;\n },\n getMoment: function getMoment(date) {\n var d,\n moment = this.core.moment;\n if (date instanceof Date) return moment(date);\n\n if (this.selfInputFormat === 'x' || this.selfInputFormat === 'unix') {\n d = moment(date.toString().length === 10 ? date * 1000 : date * 1);\n } else {\n try {\n if (date) {\n var a = moment(date, this.selfInputFormat);\n var b = moment(date, this.selfFormat);\n var now = moment(),\n year = now.xYear();\n\n if (this.type === 'month') {\n a.xYear(year);\n b.xYear(year);\n } else if (this.type === 'time') {\n a = now.clone().set({\n h: a.hour(),\n m: a.minute(),\n s: 0\n });\n b = a.clone();\n }\n\n if (a.year() !== b.year() && a.year() < 1900) {\n d = b.clone();\n } else {\n d = a.clone();\n }\n } else {\n d = moment();\n }\n } catch (er) {\n d = moment();\n }\n }\n\n return d;\n },\n focus: function focus(e) {\n if (this.editable) {\n if (this.$refs.input) this.$refs.input.focus();\n } else {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n e.target.blur();\n this.visible = !this.visible;\n } else {\n this.visible = true;\n }\n\n return false;\n }\n },\n hasStep: function hasStep(step) {\n return this.steps.indexOf(step) !== -1;\n },\n setOutput: function setOutput(e) {\n var _this14 = this;\n\n if (!this.editable) return;\n var value = e.target.value.split('~');\n var output = value.map(function (item) {\n item = \"\".concat(item).replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n if (item === '') return null;\n\n try {\n var date = _this14.core.moment(item, _this14.selfDisplayFormat);\n\n return date.isValid() ? date : null;\n } catch (er) {\n return null;\n }\n });\n this.output = output.filter(function (d) {\n return d;\n });\n this.output.sort(function (a, b) {\n return a - b;\n });\n\n if (this.output.length) {\n this.updateDates(cloneDates(this.output));\n this.submit();\n } else {\n this.$forceUpdate();\n this.$emit('input', this.isDataArray ? [] : null);\n this.$emit('change', this.isDataArray ? [] : null);\n }\n },\n wrapperClick: function wrapperClick() {\n this.visible = false;\n\n if (this.wrapperSubmit && this.canSubmit) {\n this.submit();\n }\n },\n applyDevFn: function applyDevFn(fn, k) {\n var result = false;\n var args = Array.prototype.splice.call(arguments, 2);\n\n try {\n args.push({\n y: 'year',\n m: 'month',\n d: 'day',\n t: 'time'\n }[k]);\n result = fn.apply(null, args);\n } catch (er) {\n // eslint-disable-next-line\n console.error(er);\n }\n\n return result;\n },\n checkDisable: function checkDisable(item, value) {\n var _this15 = this;\n\n var thisDisable = this.disable;\n if (!thisDisable) return false;\n\n var type = VuePersianDatetimePickervue_type_script_lang_js_typeof(thisDisable);\n\n var checkString = function checkString(filter, str, date) {\n if (filter instanceof RegExp) return filter.test(str);\n if (filter === str) return true;\n\n if (item === 'd') {\n var length = filter.length;\n return str.substr(0, length) === filter || date.clone().locale('en').format('dddd') === filter;\n }\n\n return false;\n };\n\n var check = function check(date, dateFormatted) {\n var matches = false;\n\n if (type === 'function') {\n return _this15.applyDevFn(thisDisable, item, dateFormatted, date.clone());\n } else if (Object.prototype.toString.call(thisDisable) === '[object Array]') {\n var ii = thisDisable.length;\n\n for (var i = 0; i < ii; i++) {\n matches = checkString(thisDisable[i], dateFormatted, date);\n if (matches) break;\n }\n\n return matches;\n } else if (type === 'string' || thisDisable instanceof RegExp) {\n return checkString(thisDisable, dateFormatted, date);\n }\n\n return false;\n };\n\n var format = this.selfFormat;\n\n if (item === 'y') {\n value = this.core.moment(value, 'jYYYY');\n } else if (item === 'd') {\n // remove time from format\n format = format.replace(/(H(H?))|(h(h?))?(:?)m(m?)(:?)(s(s?))?/g, '');\n }\n\n return check(value, value.format(format));\n },\n getHighlights: function getHighlights(item, value) {\n var highlight = this.highlight;\n if (!highlight || typeof highlight !== 'function') return {};\n if (item === 'y') value = this.core.moment(value, 'jYYYY');\n return this.applyDevFn(highlight, item, value.format(this.selfFormat), value.clone()) || {};\n },\n isLower: function isLower(date) {\n return this.minDate && date < this.minDate;\n },\n isMore: function isMore(date) {\n return this.maxDate && date > this.maxDate;\n },\n clearValue: function clearValue() {\n if (this.disabled) return;\n this.output = [];\n this.$emit('input', this.isDataArray ? [] : '');\n this.$emit('change', this.isDataArray ? [] : null);\n },\n setLocale: function setLocale(locale) {\n this.core.changeLocale(locale, this.localeConfig);\n this.date = this.date.clone();\n this.selectedDates = this.selectedDates.map(function (d) {\n return d.clone();\n });\n this.$forceUpdate();\n },\n setTimezone: function setTimezone(date, mode) {\n var tz = this.timezone;\n\n if (tz) {\n var r = mode === 'in' ? 1 : -1;\n var moment = this.core.momentBase;\n\n if (typeof tz === 'string') {\n var t = moment().utc().format('YYYY-MM-DDTHH:mm:ss') + tz;\n date.add(moment.parseZone(t).utcOffset() * r, 'minutes');\n } else if (typeof tz === 'boolean' && tz) {\n date.subtract(new Date(date).getTimezoneOffset() * r, 'minutes');\n } else if (typeof tz === 'function') {\n date = tz(date, mode, this);\n }\n }\n\n return date.clone();\n },\n convertToLocaleNumber: function convertToLocaleNumber(value) {\n if (this.convertNumbers && this.locale === 'fa') {\n return \"\".concat(value).replace(/\\d+/g, function (digit) {\n var ret = '';\n\n for (var i = 0, len = digit.length; i < len; i++) {\n ret += String.fromCharCode(digit.charCodeAt(i) + 1728);\n }\n\n return ret;\n });\n }\n\n return value;\n },\n getInputGroupElement: function getInputGroupElement() {\n return this.customInput ? document.querySelector(this.customInput) : this.$refs.inputGroup;\n },\n onWindowResize: function onWindowResize() {\n this.windowWidth = window.innerWidth;\n this.setPlacement();\n },\n onWindowScroll: function onWindowScroll() {\n this.setPlacement();\n },\n onWindowClick: function onWindowClick(event) {\n var _this16 = this;\n\n var inputGroup = this.getInputGroupElement();\n\n if (this.isPopover && this.$refs.picker && inputGroup) {\n var isOnPicker = this.$refs.picker.contains(event.target);\n var isOnInput = inputGroup.contains(event.target);\n\n if (!isOnPicker && !isOnInput) {\n // setTimeout because:\n // first read the input value\n // then process the output\n // then close the picker\n setTimeout(function () {\n return _this16.visible = false;\n }, this.editable ? 500 : 0);\n }\n }\n },\n setPlacement: function setPlacement() {\n if (!this.isPopover || !this.visible) return;\n var positionOptions = {\n placement: '',\n offsetX: 0,\n offsetY: 0\n };\n if (VuePersianDatetimePickervue_type_script_lang_js_typeof(this.popover) === 'object' && this.popover) positionOptions = this.popover;else if (typeof this.popover === 'string') positionOptions.placement = this.popover;\n popover_util.setPickerPosition(this.$refs.picker, this.$refs.container, this.getInputGroupElement(), positionOptions);\n }\n },\n install: function install(Vue, options) {\n var component = this;\n options = Vue.util.extend({\n name: 'data-picker',\n props: {}\n }, options);\n\n for (var k in options.props) {\n if (component.props.hasOwnProperty(k)) {\n component.props[k].default = options.props[k];\n }\n }\n\n Vue.component(options.name, component);\n }\n});\n// CONCATENATED MODULE: ./src/VuePersianDatetimePicker.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_VuePersianDatetimePickervue_type_script_lang_js_ = (VuePersianDatetimePickervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./src/VuePersianDatetimePicker.vue\n\n\n\n\n\n/* normalize component */\n\nvar VuePersianDatetimePicker_component = normalizeComponent(\n src_VuePersianDatetimePickervue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var VuePersianDatetimePicker = (VuePersianDatetimePicker_component.exports);\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = __webpack_exports__[\"default\"] = (VuePersianDatetimePicker);\n\n\n\n/***/ })\n\n/******/ })[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLXBlcnNpYW4tZGF0ZXRpbWUtcGlja2VyL2Rpc3QvdnVlLXBlcnNpYW4tZGF0ZXRpbWUtcGlja2VyLmNvbW1vbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtcGVyc2lhbi1kYXRldGltZS1waWNrZXIvZGlzdC92dWUtcGVyc2lhbi1kYXRldGltZS1waWNrZXIuY29tbW9uLmpzP2E2MzIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcImZiMTVcIik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIFwiMjRmYlwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1c2VTb3VyY2VNYXApIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCAnJ11dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuXG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8ICcnKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59IC8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcblxuXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcbiAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICByZXR1cm4gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCI0NTk1XCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIEltcG9ydHNcbnZhciBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiMjRmYlwiKTtcbmV4cG9ydHMgPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pLCBcIi5mYWRlLWVudGVyLWFjdGl2ZSwuZmFkZS1sZWF2ZS1hY3RpdmV7dHJhbnNpdGlvbjpvcGFjaXR5IC41c30uZmFkZS1lbnRlciwuZmFkZS1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowfS52cGQtZmFkZS1zY2FsZS1lbnRlci1hY3RpdmUsLnZwZC1mYWRlLXNjYWxlLWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOm9wYWNpdHkgLjVzfS52cGQtZmFkZS1zY2FsZS1lbnRlciwudnBkLWZhZGUtc2NhbGUtbGVhdmUtYWN0aXZle29wYWNpdHk6MH0udnBkLWZhZGUtc2NhbGUtZW50ZXIgLnZwZC1jb250ZW50LC52cGQtZmFkZS1zY2FsZS1sZWF2ZS1hY3RpdmUgLnZwZC1jb250ZW50e3RyYW5zZm9ybTpzY2FsZSguNyk7b3BhY2l0eTowfS5zbGlkZVgtZW50ZXItYWN0aXZlLC5zbGlkZVgtbGVhdmUtYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZS1vdXR9LnNsaWRlWC1lbnRlciwuc2xpZGVYLWxlYXZlLXRve29wYWNpdHk6MH0uZGlyZWN0aW9uLW5leHQgLnNsaWRlWC1sZWF2ZS10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LmRpcmVjdGlvbi1uZXh0IC5zbGlkZVgtZW50ZXIsLmRpcmVjdGlvbi1wcmV2IC5zbGlkZVgtbGVhdmUtdG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9LmRpcmVjdGlvbi1wcmV2IC5zbGlkZVgtZW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfS5zbGlkZVktZW50ZXItYWN0aXZlLC5zbGlkZVktbGVhdmUtYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKTt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZS1pbi1vdXR9LnNsaWRlWS1lbnRlciwuc2xpZGVZLWxlYXZlLXRve29wYWNpdHk6MH0uZGlyZWN0aW9uLW5leHQgLnNsaWRlWS1sZWF2ZS10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKX0uZGlyZWN0aW9uLW5leHQgLnNsaWRlWS1lbnRlciwuZGlyZWN0aW9uLXByZXYgLnNsaWRlWS1sZWF2ZS10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9LmRpcmVjdGlvbi1wcmV2IC5zbGlkZVktZW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9LmZhZGUtdHJhbnNpdGlvbntvcGFjaXR5OjE7dHJhbnNpdGlvbjphbGwgLjNzIGVhc2V9LmZhZGUtZW50ZXIsLmZhZGUtbGVhdmV7b3BhY2l0eTowfS5mYXN0LXVwZGF0aW5nIC5zbGlkZVktZW50ZXItYWN0aXZlLC5mYXN0LXVwZGF0aW5nIC5zbGlkZVktbGVhdmUtYWN0aXZle3RyYW5zaXRpb246YWxsIC4xN3MgZWFzZS1pbi1vdXR9LmZhc3QtdXBkYXRpbmcgLmRpcmVjdGlvbi1uZXh0IC5zbGlkZVktbGVhdmUtdG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDUlKX0uZmFzdC11cGRhdGluZyAuZGlyZWN0aW9uLW5leHQgLnNsaWRlWS1lbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNSUpfS5mYXN0LXVwZGF0aW5nIC5kaXJlY3Rpb24tcHJldiAuc2xpZGVZLWxlYXZlLXRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKC00NSUpfS5mYXN0LXVwZGF0aW5nIC5kaXJlY3Rpb24tcHJldiAuc2xpZGVZLWVudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUlKX0udnBkLWRpci1ydGwgLmRpcmVjdGlvbi1uZXh0IC5zbGlkZVgtbGVhdmUtdG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9LnZwZC1kaXItcnRsIC5kaXJlY3Rpb24tbmV4dCAuc2xpZGVYLWVudGVyLC52cGQtZGlyLXJ0bCAuZGlyZWN0aW9uLXByZXYgLnNsaWRlWC1sZWF2ZS10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LnZwZC1kaXItcnRsIC5kaXJlY3Rpb24tcHJldiAuc2xpZGVYLWVudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfS52cGQtbWFpbiAqLC52cGQtd3JhcHBlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0udnBkLWNsZWFyZml4OmFmdGVyLC52cGQtY2xlYXJmaXg6YmVmb3Jle2NvbnRlbnQ6XFxcIiBcXFwiO2Rpc3BsYXk6dGFibGV9LnZwZC1jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS52cGQtaW5wdXQtZ3JvdXB7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfS52cGQtaW5wdXQtZ3JvdXAgaW5wdXR7ZmxleC1ncm93OjE7Ym9yZGVyOjFweCBzb2xpZCAjZGFkYWRhO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtsaW5lLWhlaWdodDozMHB4O3BhZGRpbmc6MCAxMHB4fS52cGQtaW5wdXQtZ3JvdXAgaW5wdXQ6bm90KC52cGQtaXMtZWRpdGFibGUpe2N1cnNvcjpwb2ludGVyfS52cGQtaW5wdXQtZ3JvdXAgbGFiZWx7Y29sb3I6I2ZmZjt3aGl0ZS1zcGFjZTpub3dyYXB9LnZwZC1pbnB1dC1ncm91cCBsYWJlbCBzdmcrc3BhbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0udnBkLWlucHV0LWdyb3VwLnZwZC1kaXNhYmxlZCBpbnB1dCwudnBkLWlucHV0LWdyb3VwLnZwZC1kaXNhYmxlZCBsYWJlbHtjdXJzb3I6ZGVmYXVsdH0udnBkLWlucHV0LWdyb3VwIC52cGQtY2xlYXItYnRue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtsaW5lLWhlaWdodDozMnB4O3dpZHRoOjMwcHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLHNhbnMtc2VyaWY7b3BhY2l0eTouNH0udnBkLWlucHV0LWdyb3VwIC52cGQtY2xlYXItYnRuOmhvdmVye29wYWNpdHk6Ljd9LnZwZC1pY29uLWJ0bntjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjAgMTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnZwZC13cmFwcGVye3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC41KTt6LWluZGV4Ojk5OTl9LnZwZC1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS52cGQtY29udGVudHtvcGFjaXR5OjE7dHJhbnNpdGlvbjphbGwgLjRzIGN1YmljLWJlemllciguMjUsLjEsLjE3LDEuODQpO3RleHQtYWxpZ246cmlnaHQ7ZGlyZWN0aW9uOnJ0bDt3aWR0aDozMTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym94LXNoYWRvdzo1cHggMjJweCA5NXB4IC0xNHB4ICMwMDA7Y3Vyc29yOmRlZmF1bHR9LnZwZC1oZWFkZXJ7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHggMjBweH0udnBkLWJvZHksLnZwZC1oZWFkZXIsLnZwZC15ZWFyLWxhYmVse3Bvc2l0aW9uOnJlbGF0aXZlfS52cGQteWVhci1sYWJlbHttYXJnaW4tYm90dG9tOjJweDtoZWlnaHQ6MjRweDtvcGFjaXR5Oi43O292ZXJmbG93OmhpZGRlbjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTZweH0udnBkLXllYXItbGFiZWw+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjAgMTBweDtsaW5lLWhlaWdodDoyMnB4O2hlaWdodDoyMnB4O2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O3RyYW5zaXRpb246YWxsIC4xcyBlYXNlLW91dH0udnBkLXllYXItbGFiZWw+c3Bhbjpub3QoOmhvdmVyKXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50O2NvbG9yOmluaGVyaXQhaW1wb3J0YW50fS52cGQtZGF0ZXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MjhweDtsaW5lLWhlaWdodDo0MHB4O2hlaWdodDo0MHB4O292ZXJmbG93OmhpZGRlbn0udnBkLWRhdGUgc3BhbntkaXNwbGF5OmJsb2NrO2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXR9LnZwZC13ZWVre2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6MCAxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2I5YjliOTttYXJnaW4tYm90dG9tOjEwcHg7aGVpZ2h0OjIwcHh9LnZwZC13ZWVrZGF5e2Zsb2F0OnJpZ2h0O3dpZHRoOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9LnZwZC1kYXlze3BhZGRpbmc6MCAxOHB4O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuM3MgY3ViaWMtYmV6aWVyKC43NSwuMDIsLjI3LC45OSl9LnZwZC1kYXl7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbG9hdDpyaWdodDtsaW5lLWhlaWdodDo0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS52cGQtZGF5Om5vdCgudnBkLWVtcHR5KXtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmNvbG9yIC40NXMgZWFzZTt0ZXh0LWFsaWduOmNlbnRlcn0udnBkLWRheVtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2NjY30udnBkLWRheVtkaXNhYmxlZF0gLnZwZC1kYXktZWZmZWN0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnZwZC1kYXlbZGlzYWJsZWRdIC52cGQtZGF5LXRleHR7Y29sb3I6I2NjY30udnBkLWRheTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Y29sb3I6I2ZmZn0udnBkLWRheTpub3QoW2Rpc2FibGVkXSk6aG92ZXIgLnZwZC1kYXktZWZmZWN0e3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5Oi42fS52cGQtZGF5Om5vdChbZGlzYWJsZWRdKS52cGQtc2VsZWN0ZWR7Y29sb3I6I2ZmZn0udnBkLWRheTpub3QoW2Rpc2FibGVkXSkudnBkLXNlbGVjdGVkIC52cGQtZGF5LWVmZmVjdHt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS52cGQtZGF5Om5vdChbZGlzYWJsZWRdKS52cGQtcmFuZ2UtYmV0d2Vlbntjb2xvcjojZmZmfS52cGQtZGF5Om5vdChbZGlzYWJsZWRdKS52cGQtcmFuZ2UtYmV0d2VlbiAudnBkLWRheS1lZmZlY3R7dHJhbnNmb3JtOnNjYWxlKC43NSk7b3BhY2l0eToxfS52cGQtZGF5Om5vdChbZGlzYWJsZWRdKS52cGQtcmFuZ2UtaG92ZXJ7Y29sb3I6I2ZmZn0udnBkLWRheTpub3QoW2Rpc2FibGVkXSkudnBkLXJhbmdlLWhvdmVyIC52cGQtZGF5LWVmZmVjdHt0cmFuc2Zvcm06c2NhbGUoLjcpO29wYWNpdHk6LjZ9LnZwZC1kYXktZWZmZWN0e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCU7dG9wOjJweDtsZWZ0OjJweDt0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowO3RyYW5zaXRpb246YWxsIC40NXMgZWFzZX0udnBkLWNvbnRyb2xzLC52cGQtZGF5LXRleHR7cG9zaXRpb246cmVsYXRpdmV9LnZwZC1jb250cm9sc3t6LWluZGV4OjI7aGVpZ2h0OjUwcHg7bGluZS1oZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmNlbnRlcn0udnBkLWNvbnRyb2xzIGJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtvdXRsaW5lOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LnZwZC1jb250cm9scyBidXR0b25bZGlzYWJsZWRde29wYWNpdHk6LjM7Y3Vyc29yOmRlZmF1bHR9LnZwZC1uZXh0LC52cGQtcHJldnt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O2xpbmUtaGVpZ2h0OjUwcHh9LnZwZC1uZXh0e2Zsb2F0OnJpZ2h0fS52cGQtcHJldntmbG9hdDpsZWZ0fS52cGQtYXJyb3d7d2lkdGg6MTFweDtoZWlnaHQ6MTFweH0udnBkLW1vbnRoe3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0udnBkLW1vbnRoLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6NTBweDtyaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDo5NXB4O21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87bGluZS1oZWlnaHQ6NTBweDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0udnBkLW1vbnRoLWxhYmVsPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDVweDtsaW5lLWhlaWdodDoyNnB4O2hlaWdodDoyNnB4O2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O3RyYW5zaXRpb246YWxsIC4xcyBlYXNlLW91dDt3aGl0ZS1zcGFjZTpub3dyYXB9LnZwZC1tb250aC1sYWJlbD5zcGFuOm5vdCg6aG92ZXIpe2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9LnZwZC1hY3Rpb25ze3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZzo4cHh9LnZwZC1hY3Rpb25zIGJ1dHRvbntib3JkZXI6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWluLXdpZHRoOjg4cHg7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGluZS1oZWlnaHQ6MzZweDtoZWlnaHQ6MzZweDt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZX0udnBkLWFjdGlvbnMgYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2YyZjJmMn0udnBkLWFjdGlvbnMgYnV0dG9uW2Rpc2FibGVkXXtvcGFjaXR5Oi42O2N1cnNvcjpkZWZhdWx0fS52cGQtYWRkb24tbGlzdC1jb250ZW50e2RpcmVjdGlvbjpydGx9LnZwZC1hZGRvbi1saXN0LWl0ZW17d2lkdGg6MzMuMzMzMzMlO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDo0NHB4O2xpbmUtaGVpZ2h0OjM2cHg7dHJhbnNpdGlvbjphbGwgLjNzIGVhc2U7Y29sb3I6IzhhOGE4YTtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDtib3JkZXI6NHB4IHNvbGlkICNmZmZ9LnZwZC1hZGRvbi1saXN0LWl0ZW0udnBkLXNlbGVjdGVkLC52cGQtYWRkb24tbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOX0udnBkLWFkZG9uLWxpc3QtaXRlbS52cGQtc2VsZWN0ZWR7Zm9udC13ZWlnaHQ6NzAwO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0udnBkLWFkZG9uLWxpc3R7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoyO292ZXJmbG93OmF1dG87dG9wOjA7Ym90dG9tOjUycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZTtkaXJlY3Rpb246bHRyfS52cGQtYWRkb24tbGlzdC52cGQtY2FuLWNsb3Nle3BhZGRpbmctdG9wOjMwcHh9LnZwZC1tb250aC1saXN0e3BhZGRpbmctdG9wOjE1cHh9LnZwZC1tb250aC1saXN0IC52cGQtYWRkb24tbGlzdC1pdGVte2hlaWdodDo1NHB4O2xpbmUtaGVpZ2h0OjQ2cHh9LnZwZC1hZGRvbi1saXN0LWl0ZW1bZGlzYWJsZWRde29wYWNpdHk6LjM7Y3Vyc29yOmRlZmF1bHQhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS52cGQtY2xvc2UtYWRkb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjRweDtsZWZ0OjRweDt6LWluZGV4OjI7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiM0NDQ7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS52cGQtdGltZXstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmV9LnZwZC10aW1lIC52cGQtdGltZS1oLC52cGQtdGltZSAudnBkLXRpbWUtbXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjcwcHg7ZmxvYXQ6bGVmdDt3aWR0aDo1MCU7aGVpZ2h0OjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2EyYTJhMn0udnBkLXRpbWUgLnZwZC10aW1lLWggLnZwZC1jb3VudGVyLC52cGQtdGltZSAudnBkLXRpbWUtbSAudnBkLWNvdW50ZXJ7Zm9udC1zaXplOjkwcHg7aGVpZ2h0OjEwMHB4O2xpbmUtaGVpZ2h0OjEwMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXJlY3Rpb246bHRyO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgZWFzZS1pbi1vdXR9LnZwZC10aW1lIC52cGQtdGltZS1oIC52cGQtY291bnRlci1pdGVtLC52cGQtdGltZSAudnBkLXRpbWUtbSAudnBkLWNvdW50ZXItaXRlbXtoZWlnaHQ6aW5oZXJpdDt3aWR0aDo1MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wO3Bvc2l0aW9uOnJlbGF0aXZlfS52cGQtdGltZSAudnBkLXRpbWUtaDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7Y29udGVudDpcXFwiOlxcXCI7Zm9udC1zaXplOjcwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSg1MCUsLTUwJSk7dHJhbnNpdGlvbjppbmhlcml0fS52cGQtdGltZSAudnBkLWRvd24tYXJyb3ctYnRuLC52cGQtdGltZSAudnBkLXVwLWFycm93LWJ0bntkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtoZWlnaHQ6MzRweH0udnBkLXRpbWUudnBkLWRpc2FibGVkIC52cGQtY291bnRlci1pdGVte29wYWNpdHk6LjV9LnZwZC10aW1lLWNvbHVtbiAudnBkLWNvdW50ZXJ7cG9zaXRpb246cmVsYXRpdmV9LnZwZC10aW1lLWNvbHVtbiAudnBkLWNvdW50ZXIgaW5wdXR7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo1O2JvcmRlcjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7b3V0bGluZTpub25lO2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDtmb250LWZhbWlseTppbmhlcml0O29wYWNpdHk6MDtwYWRkaW5nOjUlIDAgMCAwfS52cGQtdGltZS1jb2x1bW4gLnZwZC1jb3VudGVyIGlucHV0OmZvY3Vze29wYWNpdHk6MX0udnBkLXRpbWUtY29sdW1uIC52cGQtY291bnRlciBpbnB1dDpmb2N1czpub3QoLmlzLWVtcHR5KX5kaXZ7b3BhY2l0eTowfS52cGQtcHJldi1zdGVwe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDozMHB4O2hlaWdodDozMHB4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6OXB4O2N1cnNvcjpwb2ludGVyfS52cGQtcHJldi1zdGVwOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMil9W2RhdGEtdHlwZT10aW1lXSAudnBkLXRpbWUgLnZwZC10aW1lLWgsW2RhdGEtdHlwZT10aW1lXSAudnBkLXRpbWUgLnZwZC10aW1lLW17bWFyZ2luLXRvcDo0MHB4fS52cGQtaXMtaW5saW5le3Bvc2l0aW9uOnN0YXRpYztiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2hlaWdodDphdXRvO3dpZHRoOmF1dG87ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjJweH0udnBkLWlzLWlubGluZSAudnBkLWNvbnRhaW5lcntwb3NpdGlvbjpzdGF0aWM7dHJhbnNmb3JtOm5vbmV9LnZwZC1pcy1pbmxpbmUgLnZwZC1jb250ZW50e2JveC1zaGFkb3c6MCAwIDFweCAtMXB4ICMwMDB9LnZwZC13cmFwcGVyLnZwZC1pcy1wb3BvdmVye3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMHB4O2hlaWdodDowO3otaW5kZXg6NTAwO3JpZ2h0OnVuc2V0O2JvdHRvbTp1bnNldH0udnBkLXdyYXBwZXIudnBkLWlzLXBvcG92ZXIgLnZwZC1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOm5vbmU7dG9wOnVuc2V0O2xlZnQ6dW5zZXQ7ei1pbmRleDoxfS52cGQtd3JhcHBlci52cGQtaXMtcG9wb3ZlciAudnBkLWNvbnRlbnR7dHJhbnNpdGlvbjpub25lO2JveC1zaGFkb3c6MCAzcHggOHB4IHJnYmEoMCwwLDAsLjQpfS52cGQtd3JhcHBlci52cGQtaXMtcG9wb3ZlcltkYXRhLXBsYWNlbWVudD10b3AtbGVmdF0gLnZwZC1jb250YWluZXJ7Ym90dG9tOjA7cmlnaHQ6MH0udnBkLXdyYXBwZXIudnBkLWlzLXBvcG92ZXJbZGF0YS1wbGFjZW1lbnQ9dG9wLWxlZnRdIC52cGQtY29udGVudHtib3gtc2hhZG93OjAgLTNweCA4cHggcmdiYSgwLDAsMCwuNCl9LnZwZC13cmFwcGVyLnZwZC1pcy1wb3BvdmVyW2RhdGEtcGxhY2VtZW50PXRvcC1yaWdodF0gLnZwZC1jb250YWluZXJ7Ym90dG9tOjA7bGVmdDowfS52cGQtd3JhcHBlci52cGQtaXMtcG9wb3ZlcltkYXRhLXBsYWNlbWVudD10b3AtcmlnaHRdIC52cGQtY29udGVudHtib3gtc2hhZG93OjAgLTNweCA4cHggcmdiYSgwLDAsMCwuNCl9LnZwZC13cmFwcGVyLnZwZC1pcy1wb3BvdmVyW2RhdGEtcGxhY2VtZW50PWJvdHRvbS1sZWZ0XSAudnBkLWNvbnRhaW5lcnt0b3A6MDtyaWdodDowfS52cGQtd3JhcHBlci52cGQtaXMtcG9wb3ZlcltkYXRhLXBsYWNlbWVudD1ib3R0b20tcmlnaHRdIC52cGQtY29udGFpbmVye3RvcDowO2xlZnQ6MH0udnBkLW5vLWZvb3RlciAudnBkLWFkZG9uLWxpc3R7Ym90dG9tOjA7Ym9yZGVyLWJvdHRvbTpub25lfS52cGQtd3JhcHBlcltkYXRhLXR5cGU9ZGF0ZXRpbWVdLnZwZC1jb21wYWN0LXRpbWUgLnZwZC10aW1le21hcmdpbi10b3A6MTBweDtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO292ZXJmbG93OmhpZGRlbn0udnBkLXdyYXBwZXJbZGF0YS10eXBlPWRhdGV0aW1lXS52cGQtY29tcGFjdC10aW1lIC52cGQtdGltZSAudnBkLWFkZG9uLWxpc3QtY29udGVudHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtkaXJlY3Rpb246bHRyfS52cGQtd3JhcHBlcltkYXRhLXR5cGU9ZGF0ZXRpbWVdLnZwZC1jb21wYWN0LXRpbWUgLnZwZC10aW1lIC52cGQtY291bnRlci1pdGVte3dpZHRoOjE4cHh9LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC1jb3VudGVye2hlaWdodDozMHB4O2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjM0cHg7d2lkdGg6NDBweH0udnBkLXdyYXBwZXJbZGF0YS10eXBlPWRhdGV0aW1lXS52cGQtY29tcGFjdC10aW1lIC52cGQtdGltZSAudnBkLWRvd24tYXJyb3ctYnRuLC52cGQtd3JhcHBlcltkYXRhLXR5cGU9ZGF0ZXRpbWVdLnZwZC1jb21wYWN0LXRpbWUgLnZwZC10aW1lIC52cGQtdXAtYXJyb3ctYnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2hlaWdodDoyNnB4O3dpZHRoOjI2cHg7bWFyZ2luOjJweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNSl9LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC10aW1lLW17bWFyZ2luLXRvcDowO2Zsb2F0Om5vbmU7d2lkdGg6MTAwcHh9LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC10aW1lLW0gLnZwZC11cC1hcnJvdy1idG57cmlnaHQ6MzBweH0udnBkLXdyYXBwZXJbZGF0YS10eXBlPWRhdGV0aW1lXS52cGQtY29tcGFjdC10aW1lIC52cGQtdGltZSAudnBkLXRpbWUtbSAudnBkLWRvd24tYXJyb3ctYnRue3JpZ2h0OjB9LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC10aW1lLWh7bWFyZ2luLXRvcDowO2Zsb2F0Om5vbmU7d2lkdGg6MTAwcHh9LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC10aW1lLWg6YWZ0ZXJ7Zm9udC1zaXplOjIwcHh9LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC10aW1lLWggLnZwZC1jb3VudGVye21hcmdpbi1sZWZ0OmF1dG99LnZwZC13cmFwcGVyW2RhdGEtdHlwZT1kYXRldGltZV0udnBkLWNvbXBhY3QtdGltZSAudnBkLXRpbWUgLnZwZC10aW1lLWggLnZwZC11cC1hcnJvdy1idG57bGVmdDowfS52cGQtd3JhcHBlcltkYXRhLXR5cGU9ZGF0ZXRpbWVdLnZwZC1jb21wYWN0LXRpbWUgLnZwZC10aW1lIC52cGQtdGltZS1oIC52cGQtZG93bi1hcnJvdy1idG57bGVmdDozMHB4fS52cGQtd3JhcHBlcltkYXRhLXR5cGU9ZGF0ZXRpbWVdLnZwZC1jb21wYWN0LXRpbWUgLnZwZC10aW1lIHN2Z3toZWlnaHQ6MTBweH0udnBkLXdyYXBwZXJbZGF0YS10eXBlPWRhdGV0aW1lXSAudnBkLWRhdGV7Zm9udC1zaXplOjIycHh9LnZwZC13cmFwcGVyLnZwZC1pcy1yYW5nZSAudnBkLWRhdGV7Zm9udC1zaXplOjE2cHh9LnZwZC13cmFwcGVyLnZwZC1pcy1tdWx0aXBsZSAudnBkLWRhdGV7Zm9udC1zaXplOjE0cHg7d2hpdGUtc3BhY2U6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC1oZWlnaHQ6NDYwcHgpey52cGQtd3JhcHBlcntvdmVyZmxvdzphdXRvO3RleHQtYWxpZ246Y2VudGVyfS52cGQtd3JhcHBlciAudnBkLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjIwcHggYXV0b319LnZwZC1sb2NhbGVze2xpc3Qtc3R5bGUtdHlwZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjE0cHg7dG9wOjEycHg7bGluZS1oZWlnaHQ6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtvcGFjaXR5Oi43fS52cGQtbG9jYWxlcyBsaXtjdXJzb3I6cG9pbnRlcn0udnBkLXNpbXBsZS1ib2R5IC52cGQtaGVhZGVye2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjEwcHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnZwZC1zaW1wbGUtYm9keSAudnBkLWxvY2FsZXN7cG9zaXRpb246c3RhdGljO3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6dW5zZXR9LnZwZC1zaW1wbGUtY29udGVudHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6MjQwcHg7ZGlyZWN0aW9uOmx0cn0udnBkLXNpbXBsZS1jb250ZW50IC52cGQtY29sdW1ue2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO3BhZGRpbmc6NXB4fS52cGQtc2ltcGxlLWNvbnRlbnQgLnZwZC1jb2x1bW4gLnZwZC1jb2x1bW4taGVhZGVye3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMDAwO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHh9LnZwZC1zaW1wbGUtY29udGVudCAudnBkLWNvbHVtbiAudnBkLWNvbHVtbi1jb250ZW50e2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZy1yaWdodDo0cHg7cG9zaXRpb246cmVsYXRpdmV9LnZwZC1zaW1wbGUtY29udGVudCAudnBkLWNvbHVtbiAudnBkLWNvbHVtbi1jb250ZW50OmFmdGVyLC52cGQtc2ltcGxlLWNvbnRlbnQgLnZwZC1jb2x1bW4gLnZwZC1jb2x1bW4tY29udGVudDpiZWZvcmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6ODBweDtjb250ZW50OlxcXCJcXFwifUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NjQwcHgpey52cGQtc2ltcGxlLWNvbnRlbnQgLnZwZC1jb2x1bW4gLnZwZC1jb2x1bW4tY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6OHB4fS52cGQtc2ltcGxlLWNvbnRlbnQgLnZwZC1jb2x1bW4gLnZwZC1jb2x1bW4tY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNSk7Ym9yZGVyLXJhZGl1czo1cHh9LnZwZC1zaW1wbGUtY29udGVudCAudnBkLWNvbHVtbiAudnBkLWNvbHVtbi1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS52cGQtc2ltcGxlLWNvbnRlbnQgLnZwZC1jb2x1bW4gLnZwZC1jb2x1bW4tY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC41KX19LnZwZC1zaW1wbGUtY29udGVudCAudnBkLWFkZG9uLWxpc3QtaXRlbXt3aWR0aDoxMDAlO2Zsb2F0Om5vbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjQycHg7aGVpZ2h0OjQ0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZmZmfS52cGQtc2ltcGxlLWNvbnRlbnQgLnZwZC1yYW5nZS1maXJzdHtib3JkZXItcmFkaXVzOjQwcHggNDBweCAwIDB9LnZwZC1zaW1wbGUtY29udGVudCAudnBkLXJhbmdlLWJldHdlZW57Zm9udC13ZWlnaHQ6NzAwO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0udnBkLXNpbXBsZS1jb250ZW50IC52cGQtcmFuZ2UtbGFzdHtib3JkZXItcmFkaXVzOjAgMCA0MHB4IDQwcHh9LnZwZC1zaW1wbGUtY29udGVudCAudnBkLXJhbmdlLWxhc3QudnBkLXJhbmdlLWZpcnN0e2JvcmRlci1yYWRpdXM6NDBweH0udnBkLXNpbXBsZS1jb250ZW50IC52cGQtY29sdW1uLnZwZC1pcy1tb3VudGVkIC52cGQtc2VsZWN0ZWQ6bm90KC52cGQtcmFuZ2UtZmlyc3QpOm5vdCgudnBkLXJhbmdlLWxhc3QpOm5vdChbZGlzYWJsZWRdKXtwb3NpdGlvbjpzdGlja3k7dG9wOjA7Ym90dG9tOjB9LnZwZC1pcy1tdWx0aXBsZSAudnBkLXNpbXBsZS1jb250ZW50IC52cGQtY29sdW1uIC52cGQtc2VsZWN0ZWR7cG9zaXRpb246c3RhdGljIWltcG9ydGFudH0udnBkLWRpci1sdHIgLnZwZC1hY3Rpb25zLC52cGQtZGlyLWx0ciAudnBkLWFkZG9uLWxpc3QtY29udGVudCwudnBkLWRpci1sdHIgLnZwZC1jb250ZW50e2RpcmVjdGlvbjpsdHJ9LnZwZC1kaXItbHRyIC52cGQtYWN0aW9ucywudnBkLWRpci1sdHIgLnZwZC1jb250ZW50e3RleHQtYWxpZ246bGVmdDtmb250LWZhbWlseTpzYW5zLXNlcmlmfS52cGQtZGlyLWx0ciAudnBkLW1vbnRoLWxhYmVse2ZvbnQtc2l6ZTo5MCV9LnZwZC1kaXItbHRyIC52cGQtYWRkb24tbGlzdC1pdGVtLC52cGQtZGlyLWx0ciAudnBkLWRheSwudnBkLWRpci1sdHIgLnZwZC13ZWVrZGF5e2Zsb2F0OmxlZnR9LnZwZC1kaXItbHRyIC52cGQtbG9jYWxlc3tsZWZ0OmF1dG87cmlnaHQ6MTRweH0udnBkLWRpci1ydGwgLnZwZC1uZXh0LC52cGQtZGlyLXJ0bCAudnBkLXByZXZ7dHJhbnNmb3JtOnJvdGF0ZVkoMTgwZGVnKX0udnBkLWRpci1ydGwgLnZwZC1uZXh0e2Zsb2F0OmxlZnR9LnZwZC1kaXItcnRsIC52cGQtcHJldntmbG9hdDpyaWdodH1cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjQ5OWVcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gYWRkU3R5bGVzQ2xpZW50OyB9KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVzLmpzXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIGxpc3QgZm9ybWF0IHByb2R1Y2VkIGJ5IGNzcy1sb2FkZXIgaW50byBzb21ldGhpbmdcbiAqIGVhc2llciB0byBtYW5pcHVsYXRlLlxuICovXG5mdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxuXG5cbnZhciBoYXNEb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcblxuaWYgKHR5cGVvZiBERUJVRyAhPT0gJ3VuZGVmaW5lZCcgJiYgREVCVUcpIHtcbiAgaWYgKCFoYXNEb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAndnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiAnICtcbiAgICBcIlVzZSB7IHRhcmdldDogJ25vZGUnIH0gaW4geW91ciBXZWJwYWNrIGNvbmZpZyB0byBpbmRpY2F0ZSBhIHNlcnZlci1yZW5kZXJpbmcgZW52aXJvbm1lbnQuXCJcbiAgKSB9XG59XG5cbi8qXG50eXBlIFN0eWxlT2JqZWN0ID0ge1xuICBpZDogbnVtYmVyO1xuICBwYXJ0czogQXJyYXk8U3R5bGVPYmplY3RQYXJ0PlxufVxuXG50eXBlIFN0eWxlT2JqZWN0UGFydCA9IHtcbiAgY3NzOiBzdHJpbmc7XG4gIG1lZGlhOiBzdHJpbmc7XG4gIHNvdXJjZU1hcDogP3N0cmluZ1xufVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0gey8qXG4gIFtpZDogbnVtYmVyXToge1xuICAgIGlkOiBudW1iZXIsXG4gICAgcmVmczogbnVtYmVyLFxuICAgIHBhcnRzOiBBcnJheTwob2JqPzogU3R5bGVPYmplY3RQYXJ0KSA9PiB2b2lkPlxuICB9XG4qL31cblxudmFyIGhlYWQgPSBoYXNEb2N1bWVudCAmJiAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdKVxudmFyIHNpbmdsZXRvbkVsZW1lbnQgPSBudWxsXG52YXIgc2luZ2xldG9uQ291bnRlciA9IDBcbnZhciBpc1Byb2R1Y3Rpb24gPSBmYWxzZVxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxudmFyIG9wdGlvbnMgPSBudWxsXG52YXIgc3NySWRLZXkgPSAnZGF0YS12dWUtc3NyLWlkJ1xuXG4vLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbi8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcbnZhciBpc09sZElFID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNDbGllbnQgKHBhcmVudElkLCBsaXN0LCBfaXNQcm9kdWN0aW9uLCBfb3B0aW9ucykge1xuICBpc1Byb2R1Y3Rpb24gPSBfaXNQcm9kdWN0aW9uXG5cbiAgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbGlzdClcbiAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW11cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgICBkb21TdHlsZS5yZWZzLS1cbiAgICAgIG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKVxuICAgIH1cbiAgICBpZiAobmV3TGlzdCkge1xuICAgICAgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBuZXdMaXN0KVxuICAgICAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXMgPSBbXVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldXG4gICAgICBpZiAoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZG9tU3R5bGUucGFydHNbal0oKVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcyAvKiBBcnJheTxTdHlsZU9iamVjdD4gKi8pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICBkb21TdHlsZS5yZWZzKytcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSlcbiAgICAgIH1cbiAgICAgIGZvciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgaWYgKGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA+IGl0ZW0ucGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA9IGl0ZW0ucGFydHMubGVuZ3RoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIHN0eWxlc0luRG9tW2l0ZW0uaWRdID0geyBpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50ICgpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgc3R5bGVFbGVtZW50LnR5cGUgPSAndGV4dC9jc3MnXG4gIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KVxuICByZXR1cm4gc3R5bGVFbGVtZW50XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gIHZhciB1cGRhdGUsIHJlbW92ZVxuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGVbJyArIHNzcklkS2V5ICsgJ349XCInICsgb2JqLmlkICsgJ1wiXScpXG5cbiAgaWYgKHN0eWxlRWxlbWVudCkge1xuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGFuZCBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAvLyBzaW1wbHkgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBub29wXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGJ1dCBpbiBkZXYgbW9kZS5cbiAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBDaHJvbWUgY2FuJ3QgaGFuZGxlIHNvdXJjZSBtYXAgaW4gc2VydmVyLXJlbmRlcmVkXG4gICAgICAvLyBzdHlsZSB0YWdzIC0gc291cmNlIG1hcHMgaW4gPHN0eWxlPiBvbmx5IHdvcmtzIGlmIHRoZSBzdHlsZSB0YWcgaXNcbiAgICAgIC8vIGNyZWF0ZWQgYW5kIGluc2VydGVkIGR5bmFtaWNhbGx5LiBTbyB3ZSByZW1vdmUgdGhlIHNlcnZlciByZW5kZXJlZFxuICAgICAgLy8gc3R5bGVzIGFuZCBpbmplY3QgbmV3IG9uZXMuXG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzT2xkSUUpIHtcbiAgICAvLyB1c2Ugc2luZ2xldG9uIG1vZGUgZm9yIElFOS5cbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrK1xuICAgIHN0eWxlRWxlbWVudCA9IHNpbmdsZXRvbkVsZW1lbnQgfHwgKHNpbmdsZXRvbkVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKSlcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCBmYWxzZSlcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCB0cnVlKVxuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBtdWx0aS1zdHlsZS10YWcgbW9kZSBpbiBhbGwgb3RoZXIgY2FzZXNcbiAgICBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQpXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZShvYmopXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcbiAgICAgICAgICBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuICAgICAgICAgIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgdGV4dFN0b3JlID0gW11cblxuICByZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgIHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudFxuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpXG4gIH1cbn0pKClcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGVFbGVtZW50LCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLmNzc1xuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKVxuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKVxuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGVFbGVtZW50LmNoaWxkTm9kZXNcbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSlcbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChjc3NOb2RlKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZUVsZW1lbnQsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzc1xuICB2YXIgbWVkaWEgPSBvYmoubWVkaWFcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXBcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKVxuICB9XG4gIGlmIChvcHRpb25zLnNzcklkKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShzc3JJZEtleSwgb2JqLmlkKVxuICB9XG5cbiAgaWYgKHNvdXJjZU1hcCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZGV2dG9vbHMvZG9jcy9qYXZhc2NyaXB0LWRlYnVnZ2luZ1xuICAgIC8vIHRoaXMgbWFrZXMgc291cmNlIG1hcHMgaW5zaWRlIHN0eWxlIHRhZ3Mgd29yayBwcm9wZXJseSBpbiBDaHJvbWVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VVUkw9JyArIHNvdXJjZU1hcC5zb3VyY2VzWzBdICsgJyAqLydcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwnICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArICcgKi8nXG4gIH1cblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzXG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpXG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKVxuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiNzhhN1wiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ1OTVcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIjQ5OWVcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjdiYWEwOTQ0XCIsIGNvbnRlbnQsIHRydWUsIHtcInNvdXJjZU1hcFwiOmZhbHNlLFwic2hhZG93TW9kZVwiOmZhbHNlfSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIjg4NzVcIjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187Ly8gYWRkYXB0ZWQgZnJvbSB0aGUgZG9jdW1lbnQuY3VycmVudFNjcmlwdCBwb2x5ZmlsbCBieSBBZGFtIE1pbGxlclxuLy8gTUlUIGxpY2Vuc2Vcbi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2FtaWxsZXItZ2gvY3VycmVudFNjcmlwdC1wb2x5ZmlsbFxuXG4vLyBhZGRlZCBzdXBwb3J0IGZvciBGaXJlZm94IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA1MDVcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0cnVlKSB7XG4gICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW10sIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9IChmYWN0b3J5KSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAodHlwZW9mIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0XHRcdChfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18uYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXykpIDogX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fKSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xuICB9IGVsc2Uge31cbn0odHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZ2V0Q3VycmVudFNjcmlwdCAoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRvY3VtZW50LCAnY3VycmVudFNjcmlwdCcpXG4gICAgLy8gZm9yIGNocm9tZVxuICAgIGlmICghZGVzY3JpcHRvciAmJiAnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmN1cnJlbnRTY3JpcHRcbiAgICB9XG5cbiAgICAvLyBmb3Igb3RoZXIgYnJvd3NlcnMgd2l0aCBuYXRpdmUgc3VwcG9ydCBmb3IgY3VycmVudFNjcmlwdFxuICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0ICE9PSBnZXRDdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gICAgfVxuICBcbiAgICAvLyBJRSA4LTEwIHN1cHBvcnQgc2NyaXB0IHJlYWR5U3RhdGVcbiAgICAvLyBJRSAxMSsgJiBGaXJlZm94IHN1cHBvcnQgc3RhY2sgdHJhY2VcbiAgICB0cnkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEZpbmQgdGhlIHNlY29uZCBtYXRjaCBmb3IgdGhlIFwiYXRcIiBzdHJpbmcgdG8gZ2V0IGZpbGUgc3JjIHVybCBmcm9tIHN0YWNrLlxuICAgICAgdmFyIGllU3RhY2tSZWdFeHAgPSAvLiphdCBbXihdKlxcKCguKik6KC4rKTooLispXFwpJC9pZyxcbiAgICAgICAgZmZTdGFja1JlZ0V4cCA9IC9AKFteQF0qKTooXFxkKyk6KFxcZCspXFxzKiQvaWcsXG4gICAgICAgIHN0YWNrRGV0YWlscyA9IGllU3RhY2tSZWdFeHAuZXhlYyhlcnIuc3RhY2spIHx8IGZmU3RhY2tSZWdFeHAuZXhlYyhlcnIuc3RhY2spLFxuICAgICAgICBzY3JpcHRMb2NhdGlvbiA9IChzdGFja0RldGFpbHMgJiYgc3RhY2tEZXRhaWxzWzFdKSB8fCBmYWxzZSxcbiAgICAgICAgbGluZSA9IChzdGFja0RldGFpbHMgJiYgc3RhY2tEZXRhaWxzWzJdKSB8fCBmYWxzZSxcbiAgICAgICAgY3VycmVudExvY2F0aW9uID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gsICcnKSxcbiAgICAgICAgcGFnZVNvdXJjZSxcbiAgICAgICAgaW5saW5lU2NyaXB0U291cmNlUmVnRXhwLFxuICAgICAgICBpbmxpbmVTY3JpcHRTb3VyY2UsXG4gICAgICAgIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7IC8vIExpdmUgTm9kZUxpc3QgY29sbGVjdGlvblxuICBcbiAgICAgIGlmIChzY3JpcHRMb2NhdGlvbiA9PT0gY3VycmVudExvY2F0aW9uKSB7XG4gICAgICAgIHBhZ2VTb3VyY2UgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MO1xuICAgICAgICBpbmxpbmVTY3JpcHRTb3VyY2VSZWdFeHAgPSBuZXcgUmVnRXhwKCcoPzpbXlxcXFxuXSs/XFxcXG4pezAsJyArIChsaW5lIC0gMikgKyAnfVtePF0qPHNjcmlwdD4oW1xcXFxkXFxcXERdKj8pPFxcXFwvc2NyaXB0PltcXFxcZFxcXFxEXSonLCAnaScpO1xuICAgICAgICBpbmxpbmVTY3JpcHRTb3VyY2UgPSBwYWdlU291cmNlLnJlcGxhY2UoaW5saW5lU2NyaXB0U291cmNlUmVnRXhwLCAnJDEnKS50cmltKCk7XG4gICAgICB9XG4gIFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIElmIHJlYWR5IHN0YXRlIGlzIGludGVyYWN0aXZlLCByZXR1cm4gdGhlIHNjcmlwdCB0YWdcbiAgICAgICAgaWYgKHNjcmlwdHNbaV0ucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykge1xuICAgICAgICAgIHJldHVybiBzY3JpcHRzW2ldO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBJZiBzcmMgbWF0Y2hlcywgcmV0dXJuIHRoZSBzY3JpcHQgdGFnXG4gICAgICAgIGlmIChzY3JpcHRzW2ldLnNyYyA9PT0gc2NyaXB0TG9jYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gc2NyaXB0c1tpXTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgLy8gSWYgaW5saW5lIHNvdXJjZSBtYXRjaGVzLCByZXR1cm4gdGhlIHNjcmlwdCB0YWdcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNjcmlwdExvY2F0aW9uID09PSBjdXJyZW50TG9jYXRpb24gJiZcbiAgICAgICAgICBzY3JpcHRzW2ldLmlubmVySFRNTCAmJlxuICAgICAgICAgIHNjcmlwdHNbaV0uaW5uZXJIVE1MLnRyaW0oKSA9PT0gaW5saW5lU2NyaXB0U291cmNlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBzY3JpcHRzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gIFxuICAgICAgLy8gSWYgbm8gbWF0Y2gsIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGdldEN1cnJlbnRTY3JpcHRcbn0pKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJiOWIzXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudC1qYWxhYWxpXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCJjMzJkXCI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiZmIxNVwiOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1zZXJ2aWNlL2xpYi9jb21tYW5kcy9idWlsZC9zZXRQdWJsaWNQYXRoLmpzXG4vLyBUaGlzIGZpbGUgaXMgaW1wb3J0ZWQgaW50byBsaWIvd2MgY2xpZW50IGJ1bmRsZXMuXG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgY3VycmVudFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gIGlmICh0cnVlKSB7XG4gICAgdmFyIGdldEN1cnJlbnRTY3JpcHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiODg3NVwiKVxuICAgIGN1cnJlbnRTY3JpcHQgPSBnZXRDdXJyZW50U2NyaXB0KClcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIHByZXZpb3VzbHkgd2UgZGlyZWN0bHkgaW5jbHVkZWQgdGhlIHBvbHlmaWxsXG4gICAgaWYgKCEoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCAnY3VycmVudFNjcmlwdCcsIHsgZ2V0OiBnZXRDdXJyZW50U2NyaXB0IH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIHNyYyA9IGN1cnJlbnRTY3JpcHQgJiYgY3VycmVudFNjcmlwdC5zcmMubWF0Y2goLyguK1xcLylbXi9dK1xcLmpzKFxcPy4qKT8kLylcbiAgaWYgKHNyYykge1xuICAgIF9fd2VicGFja19yZXF1aXJlX18ucCA9IHNyY1sxXSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cbn1cblxuLy8gSW5kaWNhdGUgdG8gd2VicGFjayB0aGF0IHRoaXMgZmlsZSBjYW4gYmUgY29uY2F0ZW5hdGVkXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzZXRQdWJsaWNQYXRoID0gKG51bGwpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCIxOWUxYTBhNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMTQ1NmQzNyZcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCdzcGFuJyx7c3RhdGljQ2xhc3M6XCJ2cGQtbWFpblwiLGNsYXNzOnsgJ3ZwZC1pcy1wb3BvdmVyJzogX3ZtLmlzUG9wb3ZlciB9LGF0dHJzOntcImRhdGEtdHlwZVwiOl92bS50eXBlLFwiZGF0YS1sb2NhbGVcIjpfdm0ubG9jYWxlRGF0YS5uYW1lLFwiZGF0YS1sb2NhbGUtZGlyXCI6X3ZtLmxvY2FsZURhdGEuY29uZmlnLmRpcn19LFsoIV92bS5jdXN0b21JbnB1dEVsZW1lbnQpP19jKCdzcGFuJyx7cmVmOlwiaW5wdXRHcm91cFwiLGNsYXNzOlsndnBkLWlucHV0LWdyb3VwJywgeyAndnBkLWRpc2FibGVkJzogX3ZtLmRpc2FibGVkIH1dfSxbX2MoJ2xhYmVsJyx7c3RhdGljQ2xhc3M6XCJ2cGQtaWNvbi1idG5cIixzdHlsZTooeyAnYmFja2dyb3VuZC1jb2xvcic6IF92bS5jb2xvciB9KSxhdHRyczp7XCJmb3JcIjpfdm0uaWR9LG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXskZXZlbnQucHJldmVudERlZmF1bHQoKTskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7X3ZtLnZpc2libGUgPSAhX3ZtLnZpc2libGV9fX0sW192bS5fdChcImxhYmVsXCIsWyhfdm0udHlwZSA9PT0gJ3RpbWUnKT9fYygndGltZS1pY29uJyx7YXR0cnM6e1wid2lkdGhcIjpcIjE2cHhcIixcImhlaWdodFwiOlwiMTZweFwifX0pOl9jKCdjYWxlbmRhci1pY29uJyx7YXR0cnM6e1wid2lkdGhcIjpcIjE2cHhcIixcImhlaWdodFwiOlwiMTZweFwifX0pLChfdm0ubGFiZWwpP19jKCdzcGFuJyx7ZG9tUHJvcHM6e1widGV4dENvbnRlbnRcIjpfdm0uX3MoX3ZtLmxhYmVsKX19KTpfdm0uX2UoKV0pXSwyKSxfYygnaW5wdXQnLF92bS5fYih7cmVmOlwiaW5wdXRcIixjbGFzczpbX3ZtLmlucHV0Q2xhc3MsIHsgJ3ZwZC1pcy1lZGl0YWJsZSc6IF92bS5lZGl0YWJsZSB9XSxhdHRyczp7XCJpZFwiOl92bS5pZCxcInR5cGVcIjpcInRleHRcIixcIm5hbWVcIjpfdm0ubmFtZSxcInBsYWNlaG9sZGVyXCI6X3ZtLnBsYWNlaG9sZGVyLFwiZGlzYWJsZWRcIjpfdm0uZGlzYWJsZWR9LGRvbVByb3BzOntcInZhbHVlXCI6X3ZtLmRpc3BsYXlWYWx1ZX0sb246e1wiZm9jdXNcIjpfdm0uZm9jdXMsXCJibHVyXCI6X3ZtLnNldE91dHB1dCxcImtleWRvd25cIjpmdW5jdGlvbigkZXZlbnQpe2lmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLFwiZW50ZXJcIiwxMywkZXZlbnQua2V5LFwiRW50ZXJcIikpeyByZXR1cm4gbnVsbDsgfXJldHVybiBfdm0uc2V0T3V0cHV0KCRldmVudCl9fX0sJ2lucHV0Jyxfdm0uaW5wdXRBdHRycyxmYWxzZSkpLChfdm0uYWx0TmFtZSk/X2MoJ2lucHV0Jyx7YXR0cnM6e1widHlwZVwiOlwiaGlkZGVuXCIsXCJuYW1lXCI6X3ZtLmFsdE5hbWV9LGRvbVByb3BzOntcInZhbHVlXCI6X3ZtLmFsdEZvcm1hdHRlZH19KTpfdm0uX2UoKSwoX3ZtLmNsZWFyYWJsZSAmJiAhX3ZtLmRpc2FibGVkICYmIF92bS5kaXNwbGF5VmFsdWUpP19jKCdpJyx7c3RhdGljQ2xhc3M6XCJ2cGQtY2xlYXItYnRuXCIsb246e1wiY2xpY2tcIjpfdm0uY2xlYXJWYWx1ZX19LFtfdm0uX3QoXCJjbGVhci1idG5cIixbX3ZtLl92KFwieFwiKV0sbnVsbCx7IHZtOiBfdm0udm0gfSldLDIpOl92bS5fZSgpXSk6KF92bS5hbHROYW1lKT9fYygnaW5wdXQnLHthdHRyczp7XCJ0eXBlXCI6XCJoaWRkZW5cIixcIm5hbWVcIjpfdm0uYWx0TmFtZX0sZG9tUHJvcHM6e1widmFsdWVcIjpfdm0uYWx0Rm9ybWF0dGVkfX0pOl92bS5fZSgpLF9jKCd0cmFuc2l0aW9uJyx7YXR0cnM6e1wibmFtZVwiOl92bS5pc1BvcG92ZXIgPyAnJyA6ICd2cGQtZmFkZS1zY2FsZSd9fSxbKF92bS52aXNpYmxlKT9fYygnZGl2Jyx7cmVmOlwicGlja2VyXCIsY2xhc3M6W1xuICAgICAgICAndnBkLXdyYXBwZXInLFxuICAgICAgICAoXCJ2cGQtZGlyLVwiICsgKF92bS5sb2NhbGVEYXRhLmNvbmZpZy5kaXIpKSxcbiAgICAgICAge1xuICAgICAgICAgICd2cGQtaXMtcmFuZ2UnOiBfdm0ucmFuZ2UsXG4gICAgICAgICAgJ3ZwZC1pcy1pbmxpbmUnOiBfdm0uaW5saW5lLFxuICAgICAgICAgICd2cGQtaXMtcG9wb3Zlcic6IF92bS5pc1BvcG92ZXIsXG4gICAgICAgICAgJ3ZwZC1pcy1tdWx0aXBsZSc6IF92bS5tdWx0aXBsZSxcbiAgICAgICAgICAndnBkLWNvbXBhY3QtdGltZSc6IF92bS5pc0NvbXBhY3RUaW1lLFxuICAgICAgICAgICd2cGQtbm8tZm9vdGVyJzogX3ZtLmF1dG9TdWJtaXQgJiYgIV92bS5oYXNTdGVwKCd0JylcbiAgICAgICAgfVxuICAgICAgXSxhdHRyczp7XCJkYXRhLXR5cGVcIjpfdm0udHlwZX0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe2lmKCRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0KXsgcmV0dXJuIG51bGw7IH1yZXR1cm4gX3ZtLndyYXBwZXJDbGljaygkZXZlbnQpfX19LFtfYygnZGl2Jyx7cmVmOlwiY29udGFpbmVyXCIsc3RhdGljQ2xhc3M6XCJ2cGQtY29udGFpbmVyXCJ9LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ2cGQtY29udGVudFwifSxbKCFfdm0uc2ltcGxlKT9fYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ2cGQtaGVhZGVyXCIsc3R5bGU6KHsgJ2JhY2tncm91bmQtY29sb3InOiBfdm0uY29sb3IgfSl9LFsoWydkYXRlJywgJ2RhdGV0aW1lJywgJ3llYXItbW9udGgnXS5pbmRleE9mKF92bS50eXBlKSAhPT0gLTEpP19jKCdkaXYnLHtjbGFzczpbJ3ZwZC15ZWFyLWxhYmVsJywgX3ZtLmRpcmVjdGlvbkNsYXNzXSxvbjp7XCJjbGlja1wiOmZ1bmN0aW9uKCRldmVudCl7cmV0dXJuIF92bS5nb1N0ZXAoJ3knKX19fSxbX2MoJ3RyYW5zaXRpb24nLHthdHRyczp7XCJuYW1lXCI6XCJzbGlkZVlcIn19LFtfYygnc3Bhbicse2tleTpfdm0uc2VsZWN0ZWREYXRlLnhZZWFyKCl9LFtfdm0uX3QoXCJoZWFkZXIteWVhclwiLFtfdm0uX3YoXCIgXCIrX3ZtLl9zKF92bS5jb252ZXJ0VG9Mb2NhbGVOdW1iZXIoX3ZtLnNlbGVjdGVkRGF0ZS54WWVhcigpKSkrXCIgXCIpXSxudWxsLHsgdm06IF92bS52bSwgc2VsZWN0ZWREYXRlOiBfdm0uc2VsZWN0ZWREYXRlIH0pXSwyKV0pXSwxKTpfdm0uX2UoKSwoX3ZtLnR5cGUgIT09ICd5ZWFyLW1vbnRoJyk/X2MoJ2Rpdicse2NsYXNzOlsndnBkLWRhdGUnLCBfdm0uZGlyZWN0aW9uQ2xhc3NdfSxbX2MoJ3RyYW5zaXRpb24nLHthdHRyczp7XCJuYW1lXCI6XCJzbGlkZVlcIn19LFtfYygnc3Bhbicse2tleTpfdm0uZm9ybWF0dGVkRGF0ZX0sW192bS5fdChcImhlYWRlci1kYXRlXCIsW192bS5fdihcIiBcIitfdm0uX3MoX3ZtLmNvbnZlcnRUb0xvY2FsZU51bWJlcihfdm0uZm9ybWF0dGVkRGF0ZSkpK1wiIFwiKV0sbnVsbCx7IHZtOiBfdm0udm0sIGZvcm1hdHRlZERhdGU6IF92bS5mb3JtYXR0ZWREYXRlIH0pXSwyKV0pXSwxKTpfdm0uX2UoKSwoX3ZtLmxvY2FsZXMubGVuZ3RoID4gMSk/X3ZtLl90KFwibG9jYWxlc1wiLFtfYygnbG9jYWxlLWNoYW5nZScse3N0YXRpY0NsYXNzOlwidnBkLWxvY2FsZXNcIixhdHRyczp7XCJsb2NhbGUtZGF0YVwiOl92bS5sb2NhbGVEYXRhLFwiY29yZVwiOl92bS5jb3JlLFwibG9jYWxlc1wiOl92bS5sb2NhbGVzfSxvbjp7XCJjaGFuZ2VcIjpfdm0uc2V0TG9jYWxlfX0pXSxudWxsLHsgdm06IF92bS52bSwgbG9jYWxlczogX3ZtLmxvY2FsZXMsIHNldExvY2FsZTogX3ZtLnNldExvY2FsZSB9KTpfdm0uX2UoKV0sMik6X3ZtLl9lKCksX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidnBkLWJvZHlcIn0sWyhfdm0uc2ltcGxlKT9fYygnc2ltcGxlLW1vZGUnLHthdHRyczp7XCJsYW5nXCI6X3ZtLmxhbmcsXCJjb3JlXCI6X3ZtLmNvcmUsXCJyYW5nZVwiOl92bS5yYW5nZSxcImNvbG9yXCI6X3ZtLmNvbG9yLFwibG9jYWxlc1wiOl92bS5sb2NhbGVzLFwidmlzaWJsZVwiOl92bS52aXNpYmxlLFwibXVsdGlwbGVcIjpfdm0ubXVsdGlwbGUsXCJ5ZWFyc1wiOl92bS55ZWFycyxcIm1vbnRoc1wiOl92bS5tb250aHMsXCJtb250aC1kYXlzXCI6X3ZtLm1vbnRoRGF5cyxcImhhcy1zdGVwXCI6X3ZtLmhhc1N0ZXAsXCJzZWxlY3RlZC1kYXRlc1wiOl92bS5zZWxlY3RlZERhdGVzLFwiZm9ybWF0dGVkLWRhdGVcIjpfdm0uZm9ybWF0dGVkRGF0ZSxcImhvdmVyZWQtaXRlbVwiOl92bS5ob3ZlcmVkSXRlbSxcInNldC1sb2NhbGVcIjpfdm0uc2V0TG9jYWxlLFwiY29udmVydC10by1sb2NhbGUtbnVtYmVyXCI6X3ZtLmNvbnZlcnRUb0xvY2FsZU51bWJlcn0sb246e1widXBkYXRlOmhvdmVyZWRJdGVtXCI6ZnVuY3Rpb24oJGV2ZW50KXtfdm0uaG92ZXJlZEl0ZW09JGV2ZW50fSxcInVwZGF0ZTpob3ZlcmVkLWl0ZW1cIjpmdW5jdGlvbigkZXZlbnQpe192bS5ob3ZlcmVkSXRlbT0kZXZlbnR9LFwic2VsZWN0LXllYXJcIjpfdm0uc2VsZWN0WWVhcixcInNlbGVjdC1tb250aFwiOl92bS5zZWxlY3RNb250aCxcInNlbGVjdC1kYXlcIjpfdm0uc2VsZWN0RGF5fSxzY29wZWRTbG90czpfdm0uX3UoW3trZXk6XCJoZWFkZXItZGF0ZVwiLGZuOmZ1bmN0aW9uKHNsb3REYXRhKXtyZXR1cm4gW192bS5fdChcImhlYWRlci1kYXRlXCIsbnVsbCxudWxsLHNsb3REYXRhKV19fSx7a2V5OlwibG9jYWxlc1wiLGZuOmZ1bmN0aW9uKHNsb3REYXRhKXtyZXR1cm4gW192bS5fdChcImxvY2FsZXNcIixudWxsLG51bGwsc2xvdERhdGEpXX19LHtrZXk6XCJ5ZWFyLWl0ZW1cIixmbjpmdW5jdGlvbihzbG90RGF0YSl7cmV0dXJuIFtfdm0uX3QoXCJ5ZWFyLWl0ZW1cIixudWxsLG51bGwsc2xvdERhdGEpXX19LHtrZXk6XCJtb250aC1pdGVtXCIsZm46ZnVuY3Rpb24oc2xvdERhdGEpe3JldHVybiBbX3ZtLl90KFwibW9udGgtaXRlbVwiLG51bGwsbnVsbCxzbG90RGF0YSldfX0se2tleTpcImRheS1pdGVtXCIsZm46ZnVuY3Rpb24oc2xvdERhdGEpe3JldHVybiBbX3ZtLl90KFwiZGF5LWl0ZW1cIixudWxsLG51bGwsc2xvdERhdGEpXX19XSxudWxsLHRydWUpfSk6Wyhfdm0uaGFzU3RlcCgnZCcpKT9bX2MoJ2Rpdicse2NsYXNzOlsndnBkLWNvbnRyb2xzJywgX3ZtLmRpcmVjdGlvbkNsYXNzRGF0ZV19LFtfYygnYnV0dG9uJyx7c3RhdGljQ2xhc3M6XCJ2cGQtbmV4dFwiLGF0dHJzOntcInR5cGVcIjpcImJ1dHRvblwiLFwidGl0bGVcIjpfdm0ubGFuZy5uZXh0TW9udGgsXCJkaXNhYmxlZFwiOl92bS5uZXh0TW9udGhEaXNhYmxlZH0sb246e1wiY2xpY2tcIjpfdm0ubmV4dE1vbnRofX0sW192bS5fdChcIm5leHQtbW9udGhcIixbX2MoJ2Fycm93Jyx7c3RhdGljU3R5bGU6e1widmVydGljYWwtYWxpZ25cIjpcIm1pZGRsZVwifSxhdHRyczp7XCJ3aWR0aFwiOlwiMTBcIixcImZpbGxcIjpcIiMwMDBcIixcImRpcmVjdGlvblwiOlwicmlnaHRcIn19KV0pXSwyKSxfYygnYnV0dG9uJyx7c3RhdGljQ2xhc3M6XCJ2cGQtcHJldlwiLGF0dHJzOntcInR5cGVcIjpcImJ1dHRvblwiLFwidGl0bGVcIjpfdm0ubGFuZy5wcmV2TW9udGgsXCJkaXNhYmxlZFwiOl92bS5wcmV2TW9udGhEaXNhYmxlZH0sb246e1wiY2xpY2tcIjpfdm0ucHJldk1vbnRofX0sW192bS5fdChcInByZXYtbW9udGhcIixbX2MoJ2Fycm93Jyx7c3RhdGljU3R5bGU6e1widmVydGljYWwtYWxpZ25cIjpcIm1pZGRsZVwifSxhdHRyczp7XCJ3aWR0aFwiOlwiMTBcIixcImZpbGxcIjpcIiMwMDBcIixcImRpcmVjdGlvblwiOlwibGVmdFwifX0pXSldLDIpLF9jKCd0cmFuc2l0aW9uJyx7YXR0cnM6e1wibmFtZVwiOlwic2xpZGVYXCJ9fSxbX2MoJ2Rpdicse2tleTpfdm0uZGF0ZS54TW9udGgoKSxzdGF0aWNDbGFzczpcInZwZC1tb250aC1sYWJlbFwiLG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLmdvU3RlcCgnbScpfX19LFtfdm0uX3QoXCJtb250aC1uYW1lXCIsW19jKCdzcGFuJyx7c3R5bGU6KHsgJ2JvcmRlci1jb2xvcic6IF92bS5jb2xvciwgY29sb3I6IF92bS5jb2xvciB9KSxkb21Qcm9wczp7XCJ0ZXh0Q29udGVudFwiOl92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY29udmVydFRvTG9jYWxlTnVtYmVyKF92bS5kYXRlLnhGb3JtYXQoJ2pNTU1NIGpZWVlZJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9fSldLG51bGwseyB2bTogX3ZtLnZtLCBkYXRlOiBfdm0uZGF0ZSwgY29sb3I6IF92bS5jb2xvciB9KV0sMildKV0sMSksX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidnBkLWNsZWFyZml4XCIsY2xhc3M6Wyd2cGQtbW9udGgnLCBfdm0uZGlyZWN0aW9uQ2xhc3NEYXRlXX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1jbGVhcmZpeCB2cGQtd2Vla1wifSxfdm0uX2woKF92bS53ZWVrRGF5cyksZnVuY3Rpb24oZGF5LGkpe3JldHVybiBfYygnZGl2Jyx7a2V5OihpICsgXCItXCIgKyBkYXkpLHN0YXRpY0NsYXNzOlwidnBkLXdlZWtkYXlcIn0sW192bS5fdChcIndlZWtkYXlcIixbX3ZtLl92KFwiIFwiK192bS5fcyhkYXkpK1wiIFwiKV0sbnVsbCx7IHZtOiBfdm0udm0sIGRheTogZGF5IH0pXSwyKX0pLDApLF9jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1kYXlzXCIsc3R5bGU6KHsgaGVpZ2h0OiBfdm0ubW9udGgubGVuZ3RoICogNDAgKyAncHgnIH0pLG9uOntcIm1vdXNlbGVhdmVcIjpmdW5jdGlvbigkZXZlbnQpe192bS5ob3ZlcmVkSXRlbSA9IG51bGx9fX0sW19jKCd0cmFuc2l0aW9uJyx7Y2xhc3M6X3ZtLmRpcmVjdGlvbkNsYXNzRGF0ZSxhdHRyczp7XCJuYW1lXCI6XCJzbGlkZVhcIn19LFtfYygnZGl2Jyx7a2V5Ol92bS5kYXRlLnhNb250aCgpfSxfdm0uX2woKF92bS5tb250aERheXMpLGZ1bmN0aW9uKG0sbWkpe3JldHVybiBfYygnZGl2Jyx7a2V5Om1pLHN0YXRpY0NsYXNzOlwidnBkLWNsZWFyZml4XCJ9LF92bS5fbCgobSksZnVuY3Rpb24oZGF5LGRpKXtyZXR1cm4gX2MoJ2RpdicsX3ZtLl9iKHtrZXk6ZGksY2xhc3M6W1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZwZC1kYXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnBkLXNlbGVjdGVkJzogZGF5LnNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnBkLWVtcHR5JzogZGF5LmRhdGUgPT0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZwZC1yYW5nZS1maXJzdCc6IGRheS5pc0ZpcnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnBkLXJhbmdlLWxhc3QnOiBkYXkuaXNMYXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnBkLXJhbmdlLWJldHdlZW4nOiBkYXkuaXNCZXR3ZWVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnBkLXJhbmdlLWhvdmVyJzogX3ZtLmhvdmVyZWRJdGVtICYmIGRheS5pc0hvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5LmF0dHJpYnV0ZXMuY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLGF0dHJzOntcImRpc2FibGVkXCI6ZGF5LmRpc2FibGVkfSxvbjp7XCJjbGlja1wiOmZ1bmN0aW9uKCRldmVudCl7cmV0dXJuIF92bS5zZWxlY3REYXkoZGF5KX0sXCJtb3VzZW92ZXJcIjpmdW5jdGlvbigkZXZlbnQpe192bS5ob3ZlcmVkSXRlbSA9IGRheS5kYXRlfX19LCdkaXYnLGRheS5hdHRyaWJ1dGVzLGZhbHNlKSxbKGRheS5kYXRlICE9IG51bGwpP1tfdm0uX3QoXCJkYXktaXRlbVwiLFtfYygnc3Bhbicse3N0YXRpY0NsYXNzOlwidnBkLWRheS1lZmZlY3RcIixzdHlsZTooeyAnYmFja2dyb3VuZC1jb2xvcic6IF92bS5jb2xvciB9KX0pLF9jKCdzcGFuJyx7c3RhdGljQ2xhc3M6XCJ2cGQtZGF5LXRleHRcIixkb21Qcm9wczp7XCJ0ZXh0Q29udGVudFwiOl92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jb252ZXJ0VG9Mb2NhbGVOdW1iZXIoZGF5LmZvcm1hdHRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfX0pXSxudWxsLHsgdm06IF92bS52bSwgZGF5OiBkYXksIGNvbG9yOiBfdm0uY29sb3IgfSldOl92bS5fZSgpXSwyKX0pLDApfSksMCldKV0sMSldKV06X2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiMjUwcHhcIn19KSxfYygndHJhbnNpdGlvbicse2F0dHJzOntcIm5hbWVcIjpcImZhZGVcIn19LFsoX3ZtLmhhc1N0ZXAoJ3knKSk/X2MoJ2Rpdicse2RpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHJhd05hbWU6XCJ2LXNob3dcIix2YWx1ZTooX3ZtLmN1cnJlbnRTdGVwID09PSAneScpLGV4cHJlc3Npb246XCJjdXJyZW50U3RlcCA9PT0gJ3knXCJ9XSxyZWY6XCJ5ZWFyXCIsY2xhc3M6W1xuICAgICAgICAgICAgICAgICAgICAndnBkLWFkZG9uLWxpc3QnLFxuICAgICAgICAgICAgICAgICAgICB7ICd2cGQtY2FuLWNsb3NlJzogX3ZtLnN0ZXBzLmxlbmd0aCA+IDEgfVxuICAgICAgICAgICAgICAgICAgXX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1hZGRvbi1saXN0LWNvbnRlbnRcIn0sX3ZtLl9sKChfdm0ueWVhcnMpLGZ1bmN0aW9uKHllYXIseWkpe3JldHVybiBfYygnZGl2Jyxfdm0uX2Ioe2tleTp5aSxjbGFzczpbXG4gICAgICAgICAgICAgICAgICAgICAgICAndnBkLWFkZG9uLWxpc3QtaXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICB7ICd2cGQtc2VsZWN0ZWQnOiB5ZWFyLnNlbGVjdGVkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyLmF0dHJpYnV0ZXMuY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICBdLHN0eWxlOihbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiB5ZWFyLnNlbGVjdGVkID8gX3ZtLmNvbG9yIDogJycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIuYXR0cmlidXRlcy5zdHlsZVxuICAgICAgICAgICAgICAgICAgICAgIF0pLGF0dHJzOntcImRpc2FibGVkXCI6eWVhci5kaXNhYmxlZH0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uc2VsZWN0WWVhcih5ZWFyKX19fSwnZGl2Jyx5ZWFyLmF0dHJpYnV0ZXMsZmFsc2UpLFtfdm0uX3QoXCJ5ZWFyLWl0ZW1cIixbX3ZtLl92KFwiIFwiK192bS5fcyhfdm0uY29udmVydFRvTG9jYWxlTnVtYmVyKHllYXIueEZvcm1hdCgnallZWVknKSkpK1wiIFwiKV0sbnVsbCx7IHZtOiBfdm0udm0sIHllYXI6IHllYXIsIGNvbG9yOiBfdm0uY29sb3IgfSldLDIpfSksMCldKTpfdm0uX2UoKV0pLF9jKCd0cmFuc2l0aW9uJyx7YXR0cnM6e1wibmFtZVwiOlwiZmFkZVwifX0sWyhfdm0uaGFzU3RlcCgnbScpKT9fYygnZGl2Jyx7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOihfdm0uY3VycmVudFN0ZXAgPT09ICdtJyksZXhwcmVzc2lvbjpcImN1cnJlbnRTdGVwID09PSAnbSdcIn1dLHJlZjpcIm1vbnRoXCIsY2xhc3M6W1xuICAgICAgICAgICAgICAgICAgICAndnBkLWFkZG9uLWxpc3QgdnBkLW1vbnRoLWxpc3QnLFxuICAgICAgICAgICAgICAgICAgICB7ICd2cGQtY2FuLWNsb3NlJzogX3ZtLnN0ZXBzLmxlbmd0aCA+IDEgfVxuICAgICAgICAgICAgICAgICAgXX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1hZGRvbi1saXN0LWNvbnRlbnRcIn0sX3ZtLl9sKChfdm0ubW9udGhzKSxmdW5jdGlvbihtb250aEl0ZW0sbWkpe3JldHVybiBfYygnZGl2Jyxfdm0uX2Ioe2tleTptaSxjbGFzczpbXG4gICAgICAgICAgICAgICAgICAgICAgICAndnBkLWFkZG9uLWxpc3QtaXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICB7ICd2cGQtc2VsZWN0ZWQnOiBtb250aEl0ZW0uc2VsZWN0ZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSXRlbS5hdHRyaWJ1dGVzLmNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgXSxzdHlsZTooW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogbW9udGhJdGVtLnNlbGVjdGVkID8gX3ZtLmNvbG9yIDogJycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSXRlbS5hdHRyaWJ1dGVzLnN0eWxlXG4gICAgICAgICAgICAgICAgICAgICAgXSksYXR0cnM6e1wiZGlzYWJsZWRcIjptb250aEl0ZW0uZGlzYWJsZWR9LG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLnNlbGVjdE1vbnRoKG1vbnRoSXRlbSl9fX0sJ2RpdicsbW9udGhJdGVtLmF0dHJpYnV0ZXMsZmFsc2UpLFtfdm0uX3QoXCJtb250aC1pdGVtXCIsW192bS5fdihcIiBcIitfdm0uX3MobW9udGhJdGVtLnhGb3JtYXQoJ2pNTU1NJykpK1wiIFwiKV0sbnVsbCx7IHZtOiBfdm0udm0sIG1vbnRoSXRlbTogbW9udGhJdGVtLCBjb2xvcjogX3ZtLmNvbG9yIH0pXSwyKX0pLDApXSk6X3ZtLl9lKCldKSxfYygndHJhbnNpdGlvbicse2F0dHJzOntcIm5hbWVcIjpcImZhZGVcIn19LFsoXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdGVwcy5sZW5ndGggPiAxICYmIF92bS5jdXJyZW50U3RlcCAhPT0gJ2QnICYmIF92bS5oYXNTdGVwKCdkJylcbiAgICAgICAgICAgICAgICAgICk/X2MoJ3NwYW4nLHtzdGF0aWNDbGFzczpcInZwZC1jbG9zZS1hZGRvblwiLG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLmdvU3RlcCgnZCcpfX19LFtfdm0uX3QoXCJjbG9zZS1idG5cIixbX3ZtLl92KFwieFwiKV0sbnVsbCx7IHZtOiBfdm0udm0gfSldLDIpOl92bS5fZSgpXSldLF9jKCd0cmFuc2l0aW9uJyx7YXR0cnM6e1wibmFtZVwiOlwiZmFkZVwifX0sWyhfdm0uaGFzU3RlcCgndCcpKT9fYygndGltZS1zZWN0aW9uJyx7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOihfdm0uY3VycmVudFN0ZXAgPT09ICd0JyksZXhwcmVzc2lvbjpcImN1cnJlbnRTdGVwID09PSAndCdcIn1dLHJlZjpcInRpbWVcIixhdHRyczp7XCJkYXRlXCI6X3ZtLmRhdGUsXCJ0aW1lXCI6X3ZtLnRpbWUsXCJpcy1tb3JlXCI6X3ZtLmlzTW9yZSxcImlzLWxvd2VyXCI6X3ZtLmlzTG93ZXIsXCJtaW4tZGF0ZVwiOl92bS5taW5EYXRlLFwibWF4LWRhdGVcIjpfdm0ubWF4RGF0ZSxcImp1bXAtbWludXRlXCI6X3ZtLmp1bXBNaW51dGUsXCJyb3VuZC1taW51dGVcIjpfdm0ucm91bmRNaW51dGUsXCJnZXQtaGlnaGxpZ2h0c1wiOl92bS5nZXRIaWdobGlnaHRzLFwic2VsZWN0ZWQtZGF0ZXNcIjpfdm0uc2VsZWN0ZWREYXRlcyxcImNvbnZlcnQtdG8tbG9jYWxlLW51bWJlclwiOl92bS5jb252ZXJ0VG9Mb2NhbGVOdW1iZXJ9LG9uOntcInVwZGF0ZTpkYXRlXCI6ZnVuY3Rpb24oJGV2ZW50KXtfdm0uZGF0ZT0kZXZlbnR9LFwidXBkYXRlOnRpbWVcIjpmdW5jdGlvbigkZXZlbnQpe192bS50aW1lPSRldmVudH19fSk6X3ZtLl9lKCldLDEpLChfdm0uYXV0b1N1Ym1pdCAmJiAhX3ZtLmhhc1N0ZXAoJ3QnKSk/WyghX3ZtLnNpbXBsZSk/X2MoJ2JyJyk6X3ZtLl9lKCldOl9jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1hY3Rpb25zXCJ9LFtfdm0uX3QoXCJzdWJtaXQtYnRuXCIsW19jKCdidXR0b24nLHtzdHlsZTooeyBjb2xvcjogX3ZtLmNvbG9yIH0pLGF0dHJzOntcInR5cGVcIjpcImJ1dHRvblwiLFwiZGlzYWJsZWRcIjohX3ZtLmNhblN1Ym1pdH0sZG9tUHJvcHM6e1widGV4dENvbnRlbnRcIjpfdm0uX3MoX3ZtLmxhbmcuc3VibWl0KX0sb246e1wiY2xpY2tcIjpfdm0uc3VibWl0fX0pXSxudWxsLHsgdm06IF92bS52bSwgY2FuU3VibWl0OiBfdm0uY2FuU3VibWl0LCBjb2xvcjogX3ZtLmNvbG9yLCBzdWJtaXQ6IF92bS5zdWJtaXQsIGxhbmc6IF92bS5sYW5nIH0pLCghX3ZtLmlubGluZSk/X3ZtLl90KFwiY2FuY2VsLWJ0blwiLFtfYygnYnV0dG9uJyx7c3R5bGU6KHsgY29sb3I6IF92bS5jb2xvciB9KSxhdHRyczp7XCJ0eXBlXCI6XCJidXR0b25cIn0sZG9tUHJvcHM6e1widGV4dENvbnRlbnRcIjpfdm0uX3MoX3ZtLmxhbmcuY2FuY2VsKX0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe192bS52aXNpYmxlID0gZmFsc2V9fX0pXSxudWxsLHsgdm06IF92bS52bSwgY29sb3I6IF92bS5jb2xvciwgbGFuZzogX3ZtLmxhbmcgfSk6X3ZtLl9lKCksKF92bS5zaG93Tm93QnRuICYmIF92bS5jYW5Hb1RvZGF5KT9fdm0uX3QoXCJub3ctYnRuXCIsW19jKCdidXR0b24nLHtzdHlsZTooeyBjb2xvcjogX3ZtLmNvbG9yIH0pLGF0dHJzOntcInR5cGVcIjpcImJ1dHRvblwifSxkb21Qcm9wczp7XCJ0ZXh0Q29udGVudFwiOl92bS5fcyhfdm0ubGFuZy5ub3cpfSxvbjp7XCJjbGlja1wiOl92bS5nb1RvZGF5fX0pXSxudWxsLHsgdm06IF92bS52bSwgY29sb3I6IF92bS5jb2xvciwgZ29Ub2RheTogX3ZtLmdvVG9kYXksIGxhbmc6IF92bS5sYW5nIH0pOl92bS5fZSgpXSwyKV0sMildKV0pXSk6X3ZtLl9lKCldKV0sMSl9XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9WdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTExNDU2ZDM3JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2Fzc2V0cy9zY3NzL3N0eWxlLnNjc3NcbnZhciBzdHlsZSA9IF9fd2VicGFja19yZXF1aXJlX18oXCI3OGE3XCIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCIxOWUxYTBhNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy9BcnJvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc0MTI0YzgmXG52YXIgQXJyb3d2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNzQxMjRjOF9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCdzdmcnLHtzdHlsZTooeyB0cmFuc2Zvcm06IChcInJvdGF0ZShcIiArIF92bS5yb3RhdGlvbiArIFwiZGVnKVwiKSB9KSxhdHRyczp7XCJ2ZXJzaW9uXCI6XCIxLjFcIixcInhtbG5zXCI6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwidmlld0JveFwiOlwiMCAwIDEyOSAxMjlcIixcIndpZHRoXCI6XCIzMFwiLFwiaGVpZ2h0XCI6XCIzMFwiLFwicGVyc3BlY3RpdmVBc3BlY3RSYXRvXCI6XCJub25lXCJ9fSxbX2MoJ3BhdGgnLHthdHRyczp7XCJmaWxsXCI6X3ZtLmZpbGwsXCJkXCI6XCJNODguNiAxMjEuM2MuOC44IDEuOCAxLjIgMi45IDEuMnMyLjEtLjQgMi45LTEuMmE0LjEgNC4xIDAgMCAwIDAtNS44bC01MS01MSA1MS01MWE0LjEgNC4xIDAgMCAwLTUuOC01LjhsLTU0XFxuICAgIDUzLjlhNC4xIDQuMSAwIDAgMCAwIDUuOGw1NCA1My45elwifX0pXSl9XG52YXIgQXJyb3d2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNzQxMjRjOF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbXBvbmVudHMvQXJyb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NDEyNGM4JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTMtMCEuL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL2NvbXBvbmVudHMvQXJyb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQXJyb3d2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBwcm9wczoge1xuICAgIGZpbGw6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjYTJhMmEyJ1xuICAgIH0sXG4gICAgZGlyZWN0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndXAnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHJvdGF0aW9uOiBmdW5jdGlvbiByb3RhdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVwOiA5MCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgcmlnaHQ6IDE4MCxcbiAgICAgICAgZG93bjogLTkwXG4gICAgICB9W3RoaXMuZGlyZWN0aW9uXTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9BcnJvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29tcG9uZW50c19BcnJvd3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChBcnJvd3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb21wb25lbnRzL0Fycm93LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19BcnJvd3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgQXJyb3d2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNzQxMjRjOF9yZW5kZXIsXG4gIEFycm93dnVlX3R5cGVfdGVtcGxhdGVfaWRfMzc0MTI0Yzhfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQXJyb3cgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzP3tcImNhY2hlRGlyZWN0b3J5XCI6XCJub2RlX21vZHVsZXMvLmNhY2hlL3Z1ZS1sb2FkZXJcIixcImNhY2hlSWRlbnRpZmllclwiOlwiMTllMWEwYTQtdnVlLWxvYWRlci10ZW1wbGF0ZVwifSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL2NvbXBvbmVudHMvVGltZUljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNiNTNjOGFlJlxudmFyIFRpbWVJY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfM2I1M2M4YWVfcmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnc3ZnJyx7YXR0cnM6e1widmVyc2lvblwiOlwiMS4xXCIsXCJyb2xlXCI6XCJwcmVzZW50YXRpb25cIixcIndpZHRoXCI6XCIxNlwiLFwiaGVpZ2h0XCI6XCIxNlwiLFwiZmlsbFwiOl92bS5maWxsLFwidmlld0JveFwiOlwiMCAwIDUxMiA1MTJcIn19LFtfYygncGF0aCcse2F0dHJzOntcImRcIjpcIk0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NlMxMTkgNTA0IDI1NiA1MDQgNTA0IDM5MyA1MDQgMjU2IDM5MyA4IDI1NiA4ek0zMTMuMSAzNTguMUwyMjQuOSAyOTRDMjIxLjggMjkxLjcgMjIwXFxuICAgIDI4OC4xIDIyMCAyODQuM1YxMTZDMjIwIDEwOS40IDIyNS40IDEwNCAyMzIgMTA0SDI4MEMyODYuNiAxMDQgMjkyIDEwOS40IDI5MiAxMTZWMjUzLjdMMzU1LjUgMjk5LjlDMzYwLjkgMzAzLjhcXG4gICAgMzYyIDMxMS4zIDM1OC4xIDMxNi43TDMyOS45IDM1NS41QzMyNiAzNjAuOCAzMTguNSAzNjIgMzEzLjEgMzU4LjF6XCJ9fSldKX1cbnZhciBUaW1lSWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiNTNjOGFlX3N0YXRpY1JlbmRlckZucyA9IFtdXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9UaW1lSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2I1M2M4YWUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMy0wIS4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy9UaW1lSWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRpbWVJY29udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgcHJvcHM6IHtcbiAgICBmaWxsOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnI2Y5ZjlmOSdcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9UaW1lSWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29tcG9uZW50c19UaW1lSWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChUaW1lSWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9UaW1lSWNvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBUaW1lSWNvbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIGNvbXBvbmVudHNfVGltZUljb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIFRpbWVJY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfM2I1M2M4YWVfcmVuZGVyLFxuICBUaW1lSWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiNTNjOGFlX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRpbWVJY29uID0gKFRpbWVJY29uX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz97XCJjYWNoZURpcmVjdG9yeVwiOlwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXCIsXCJjYWNoZUlkZW50aWZpZXJcIjpcIjE5ZTFhMGE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcIn0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9jb21wb25lbnRzL0NhbGVuZGFySWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg2ZmQ3YTUmXG52YXIgQ2FsZW5kYXJJY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfNzg2ZmQ3YTVfcmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnc3ZnJyx7YXR0cnM6e1widmVyc2lvblwiOlwiMS4xXCIsXCJ3aWR0aFwiOlwiMTRcIixcImhlaWdodFwiOlwiMTZcIixcInZpZXdCb3hcIjpcIjAgMCA0NDggNTEyXCIsXCJ4bWxuc1wiOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImZpbGxcIjpfdm0uZmlsbH19LFtfYygncGF0aCcse2F0dHJzOntcImRcIjpcIk00MzYgMTYwSDEyQzUuNCAxNjAgMCAxNTQuNiAwIDE0OFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMTJDOTYgNS40IDEwMS40IDAgMTA4IDBIMTQ4QzE1NC42IDAgMTYwIDUuNCAxNjBcXG4gICAgMTJWNjRIMjg4VjEyQzI4OCA1LjQgMjkzLjQgMCAzMDAgMEgzNDBDMzQ2LjYgMCAzNTIgNS40IDM1MiAxMlY2NEg0MDBDNDI2LjUgNjQgNDQ4IDg1LjUgNDQ4IDExMlYxNDhDNDQ4IDE1NC42XFxuICAgIDQ0Mi42IDE2MCA0MzYgMTYwek0xMiAxOTJINDM2QzQ0Mi42IDE5MiA0NDggMTk3LjQgNDQ4IDIwNFY0NjRDNDQ4IDQ5MC41IDQyNi41IDUxMiA0MDAgNTEySDQ4QzIxLjUgNTEyIDAgNDkwLjUgMFxcbiAgICA0NjRWMjA0QzAgMTk3LjQgNS40IDE5MiAxMiAxOTJ6TTEyOCAzOTZDMTI4IDM4OS40IDEyMi42IDM4NCAxMTYgMzg0SDc2QzY5LjQgMzg0IDY0IDM4OS40IDY0IDM5NlY0MzZDNjQgNDQyLjYgNjkuNFxcbiAgICA0NDggNzYgNDQ4SDExNkMxMjIuNiA0NDggMTI4IDQ0Mi42IDEyOCA0MzZWMzk2ek0xMjggMjY4QzEyOCAyNjEuNCAxMjIuNiAyNTYgMTE2IDI1Nkg3NkM2OS40IDI1NiA2NCAyNjEuNCA2NFxcbiAgICAyNjhWMzA4QzY0IDMxNC42IDY5LjQgMzIwIDc2IDMyMEgxMTZDMTIyLjYgMzIwIDEyOCAzMTQuNiAxMjggMzA4VjI2OHpNMjU2IDM5NkMyNTYgMzg5LjQgMjUwLjYgMzg0IDI0NFxcbiAgICAzODRIMjA0QzE5Ny40IDM4NCAxOTIgMzg5LjQgMTkyIDM5NlY0MzZDMTkyIDQ0Mi42IDE5Ny40IDQ0OCAyMDQgNDQ4SDI0NEMyNTAuNiA0NDggMjU2IDQ0Mi42IDI1NiA0MzZWMzk2ek0yNTZcXG4gICAgMjY4QzI1NiAyNjEuNCAyNTAuNiAyNTYgMjQ0IDI1NkgyMDRDMTk3LjQgMjU2IDE5MiAyNjEuNCAxOTIgMjY4VjMwOEMxOTIgMzE0LjYgMTk3LjQgMzIwIDIwNCAzMjBIMjQ0QzI1MC42IDMyMCAyNTZcXG4gICAgMzE0LjYgMjU2IDMwOFYyNjh6TTM4NCAzOTZDMzg0IDM4OS40IDM3OC42IDM4NCAzNzIgMzg0SDMzMkMzMjUuNCAzODQgMzIwIDM4OS40IDMyMCAzOTZWNDM2QzMyMCA0NDIuNiAzMjUuNCA0NDhcXG4gICAgMzMyIDQ0OEgzNzJDMzc4LjYgNDQ4IDM4NCA0NDIuNiAzODQgNDM2VjM5NnpNMzg0IDI2OEMzODQgMjYxLjQgMzc4LjYgMjU2IDM3MiAyNTZIMzMyQzMyNS40IDI1NiAzMjAgMjYxLjQgMzIwXFxuICAgIDI2OFYzMDhDMzIwIDMxNC42IDMyNS40IDMyMCAzMzIgMzIwSDM3MkMzNzguNiAzMjAgMzg0IDMxNC42IDM4NCAzMDhWMjY4elwifX0pXSl9XG52YXIgQ2FsZW5kYXJJY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfNzg2ZmQ3YTVfc3RhdGljUmVuZGVyRm5zID0gW11cblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb21wb25lbnRzL0NhbGVuZGFySWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg2ZmQ3YTUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMy0wIS4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhckljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIENhbGVuZGFySWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIHByb3BzOiB7XG4gICAgZmlsbDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyNmOWY5ZjknXG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXJJY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb21wb25lbnRzX0NhbGVuZGFySWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChDYWxlbmRhckljb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXJJY29uLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIENhbGVuZGFySWNvbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIGNvbXBvbmVudHNfQ2FsZW5kYXJJY29udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBDYWxlbmRhckljb252dWVfdHlwZV90ZW1wbGF0ZV9pZF83ODZmZDdhNV9yZW5kZXIsXG4gIENhbGVuZGFySWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzc4NmZkN2E1X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIENhbGVuZGFySWNvbiA9IChDYWxlbmRhckljb25fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzP3tcImNhY2hlRGlyZWN0b3J5XCI6XCJub2RlX21vZHVsZXMvLmNhY2hlL3Z1ZS1sb2FkZXJcIixcImNhY2hlSWRlbnRpZmllclwiOlwiMTllMWEwYTQtdnVlLWxvYWRlci10ZW1wbGF0ZVwifSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL2NvbXBvbmVudHMvTG9jYWxlQ2hhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NTJhYWZjMiZcbnZhciBMb2NhbGVDaGFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF82NTJhYWZjMl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCd1bCcsW19jKCdsaScse2RvbVByb3BzOntcInRleHRDb250ZW50XCI6X3ZtLl9zKF92bS5sYWJlbCl9LG9uOntcImNsaWNrXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLiRlbWl0KCdjaGFuZ2UnLCBfdm0uYWN0aXZlSXRlbSl9fX0pXSl9XG52YXIgTG9jYWxlQ2hhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjUyYWFmYzJfc3RhdGljUmVuZGVyRm5zID0gW11cblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb21wb25lbnRzL0xvY2FsZUNoYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjUyYWFmYzImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMy0wIS4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy9Mb2NhbGVDaGFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgTG9jYWxlQ2hhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0xvY2FsZUNoYW5nZScsXG4gIHByb3BzOiB7XG4gICAgbG9jYWxlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29yZToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvY2FsZURhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGFjdGl2ZUl0ZW06IGZ1bmN0aW9uIGFjdGl2ZUl0ZW0oKSB7XG4gICAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmxvY2FsZXMuaW5kZXhPZih0aGlzLmxvY2FsZURhdGEubmFtZSkgKyAxO1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSB0aGlzLmxvY2FsZXMubGVuZ3RoKSBhY3RpdmVJbmRleCA9IDA7XG4gICAgICByZXR1cm4gU3RyaW5nKHRoaXMubG9jYWxlc1thY3RpdmVJbmRleF0pO1xuICAgIH0sXG4gICAgbGFiZWw6IGZ1bmN0aW9uIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29yZS5sb2NhbGVzQ29uZmlnW3RoaXMuYWN0aXZlSXRlbV0ubGFuZy5sYWJlbCB8fCB0aGlzLmFjdGl2ZUl0ZW0udG9VcHBlckNhc2UoKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9Mb2NhbGVDaGFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbXBvbmVudHNfTG9jYWxlQ2hhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKExvY2FsZUNoYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9Mb2NhbGVDaGFuZ2UudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgTG9jYWxlQ2hhbmdlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19Mb2NhbGVDaGFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIExvY2FsZUNoYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY1MmFhZmMyX3JlbmRlcixcbiAgTG9jYWxlQ2hhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjUyYWFmYzJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgTG9jYWxlQ2hhbmdlID0gKExvY2FsZUNoYW5nZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCIxOWUxYTBhNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy90aW1lL1RpbWVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTQ0Y2I4OCZcbnZhciBUaW1lU2VjdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFlNDRjYjg4X3JlbmRlciA9IGZ1bmN0aW9uICgpIHt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoJ2Rpdicse2NsYXNzOlsndnBkLWFkZG9uLWxpc3QgdnBkLXRpbWUnLCB7ICd2cGQtZGlzYWJsZWQnOiBfdm0uaXNEaXNhYmxlVGltZSB9XX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1hZGRvbi1saXN0LWNvbnRlbnRcIn0sW19jKCd0aW1lLWNvbHVtbicse3JlZjpcImhvdXJcIixzdGF0aWNDbGFzczpcInZwZC10aW1lLWhcIixhdHRyczp7XCJhdHRyaWJ1dGVzXCI6X3ZtLnRpbWVBdHRyaWJ1dGVzLFwiZm9ybWF0dGVyXCI6X3ZtLmNvbnZlcnRUb0xvY2FsZU51bWJlcn0sb246e1wiZmlsbGVkXCI6X3ZtLmZvY3VzTmV4dH0sbW9kZWw6e3ZhbHVlOihfdm0uaG91ck1vZGVsKSxjYWxsYmFjazpmdW5jdGlvbiAoJCR2KSB7X3ZtLmhvdXJNb2RlbD0kJHZ9LGV4cHJlc3Npb246XCJob3VyTW9kZWxcIn19KSxfYygndGltZS1jb2x1bW4nLHtyZWY6XCJtaW51dGVcIixzdGF0aWNDbGFzczpcInZwZC10aW1lLW1cIixhdHRyczp7XCJqdW1wXCI6X3ZtLmp1bXBNaW51dGUsXCJhdHRyaWJ1dGVzXCI6X3ZtLnRpbWVBdHRyaWJ1dGVzLFwiZm9ybWF0dGVyXCI6X3ZtLmNvbnZlcnRUb0xvY2FsZU51bWJlcn0sbW9kZWw6e3ZhbHVlOihfdm0ubWludXRlTW9kZWwpLGNhbGxiYWNrOmZ1bmN0aW9uICgkJHYpIHtfdm0ubWludXRlTW9kZWw9JCR2fSxleHByZXNzaW9uOlwibWludXRlTW9kZWxcIn19KV0sMSldKX1cbnZhciBUaW1lU2VjdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFlNDRjYjg4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy90aW1lL1RpbWVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTQ0Y2I4OCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzP3tcImNhY2hlRGlyZWN0b3J5XCI6XCJub2RlX21vZHVsZXMvLmNhY2hlL3Z1ZS1sb2FkZXJcIixcImNhY2hlSWRlbnRpZmllclwiOlwiMTllMWEwYTQtdnVlLWxvYWRlci10ZW1wbGF0ZVwifSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL2NvbXBvbmVudHMvdGltZS9UaW1lQ29sdW1uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YzIzN2YxNyZcbnZhciBUaW1lQ29sdW1udnVlX3R5cGVfdGVtcGxhdGVfaWRfNGMyMzdmMTdfcmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ2cGQtdGltZS1jb2x1bW5cIixjbGFzczpfdm0uY2xhc3NGYXN0Q291bnRlcn0sW19jKCdidG4nLHtzdGF0aWNDbGFzczpcInZwZC11cC1hcnJvdy1idG5cIixvbjp7XCJ1cGRhdGVcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0udXBkYXRlKDEpfSxcImZhc3RVcGRhdGVcIjpfdm0uZmFzdFVwZGF0ZUNvdW50ZXJ9fSxbX2MoJ2Fycm93Jyx7YXR0cnM6e1wid2lkdGhcIjpcIjIwXCIsXCJkaXJlY3Rpb25cIjpcInVwXCJ9fSldLDEpLF9jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1jb3VudGVyXCIsY2xhc3M6W192bS5kaXJlY3Rpb25DbGFzcywgeyAndnBkLWlzLWZvY3VzZWQnOiBfdm0uaXNJbnB1dEZvY3VzZWQgfV0sb246e1wibW91c2V3aGVlbFwiOmZ1bmN0aW9uKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyRldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBfdm0ud2hlZWxVcGRhdGUoJGV2ZW50KX0sXCJET01Nb3VzZVNjcm9sbFwiOmZ1bmN0aW9uKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyRldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBfdm0ud2hlZWxVcGRhdGUoJGV2ZW50KX19fSxbX2MoJ2lucHV0Jyx7ZGlyZWN0aXZlczpbe25hbWU6XCJtb2RlbFwiLHJhd05hbWU6XCJ2LW1vZGVsXCIsdmFsdWU6KF92bS5pbnB1dFZhbHVlKSxleHByZXNzaW9uOlwiaW5wdXRWYWx1ZVwifV0scmVmOlwiaW5wdXRcIixjbGFzczp7ICdpcy1lbXB0eSc6ICFfdm0uaW5wdXRWYWx1ZS5sZW5ndGggfSxhdHRyczp7XCJ0eXBlXCI6XCJ0ZWxcIixcIm1heGxlbmd0aFwiOl92bS5zZWxmVmFsdWUubGVuZ3RofSxkb21Qcm9wczp7XCJ2YWx1ZVwiOihfdm0uaW5wdXRWYWx1ZSl9LG9uOntcImlucHV0XCI6W2Z1bmN0aW9uKCRldmVudCl7aWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpeyByZXR1cm47IH1fdm0uaW5wdXRWYWx1ZT0kZXZlbnQudGFyZ2V0LnZhbHVlfSxfdm0ub25JbnB1dENoYW5nZV0sXCJmb2N1c1wiOmZ1bmN0aW9uKCRldmVudCl7X3ZtLmlzSW5wdXRGb2N1c2VkID0gdHJ1ZX0sXCJibHVyXCI6ZnVuY3Rpb24oJGV2ZW50KXtfdm0uaXNJbnB1dEZvY3VzZWQgPSBmYWxzZX0sXCJrZXlkb3duXCI6W2Z1bmN0aW9uKCRldmVudCl7aWYoISRldmVudC50eXBlLmluZGV4T2YoJ2tleScpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsXCJ1cFwiLDM4LCRldmVudC5rZXksW1wiVXBcIixcIkFycm93VXBcIl0pKXsgcmV0dXJuIG51bGw7IH0kZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLnVwZGF0ZSgxKX0sZnVuY3Rpb24oJGV2ZW50KXtpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJl92bS5faygkZXZlbnQua2V5Q29kZSxcImRvd25cIiw0MCwkZXZlbnQua2V5LFtcIkRvd25cIixcIkFycm93RG93blwiXSkpeyByZXR1cm4gbnVsbDsgfSRldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBfdm0udXBkYXRlKC0xKX0sZnVuY3Rpb24oJGV2ZW50KXtpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJl92bS5faygkZXZlbnQua2V5Q29kZSxcImVudGVyXCIsMTMsJGV2ZW50LmtleSxcIkVudGVyXCIpKXsgcmV0dXJuIG51bGw7IH0kZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLm9uSW5wdXRTdWJtaXQoJGV2ZW50KX1dfX0pLF92bS5fbCgoX3ZtLnZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJycpKSxmdW5jdGlvbihpdGVtLGkpe3JldHVybiBfYygnZGl2Jyxfdm0uX2Ioe2tleTooXCJoX19cIiArIGkpLHN0YXRpY0NsYXNzOlwidnBkLWNvdW50ZXItaXRlbVwifSwnZGl2Jyxfdm0uYXR0cmlidXRlcyxmYWxzZSksW19jKCd0cmFuc2l0aW9uJyx7YXR0cnM6e1wibmFtZVwiOlwic2xpZGVZXCJ9fSxbX2MoJ3NwYW4nLHtrZXk6KGl0ZW0gKyBcIl9fXCIgKyBpICsgXCJfaFwiKSxzdHlsZTooe1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2FsbCAnICsgX3ZtLnRyYW5zaXRpb25TcGVlZCArICdtcyBlYXNlLWluLW91dCdcbiAgICAgICAgICB9KSxkb21Qcm9wczp7XCJ0ZXh0Q29udGVudFwiOl92bS5fcyhfdm0uZm9ybWF0dGVyKGl0ZW0pKX19KV0pXSwxKX0pXSwyKSxfYygnYnRuJyx7c3RhdGljQ2xhc3M6XCJ2cGQtZG93bi1hcnJvdy1idG5cIixvbjp7XCJ1cGRhdGVcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0udXBkYXRlKC0xKX0sXCJmYXN0VXBkYXRlXCI6X3ZtLmZhc3RVcGRhdGVDb3VudGVyfX0sW19jKCdhcnJvdycse2F0dHJzOntcIndpZHRoXCI6XCIyMFwiLFwiZGlyZWN0aW9uXCI6XCJkb3duXCJ9fSldLDEpXSwxKX1cbnZhciBUaW1lQ29sdW1udnVlX3R5cGVfdGVtcGxhdGVfaWRfNGMyMzdmMTdfc3RhdGljUmVuZGVyRm5zID0gW11cblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb21wb25lbnRzL3RpbWUvVGltZUNvbHVtbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGMyMzdmMTcmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz97XCJjYWNoZURpcmVjdG9yeVwiOlwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXCIsXCJjYWNoZUlkZW50aWZpZXJcIjpcIjE5ZTFhMGE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcIn0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9jb21wb25lbnRzL0J0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzcwYzc4Y2YmXG52YXIgQnRudnVlX3R5cGVfdGVtcGxhdGVfaWRfNzcwYzc4Y2ZfcmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnZGl2Jyx7b246e1wibW91c2Vkb3duXCI6X3ZtLmRvd24sXCJ0b3VjaHN0YXJ0XCI6X3ZtLmRvd24sXCJtb3VzZXVwXCI6X3ZtLmNsaWNrfX0sW192bS5fdChcImRlZmF1bHRcIildLDIpfVxudmFyIEJ0bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzc3MGM3OGNmX3N0YXRpY1JlbmRlckZucyA9IFtdXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9CdG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc3MGM3OGNmJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTMtMCEuL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL2NvbXBvbmVudHMvQnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBCdG52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnQnRuJyxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJ2YWw6IGZhbHNlLFxuICAgICAgdGltZW91dDogZmFsc2UsXG4gICAgICBpbnRlcnZhbERlbGF5OiAxNTBcbiAgICB9O1xuICB9LFxuICBjb21wdXRlZDoge30sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dCB8fCBfdGhpcy5pbnRlcnZhbCkgX3RoaXMudXAoKTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy50aW1lb3V0IHx8IF90aGlzLmludGVydmFsKSBfdGhpcy51cCgpO1xuICAgIH0pO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmludGVydmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZScsIDEpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZG93bjogZnVuY3Rpb24gZG93bigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBmYWxzZTtcbiAgICAgIHRoaXMudGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLmludGVydmFsRm4oKTtcbiAgICAgIH0sIDYwMCk7XG4gICAgfSxcbiAgICB1cDogZnVuY3Rpb24gdXAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2Zhc3RVcGRhdGUnLCBmYWxzZSk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW50ZXJ2YWxEZWxheSA9IDE1MDtcbiAgICB9LFxuICAgIGludGVydmFsRm46IGZ1bmN0aW9uIGludGVydmFsRm4oKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5pbnRlcnZhbCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLiRlbWl0KCd1cGRhdGUnLCAxKTtcblxuICAgICAgICBfdGhpczMuJGVtaXQoJ2Zhc3RVcGRhdGUnLCB0cnVlKTtcblxuICAgICAgICBfdGhpczMuaW50ZXJ2YWxGbigpO1xuXG4gICAgICAgIGlmIChfdGhpczMuaW50ZXJ2YWxEZWxheSA+IDMwKSBfdGhpczMuaW50ZXJ2YWxEZWxheSAtPSAzO1xuICAgICAgfSwgdGhpcy5pbnRlcnZhbERlbGF5KTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9CdG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbXBvbmVudHNfQnRudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKEJ0bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9CdG4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgQnRuX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19CdG52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIEJ0bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzc3MGM3OGNmX3JlbmRlcixcbiAgQnRudnVlX3R5cGVfdGVtcGxhdGVfaWRfNzcwYzc4Y2Zfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQnRuID0gKEJ0bl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9tb2R1bGVzL3V0aWxzLmpzXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciB1dGlsc190b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG4gICAgdXRpbHNfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHRvb2xzID0ge1xuICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB1dGlsc190b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH0sXG4gIGlzQXJyYXk6IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gICAgcmV0dXJuIHV0aWxzX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfSxcbiAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC5cbiAgICAvLyBCZWNhdXNlIG9mIElFLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbFxuICAgIGlmICghb2JqIHx8IHV0aWxzX3RvU3RyaW5nLmNhbGwob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgb2JqLm5vZGVUeXBlIHx8IG9iai5zZXRJbnRlcnZhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXG5cbiAgICBpZiAob2JqLmNvbnN0cnVjdG9yICYmICF1dGlsc19oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ2NvbnN0cnVjdG9yJykgJiYgIXV0aWxzX2hhc093blByb3BlcnR5LmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsXG4gICAgLy8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uXG5cblxuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgIDtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgdXRpbHNfaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH1cbn07XG4vKlxuICogalF1ZXJ5IGV4dGVuZCBmdW5jdGlvblxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYmVudHNhaS8zMTUwOTM2XG4gKi9cblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgdmFyIG9wdGlvbnMsXG4gICAgICBuYW1lLFxuICAgICAgc3JjLFxuICAgICAgY29weSxcbiAgICAgIGNvcHlJc0FycmF5LFxuICAgICAgY2xvbmUsXG4gICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sXG4gICAgICBpID0gMSxcbiAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICBkZWVwID0gZmFsc2U7IC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblxuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgZGVlcCA9IHRhcmdldDtcbiAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307IC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblxuICAgIGkgPSAyO1xuICB9IC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXG5cbiAgaWYgKF90eXBlb2YodGFyZ2V0KSAhPT0gJ29iamVjdCcgJiYgIXRvb2xzLmlzRnVuY3Rpb24odGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHt9O1xuICB9IC8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXG5cbiAgaWYgKGxlbmd0aCA9PT0gaSkge1xuICAgIHRhcmdldCA9IHRoaXM7XG4gICAgLS1pO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcbiAgICBpZiAoKG9wdGlvbnMgPSBhcmd1bWVudHNbaV0pICE9PSBudWxsKSB7XG4gICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG4gICAgICBmb3IgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICBzcmMgPSB0YXJnZXRbbmFtZV07XG4gICAgICAgIGNvcHkgPSBvcHRpb25zW25hbWVdOyAvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gY29weSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXG5cbiAgICAgICAgaWYgKGRlZXAgJiYgY29weSAmJiAodG9vbHMuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSB0b29scy5pc0FycmF5KGNvcHkpKSkpIHtcbiAgICAgICAgICBpZiAoY29weUlzQXJyYXkpIHtcbiAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7XG4gICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiB0b29scy5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgdG9vbHMuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG4gICAgICAgICAgfSAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblxuXG4gICAgICAgICAgdGFyZ2V0W25hbWVdID0gZXh0ZW5kKGRlZXAsIGNsb25lLCBjb3B5KTsgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICB9IGVsc2UgaWYgKGNvcHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtuYW1lXSA9IGNvcHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3RcblxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuLyoqXG4gKiBTaW1wbGUgaGVscGVyIGZvciBjbG9uZSBhbiBBcnJheSBvZiBkYXRlcyAoaW4gbW9tZW50KVxuICogQHBhcmFtIGFyciBBcnJheVxuICogQHJldHVybnMgQXJyYXlcbiAqL1xuXG5cbnZhciBjbG9uZURhdGVzID0gZnVuY3Rpb24gY2xvbmVEYXRlcyhhcnIpIHtcbiAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICByZXR1cm4gZC5jbG9uZSgpO1xuICB9KTtcbn07XG4vKipcbiAqIENoZWNrIGlmIHR3byBkYXRlcyBhcmUgb24gdGhlIHNhbWUgZGF5XG4gKiBAcGFyYW0gYSBNb21lbnQgZGF0ZVxuICogQHBhcmFtIGIgTW9tZW50IGRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cbnZhciBpc1NhbWVEYXkgPSBmdW5jdGlvbiBpc1NhbWVEYXkoYSwgYikge1xuICBhID0gYS5jbG9uZSgpLnNldCh7XG4gICAgaDogMTIsXG4gICAgbTogMFxuICB9KTtcbiAgcmV0dXJuIE1hdGguYWJzKGEuZGlmZihiLCAnaG91cnMnKSkgPCAyMDtcbn07XG4vKipcbiAqIGZ1bGwgY2xvbmUgdXNpbmcgSlNPTi5zdHJpbmdpZnlcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cblxudmFyIGNsb25lID0gZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xufTtcbi8qKlxuICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMDI5Mjk5LzMxODM2OTlcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gZHVyYXRpb25cbiAqIEBwYXJhbSBjYWxsYmFja1xuICovXG5cbnZhciBzY3JvbGxJbnRvQ2VudGVyID0gZnVuY3Rpb24gc2Nyb2xsSW50b0NlbnRlcihlbGVtZW50KSB7XG4gIHZhciBkdXJhdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjAwO1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgdmFyIHN0YXJ0aW5nVG9wID0gcGFyZW50LnNjcm9sbFRvcDtcbiAgdmFyIHBhcmVudENlbnRlciA9IHBhcmVudC5vZmZzZXRIZWlnaHQgLyAyO1xuICB2YXIgZWxlbWVudENlbnRlciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjtcbiAgdmFyIGRpc3RhbmNlID0gZWxlbWVudC5vZmZzZXRUb3AgLSBzdGFydGluZ1RvcCAtIHBhcmVudENlbnRlciArIGVsZW1lbnRDZW50ZXI7XG4gIHZhciBzdGFydDtcblxuICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKCFkdXJhdGlvbikge1xuICAgIHBhcmVudC5zY3JvbGxUbygwLCBzdGFydGluZ1RvcCArIGRpc3RhbmNlKTtcbiAgICBkb25lKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBzdGVwKHRpbWVzdGFtcCkge1xuICAgIGlmICghc3RhcnQpIHN0YXJ0ID0gdGltZXN0YW1wO1xuICAgIHZhciB0aW1lID0gdGltZXN0YW1wIC0gc3RhcnQ7XG4gICAgdmFyIHBlcmNlbnQgPSBNYXRoLm1pbih0aW1lIC8gZHVyYXRpb24sIDEpO1xuICAgIHBhcmVudC5zY3JvbGxUbygwLCBzdGFydGluZ1RvcCArIGRpc3RhbmNlICogcGVyY2VudCk7IC8vIFByb2NlZWQgd2l0aCBhbmltYXRpb24gYXMgbG9uZyBhcyB3ZSB3YW50ZWQgaXQgdG8uXG5cbiAgICBpZiAodGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb25lKCk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZWwsIHR5cGUsIGhhbmRsZXIpIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gIGlmICghZWwpIHRocm93IG5ldyBFcnJvcignQ2FudCBmaW5kIGN1c3RvbSBlbGVtZW50OiAnICsgZWwpO1xuICBpZiAoZWwuYWRkRXZlbnRMaXN0ZW5lcikgZWwuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCB0cnVlKTtlbHNlIGVsLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBoYW5kbGVyLCB0cnVlKTtcbn07XG52YXIgYWRkTGl2ZUV2ZW50ID0gZnVuY3Rpb24gYWRkTGl2ZUV2ZW50KHNlbGVjdG9yLCBldmVudCwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgYWRkRXZlbnRMaXN0ZW5lcihjb250ZXh0IHx8IGRvY3VtZW50LCBldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQuY2xvc2VzdChzZWxlY3RvcikpIGNhbGxiYWNrLmNhbGwoZS50YXJnZXQsIGUpO1xuICB9KTtcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1dGlscyA9ICh7XG4gIGV4dGVuZDogZXh0ZW5kLFxuICBjbG9uZTogY2xvbmVcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvbW9kdWxlcy9taXhpbnMuanNcblxuLyoqXG4gKiBNb2RlbCBNaXhpblxuICovXG5cbnZhciBtb2RlbE1peGluID0ge1xuICBtb2RlbDoge1xuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgZXZlbnQ6ICdpbnB1dCdcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyLCBBcnJheSwgT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxmVmFsdWU6ICcnXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZToge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZlZhbHVlICE9PSB2YWwpIHRoaXMuc2VsZlZhbHVlID0gdmFsO1xuICAgICAgfSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGRlZXA6IHRydWVcbiAgICB9LFxuICAgIHNlbGZWYWx1ZTogZnVuY3Rpb24gc2VsZlZhbHVlKHZhbCkge1xuICAgICAgaWYgKHZhbCAhPT0gdGhpcy52YWx1ZSkgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgIH1cbiAgfVxufTtcbi8qKlxuICogQ2hhbmdlIHJvdXRlIHdoZW4gdmlzaWJsZSBjaGFuZ2VzXG4gKiBAdHlwZSBPYmplY3RcbiAqL1xuXG52YXIgcG9wdXBSb3V0ZUNoYW5nZXIgPSB7XG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlclF1ZXJ5TmFtZTogbnVsbFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pbml0Um91dGVyKCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpbml0Um91dGVyOiBmdW5jdGlvbiBpbml0Um91dGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGlzU2V0ID0gZnVuY3Rpb24gaXNTZXQocHJvcCkge1xuICAgICAgICByZXR1cm4gcHJvcCB8fCB0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZyc7XG4gICAgICB9O1xuXG4gICAgICB2YXIgdXNlUm91dGVyID0gdGhpcy51c2VSb3V0ZXI7XG4gICAgICBpZiAoIWlzU2V0KHVzZVJvdXRlcikgfHwgdGhpcy5pc1BvcG92ZXIgfHwgdGhpcy5pbmxpbmUgfHwgIXRoaXMuJHJvdXRlcikgcmV0dXJuO1xuICAgICAgdGhpcy4kd2F0Y2goJ3Zpc2libGUnLCB0aGlzLm9uVmlzaWJsZUNoYW5nZSk7XG4gICAgICB0aGlzLiR3YXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy4kcm91dGUucXVlcnk7XG4gICAgICB9LCB0aGlzLm9uUm91dGVDaGFuZ2UsIHtcbiAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm91dGVyUXVlcnlOYW1lID0gdHlwZW9mIHVzZVJvdXRlciA9PT0gJ3N0cmluZycgJiYgdXNlUm91dGVyID8gdXNlUm91dGVyIDogdGhpcy5pZDtcbiAgICB9LFxuICAgIG9uVmlzaWJsZUNoYW5nZTogZnVuY3Rpb24gb25WaXNpYmxlQ2hhbmdlKHZpc2libGUpIHtcbiAgICAgIHZhciBjdXJyZW50Um91dGUgPSB0aGlzLiRyb3V0ZTtcbiAgICAgIHZhciBxdWVyeSA9IGNsb25lKGN1cnJlbnRSb3V0ZS5xdWVyeSB8fCB7fSk7XG5cbiAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgIHF1ZXJ5W3RoaXMucm91dGVyUXVlcnlOYW1lXSA9ICdhY3RpdmUnO1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeVt0aGlzLnJvdXRlclF1ZXJ5TmFtZV0pIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmJhY2soKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uUm91dGVDaGFuZ2U6IGZ1bmN0aW9uIG9uUm91dGVDaGFuZ2UoKSB7XG4gICAgICB2YXIgdmlzaWJsZSA9ICEhdGhpcy4kcm91dGUucXVlcnlbdGhpcy5yb3V0ZXJRdWVyeU5hbWVdO1xuICAgICAgaWYgKHZpc2libGUgJiYgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZTtcbiAgICB9XG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTMtMCEuL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEtMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL2NvbXBvbmVudHMvdGltZS9UaW1lQ29sdW1uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUaW1lQ29sdW1udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ1RpbWVDb2x1bW4nLFxuICBjb21wb25lbnRzOiB7XG4gICAgQnRuOiBCdG4sXG4gICAgQXJyb3c6IEFycm93XG4gIH0sXG4gIG1peGluczogW21vZGVsTWl4aW5dLFxuICBwcm9wczoge1xuICAgIGp1bXA6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9LFxuICAgIGZvcm1hdHRlcjoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlyZWN0aW9uQ2xhc3M6ICdkaXJlY3Rpb24tbmV4dCcsXG4gICAgICBjbGFzc0Zhc3RDb3VudGVyOiAnJyxcbiAgICAgIHRyYW5zaXRpb25TcGVlZDogMzAwLFxuICAgICAgdGltZW91dDogZmFsc2UsXG4gICAgICBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgIGlzSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlucHV0VmFsdWU6ICcnXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBzZWxmVmFsdWU6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsLCBvbGQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBpZiAob2xkKSB0aGlzLnNldERpcmVjdGlvbih2YWwsIG9sZCk7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuc2VsZlZhbHVlO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLnZhbHVlLnRvU3RyaW5nKCkgIT09IF90aGlzLnNlbGZWYWx1ZS50b1N0cmluZygpKSBfdGhpcy5zZWxmVmFsdWUgPSBfdGhpcy52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgfSxcbiAgICBpc0lucHV0Rm9jdXNlZDogZnVuY3Rpb24gaXNJbnB1dEZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuc2VsZlZhbHVlO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLiRyZWZzLmlucHV0LnNlbGVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgIHRoaXMub25JbnB1dFN1Ym1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5zZWxmVmFsdWUgPSArdGhpcy5zZWxmVmFsdWUgKyB2YWx1ZSAqIHRoaXMuanVtcDtcbiAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICBkZWYgPSBub3cgLSB0aGlzLmxhc3RVcGRhdGU7XG4gICAgICBpZiAoMjAgPCBkZWYgJiYgZGVmIDwgMzAwKSB0aGlzLnRyYW5zaXRpb25TcGVlZCA9IGRlZjtcbiAgICAgIHRoaXMubGFzdFVwZGF0ZSA9IG5vdztcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnRyYW5zaXRpb25TcGVlZCA9IDMwMDtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSxcbiAgICB3aGVlbFVwZGF0ZTogZnVuY3Rpb24gd2hlZWxVcGRhdGUoZSkge1xuICAgICAgdmFyIGdvVXAgPSAoZS53aGVlbERlbHRhWSB8fCAtZS5kZXRhaWwpID4gMDtcbiAgICAgIHRoaXMudXBkYXRlKGdvVXAgPyAxIDogLTEpO1xuICAgIH0sXG4gICAgZmFzdFVwZGF0ZUNvdW50ZXI6IGZ1bmN0aW9uIGZhc3RVcGRhdGVDb3VudGVyKGUpIHtcbiAgICAgIGlmICghZSkgdGhpcy50cmFuc2l0aW9uU3BlZWQgPSAzMDA7XG4gICAgICB0aGlzLmNsYXNzRmFzdENvdW50ZXIgPSBlID8gJ2Zhc3QtdXBkYXRpbmcnIDogJyc7XG4gICAgfSxcbiAgICBzZXREaXJlY3Rpb246IGZ1bmN0aW9uIHNldERpcmVjdGlvbih2YWwsIG9sZCkge1xuICAgICAgdGhpcy5kaXJlY3Rpb25DbGFzcyA9IHZhbCA+IG9sZCA/ICdkaXJlY3Rpb24tbmV4dCcgOiAnZGlyZWN0aW9uLXByZXYnO1xuICAgIH0sXG4gICAgb25JbnB1dFN1Ym1pdDogZnVuY3Rpb24gb25JbnB1dFN1Ym1pdCgpIHtcbiAgICAgIHRoaXMuc2VsZlZhbHVlID0gdGhpcy5pbnB1dFZhbHVlO1xuICAgICAgdGhpcy50cmFuc2l0aW9uU3BlZWQgPSAwO1xuICAgIH0sXG4gICAgb25JbnB1dENoYW5nZTogZnVuY3Rpb24gb25JbnB1dENoYW5nZShldmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPj0gdGhpcy5zZWxmVmFsdWUubGVuZ3RoKSB0aGlzLiRlbWl0KCdmaWxsZWQnKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy90aW1lL1RpbWVDb2x1bW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfVGltZUNvbHVtbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChUaW1lQ29sdW1udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb21wb25lbnRzL3RpbWUvVGltZUNvbHVtbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBUaW1lQ29sdW1uX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgdGltZV9UaW1lQ29sdW1udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBUaW1lQ29sdW1udnVlX3R5cGVfdGVtcGxhdGVfaWRfNGMyMzdmMTdfcmVuZGVyLFxuICBUaW1lQ29sdW1udnVlX3R5cGVfdGVtcGxhdGVfaWRfNGMyMzdmMTdfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgVGltZUNvbHVtbiA9IChUaW1lQ29sdW1uX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMy0wIS4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy90aW1lL1RpbWVTZWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUaW1lU2VjdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdUaW1lU2VjdGlvbicsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUaW1lQ29sdW1uOiBUaW1lQ29sdW1uXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgZGF0ZToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRpbWU6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcbiAgICBqdW1wTWludXRlOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICByb3VuZE1pbnV0ZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBpc0Rpc2FibGVUaW1lOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGdldEhpZ2hsaWdodHM6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNNb3JlOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG93ZXI6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbWluRGF0ZToge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbWF4RGF0ZToge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc2VsZWN0ZWREYXRlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udmVydFRvTG9jYWxlTnVtYmVyOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdGltZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIHRpbWVBdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SGlnaGxpZ2h0cygndCcsIHRoaXMudGltZSk7XG4gICAgfSxcbiAgICBob3VyTW9kZWw6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lLmZvcm1hdCgnSEgnKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHZhbCwgJ2hvdXJzJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtaW51dGVNb2RlbDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbWUuZm9ybWF0KCdtbScpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICB0aGlzLnNldFRpbWUodmFsLCAnbWludXRlcycpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB0aW1lOiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yb3VuZE1pbnV0ZSkge1xuICAgICAgICAgIHZhciB0aW1lID0gdGhpcy50aW1lLmNsb25lKCk7XG4gICAgICAgICAgdmFyIGptID0gdGhpcy5qdW1wTWludXRlO1xuICAgICAgICAgIHZhciBtID0gKGptIC0gdGltZS5taW51dGUoKSAlIGptKSAlIGptO1xuICAgICAgICAgIHRpbWUuYWRkKHtcbiAgICAgICAgICAgIG06IG1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0aW1lLnZhbHVlT2YoKSAhPT0gdGhpcy50aW1lLnZhbHVlT2YoKSkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRpbWUnLCB0aW1lKTsgLy8gQHRvZG86IHRoaXMgbGluZSBzaG91bGQgYXBwbHkgdGltZSB0byBjdXJyZW50IGRhdGUgc2VsZWN0aW9uLFxuICAgICAgICAgICAgLy8gbm90IGFsbCBvZiB0aGVtXG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkLnNldCh7XG4gICAgICAgICAgICAgICAgbTogdGltZS5taW51dGUoKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHNldFRpbWU6IGZ1bmN0aW9uIHNldFRpbWUodiwgaykge1xuICAgICAgdmFyIHRpbWUgPSB0aGlzLnRpbWUuY2xvbmUoKTtcbiAgICAgIHRpbWUuc2V0KGssIHYpO1xuXG4gICAgICBpZiAodGhpcy50eXBlICE9PSAndGltZScpIHtcbiAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmRhdGUuY2xvbmUoKTtcbiAgICAgICAgdGltZS5zZXQoe1xuICAgICAgICAgIHllYXI6IGRhdGUueWVhcigpLFxuICAgICAgICAgIG1vbnRoOiBkYXRlLm1vbnRoKCksXG4gICAgICAgICAgZGF0ZTogZGF0ZS5kYXRlKClcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGUuc2V0KHtcbiAgICAgICAgICBob3VyOiB0aW1lLmhvdXIoKSxcbiAgICAgICAgICBtaW51dGU6IHRpbWUubWludXRlKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpkYXRlJywgZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzTG93ZXIodGltZSkpIHRpbWUgPSB0aGlzLm1pbkRhdGUuY2xvbmUoKTtcbiAgICAgIGlmICh0aGlzLmlzTW9yZSh0aW1lKSkgdGltZSA9IHRoaXMubWF4RGF0ZS5jbG9uZSgpO1xuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRpbWUnLCB0aW1lKTtcbiAgICB9LFxuICAgIGZvY3VzTmV4dDogZnVuY3Rpb24gZm9jdXNOZXh0KCkge1xuICAgICAgdGhpcy4kcmVmcy5taW51dGUuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZm9jdXMoKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy90aW1lL1RpbWVTZWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lX1RpbWVTZWN0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKFRpbWVTZWN0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb21wb25lbnRzL3RpbWUvVGltZVNlY3Rpb24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgVGltZVNlY3Rpb25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICB0aW1lX1RpbWVTZWN0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBUaW1lU2VjdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFlNDRjYjg4X3JlbmRlcixcbiAgVGltZVNlY3Rpb252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZTQ0Y2I4OF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUaW1lU2VjdGlvbiA9IChUaW1lU2VjdGlvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCIxOWUxYTBhNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy9zaW1wbGUvU2ltcGxlTW9kZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODBjM2E1MTYmXG52YXIgU2ltcGxlTW9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwYzNhNTE2X3JlbmRlciA9IGZ1bmN0aW9uICgpIHt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidnBkLXNpbXBsZS1ib2R5XCJ9LFsoX3ZtLnNob3dIZWFkZXIpP19jKCdkaXYnLHtzdGF0aWNDbGFzczpcInZwZC1oZWFkZXJcIixzdHlsZTooeyAnYmFja2dyb3VuZC1jb2xvcic6IF92bS5jb2xvciB9KX0sW19jKCdkaXYnLFtfdm0uX3QoXCJoZWFkZXItZGF0ZVwiLFtfdm0uX3YoXCIgXCIrX3ZtLl9zKF92bS5jb252ZXJ0VG9Mb2NhbGVOdW1iZXIoX3ZtLmZvcm1hdHRlZERhdGUpKStcIiBcIildLG51bGwseyB2bTogX3ZtLnZtLCBmb3JtYXR0ZWREYXRlOiBfdm0uZm9ybWF0dGVkRGF0ZSB9KV0sMiksKF92bS5sb2NhbGVzLmxlbmd0aCA+IDEpP192bS5fdChcImxvY2FsZXNcIixbX2MoJ2xvY2FsZS1jaGFuZ2UnLHtzdGF0aWNDbGFzczpcInZwZC1sb2NhbGVzXCIsYXR0cnM6e1wibG9jYWxlLWRhdGFcIjpfdm0uY29yZS5sb2NhbGUsXCJjb3JlXCI6X3ZtLmNvcmUsXCJsb2NhbGVzXCI6X3ZtLmxvY2FsZXN9LG9uOntcImNoYW5nZVwiOl92bS5zZXRMb2NhbGV9fSldLG51bGwseyB2bTogX3ZtLnZtLCBsb2NhbGVzOiBfdm0ubG9jYWxlcywgc2V0TG9jYWxlOiBfdm0uc2V0TG9jYWxlIH0pOl92bS5fZSgpXSwyKTpfdm0uX2UoKSxfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ2cGQtc2ltcGxlLWNvbnRlbnRcIixvbjp7XCJtb3VzZWxlYXZlXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLiRlbWl0KCd1cGRhdGU6aG92ZXJlZC1pdGVtJywgbnVsbCl9fX0sWyhfdm0uaGFzU3RlcCgneScpKT9fYygnc2ltcGxlLW1vZGUtY29sdW1uJyx7YXR0cnM6e1wibGFiZWxcIjpfdm0ubGFuZy55ZWFyLFwidmFsdWVcIjpfdm0uc2VsZWN0ZWRZZWFyLFwibG9jYWxlXCI6X3ZtLmNvcmUubG9jYWxlLm5hbWV9fSxfdm0uX2woKF92bS55ZWFycyksZnVuY3Rpb24oeWVhcix5aSl7cmV0dXJuIF9jKCdkaXYnLF92bS5fYih7a2V5OnlpLGNsYXNzOltcbiAgICAgICAgICAndnBkLWFkZG9uLWxpc3QtaXRlbScsXG4gICAgICAgICAgeyAndnBkLXNlbGVjdGVkJzogeWVhci5zZWxlY3RlZCB9LFxuICAgICAgICAgIHllYXIuYXR0cmlidXRlcy5jbGFzc1xuICAgICAgICBdLHN0eWxlOihbXG4gICAgICAgICAgeyBjb2xvcjogeWVhci5zZWxlY3RlZCA/IF92bS5jb2xvciA6ICcnIH0sXG4gICAgICAgICAgeWVhci5hdHRyaWJ1dGVzLnN0eWxlXG4gICAgICAgIF0pLGF0dHJzOntcImRpc2FibGVkXCI6eWVhci5kaXNhYmxlZH0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJGVtaXQoJ3NlbGVjdC15ZWFyJywgeWVhcil9fX0sJ2RpdicseWVhci5hdHRyaWJ1dGVzLGZhbHNlKSxbX3ZtLl90KFwieWVhci1pdGVtXCIsW192bS5fdihcIiBcIitfdm0uX3MoX3ZtLmNvbnZlcnRUb0xvY2FsZU51bWJlcih5ZWFyLnhGb3JtYXQoJ2pZWVlZJykpKStcIiBcIildLG51bGwseyB2bTogX3ZtLnZtLCB5ZWFyOiB5ZWFyLCBjb2xvcjogX3ZtLmNvbG9yIH0pXSwyKX0pLDApOl92bS5fZSgpLChfdm0uaGFzU3RlcCgnbScpKT9fYygnc2ltcGxlLW1vZGUtY29sdW1uJyx7YXR0cnM6e1wibGFiZWxcIjpfdm0ubGFuZy5tb250aCxcInZhbHVlXCI6X3ZtLnNlbGVjdGVkTW9udGgsXCJsb2NhbGVcIjpfdm0uY29yZS5sb2NhbGUubmFtZX19LF92bS5fbCgoX3ZtLm1vbnRocyksZnVuY3Rpb24obW9udGgsbWkpe3JldHVybiBfYygnZGl2Jyxfdm0uX2Ioe2tleTptaSxjbGFzczpbXG4gICAgICAgICAgJ3ZwZC1hZGRvbi1saXN0LWl0ZW0nLFxuICAgICAgICAgIHsgJ3ZwZC1zZWxlY3RlZCc6IG1vbnRoLnNlbGVjdGVkIH0sXG4gICAgICAgICAgbW9udGguYXR0cmlidXRlcy5jbGFzc1xuICAgICAgICBdLHN0eWxlOihbXG4gICAgICAgICAgeyBjb2xvcjogbW9udGguc2VsZWN0ZWQgPyBfdm0uY29sb3IgOiAnJyB9LFxuICAgICAgICAgIG1vbnRoLmF0dHJpYnV0ZXMuc3R5bGVcbiAgICAgICAgXSksYXR0cnM6e1wiZGlzYWJsZWRcIjptb250aC5kaXNhYmxlZH0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJGVtaXQoJ3NlbGVjdC1tb250aCcsIG1vbnRoKX19fSwnZGl2Jyxtb250aC5hdHRyaWJ1dGVzLGZhbHNlKSxbX3ZtLl90KFwibW9udGgtaXRlbVwiLFtfdm0uX3YoXCIgXCIrX3ZtLl9zKG1vbnRoLnhGb3JtYXQoJ2pNTU1NJykpK1wiIFwiKV0sbnVsbCx7IHZtOiBfdm0udm0sIG1vbnRoSXRlbTogbW9udGgsIGNvbG9yOiBfdm0uY29sb3IgfSldLDIpfSksMCk6X3ZtLl9lKCksKF92bS5oYXNTdGVwKCdkJykpP19jKCdzaW1wbGUtbW9kZS1jb2x1bW4nLHthdHRyczp7XCJsYWJlbFwiOl92bS5sYW5nLmRheSxcInZhbHVlXCI6X3ZtLnNlbGVjdGVkRGF5LFwibG9jYWxlXCI6X3ZtLmNvcmUubG9jYWxlLm5hbWV9fSxfdm0uX2woKF92bS5kYXlzKSxmdW5jdGlvbihkYXksZGkpe3JldHVybiBfYygnZGl2Jyxfdm0uX2Ioe2tleTpkaSxjbGFzczpbXG4gICAgICAgICAgJ3ZwZC1hZGRvbi1saXN0LWl0ZW0nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICd2cGQtc2VsZWN0ZWQnOiBkYXkuc2VsZWN0ZWQsXG4gICAgICAgICAgICAndnBkLWVtcHR5JzogZGF5LmRhdGUgPT0gbnVsbCxcbiAgICAgICAgICAgICd2cGQtcmFuZ2UtZmlyc3QnOiBkYXkuaXNGaXJzdCxcbiAgICAgICAgICAgICd2cGQtcmFuZ2UtbGFzdCc6IGRheS5pc0xhc3QsXG4gICAgICAgICAgICAndnBkLXJhbmdlLWJldHdlZW4nOiBkYXkuaXNCZXR3ZWVuLFxuICAgICAgICAgICAgJ3ZwZC1yYW5nZS1ob3Zlcic6IF92bS5ob3ZlcmVkSXRlbSAmJiBkYXkuaXNIb3ZlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF5LmF0dHJpYnV0ZXMuY2xhc3NcbiAgICAgICAgXSxzdHlsZTooW1xuICAgICAgICAgIHsgY29sb3I6IGRheS5zZWxlY3RlZCB8fCBkYXkuaXNCZXR3ZWVuID8gX3ZtLmNvbG9yIDogJycgfSxcbiAgICAgICAgICBkYXkuYXR0cmlidXRlcy5zdHlsZVxuICAgICAgICBdKSxhdHRyczp7XCJkaXNhYmxlZFwiOmRheS5kaXNhYmxlZH0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJGVtaXQoJ3NlbGVjdC1kYXknLCBkYXkpfSxcIm1vdXNlb3ZlclwiOmZ1bmN0aW9uKCRldmVudCl7cmV0dXJuIF92bS4kZW1pdCgndXBkYXRlOmhvdmVyZWQtaXRlbScsIGRheS5kYXRlKX19fSwnZGl2JyxkYXkuYXR0cmlidXRlcyxmYWxzZSksWyhkYXkuZGF0ZSAhPSBudWxsKT9bX3ZtLl90KFwiZGF5LWl0ZW1cIixbX3ZtLl92KFwiIFwiK192bS5fcyhfdm0uY29udmVydFRvTG9jYWxlTnVtYmVyKGRheS5mb3JtYXR0ZWQpKStcIiBcIildLG51bGwseyB2bTogX3ZtLnZtLCBkYXk6IGRheSwgY29sb3I6IF92bS5jb2xvciB9KV06X3ZtLl9lKCldLDIpfSksMCk6X3ZtLl9lKCldLDEpXSl9XG52YXIgU2ltcGxlTW9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwYzNhNTE2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9zaW1wbGUvU2ltcGxlTW9kZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODBjM2E1MTYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz97XCJjYWNoZURpcmVjdG9yeVwiOlwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXCIsXCJjYWNoZUlkZW50aWZpZXJcIjpcIjE5ZTFhMGE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcIn0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9jb21wb25lbnRzL3NpbXBsZS9TaW1wbGVNb2RlQ29sdW1uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOTZlN2FiNCZcbnZhciBTaW1wbGVNb2RlQ29sdW1udnVlX3R5cGVfdGVtcGxhdGVfaWRfMzk2ZTdhYjRfcmVuZGVyID0gZnVuY3Rpb24gKCkge3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ2cGQtY29sdW1uXCIsY2xhc3M6eyAndnBkLWlzLW1vdW50ZWQnOiBfdm0uaXNNb3VudGVkIH0sb246e1wibW91c2V3aGVlbFwiOmZ1bmN0aW9uKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO319fSxbKF92bS5sYWJlbCk/X2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidnBkLWNvbHVtbi1oZWFkZXJcIixkb21Qcm9wczp7XCJ0ZXh0Q29udGVudFwiOl92bS5fcyhfdm0ubGFiZWwpfX0pOl92bS5fZSgpLF9jKCdkaXYnLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJ2cGQtY29sdW1uLWNvbnRlbnRcIn0sW192bS5fdChcImRlZmF1bHRcIildLDIpXSl9XG52YXIgU2ltcGxlTW9kZUNvbHVtbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM5NmU3YWI0X3N0YXRpY1JlbmRlckZucyA9IFtdXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9zaW1wbGUvU2ltcGxlTW9kZUNvbHVtbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzk2ZTdhYjQmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMy0wIS4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy9jYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvY29tcG9uZW50cy9zaW1wbGUvU2ltcGxlTW9kZUNvbHVtbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgU2ltcGxlTW9kZUNvbHVtbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdTaW1wbGVNb2RlQ29sdW1uJyxcbiAgcHJvcHM6IHtcbiAgICBsYWJlbDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbG9jYWxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTW91bnRlZDogZmFsc2VcbiAgICB9O1xuICB9LFxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoMjAwKTtcbiAgICB9LFxuICAgIGxvY2FsZTogZnVuY3Rpb24gbG9jYWxlKCkge1xuICAgICAgdGhpcy5zY3JvbGxJbnRvVmlldygyMDApO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLnNjcm9sbEludG9WaWV3KDApO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGR1cmF0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmlzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBfdGhpcy4kcmVmcy5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy52cGQtc2VsZWN0ZWQnKSB8fCBfdGhpcy4kcmVmcy5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy52cGQtYWRkb24tbGlzdC1pdGVtOm5vdChbZGlzYWJsZWRdKScpOyAvLyB3ZSB3YW50IHRvIHNjcm9sbCBtdWx0aXBsZSBjb250YWluZXJzIGF0IHNhbWUgdGltZVxuICAgICAgICAgIC8vIHRoZSBuYXRpdmUgYHNjcm9sbEludG9WaWV3YCBtZXRob2QgZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2UsXG4gICAgICAgICAgLy8gc28gd2UgdXNlIHRoaXMgbWV0aG9kXG5cblxuICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSBzY3JvbGxJbnRvQ2VudGVyKGFjdGl2ZUVsZW1lbnQsIGR1cmF0aW9uLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9zaW1wbGUvU2ltcGxlTW9kZUNvbHVtbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2ltcGxlX1NpbXBsZU1vZGVDb2x1bW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoU2ltcGxlTW9kZUNvbHVtbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50cy9zaW1wbGUvU2ltcGxlTW9kZUNvbHVtbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBTaW1wbGVNb2RlQ29sdW1uX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2ltcGxlX1NpbXBsZU1vZGVDb2x1bW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIFNpbXBsZU1vZGVDb2x1bW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zOTZlN2FiNF9yZW5kZXIsXG4gIFNpbXBsZU1vZGVDb2x1bW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zOTZlN2FiNF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBTaW1wbGVNb2RlQ29sdW1uID0gKFNpbXBsZU1vZGVDb2x1bW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEzLTAhLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9jb21wb25lbnRzL3NpbXBsZS9TaW1wbGVNb2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgU2ltcGxlTW9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdTaW1wbGVNb2RlJyxcbiAgY29tcG9uZW50czoge1xuICAgIExvY2FsZUNoYW5nZTogTG9jYWxlQ2hhbmdlLFxuICAgIFNpbXBsZU1vZGVDb2x1bW46IFNpbXBsZU1vZGVDb2x1bW5cbiAgfSxcbiAgcHJvcHM6IHtcbiAgICB2aXNpYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG11bHRpcGxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHJhbmdlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGxhbmc6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBoYXNTdGVwOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIHllYXJzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICBtb250aHM6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vbnRoRGF5czoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0ZWREYXRlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgZm9ybWF0dGVkRGF0ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaG92ZXJlZEl0ZW06IHtcbiAgICAgIHR5cGU6IERhdGUsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBsb2NhbGVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICBjb3JlOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBzZXRMb2NhbGU6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgY29udmVydFRvTG9jYWxlTnVtYmVyOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZtOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXlzOiBmdW5jdGlvbiBkYXlzKCkge1xuICAgICAgdmFyIGRheXMgPSBbXTtcbiAgICAgIHRoaXMubW9udGhEYXlzLmZvckVhY2goZnVuY3Rpb24gKHdlZWspIHtcbiAgICAgICAgd2Vlay5mb3JFYWNoKGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgICAgICBpZiAoZGF5LmRhdGUpIGRheXMucHVzaChkYXkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRheXM7XG4gICAgfSxcbiAgICBzZWxlY3RlZFllYXI6IGZ1bmN0aW9uIHNlbGVjdGVkWWVhcigpIHtcbiAgICAgIHZhciB5ZWFyID0gdGhpcy55ZWFycy5maW5kKGZ1bmN0aW9uICh5ZWFyKSB7XG4gICAgICAgIHJldHVybiB5ZWFyLnNlbGVjdGVkO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geWVhciA/IHllYXIueEZvcm1hdCgnWVlZWScpIDogJyc7XG4gICAgfSxcbiAgICBzZWxlY3RlZE1vbnRoOiBmdW5jdGlvbiBzZWxlY3RlZE1vbnRoKCkge1xuICAgICAgdmFyIG1vbnRoID0gdGhpcy5tb250aHMuZmluZChmdW5jdGlvbiAobW9udGgpIHtcbiAgICAgICAgcmV0dXJuIG1vbnRoLnNlbGVjdGVkO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbW9udGggPyBtb250aC54Rm9ybWF0KCdNTScpIDogJyc7XG4gICAgfSxcbiAgICBzZWxlY3RlZERheTogZnVuY3Rpb24gc2VsZWN0ZWREYXkoKSB7XG4gICAgICB2YXIgZGF5ID0gdGhpcy5kYXlzLmZpbmQoZnVuY3Rpb24gKGRheSkge1xuICAgICAgICByZXR1cm4gZGF5LnNlbGVjdGVkO1xuICAgICAgfSkgfHwge307XG4gICAgICByZXR1cm4gZGF5ICYmIGRheS5kYXRlID8gZGF5LmRhdGUuZ2V0RGF0ZSgpIDogJyc7XG4gICAgfSxcbiAgICBzaG93SGVhZGVyOiBmdW5jdGlvbiBzaG93SGVhZGVyKCkge1xuICAgICAgdmFyIHNlbGVjdGVkRGF0ZXNMZW5ndGggPSB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlcy5sZW5ndGggPiAxIHx8IHNlbGVjdGVkRGF0ZXNMZW5ndGggPiAxIHx8IHRoaXMucmFuZ2UgJiYgc2VsZWN0ZWREYXRlc0xlbmd0aCB8fCB0aGlzLm11bHRpcGxlICYmIHNlbGVjdGVkRGF0ZXNMZW5ndGg7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbXBvbmVudHMvc2ltcGxlL1NpbXBsZU1vZGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNpbXBsZV9TaW1wbGVNb2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKFNpbXBsZU1vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbXBvbmVudHMvc2ltcGxlL1NpbXBsZU1vZGUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgU2ltcGxlTW9kZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNpbXBsZV9TaW1wbGVNb2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBTaW1wbGVNb2RldnVlX3R5cGVfdGVtcGxhdGVfaWRfODBjM2E1MTZfcmVuZGVyLFxuICBTaW1wbGVNb2RldnVlX3R5cGVfdGVtcGxhdGVfaWRfODBjM2E1MTZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgU2ltcGxlTW9kZSA9IChTaW1wbGVNb2RlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJtb21lbnRcIlxudmFyIGV4dGVybmFsX21vbWVudF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiYzMyZFwiKTtcbnZhciBleHRlcm5hbF9tb21lbnRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfbW9tZW50Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJtb21lbnQtamFsYWFsaVwiXG52YXIgZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcImI5YjNcIik7XG52YXIgZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvbW9kdWxlcy9tb21lbnQubG9jYWxlLmZhLmpzXG4vLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG52YXIgc3ltYm9sTWFwID0ge1xuICAnMSc6ICfbsScsXG4gICcyJzogJ9uyJyxcbiAgJzMnOiAn27MnLFxuICAnNCc6ICfbtCcsXG4gICc1JzogJ9u1JyxcbiAgJzYnOiAn27YnLFxuICAnNyc6ICfbtycsXG4gICc4JzogJ9u4JyxcbiAgJzknOiAn27knLFxuICAnMCc6ICfbsCdcbn0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAn27EnOiAnMScsXG4gICfbsic6ICcyJyxcbiAgJ9uzJzogJzMnLFxuICAn27QnOiAnNCcsXG4gICfbtSc6ICc1JyxcbiAgJ9u2JzogJzYnLFxuICAn27cnOiAnNycsXG4gICfbuCc6ICc4JyxcbiAgJ9u5JzogJzknLFxuICAn27AnOiAnMCdcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtb21lbnRfbG9jYWxlX2ZhID0gKHtcbiAgbW9udGhzOiAn2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsScuc3BsaXQoJ18nKSxcbiAgbW9udGhzU2hvcnQ6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdCgnXycpLFxuICB3ZWVrZGF5czogXCJcXHUwNkNDXFx1MDZBOVxcdTIwMENcXHUwNjM0XFx1MDY0NlxcdTA2MjhcXHUwNjQ3X1xcdTA2MkZcXHUwNjQ4XFx1MDYzNFxcdTA2NDZcXHUwNjI4XFx1MDY0N19cXHUwNjMzXFx1MDY0N1xcdTIwMENcXHUwNjM0XFx1MDY0NlxcdTA2MjhcXHUwNjQ3X1xcdTA2ODZcXHUwNjQ3XFx1MDYyN1xcdTA2MzFcXHUwNjM0XFx1MDY0NlxcdTA2MjhcXHUwNjQ3X1xcdTA2N0VcXHUwNjQ2XFx1MDYyQ1xcdTIwMENcXHUwNjM0XFx1MDY0NlxcdTA2MjhcXHUwNjQ3X1xcdTA2MkNcXHUwNjQ1XFx1MDYzOVxcdTA2NDdfXFx1MDYzNFxcdTA2NDZcXHUwNjI4XFx1MDY0N1wiLnNwbGl0KCdfJyksXG4gIHdlZWtkYXlzU2hvcnQ6IFwiXFx1MDZDQ1xcdTA2QTlcXHUyMDBDXFx1MDYzNFxcdTA2NDZcXHUwNjI4XFx1MDY0N19cXHUwNjJGXFx1MDY0OFxcdTA2MzRcXHUwNjQ2XFx1MDYyOFxcdTA2NDdfXFx1MDYzM1xcdTA2NDdcXHUyMDBDXFx1MDYzNFxcdTA2NDZcXHUwNjI4XFx1MDY0N19cXHUwNjg2XFx1MDY0N1xcdTA2MjdcXHUwNjMxXFx1MDYzNFxcdTA2NDZcXHUwNjI4XFx1MDY0N19cXHUwNjdFXFx1MDY0NlxcdTA2MkNcXHUyMDBDXFx1MDYzNFxcdTA2NDZcXHUwNjI4XFx1MDY0N19cXHUwNjJDXFx1MDY0NVxcdTA2MzlcXHUwNjQ3X1xcdTA2MzRcXHUwNjQ2XFx1MDYyOFxcdTA2NDdcIi5zcGxpdCgnXycpLFxuICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9isX9i0Jy5zcGxpdCgnXycpLFxuICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgTFQ6ICdISDptbScsXG4gICAgTFRTOiAnSEg6bW06c3MnLFxuICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICB9LFxuICBtZXJpZGllbVBhcnNlOiAv2YLYqNmEINin2LIg2LjZh9ixfNio2LnYryDYp9iyINi42YfYsS8sXG4gIGlzUE06IGZ1bmN0aW9uIGlzUE0oaW5wdXQpIHtcbiAgICByZXR1cm4gL9io2LnYryDYp9iyINi42YfYsS8udGVzdChpbnB1dCk7XG4gIH0sXG4gIG1lcmlkaWVtOiBmdW5jdGlvbiBtZXJpZGllbShob3VyKSB7XG4gICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgcmV0dXJuICfZgtio2YQg2KfYsiDYuNmH2LEnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ9io2LnYryDYp9iyINi42YfYsSc7XG4gICAgfVxuICB9LFxuICBjYWxlbmRhcjoge1xuICAgIHNhbWVEYXk6ICdb2KfZhdix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgIG5leHREYXk6ICdb2YHYsdiv2Kcg2LPYp9i52KpdIExUJyxcbiAgICBuZXh0V2VlazogJ2RkZGQgW9iz2KfYudiqXSBMVCcsXG4gICAgbGFzdERheTogJ1vYr9uM2LHZiNiyINiz2KfYudiqXSBMVCcsXG4gICAgbGFzdFdlZWs6ICdkZGRkIFvZvtuM2LRdIFvYs9in2LnYql0gTFQnLFxuICAgIHNhbWVFbHNlOiAnTCdcbiAgfSxcbiAgcmVsYXRpdmVUaW1lOiB7XG4gICAgZnV0dXJlOiAn2K/YsSAlcycsXG4gICAgcGFzdDogJyVzINm+24zYtCcsXG4gICAgczogJ9qG2YbYryDYq9in2YbbjNmHJyxcbiAgICBzczogJ9ir2KfZhtuM2YcgZCUnLFxuICAgIG06ICfbjNqpINiv2YLbjNmC2YcnLFxuICAgIG1tOiAnJWQg2K/ZgtuM2YLZhycsXG4gICAgaDogJ9uM2qkg2LPYp9i52KonLFxuICAgIGhoOiAnJWQg2LPYp9i52KonLFxuICAgIGQ6ICfbjNqpINix2YjYsicsXG4gICAgZGQ6ICclZCDYsdmI2LInLFxuICAgIE06ICfbjNqpINmF2KfZhycsXG4gICAgTU06ICclZCDZhdin2YcnLFxuICAgIHk6ICfbjNqpINiz2KfZhCcsXG4gICAgeXk6ICclZCDYs9in2YQnXG4gIH0sXG4gIHByZXBhcnNlOiBmdW5jdGlvbiBwcmVwYXJzZShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vbsC3buV0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICB9KS5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICB9LFxuICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiBwb3N0Zm9ybWF0KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgfSkucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgfSxcbiAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ92YUvLFxuICBvcmRpbmFsOiAnJWTZhScsXG4gIHdlZWs6IHtcbiAgICBkb3c6IDYsXG4gICAgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICBkb3k6IDEyIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cblxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21vZHVsZXMvY29yZS5qc1xuLypnbG9iYWwgZ2V0WWVhciovXG5cbi8qZXNsaW50IG5vLXVuZGVmOiBbXCJlcnJvclwiLCB7IFwidHlwZW9mXCI6IHRydWUgfV0gKi9cblxuXG5cblxuZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfZGVmYXVsdC5hLnVwZGF0ZUxvY2FsZSgnZW4nLCB7XG4gIHdlZWtkYXlzTWluOiAnU19NX1RfV19UX0ZfUycuc3BsaXQoJ18nKVxufSk7XG5leHRlcm5hbF9tb21lbnRfamFsYWFsaV9kZWZhdWx0LmEudXBkYXRlTG9jYWxlKCdmYScsIG1vbWVudF9sb2NhbGVfZmEpO1xuZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfZGVmYXVsdC5hLmxvYWRQZXJzaWFuKHtcbiAgZGlhbGVjdDogJ3BlcnNpYW4tbW9kZXJuJ1xufSk7XG5cbmV4dGVybmFsX21vbWVudF9qYWxhYWxpX2RlZmF1bHQuYS5kYXlzSW5Nb250aCA9IGZ1bmN0aW9uICh5ZWFyLCBtb250aCkge1xuICByZXR1cm4gZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfZGVmYXVsdCgpKHtcbiAgICB5ZWFyOiB5ZWFyLFxuICAgIG1vbnRoOiBtb250aFxuICB9KS5kYXlzSW5Nb250aCgpO1xufTsgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAgICAgICAgICAgQ09ORklHXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXG52YXIgbG9jYWxNZXRob2RzID0ge1xuICBmYToge1xuICAgIGRheXNJbk1vbnRoOiAnakRheXNJbk1vbnRoJyxcbiAgICB5ZWFyOiAnalllYXInLFxuICAgIG1vbnRoOiAnak1vbnRoJyxcbiAgICBkYXRlOiAnakRhdGUnLFxuICAgIGRheTogJ2RheSdcbiAgfSxcbiAgZW46IHtcbiAgICBkYXlzSW5Nb250aDogJ2RheXNJbk1vbnRoJyxcbiAgICB5ZWFyOiAneWVhcicsXG4gICAgbW9udGg6ICdtb250aCcsXG4gICAgZGF0ZTogJ2RhdGUnLFxuICAgIGRheTogJ2RheSdcbiAgfVxufTtcbnZhciBsb2NhbGVzQ29uZmlnID0ge1xuICBmYToge1xuICAgIGRvdzogNixcbiAgICBkaXI6ICdydGwnLFxuICAgIGRpc3BsYXlGb3JtYXQ6IG51bGwsXG4gICAgbGFuZzoge1xuICAgICAgbGFiZWw6ICfYtNmF2LPbjCcsXG4gICAgICBzdWJtaXQ6ICfYqtin24zbjNivJyxcbiAgICAgIGNhbmNlbDogJ9in2YbYtdix2KfZgScsXG4gICAgICBub3c6ICfYp9qp2YbZiNmGJyxcbiAgICAgIG5leHRNb250aDogJ9mF2KfZhyDYqNi52K8nLFxuICAgICAgcHJldk1vbnRoOiAn2YXYp9mHINmC2KjZhCcsXG4gICAgICB5ZWFyOiAn2LPYp9mEJyxcbiAgICAgIG1vbnRoOiAn2YXYp9mHJyxcbiAgICAgIGRheTogJ9ix2YjYsidcbiAgICB9XG4gIH0sXG4gIGVuOiB7XG4gICAgZG93OiAwLFxuICAgIGRpcjogJ2x0cicsXG4gICAgZGlzcGxheUZvcm1hdDogbnVsbCxcbiAgICBsYW5nOiB7XG4gICAgICBsYWJlbDogJ9mF24zZhNin2K/bjCcsXG4gICAgICBzdWJtaXQ6ICdTZWxlY3QnLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIG5vdzogJ05vdycsXG4gICAgICBuZXh0TW9udGg6ICdOZXh0IG1vbnRoJyxcbiAgICAgIHByZXZNb250aDogJ1ByZXZpb3VzIG1vbnRoJyxcbiAgICAgIHllYXI6ICdZZWFyJyxcbiAgICAgIG1vbnRoOiAnTW9udGgnLFxuICAgICAgZGF5OiAnRGF5J1xuICAgIH1cbiAgfVxufTtcblxudmFyIGNvcmVfQ29yZSA9IGZ1bmN0aW9uIENvcmUoZGVmYXVsdExvY2FsZU5hbWUsIGRlZmF1bHRPcHRpb25zKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgSW5zdGFuY2UgPSB7XG4gICAgbW9tZW50OiBleHRlcm5hbF9tb21lbnRfamFsYWFsaV9kZWZhdWx0LmEsXG4gICAgbW9tZW50QmFzZTogZXh0ZXJuYWxfbW9tZW50X2RlZmF1bHQuYSxcbiAgICBsb2NhbGU6IHtcbiAgICAgIG5hbWU6ICdmYScsXG4gICAgICBjb25maWc6IHt9XG4gICAgfSxcbiAgICBsb2NhbGVzQ29uZmlnOiB7fSxcbiAgICBzZXRMb2NhbGVzQ29uZmlnOiBudWxsLFxuICAgIGNoYW5nZUxvY2FsZTogbnVsbCxcbiAgICBnZXRXZWVrQXJyYXk6IG51bGwsXG4gICAgZ2V0WWVhcnNMaXN0OiBudWxsLFxuICAgIGdldE1vbnRoc0xpc3Q6IG51bGxcbiAgfTsgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vICAgICAgICAgICBNRVRIT0RTXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciB4RGF5c0luTW9udGg7XG5cbiAgSW5zdGFuY2UuY2hhbmdlTG9jYWxlID0gZnVuY3Rpb24gY2hhbmdlTG9jYWxlKCkge1xuICAgIHZhciBsb2NhbGVOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnZmEnO1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgdmFyIGNvbmZpZyA9IHV0aWxzLmNsb25lKGxvY2FsZXNDb25maWdbbG9jYWxlTmFtZV0gfHwgbG9jYWxlc0NvbmZpZy5lbik7XG4gICAgdmFyIG1ldGhvZHMgPSBsb2NhbE1ldGhvZHNbbG9jYWxlTmFtZV0gfHwgbG9jYWxNZXRob2RzLmVuO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zW2xvY2FsZU5hbWVdIHx8IHt9O1xuICAgIGlmICghbG9jYWxlc0NvbmZpZ1tsb2NhbGVOYW1lXSkgb3B0aW9ucyA9IHV0aWxzLmV4dGVuZCh0cnVlLCB7fSwgdXRpbHMuY2xvbmUobG9jYWxlc0NvbmZpZy5lbiksIG9wdGlvbnMpO1xuICAgIGxvY2FsZS5uYW1lID0gbG9jYWxlTmFtZTtcbiAgICBsb2NhbGUuY29uZmlnID0gdXRpbHMuZXh0ZW5kKHRydWUsIGNvbmZpZywgb3B0aW9ucyk7XG4gICAgeERheXNJbk1vbnRoID0gZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfZGVmYXVsdC5hW21ldGhvZHMuZGF5c0luTW9udGhdO1xuXG4gICAgZnVuY3Rpb24gYWRkTWV0aG9kcyhkYXRlKSB7XG4gICAgICBpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgIHZhciBuYW1lSW5Mb2NhbGUgPSBmdW5jdGlvbiBuYW1lSW5Mb2NhbGUobmFtZSkge1xuICAgICAgICBpZiAobG9jYWxlLm5hbWUgIT09ICdmYScpIG5hbWUgPSBuYW1lLnJlcGxhY2UoL2ovZywgJycpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH07XG5cbiAgICAgIGRhdGUueFllYXIgPSBleHRlcm5hbF9tb21lbnRfamFsYWFsaV9kZWZhdWx0LmEuZm5bbWV0aG9kcy55ZWFyXTtcbiAgICAgIGRhdGUueE1vbnRoID0gZXh0ZXJuYWxfbW9tZW50X2phbGFhbGlfZGVmYXVsdC5hLmZuW21ldGhvZHMubW9udGhdO1xuICAgICAgZGF0ZS54RGF0ZSA9IGV4dGVybmFsX21vbWVudF9qYWxhYWxpX2RlZmF1bHQuYS5mblttZXRob2RzLmRhdGVdO1xuXG4gICAgICBkYXRlLnhGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChuYW1lSW5Mb2NhbGUoZm9ybWF0KSk7XG4gICAgICB9O1xuXG4gICAgICBkYXRlLnhTdGFydE9mID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0T2YobWV0aG9kc1t2YWx1ZV0pO1xuICAgICAgfTtcblxuICAgICAgZGF0ZS54RW5kT2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kT2YobWV0aG9kc1t2YWx1ZV0pO1xuICAgICAgfTtcblxuICAgICAgZGF0ZS54QWRkID0gZnVuY3Rpb24gKGFtb3VudCwga2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZChhbW91bnQsIG1ldGhvZHNba2V5XSk7XG4gICAgICB9O1xuXG4gICAgICBkYXRlLnhEYXlzSW5Nb250aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHhEYXlzSW5Nb250aCh0aGlzLnhZZWFyKCksIHRoaXMueE1vbnRoKCkpO1xuICAgICAgfTtcblxuICAgICAgZGF0ZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEluc3RhbmNlLm1vbWVudCh0aGlzLnRvRGF0ZSgpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5tb21lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZGF0ZSA9IGV4dGVybmFsX21vbWVudF9qYWxhYWxpX2RlZmF1bHQuYS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgZGF0ZS5sb2NhbGUobG9jYWxlLm5hbWUpO1xuICAgICAgYWRkTWV0aG9kcyhkYXRlKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH07XG4gIH07XG5cbiAgSW5zdGFuY2Uuc2V0TG9jYWxlc0NvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICB2YXIgZGVmYXVsdHMgPSB1dGlscy5jbG9uZShsb2NhbGVzQ29uZmlnKTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBkZWZhdWx0c1trZXldID09PSB1bmRlZmluZWQpIGRlZmF1bHRzW2tleV0gPSB1dGlscy5leHRlbmQodHJ1ZSwge30sIHV0aWxzLmNsb25lKGRlZmF1bHRzLmVuKSwge1xuICAgICAgICBsYW5nOiB7XG4gICAgICAgICAgbGFiZWw6IGtleVxuICAgICAgICB9XG4gICAgICB9LCBjb25maWdba2V5XSk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2NhbGVzQ29uZmlnID0gdXRpbHMuZXh0ZW5kKHRydWUsIGRlZmF1bHRzLCBjb25maWcpO1xuICB9O1xuXG4gIEluc3RhbmNlLmdldFdlZWtBcnJheSA9IGZ1bmN0aW9uIGdldFdlZWtBcnJheShkYXRlKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWsod2Vla0FycmF5LCB3ZWVrKSB7XG4gICAgICB2YXIgZW1wdHlEYXlzID0gNyAtIHdlZWsubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVtcHR5RGF5czsgKytpKSB7XG4gICAgICAgIHdlZWtbd2Vla0FycmF5Lmxlbmd0aCA/ICdwdXNoJyA6ICd1bnNoaWZ0J10obnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHdlZWtBcnJheS5wdXNoKHdlZWspO1xuICAgIH1cblxuICAgIGRhdGUuc2V0KHtcbiAgICAgIGg6IDEyLFxuICAgICAgbTogMFxuICAgIH0pO1xuICAgIHZhciBkYXlzSW5Nb250aCA9IHhEYXlzSW5Nb250aChkYXRlLnhZZWFyKCksIGRhdGUueE1vbnRoKCkpO1xuICAgIHZhciBkYXkgPSBkYXRlLmNsb25lKCkueERhdGUoMSk7XG4gICAgdmFyIGRheUFycmF5ID0gW2RheS50b0RhdGUoKV07XG5cbiAgICBmb3IgKHZhciBpID0gMjsgaSA8PSBkYXlzSW5Nb250aDsgaSsrKSB7XG4gICAgICBkYXlBcnJheS5wdXNoKGRheS54QWRkKDEsICdkYXknKS50b0RhdGUoKSk7XG4gICAgfVxuXG4gICAgdmFyIHdlZWtBcnJheSA9IFtdO1xuICAgIHZhciB3ZWVrID0gW107XG4gICAgZGF5QXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZGF5KSB7XG4gICAgICBpZiAod2Vlay5sZW5ndGggPiAwICYmIGRheS5nZXREYXkoKSA9PT0gX3RoaXMubG9jYWxlLmNvbmZpZy5kb3cpIHtcbiAgICAgICAgYWRkV2Vlayh3ZWVrQXJyYXksIHdlZWspO1xuICAgICAgICB3ZWVrID0gW107XG4gICAgICB9XG5cbiAgICAgIHdlZWsucHVzaChkYXkpO1xuXG4gICAgICBpZiAoZGF5QXJyYXkuaW5kZXhPZihkYXkpID09PSBkYXlBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIGFkZFdlZWsod2Vla0FycmF5LCB3ZWVrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2Vla0FycmF5O1xuICB9O1xuXG4gIEluc3RhbmNlLmdldFllYXJzTGlzdCA9IGZ1bmN0aW9uIGdldFllYXJzTGlzdChmcm9tLCB0bykge1xuICAgIHZhciByYW5nZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgeWVhcnMgPSBbXTtcblxuICAgIGlmIChyYW5nZSkge1xuICAgICAgdmFyIHllYXIgPSBnZXRZZWFyKGRhdGUpO1xuICAgICAgZnJvbSA9IHllYXIgLSByYW5nZTtcbiAgICAgIHRvID0geWVhciArIHJhbmdlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDw9IHRvOyBpKyspIHtcbiAgICAgIHllYXJzLnB1c2goaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHllYXJzO1xuICB9O1xuXG4gIEluc3RhbmNlLmdldE1vbnRoc0xpc3QgPSBmdW5jdGlvbiBnZXRNb250aHNMaXN0KG1pbkRhdGUsIG1heERhdGUsIGRhdGUpIHtcbiAgICB2YXIgbGlzdCA9IFtdLFxuICAgICAgICBtaW4gPSBtaW5EYXRlID8gbWluRGF0ZS5jbG9uZSgpLnhTdGFydE9mKCdtb250aCcpIDogLUluZmluaXR5LFxuICAgICAgICBtYXggPSBtYXhEYXRlID8gbWF4RGF0ZS5jbG9uZSgpLnhFbmRPZignbW9udGgnKSA6IEluZmluaXR5O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICB2YXIgbW9udGggPSBkYXRlLmNsb25lKCkueE1vbnRoKGkpO1xuICAgICAgdmFyIHN0YXJ0ID0gbW9udGguY2xvbmUoKS54U3RhcnRPZignbW9udGgnKTtcbiAgICAgIHZhciBlbmQgPSBtb250aC5jbG9uZSgpLnhFbmRPZignbW9udGgnKTtcbiAgICAgIG1vbnRoLmRpc2FibGVkID0gc3RhcnQgPCBtaW4gfHwgZW5kID4gbWF4O1xuICAgICAgbGlzdC5wdXNoKG1vbnRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfTtcblxuICBJbnN0YW5jZS5jaGFuZ2VMb2NhbGUoZGVmYXVsdExvY2FsZU5hbWUsIGRlZmF1bHRPcHRpb25zKTtcbiAgcmV0dXJuIEluc3RhbmNlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29yZSA9IChjb3JlX0NvcmUpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9tb2R1bGVzL3BvcG92ZXItdXRpbC5qc1xudmFyIHBvcG92ZXIgPSB7XG4gIHNob3VsZEFwcGVuZFBpY2tlcjogZnVuY3Rpb24gc2hvdWxkQXBwZW5kUGlja2VyKGFwcGVuZFRvLCBpc1BvcG92ZXIpIHtcbiAgICByZXR1cm4gYXBwZW5kVG8gfHwgaXNQb3BvdmVyO1xuICB9LFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50LCBjaGlsZCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJlbnQgfHwgJ2JvZHknKTtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgY29uc29sZS53YXJuKFwiQ2Fubm90IGFwcGVuZCBwaWNrZXIgdG8gXFxcIlwiLmNvbmNhdChwYXJlbnQsIFwiXFxcIiFcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlQ2hpbGQ6IGZ1bmN0aW9uIHJlbW92ZUNoaWxkKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoZWxlbWVudC4kZWwpIGVsZW1lbnQgPSBlbGVtZW50LiRlbDtcbiAgICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJjYW4ndCByZW1vdmUgY2hpbGRcIiwgZSk7XG4gICAgfVxuICB9LFxuICBzZXRQaWNrZXJQb3NpdGlvbjogZnVuY3Rpb24gc2V0UGlja2VyUG9zaXRpb24ocGlja2VyV3JhcHBlckVsLCBjb250YWluZXJFbCwgaW5wdXRXcmFwcGVyRWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWlucHV0V3JhcHBlckVsIHx8ICFwaWNrZXJXcmFwcGVyRWwpIHJldHVybjtcbiAgICB2YXIgX29wdGlvbnMkcGxhY2VtZW50ID0gb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gJycgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICAgIF9vcHRpb25zJG9mZnNldFggPSBvcHRpb25zLm9mZnNldFgsXG4gICAgICAgIG9mZnNldFggPSBfb3B0aW9ucyRvZmZzZXRYID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkb2Zmc2V0WCxcbiAgICAgICAgX29wdGlvbnMkb2Zmc2V0WSA9IG9wdGlvbnMub2Zmc2V0WSxcbiAgICAgICAgb2Zmc2V0WSA9IF9vcHRpb25zJG9mZnNldFkgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRvZmZzZXRZO1xuICAgIHZhciBkYXRhUGxhY2VtZW50ID0gJyc7XG4gICAgdmFyIGlzT25Ub3AgPSAvdG9wLy50ZXN0KHBsYWNlbWVudCk7XG4gICAgdmFyIGlzT25MZWZ0ID0gL2xlZnQvLnRlc3QocGxhY2VtZW50KTtcbiAgICB2YXIgaXNPblJpZ2h0ID0gL3JpZ2h0Ly50ZXN0KHBsYWNlbWVudCk7XG4gICAgdmFyIGlzT25Cb3R0b20gPSAvYm90dG9tLy50ZXN0KHBsYWNlbWVudCk7XG4gICAgcGlja2VyV3JhcHBlckVsLnN0eWxlLndpZHRoID0gaW5wdXRXcmFwcGVyRWwub2Zmc2V0V2lkdGggKyAncHgnO1xuICAgIHBpY2tlcldyYXBwZXJFbC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICBwaWNrZXJXcmFwcGVyRWwuc3R5bGUubGVmdCA9ICcwcHgnO1xuICAgIHZhciBpbnB1dFdyYXBwZXJIZWlnaHQgPSBpbnB1dFdyYXBwZXJFbC5vZmZzZXRIZWlnaHQ7XG4gICAgdmFyIGlucHV0V3JhcHBlclJlY3QgPSBpbnB1dFdyYXBwZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB2YXIgdG9wID0gaW5wdXRXcmFwcGVyUmVjdC50b3AgKyBpbnB1dFdyYXBwZXJIZWlnaHQ7XG4gICAgdmFyIGRpc3RhbmNlWSA9IDA7XG4gICAgaWYgKCFpc09uVG9wICYmICFpc09uQm90dG9tKSBpc09uVG9wID0gdG9wICsgY29udGFpbmVyRWwub2Zmc2V0SGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIGlmICghaXNPbkxlZnQgJiYgIWlzT25SaWdodCkgaXNPbkxlZnQgPSBpbnB1dFdyYXBwZXJSZWN0LnJpZ2h0ID4gY29udGFpbmVyRWwub2Zmc2V0V2lkdGg7XG4gICAgZGF0YVBsYWNlbWVudCArPSBpc09uVG9wID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICBkYXRhUGxhY2VtZW50ICs9IGlzT25MZWZ0ID8gJy1sZWZ0JyA6ICctcmlnaHQnO1xuXG4gICAgaWYgKGlzT25Ub3ApIHtcbiAgICAgIHBpY2tlcldyYXBwZXJFbC5zdHlsZS50b3AgPSBpbnB1dFdyYXBwZXJSZWN0LnRvcCAtIGRpc3RhbmNlWSAtIG9mZnNldFkgKyAncHgnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwaWNrZXJXcmFwcGVyRWwuc3R5bGUudG9wID0gdG9wICsgZGlzdGFuY2VZICsgb2Zmc2V0WSArICdweCc7XG4gICAgfVxuXG4gICAgb2Zmc2V0WCAqPSBpc09uUmlnaHQgPyAxIDogLTE7XG4gICAgcGlja2VyV3JhcHBlckVsLnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZW1lbnQnLCBkYXRhUGxhY2VtZW50KTtcbiAgICBwaWNrZXJXcmFwcGVyRWwuc3R5bGUubGVmdCA9IGlucHV0V3JhcHBlclJlY3QubGVmdCArIG9mZnNldFggKyAncHgnO1xuICB9XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcG9wb3Zlcl91dGlsID0gKHBvcG92ZXIpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEzLTAhLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy9WdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuZnVuY3Rpb24gVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBWdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFZ1ZVBlcnNpYW5EYXRldGltZVBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgY29tcG9uZW50czoge1xuICAgIFNpbXBsZU1vZGU6IFNpbXBsZU1vZGUsXG4gICAgVGltZVNlY3Rpb246IFRpbWVTZWN0aW9uLFxuICAgIExvY2FsZUNoYW5nZTogTG9jYWxlQ2hhbmdlLFxuICAgIEFycm93OiBBcnJvdyxcbiAgICBDYWxlbmRhckljb246IENhbGVuZGFySWNvbixcbiAgICBUaW1lSWNvbjogVGltZUljb25cbiAgfSxcbiAgbWl4aW5zOiBbcG9wdXBSb3V0ZUNoYW5nZXJdLFxuICBtb2RlbDoge1xuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgZXZlbnQ6ICdpbnB1dCdcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGlucHV0IHZhbHVlXG4gICAgICogQHR5cGUgTnVtYmVyIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICogQGV4YW1wbGUgMTM5Ni8wOC8wMSAyMjo0NSB8IDIwMTcvMDcvMDcgMjA6NDUgfCB7dW5peH0gfCAyMDo0NVxuICAgICAqL1xuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmcsIERhdGUsIEFycmF5XSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgdmFsdWUgb2YgcGlja2VyIChpZiB2YWx1ZSBpcyBlbXB0eSlcbiAgICAgKiBAdHlwZSBOdW1iZXIgU3RyaW5nXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKiBAZXhhbXBsZSAxMzcwLzAxLzAxIDIyOjQ1IHwgMjAxNy8wMS8wMSAyMDo0NSB8IHt1bml4fSB8IDIwOjQ1XG4gICAgICogQHZlcnNpb24gMS4wLjlcbiAgICAgKi9cbiAgICBpbml0aWFsVmFsdWU6IHtcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgZm9yIHt2YWx1ZX1cbiAgICAgKiBAdHlwZSBTdHJpbmdcbiAgICAgKiBAZGVmYXVsdCBOdWxsXG4gICAgICogQGV4YW1wbGUgallZWVkvak1NL2pERCBISDptbSB8IFlZWVkvTU0vREQgSEg6bW0gfCB4IHwgSEg6bW1cbiAgICAgKiBAaWYgZW1wdHkge2lucHV0Rm9ybWF0fSA9IHtmb3JtYXR9XG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vamFsYWFsaS9tb21lbnQtamFsYWFsaVxuICAgICAqL1xuICAgIGlucHV0Rm9ybWF0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgb25seSB0byBkaXNwbGF5IHRoZSBkYXRlIGluIHRoZSBmaWVsZFxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IE51bGxcbiAgICAgKiBAZXhhbXBsZSBqWVlZWS9qTU0vakREIEhIOm1tIHwgWVlZWS9NTS9ERCBISDptbSB8IHggfCBISDptbVxuICAgICAqIEBpZiBlbXB0eSB7ZGlzcGxheUZvcm1hdH0gPSB7Zm9ybWF0fVxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbGFhbGkvbW9tZW50LWphbGFhbGlcbiAgICAgKi9cbiAgICBkaXNwbGF5Rm9ybWF0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgZm9yIG91dHB1dCB2YWx1ZVxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IE51bGxcbiAgICAgKiBAZXhhbXBsZSBqWVlZWS9qTU0vakREIEhIOm1tIHwgWVlZWS9NTS9ERCBISDptbSB8IHggfCBkYXRlIHwgSEg6bW1cbiAgICAgKiBAaWYgZW1wdHksIGl0IHdpbGwgYmUgYnVpbHQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIHBpY2tlcjpcbiAgICAgKlxuICAgICAqIC0tLSB0aW1lOiAgICAgSEg6bW1cbiAgICAgKiAtLS0gZGF0ZXRpbWU6IGpZWVlZL2pNTS9qREQgSEg6bW1cbiAgICAgKiAtLS0gZGF0ZTogICAgIGpZWVlZL2pNTS9qRERcbiAgICAgKiAtLS0geWVhcjogICAgIGpZWVlZXG4gICAgICogLS0tIG1vbnRoOiAgICBqTU1cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbGFhbGkvbW9tZW50LWphbGFhbGlcbiAgICAgKi9cbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0ZXAgdG8gdmlldyBvbiBzdGFydHVwXG4gICAgICogQHR5cGUgU3RyaW5nXG4gICAgICogQGRlZmF1bHQgXCJkYXlcIlxuICAgICAqIEBzdXBwb3J0ZWQgZGF5IHwgbW9udGggfCB5ZWFyIHwgdGltZVxuICAgICAqIEBleGFtcGxlIHllYXJcbiAgICAgKiBAZGVzYyB7eWVhcn0gd2lsbCBzaG93IHRoZSBcInllYXJcIiBwYW5lbCBhdCBmaXJzdFxuICAgICAqL1xuICAgIHZpZXc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkYXknXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaWNrZXIgdHlwZVxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IFwiZGF0ZVwiXG4gICAgICogQHN1cHBvcnRlZCBkYXRlIHwgZGF0ZXRpbWUgfCB5ZWFyIHwgbW9udGggfCB0aW1lXG4gICAgICovXG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RhdGUnXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIG9mIHNlbGVjdGFibGUgcGVyaW9kXG4gICAgICogQmFzZWQgb24ge2lucHV0Rm9ybWF0fVxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IE51bGxcbiAgICAgKiBAZXhhbXBsZSAxMzk2LzA4LzAxIDIyOjQ1IHwgMjI6NDVcbiAgICAgKi9cbiAgICBtaW46IHtcbiAgICAgIHR5cGU6IFtTdHJpbmddLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gb2Ygc2VsZWN0YWJsZSBwZXJpb2RcbiAgICAgKiBCYXNlZCBvbiB7aW5wdXRGb3JtYXR9XG4gICAgICogQHR5cGUgU3RyaW5nXG4gICAgICogQGRlZmF1bHQgTnVsbFxuICAgICAqIEBleGFtcGxlIDEzOTYvMDgvMDEgMjI6NDUgfCAyMjo0NVxuICAgICAqL1xuICAgIG1heDoge1xuICAgICAgdHlwZTogW1N0cmluZ10sXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBFZGl0YWJsZSBpbnB1dCBvciBqdXN0IHJlYWRvbmx5XG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IEZhbHNlXG4gICAgICogQGlmIGZhbHNlLCB0aGUgcGlja2VyIHdpbGwgc2hvd24gb24gaW5wdXQgZm9jdXNcbiAgICAgKiBAaWYgdHJ1ZSwgdGhlIHBpY2tlciB3aWxsIHNob3duIG9uIGxhYmVsIGNsaWNrXG4gICAgICogQG5vdGUgaWYgdXNlIDwuLi4gOmVkaXRhYmxlPVwidHJ1ZVwiPiB3aXRoIDwuLi4gOmVsZW1lbnQ9XCIuLi5cIj5cbiAgICAgKiAgICAgdGhlbiB5b3UgaGF2ZSB0byBjb250cm9sIHRoZSA8Li4uIDpzaG93PVwidHJ1ZSBvciBmYWxzZVwiPlxuICAgICAqL1xuICAgIGVkaXRhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiBUaGUgc3BlY2lmaWVkIGlucHV0IGVsZW1lbnQgSURcbiAgICAgKiBAdHlwZSBTdHJpbmdcbiAgICAgKiBAZGVmYXVsdCBVbmRlZmluZWRcbiAgICAgKiBAZGVzYyBTb21ldGltZXMgeW91IGRvbid0IHdhbnQgdG8gdXNlIHBpY2tlciBkZWZhdWx0IGlucHV0LFxuICAgICAqIHNvIHlvdSBjYW4gdXNlIG91ciBvd24gaW5wdXQgZWxlbWVudCB3aXRoIFwiaWRcIiBhdHRyaWJ1dGVcbiAgICAgKiBhbmQgdXNlIDwuLi4gZWxlbWVudD1cInRoZV9pZF9vZl9pbnB1dFwiPlxuICAgICAqL1xuICAgIGVsZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOZXcgdmVyc2lvbiBvZiBgZWxlbWVudGBcbiAgICAgKiBAdHlwZSBTdHJpbmcgKERPTVN0cmluZyBjb250YWluaW5nIGEgc2VsZWN0b3IgbGlzdClcbiAgICAgKiBAZGVzYyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGBlbGVtZW50YCxcbiAgICAgKiB0aGlzIGN1c3RvbSBpbnB1dCBkb2VzIG5vdCBuZWVkIHYtbW9kZWwsIGFuZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZFxuICAgICAqIGFsc28gc3VwcG9ydHMgYGRpc3BsYXktZm9ybWF0YFxuICAgICAqIEBleGFtcGxlIC5teS1jdXN0b20taW5wdXQgfCAjbXktY3VzdG9tLWlucHV0IHwgZGl2LmZvbyA+IGlucHV0XG4gICAgICogQHZlcnNpb24gMi4xMC4wXG4gICAgICovXG4gICAgY3VzdG9tSW5wdXQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybSBpbnB1dCBuYW1lIHdoZW4gbm90IHVzaW5nIHtlbGVtZW50fVxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IFVuZGVmaW5lZFxuICAgICAqL1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybSBpbnB1dCBjbGFzc05hbWUgd2hlbiBub3QgdXNpbmcge2VsZW1lbnR9XG4gICAgICogQHR5cGUgU3RyaW5nXG4gICAgICogQGRlZmF1bHQgXCJmb3JtLWNvbnRyb2xcIlxuICAgICAqL1xuICAgIGlucHV0Q2xhc3M6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdmb3JtLWNvbnRyb2wnXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIGlucHV0IHBsYWNlaG9sZGVyIHdoZW4gbm90IHVzaW5nIHtlbGVtZW50fVxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IE51bGxcbiAgICAgKi9cbiAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgaGlkZGVuIGlucHV0IGVsZW1lbnRcbiAgICAgKiBAdHlwZSBTdHJpbmdcbiAgICAgKiBAZGVmYXVsdCBOdWxsXG4gICAgICogQGlmIGVtcHR5LCB0aGUgaGlkZGVuIGlucHV0IHdpbGwgbm90IGJlIGNyZWF0ZWRcbiAgICAgKi9cbiAgICBhbHROYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgZm9yIGhpZGRlbiBpbnB1dFxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IE51bGxcbiAgICAgKiBAZXhhbXBsZSBZWVlZLU1NLUREIEhIOm1tOnNzIFtHTVRdWlpcbiAgICAgKiBAaWYgZW1wdHksIGl0IHdpbGwgYmUgYnVpbHQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIHBpY2tlcjpcbiAgICAgKlxuICAgICAqIC0tLSB0aW1lOiAgICAgSEg6bW06c3MgW0dNVF1aWlxuICAgICAqIC0tLSBkYXRldGltZTogWVlZWS1NTS1ERCBISDptbTpzcyBbR01UXVpaXG4gICAgICogLS0tIGRhdGU6ICAgICBZWVlZLU1NLUREXG4gICAgICogLS0tIHllYXI6ICAgICBZWVlZXG4gICAgICogLS0tIG1vbnRoOiAgICBNTVxuICAgICAqL1xuICAgIGFsdEZvcm1hdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2hvdyBvciBoaWRlIHRoZSBwaWNrZXJcbiAgICAgKiBAdHlwZSBCb29sZWFuXG4gICAgICogQGRlZmF1bHQgRmFsc2VcbiAgICAgKi9cbiAgICBzaG93OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJpbWFyeSBjb2xvciBvZiBwaWNrZXJcbiAgICAgKiBAdHlwZSBTdHJpbmdcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM0MTdkZjQnXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEF1dG8gc3VibWl0IGFuZCBoaWRlIHBpY2tlciB3aGVuIGRhdGUgc2VsZWN0ZWRcbiAgICAgKiBAdHlwZSBCb29sZWFuXG4gICAgICogQGRlZmF1bHQgRmFsc2VcbiAgICAgKi9cbiAgICBhdXRvU3VibWl0OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXV0byBzdWJtaXQgd2hlbiBjbGlja2luZyB0aGUgd3JhcHBlclxuICAgICAqIEB0eXBlIEJvb2xlYW5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEB2ZXJzaW9uIDEuMC42XG4gICAgICovXG4gICAgd3JhcHBlclN1Ym1pdDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFBsYWNlIHRvIGFwcGVuZCBwaWNrZXJcbiAgICAgKiBAdHlwZSBTdHJpbmcgcXVlcnkgc2VsZWN0b3JcbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICogQGRlc2MgSWYgeW91IHdhbnQgdG8gYXBwZW5kIHBpY2tlciB0byBhbm90aGVyIGNvbnRhaW5lciBsaWtlICdib2R5JyxcbiAgICAgKiBwYXNzIHRoZSBjb250YWluZXIgYXMgYXBwZW5kLXRvPVwiYm9keVwiLCAgYXBwZW5kLXRvPVwiI2FwcFwiLCAgYXBwZW5kLXRvPVwiI215LWNvbnRhaW5lclwiXG4gICAgICogQGV4YW1wbGUgJ2JvZHknLCAnLm1haW4tY29udGFpbmVyJywgJyNhcHAnIC4uLlxuICAgICAqIEB2ZXJzaW9uIDEuMS4xXG4gICAgICovXG4gICAgYXBwZW5kVG86IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBvciBlbmFibGUgdGhlIGRhdGVwaWNrZXJcbiAgICAgKiBAdHlwZSBCb29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAdmVyc2lvbiAxLjEuNFxuICAgICAqL1xuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsaW5nXG4gICAgICogQHR5cGUgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIFJlZ0V4cFxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBkZXNjIGRpc2FibGUgc29tZSBkYXRlc1xuICAgICAqIEBleGFtcGxlIFsnMTM5Ny8wMi8wMicsICcxMzkwLzEwLzEwJ10gLSBcIjEzOTcvMDUvMjBcIiAtIC8xMzk3XFwvMDVcXC8oLiopLyAuLi5cbiAgICAgKiBAdmVyc2lvbiAxLjEuNFxuICAgICAqL1xuICAgIGRpc2FibGU6IHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgUmVnRXhwXSxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMYWJlbFxuICAgICAqIEB0eXBlIFN0cmluZ1xuICAgICAqIEB2ZXJzaW9uIDEuMS40XG4gICAgICovXG4gICAgbGFiZWw6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhpZ2hsaWdodCBpdGVtc1xuICAgICAqIEB0eXBlIEZ1bmN0aW9uXG4gICAgICogQGRlc2MgVGhpcyBwcm9wIGFjY2VwdHMgb25seSBmdW5jdGlvbiB0aGF0IHJldHVybiBhbiBvYmplY3Qgb2YgYXR0cmlidXRlcy5cbiAgICAgKiBAdmVyc2lvbiAxLjEuNVxuICAgICAqL1xuICAgIGhpZ2hsaWdodDoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoYW5nZSBtaW51dGVzIGJ5IHN0ZXBcbiAgICAgKiBAdHlwZSBOdW1iZXJcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICogQHZlcnNpb246IDEuMS42XG4gICAgICovXG4gICAganVtcE1pbnV0ZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3VuZCBtaW51dGVzIHdoZW4ganVtcE1pbnV0ZSBpcyBncmF0ZXIgdGhhbiAxXG4gICAgICogQGV4YW1wbGUgd2hlbiBqdW1wTWludXRlID0gMTUgdGhpbiB3aWxsIHJlc3VsdDogMTM6MDAsIDEzOjE1LCAxMzozMCwgMTM6NDUgLi4uXG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQHZlcnNpb246IDEuMS42XG4gICAgICovXG4gICAgcm91bmRNaW51dGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTaG93IGNsZWFyIGJ1dHRvblxuICAgICAqIEB0eXBlIEJvb2xlYW5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEB2ZXJzaW9uIDEuMS42XG4gICAgICovXG4gICAgY2xlYXJhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5saW5lIG1vZGVcbiAgICAgKiBAdHlwZSBCb29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAdmVyc2lvbiAxLjEuNlxuICAgICAqL1xuICAgIGlubGluZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvY2FsZXMgY29uZmlnIChcImZhXCIgZm9yIGphbGFsaSBhbmQgXCJlblwiIGZvciBncmVnb3JpYW4pXG4gICAgICogQHR5cGUgU3RyaW5nXG4gICAgICogQGRlZmF1bHQgZmFcbiAgICAgKiBAZXhhbXBsZSBmYSB8IGVuIHwgZmEsZW4gfCBlbixmYVxuICAgICAqIEBzdXBwb3J0ZWQgZmEsZW5cbiAgICAgKiBAdmVyc2lvbiAyLjAuMFxuICAgICAqL1xuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2ZhJ1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2NhbGUgY29uZmlndXJhdGlvblxuICAgICAqIEB0eXBlIE9iamVjdFxuICAgICAqIEBkZWZhdWx0IHt9XG4gICAgICogQHZlcnNpb24gMi4wLjBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHtcbiAgICAgKiAgZmE6IHtcbiAgICAgKiAgICAgIGRvdzogNiwgICAgICAgICAgICAgLS1maXJzdCBkYXkgb2Ygd2Vla1xuICAgICAqICAgICAgZGlyOiAncnRsJywgICAgICAgICAtLWxhbmd1YWdlIGRpcmVjdGlvblxuICAgICAqICAgICAgbGFuZzoge1xuICAgICAqICAgICAgICAgICBsYWJlbDogICAgIFwi2LTZhdiz24xcIixcbiAgICAgKiAgICAgICAgICAgc3VibWl0OiAgICBcItiq2KfbjNuM2K9cIixcbiAgICAgKiAgICAgICAgICAgY2FuY2VsOiAgICBcItin2YbYtdix2KfZgVwiLFxuICAgICAqICAgICAgICAgICBub3c6ICAgICAgIFwi2KfaqdmG2YjZhlwiLFxuICAgICAqICAgICAgICAgICBuZXh0TW9udGg6IFwi2YXYp9mHINio2LnYr1wiLFxuICAgICAqICAgICAgICAgICBwcmV2TW9udGg6IFwi2YXYp9mHINmC2KjZhFwiLFxuICAgICAqICAgICAgfVxuICAgICAqICB9LFxuICAgICAqICBlbjogeyAuLi4gfVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBsb2NhbGVDb25maWc6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRpbWV6b25lIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAdHlwZSBTdHJpbmcgfCBCb29sZWFuIHwgRnVuY3Rpb25cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBleGFtcGxlIHRydWUgfCBmYWxzZSB8ICswMzozMCB8ICswNDozMFxuICAgICAqIEB2ZXJzaW9uIDIuMS4wXG4gICAgICovXG4gICAgdGltZXpvbmU6IHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNob3cgb3IgaGlkZSBOT1cgYnV0dG9uXG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAdmVyc2lvbiAyLjEuNlxuICAgICAqL1xuICAgIHNob3dOb3dCdG46IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbG9jYWxlIG51bWJlcnMgb3Igbm90XG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIGNvbnZlcnQtbnVtYmVycyAvPlxuICAgICAqIEB2ZXJzaW9uIDIuMy4wXG4gICAgICovXG4gICAgY29udmVydE51bWJlcnM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5IHRoZSB0aW1lIG9uIHRoZSBmcm9udCBwYWdlXG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIGNvbXBhY3QtdGltZSAvPlxuICAgICAqIEB2ZXJzaW9uIDIuNC4wXG4gICAgICovXG4gICAgY29tcGFjdFRpbWU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSByYW5nZSBtb2RlXG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIHJhbmdlIC8+XG4gICAgICogQHZlcnNpb24gMi41LjBcbiAgICAgKi9cbiAgICByYW5nZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIG11bHRpcGxlIG1vZGVcbiAgICAgKiBAdHlwZSBCb29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAZXhhbXBsZSA8ZGF0ZS1waWNrZXIgbXVsdGlwbGUgLz5cbiAgICAgKiBAdmVyc2lvbiAyLjYuMFxuICAgICAqL1xuICAgIG11bHRpcGxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIG9yIGRpc2FibGUgcG9wb3ZlciBtb2RlXG4gICAgICogQHR5cGUgQm9vbGVhbiB8IFN0cmluZ1xuICAgICAqIEBhY2NlcHRlZDpcbiAgICAgKiAgICB0cnVlIHwgZmFsc2VcbiAgICAgKiAgICB0b3AgfCBib3R0b20gfCByaWdodCB8IGxlZnRcbiAgICAgKiAgICB0b3AtbGVmdCB8IHRvcC1yaWdodCB8IGJvdHRvbS1yaWdodCB8IGJvdHRvbS1sZWZ0XG4gICAgICogICAgeyBvZmZzZXRYOiAtMTAsIG9mZnNldFk6IDEwIH1cbiAgICAgKiAgICB7IHBsYWNlbWVudDogJ3JpZ2h0Jywgb2Zmc2V0WDogMTAsIG9mZnNldFk6IDEwIH1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBleGFtcGxlIDxkYXRlLXBpY2tlciBwb3BvdmVyIC8+XG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIHBvcG92ZXI9XCJyaWdodFwiIC8+XG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIHBvcG92ZXI9XCJ0b3AtbGVmdFwiIC8+XG4gICAgICogQHZlcnNpb24gMi42LjBcbiAgICAgKi9cbiAgICBwb3BvdmVyOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBPYmplY3RdLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY2hhbmdlIHJvdXRlIGFkZHJlc3MgaW4gb3Blbi9jbG9zZSBhY3Rpb24sXG4gICAgICogdGhlbiBlbmFibGUgdGhpcyBwcm9wXG4gICAgICogQHR5cGUgQm9vbGVhbiB8IFN0cmluZ1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIHVzZS1yb3V0ZXIgLz4gICAgICAgICAgPT4gZXhhbXBsZS5jb20vaG9tZT92cGQtNzU0NTQ9YWN0aXZlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIHVzZS1yb3V0ZXI9XCJmb29cIiAvPiAgICA9PiBleGFtcGxlLmNvbS9ob21lP3ZwZC1mb289YWN0aXZlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIGlkPVwiYmFyXCIgdXNlLXJvdXRlciAvPiA9PiBleGFtcGxlLmNvbS9ob21lP3ZwZC1iYXI9YWN0aXZlXG4gICAgICovXG4gICAgdXNlUm91dGVyOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHNpbXBsZSBtb2RlXG4gICAgICogQHR5cGUgQm9vbGVhblxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGV4YW1wbGUgPGRhdGUtcGlja2VyIHNpbXBsZSAvPlxuICAgICAqIEB2ZXJzaW9uIDIuOS4wXG4gICAgICovXG4gICAgc2ltcGxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciBpbnB1dCBlbGVtZW50XG4gICAgICogQHR5cGUgT2JqZWN0XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqIEBleGFtcGxlIDxkYXRlLXBpY2tlciA6aW5wdXQtYXR0cnM9XCJ7IGZvbzogJ2JhcicgfVwiIC8+XG4gICAgICogQHZlcnNpb24gMi45LjBcbiAgICAgKi9cbiAgICBpbnB1dEF0dHJzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHZhciBkZWZhdWx0TG9jYWxlID0gdGhpcy5sb2NhbGUuc3BsaXQoJywnKVswXTtcbiAgICB2YXIgY29yZU1vZHVsZSA9IG5ldyBjb3JlKGRlZmF1bHRMb2NhbGUsIHRoaXMubG9jYWxlQ29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29yZTogY29yZU1vZHVsZSxcbiAgICAgIG5vdzogY29yZU1vZHVsZS5tb21lbnQoKSxcbiAgICAgIGRhdGU6IHt9LFxuICAgICAgc2VsZWN0ZWREYXRlczogW10sXG4gICAgICBob3ZlcmVkSXRlbTogbnVsbCxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgZGlyZWN0aW9uQ2xhc3M6ICcnLFxuICAgICAgZGlyZWN0aW9uQ2xhc3NEYXRlOiAnJyxcbiAgICAgIHN0ZXBzOiBbJ3knLCAnbScsICdkJywgJ3QnXSxcbiAgICAgIHN0ZXA6IDAsXG4gICAgICBzaG9ydENvZGVzOiB7XG4gICAgICAgIHllYXI6ICd5JyxcbiAgICAgICAgbW9udGg6ICdtJyxcbiAgICAgICAgZGF5OiAnZCcsXG4gICAgICAgIHRpbWU6ICd0J1xuICAgICAgfSxcbiAgICAgIHRpbWU6IHt9LFxuICAgICAgbWluRGF0ZTogZmFsc2UsXG4gICAgICBtYXhEYXRlOiBmYWxzZSxcbiAgICAgIG91dHB1dDogW10sXG4gICAgICB1cGRhdGVOb3dJbnRlcnZhbDogbnVsbCxcbiAgICAgIGxvY2FsZXM6IFsnZmEnXSxcbiAgICAgIGxvY2FsZURhdGE6IGNvcmVNb2R1bGUubG9jYWxlLFxuICAgICAgd2luZG93V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB2bTogZnVuY3Rpb24gdm0oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGlkOiBmdW5jdGlvbiBpZCgpIHtcbiAgICAgIHZhciByYW5kSWQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgIHJldHVybiBcInZwZC1cIi5jb25jYXQodGhpcy4kYXR0cnMuaWQgfHwgcmFuZElkKTtcbiAgICB9LFxuICAgIGN1cnJlbnRTdGVwOiBmdW5jdGlvbiBjdXJyZW50U3RlcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXBzW3RoaXMuc3RlcF07XG4gICAgfSxcbiAgICBzZWxlY3RlZERhdGU6IGZ1bmN0aW9uIHNlbGVjdGVkRGF0ZSgpIHtcbiAgICAgIHZhciBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcbiAgICAgIHJldHVybiBkYXRlcy5sZW5ndGggPyBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXSA6IHRoaXMuZGF0ZTtcbiAgICB9LFxuICAgIGZvcm1hdHRlZERhdGU6IGZ1bmN0aW9uIGZvcm1hdHRlZERhdGUoKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gJyc7XG4gICAgICBpZiAodGhpcy5oYXNTdGVwKCd5JykpIGZvcm1hdCA9ICdqWVlZWSc7XG4gICAgICBpZiAodGhpcy5oYXNTdGVwKCdtJykpIGZvcm1hdCArPSAnIGpNTU1NICc7XG5cbiAgICAgIGlmICh0aGlzLmhhc1N0ZXAoJ2QnKSkge1xuICAgICAgICBmb3JtYXQgPSB0aGlzLmlzRGF0YUFycmF5ID8gJ2pEIGpNTU1NIGpZWVlZJyA6ICdkZGQgakQgak1NTU0nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNTdGVwKCd0JykpIGZvcm1hdCArPSAnIEhIOm1tICc7XG4gICAgICBpZiAoIWZvcm1hdCkgcmV0dXJuICcnO1xuICAgICAgdmFyIHNlcGFyYXRvciA9IHRoaXMubXVsdGlwbGUgPyAnIHwgJyA6ICcgfiAnO1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuIGQueEZvcm1hdChmb3JtYXQpO1xuICAgICAgfSkuam9pbihzZXBhcmF0b3IpO1xuICAgIH0sXG4gICAgbW9udGg6IGZ1bmN0aW9uIG1vbnRoKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLmhhc1N0ZXAoJ2QnKSkgcmV0dXJuIFtdO1xuICAgICAgdmFyIG1pbiA9IHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIDogLUluZmluaXR5O1xuICAgICAgdmFyIG1heCA9IHRoaXMubWF4RGF0ZSA/IHRoaXMubWF4RGF0ZS5jbG9uZSgpLmVuZE9mKCdkYXknKSA6IEluZmluaXR5O1xuICAgICAgcmV0dXJuIHRoaXMuY29yZS5nZXRXZWVrQXJyYXkodGhpcy5kYXRlLmNsb25lKCkpLm1hcChmdW5jdGlvbiAod2Vla0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtJdGVtLm1hcChmdW5jdGlvbiAoZGF5KSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBkYXRlOiBkYXksXG4gICAgICAgICAgICBmb3JtYXR0ZWQ6ICcnLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge31cbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICghZGF5KSByZXR1cm4gZGF0YTtcblxuICAgICAgICAgIHZhciBkYXlNb21lbnQgPSBfdGhpcy5jb3JlLm1vbWVudChkYXkpO1xuXG4gICAgICAgICAgZGF0YS5mb3JtYXR0ZWQgPSBkYXlNb21lbnQueERhdGUoKTtcbiAgICAgICAgICBkYXRhLnNlbGVjdGVkID0gX3RoaXMuc2VsZWN0ZWREYXRlcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNTYW1lRGF5KGl0ZW0sIGRheSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0YS5kaXNhYmxlZCA9IF90aGlzLm1pbkRhdGUgJiYgZGF5TW9tZW50LmNsb25lKCkuc3RhcnRPZignZGF5JykgPCBtaW4gfHwgX3RoaXMubWF4RGF0ZSAmJiBkYXlNb21lbnQuY2xvbmUoKS5lbmRPZignZGF5JykgPiBtYXggfHwgX3RoaXMuY2hlY2tEaXNhYmxlKCdkJywgZGF5TW9tZW50KTtcblxuICAgICAgICAgIGlmIChfdGhpcy5yYW5nZSAmJiAhZGF0YS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdmFyIF90aGlzJHNlbGVjdGVkRGF0ZXMgPSBfc2xpY2VkVG9BcnJheShfdGhpcy5zZWxlY3RlZERhdGVzLCAyKSxcbiAgICAgICAgICAgICAgICBzdGFydCA9IF90aGlzJHNlbGVjdGVkRGF0ZXNbMF0sXG4gICAgICAgICAgICAgICAgZW5kID0gX3RoaXMkc2VsZWN0ZWREYXRlc1sxXTtcblxuICAgICAgICAgICAgZGF0YS5pc0ZpcnN0ID0gZGF0YS5zZWxlY3RlZCAmJiBzdGFydCAmJiBpc1NhbWVEYXkoc3RhcnQsIGRheSk7XG4gICAgICAgICAgICBkYXRhLmlzTGFzdCA9IGRhdGEuc2VsZWN0ZWQgJiYgZW5kICYmIGlzU2FtZURheShlbmQsIGRheSk7XG4gICAgICAgICAgICBkYXRhLmlzQmV0d2VlbiA9ICFkYXRhLnNlbGVjdGVkICYmIHN0YXJ0ICYmIGVuZCAmJiBkYXkgPiBzdGFydCAmJiBkYXkgPCBlbmQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YS5hdHRyaWJ1dGVzID0gX3RoaXMuZ2V0SGlnaGxpZ2h0cygnZCcsIGRheU1vbWVudCk7XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBtb250aERheXM6IGZ1bmN0aW9uIG1vbnRoRGF5cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMucmFuZ2UgfHwgdGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCAhPT0gMSB8fCAhdGhpcy5ob3ZlcmVkSXRlbSkgcmV0dXJuIHRoaXMubW9udGg7XG4gICAgICB2YXIgZGF0ZXMgPSBbdGhpcy5ob3ZlcmVkSXRlbSwgdGhpcy5zZWxlY3RlZERhdGVzWzBdXTtcbiAgICAgIGRhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiO1xuICAgICAgfSk7XG4gICAgICB2YXIgc3RhcnQgPSBkYXRlc1swXSxcbiAgICAgICAgICBlbmQgPSBkYXRlc1sxXTtcbiAgICAgIHJldHVybiB0aGlzLm1vbnRoLm1hcChmdW5jdGlvbiAod2Vla0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtJdGVtLm1hcChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICghZGF0YS5kYXRlKSByZXR1cm4gZGF0YTtcblxuICAgICAgICAgIGlmIChfdGhpczIucmFuZ2UgJiYgIWRhdGEuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRhLmRhdGU7XG4gICAgICAgICAgICBkYXRhLmlzSG92ZXIgPSAhZGF0YS5zZWxlY3RlZCAmJiBkYXkgPiBzdGFydCAmJiBkYXkgPCBlbmQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB5ZWFyczogZnVuY3Rpb24geWVhcnMoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIGlzWWVhclNlY3Rpb25WaXNpYmxlID0gdGhpcy5jdXJyZW50U3RlcCA9PT0gJ3knIHx8IHRoaXMuc2ltcGxlO1xuICAgICAgaWYgKCF0aGlzLmhhc1N0ZXAoJ3knKSB8fCAhaXNZZWFyU2VjdGlvblZpc2libGUpIHJldHVybiBbXTtcbiAgICAgIHZhciBtb21lbnQgPSB0aGlzLmNvcmUubW9tZW50O1xuICAgICAgdmFyIG1pbiA9IHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZSA6IG1vbWVudCgnMTMwMCcsICdqWVlZWScpO1xuICAgICAgdmFyIG1heCA9IHRoaXMubWF4RGF0ZSA/IHRoaXMubWF4RGF0ZSA6IG1pbi5jbG9uZSgpLmFkZCgxNTAsICd5ZWFyJyk7XG4gICAgICB2YXIgY3kgPSB0aGlzLmRhdGUueFllYXIoKTtcbiAgICAgIHJldHVybiB0aGlzLmNvcmUuZ2V0WWVhcnNMaXN0KG1pbi54WWVhcigpLCBtYXgueFllYXIoKSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgeWVhciA9IG1vbWVudCgpLnhZZWFyKGl0ZW0pO1xuICAgICAgICB5ZWFyLnNlbGVjdGVkID0gY3kgPT09IGl0ZW07XG4gICAgICAgIHllYXIuZGlzYWJsZWQgPSBfdGhpczMuY2hlY2tEaXNhYmxlKCd5JywgaXRlbSk7XG4gICAgICAgIHllYXIuYXR0cmlidXRlcyA9IF90aGlzMy5nZXRIaWdobGlnaHRzKCd5JywgaXRlbSk7XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBtb250aHM6IGZ1bmN0aW9uIG1vbnRocygpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5oYXNTdGVwKCdtJykpIHtcbiAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmRhdGUuY2xvbmUoKS54U3RhcnRPZignbW9udGgnKTtcbiAgICAgICAgdmFyIG1vbnRocyA9IHRoaXMuY29yZS5nZXRNb250aHNMaXN0KHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCBkYXRlKTtcbiAgICAgICAgbW9udGhzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICBtLnNlbGVjdGVkID0gX3RoaXM0LmRhdGUueE1vbnRoKCkgPT09IG0ueE1vbnRoKCk7XG4gICAgICAgICAgbS5kaXNhYmxlZCA9IG0uZGlzYWJsZWQgfHwgX3RoaXM0LmNoZWNrRGlzYWJsZSgnbScsIG0pO1xuICAgICAgICAgIG0uYXR0cmlidXRlcyA9IF90aGlzNC5nZXRIaWdobGlnaHRzKCdtJywgbSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBwcmV2TW9udGhEaXNhYmxlZDogZnVuY3Rpb24gcHJldk1vbnRoRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNTdGVwKCdkJykgJiYgdGhpcy5taW5EYXRlICYmIHRoaXMubWluRGF0ZS5jbG9uZSgpLnhTdGFydE9mKCdtb250aCcpID49IHRoaXMuZGF0ZS5jbG9uZSgpLnhTdGFydE9mKCdtb250aCcpO1xuICAgIH0sXG4gICAgbmV4dE1vbnRoRGlzYWJsZWQ6IGZ1bmN0aW9uIG5leHRNb250aERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzU3RlcCgnZCcpICYmIHRoaXMubWF4RGF0ZSAmJiB0aGlzLm1heERhdGUuY2xvbmUoKS54U3RhcnRPZignbW9udGgnKSA8PSB0aGlzLmRhdGUuY2xvbmUoKS54U3RhcnRPZignbW9udGgnKTtcbiAgICB9LFxuICAgIGNhbkdvVG9kYXk6IGZ1bmN0aW9uIGNhbkdvVG9kYXkoKSB7XG4gICAgICBpZiAoIXRoaXMubWluRGF0ZSAmJiAhdGhpcy5tYXhEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBub3cgPSB0aGlzLm5vdyxcbiAgICAgICAgICBtaW4gPSB0aGlzLm1pbkRhdGUgJiYgdGhpcy5taW5EYXRlIDw9IG5vdyxcbiAgICAgICAgICBtYXggPSB0aGlzLm1heERhdGUgJiYgbm93IDw9IHRoaXMubWF4RGF0ZTtcblxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICBtaW4gPSBub3cuY2xvbmUoKS5ob3VyKHRoaXMubWluRGF0ZS5ob3VyKCkpLm1pbnV0ZSh0aGlzLm1pbkRhdGUubWludXRlKCkpO1xuICAgICAgICAgIG1pbiA9IG1pbiA8PSBub3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgbWF4ID0gdGhpcy5ub3cuY2xvbmUoKS5ob3VyKHRoaXMubWF4RGF0ZS5ob3VyKCkpLm1pbnV0ZSh0aGlzLm1heERhdGUubWludXRlKCkpO1xuICAgICAgICAgIG1heCA9IG5vdyA8PSBtYXg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiB0aGlzLm1heERhdGUpIHJldHVybiBtaW4gJiYgbWF4O1xuICAgICAgaWYgKHRoaXMubWluRGF0ZSkgcmV0dXJuIG1pbjtcbiAgICAgIGlmICh0aGlzLm1heERhdGUpIHJldHVybiBtYXg7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhbHRGb3JtYXR0ZWQ6IGZ1bmN0aW9uIGFsdEZvcm1hdHRlZCgpIHtcbiAgICAgIHZhciBmb3JtYXQgPSB0aGlzLmFsdEZvcm1hdDtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJycgfHwgZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgICAgIGZvcm1hdCA9ICdISDptbTpzcyBbR01UXVpaJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgICAgICAgZm9ybWF0ID0gJ1lZWVktTU0tREQgSEg6bW06c3MgW0dNVF1aWic7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgZm9ybWF0ID0gJ1lZWVktTU0tREQnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIGZvcm1hdCA9ICdZWVlZJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgZm9ybWF0ID0gJ01NJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneWVhci1tb250aCc6XG4gICAgICAgICAgICBmb3JtYXQgPSAnWVlZWS1NTSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vdXRwdXQubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiBkLmZvcm1hdChmb3JtYXQpO1xuICAgICAgfSkuam9pbignIH4gJyk7XG4gICAgfSxcbiAgICBzZWxmRm9ybWF0OiBmdW5jdGlvbiBzZWxmRm9ybWF0KCkge1xuICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuXG4gICAgICBpZiAoWycnLCB1bmRlZmluZWQsICdkYXRlJ10uaW5kZXhPZihmb3JtYXQpICE9PSAtMSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICAgICAgZm9ybWF0ID0gJ0hIOm1tJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgICAgICAgZm9ybWF0ID0gJ2pZWVlZL2pNTS9qREQgSEg6bW0nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIGZvcm1hdCA9ICdqWVlZWS9qTU0vakREJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICBmb3JtYXQgPSAnallZWVknO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICBmb3JtYXQgPSAnak1NJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneWVhci1tb250aCc6XG4gICAgICAgICAgICBmb3JtYXQgPSAnallZWVkvak1NJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfSxcbiAgICBzZWxmSW5wdXRGb3JtYXQ6IGZ1bmN0aW9uIHNlbGZJbnB1dEZvcm1hdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9ybWF0ID09PSAnJyB8fCB0aGlzLmlucHV0Rm9ybWF0ID09PSB1bmRlZmluZWQgPyB0aGlzLnNlbGZGb3JtYXQgOiB0aGlzLmlucHV0Rm9ybWF0O1xuICAgIH0sXG4gICAgb3V0cHV0VmFsdWU6IGZ1bmN0aW9uIG91dHB1dFZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBvdXRwdXQgPSBjbG9uZURhdGVzKHRoaXMub3V0cHV0KTtcbiAgICAgIHZhciBmb3JtYXQgPSB0aGlzLnNlbGZGb3JtYXQ7XG4gICAgICB2YXIgaXNEYXRlID0gdGhpcy52YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgdGhpcy5mb3JtYXQgPT09ICdkYXRlJztcbiAgICAgIHJldHVybiBvdXRwdXQubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIDtcbiAgICAgICAgL2pcXHcvLnRlc3QoZm9ybWF0KSAmJiBpdGVtLmxvY2FsZSgnZmEnKTtcblxuICAgICAgICBfdGhpczUuc2V0VGltZXpvbmUoaXRlbSwgJ291dCcpO1xuXG4gICAgICAgIHJldHVybiBpc0RhdGUgPyBpdGVtLnRvRGF0ZSgpIDogaXRlbS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2VsZkRpc3BsYXlGb3JtYXQ6IGZ1bmN0aW9uIHNlbGZEaXNwbGF5Rm9ybWF0KCkge1xuICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuZGlzcGxheUZvcm1hdCB8fCB0aGlzLnNlbGZGb3JtYXQ7XG4gICAgICB2YXIgbG9jYWxlRm9ybWF0ID0gdGhpcy5sb2NhbGVEYXRhLmNvbmZpZy5kaXNwbGF5Rm9ybWF0O1xuXG4gICAgICBpZiAobG9jYWxlRm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxlRm9ybWF0ID09PSAnZnVuY3Rpb24nID8gbG9jYWxlRm9ybWF0KHRoaXMpIDogbG9jYWxlRm9ybWF0O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5sb2NhbGVEYXRhLm5hbWUgIT09ICdmYScpIHtcbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL2ovZywgJycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH0sXG4gICAgZGlzcGxheVZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuc2VsZkRpc3BsYXlGb3JtYXQ7XG4gICAgICByZXR1cm4gdGhpcy5vdXRwdXQubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBpdGVtLmNsb25lKCk7XG4gICAgICAgIC9qXFx3Ly50ZXN0KGZvcm1hdCkgJiYgb3V0cHV0LmxvY2FsZSgnZmEnKTtcbiAgICAgICAgcmV0dXJuIF90aGlzNi5jb252ZXJ0VG9Mb2NhbGVOdW1iZXIob3V0cHV0LmZvcm1hdChmb3JtYXQpKTtcbiAgICAgIH0pLmpvaW4oJyB+ICcpO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlVGltZTogZnVuY3Rpb24gaXNEaXNhYmxlVGltZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1N0ZXAoJ3QnKSAmJiB0aGlzLmNoZWNrRGlzYWJsZSgndCcsIHRoaXMudGltZSk7XG4gICAgfSxcbiAgICBjYW5TdWJtaXQ6IGZ1bmN0aW9uIGNhblN1Ym1pdCgpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBjYW4gPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuaGFzU3RlcCgndCcpKSBjYW4gPSAhdGhpcy5pc0Rpc2FibGVUaW1lO1xuICAgICAgaWYgKGNhbiAmJiB0aGlzLnR5cGUgIT09ICd0aW1lJykgY2FuID0gIXRoaXMuY2hlY2tEaXNhYmxlKCdkJywgdGhpcy5kYXRlKTtcbiAgICAgIHJldHVybiBjYW47XG4gICAgfSxcbiAgICB3ZWVrRGF5czogZnVuY3Rpb24gd2Vla0RheXMoKSB7XG4gICAgICB2YXIgbmFtZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29yZS5tb21lbnQoKS5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4oKSkpO1xuICAgICAgdmFyIGRvdyA9IHRoaXMuY29yZS5sb2NhbGUuY29uZmlnLmRvdztcblxuICAgICAgd2hpbGUgKGRvdyA+IDApIHtcbiAgICAgICAgbmFtZXMucHVzaChuYW1lcy5zaGlmdCgpKTtcbiAgICAgICAgZG93LS07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lcztcbiAgICB9LFxuICAgIGxhbmc6IGZ1bmN0aW9uIGxhbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhLmNvbmZpZy5sYW5nO1xuICAgIH0sXG4gICAgaXNQb3BvdmVyOiBmdW5jdGlvbiBpc1BvcG92ZXIoKSB7XG4gICAgICByZXR1cm4gKHRoaXMucG9wb3ZlciA9PT0gJycgfHwgdGhpcy5wb3BvdmVyKSAmJiB0aGlzLndpbmRvd1dpZHRoID4gNDgwO1xuICAgIH0sXG4gICAgaXNEYXRhQXJyYXk6IGZ1bmN0aW9uIGlzRGF0YUFycmF5KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2UgfHwgdGhpcy5tdWx0aXBsZTtcbiAgICB9LFxuICAgIGlzQ29tcGFjdFRpbWU6IGZ1bmN0aW9uIGlzQ29tcGFjdFRpbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wYWN0VGltZSB8fCB0aGlzLnR5cGUgPT09ICdkYXRldGltZScgJiYgdGhpcy5zaW1wbGU7XG4gICAgfSxcbiAgICBjdXN0b21JbnB1dEVsZW1lbnQ6IGZ1bmN0aW9uIGN1c3RvbUlucHV0RWxlbWVudCgpIHtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHJldHVybiBcIiNcIi5jb25jYXQodGhpcy5lbGVtZW50KTtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUlucHV0O1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB0eXBlOiB7XG4gICAgICBoYW5kbGVyOiAnc2V0VHlwZScsXG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9LFxuICAgIHZpZXc6IHtcbiAgICAgIGhhbmRsZXI6ICdzZXRWaWV3JyxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVEYXRlcycsXG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgaGFuZGxlcjogJ3NldE1pbk1heCcsXG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgaGFuZGxlcjogJ3NldE1pbk1heCcsXG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9LFxuICAgIHRpbWV6b25lOiB7XG4gICAgICBoYW5kbGVyOiAndXBkYXRlRGF0ZXMnXG4gICAgfSxcbiAgICBpbmxpbmU6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkgdGhpcy52aXNpYmxlID0gISF2YWw7XG4gICAgICB9LFxuICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgaWYgKHZhbCkgdGhpcy52aXNpYmxlID0gZmFsc2U7ZWxzZSBpZiAodGhpcy5pbmxpbmUpIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICB9LFxuICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgfSxcbiAgICBzZWxlY3RlZERhdGU6IGZ1bmN0aW9uIHNlbGVjdGVkRGF0ZSh2YWwsIG9sZCkge1xuICAgICAgdGhpcy5zZXREaXJlY3Rpb24oJ2RpcmVjdGlvbkNsYXNzJywgdmFsLCBvbGQpO1xuICAgIH0sXG4gICAgZGF0ZTogZnVuY3Rpb24gZGF0ZSh2YWwsIG9sZCkge1xuICAgICAgdGhpcy5zZXREaXJlY3Rpb24oJ2RpcmVjdGlvbkNsYXNzRGF0ZScsIHZhbCwgb2xkKTtcbiAgICAgIGlmICh0aGlzLmlzTG93ZXIodGhpcy5kYXRlKSkgdGhpcy5kYXRlID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XG4gICAgICBpZiAodGhpcy5pc01vcmUodGhpcy5kYXRlKSkgdGhpcy5kYXRlID0gdGhpcy5tYXhEYXRlLmNsb25lKCk7XG4gICAgfSxcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybiB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiB0aGlzLnZpZXcgPT09ICdkYXknKSB0aGlzLmdvU3RlcCgnZCcpO1xuICAgICAgICBpZiAodGhpcy52aWV3ICE9PSAnZGF5JykgdGhpcy5nb1N0ZXAodGhpcy5zaG9ydENvZGVzW3RoaXMudmlld10gfHwgJ2QnKTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChwb3BvdmVyX3V0aWwuc2hvdWxkQXBwZW5kUGlja2VyKF90aGlzNy5hcHBlbmRUbywgX3RoaXM3LmlzUG9wb3ZlcikpIHtcbiAgICAgICAgICAgIHBvcG92ZXJfdXRpbC5hcHBlbmRDaGlsZChfdGhpczcuYXBwZW5kVG8sIF90aGlzNy4kcmVmcy5waWNrZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tTY3JvbGwoKTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy5zZXRQbGFjZW1lbnQpO1xuICAgICAgICB0aGlzLiRlbWl0KCdvcGVuJywgdGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pbmxpbmUgJiYgIXRoaXMuZGlzYWJsZWQpIHJldHVybiB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScsIHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2hvdzogZnVuY3Rpb24gc2hvdyh2YWwpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHZhbDtcbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdmFyIGxvY2FsZXMgPSB2YWwudG9TdHJpbmcoKS5zcGxpdCgnLCcpO1xuICAgICAgICB0aGlzLmxvY2FsZXMgPSBsb2NhbGVzLmxlbmd0aCA/IGxvY2FsZXMgOiBbJ2ZhJ107XG4gICAgICAgIGlmICh0aGlzLmNvcmUubG9jYWxlLm5hbWUgIT09IHRoaXMubG9jYWxlc1swXSkgdGhpcy5zZXRMb2NhbGUodGhpcy5sb2NhbGVzWzBdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvY2FsZUNvbmZpZzoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29yZS5zZXRMb2NhbGVzQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuc2V0TG9jYWxlKHRoaXMubG9jYWxlRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdsb2NhbGVEYXRhLm5hbWUnOiBmdW5jdGlvbiBsb2NhbGVEYXRhTmFtZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2xvY2FsZUNoYW5nZScsIHRoaXMubG9jYWxlRGF0YSk7XG4gICAgICB0aGlzLnNldE1pbk1heCgpO1xuICAgIH0sXG4gICAgZGlzcGxheVZhbHVlOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tSW5wdXQpIHJldHVybjtcbiAgICAgICAgdmFyIGN1c3RvbUlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmN1c3RvbUlucHV0KTtcbiAgICAgICAgaWYgKGN1c3RvbUlucHV0KSBjdXN0b21JbnB1dC52YWx1ZSA9IGRpc3BsYXlWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICB0aGlzLnVwZGF0ZU5vd0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM4Lm5vdyA9IF90aGlzOC5jb3JlLm1vbWVudCgpO1xuICAgIH0sIDEwMDApO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzOS5jdXN0b21JbnB1dEVsZW1lbnQgJiYgIV90aGlzOS5lZGl0YWJsZSkgYWRkTGl2ZUV2ZW50KF90aGlzOS5jdXN0b21JbnB1dEVsZW1lbnQsICdjbGljaycsIF90aGlzOS5mb2N1cyk7XG4gICAgICBpZiAoX3RoaXM5LmN1c3RvbUlucHV0ICYmIF90aGlzOS5lZGl0YWJsZSkgYWRkTGl2ZUV2ZW50KF90aGlzOS5jdXN0b21JbnB1dCwgJ2JsdXInLCBfdGhpczkuc2V0T3V0cHV0KTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZSA9IGUgfHwgZXZlbnQ7XG4gICAgICB2YXIgY29kZSA9IGUua2V5Q29kZTtcbiAgICAgIGlmICgoY29kZSA9PT0gOSB8fCBjb2RlID09PSAyNykgJiYgX3RoaXM5LnZpc2libGUpIF90aGlzOS52aXNpYmxlID0gZmFsc2U7XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25XaW5kb3dTY3JvbGwsIHRydWUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbldpbmRvd0NsaWNrLCB0cnVlKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZU5vd0ludGVydmFsKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbldpbmRvd1Njcm9sbCwgdHJ1ZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25XaW5kb3dSZXNpemUsIHRydWUpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uV2luZG93Q2xpY2ssIHRydWUpO1xuXG4gICAgaWYgKHBvcG92ZXJfdXRpbC5zaG91bGRBcHBlbmRQaWNrZXIodGhpcy5hcHBlbmRUbywgdGhpcy5pc1BvcG92ZXIpKSB7XG4gICAgICBwb3BvdmVyX3V0aWwucmVtb3ZlQ2hpbGQodGhpcy4kcmVmcy5waWNrZXIpO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG5leHRTdGVwOiBmdW5jdGlvbiBuZXh0U3RlcChmcm9tU3RlcCkge1xuICAgICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hlY2tBbmRTdWJtaXQgPSBmdW5jdGlvbiBjaGVja0FuZFN1Ym1pdCgpIHtcbiAgICAgICAgdmFyIG1pbkxlbmd0aFRvU3VibWl0ID0gX3RoaXMxMC5yYW5nZSA/IDIgOiBfdGhpczEwLm11bHRpcGxlID8gMCA6IDE7XG4gICAgICAgIHZhciBwYXNzU2VsZWN0ZWQgPSBfdGhpczEwLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID49IG1pbkxlbmd0aFRvU3VibWl0O1xuXG4gICAgICAgIGlmICgoX3RoaXMxMC5hdXRvU3VibWl0IHx8IF90aGlzMTAuaW5saW5lKSAmJiBwYXNzU2VsZWN0ZWQpIHtcbiAgICAgICAgICBfdGhpczEwLnN1Ym1pdCghX3RoaXMxMC5tdWx0aXBsZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnNpbXBsZSkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScgJiYgZnJvbVN0ZXAgPT09ICdkYXknIHx8IHRoaXMudHlwZSA9PT0gJ3llYXItbW9udGgnICYmIGZyb21TdGVwID09PSAnbW9udGgnIHx8IHRoaXMudHlwZSA9PT0gJ3llYXInIHx8IHRoaXMudHlwZSA9PT0gJ21vbnRoJykgY2hlY2tBbmRTdWJtaXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcCArIDE7XG4gICAgICBpZiAodGhpcy5pc0NvbXBhY3RUaW1lICYmIHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lJykgc3RlcCArPSAxO1xuXG4gICAgICBpZiAodGhpcy5zdGVwcy5sZW5ndGggPD0gc3RlcCkge1xuICAgICAgICBjaGVja0FuZFN1Ym1pdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGVwKys7XG4gICAgICAgIHRoaXMuZ29TdGVwKHRoaXMuc3RlcCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnb1N0ZXA6IGZ1bmN0aW9uIGdvU3RlcChpKSB7XG4gICAgICB0aGlzLnN0ZXAgPSB0eXBlb2YgaSA9PT0gJ251bWJlcicgPyBpIDogdGhpcy5zdGVwcy5pbmRleE9mKGkpO1xuICAgICAgdGhpcy5jaGVja1Njcm9sbCgpO1xuICAgIH0sXG4gICAgY2hlY2tTY3JvbGw6IGZ1bmN0aW9uIGNoZWNrU2Nyb2xsKCkge1xuICAgICAgdmFyIF90aGlzMTEgPSB0aGlzO1xuXG4gICAgICB2YXIgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXA7XG5cbiAgICAgIGlmIChzdGVwID09PSAneScgfHwgc3RlcCA9PT0gJ20nICYmIHRoaXMudmlzaWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gX3RoaXMxMS4kcmVmc1t7XG4gICAgICAgICAgICB5OiAneWVhcicsXG4gICAgICAgICAgICBtOiAnbW9udGgnXG4gICAgICAgICAgfVtzdGVwXV07XG5cbiAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLnZwZC1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgJ3Njcm9sbEludG9WaWV3JyBpbiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBuZXh0TW9udGg6IGZ1bmN0aW9uIG5leHRNb250aCgpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZGF0ZS5jbG9uZSgpLnhBZGQoMSwgJ21vbnRoJyk7XG4gICAgICB0aGlzLiRlbWl0KCduZXh0LW1vbnRoJywgdGhpcy5kYXRlLmNsb25lKCkpO1xuICAgIH0sXG4gICAgcHJldk1vbnRoOiBmdW5jdGlvbiBwcmV2TW9udGgoKSB7XG4gICAgICB0aGlzLmRhdGUgPSB0aGlzLmRhdGUuY2xvbmUoKS54QWRkKC0xLCAnbW9udGgnKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3ByZXYtbW9udGgnLCB0aGlzLmRhdGUuY2xvbmUoKSk7XG4gICAgfSxcbiAgICBzZWxlY3REYXk6IGZ1bmN0aW9uIHNlbGVjdERheShkYXkpIHtcbiAgICAgIGlmICghZGF5LmRhdGUgfHwgZGF5LmRpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgZGF0ZSA9IHRoaXMuY29yZS5tb21lbnQoZGF5LmRhdGUpO1xuICAgICAgZGF0ZS5zZXQoe1xuICAgICAgICBob3VyOiB0aGlzLnRpbWUuaG91cigpLFxuICAgICAgICBtaW51dGU6IHRoaXMudGltZS5taW51dGUoKSxcbiAgICAgICAgc2Vjb25kOiAwXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0ZSA9IGRhdGUuY2xvbmUoKTtcbiAgICAgIHRoaXMudGltZSA9IGRhdGUuY2xvbmUoKTtcblxuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFsZW5ndGggfHwgbGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtkYXRlLmNsb25lKCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUuY2xvbmUoKSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHZhciBleGlzdHMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmluZEluZGV4KGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQudmFsdWVPZigpID09PSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGV4aXN0cyA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzLnNwbGljZShleGlzdHMsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtkYXRlLmNsb25lKCldO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5leHRTdGVwKCdkYXknKTtcbiAgICB9LFxuICAgIHNlbGVjdFllYXI6IGZ1bmN0aW9uIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgaWYgKHllYXIuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZGF0ZS5jbG9uZSgpLnhZZWFyKHllYXIueFllYXIoKSk7XG4gICAgICB0aGlzLmtlZXBDdXJyZW50U2VsZWN0ZWREYXkoKTtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3RlZERhdGVzKHRoaXMuZGF0ZSk7XG4gICAgICB0aGlzLiRlbWl0KCd5ZWFyLWNoYW5nZScsIHllYXIpO1xuICAgICAgdGhpcy5uZXh0U3RlcCgneWVhcicpO1xuICAgIH0sXG4gICAgc2VsZWN0TW9udGg6IGZ1bmN0aW9uIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICBpZiAobW9udGguZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZGF0ZS5jbG9uZSgpLnhNb250aChtb250aC54TW9udGgoKSk7XG4gICAgICB0aGlzLmtlZXBDdXJyZW50U2VsZWN0ZWREYXkoKTtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3RlZERhdGVzKHRoaXMuZGF0ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdtb250aC1jaGFuZ2UnLCBtb250aCk7XG4gICAgICB0aGlzLm5leHRTdGVwKCdtb250aCcpO1xuICAgIH0sXG4gICAga2VlcEN1cnJlbnRTZWxlY3RlZERheTogZnVuY3Rpb24ga2VlcEN1cnJlbnRTZWxlY3RlZERheSgpIHtcbiAgICAgIGlmICghdGhpcy5zaW1wbGUgfHwgdGhpcy5tdWx0aXBsZSB8fCB0aGlzLnJhbmdlKSByZXR1cm47XG4gICAgICB2YXIgY3VycmVudERheSA9IHRoaXMuc2VsZWN0ZWREYXRlLnhEYXRlKCk7XG4gICAgICB0aGlzLmRhdGUueERhdGUoTWF0aC5taW4oY3VycmVudERheSwgdGhpcy5kYXRlLnhEYXlzSW5Nb250aCgpKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbdGhpcy5kYXRlLmNsb25lKCldO1xuICAgICAgdGhpcy5hdXRvU3VibWl0ICYmIHRoaXMuc3VibWl0KGZhbHNlKTtcbiAgICB9LFxuICAgIHJlc2V0U2VsZWN0ZWREYXRlczogZnVuY3Rpb24gcmVzZXRTZWxlY3RlZERhdGVzKGRhdGUpIHtcbiAgICAgIGlmIChbJ21vbnRoJywgJ3llYXItbW9udGgnXS5pbmRleE9mKHRoaXMudHlwZSkgIT09IC0xKSB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbZGF0ZS5jbG9uZSgpXTtcbiAgICB9LFxuICAgIHN1Ym1pdDogZnVuY3Rpb24gc3VibWl0KCkge1xuICAgICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG4gICAgICB2YXIgY2xvc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gICAgICB2YXIgc3RlcHMgPSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG4gICAgICBpZiAodGhpcy5pc0NvbXBhY3RUaW1lICYmIHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lJykgc3RlcHMgLT0gMTtcbiAgICAgIGlmICh0aGlzLnN0ZXAgPCBzdGVwcyAmJiAhdGhpcy5zaW1wbGUpIHJldHVybiB0aGlzLm5leHRTdGVwKCk7XG5cbiAgICAgIGlmICh0aGlzLmhhc1N0ZXAoJ3QnKSkge1xuICAgICAgICB2YXIgdCA9IHtcbiAgICAgICAgICBob3VyOiB0aGlzLnRpbWUuaG91cigpLFxuICAgICAgICAgIG1pbnV0ZTogdGhpcy50aW1lLm1pbnV0ZSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZGF0ZS5zZXQodCkuY2xvbmUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gc2VsZWN0ZWQubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQuc2V0KHQpLmNsb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoWyd5ZWFyJywgJ21vbnRoJywgJ3llYXItbW9udGgnXS5pbmRleE9mKHRoaXMudHlwZSkgIT09IC0xKSB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZC5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMxMi5kYXRlLmNsb25lKCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucmFuZ2UgJiYgc2VsZWN0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICBzZWxlY3RlZFswXS54U3RhcnRPZignZGF5Jyk7XG4gICAgICAgIHNlbGVjdGVkWzFdLnhFbmRPZignZGF5Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3V0cHV0ID0gY2xvbmVEYXRlcyhzZWxlY3RlZCk7XG4gICAgICBpZiAoY2xvc2UpIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5pc0RhdGFBcnJheSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMub3V0cHV0VmFsdWUpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjbG9uZURhdGVzKHNlbGVjdGVkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMub3V0cHV0VmFsdWVbMF0pO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBzZWxlY3RlZFswXS5jbG9uZSgpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZURhdGVzOiBmdW5jdGlvbiB1cGRhdGVEYXRlcyhwYXlsb2FkKSB7XG4gICAgICB2YXIgX3RoaXMxMyA9IHRoaXM7XG5cbiAgICAgIGlmICghcGF5bG9hZCkgcGF5bG9hZCA9IHRoaXMuaXNEYXRhQXJyYXkgPyBbXSA6ICcnOyAvLyBmaXg6IGRvbid0IHVwZGF0ZSBkYXRlcyBpZiB0aGV5IGFyZSBhbHJlYWR5IHVwIHRvIGRhdGVcblxuICAgICAgaWYgKHRoaXMuZGF0ZS5jbG9uZSAmJiBwYXlsb2FkLnRvU3RyaW5nKCkgPT09IHRoaXMub3V0cHV0VmFsdWUudG9TdHJpbmcoKSkgcmV0dXJuO1xuICAgICAgdmFyIHBheWxvYWRJc0FycmF5ID0gcGF5bG9hZCBpbnN0YW5jZW9mIEFycmF5O1xuXG4gICAgICB2YXIgZ2V0RGF0ZSA9IGZ1bmN0aW9uIGdldERhdGUoaW5wdXQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgdmFyIHN0YXJ0VmFsdWUgPSBfdGhpczEzLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyBfdGhpczEzLnZhbHVlW2luZGV4XSA6IF90aGlzMTMudmFsdWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgaXNPYmplY3QgPSBWdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlb2YoaW5wdXQpID09PSAnb2JqZWN0JztcblxuICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGRhdGUgPSBfdGhpczEzLmdldE1vbWVudChpbnB1dCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCAmJiBpc09iamVjdCAmJiAnY2xvbmUnIGluIGlucHV0KSB7XG4gICAgICAgICAgICBkYXRlID0gaW5wdXQuY2xvbmUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG51bGwgPT09IGlucHV0IHx8ICFpc09iamVjdCkge1xuICAgICAgICAgICAgZGF0ZSA9IF90aGlzMTMuZ2V0TW9tZW50KGlucHV0IHx8IHN0YXJ0VmFsdWUgfHwgX3RoaXMxMy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGUgPSBkYXRlLmlzVmFsaWQoKSA/IGRhdGUgOiBfdGhpczEzLmNvcmUubW9tZW50KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBkYXRlID0gX3RoaXMxMy5jb3JlLm1vbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMxMy5zZXRUaW1lem9uZShkYXRlLCAnaW4nKTtcblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChwYXlsb2FkSXNBcnJheSkge1xuICAgICAgICB0aGlzLmRhdGUgPSBnZXREYXRlKHBheWxvYWRbMF0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBwYXlsb2FkLm1hcChnZXREYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IGdldERhdGUocGF5bG9hZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oYXNTdGVwKCd0JykpIHRoaXMuZGF0ZS5zZXQoe1xuICAgICAgICBob3VyOiAwLFxuICAgICAgICBtaW51dGU6IDAsXG4gICAgICAgIHNlY29uZDogMFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmlzTG93ZXIodGhpcy5kYXRlKSkge1xuICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLm1pbkRhdGUuY2xvbmUoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc01vcmUodGhpcy5kYXRlKSkge1xuICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXlsb2FkSXNBcnJheSkgdGhpcy5zZWxlY3RlZERhdGVzID0gW3RoaXMuZGF0ZS5jbG9uZSgpXTtcbiAgICAgIHRoaXMudGltZSA9IHRoaXMuZGF0ZS5jbG9uZSgpO1xuXG4gICAgICBpZiAodGhpcy52YWx1ZSAhPT0gJycgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCAmJiB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm91dHB1dCA9IGNsb25lRGF0ZXModGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0cHV0ID0gW107XG4gICAgICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnb1RvZGF5OiBmdW5jdGlvbiBnb1RvZGF5KCkge1xuICAgICAgdmFyIG5vdyA9IHRoaXMuY29yZS5tb21lbnQoKTtcbiAgICAgIGlmICghdGhpcy5oYXNTdGVwKCd0JykpIG5vdy5zZXQoe1xuICAgICAgICBob3VyOiAwLFxuICAgICAgICBtaW51dGU6IDAsXG4gICAgICAgIHNlY29uZDogMFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGUgPSBub3cuY2xvbmUoKTtcbiAgICAgIHRoaXMudGltZSA9IG5vdy5jbG9uZSgpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gW25vdy5jbG9uZSgpXTtcbiAgICB9LFxuICAgIHNldFR5cGU6IGZ1bmN0aW9uIHNldFR5cGUoKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICB0aGlzLnN0ZXBzID0gWyd5JywgJ20nLCAnZCddO1xuICAgICAgICAgIHRoaXMuZ29TdGVwKCdkJyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgICAgIHRoaXMuc3RlcHMgPSBbJ3knLCAnbScsICdkJywgJ3QnXTtcbiAgICAgICAgICB0aGlzLmdvU3RlcCgnZCcpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc3RlcHMgPSBbJ3knXTtcbiAgICAgICAgICB0aGlzLmdvU3RlcCgneScpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnN0ZXBzID0gWydtJ107XG4gICAgICAgICAgdGhpcy5nb1N0ZXAoJ20nKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgICB0aGlzLnN0ZXBzID0gWyd0J107XG4gICAgICAgICAgdGhpcy5nb1N0ZXAoJ3QnKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd5ZWFyLW1vbnRoJzpcbiAgICAgICAgICB0aGlzLnN0ZXBzID0gWyd5JywgJ20nXTtcbiAgICAgICAgICB0aGlzLmdvU3RlcCgneScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VmlldzogZnVuY3Rpb24gc2V0VmlldygpIHtcbiAgICAgIHZhciBzID0gdGhpcy5zaG9ydENvZGVzW3RoaXMudmlld107XG4gICAgICBpZiAodGhpcy5oYXNTdGVwKHMpKSB0aGlzLmdvU3RlcChzKTtcbiAgICB9LFxuICAgIHNldERpcmVjdGlvbjogZnVuY3Rpb24gc2V0RGlyZWN0aW9uKHByb3AsIHZhbCwgb2xkKSB7XG4gICAgICB0aGlzW3Byb3BdID0gdmFsID4gb2xkID8gJ2RpcmVjdGlvbi1uZXh0JyA6ICdkaXJlY3Rpb24tcHJldic7XG4gICAgfSxcbiAgICBzZXRNaW5NYXg6IGZ1bmN0aW9uIHNldE1pbk1heCgpIHtcbiAgICAgIHZhciBtaW4gPSB0aGlzLmdldE1vbWVudCh0aGlzLm1pbiksXG4gICAgICAgICAgbWF4ID0gdGhpcy5nZXRNb21lbnQodGhpcy5tYXgpO1xuICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy5taW4gJiYgbWluLmlzVmFsaWQoKSA/IG1pbiA6IGZhbHNlO1xuICAgICAgdGhpcy5tYXhEYXRlID0gdGhpcy5tYXggJiYgbWF4LmlzVmFsaWQoKSA/IG1heCA6IGZhbHNlO1xuICAgIH0sXG4gICAgZ2V0TW9tZW50OiBmdW5jdGlvbiBnZXRNb21lbnQoZGF0ZSkge1xuICAgICAgdmFyIGQsXG4gICAgICAgICAgbW9tZW50ID0gdGhpcy5jb3JlLm1vbWVudDtcbiAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG1vbWVudChkYXRlKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZklucHV0Rm9ybWF0ID09PSAneCcgfHwgdGhpcy5zZWxmSW5wdXRGb3JtYXQgPT09ICd1bml4Jykge1xuICAgICAgICBkID0gbW9tZW50KGRhdGUudG9TdHJpbmcoKS5sZW5ndGggPT09IDEwID8gZGF0ZSAqIDEwMDAgOiBkYXRlICogMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG1vbWVudChkYXRlLCB0aGlzLnNlbGZJbnB1dEZvcm1hdCk7XG4gICAgICAgICAgICB2YXIgYiA9IG1vbWVudChkYXRlLCB0aGlzLnNlbGZGb3JtYXQpO1xuICAgICAgICAgICAgdmFyIG5vdyA9IG1vbWVudCgpLFxuICAgICAgICAgICAgICAgIHllYXIgPSBub3cueFllYXIoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgICBhLnhZZWFyKHllYXIpO1xuICAgICAgICAgICAgICBiLnhZZWFyKHllYXIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd0aW1lJykge1xuICAgICAgICAgICAgICBhID0gbm93LmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBoOiBhLmhvdXIoKSxcbiAgICAgICAgICAgICAgICBtOiBhLm1pbnV0ZSgpLFxuICAgICAgICAgICAgICAgIHM6IDBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGIgPSBhLmNsb25lKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhLnllYXIoKSAhPT0gYi55ZWFyKCkgJiYgYS55ZWFyKCkgPCAxOTAwKSB7XG4gICAgICAgICAgICAgIGQgPSBiLmNsb25lKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkID0gYS5jbG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkID0gbW9tZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICAgIGQgPSBtb21lbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZDtcbiAgICB9LFxuICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cyhlKSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBpZiAodGhpcy4kcmVmcy5pbnB1dCkgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBlLnRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMudmlzaWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFzU3RlcDogZnVuY3Rpb24gaGFzU3RlcChzdGVwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKHN0ZXApICE9PSAtMTtcbiAgICB9LFxuICAgIHNldE91dHB1dDogZnVuY3Rpb24gc2V0T3V0cHV0KGUpIHtcbiAgICAgIHZhciBfdGhpczE0ID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSBlLnRhcmdldC52YWx1ZS5zcGxpdCgnficpO1xuICAgICAgdmFyIG91dHB1dCA9IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gXCJcIi5jb25jYXQoaXRlbSkucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcbiAgICAgICAgaWYgKGl0ZW0gPT09ICcnKSByZXR1cm4gbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBkYXRlID0gX3RoaXMxNC5jb3JlLm1vbWVudChpdGVtLCBfdGhpczE0LnNlbGZEaXNwbGF5Rm9ybWF0KTtcblxuICAgICAgICAgIHJldHVybiBkYXRlLmlzVmFsaWQoKSA/IGRhdGUgOiBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMub3V0cHV0ID0gb3V0cHV0LmZpbHRlcihmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vdXRwdXQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYSAtIGI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3V0cHV0Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVzKGNsb25lRGF0ZXModGhpcy5vdXRwdXQpKTtcbiAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5pc0RhdGFBcnJheSA/IFtdIDogbnVsbCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuaXNEYXRhQXJyYXkgPyBbXSA6IG51bGwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd3JhcHBlckNsaWNrOiBmdW5jdGlvbiB3cmFwcGVyQ2xpY2soKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMud3JhcHBlclN1Ym1pdCAmJiB0aGlzLmNhblN1Ym1pdCkge1xuICAgICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXBwbHlEZXZGbjogZnVuY3Rpb24gYXBwbHlEZXZGbihmbiwgaykge1xuICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXJncy5wdXNoKHtcbiAgICAgICAgICB5OiAneWVhcicsXG4gICAgICAgICAgbTogJ21vbnRoJyxcbiAgICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgICB0OiAndGltZSdcbiAgICAgICAgfVtrXSk7XG4gICAgICAgIHJlc3VsdCA9IGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgY2hlY2tEaXNhYmxlOiBmdW5jdGlvbiBjaGVja0Rpc2FibGUoaXRlbSwgdmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczE1ID0gdGhpcztcblxuICAgICAgdmFyIHRoaXNEaXNhYmxlID0gdGhpcy5kaXNhYmxlO1xuICAgICAgaWYgKCF0aGlzRGlzYWJsZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICB2YXIgdHlwZSA9IFZ1ZVBlcnNpYW5EYXRldGltZVBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVvZih0aGlzRGlzYWJsZSk7XG5cbiAgICAgIHZhciBjaGVja1N0cmluZyA9IGZ1bmN0aW9uIGNoZWNrU3RyaW5nKGZpbHRlciwgc3RyLCBkYXRlKSB7XG4gICAgICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBSZWdFeHApIHJldHVybiBmaWx0ZXIudGVzdChzdHIpO1xuICAgICAgICBpZiAoZmlsdGVyID09PSBzdHIpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGlmIChpdGVtID09PSAnZCcpIHtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gZmlsdGVyLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBsZW5ndGgpID09PSBmaWx0ZXIgfHwgZGF0ZS5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZGQnKSA9PT0gZmlsdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24gY2hlY2soZGF0ZSwgZGF0ZUZvcm1hdHRlZCkge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMTUuYXBwbHlEZXZGbih0aGlzRGlzYWJsZSwgaXRlbSwgZGF0ZUZvcm1hdHRlZCwgZGF0ZS5jbG9uZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpc0Rpc2FibGUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgdmFyIGlpID0gdGhpc0Rpc2FibGUubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBtYXRjaGVzID0gY2hlY2tTdHJpbmcodGhpc0Rpc2FibGVbaV0sIGRhdGVGb3JtYXR0ZWQsIGRhdGUpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHRoaXNEaXNhYmxlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrU3RyaW5nKHRoaXNEaXNhYmxlLCBkYXRlRm9ybWF0dGVkLCBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBmb3JtYXQgPSB0aGlzLnNlbGZGb3JtYXQ7XG5cbiAgICAgIGlmIChpdGVtID09PSAneScpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmNvcmUubW9tZW50KHZhbHVlLCAnallZWVknKTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gJ2QnKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aW1lIGZyb20gZm9ybWF0XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC8oSChIPykpfChoKGg/KSk/KDo/KW0obT8pKDo/KShzKHM/KSk/L2csICcnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoZWNrKHZhbHVlLCB2YWx1ZS5mb3JtYXQoZm9ybWF0KSk7XG4gICAgfSxcbiAgICBnZXRIaWdobGlnaHRzOiBmdW5jdGlvbiBnZXRIaWdobGlnaHRzKGl0ZW0sIHZhbHVlKSB7XG4gICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQ7XG4gICAgICBpZiAoIWhpZ2hsaWdodCB8fCB0eXBlb2YgaGlnaGxpZ2h0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm4ge307XG4gICAgICBpZiAoaXRlbSA9PT0gJ3knKSB2YWx1ZSA9IHRoaXMuY29yZS5tb21lbnQodmFsdWUsICdqWVlZWScpO1xuICAgICAgcmV0dXJuIHRoaXMuYXBwbHlEZXZGbihoaWdobGlnaHQsIGl0ZW0sIHZhbHVlLmZvcm1hdCh0aGlzLnNlbGZGb3JtYXQpLCB2YWx1ZS5jbG9uZSgpKSB8fCB7fTtcbiAgICB9LFxuICAgIGlzTG93ZXI6IGZ1bmN0aW9uIGlzTG93ZXIoZGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZSAmJiBkYXRlIDwgdGhpcy5taW5EYXRlO1xuICAgIH0sXG4gICAgaXNNb3JlOiBmdW5jdGlvbiBpc01vcmUoZGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4RGF0ZSAmJiBkYXRlID4gdGhpcy5tYXhEYXRlO1xuICAgIH0sXG4gICAgY2xlYXJWYWx1ZTogZnVuY3Rpb24gY2xlYXJWYWx1ZSgpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB0aGlzLm91dHB1dCA9IFtdO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLmlzRGF0YUFycmF5ID8gW10gOiAnJyk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmlzRGF0YUFycmF5ID8gW10gOiBudWxsKTtcbiAgICB9LFxuICAgIHNldExvY2FsZTogZnVuY3Rpb24gc2V0TG9jYWxlKGxvY2FsZSkge1xuICAgICAgdGhpcy5jb3JlLmNoYW5nZUxvY2FsZShsb2NhbGUsIHRoaXMubG9jYWxlQ29uZmlnKTtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZGF0ZS5jbG9uZSgpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzLm1hcChmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gZC5jbG9uZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VGltZXpvbmU6IGZ1bmN0aW9uIHNldFRpbWV6b25lKGRhdGUsIG1vZGUpIHtcbiAgICAgIHZhciB0eiA9IHRoaXMudGltZXpvbmU7XG5cbiAgICAgIGlmICh0eikge1xuICAgICAgICB2YXIgciA9IG1vZGUgPT09ICdpbicgPyAxIDogLTE7XG4gICAgICAgIHZhciBtb21lbnQgPSB0aGlzLmNvcmUubW9tZW50QmFzZTtcblxuICAgICAgICBpZiAodHlwZW9mIHR6ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciB0ID0gbW9tZW50KCkudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzJykgKyB0ejtcbiAgICAgICAgICBkYXRlLmFkZChtb21lbnQucGFyc2Vab25lKHQpLnV0Y09mZnNldCgpICogciwgJ21pbnV0ZXMnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdHogPT09ICdib29sZWFuJyAmJiB0eikge1xuICAgICAgICAgIGRhdGUuc3VidHJhY3QobmV3IERhdGUoZGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIHIsICdtaW51dGVzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHR6ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGF0ZSA9IHR6KGRhdGUsIG1vZGUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRlLmNsb25lKCk7XG4gICAgfSxcbiAgICBjb252ZXJ0VG9Mb2NhbGVOdW1iZXI6IGZ1bmN0aW9uIGNvbnZlcnRUb0xvY2FsZU51bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuY29udmVydE51bWJlcnMgJiYgdGhpcy5sb2NhbGUgPT09ICdmYScpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhbHVlKS5yZXBsYWNlKC9cXGQrL2csIGZ1bmN0aW9uIChkaWdpdCkge1xuICAgICAgICAgIHZhciByZXQgPSAnJztcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkaWdpdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGlnaXQuY2hhckNvZGVBdChpKSArIDE3MjgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBnZXRJbnB1dEdyb3VwRWxlbWVudDogZnVuY3Rpb24gZ2V0SW5wdXRHcm91cEVsZW1lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21JbnB1dCA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jdXN0b21JbnB1dCkgOiB0aGlzLiRyZWZzLmlucHV0R3JvdXA7XG4gICAgfSxcbiAgICBvbldpbmRvd1Jlc2l6ZTogZnVuY3Rpb24gb25XaW5kb3dSZXNpemUoKSB7XG4gICAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICB0aGlzLnNldFBsYWNlbWVudCgpO1xuICAgIH0sXG4gICAgb25XaW5kb3dTY3JvbGw6IGZ1bmN0aW9uIG9uV2luZG93U2Nyb2xsKCkge1xuICAgICAgdGhpcy5zZXRQbGFjZW1lbnQoKTtcbiAgICB9LFxuICAgIG9uV2luZG93Q2xpY2s6IGZ1bmN0aW9uIG9uV2luZG93Q2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpczE2ID0gdGhpcztcblxuICAgICAgdmFyIGlucHV0R3JvdXAgPSB0aGlzLmdldElucHV0R3JvdXBFbGVtZW50KCk7XG5cbiAgICAgIGlmICh0aGlzLmlzUG9wb3ZlciAmJiB0aGlzLiRyZWZzLnBpY2tlciAmJiBpbnB1dEdyb3VwKSB7XG4gICAgICAgIHZhciBpc09uUGlja2VyID0gdGhpcy4kcmVmcy5waWNrZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgdmFyIGlzT25JbnB1dCA9IGlucHV0R3JvdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcblxuICAgICAgICBpZiAoIWlzT25QaWNrZXIgJiYgIWlzT25JbnB1dCkge1xuICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZTpcbiAgICAgICAgICAvLyBmaXJzdCByZWFkIHRoZSBpbnB1dCB2YWx1ZVxuICAgICAgICAgIC8vIHRoZW4gcHJvY2VzcyB0aGUgb3V0cHV0XG4gICAgICAgICAgLy8gdGhlbiBjbG9zZSB0aGUgcGlja2VyXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMxNi52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgfSwgdGhpcy5lZGl0YWJsZSA/IDUwMCA6IDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRQbGFjZW1lbnQ6IGZ1bmN0aW9uIHNldFBsYWNlbWVudCgpIHtcbiAgICAgIGlmICghdGhpcy5pc1BvcG92ZXIgfHwgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgdmFyIHBvc2l0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgcGxhY2VtZW50OiAnJyxcbiAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgb2Zmc2V0WTogMFxuICAgICAgfTtcbiAgICAgIGlmIChWdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlb2YodGhpcy5wb3BvdmVyKSA9PT0gJ29iamVjdCcgJiYgdGhpcy5wb3BvdmVyKSBwb3NpdGlvbk9wdGlvbnMgPSB0aGlzLnBvcG92ZXI7ZWxzZSBpZiAodHlwZW9mIHRoaXMucG9wb3ZlciA9PT0gJ3N0cmluZycpIHBvc2l0aW9uT3B0aW9ucy5wbGFjZW1lbnQgPSB0aGlzLnBvcG92ZXI7XG4gICAgICBwb3BvdmVyX3V0aWwuc2V0UGlja2VyUG9zaXRpb24odGhpcy4kcmVmcy5waWNrZXIsIHRoaXMuJHJlZnMuY29udGFpbmVyLCB0aGlzLmdldElucHV0R3JvdXBFbGVtZW50KCksIHBvc2l0aW9uT3B0aW9ucyk7XG4gICAgfVxuICB9LFxuICBpbnN0YWxsOiBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSwgb3B0aW9ucykge1xuICAgIHZhciBjb21wb25lbnQgPSB0aGlzO1xuICAgIG9wdGlvbnMgPSBWdWUudXRpbC5leHRlbmQoe1xuICAgICAgbmFtZTogJ2RhdGEtcGlja2VyJyxcbiAgICAgIHByb3BzOiB7fVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgayBpbiBvcHRpb25zLnByb3BzKSB7XG4gICAgICBpZiAoY29tcG9uZW50LnByb3BzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgIGNvbXBvbmVudC5wcm9wc1trXS5kZWZhdWx0ID0gb3B0aW9ucy5wcm9wc1trXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBWdWUuY29tcG9uZW50KG9wdGlvbnMubmFtZSwgY29tcG9uZW50KTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9WdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19WdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9WdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX1Z1ZVBlcnNpYW5EYXRldGltZVBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBWdWVQZXJzaWFuRGF0ZXRpbWVQaWNrZXIgPSAoVnVlUGVyc2lhbkRhdGV0aW1lUGlja2VyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL0B2dWUvY2xpLXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL2VudHJ5LWxpYi5qc1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGVudHJ5X2xpYiA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFZ1ZVBlcnNpYW5EYXRldGltZVBpY2tlcik7XG5cblxuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KVtcImRlZmF1bHRcIl07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-persian-datetime-picker/dist/vue-persian-datetime-picker.common.js\n"); /***/ }) }]);
Copyright ©2k19 -
Hexid
|
Tex7ure