jt
2024-05-10 4ebe4b1101f40d65ec4ad32ff4f8ba9f7c41b8e0
unpackage/dist/dev/app-plus/app-service.js
@@ -61,7 +61,7 @@
var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ 5);
function toPropertyKey(t) {
  var i = toPrimitive(t, "string");
  return "symbol" == _typeof(i) ? i : String(i);
  return "symbol" == _typeof(i) ? i : i + "";
}
module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
@@ -2391,7 +2391,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _cmdProgress = _interopRequireDefault(__webpack_require__(/*! @/components/cmd-progress/cmd-progress.vue */ 47));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n// import {\n// \tmapState,\n// \tmapMutations,\n// \tmapActions ,\n// } from 'vuex'\nvar _default = {\n  components: {\n    cmdProgress: _cmdProgress.default\n  },\n  data: function data() {\n    //获取全局参数:url-服务器地址\n    var server = uni.getStorageSync('server');\n    var account = uni.getStorageSync('account');\n    var password = uni.getStorageSync('password');\n    var url = this.$store.state.url;\n    var username = this.$store.state.username;\n    var userpwd = this.$store.state.userpwd;\n    var ischecked = false;\n    if (!server) server = url;\n    if (!account) account = username;\n    if (account && password) ischecked = true;\n    // console.log(url);\n    return {\n      login: \"开始登录\",\n      userServer: server,\n      userName: account,\n      userPwd: password,\n      ischecked: ischecked,\n      version: \"1.0.0\",\n      downloadUrl: \"\",\n      //安卓app下载链接\n      percentage: 0,\n      //下载进度\n      showBtns: true\n    };\n  },\n  onShow: function onShow() {\n    this.query(); //版本升级\n  },\n\n  watch: {\n    //监听进度条\n    percentage: function percentage(e) {\n      // console.log(e);\n      if (e >= 100) {\n        this.$refs.promotion.close();\n      }\n    }\n  },\n  // computed: mapState({\n  // \t// 从state中拿到数据 箭头函数可使代码更简练\n  // \thasLogin: state => state.hasLogin,\n  // \tloginprovider: state => state.loginProvider,\n  // \tappinfo:state=>state.appInfo\n  // }),\n  methods: {\n    //查询当前版本号\n    query: function query() {\n      var _this2 = this;\n      plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {\n        __f__(\"log\", wgtinfo, \" at pages/login/index.vue:268\");\n        var version = wgtinfo.version; //客户端版本号\n        // var versionCode = parseInt(wgtinfo.versionCode); //客户端版本号编码\n        _this2.check(version); //检测是否需要更新\n      });\n    },\n    //检测是否需要更新\n    check: function check(version) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var ser, $this, url, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (_this3.userServer) {\n                  _context.next = 3;\n                  break;\n                }\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"未输入网站地址,请重新配置输入!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return _context.abrupt(\"return\");\n              case 3:\n                ser = _this3.userServer.split('/');\n                $this = _this3;\n                if (ser[1] == 'mobox3') {\n                  //判断当前网址是否是mobox3\n                  url = 'http://' + _this3.userServer + '/Program/version.txt'; // console.log(url);\n                  uni.request({\n                    url: url,\n                    // 指定JS文件的完整路径\n                    method: 'GET',\n                    success: function success(res) {\n                      __f__(\"log\", res, \" at pages/login/index.vue:295\");\n                      if (res && res.statusCode === 200) {\n                        //获取当前版本号\n                        var VersionName = res.data; //更新包名称\n                        var versionInfo = res.data.split('_');\n                        var versionNum = versionInfo[2].replace(\".apk\", \"\"); //版本编码\n                        var VersionCode = versionInfo[2].replace(\".apk\", \"\").replace(\".\", \"\").replace(\".\", \"\"); //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:308\");\n                        }\n                      } else {\n                        // if(res.statusCode === 404){\n                        // \tuni.showModal({\n                        // \t\ttitle: \"提示\",\n                        // \t\tcontent: '请求失败,找不到更新包版本文档:'+url,\n                        // \t\tshowCancel: false,\n                        // \t\tconfirmText: \"取消\"\n                        // \t});\n                        // }\n                      }\n                    },\n                    fail: function fail(err) {\n                      // 错误处理逻辑\n                      uni.showModal({\n                        title: \"错误\",\n                        content: '获取' + url + '文件失败:' + err,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  });\n                } else {\n                  dataInfo = {\n                    server: _this3.userServer\n                  };\n                  _this3.$store.dispatch('GetApkVersionInfo', dataInfo).then(function (success) {\n                    __f__(\"log\", success, \" at pages/login/index.vue:336\");\n                    if (success.code == '00000') {\n                      var resp = success.data;\n                      if (resp) {\n                        // const obj = resp.data.filter(item => {\n                        // \treturn item.groupName == 'version'\n                        // })\n                        //获取当前版本号\n                        var VersionName = resp.VersionName; //更新包名称\n                        var VersionCode = resp.VersionCode; //版本编码\n                        var versionNum = resp.Version; //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:353\");\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误\",\n                        content: success.msg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  }).catch(function (ex) {\n                    __f__(\"log\", ex, \" at pages/login/index.vue:365\");\n                    uni.showModal({\n                      title: \"错误\",\n                      content: ex.errMsg ? ex.errMsg : ex.message,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                }\n              case 6:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    compare: function compare(curV, reqV) {\n      var arr1 = curV.toString().split('.');\n      var arr2 = reqV.toString().split('.');\n      //将两个版本号拆成数字\n      var minL = Math.min(arr1.length, arr2.length);\n      var pos = 0; //当前比较位\n      var diff = 0; //当前为位比较是否相等\n      var flag = false;\n      //逐个比较如果当前位相等则继续比较下一位\n      while (pos < minL) {\n        diff = parseInt(arr1[pos]) - parseInt(arr2[pos]);\n        if (diff == 0) {\n          pos++;\n          continue;\n        } else if (diff > 0) {\n          flag = true;\n          break;\n        } else {\n          flag = false;\n          break;\n        }\n      }\n      return flag;\n    },\n    //确认更新\n    sure: function sure() {\n      //关闭按钮\n      this.showBtns = false;\n      var sys = uni.getSystemInfoSync().platform; //检查系统\n      if (sys == \"ios\") {\n        // this.getIosInfo()\n      } else if (sys == \"android\") {\n        this.updateAPP(); // 调用下载方法app内下载\n      }\n    },\n    //取消更新\n    cancel: function cancel() {\n      this.$refs.promotion.close();\n    },\n    //链接苹果商店下载\n    // getIosInfo() {\n    // \tlet appleId = \"你的appid\"\n    // \tplus.runtime.launchApplication({\n    // \t\taction: \"itms-apps://itunes.apple.com/cn/app/id\" + appleId + \"?mt=8\"\n    // \t}, function(e) {\n    // \t\tconsole.log('Open system default browser failed: ' + e.message);\n    // \t});\n    // },\n    //安卓更新\n    updateAPP: function updateAPP() {\n      var _this = this;\n      var url = this.downloadUrl;\n      // 官方API\n      var dtask = plus.downloader.createDownload(url, {}, function (d, status) {\n        //d为下载的文件对象\n        if (status == 200) {\n          //下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径\n          var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);\n          plus.runtime.openFile(d.filename); //选择软件打开文件\n          uni.showToast({\n            icon: 'none',\n            title: '更新成功'\n          });\n          _this.$refs.promotion.close();\n        } else {\n          //下载失败\n          plus.downloader.clear(); //清除下载任务\n          uni.showToast({\n            icon: 'none',\n            title: '更新失败'\n          });\n          _this.showBtns = false;\n        }\n      });\n      //开始下载\n      dtask.start();\n      //监听下载进度\n      dtask.addEventListener('statechanged', function (task) {\n        _this.percentage = parseInt(parseFloat(task.downloadedSize) / parseFloat(task.totalSize) * 100);\n        if (_this.percentage == 100) {\n          _this.$refs.promotion.close();\n        }\n        __f__(\"log\", '下载进度:' + _this.percentage, \" at pages/login/index.vue:458\");\n      });\n    },\n    // ...mapMutations({\n    // \tmutatLogin:'login'\n    // }),\n    // ...mapActions({\n    // \tactionLogin:'login'\n    // }),\n    inputDialogToggle: function inputDialogToggle() {\n      this.$refs.inputDialog.open();\n    },\n    dialogInputConfirm: function dialogInputConfirm(val) {\n      // console.log(val);\n      // uni.showLoading({\n      // \ttitle: '3秒后会关闭'\n      // })\n      // setTimeout(() => {\n      // uni.hideLoading();\n      this.userServer = val;\n      uni.setStorageSync('server', val);\n      // this.value = val\n      // 关闭窗口后,恢复默认内容\n      this.$refs.inputDialog.close();\n      this.query(); //版本升级\n      // }, 3000)\n      // }, 3000)\n    },\n    rememberPwd: function rememberPwd(e) {\n      //记住密码\n      __f__(\"log\", e.target, \" at pages/login/index.vue:488\");\n      uni.setStorageSync('account', '');\n      uni.setStorageSync('password', '');\n      if (e.target.value[0] == '1') {\n        uni.setStorageSync('account', this.userName);\n        uni.setStorageSync('password', this.userPwd);\n      }\n    },\n    // getCookie(key){\n    // \tif(document.cookie.length>0){\n    // \t\tvar start = document.cookie.indexOf(key +'=');\n    // \t\tif(start !== -1){\n    // \t\t\tstart = start+key.length+1;\n    // \t\t\tvar end = document.cookie.indexOf(';',start);\n    // \t\t\tif(end === -1) end=document.cookie.length;\n    // \t\t\treturn document.cookie.substring(start,end);\n    // \t\t}\n    // \t}\n    // \treturn '';\n    // },\n    // setCookie(cName,value,expiredays){\n    // \tvar exdate = new Date();\n    // \texdate.setDate(exdate.getDate(),expiredays)\n    // \tdocument.cookie = cName+'='+ documentURLComponent(value)+\n    // \t((expiredays==null)?'':';expires='+exdate.toGMTString());\n    // },\n    logind: function logind() {\n      var _this4 = this;\n      if (!this.userServer) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入网站地址,请重新配置输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userName) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入用户名,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userPwd) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入密码,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      //检查 \"登录状态/锁屏状态\" 结束\n      var loginInfo = {\n        server: this.userServer,\n        uname: this.userName,\n        pwd: this.userPwd,\n        cname: plus.device.model,\n        type: \"0\"\n      };\n      __f__(\"log\", loginInfo, \" at pages/login/index.vue:551\");\n      this.$data.login = \"loading......\";\n      //登录\n      this.$store.dispatch('login', loginInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/login/index.vue:556\");\n        if (success.code == '00000' || success.err_code == 0) {\n          //登录成功后清空缓存数据\n          _this4.$store.commit(\"areaFunc\", null);\n          _this4.$store.commit(\"classAttrList\", null);\n          _this4.$store.commit(\"classGridStyleInfo\", null);\n          _this4.$store.commit(\"dicValueInfo\", null);\n          _this4.$store.commit(\"subClassAttrList\", null);\n          _this4.$store.commit(\"subClassGridStyleInfo\", null);\n          //设置全局参数:user-用户信息\n          uni.setStorageSync('server', loginInfo.server);\n          uni.setStorageSync('account', loginInfo.uname);\n          uni.setStorageSync('password', loginInfo.pwd);\n          // this.mutatLogin({loginid:success});\n          _this4.$store.commit('login', {\n            loginid: success\n          });\n          uni.navigateTo({\n            url: '../index/index?args=9999999999'\n          });\n          // uni.redirectTo({\n          // \turl:'../index/index?args=9999999999'\n          // });\n          _this4.login = \"开始登录\";\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n          _this4.login = \"开始登录\";\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/login/index.vue:591\");\n        uni.showModal({\n          title: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        _this4.login = \"开始登录\";\n      });\n    }\n  },\n  onLoad: function onLoad() {\n    var _this5 = this;\n    plus.runtime.getProperty(plus.runtime.appid, function (info) {\n      // console.log(info);\n      _this5.$data.version = info.version;\n    });\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbG9naW4vaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJjbWRQcm9ncmVzcyIsImRhdGEiLCJzZXJ2ZXIiLCJhY2NvdW50IiwiaXNjaGVja2VkIiwibG9naW4iLCJ1c2VyU2VydmVyIiwidXNlck5hbWUiLCJ1c2VyUHdkIiwidmVyc2lvbiIsImRvd25sb2FkVXJsIiwicGVyY2VudGFnZSIsInNob3dCdG5zIiwib25TaG93Iiwid2F0Y2giLCJtZXRob2RzIiwicXVlcnkiLCJwbHVzIiwiY2hlY2siLCJ1bmkiLCJ0aXRsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJzZXIiLCIkdGhpcyIsInVybCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJmYWlsIiwiZGF0YUluZm8iLCJjb21wYXJlIiwiZGlmZiIsInBvcyIsImZsYWciLCJzdXJlIiwiY2FuY2VsIiwidXBkYXRlQVBQIiwiaWNvbiIsIl90aGlzIiwiZHRhc2siLCJwYXJzZUZsb2F0IiwiaW5wdXREaWFsb2dUb2dnbGUiLCJkaWFsb2dJbnB1dENvbmZpcm0iLCJyZW1lbWJlclB3ZCIsImxvZ2luZCIsInVuYW1lIiwicHdkIiwiY25hbWUiLCJ0eXBlIiwibG9naW5pZCIsIm9uTG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBOE1BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxlQUNBO0VBQ0FBO0lBQ0FDO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJ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O1VBQ0FDO1VBQ0FDO1VBQ0FDO1FBQ0E7UUFDQTtNQUNBO01BQ0E7UUFDQUo7VUFDQUM7VUFDQUM7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFDQTtRQUNBSjtVQUNBQztVQUNBQztVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQXJCO1FBQ0E0QztRQUNBQztRQUNBQztRQUNBQztNQUNBO01BQ0E7TUFFQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOUI7VUFDQUE7VUFDQUE7VUFDQTtVQUNBO1lBQ0ErQjtVQUNBO1VBQ0EvQjtZQUNBTztVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7UUFFQTtVQUNBUDtZQUNBQztZQUNBQztZQUNBQztZQUNBQztVQUNBO1VBQ0E7UUFDQTtNQUNBO1FBQ0E7UUFDQUo7VUFDQUM7VUFDQUM7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7SUFDQTtFQUNBO0VBQ0E0QjtJQUFBO0lBQ0FsQztNQUNBO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuXHRpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0XHRmb250LXNpemU6IDEycnB4O1xyXG5cdH1cclxuXHJcblx0I2hlYWRyIHtcclxuXHRcdGJhY2tncm91bmQ6ICM0MzQzNDM7XHJcblx0XHQvKiB3aWR0aDogMzc1cHg7ICovXHJcblx0XHRoZWlnaHQ6IDI1MHJweDtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICM0MzhFQjk7XHJcblx0XHQvKiBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2xvZ2luL3Jvb3QucG5nKSAhaW1wb3J0YW50O1xyXG5cdFx0YmFja2dyb3VuZC1zaXplOiBjb3ZlciAhaW1wb3J0YW50OyBcclxuXHRcdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQgIWltcG9ydGFudDsgKi9cclxuXHR9XHJcblxyXG5cdC5TZXRTZXJ2ZXIge1xyXG5cdFx0ZmxvYXQ6IGxlZnQ7XHJcblx0XHRtYXJnaW4tbGVmdDogMjBycHg7XHJcblx0fVxyXG5cclxuXHQuY2hlY2tfcmVtZW1iZXJQd2Qge1xyXG5cdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogMjBycHg7XHJcblx0fVxyXG5cclxuXHQubG9nbyB7XHJcblx0XHRoZWlnaHQ6IDE4MHJweDtcclxuXHRcdHdpZHRoOiAxODBycHg7XHJcblx0XHRtYXJnaW4tdG9wOiAxNzBycHg7XHJcblx0fVxyXG5cclxuXHQubG9nb19pbnB1dCB7XHJcblx0XHRoZWlnaHQ6IDQwcnB4O1xyXG5cdFx0d2lkdGg6IDQwcnB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDQwcnB4O1xyXG5cdH1cclxuXHJcblx0LmxvZ29faWNvbiB7XHJcblx0XHRoZWlnaHQ6IDUwcnB4O1xyXG5cdFx0d2lkdGg6IDUwcnB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDE1cnB4O1xyXG5cdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0fVxyXG5cclxuXHQubXVpLWNvbnRlbnQge1xyXG5cdFx0aGVpZ2h0OiAxMDAlO1xyXG5cdFx0cGFkZGluZy10b3A6IDE0MHJweDtcclxuXHRcdGJhY2tncm91bmQ6ICNGRkZGRkY7XHJcblx0XHR6LWluZGV4OiAxO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCAubGFfaWNvbiB7XHJcblx0XHR3aWR0aDogMTAwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0Zm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdHBhZGRpbmc6IDdweCAxM3B4O1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdyB7XHJcblx0XHRoZWlnaHQ6IDg1cnB4O1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0Y2xlYXI6IGxlZnQ7XHJcblx0XHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1yb3c6Zmlyc3QtY2hpbGQge1xyXG5cdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNjOGM3Y2M7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LXJvdzpsYXN0LWNoaWxkIHtcclxuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYzhjN2NjO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdzpsYXN0LWNoaWxkOmFmdGVyIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93OmFmdGVyIHtcclxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdHJpZ2h0OiAwO1xyXG5cdFx0Ym90dG9tOiAwO1xyXG5cdFx0bGVmdDogMTVweDtcclxuXHRcdGhlaWdodDogMXB4O1xyXG5cdFx0Y29udGVudDogJyc7XHJcblx0XHR0cmFuc2Zvcm06IHNjYWxlWSguNSk7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjYzhjN2NjO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1yb3cgaW5wdXQge1xyXG5cdFx0Zm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcclxuXHRcdGZvbnQtc2l6ZTogMTVweDtcclxuXHRcdHdpZHRoOiA0ODBycHg7XHJcblx0XHQvKiBmbG9hdDogcmlnaHQ7ICovXHJcblx0XHRtYXJnaW4tYm90dG9tOiAwO1xyXG5cdFx0cGFkZGluZy1sZWZ0OiAyMHJweDtcclxuXHRcdC8qIHBhZGRpbmctcmlnaHQ6IDEwcnB4OyAqL1xyXG5cdFx0LyogbGluZS1oZWlnaHQ6IDMwcnB4OyAqL1xyXG5cdFx0aGVpZ2h0OiA4NXJweDtcclxuXHRcdC8qIHBhZGRpbmc6IDdweCA0MHB4IDdweCAwcHg7ICovXHJcblx0XHQtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xyXG5cdFx0LyogYm9yZGVyOiAwOyAqL1xyXG5cdFx0LyogYm9yZGVyLXJhZGl1czogMDsgKi9cclxuXHRcdGJveC1zaGFkb3c6IG5vbmU7XHJcblx0XHRvdXRsaW5lOiAwO1xyXG5cdFx0YmFja2dyb3VuZDogMCAwO1xyXG5cdFx0LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCBsYWJlbC5tdWktbmF2aWdhdGUtcmlnaHQge1xyXG5cdFx0Zm9udC1zaXplOiAyNXB4O1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0cGFkZGluZzogMDtcclxuXHRcdHdpZHRoOiA4MHJweDtcclxuXHRcdG1hcmdpbi1yaWdodDogNXJweDtcclxuXHRcdG1hcmdpbi10b3A6IC04OHJweDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblxyXG5cdGJ1dHRvbi5idG5fbG9naW4ge1xyXG5cdFx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRiYWNrZ3JvdW5kOiAjMjdBNkUxO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Y29sb3I6ICNmZmY7XHJcblx0fVxyXG48L3N0eWxlPlxyXG5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cIlwiIHN0eWxlPVwid2lkdGg6IDEwMHZ3O2hlaWdodDogNjR2aDtcIj5cclxuXHRcdDxkaXYgaWQ9XCJoZWFkclwiIGNsYXNzPVwibXVpLWJhciBtdWktYmFyLW5hdlwiPlxyXG5cdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL21vYm94X2xvZ18yMDAucG5nXCI+PC9pbWFnZT5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cIm11aS1jb250ZW50XCI+XHJcblx0XHRcdDxmb3JtIGlkPSdsb2dpbi1mb3JtJyBjbGFzcz1cIm11aS1pbnB1dC1ncm91cFwiPlxyXG5cdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cIlNldFNlcnZlclwiIEBjbGljaz1cImlucHV0RGlhbG9nVG9nZ2xlXCI+6YWN572uPC9hPlxyXG5cdFx0XHRcdDwhLS0gPGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj48aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3N2cl8zMC5wbmdcIj48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm11aS1pbnB1dFwiIHYtbW9kZWw9XCJ1c2VyU2VydmVyXCIgcGxhY2Vob2xkZXI9XCLmnI3liqHlmajlnLDlnYBcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIm11aS1uYXZpZ2F0ZS1yaWdodFwiIGlkPVwic2Vyc2VsXCI+PGltYWdlIGNsYXNzPVwibG9nb19pY29uXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3NlbF9sZWZ0LnBuZ1wiID48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0PC9kaXY+IC0tPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtdWktaW5wdXQtcm93XCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYV9pY29uXCI+XHJcblx0XHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29faW5wdXRcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vcGVyc29uXzMwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJtdWktaW5wdXRcIiB2LW1vZGVsPVwidXNlck5hbWVcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpei0puWPt1wiPlxyXG5cdFx0XHRcdFx0PCEtLSA8bGFiZWwgY2xhc3M9XCJtdWktbmF2aWdhdGUtcmlnaHRcIiBpZD1cIm5hbXNlbFwiPjxpbWFnZSBjbGFzcz1cImxvZ29faWNvblwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi91c2VyLXBob3RvLnBuZzwvaW1hZ2U+PC9sYWJlbD4gLS0+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj5cclxuXHRcdFx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb19pbnB1dFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9sb2NrXzMwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwibXVpLWlucHV0XCIgdi1tb2RlbD1cInVzZXJQd2RcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWvhueggVwiPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgQGNoYW5nZT1cInJlbWVtYmVyUHdkXCI+XHJcblx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveCB2YWx1ZT1cIjFcIiA6Y2hlY2tlZD1cImlzY2hlY2tlZFwiIC8+XHJcblx0XHRcdFx0XHRcdDx0ZXh0PuiusOS9j+WvhueggTwvdGV4dD5cclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0PC9mb3JtPlxyXG5cdFx0XHQ8YnV0dG9uIGlkPSdsb2dpbicgdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwibG9naW5kXCIgY2xhc3M9XCJidG5fbG9naW5cIj57e2xvZ2lufX08L2J1dHRvbj5cclxuXHRcdFx0PHAgc3R5bGU9XCJmbG9hdDpyaWdodDsgbWFyZ2luOiAxMHB4IDEwcHg7Y29sb3I6I2M4YzdjY1wiPlxyXG5cdFx0XHRcdDxzcGFuPueJiOacrOWPt++8mjwvc3Bhbj5cclxuXHRcdFx0XHQ8c3Bhbj57e3ZlcnNpb259fTwvc3Bhbj5cclxuXHRcdFx0PC9wPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiXCJcclxuXHRcdFx0XHRzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtiYWNrZ3JvdW5kOiB3aGl0ZTtib3JkZXItdG9wOiAwcHggc29saWQgI0MwQzBDMDtjb2xvcjogIzdjZDBmODtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO3dpZHRoOiAxMDAlO2hlaWdodDogMjRweDtwYWRkaW5nLXRvcDozcHg7Zm9udC1zaXplOiAxMXB4O1wiPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PHZpZXc+XHJcblx0XHRcdDwhLS0g6L6T5YWl5qGG56S65L6LIC0tPlxyXG5cdFx0XHQ8dW5pLXBvcHVwIHJlZj1cImlucHV0RGlhbG9nXCIgdHlwZT1cImRpYWxvZ1wiPlxyXG5cdFx0XHRcdDx1bmktcG9wdXAtZGlhbG9nIHJlZj1cImlucHV0Q2xvc2VcIiBtb2RlPVwiaW5wdXRcIiB0aXRsZT1cIuiuvue9rlwiIDp2YWx1ZT1cInVzZXJTZXJ2ZXJcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWGheWuuVwiXHJcblx0XHRcdFx0XHRAY29uZmlybT1cImRpYWxvZ0lucHV0Q29uZmlybVwiPjwvdW5pLXBvcHVwLWRpYWxvZz5cclxuXHRcdFx0PC91bmktcG9wdXA+XHJcblx0XHRcdDwhLS0g54mI5pys5Y2H57qn5by556qX5byA5aeLIC0tPlxyXG5cdFx0XHQ8dW5pLXBvcHVwIHJlZj1cInByb21vdGlvblwiIHR5cGU9XCJjZW50ZXJcIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInByb21vdGlvblwiIHN0eWxlPVwid2lkdGg6IDcwMHJweDtwYWRkaW5nOjIwcnB4IDQwcnB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTtmb250LXNpemU6IDM2cnB4O1wiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJvcGVyYXRlc1wiIHYtaWY9XCJzaG93QnRucz09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtwYWRkaW5nLXRvcDoyMHJweDtwYWRkaW5nLWJvdHRvbTogNDBycHg7XCI+XHJcblx0XHRcdFx0XHRcdFx057O757uf5pyJ5paw54mI5pys77yM5piv5ZCm6ZyA6KaB5pu05pawXHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHRleHQgQGNsaWNrPVwiY2FuY2VsXCJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztjb2xvcjogIzdjZDBmODt3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+5Y+W5raIPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHQ8dGV4dCBAY2xpY2s9XCJzdXJlXCJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztjb2xvcjogIzdjZDBmODt3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+56Gu6K6kPC90ZXh0PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJvcGVyYXRlc1wiIHYtZWxzZT5cclxuXHRcdFx0XHRcdFx0PGNtZC1wcm9ncmVzcyA6cGVyY2VudD1cInBlcmNlbnRhZ2VcIiBzdHJva2UtY29sb3I9XCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNlZjMyZDksICM4OWZmZmQpXCI+XHJcblx0XHRcdFx0XHRcdDwvY21kLXByb2dyZXNzPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC91bmktcG9wdXA+XHJcblx0XHRcdDwhLS0g54mI5pys5Y2H57qn5by556qX57uT5p2fIC0tPlxyXG5cdFx0PC92aWV3PlxyXG5cclxuXHQ8L3ZpZXc+XHJcblxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuXHRpbXBvcnQgY21kUHJvZ3Jlc3MgZnJvbSBcIkAvY29tcG9uZW50cy9jbWQtcHJvZ3Jlc3MvY21kLXByb2dyZXNzLnZ1ZVwiXHJcblx0Ly8gaW1wb3J0IHtcclxuXHQvLyBcdG1hcFN0YXRlLFxyXG5cdC8vIFx0bWFwTXV0YXRpb25zLFxyXG5cdC8vIFx0bWFwQWN0aW9ucyAsXHJcblx0Ly8gfSBmcm9tICd2dWV4J1xyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdGNvbXBvbmVudHM6IHtcclxuXHRcdFx0Y21kUHJvZ3Jlc3NcclxuXHRcdH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHQvL+iOt+WPluWFqOWxgOWPguaVsO+8mnVybC3mnI3liqHlmajlnLDlnYBcclxuXHRcdFx0dmFyIHNlcnZlciA9IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyk7XHJcblx0XHRcdHZhciBhY2NvdW50ID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50Jyk7XHJcblx0XHRcdHZhciBwYXNzd29yZCA9IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKTtcclxuXHRcdFx0dmFyIHVybCA9IHRoaXMuJHN0b3JlLnN0YXRlLnVybDtcclxuXHRcdFx0dmFyIHVzZXJuYW1lID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcm5hbWU7XHJcblx0XHRcdHZhciB1c2VycHdkID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcnB3ZDtcclxuXHRcdFx0dmFyIGlzY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0XHRpZiAoIXNlcnZlcilcclxuXHRcdFx0XHRzZXJ2ZXIgPSB1cmw7XHJcblx0XHRcdGlmICghYWNjb3VudClcclxuXHRcdFx0XHRhY2NvdW50ID0gdXNlcm5hbWU7XHJcblx0XHRcdGlmIChhY2NvdW50ICYmIHBhc3N3b3JkKVxyXG5cdFx0XHRcdGlzY2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHVybCk7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0bG9naW46IFwi5byA5aeL55m75b2VXCIsXHJcblx0XHRcdFx0dXNlclNlcnZlcjogc2VydmVyLFxyXG5cdFx0XHRcdHVzZXJOYW1lOiBhY2NvdW50LFxyXG5cdFx0XHRcdHVzZXJQd2Q6IHBhc3N3b3JkLFxyXG5cdFx0XHRcdGlzY2hlY2tlZDogaXNjaGVja2VkLFxyXG5cdFx0XHRcdHZlcnNpb246IFwiMS4wLjBcIixcclxuXHRcdFx0XHRkb3dubG9hZFVybDogXCJcIiwgLy/lronljZNhcHDkuIvovb3pk77mjqVcclxuXHRcdFx0XHRwZXJjZW50YWdlOiAwLCAvL+S4i+i9vei/m+W6plxyXG5cdFx0XHRcdHNob3dCdG5zOiB0cnVlLFxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25TaG93KCkge1xyXG5cdFx0XHR0aGlzLnF1ZXJ5KCk7IC8v54mI5pys5Y2H57qnXHJcblx0XHR9LFxyXG5cdFx0d2F0Y2g6IHtcclxuXHRcdFx0Ly/nm5HlkKzov5vluqbmnaFcclxuXHRcdFx0cGVyY2VudGFnZShlKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHRcdFx0aWYgKGUgPj0gMTAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRyZWZzLnByb21vdGlvbi5jbG9zZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8vIGNvbXB1dGVkOiBtYXBTdGF0ZSh7XHJcblx0XHQvLyBcdC8vIOS7jnN0YXRl5Lit5ou/5Yiw5pWw5o2uIOeureWktOWHveaVsOWPr+S9v+S7o+eggeabtOeugOe7g1xyXG5cdFx0Ly8gXHRoYXNMb2dpbjogc3RhdGUgPT4gc3RhdGUuaGFzTG9naW4sXHJcblx0XHQvLyBcdGxvZ2lucHJvdmlkZXI6IHN0YXRlID0+IHN0YXRlLmxvZ2luUHJvdmlkZXIsXHJcblx0XHQvLyBcdGFwcGluZm86c3RhdGU9PnN0YXRlLmFwcEluZm9cclxuXHRcdC8vIH0pLFxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHQvL+afpeivouW9k+WJjeeJiOacrOWPt1xyXG5cdFx0XHRxdWVyeSgpIHtcclxuXHRcdFx0XHQvLyAjaWZkZWYgQVBQLVBMVVNcclxuXHRcdFx0XHRwbHVzLnJ1bnRpbWUuZ2V0UHJvcGVydHkocGx1cy5ydW50aW1lLmFwcGlkLCAod2d0aW5mbykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2cod2d0aW5mbyk7XHJcblx0XHRcdFx0XHR2YXIgdmVyc2lvbiA9IHdndGluZm8udmVyc2lvbjsgLy/lrqLmiLfnq6/niYjmnKzlj7dcclxuXHRcdFx0XHRcdC8vIHZhciB2ZXJzaW9uQ29kZSA9IHBhcnNlSW50KHdndGluZm8udmVyc2lvbkNvZGUpOyAvL+WuouaIt+err+eJiOacrOWPt+e8lueggVxyXG5cdFx0XHRcdFx0dGhpcy5jaGVjayh2ZXJzaW9uKSAvL+ajgOa1i+aYr+WQpumcgOimgeabtOaWsFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0Ly8jZW5kaWZcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/mo4DmtYvmmK/lkKbpnIDopoHmm7TmlrBcclxuXHRcdFx0YXN5bmMgY2hlY2sodmVyc2lvbikge1xyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyU2VydmVyKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl572R56uZ5Zyw5Z2A77yM6K+36YeN5paw6YWN572u6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBzZXIgPSB0aGlzLnVzZXJTZXJ2ZXIuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdGlmKHNlclsxXSA9PSAnbW9ib3gzJyl7IC8v5Yik5pat5b2T5YmN572R5Z2A5piv5ZCm5pivbW9ib3gzXHJcblx0XHRcdFx0XHR2YXIgdXJsID0gJ2h0dHA6Ly8nK3RoaXMudXNlclNlcnZlcisnL1Byb2dyYW0vdmVyc2lvbi50eHQnO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codXJsKTtcclxuXHRcdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdFx0dXJsOiB1cmwsIC8vIOaMh+WumkpT5paH5Lu255qE5a6M5pW06Lev5b6EXHJcblx0XHRcdFx0XHRcdG1ldGhvZDogJ0dFVCcsXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3MocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzICYmIHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8v6I635Y+W5b2T5YmN54mI5pys5Y+3XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgVmVyc2lvbk5hbWUgPSByZXMuZGF0YTsgLy/mm7TmlrDljIXlkI3np7BcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2ZXJzaW9uSW5mbyA9IHJlcy5kYXRhLnNwbGl0KCdfJyk7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmVyc2lvbk51bSA9IHZlcnNpb25JbmZvWzJdLnJlcGxhY2UoXCIuYXBrXCIsIFwiXCIpOyAvL+eJiOacrOe8lueggVxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIFZlcnNpb25Db2RlID0gdmVyc2lvbkluZm9bMl0ucmVwbGFjZShcIi5hcGtcIiwgXCJcIikucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIi5cIiwgXCJcIik7IC8v5pyN5Yqh56uv54mI5pys5Y+3XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRvd25sb2FkVXJsID0gcmVzcC5QZGFVcmwrXCIvXCIrVmVyc2lvbk5hbWU7IC8vYXBw5LiL6L296ZO+5o6lXHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kb3dubG9hZFVybCA9IFwiaHR0cDovL1wiICsgJHRoaXMudXNlclNlcnZlciArIFwiL1Byb2dyYW0vXCIgKyBWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqV0aGlzLlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGlzdmVyID0gJHRoaXMuY29tcGFyZSh2ZXJzaW9uTnVtLHZlcnNpb24pO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzdmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRyZWZzLnByb21vdGlvbi5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5bey5piv5pyA5paw54mI5pysJylcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYocmVzLnN0YXR1c0NvZGUgPT09IDQwNCl7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdGNvbnRlbnQ6ICfor7fmsYLlpLHotKXvvIzmib7kuI3liLDmm7TmlrDljIXniYjmnKzmlofmoaPvvJonK3VybCxcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGZhaWwoZXJyKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8g6ZSZ6K+v5aSE55CG6YC76L6RXHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfojrflj5YnK3VybCsn5paH5Lu25aSx6LSl77yaJysgZXJyLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0c2VydmVyOiB0aGlzLnVzZXJTZXJ2ZXJcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnR2V0QXBrVmVyc2lvbkluZm8nLCBkYXRhSW5mbykudGhlbihzdWNjZXNzID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGUgPT0gJzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByZXNwID0gc3VjY2Vzcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXNwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zdCBvYmogPSByZXNwLmRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRyZXR1cm4gaXRlbS5ncm91cE5hbWUgPT0gJ3ZlcnNpb24nXHJcblx0XHRcdFx0XHRcdFx0XHQvLyB9KVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly/ojrflj5blvZPliY3niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IFZlcnNpb25OYW1lID0gcmVzcC5WZXJzaW9uTmFtZTsgLy/mm7TmlrDljIXlkI3np7BcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IFZlcnNpb25Db2RlID0gcmVzcC5WZXJzaW9uQ29kZTsgLy/niYjmnKznvJbnoIFcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZlcnNpb25OdW0gPSByZXNwLlZlcnNpb247IC8v5pyN5Yqh56uv54mI5pys5Y+3XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRvd25sb2FkVXJsID0gcmVzcC5QZGFVcmwrXCIvXCIrVmVyc2lvbk5hbWU7IC8vYXBw5LiL6L296ZO+5o6lXHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kb3dubG9hZFVybCA9IFwiaHR0cDovL1wiICsgJHRoaXMudXNlclNlcnZlciArIFwiL1Byb2dyYW0vXCIgKyBWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqV0aGlzLlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGlzdmVyID0gJHRoaXMuY29tcGFyZSh2ZXJzaW9uTnVtLHZlcnNpb24pO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzdmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRyZWZzLnByb21vdGlvbi5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5bey5piv5pyA5paw54mI5pysJylcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnID8gZXguZXJyTXNnIDogZXgubWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y29tcGFyZShjdXJWLCByZXFWKSB7XHJcblx0XHRcdFx0dmFyIGFycjEgPSBjdXJWLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcclxuXHRcdFx0ICAgIHZhciBhcnIyID0gcmVxVi50b1N0cmluZygpLnNwbGl0KCcuJyk7XHJcblx0XHRcdCAgICAvL+WwhuS4pOS4queJiOacrOWPt+aLhuaIkOaVsOWtl1xyXG5cdFx0XHQgICAgdmFyIG1pbkwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xyXG5cdFx0XHQgICAgdmFyIHBvcyA9IDA7IC8v5b2T5YmN5q+U6L6D5L2NXHJcblx0XHRcdCAgICB2YXIgZGlmZiA9IDA7IC8v5b2T5YmN5Li65L2N5q+U6L6D5piv5ZCm55u4562JXHJcblx0XHRcdCAgICB2YXIgZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHQgICAgLy/pgJDkuKrmr5TovoPlpoLmnpzlvZPliY3kvY3nm7jnrYnliJnnu6fnu63mr5TovoPkuIvkuIDkvY1cclxuXHRcdFx0ICAgIHdoaWxlIChwb3MgPCBtaW5MKSB7XHJcblx0XHRcdCAgICAgICAgZGlmZiA9IHBhcnNlSW50KGFycjFbcG9zXSkgLSBwYXJzZUludChhcnIyW3Bvc10pO1xyXG5cdFx0XHQgICAgICAgIGlmIChkaWZmID09IDApIHtcclxuXHRcdFx0ICAgICAgICAgICAgcG9zKys7XHJcblx0XHRcdCAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDApIHtcclxuXHRcdFx0ICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcblx0XHRcdCAgICAgICAgICAgIGJyZWFrO1xyXG5cdFx0XHQgICAgICAgIH0gZWxzZSB7XHJcblx0XHRcdCAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuXHRcdFx0ICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHQgICAgcmV0dXJuIGZsYWc7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v56Gu6K6k5pu05pawXHJcblx0XHRcdHN1cmUoKSB7XHJcblx0XHRcdFx0Ly/lhbPpl63mjInpkq5cclxuXHRcdFx0XHR0aGlzLnNob3dCdG5zID0gZmFsc2U7XHJcblx0XHRcdFx0bGV0IHN5cyA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLnBsYXRmb3JtIC8v5qOA5p+l57O757ufXHJcblx0XHRcdFx0aWYgKHN5cyA9PSBcImlvc1wiKSB7XHJcblx0XHRcdFx0XHQvLyB0aGlzLmdldElvc0luZm8oKVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3lzID09IFwiYW5kcm9pZFwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFQUCgpIC8vIOiwg+eUqOS4i+i9veaWueazlWFwcOWGheS4i+i9vVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/lj5bmtojmm7TmlrBcclxuXHRcdFx0Y2FuY2VsKCkge1xyXG5cdFx0XHRcdHRoaXMuJHJlZnMucHJvbW90aW9uLmNsb3NlKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v6ZO+5o6l6Iu55p6c5ZWG5bqX5LiL6L29XHJcblx0XHRcdC8vIGdldElvc0luZm8oKSB7XHJcblx0XHRcdC8vIFx0bGV0IGFwcGxlSWQgPSBcIuS9oOeahGFwcGlkXCJcclxuXHRcdFx0Ly8gXHRwbHVzLnJ1bnRpbWUubGF1bmNoQXBwbGljYXRpb24oe1xyXG5cdFx0XHQvLyBcdFx0YWN0aW9uOiBcIml0bXMtYXBwczovL2l0dW5lcy5hcHBsZS5jb20vY24vYXBwL2lkXCIgKyBhcHBsZUlkICsgXCI/bXQ9OFwiXHJcblx0XHRcdC8vIFx0fSwgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHQvLyBcdFx0Y29uc29sZS5sb2coJ09wZW4gc3lzdGVtIGRlZmF1bHQgYnJvd3NlciBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UpO1xyXG5cdFx0XHQvLyBcdH0pO1xyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHQvL+WuieWNk+abtOaWsFxyXG5cdFx0XHR1cGRhdGVBUFAoKSB7XHJcblx0XHRcdFx0bGV0IF90aGlzID0gdGhpcztcclxuXHRcdFx0XHRsZXQgdXJsID0gdGhpcy5kb3dubG9hZFVybDtcclxuXHRcdFx0XHQvLyDlrpjmlrlBUElcclxuXHRcdFx0XHR2YXIgZHRhc2sgPSBwbHVzLmRvd25sb2FkZXIuY3JlYXRlRG93bmxvYWQodXJsLCB7fSwgZnVuY3Rpb24oZCwgc3RhdHVzKSB7XHJcblx0XHRcdFx0XHQvL2TkuLrkuIvovb3nmoTmlofku7blr7nosaFcclxuXHRcdFx0XHRcdGlmIChzdGF0dXMgPT0gMjAwKSB7XHJcblx0XHRcdFx0XHRcdC8v5LiL6L295oiQ5YqfLGQuZmlsZW5hbWXmmK/mlofku7blnKjkv53lrZjlnKjmnKzlnLDnmoTnm7jlr7not6/lvoTvvIzkvb/nlKjkuIvpnaLnmoRBUEnlj6/ovazkuLrlubPlj7Dnu53lr7not6/lvoRcclxuXHRcdFx0XHRcdFx0dmFyIGZpbGVTYXZlVXJsID0gcGx1cy5pby5jb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMKGQuZmlsZW5hbWUpO1xyXG5cdFx0XHRcdFx0XHRwbHVzLnJ1bnRpbWUub3BlbkZpbGUoZC5maWxlbmFtZSk7IC8v6YCJ5oup6L2v5Lu25omT5byA5paH5Lu2XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+abtOaWsOaIkOWKnydcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdF90aGlzLiRyZWZzLnByb21vdGlvbi5jbG9zZSgpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly/kuIvovb3lpLHotKVcclxuXHRcdFx0XHRcdFx0cGx1cy5kb3dubG9hZGVyLmNsZWFyKCk7IC8v5riF6Zmk5LiL6L295Lu75YqhXHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+abtOaWsOWksei0pSdcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdF90aGlzLnNob3dCdG5zID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQvL+W8gOWni+S4i+i9vVxyXG5cdFx0XHRcdGR0YXNrLnN0YXJ0KCk7XHJcblx0XHRcdFx0Ly/nm5HlkKzkuIvovb3ov5vluqZcclxuXHRcdFx0XHRkdGFzay5hZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZWQnLCBmdW5jdGlvbih0YXNrKSB7XHJcblx0XHRcdFx0XHRfdGhpcy5wZXJjZW50YWdlID0gcGFyc2VJbnQoXHJcblx0XHRcdFx0XHRcdChwYXJzZUZsb2F0KHRhc2suZG93bmxvYWRlZFNpemUpIC8gcGFyc2VGbG9hdCh0YXNrLnRvdGFsU2l6ZSkpICogMTAwKTtcclxuXHRcdFx0XHRcdGlmIChfdGhpcy5wZXJjZW50YWdlID09IDEwMCkge1xyXG5cdFx0XHRcdFx0XHRfdGhpcy4kcmVmcy5wcm9tb3Rpb24uY2xvc2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCfkuIvovb3ov5vluqbvvJonICsgX3RoaXMucGVyY2VudGFnZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIC4uLm1hcE11dGF0aW9ucyh7XHJcblx0XHRcdC8vIFx0bXV0YXRMb2dpbjonbG9naW4nXHJcblx0XHRcdC8vIH0pLFxyXG5cdFx0XHQvLyAuLi5tYXBBY3Rpb25zKHtcclxuXHRcdFx0Ly8gXHRhY3Rpb25Mb2dpbjonbG9naW4nXHJcblx0XHRcdC8vIH0pLFxyXG5cdFx0XHRpbnB1dERpYWxvZ1RvZ2dsZSgpIHtcclxuXHRcdFx0XHR0aGlzLiRyZWZzLmlucHV0RGlhbG9nLm9wZW4oKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkaWFsb2dJbnB1dENvbmZpcm0odmFsKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsKTtcclxuXHRcdFx0XHQvLyB1bmkuc2hvd0xvYWRpbmcoe1xyXG5cdFx0XHRcdC8vIFx0dGl0bGU6ICcz56eS5ZCO5Lya5YWz6ZetJ1xyXG5cdFx0XHRcdC8vIH0pXHJcblx0XHRcdFx0Ly8gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Ly8gdW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0dGhpcy51c2VyU2VydmVyID0gdmFsO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnc2VydmVyJywgdmFsKTtcclxuXHRcdFx0XHQvLyB0aGlzLnZhbHVlID0gdmFsXHJcblx0XHRcdFx0Ly8g5YWz6Zet56qX5Y+j5ZCO77yM5oGi5aSN6buY6K6k5YaF5a65XHJcblx0XHRcdFx0dGhpcy4kcmVmcy5pbnB1dERpYWxvZy5jbG9zZSgpO1xyXG5cclxuXHRcdFx0XHR0aGlzLnF1ZXJ5KCk7IC8v54mI5pys5Y2H57qnXHJcblx0XHRcdFx0Ly8gfSwgMzAwMClcclxuXHRcdFx0XHQvLyB9LCAzMDAwKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZW1lbWJlclB3ZChlKSB7IC8v6K6w5L2P5a+G56CBXHJcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnYWNjb3VudCcsICcnKTtcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywgJycpO1xyXG5cdFx0XHRcdGlmIChlLnRhcmdldC52YWx1ZVswXSA9PSAnMScpIHtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnYWNjb3VudCcsIHRoaXMudXNlck5hbWUpO1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcsIHRoaXMudXNlclB3ZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBnZXRDb29raWUoa2V5KXtcclxuXHRcdFx0Ly8gXHRpZihkb2N1bWVudC5jb29raWUubGVuZ3RoPjApe1xyXG5cdFx0XHQvLyBcdFx0dmFyIHN0YXJ0ID0gZG9jdW1lbnQuY29va2llLmluZGV4T2Yoa2V5ICsnPScpO1xyXG5cdFx0XHQvLyBcdFx0aWYoc3RhcnQgIT09IC0xKXtcclxuXHRcdFx0Ly8gXHRcdFx0c3RhcnQgPSBzdGFydCtrZXkubGVuZ3RoKzE7XHJcblx0XHRcdC8vIFx0XHRcdHZhciBlbmQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZignOycsc3RhcnQpO1xyXG5cdFx0XHQvLyBcdFx0XHRpZihlbmQgPT09IC0xKSBlbmQ9ZG9jdW1lbnQuY29va2llLmxlbmd0aDtcclxuXHRcdFx0Ly8gXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoc3RhcnQsZW5kKTtcclxuXHRcdFx0Ly8gXHRcdH1cclxuXHRcdFx0Ly8gXHR9XHJcblx0XHRcdC8vIFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHQvLyBzZXRDb29raWUoY05hbWUsdmFsdWUsZXhwaXJlZGF5cyl7XHJcblx0XHRcdC8vIFx0dmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdC8vIFx0ZXhkYXRlLnNldERhdGUoZXhkYXRlLmdldERhdGUoKSxleHBpcmVkYXlzKVxyXG5cdFx0XHQvLyBcdGRvY3VtZW50LmNvb2tpZSA9IGNOYW1lKyc9JysgZG9jdW1lbnRVUkxDb21wb25lbnQodmFsdWUpK1xyXG5cdFx0XHQvLyBcdCgoZXhwaXJlZGF5cz09bnVsbCk/Jyc6JztleHBpcmVzPScrZXhkYXRlLnRvR01UU3RyaW5nKCkpO1xyXG5cclxuXHRcdFx0Ly8gfSxcclxuXHRcdFx0bG9naW5kKCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyU2VydmVyKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl572R56uZ5Zyw5Z2A77yM6K+36YeN5paw6YWN572u6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyTmFtZSkge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBcIuacqui+k+WFpeeUqOaIt+WQje+8jOivt+mHjeaWsOi+k+WFpe+8gVwiLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIXRoaXMudXNlclB3ZCkge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBcIuacqui+k+WFpeWvhuegge+8jOivt+mHjeaWsOi+k+WFpe+8gVwiLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL+ajgOafpSBcIueZu+W9leeKtuaAgS/plIHlsY/nirbmgIFcIiDnu5PmnZ9cclxuXHRcdFx0XHR2YXIgbG9naW5JbmZvID0ge1xyXG5cdFx0XHRcdFx0c2VydmVyOiB0aGlzLnVzZXJTZXJ2ZXIsXHJcblx0XHRcdFx0XHR1bmFtZTogdGhpcy51c2VyTmFtZSxcclxuXHRcdFx0XHRcdHB3ZDogdGhpcy51c2VyUHdkLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGxvZ2luSW5mbyk7XHJcblxyXG5cdFx0XHRcdHRoaXMuJGRhdGEubG9naW4gPSBcImxvYWRpbmcuLi4uLi5cIjtcclxuXHRcdFx0XHQvL+eZu+W9lVxyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdsb2dpbicsIGxvZ2luSW5mbykudGhlbihzdWNjZXNzID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnIHx8IHN1Y2Nlc3MuZXJyX2NvZGU9PTApIHtcclxuXHRcdFx0XHRcdFx0Ly/nmbvlvZXmiJDlip/lkI7muIXnqbrnvJPlrZjmlbDmja5cclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiYXJlYUZ1bmNcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzQXR0ckxpc3RcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzR3JpZFN0eWxlSW5mb1wiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiZGljVmFsdWVJbmZvXCIsIG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0F0dHJMaXN0XCIsIG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0dyaWRTdHlsZUluZm9cIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXNlci3nlKjmiLfkv6Hmga9cclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLCBsb2dpbkluZm8uc2VydmVyKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywgbG9naW5JbmZvLnVuYW1lKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcsIGxvZ2luSW5mby5wd2QpO1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLm11dGF0TG9naW4oe2xvZ2luaWQ6c3VjY2Vzc30pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoJ2xvZ2luJywge1xyXG5cdFx0XHRcdFx0XHRcdGxvZ2luaWQ6IHN1Y2Nlc3NcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0XHR1cmw6ICcuLi9pbmRleC9pbmRleD9hcmdzPTk5OTk5OTk5OTknXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdC8vIHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1cmw6Jy4uL2luZGV4L2luZGV4P2FyZ3M9OTk5OTk5OTk5OSdcclxuXHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9naW4gPSBcIuW8gOWni+eZu+W9lVwiO1xyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivr1wiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvZ2luID0gXCLlvIDlp4vnmbvlvZVcIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHRoaXMubG9naW4gPSBcIuW8gOWni+eZu+W9lVwiO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKCkge1xyXG5cdFx0XHRwbHVzLnJ1bnRpbWUuZ2V0UHJvcGVydHkocGx1cy5ydW50aW1lLmFwcGlkLCAoaW5mbykgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xyXG5cdFx0XHRcdHRoaXMuJGRhdGEudmVyc2lvbiA9IGluZm8udmVyc2lvbjtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _cmdProgress = _interopRequireDefault(__webpack_require__(/*! @/components/cmd-progress/cmd-progress.vue */ 47));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n// import {\n// \tmapState,\n// \tmapMutations,\n// \tmapActions ,\n// } from 'vuex'\nvar _default = {\n  components: {\n    cmdProgress: _cmdProgress.default\n  },\n  data: function data() {\n    //获取全局参数:url-服务器地址\n    var server = uni.getStorageSync('server');\n    var account = uni.getStorageSync('account');\n    var password = uni.getStorageSync('password');\n    var url = this.$store.state.url;\n    var username = this.$store.state.username;\n    var userpwd = this.$store.state.userpwd;\n    var ischecked = false;\n    if (!server) server = url;\n    if (!account) account = username;\n    if (account && password) ischecked = true;\n    // console.log(url);\n    return {\n      login: \"开始登录\",\n      userServer: server,\n      userName: account,\n      userPwd: password,\n      ischecked: ischecked,\n      version: \"1.0.0\",\n      downloadUrl: \"\",\n      //安卓app下载链接\n      percentage: 0,\n      //下载进度\n      showBtns: true\n    };\n  },\n  onShow: function onShow() {\n    this.query(); //版本升级\n  },\n\n  watch: {\n    //监听进度条\n    percentage: function percentage(e) {\n      // console.log(e);\n      if (e >= 100) {\n        this.$refs.promotion.close();\n      }\n    }\n  },\n  // computed: mapState({\n  // \t// 从state中拿到数据 箭头函数可使代码更简练\n  // \thasLogin: state => state.hasLogin,\n  // \tloginprovider: state => state.loginProvider,\n  // \tappinfo:state=>state.appInfo\n  // }),\n  methods: {\n    //查询当前版本号\n    query: function query() {\n      var _this2 = this;\n      plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {\n        __f__(\"log\", wgtinfo, \" at pages/login/index.vue:268\");\n        var version = wgtinfo.version; //客户端版本号\n        // var versionCode = parseInt(wgtinfo.versionCode); //客户端版本号编码\n        _this2.check(version); //检测是否需要更新\n      });\n    },\n    //检测是否需要更新\n    check: function check(version) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var ser, $this, url, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (_this3.userServer) {\n                  _context.next = 3;\n                  break;\n                }\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"未输入网站地址,请重新配置输入!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return _context.abrupt(\"return\");\n              case 3:\n                ser = _this3.userServer.split('/');\n                $this = _this3;\n                if (ser[1] == 'mobox3') {\n                  //判断当前网址是否是mobox3\n                  url = 'http://' + _this3.userServer + '/Program/version.txt'; // console.log(url);\n                  uni.request({\n                    url: url,\n                    // 指定JS文件的完整路径\n                    method: 'GET',\n                    success: function success(res) {\n                      __f__(\"log\", res, \" at pages/login/index.vue:295\");\n                      if (res && res.statusCode === 200) {\n                        //获取当前版本号\n                        var VersionName = res.data; //更新包名称\n                        var versionInfo = res.data.split('_');\n                        var versionNum = versionInfo[2].replace(\".apk\", \"\"); //版本编码\n                        var VersionCode = versionInfo[2].replace(\".apk\", \"\").replace(\".\", \"\").replace(\".\", \"\"); //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:308\");\n                        }\n                      } else {\n                        // if(res.statusCode === 404){\n                        // \tuni.showModal({\n                        // \t\ttitle: \"提示\",\n                        // \t\tcontent: '请求失败,找不到更新包版本文档:'+url,\n                        // \t\tshowCancel: false,\n                        // \t\tconfirmText: \"取消\"\n                        // \t});\n                        // }\n                      }\n                    },\n                    fail: function fail(err) {\n                      // 错误处理逻辑\n                      uni.showModal({\n                        title: \"错误\",\n                        content: '获取' + url + '文件失败:' + err,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  });\n                } else {\n                  dataInfo = {\n                    server: _this3.userServer\n                  };\n                  _this3.$store.dispatch('GetApkVersionInfo', dataInfo).then(function (success) {\n                    __f__(\"log\", success, \" at pages/login/index.vue:336\");\n                    if (success.code == '00000') {\n                      var resp = success.data;\n                      if (resp) {\n                        // const obj = resp.data.filter(item => {\n                        // \treturn item.groupName == 'version'\n                        // })\n                        //获取当前版本号\n                        var VersionName = resp.VersionName; //更新包名称\n                        var VersionCode = resp.VersionCode; //版本编码\n                        var versionNum = resp.Version; //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:353\");\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误\",\n                        content: success.msg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  }).catch(function (ex) {\n                    __f__(\"log\", ex, \" at pages/login/index.vue:365\");\n                    uni.showModal({\n                      title: \"错误\",\n                      content: ex.errMsg ? ex.errMsg : ex.message,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                }\n              case 6:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    compare: function compare(curV, reqV) {\n      var arr1 = curV.toString().split('.');\n      var arr2 = reqV.toString().split('.');\n      //将两个版本号拆成数字\n      var minL = Math.min(arr1.length, arr2.length);\n      var pos = 0; //当前比较位\n      var diff = 0; //当前为位比较是否相等\n      var flag = false;\n      //逐个比较如果当前位相等则继续比较下一位\n      while (pos < minL) {\n        diff = parseInt(arr1[pos]) - parseInt(arr2[pos]);\n        if (diff == 0) {\n          pos++;\n          continue;\n        } else if (diff > 0) {\n          flag = true;\n          break;\n        } else {\n          flag = false;\n          break;\n        }\n      }\n      return flag;\n    },\n    //确认更新\n    sure: function sure() {\n      //关闭按钮\n      this.showBtns = false;\n      var sys = uni.getSystemInfoSync().platform; //检查系统\n      if (sys == \"ios\") {\n        // this.getIosInfo()\n      } else if (sys == \"android\") {\n        this.updateAPP(); // 调用下载方法app内下载\n      }\n    },\n    //取消更新\n    cancel: function cancel() {\n      this.$refs.promotion.close();\n    },\n    //链接苹果商店下载\n    // getIosInfo() {\n    // \tlet appleId = \"你的appid\"\n    // \tplus.runtime.launchApplication({\n    // \t\taction: \"itms-apps://itunes.apple.com/cn/app/id\" + appleId + \"?mt=8\"\n    // \t}, function(e) {\n    // \t\tconsole.log('Open system default browser failed: ' + e.message);\n    // \t});\n    // },\n    //安卓更新\n    updateAPP: function updateAPP() {\n      var _this = this;\n      var url = this.downloadUrl;\n      // 官方API\n      var dtask = plus.downloader.createDownload(url, {}, function (d, status) {\n        //d为下载的文件对象\n        if (status == 200) {\n          //下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径\n          var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);\n          plus.runtime.openFile(d.filename); //选择软件打开文件\n          uni.showToast({\n            icon: 'none',\n            title: '更新成功'\n          });\n          _this.$refs.promotion.close();\n        } else {\n          //下载失败\n          plus.downloader.clear(); //清除下载任务\n          uni.showToast({\n            icon: 'none',\n            title: '更新失败'\n          });\n          _this.showBtns = false;\n        }\n      });\n      //开始下载\n      dtask.start();\n      //监听下载进度\n      dtask.addEventListener('statechanged', function (task) {\n        _this.percentage = parseInt(parseFloat(task.downloadedSize) / parseFloat(task.totalSize) * 100);\n        if (_this.percentage == 100) {\n          _this.$refs.promotion.close();\n        }\n        __f__(\"log\", '下载进度:' + _this.percentage, \" at pages/login/index.vue:458\");\n      });\n    },\n    // ...mapMutations({\n    // \tmutatLogin:'login'\n    // }),\n    // ...mapActions({\n    // \tactionLogin:'login'\n    // }),\n    inputDialogToggle: function inputDialogToggle() {\n      this.$refs.inputDialog.open();\n    },\n    dialogInputConfirm: function dialogInputConfirm(val) {\n      // console.log(val);\n      // uni.showLoading({\n      // \ttitle: '3秒后会关闭'\n      // })\n      // setTimeout(() => {\n      // uni.hideLoading();\n      this.userServer = val;\n      uni.setStorageSync('server', val);\n      // this.value = val\n      // 关闭窗口后,恢复默认内容\n      this.$refs.inputDialog.close();\n      this.query(); //版本升级\n      // }, 3000)\n      // }, 3000)\n    },\n    rememberPwd: function rememberPwd(e) {\n      //记住密码\n      __f__(\"log\", e.target, \" at pages/login/index.vue:488\");\n      uni.setStorageSync('account', '');\n      uni.setStorageSync('password', '');\n      if (e.target.value[0] == '1') {\n        uni.setStorageSync('account', this.userName);\n        uni.setStorageSync('password', this.userPwd);\n      }\n    },\n    // getCookie(key){\n    // \tif(document.cookie.length>0){\n    // \t\tvar start = document.cookie.indexOf(key +'=');\n    // \t\tif(start !== -1){\n    // \t\t\tstart = start+key.length+1;\n    // \t\t\tvar end = document.cookie.indexOf(';',start);\n    // \t\t\tif(end === -1) end=document.cookie.length;\n    // \t\t\treturn document.cookie.substring(start,end);\n    // \t\t}\n    // \t}\n    // \treturn '';\n    // },\n    // setCookie(cName,value,expiredays){\n    // \tvar exdate = new Date();\n    // \texdate.setDate(exdate.getDate(),expiredays)\n    // \tdocument.cookie = cName+'='+ documentURLComponent(value)+\n    // \t((expiredays==null)?'':';expires='+exdate.toGMTString());\n    // },\n    logind: function logind() {\n      var _this4 = this;\n      if (!this.userServer) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入网站地址,请重新配置输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userName) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入用户名,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userPwd) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入密码,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      //检查 \"登录状态/锁屏状态\" 结束\n      var loginInfo = {\n        server: this.userServer,\n        uname: this.userName,\n        pwd: this.userPwd,\n        cname: plus.device.model,\n        type: \"0\"\n      };\n      __f__(\"log\", loginInfo, \" at pages/login/index.vue:551\");\n      this.$data.login = \"loading......\";\n      //登录\n      this.$store.dispatch('login', loginInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/login/index.vue:556\");\n        if (success.code == '00000' || success.err_code == 0) {\n          //登录成功后清空缓存数据\n          _this4.$store.commit(\"areaFunc\", null);\n          _this4.$store.commit(\"classAttrList\", null);\n          _this4.$store.commit(\"classGridStyleInfo\", null);\n          _this4.$store.commit(\"dicValueInfo\", null);\n          _this4.$store.commit(\"subClassAttrList\", null);\n          _this4.$store.commit(\"subClassGridStyleInfo\", null);\n          //设置全局参数:user-用户信息\n          uni.setStorageSync('server', loginInfo.server);\n          uni.setStorageSync('account', loginInfo.uname);\n          uni.setStorageSync('password', loginInfo.pwd);\n          // this.mutatLogin({loginid:success});\n          _this4.$store.commit('login', {\n            loginid: success\n          });\n          uni.navigateTo({\n            url: '../index/index?args=9999999999'\n          });\n          // uni.redirectTo({\n          // \turl:'../index/index?args=9999999999'\n          // });\n          _this4.login = \"开始登录\";\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n          _this4.login = \"开始登录\";\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/login/index.vue:591\");\n        uni.showModal({\n          title: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        _this4.login = \"开始登录\";\n      });\n    }\n  },\n  onLoad: function onLoad() {\n    var _this5 = this;\n    //获取mac地址\n    var net = plus.android.importClass(\"java.net.NetworkInterface\");\n    var wl0 = net.getByName('wlan0');\n    var macByte = wl0.getHardwareAddress();\n    var deviceId = '';\n    //下面这段代码来自网络  \n    for (var i = 0; i < macByte.length; i++) {\n      var tmp = \"\";\n      var num = macByte[i];\n      if (num < 0) {\n        tmp = (255 + num + 1).toString(16);\n      } else {\n        tmp = num.toString(16);\n      }\n      if (tmp.length == 1) {\n        tmp = \"0\" + tmp;\n      }\n      deviceId += tmp;\n    }\n    //78b8d67511ca\n    this.$store.commit(\"setDeviceId\", deviceId);\n    __f__(\"log\", 'Android设备的deviceId:', deviceId, \" at pages/login/index.vue:624\");\n    plus.runtime.getProperty(plus.runtime.appid, function (info) {\n      // console.log(info);\n      _this5.$data.version = info.version;\n    });\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbG9naW4vaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJjbWRQcm9ncmVzcyIsImRhdGEiLCJzZXJ2ZXIiLCJhY2NvdW50IiwiaXNjaGVja2VkIiwibG9naW4iLCJ1c2VyU2VydmVyIiwidXNlck5hbWUiLCJ1c2VyUHdkIiwidmVyc2lvbiIsImRvd25sb2FkVXJsIiwicGVyY2VudGFnZSIsInNob3dCdG5zIiwib25TaG93Iiwid2F0Y2giLCJtZXRob2RzIiwicXVlcnkiLCJwbHVzIiwiY2hlY2siLCJ1bmkiLCJ0aXRsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJzZXIiLCIkdGhpcyIsInVybCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJmYWlsIiwiZGF0YUluZm8iLCJjb21wYXJlIiwiZGlmZiIsInBvcyIsImZsYWciLCJzdXJlIiwiY2FuY2VsIiwidXBkYXRlQVBQIiwiaWNvbiIsIl90aGlzIiwiZHRhc2siLCJwYXJzZUZsb2F0IiwiaW5wdXREaWFsb2dUb2dnbGUiLCJkaWFsb2dJbnB1dENvbmZpcm0iLCJyZW1lbWJlclB3ZCIsImxvZ2luZCIsInVuYW1lIiwicHdkIiwiY25hbWUiLCJ0eXBlIiwibG9naW5pZCIsIm9uTG9hZCIsInRtcCIsImRldmljZUlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUE4TUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBLGVBQ0E7RUFDQUE7SUFDQUM7RUFDQTtFQUNBQztJQUNB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TUFDQTtRQUNBMUI7VUFDQUM7VUFDQUM7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFDQTtRQUNBSjtVQUNBQztVQUNBQztVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtNQUNBO1FBQ0FKO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO1FBQ0E7UUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBckI7UUFDQTRDO1FBQ0FDO1FBQ0FDO1FBQ0FDO01BQ0E7TUFDQTtNQUVBO01BQ0E7TUFDQTtRQUNBO1FBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E5QjtVQUNBQTtVQUNBQTtVQUNBO1VBQ0E7WUFDQStCO1VBQ0E7VUFDQS9CO1lBQ0FPO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtRQUVBO1VBQ0FQO1lBQ0FDO1lBQ0FDO1lBQ0FDO1lBQ0FDO1VBQ0E7VUFDQTtRQUNBO01BQ0E7UUFDQTtRQUNBSjtVQUNBQztVQUNBQztVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtJQUNBO0VBQ0E7RUFDQTRCO0lBQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBQztNQUNBO1FBQ0FBO01BQ0E7TUFDQTtRQUNBQTtNQUNBO01BQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFFQXBDO01BQ0E7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHN0eWxlPlxyXG5cdGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRcdGZvbnQtc2l6ZTogMTJycHg7XHJcblx0fVxyXG5cclxuXHQjaGVhZHIge1xyXG5cdFx0YmFja2dyb3VuZDogIzQzNDM0MztcclxuXHRcdC8qIHdpZHRoOiAzNzVweDsgKi9cclxuXHRcdGhlaWdodDogMjUwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzQzOEVCOTtcclxuXHRcdC8qIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvbG9naW4vcm9vdC5wbmcpICFpbXBvcnRhbnQ7XHJcblx0XHRiYWNrZ3JvdW5kLXNpemU6IGNvdmVyICFpbXBvcnRhbnQ7IFxyXG5cdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCAhaW1wb3J0YW50OyAqL1xyXG5cdH1cclxuXHJcblx0LlNldFNlcnZlciB7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHR9XHJcblxyXG5cdC5jaGVja19yZW1lbWJlclB3ZCB7XHJcblx0XHRtYXJnaW4tdG9wOiAyMHJweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHR9XHJcblxyXG5cdC5sb2dvIHtcclxuXHRcdGhlaWdodDogMTgwcnB4O1xyXG5cdFx0d2lkdGg6IDE4MHJweDtcclxuXHRcdG1hcmdpbi10b3A6IDE3MHJweDtcclxuXHR9XHJcblxyXG5cdC5sb2dvX2lucHV0IHtcclxuXHRcdGhlaWdodDogNDBycHg7XHJcblx0XHR3aWR0aDogNDBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogNDBycHg7XHJcblx0fVxyXG5cclxuXHQubG9nb19pY29uIHtcclxuXHRcdGhlaWdodDogNTBycHg7XHJcblx0XHR3aWR0aDogNTBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogMTVycHg7XHJcblx0XHRtYXJnaW4tdG9wOiAyMHJweDtcclxuXHR9XHJcblxyXG5cdC5tdWktY29udGVudCB7XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0XHRwYWRkaW5nLXRvcDogMTQwcnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRkZGRjtcclxuXHRcdHotaW5kZXg6IDE7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5sYV9pY29uIHtcclxuXHRcdHdpZHRoOiAxMDBycHg7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0cGFkZGluZzogN3B4IDEzcHg7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93IHtcclxuXHRcdGhlaWdodDogODVycHg7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRjbGVhcjogbGVmdDtcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LXJvdzpmaXJzdC1jaGlsZCB7XHJcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2M4YzdjYztcclxuXHR9XHJcblxyXG5cdC5tdWktaW5wdXQtcm93Omxhc3QtY2hpbGQge1xyXG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjOGM3Y2M7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93Omxhc3QtY2hpbGQ6YWZ0ZXIge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHR9XHJcblxyXG5cdC5tdWktaW5wdXQtZ3JvdXAgLm11aS1pbnB1dC1yb3c6YWZ0ZXIge1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0cmlnaHQ6IDA7XHJcblx0XHRib3R0b206IDA7XHJcblx0XHRsZWZ0OiAxNXB4O1xyXG5cdFx0aGVpZ2h0OiAxcHg7XHJcblx0XHRjb250ZW50OiAnJztcclxuXHRcdHRyYW5zZm9ybTogc2NhbGVZKC41KTtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNjOGM3Y2M7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LXJvdyBpbnB1dCB7XHJcblx0XHRmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG5cdFx0Zm9udC1zaXplOiAxNXB4O1xyXG5cdFx0d2lkdGg6IDQ4MHJweDtcclxuXHRcdC8qIGZsb2F0OiByaWdodDsgKi9cclxuXHRcdG1hcmdpbi1ib3R0b206IDA7XHJcblx0XHRwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG5cdFx0LyogcGFkZGluZy1yaWdodDogMTBycHg7ICovXHJcblx0XHQvKiBsaW5lLWhlaWdodDogMzBycHg7ICovXHJcblx0XHRoZWlnaHQ6IDg1cnB4O1xyXG5cdFx0LyogcGFkZGluZzogN3B4IDQwcHggN3B4IDBweDsgKi9cclxuXHRcdC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XHJcblx0XHQvKiBib3JkZXI6IDA7ICovXHJcblx0XHQvKiBib3JkZXItcmFkaXVzOiAwOyAqL1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcclxuXHRcdG91dGxpbmU6IDA7XHJcblx0XHRiYWNrZ3JvdW5kOiAwIDA7XHJcblx0XHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIGxhYmVsLm11aS1uYXZpZ2F0ZS1yaWdodCB7XHJcblx0XHRmb250LXNpemU6IDI1cHg7XHJcblx0XHRmbG9hdDogcmlnaHQ7XHJcblx0XHRwYWRkaW5nOiAwO1xyXG5cdFx0d2lkdGg6IDgwcnB4O1xyXG5cdFx0bWFyZ2luLXJpZ2h0OiA1cnB4O1xyXG5cdFx0bWFyZ2luLXRvcDogLTg4cnB4O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdH1cclxuXHJcblx0YnV0dG9uLmJ0bl9sb2dpbiB7XHJcblx0XHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRcdHBhZGRpbmc6IDIwcnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogI2ZmZjtcclxuXHR9XHJcbjwvc3R5bGU+XHJcblxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiXCIgc3R5bGU9XCJ3aWR0aDogMTAwdnc7aGVpZ2h0OiA2NHZoO1wiPlxyXG5cdFx0PGRpdiBpZD1cImhlYWRyXCIgY2xhc3M9XCJtdWktYmFyIG11aS1iYXItbmF2XCI+XHJcblx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vbW9ib3hfbG9nXzIwMC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibXVpLWNvbnRlbnRcIj5cclxuXHRcdFx0PGZvcm0gaWQ9J2xvZ2luLWZvcm0nIGNsYXNzPVwibXVpLWlucHV0LWdyb3VwXCI+XHJcblx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiU2V0U2VydmVyXCIgQGNsaWNrPVwiaW5wdXREaWFsb2dUb2dnbGVcIj7phY3nva48L2E+XHJcblx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwibXVpLWlucHV0LXJvd1wiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFfaWNvblwiPjxpbWFnZSBjbGFzcz1cImxvZ29faW5wdXRcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vc3ZyXzMwLnBuZ1wiPjwvaW1hZ2U+PC9sYWJlbD5cclxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibXVpLWlucHV0XCIgdi1tb2RlbD1cInVzZXJTZXJ2ZXJcIiBwbGFjZWhvbGRlcj1cIuacjeWKoeWZqOWcsOWdgFwiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibXVpLW5hdmlnYXRlLXJpZ2h0XCIgaWQ9XCJzZXJzZWxcIj48aW1hZ2UgY2xhc3M9XCJsb2dvX2ljb25cIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vc2VsX2xlZnQucG5nXCIgPjwvaW1hZ2U+PC9sYWJlbD5cclxuXHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj5cclxuXHRcdFx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb19pbnB1dFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9wZXJzb25fMzAucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm11aS1pbnB1dFwiIHYtbW9kZWw9XCJ1c2VyTmFtZVwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6LSm5Y+3XCI+XHJcblx0XHRcdFx0XHQ8IS0tIDxsYWJlbCBjbGFzcz1cIm11aS1uYXZpZ2F0ZS1yaWdodFwiIGlkPVwibmFtc2VsXCI+PGltYWdlIGNsYXNzPVwibG9nb19pY29uXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3VzZXItcGhvdG8ucG5nPC9pbWFnZT48L2xhYmVsPiAtLT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXVpLWlucHV0LXJvd1wiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFfaWNvblwiPlxyXG5cdFx0XHRcdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL2xvY2tfMzAucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgY2xhc3M9XCJtdWktaW5wdXRcIiB2LW1vZGVsPVwidXNlclB3ZFwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5a+G56CBXCI+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiBAY2hhbmdlPVwicmVtZW1iZXJQd2RcIj5cclxuXHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0PGNoZWNrYm94IHZhbHVlPVwiMVwiIDpjaGVja2VkPVwiaXNjaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0PHRleHQ+6K6w5L2P5a+G56CBPC90ZXh0PlxyXG5cdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHQ8L2Zvcm0+XHJcblx0XHRcdDxidXR0b24gaWQ9J2xvZ2luJyB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJsb2dpbmRcIiBjbGFzcz1cImJ0bl9sb2dpblwiPnt7bG9naW59fTwvYnV0dG9uPlxyXG5cdFx0XHQ8cCBzdHlsZT1cImZsb2F0OnJpZ2h0OyBtYXJnaW46IDEwcHggMTBweDtjb2xvcjojYzhjN2NjXCI+XHJcblx0XHRcdFx0PHNwYW4+54mI5pys5Y+377yaPC9zcGFuPlxyXG5cdFx0XHRcdDxzcGFuPnt7dmVyc2lvbn19PC9zcGFuPlxyXG5cdFx0XHQ8L3A+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJcIlxyXG5cdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO2JhY2tncm91bmQ6IHdoaXRlO2JvcmRlci10b3A6IDBweCBzb2xpZCAjQzBDMEMwO2NvbG9yOiAjN2NkMGY4O3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDA7d2lkdGg6IDEwMCU7aGVpZ2h0OiAyNHB4O3BhZGRpbmctdG9wOjNweDtmb250LXNpemU6IDExcHg7XCI+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8dmlldz5cclxuXHRcdFx0PCEtLSDovpPlhaXmoYbnpLrkvosgLS0+XHJcblx0XHRcdDx1bmktcG9wdXAgcmVmPVwiaW5wdXREaWFsb2dcIiB0eXBlPVwiZGlhbG9nXCI+XHJcblx0XHRcdFx0PHVuaS1wb3B1cC1kaWFsb2cgcmVmPVwiaW5wdXRDbG9zZVwiIG1vZGU9XCJpbnB1dFwiIHRpdGxlPVwi6K6+572uXCIgOnZhbHVlPVwidXNlclNlcnZlclwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5YaF5a65XCJcclxuXHRcdFx0XHRcdEBjb25maXJtPVwiZGlhbG9nSW5wdXRDb25maXJtXCI+PC91bmktcG9wdXAtZGlhbG9nPlxyXG5cdFx0XHQ8L3VuaS1wb3B1cD5cclxuXHRcdFx0PCEtLSDniYjmnKzljYfnuqflvLnnqpflvIDlp4sgLS0+XHJcblx0XHRcdDx1bmktcG9wdXAgcmVmPVwicHJvbW90aW9uXCIgdHlwZT1cImNlbnRlclwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwicHJvbW90aW9uXCIgc3R5bGU9XCJ3aWR0aDogNzAwcnB4O3BhZGRpbmc6MjBycHggNDBycHg7IGJhY2tncm91bmQ6IHdoaXRlO2ZvbnQtc2l6ZTogMzZycHg7XCI+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cIm9wZXJhdGVzXCIgdi1pZj1cInNob3dCdG5zPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO3BhZGRpbmctdG9wOjIwcnB4O3BhZGRpbmctYm90dG9tOiA0MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0XHTns7vnu5/mnInmlrDniYjmnKzvvIzmmK/lkKbpnIDopoHmm7TmlrBcclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dGV4dCBAY2xpY2s9XCJjYW5jZWxcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiAjN2NkMGY4O3dpZHRoOiA1MCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj7lj5bmtog8L3RleHQ+XHJcblx0XHRcdFx0XHRcdDx0ZXh0IEBjbGljaz1cInN1cmVcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiAjN2NkMGY4O3dpZHRoOiA1MCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj7noa7orqQ8L3RleHQ+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cIm9wZXJhdGVzXCIgdi1lbHNlPlxyXG5cdFx0XHRcdFx0XHQ8Y21kLXByb2dyZXNzIDpwZXJjZW50PVwicGVyY2VudGFnZVwiIHN0cm9rZS1jb2xvcj1cImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2VmMzJkOSwgIzg5ZmZmZClcIj5cclxuXHRcdFx0XHRcdFx0PC9jbWQtcHJvZ3Jlc3M+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3VuaS1wb3B1cD5cclxuXHRcdFx0PCEtLSDniYjmnKzljYfnuqflvLnnqpfnu5PmnZ8gLS0+XHJcblx0XHQ8L3ZpZXc+XHJcblxyXG5cdDwvdmlldz5cclxuXHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5cdGltcG9ydCBjbWRQcm9ncmVzcyBmcm9tIFwiQC9jb21wb25lbnRzL2NtZC1wcm9ncmVzcy9jbWQtcHJvZ3Jlc3MudnVlXCJcclxuXHQvLyBpbXBvcnQge1xyXG5cdC8vIFx0bWFwU3RhdGUsXHJcblx0Ly8gXHRtYXBNdXRhdGlvbnMsXHJcblx0Ly8gXHRtYXBBY3Rpb25zICxcclxuXHQvLyB9IGZyb20gJ3Z1ZXgnXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0Y29tcG9uZW50czoge1xyXG5cdFx0XHRjbWRQcm9ncmVzc1xyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdC8v6I635Y+W5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHR2YXIgc2VydmVyID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKTtcclxuXHRcdFx0dmFyIGFjY291bnQgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKTtcclxuXHRcdFx0dmFyIHBhc3N3b3JkID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpO1xyXG5cdFx0XHR2YXIgdXJsID0gdGhpcy4kc3RvcmUuc3RhdGUudXJsO1xyXG5cdFx0XHR2YXIgdXNlcm5hbWUgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VybmFtZTtcclxuXHRcdFx0dmFyIHVzZXJwd2QgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VycHdkO1xyXG5cdFx0XHR2YXIgaXNjaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdGlmICghc2VydmVyKVxyXG5cdFx0XHRcdHNlcnZlciA9IHVybDtcclxuXHRcdFx0aWYgKCFhY2NvdW50KVxyXG5cdFx0XHRcdGFjY291bnQgPSB1c2VybmFtZTtcclxuXHRcdFx0aWYgKGFjY291bnQgJiYgcGFzc3dvcmQpXHJcblx0XHRcdFx0aXNjaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2codXJsKTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRsb2dpbjogXCLlvIDlp4vnmbvlvZVcIixcclxuXHRcdFx0XHR1c2VyU2VydmVyOiBzZXJ2ZXIsXHJcblx0XHRcdFx0dXNlck5hbWU6IGFjY291bnQsXHJcblx0XHRcdFx0dXNlclB3ZDogcGFzc3dvcmQsXHJcblx0XHRcdFx0aXNjaGVja2VkOiBpc2NoZWNrZWQsXHJcblx0XHRcdFx0dmVyc2lvbjogXCIxLjAuMFwiLFxyXG5cdFx0XHRcdGRvd25sb2FkVXJsOiBcIlwiLCAvL+WuieWNk2FwcOS4i+i9vemTvuaOpVxyXG5cdFx0XHRcdHBlcmNlbnRhZ2U6IDAsIC8v5LiL6L296L+b5bqmXHJcblx0XHRcdFx0c2hvd0J0bnM6IHRydWUsXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvblNob3coKSB7XHJcblx0XHRcdHRoaXMucXVlcnkoKTsgLy/niYjmnKzljYfnuqdcclxuXHRcdH0sXHJcblx0XHR3YXRjaDoge1xyXG5cdFx0XHQvL+ebkeWQrOi/m+W6puadoVxyXG5cdFx0XHRwZXJjZW50YWdlKGUpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlKTtcclxuXHRcdFx0XHRpZiAoZSA+PSAxMDApIHtcclxuXHRcdFx0XHRcdHRoaXMuJHJlZnMucHJvbW90aW9uLmNsb3NlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Ly8gY29tcHV0ZWQ6IG1hcFN0YXRlKHtcclxuXHRcdC8vIFx0Ly8g5LuOc3RhdGXkuK3mi7/liLDmlbDmja4g566t5aS05Ye95pWw5Y+v5L2/5Luj56CB5pu0566A57uDXHJcblx0XHQvLyBcdGhhc0xvZ2luOiBzdGF0ZSA9PiBzdGF0ZS5oYXNMb2dpbixcclxuXHRcdC8vIFx0bG9naW5wcm92aWRlcjogc3RhdGUgPT4gc3RhdGUubG9naW5Qcm92aWRlcixcclxuXHRcdC8vIFx0YXBwaW5mbzpzdGF0ZT0+c3RhdGUuYXBwSW5mb1xyXG5cdFx0Ly8gfSksXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdC8v5p+l6K+i5b2T5YmN54mI5pys5Y+3XHJcblx0XHRcdHF1ZXJ5KCkge1xyXG5cdFx0XHRcdC8vICNpZmRlZiBBUFAtUExVU1xyXG5cdFx0XHRcdHBsdXMucnVudGltZS5nZXRQcm9wZXJ0eShwbHVzLnJ1bnRpbWUuYXBwaWQsICh3Z3RpbmZvKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh3Z3RpbmZvKTtcclxuXHRcdFx0XHRcdHZhciB2ZXJzaW9uID0gd2d0aW5mby52ZXJzaW9uOyAvL+WuouaIt+err+eJiOacrOWPt1xyXG5cdFx0XHRcdFx0Ly8gdmFyIHZlcnNpb25Db2RlID0gcGFyc2VJbnQod2d0aW5mby52ZXJzaW9uQ29kZSk7IC8v5a6i5oi356uv54mI5pys5Y+357yW56CBXHJcblx0XHRcdFx0XHR0aGlzLmNoZWNrKHZlcnNpb24pIC8v5qOA5rWL5piv5ZCm6ZyA6KaB5pu05pawXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQvLyNlbmRpZlxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+ajgOa1i+aYr+WQpumcgOimgeabtOaWsFxyXG5cdFx0XHRhc3luYyBjaGVjayh2ZXJzaW9uKSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnVzZXJTZXJ2ZXIpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogXCLmnKrovpPlhaXnvZHnq5nlnLDlnYDvvIzor7fph43mlrDphY3nva7ovpPlhaXvvIFcIixcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIHNlciA9IHRoaXMudXNlclNlcnZlci5zcGxpdCgnLycpO1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0aWYoc2VyWzFdID09ICdtb2JveDMnKXsgLy/liKTmlq3lvZPliY3nvZHlnYDmmK/lkKbmmK9tb2JveDNcclxuXHRcdFx0XHRcdHZhciB1cmwgPSAnaHR0cDovLycrdGhpcy51c2VyU2VydmVyKycvUHJvZ3JhbS92ZXJzaW9uLnR4dCc7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh1cmwpO1xyXG5cdFx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0XHR1cmw6IHVybCwgLy8g5oyH5a6aSlPmlofku7bnmoTlrozmlbTot6/lvoRcclxuXHRcdFx0XHRcdFx0bWV0aG9kOiAnR0VUJyxcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXMgJiYgcmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly/ojrflj5blvZPliY3niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBWZXJzaW9uTmFtZSA9IHJlcy5kYXRhOyAvL+abtOaWsOWMheWQjeensFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZlcnNpb25JbmZvID0gcmVzLmRhdGEuc3BsaXQoJ18nKTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2ZXJzaW9uTnVtID0gdmVyc2lvbkluZm9bMl0ucmVwbGFjZShcIi5hcGtcIiwgXCJcIik7IC8v54mI5pys57yW56CBXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgVmVyc2lvbkNvZGUgPSB2ZXJzaW9uSW5mb1syXS5yZXBsYWNlKFwiLmFwa1wiLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlwiKTsgLy/mnI3liqHnq6/niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZG93bmxvYWRVcmwgPSByZXNwLlBkYVVybCtcIi9cIitWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqVcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRvd25sb2FkVXJsID0gXCJodHRwOi8vXCIgKyAkdGhpcy51c2VyU2VydmVyICsgXCIvUHJvZ3JhbS9cIiArIFZlcnNpb25OYW1lOyAvL2FwcOS4i+i9vemTvuaOpXRoaXMuXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaXN2ZXIgPSAkdGhpcy5jb21wYXJlKHZlcnNpb25OdW0sdmVyc2lvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXN2ZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJHJlZnMucHJvbW90aW9uLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCflvZPliY3lt7LmmK/mnIDmlrDniYjmnKwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBpZihyZXMuc3RhdHVzQ29kZSA9PT0gNDA0KXtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdFx0Y29udGVudDogJ+ivt+axguWksei0pe+8jOaJvuS4jeWIsOabtOaWsOWMheeJiOacrOaWh+aho++8micrdXJsLFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0ZmFpbChlcnIpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyDplJnor6/lpITnkIbpgLvovpFcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivr1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogJ+iOt+WPlicrdXJsKyfmlofku7blpLHotKXvvJonKyBlcnIsXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRzZXJ2ZXI6IHRoaXMudXNlclNlcnZlclxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdHZXRBcGtWZXJzaW9uSW5mbycsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJlc3AgPSBzdWNjZXNzLmRhdGE7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlc3ApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnN0IG9iaiA9IHJlc3AuZGF0YS5maWx0ZXIoaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHJldHVybiBpdGVtLmdyb3VwTmFtZSA9PSAndmVyc2lvbidcclxuXHRcdFx0XHRcdFx0XHRcdC8vIH0pXHJcblx0XHRcdFx0XHRcdFx0XHQvL+iOt+WPluW9k+WJjeeJiOacrOWPt1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgVmVyc2lvbk5hbWUgPSByZXNwLlZlcnNpb25OYW1lOyAvL+abtOaWsOWMheWQjeensFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgVmVyc2lvbkNvZGUgPSByZXNwLlZlcnNpb25Db2RlOyAvL+eJiOacrOe8lueggVxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmVyc2lvbk51bSA9IHJlc3AuVmVyc2lvbjsgLy/mnI3liqHnq6/niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZG93bmxvYWRVcmwgPSByZXNwLlBkYVVybCtcIi9cIitWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqVcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRvd25sb2FkVXJsID0gXCJodHRwOi8vXCIgKyAkdGhpcy51c2VyU2VydmVyICsgXCIvUHJvZ3JhbS9cIiArIFZlcnNpb25OYW1lOyAvL2FwcOS4i+i9vemTvuaOpXRoaXMuXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaXN2ZXIgPSAkdGhpcy5jb21wYXJlKHZlcnNpb25OdW0sdmVyc2lvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXN2ZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJHJlZnMucHJvbW90aW9uLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCflvZPliY3lt7LmmK/mnIDmlrDniYjmnKwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivr1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2cgPyBleC5lcnJNc2cgOiBleC5tZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb21wYXJlKGN1clYsIHJlcVYpIHtcclxuXHRcdFx0XHR2YXIgYXJyMSA9IGN1clYudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xyXG5cdFx0XHQgICAgdmFyIGFycjIgPSByZXFWLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcclxuXHRcdFx0ICAgIC8v5bCG5Lik5Liq54mI5pys5Y+35ouG5oiQ5pWw5a2XXHJcblx0XHRcdCAgICB2YXIgbWluTCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XHJcblx0XHRcdCAgICB2YXIgcG9zID0gMDsgLy/lvZPliY3mr5TovoPkvY1cclxuXHRcdFx0ICAgIHZhciBkaWZmID0gMDsgLy/lvZPliY3kuLrkvY3mr5TovoPmmK/lkKbnm7jnrYlcclxuXHRcdFx0ICAgIHZhciBmbGFnID0gZmFsc2U7XHJcblx0XHRcdCAgICAvL+mAkOS4quavlOi+g+WmguaenOW9k+WJjeS9jeebuOetieWImee7p+e7reavlOi+g+S4i+S4gOS9jVxyXG5cdFx0XHQgICAgd2hpbGUgKHBvcyA8IG1pbkwpIHtcclxuXHRcdFx0ICAgICAgICBkaWZmID0gcGFyc2VJbnQoYXJyMVtwb3NdKSAtIHBhcnNlSW50KGFycjJbcG9zXSk7XHJcblx0XHRcdCAgICAgICAgaWYgKGRpZmYgPT0gMCkge1xyXG5cdFx0XHQgICAgICAgICAgICBwb3MrKztcclxuXHRcdFx0ICAgICAgICAgICAgY29udGludWU7XHJcblx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMCkge1xyXG5cdFx0XHQgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuXHRcdFx0ICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRcdCAgICAgICAgfSBlbHNlIHtcclxuXHRcdFx0ICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHQgICAgICAgICAgICBicmVhaztcclxuXHRcdFx0ICAgICAgICB9XHJcblx0XHRcdCAgICB9XHJcblx0XHRcdCAgICByZXR1cm4gZmxhZztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/noa7orqTmm7TmlrBcclxuXHRcdFx0c3VyZSgpIHtcclxuXHRcdFx0XHQvL+WFs+mXreaMiemSrlxyXG5cdFx0XHRcdHRoaXMuc2hvd0J0bnMgPSBmYWxzZTtcclxuXHRcdFx0XHRsZXQgc3lzID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKCkucGxhdGZvcm0gLy/mo4Dmn6Xns7vnu59cclxuXHRcdFx0XHRpZiAoc3lzID09IFwiaW9zXCIpIHtcclxuXHRcdFx0XHRcdC8vIHRoaXMuZ2V0SW9zSW5mbygpXHJcblx0XHRcdFx0fSBlbHNlIGlmIChzeXMgPT0gXCJhbmRyb2lkXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlQVBQKCkgLy8g6LCD55So5LiL6L295pa55rOVYXBw5YaF5LiL6L29XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+WPlua2iOabtOaWsFxyXG5cdFx0XHRjYW5jZWwoKSB7XHJcblx0XHRcdFx0dGhpcy4kcmVmcy5wcm9tb3Rpb24uY2xvc2UoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/pk77mjqXoi7nmnpzllYblupfkuIvovb1cclxuXHRcdFx0Ly8gZ2V0SW9zSW5mbygpIHtcclxuXHRcdFx0Ly8gXHRsZXQgYXBwbGVJZCA9IFwi5L2g55qEYXBwaWRcIlxyXG5cdFx0XHQvLyBcdHBsdXMucnVudGltZS5sYXVuY2hBcHBsaWNhdGlvbih7XHJcblx0XHRcdC8vIFx0XHRhY3Rpb246IFwiaXRtcy1hcHBzOi8vaXR1bmVzLmFwcGxlLmNvbS9jbi9hcHAvaWRcIiArIGFwcGxlSWQgKyBcIj9tdD04XCJcclxuXHRcdFx0Ly8gXHR9LCBmdW5jdGlvbihlKSB7XHJcblx0XHRcdC8vIFx0XHRjb25zb2xlLmxvZygnT3BlbiBzeXN0ZW0gZGVmYXVsdCBicm93c2VyIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XHJcblx0XHRcdC8vIFx0fSk7XHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8v5a6J5Y2T5pu05pawXHJcblx0XHRcdHVwZGF0ZUFQUCgpIHtcclxuXHRcdFx0XHRsZXQgX3RoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdGxldCB1cmwgPSB0aGlzLmRvd25sb2FkVXJsO1xyXG5cdFx0XHRcdC8vIOWumOaWuUFQSVxyXG5cdFx0XHRcdHZhciBkdGFzayA9IHBsdXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZCh1cmwsIHt9LCBmdW5jdGlvbihkLCBzdGF0dXMpIHtcclxuXHRcdFx0XHRcdC8vZOS4uuS4i+i9veeahOaWh+S7tuWvueixoVxyXG5cdFx0XHRcdFx0aWYgKHN0YXR1cyA9PSAyMDApIHtcclxuXHRcdFx0XHRcdFx0Ly/kuIvovb3miJDlip8sZC5maWxlbmFtZeaYr+aWh+S7tuWcqOS/neWtmOWcqOacrOWcsOeahOebuOWvuei3r+W+hO+8jOS9v+eUqOS4i+mdoueahEFQSeWPr+i9rOS4uuW5s+WPsOe7neWvuei3r+W+hFxyXG5cdFx0XHRcdFx0XHR2YXIgZmlsZVNhdmVVcmwgPSBwbHVzLmlvLmNvbnZlcnRMb2NhbEZpbGVTeXN0ZW1VUkwoZC5maWxlbmFtZSk7XHJcblx0XHRcdFx0XHRcdHBsdXMucnVudGltZS5vcGVuRmlsZShkLmZpbGVuYW1lKTsgLy/pgInmi6nova/ku7bmiZPlvIDmlofku7ZcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAn5pu05paw5oiQ5YqfJ1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0X3RoaXMuJHJlZnMucHJvbW90aW9uLmNsb3NlKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvL+S4i+i9veWksei0pVxyXG5cdFx0XHRcdFx0XHRwbHVzLmRvd25sb2FkZXIuY2xlYXIoKTsgLy/muIXpmaTkuIvovb3ku7vliqFcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAn5pu05paw5aSx6LSlJ1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0X3RoaXMuc2hvd0J0bnMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC8v5byA5aeL5LiL6L29XHJcblx0XHRcdFx0ZHRhc2suc3RhcnQoKTtcclxuXHRcdFx0XHQvL+ebkeWQrOS4i+i9vei/m+W6plxyXG5cdFx0XHRcdGR0YXNrLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlZCcsIGZ1bmN0aW9uKHRhc2spIHtcclxuXHRcdFx0XHRcdF90aGlzLnBlcmNlbnRhZ2UgPSBwYXJzZUludChcclxuXHRcdFx0XHRcdFx0KHBhcnNlRmxvYXQodGFzay5kb3dubG9hZGVkU2l6ZSkgLyBwYXJzZUZsb2F0KHRhc2sudG90YWxTaXplKSkgKiAxMDApO1xyXG5cdFx0XHRcdFx0aWYgKF90aGlzLnBlcmNlbnRhZ2UgPT0gMTAwKSB7XHJcblx0XHRcdFx0XHRcdF90aGlzLiRyZWZzLnByb21vdGlvbi5jbG9zZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+S4i+i9vei/m+W6pu+8micgKyBfdGhpcy5wZXJjZW50YWdlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gLi4ubWFwTXV0YXRpb25zKHtcclxuXHRcdFx0Ly8gXHRtdXRhdExvZ2luOidsb2dpbidcclxuXHRcdFx0Ly8gfSksXHJcblx0XHRcdC8vIC4uLm1hcEFjdGlvbnMoe1xyXG5cdFx0XHQvLyBcdGFjdGlvbkxvZ2luOidsb2dpbidcclxuXHRcdFx0Ly8gfSksXHJcblx0XHRcdGlucHV0RGlhbG9nVG9nZ2xlKCkge1xyXG5cdFx0XHRcdHRoaXMuJHJlZnMuaW5wdXREaWFsb2cub3BlbigpXHJcblx0XHRcdH0sXHJcblx0XHRcdGRpYWxvZ0lucHV0Q29uZmlybSh2YWwpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWwpO1xyXG5cdFx0XHRcdC8vIHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0Ly8gXHR0aXRsZTogJzPnp5LlkI7kvJrlhbPpl60nXHJcblx0XHRcdFx0Ly8gfSlcclxuXHRcdFx0XHQvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHQvLyB1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHR0aGlzLnVzZXJTZXJ2ZXIgPSB2YWw7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLCB2YWwpO1xyXG5cdFx0XHRcdC8vIHRoaXMudmFsdWUgPSB2YWxcclxuXHRcdFx0XHQvLyDlhbPpl63nqpflj6PlkI7vvIzmgaLlpI3pu5jorqTlhoXlrrlcclxuXHRcdFx0XHR0aGlzLiRyZWZzLmlucHV0RGlhbG9nLmNsb3NlKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucXVlcnkoKTsgLy/niYjmnKzljYfnuqdcclxuXHRcdFx0XHQvLyB9LCAzMDAwKVxyXG5cdFx0XHRcdC8vIH0sIDMwMDApXHJcblx0XHRcdH0sXHJcblx0XHRcdHJlbWVtYmVyUHdkKGUpIHsgLy/orrDkvY/lr4bnoIFcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywgJycpO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygncGFzc3dvcmQnLCAnJyk7XHJcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlWzBdID09ICcxJykge1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywgdGhpcy51c2VyTmFtZSk7XHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywgdGhpcy51c2VyUHdkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGdldENvb2tpZShrZXkpe1xyXG5cdFx0XHQvLyBcdGlmKGRvY3VtZW50LmNvb2tpZS5sZW5ndGg+MCl7XHJcblx0XHRcdC8vIFx0XHR2YXIgc3RhcnQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihrZXkgKyc9Jyk7XHJcblx0XHRcdC8vIFx0XHRpZihzdGFydCAhPT0gLTEpe1xyXG5cdFx0XHQvLyBcdFx0XHRzdGFydCA9IHN0YXJ0K2tleS5sZW5ndGgrMTtcclxuXHRcdFx0Ly8gXHRcdFx0dmFyIGVuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCc7JyxzdGFydCk7XHJcblx0XHRcdC8vIFx0XHRcdGlmKGVuZCA9PT0gLTEpIGVuZD1kb2N1bWVudC5jb29raWUubGVuZ3RoO1xyXG5cdFx0XHQvLyBcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhzdGFydCxlbmQpO1xyXG5cdFx0XHQvLyBcdFx0fVxyXG5cdFx0XHQvLyBcdH1cclxuXHRcdFx0Ly8gXHRyZXR1cm4gJyc7XHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8vIHNldENvb2tpZShjTmFtZSx2YWx1ZSxleHBpcmVkYXlzKXtcclxuXHRcdFx0Ly8gXHR2YXIgZXhkYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdFx0Ly8gXHRleGRhdGUuc2V0RGF0ZShleGRhdGUuZ2V0RGF0ZSgpLGV4cGlyZWRheXMpXHJcblx0XHRcdC8vIFx0ZG9jdW1lbnQuY29va2llID0gY05hbWUrJz0nKyBkb2N1bWVudFVSTENvbXBvbmVudCh2YWx1ZSkrXHJcblx0XHRcdC8vIFx0KChleHBpcmVkYXlzPT1udWxsKT8nJzonO2V4cGlyZXM9JytleGRhdGUudG9HTVRTdHJpbmcoKSk7XHJcblxyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHRsb2dpbmQoKSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnVzZXJTZXJ2ZXIpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogXCLmnKrovpPlhaXnvZHnq5nlnLDlnYDvvIzor7fph43mlrDphY3nva7ovpPlhaXvvIFcIixcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCF0aGlzLnVzZXJOYW1lKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl55So5oi35ZCN77yM6K+36YeN5paw6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyUHdkKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl5a+G56CB77yM6K+36YeN5paw6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8v5qOA5p+lIFwi55m75b2V54q25oCBL+mUgeWxj+eKtuaAgVwiIOe7k+adn1xyXG5cdFx0XHRcdHZhciBsb2dpbkluZm8gPSB7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHRoaXMudXNlclNlcnZlcixcclxuXHRcdFx0XHRcdHVuYW1lOiB0aGlzLnVzZXJOYW1lLFxyXG5cdFx0XHRcdFx0cHdkOiB0aGlzLnVzZXJQd2QsXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Y29uc29sZS5sb2cobG9naW5JbmZvKTtcclxuXHJcblx0XHRcdFx0dGhpcy4kZGF0YS5sb2dpbiA9IFwibG9hZGluZy4uLi4uLlwiO1xyXG5cdFx0XHRcdC8v55m75b2VXHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2xvZ2luJywgbG9naW5JbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcgfHwgc3VjY2Vzcy5lcnJfY29kZT09MCkge1xyXG5cdFx0XHRcdFx0XHQvL+eZu+W9leaIkOWKn+WQjua4heepuue8k+WtmOaVsOaNrlxyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJhcmVhRnVuY1wiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NHcmlkU3R5bGVJbmZvXCIsIG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJkaWNWYWx1ZUluZm9cIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzR3JpZFN0eWxlSW5mb1wiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0Ly/orr7nva7lhajlsYDlj4LmlbDvvJp1c2VyLeeUqOaIt+S/oeaBr1xyXG5cdFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicsIGxvZ2luSW5mby5zZXJ2ZXIpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnLCBsb2dpbkluZm8udW5hbWUpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywgbG9naW5JbmZvLnB3ZCk7XHJcblx0XHRcdFx0XHRcdC8vIHRoaXMubXV0YXRMb2dpbih7bG9naW5pZDpzdWNjZXNzfSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdCgnbG9naW4nLCB7XHJcblx0XHRcdFx0XHRcdFx0bG9naW5pZDogc3VjY2Vzc1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDogJy4uL2luZGV4L2luZGV4P2FyZ3M9OTk5OTk5OTk5OSdcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gdW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVybDonLi4vaW5kZXgvaW5kZXg/YXJncz05OTk5OTk5OTk5J1xyXG5cdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2dpbiA9IFwi5byA5aeL55m75b2VXCI7XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5tc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9naW4gPSBcIuW8gOWni+eZu+W9lVwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dGhpcy5sb2dpbiA9IFwi5byA5aeL55m75b2VXCI7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvbkxvYWQoKSB7XHJcblx0XHRcdC8v6I635Y+WbWFj5Zyw5Z2AXHJcblx0XHRcdHZhciBuZXQgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJqYXZhLm5ldC5OZXR3b3JrSW50ZXJmYWNlXCIpO1xyXG5cdFx0XHR2YXIgd2wwID0gbmV0LmdldEJ5TmFtZSgnd2xhbjAnKTtcclxuXHRcdFx0dmFyIG1hY0J5dGUgPSB3bDAuZ2V0SGFyZHdhcmVBZGRyZXNzKCk7XHJcblx0XHRcdHZhciBkZXZpY2VJZCA9ICcnICBcclxuXHRcdFx0Ly/kuIvpnaLov5nmrrXku6PnoIHmnaXoh6rnvZHnu5wgIFxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1hY0J5dGUubGVuZ3RoOyBpKyspIHsgIFxyXG5cdFx0XHQgICAgdmFyIHRtcCA9IFwiXCI7ICBcclxuXHRcdFx0ICAgIHZhciBudW0gPSBtYWNCeXRlW2ldOyAgXHJcblx0XHRcdCAgICBpZiAobnVtIDwgMCkgeyAgICAgICAgXHJcblx0XHRcdCAgICAgIHRtcCA9KDI1NStudW0rMSkudG9TdHJpbmcoMTYpOyAgXHJcblx0XHRcdCAgICB9IGVsc2UgeyAgXHJcblx0XHRcdCAgICAgIHRtcCA9IG51bS50b1N0cmluZygxNik7ICBcclxuXHRcdFx0ICAgIH0gIFxyXG5cdFx0XHQgICAgaWYgKHRtcC5sZW5ndGggPT0gMSkgeyAgXHJcblx0XHRcdCAgICAgIHRtcCA9IFwiMFwiICsgdG1wOyAgXHJcblx0XHRcdCAgICB9ICBcclxuXHRcdFx0ICAgIGRldmljZUlkICs9IHRtcDsgIFxyXG5cdFx0XHR9ICBcclxuXHRcdFx0Ly83OGI4ZDY3NTExY2FcclxuXHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwic2V0RGV2aWNlSWRcIiwgZGV2aWNlSWQpO1xuXHRcdFx0Y29uc29sZS5sb2coJ0FuZHJvaWTorr7lpIfnmoRkZXZpY2VJZDonLCAgZGV2aWNlSWQpO1xyXG5cdFx0XHRcclxuXHRcdFx0cGx1cy5ydW50aW1lLmdldFByb3BlcnR5KHBsdXMucnVudGltZS5hcHBpZCwgKGluZm8pID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmZvKTtcclxuXHRcdFx0XHR0aGlzLiRkYXRhLnZlcnNpb24gPSBpbmZvLnZlcnNpb247XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56\n");
/***/ }),
/* 57 */
@@ -2538,7 +2538,7 @@
  function makeInvokeMethod(e, r, n) {
    var o = h;
    return function (i, a) {
      if (o === f) throw new Error("Generator is already running");
      if (o === f) throw Error("Generator is already running");
      if (o === s) {
        if ("throw" === i) throw a;
        return {
@@ -2686,7 +2686,7 @@
          } else if (c) {
            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
          } else {
            if (!u) throw new Error("try statement without catch or finally");
            if (!u) throw Error("try statement without catch or finally");
            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
          }
        }
@@ -2726,7 +2726,7 @@
          return o;
        }
      }
      throw new Error("illegal catch attempt");
      throw Error("illegal catch attempt");
    },
    delegateYield: function delegateYield(e, r, n) {
      return this.delegate = {
@@ -21728,7 +21728,11 @@
              attrs: { _i: "1-" + $30 },
            },
            [
              _vm._$s("2-" + $30, "i", item.name != "Layout")
              _vm._$s(
                "2-" + $30,
                "i",
                item.name != "Layout" && item.show == true
              )
                ? _c(
                    "view",
                    [
@@ -22186,7 +22190,11 @@
                    1
                  )
                : _vm._e(),
              _vm._$s("20-" + $30, "i", item.name == "Layout")
              _vm._$s(
                "20-" + $30,
                "i",
                item.name == "Layout" && item.show == true
              )
                ? _c(
                    "uni-row",
                    {
@@ -22283,7 +22291,7 @@
                                            staticClass: _vm._$s(
                                              "25-" + $30 + "-" + $31,
                                              "sc",
                                              "dv_input"
                                              "input-wrapper"
                                            ),
                                            attrs: {
                                              _i: "25-" + $30 + "-" + $31,
@@ -24044,11 +24052,15 @@
        complete: function complete(e) {
          e || (e = {}), S && "web" === P && e.errMsg && 0 === e.errMsg.indexOf("request:fail") && console.warn("发布H5,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。教程参考:https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5");
          var t = e.data && e.data.header && e.data.header["x-serverless-request-id"] || e.header && e.header["request-id"];
          if (!e.statusCode || e.statusCode >= 400) return s(new te({
            code: "SYS_ERR",
            message: e.errMsg || "request:fail",
            requestId: t
          }));
          if (!e.statusCode || e.statusCode >= 400) {
            var _n4 = e.data && e.data.error && e.data.error.code || "SYS_ERR",
              _r = e.data && e.data.error && e.data.error.message || e.errMsg || "request:fail";
            return s(new te({
              code: _n4,
              message: _r,
              requestId: t
            }));
          }
          var r = e.data;
          if (r.error) return s(new te({
            code: r.error.code,
@@ -24585,10 +24597,10 @@
    for (_iterator.s(); !(_step = _iterator.n()).done;) {
      var _e6 = _step.value;
      var _t4 = _e6.isMatch,
        _n4 = _e6.genAdapter,
        _n5 = _e6.genAdapter,
        _s4 = _e6.runtime;
      if (_t4()) return {
        adapter: _n4(),
        adapter: _n5(),
        runtime: _s4
      };
    }
@@ -24654,16 +24666,16 @@
    if (!this._storage) {
      this._persistence = ke.adapter.primaryStorage || e.persistence, this._storage = Te(this._persistence, ke.adapter);
      var _t5 = "access_token_".concat(e.env),
        _n5 = "access_token_expire_".concat(e.env),
        _n6 = "access_token_expire_".concat(e.env),
        _s5 = "refresh_token_".concat(e.env),
        _r = "anonymous_uuid_".concat(e.env),
        _r2 = "anonymous_uuid_".concat(e.env),
        _i = "login_type_".concat(e.env),
        _o = "user_info_".concat(e.env);
      this.keys = {
        accessTokenKey: _t5,
        accessTokenExpireKey: _n5,
        accessTokenExpireKey: _n6,
        refreshTokenKey: _s5,
        anonymousUuidKey: _r,
        anonymousUuidKey: _r2,
        loginTypeKey: _i,
        userInfoKey: _o
      };
@@ -24679,8 +24691,8 @@
      for (var _e7 in this.keys) {
        var _s6 = this.keys[_e7];
        if (t && Ae.includes(_e7)) continue;
        var _r2 = this._storage.getItem(_s6);
        ve(_r2) || Ie(_r2) || (n.setItem(_s6, _r2), this._storage.removeItem(_s6));
        var _r3 = this._storage.getItem(_s6);
        ve(_r3) || Ie(_r3) || (n.setItem(_s6, _r3), this._storage.removeItem(_s6));
      }
      this._storage = n;
    }
@@ -25212,7 +25224,7 @@
      var _send = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(e) {
        var t,
          n,
          _n6,
          _n7,
          _args11 = arguments;
        return _regenerator.default.wrap(function _callee11$(_context11) {
          while (1) {
@@ -25237,17 +25249,17 @@
                  onUploadProgress: t.onUploadProgress
                });
              case 9:
                _n6 = _context11.sent;
                if (!_n6.data.code) {
                _n7 = _context11.sent;
                if (!_n7.data.code) {
                  _context11.next = 12;
                  break;
                }
                throw new te({
                  code: _n6.data.code,
                  message: _n6.data.message
                  code: _n7.data.code,
                  message: _n7.data.message
                });
              case 12:
                return _context11.abrupt("return", _n6.data);
                return _context11.abrupt("return", _n7.data);
              case 13:
                if (!n.data.code) {
                  _context11.next = 15;
@@ -27161,13 +27173,13 @@
        var t = s["x-trace-id"] || "";
        if (!e.statusCode || e.statusCode >= 400) {
          var _ref21 = e.data || {},
            _n7 = _ref21.message,
            _n8 = _ref21.message,
            _s10 = _ref21.errMsg,
            _r3 = _ref21.trace_id;
            _r4 = _ref21.trace_id;
          return i(new te({
            code: "SYS_ERR",
            message: _n7 || _s10 || "request:fail",
            requestId: _r3 || t
            message: _n8 || _s10 || "request:fail",
            requestId: _r4 || t
          }));
        }
        r({
@@ -27805,7 +27817,7 @@
          s,
          r,
          i,
          _r4,
          _r5,
          _args39 = arguments;
        return _regenerator.default.wrap(function _callee39$(_context39) {
          while (1) {
@@ -27838,7 +27850,7 @@
                _context39.next = 14;
                return t.encryptData(s);
              case 14:
                _r4 = _context39.sent;
                _r5 = _context39.sent;
                _context39.next = 17;
                return t.platformGetSignOption();
              case 17:
@@ -27846,7 +27858,7 @@
                _context39.next = 20;
                return e({
                  name: n,
                  data: _r4
                  data: _r5
                });
              case 20:
                i = _context39.sent;
@@ -28970,11 +28982,11 @@
}
function Fn(e) {
  var t = e.callFunction,
    n = function n(_n8) {
    n = function n(_n9) {
      var _this19 = this;
      var s = _n8.name;
      _n8.data = Lt.call(e, {
        data: _n8.data
      var s = _n9.name;
      _n9.data = Lt.call(e, {
        data: _n9.data
      });
      var r = {
          aliyun: "aliyun",
@@ -28982,10 +28994,10 @@
          tcb: "tcb",
          alipay: "alipay"
        }[this.config.provider],
        i = Nn(_n8),
        o = Dn(_n8),
        i = Nn(_n9),
        o = Dn(_n9),
        a = i || o;
      return t.call(this, _n8).then(function (e) {
      return t.call(this, _n9).then(function (e) {
        return e.errCode = 0, !a && qn.call(_this19, {
          functionName: s,
          result: e,
@@ -29006,10 +29018,10 @@
            n = _ref41$formatter === void 0 ? [] : _ref41$formatter;
          for (var _s13 = 0; _s13 < n.length; _s13++) {
            var _n$_s = n[_s13],
              _r5 = _n$_s.rule,
              _r6 = _n$_s.rule,
              _i3 = _n$_s.content,
              _o3 = _n$_s.mode,
              _a = e.match(_r5);
              _a = e.match(_r6);
            if (!_a) continue;
            var _c = _i3;
            for (var _e19 = 1; _e19 < _a.length; _e19++) {
@@ -29022,7 +29034,7 @@
          }
          return e;
        }({
          message: "[".concat(_n8.name, "]: ").concat(e.message),
          message: "[".concat(_n9.name, "]: ").concat(e.message),
          formatter: Ut,
          extraInfo: {
            functionName: s
@@ -29190,8 +29202,8 @@
      var e = this;
      for (; e;) {
        var t = zn(e),
          _n9 = zn(e.prevStage);
        if ("aggregate" === t && "collection" === _n9 || "pipeline" === t) return !0;
          _n10 = zn(e.prevStage);
        if ("aggregate" === t && "collection" === _n10 || "pipeline" === t) return !0;
        e = e.prevStage;
      }
      return !1;
@@ -29212,8 +29224,8 @@
      var e = this;
      for (; e;) {
        var t = zn(e),
          _n10 = zn(e.prevStage);
        if ("aggregate" === t && "command" === _n10) return !0;
          _n11 = zn(e.prevStage);
        if ("aggregate" === t && "command" === _n11) return !0;
        e = e.prevStage;
      }
      return !1;
@@ -29377,9 +29389,9 @@
        n = _ref45.multiCommand,
        s = _ref45.queryList;
      function r(e, t) {
        if (n && s) for (var _n11 = 0; _n11 < s.length; _n11++) {
          var _r6 = s[_n11];
          _r6.udb && "function" == typeof _r6.udb.setResult && (t ? _r6.udb.setResult(t) : _r6.udb.setResult(e.result.dataList[_n11]));
        if (n && s) for (var _n12 = 0; _n12 < s.length; _n12++) {
          var _r7 = s[_n12];
          _r7.udb && "function" == typeof _r7.udb.setResult && (t ? _r7.udb.setResult(t) : _r7.udb.setResult(e.result.dataList[_n12]));
        }
      }
      var i = this,
@@ -29417,11 +29429,11 @@
        if (u) for (var _e22 = 0; _e22 < u.length; _e22++) {
          var _u$_e = u[_e22],
            _t13 = _u$_e.level,
            _n12 = _u$_e.message,
            _n13 = _u$_e.message,
            _s14 = _u$_e.detail,
            _r7 = console["app" === P && "warn" === _t13 ? "error" : _t13] || console.log;
          var _i4 = "[System Info]" + _n12;
          _s14 && (_i4 = "".concat(_i4, "\n\u8BE6\u7EC6\u4FE1\u606F\uFF1A").concat(_s14)), _r7(_i4);
            _r8 = console["app" === P && "warn" === _t13 ? "error" : _t13] || console.log;
          var _i4 = "[System Info]" + _n13;
          _s14 && (_i4 = "".concat(_i4, "\n\u8BE6\u7EC6\u4FE1\u606F\uFF1A").concat(_s14)), _r8(_i4);
        }
        if (t) {
          return a(new te({
@@ -29728,7 +29740,7 @@
    s[e]({
      url: n
    });
  });
  }, 0);
}
function ws() {
  var _ref50 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -30182,8 +30194,8 @@
        if (_this21.loadtime === xs) return;
        var n = !1;
        var s = [];
        for (var _r8 = 2; _r8 < e.length; _r8++) {
          e[_r8] !== t[_r8] && (s.push(e[_r8]), n = !0);
        for (var _r9 = 2; _r9 < e.length; _r9++) {
          e[_r9] !== t[_r9] && (s.push(e[_r9]), n = !0);
        }
        e[0] !== t[0] && (_this21.mixinDatacomPage.current = _this21.pageCurrent), _this21.mixinDatacomPage.size = _this21.pageSize, _this21.onMixinDatacomPropsChange(n, s);
      });
@@ -30210,14 +30222,14 @@
        }));
      },
      mixinDatacomGet: function mixinDatacomGet() {
        var _n13;
        var _n14;
        var t = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        var n;
        t = t || {}, n = "undefined" != typeof __uniX && __uniX ? e.databaseForJQL(this.spaceInfo) : e.database(this.spaceInfo);
        var s = t.action || this.action;
        s && (n = n.action(s));
        var r = t.collection || this.collection;
        n = Array.isArray(r) ? (_n13 = n).collection.apply(_n13, (0, _toConsumableArray2.default)(r)) : n.collection(r);
        n = Array.isArray(r) ? (_n14 = n).collection.apply(_n14, (0, _toConsumableArray2.default)(r)) : n.collection(r);
        var i = t.where || this.where;
        i && Object.keys(i).length && (n = n.where(i));
        var o = t.field || this.field;
@@ -30265,11 +30277,11 @@
        retry: !1
      }
    }, n);
    var _n14 = n,
      s = _n14.customUI,
      r = _n14.loadingOptions,
      i = _n14.errorOptions,
      o = _n14.parseSystemError,
    var _n15 = n,
      s = _n15.customUI,
      r = _n15.loadingOptions,
      i = _n15.errorOptions,
      o = _n15.parseSystemError,
      a = !s;
    return new Proxy({}, {
      get: function get(s, c) {
@@ -30360,7 +30372,7 @@
                _e26,
                _yield,
                _t19,
                _n15,
                _n16,
                _args4 = arguments;
              return _regenerator.default.wrap(function _callee54$(_context54) {
                while (1) {
@@ -30506,16 +30518,16 @@
                      }
                      return _context54.abrupt("return", s.apply(void 0, h));
                    case 37:
                      _n15 = new te({
                      _n16 = new te({
                        subject: f,
                        code: g,
                        message: m,
                        requestId: l.requestId
                      });
                      throw _n15.detail = l.result, Y(j, {
                      throw _n16.detail = l.result, Y(j, {
                        type: z,
                        content: _n15
                      }), _n15;
                        content: _n16
                      }), _n16;
                    case 39:
                      return _context54.abrupt("return", (Y(j, {
                        type: z,
@@ -30839,8 +30851,8 @@
      var n = this._callback[e];
      if (!n) return;
      var s = function (e, t) {
        for (var _n16 = e.length - 1; _n16 >= 0; _n16--) {
          if (e[_n16] === t) return _n16;
        for (var _n17 = e.length - 1; _n17 >= 0; _n17--) {
          if (e[_n17] === t) return _n17;
        }
        return -1;
      }(n, t);
@@ -30934,7 +30946,7 @@
                if (!e || "string" != typeof e) return 0;
                var t = e.match(/^(\d+)./);
                return t && t[1] ? parseInt(t[1]) : 0;
              }(_t21) >= 14 && console.warn("iOS 14及以上版本连接uniCloud本地调试服务需要允许客户端查找并连接到本地网络上的设备(仅开发模式生效,发行模式会连接uniCloud云端服务)");
              }(_t21) >= 14 && console.warn("iOS 14及以上版本连接uniCloud本地调试服务需要允许客户端查找并连接到本地网络上的设备(仅开发期间需要,发行后不需要)");
            }
            t = e.__dev__;
            if (t.debugInfo) {
@@ -30949,7 +30961,7 @@
            _context61.next = 11;
            return function () {
              var _ref73 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee60(e, t) {
                var n, _s16, _r9;
                var n, _s16, _r10;
                return _regenerator.default.wrap(function _callee60$(_context60) {
                  while (1) {
                    switch (_context60.prev = _context60.next) {
@@ -30960,15 +30972,15 @@
                          _context60.next = 11;
                          break;
                        }
                        _r9 = e[_s16];
                        _r10 = e[_s16];
                        _context60.next = 5;
                        return qs(_r9, t);
                        return qs(_r10, t);
                      case 5:
                        if (!_context60.sent) {
                          _context60.next = 8;
                          break;
                        }
                        n = _r9;
                        n = _r10;
                        return _context60.abrupt("break", 11);
                      case 8:
                        _s16++;
@@ -31163,12 +31175,12 @@
  var t = {};
  if (e && 1 === e.length) t = e[0], $s = $s.init(t), $s._isDefault = !0;else {
    var _t20 = ["auth", "callFunction", "uploadFile", "deleteFile", "getTempFileURL", "downloadFile", "database", "getCurrentUSerInfo", "importObject"];
    var _n17;
    _n17 = e && e.length > 0 ? "应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间" : x ? "应用未关联服务空间,请在uniCloud目录右键关联服务空间" : "uni-app cli项目内使用uniCloud需要使用HBuilderX的运行菜单运行项目,且需要在uniCloud目录关联服务空间", _t20.forEach(function (e) {
    var _n18;
    _n18 = e && e.length > 0 ? "应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间" : x ? "应用未关联服务空间,请在uniCloud目录右键关联服务空间" : "uni-app cli项目内使用uniCloud需要使用HBuilderX的运行菜单运行项目,且需要在uniCloud目录关联服务空间", _t20.forEach(function (e) {
      $s[e] = function () {
        return console.error(_n17), Promise.reject(new te({
        return console.error(_n18), Promise.reject(new te({
          code: "SYS_ERR",
          message: _n17
          message: _n18
        }));
      };
    });
@@ -32480,7 +32492,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      }\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.param = JSON.parse(options.param);\n    this.$data.title = this.$data.param.Add_BtnName ? this.$data.param.Add_BtnName : options.titlename; //设置按钮文字\n\n    __f__(\"log\", this.$data.param, \" at pages/modal/3018_2.vue:586\");\n    //获取数据类的自定义表单参数\n    this.Head_UIStyleGetInfo(this.param.DataCls.id, this.param.UI_Style.ID);\n\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.head_styledef);\n                    $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n                        return _regenerator.default.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                if (!(ele.useDict == true)) {\n                                  _context.next = 3;\n                                  break;\n                                }\n                                _context.next = 3;\n                                return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 3:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n                      return function (_x, _x2) {\n                        return _ref.apply(this, arguments);\n                      };\n                    }());\n                  } else {\n                    uni.showModal({\n                      title: \"错误1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    DictGetInfo: function DictGetInfo(dict, index, type) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                //Mobox3得到得到字典信息字典项列表\n                _this2.data = [];\n                $this = _this2;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this2.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(success) {\n                    var list, itemName, attr;\n                    return _regenerator.default.wrap(function _callee3$(_context3) {\n                      while (1) {\n                        switch (_context3.prev = _context3.next) {\n                          case 0:\n                            __f__(\"log\", success, \" at pages/modal/3018_2.vue:636\");\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                list = [];\n                                itemName = '';\n                                success.result.dict_item_list.forEach(function (item) {\n                                  if (item.is_default == '1') itemName = item.name;\n                                  list.push({\n                                    text: item.value,\n                                    value: item.name\n                                  });\n                                });\n                                //有默认值,显示默认值\n                                if (itemName) {\n                                  $this.head_styledef.form.items[index].value = itemName;\n                                  attr = $this.head_styledef.form.items[index].fieldId;\n                                  $this.head_styledef.form.model[attr] = itemName;\n                                }\n                                $this.head_styledef.form.items[index].dict = list;\n                                // $this.head_styledef.form.items[index].dictitem=success.result;\n                                // this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\n                              } else {\n                                // $this.$data.subClassAttrList[index].attr_list[key].dictitem=success.result;\n                                // this.$store.commit(\"subClassAttrList\", $this.$data.subClassAttrList);\n                              }\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 2:\n                          case \"end\":\n                            return _context3.stop();\n                        }\n                      }\n                    }, _callee3);\n                  }));\n                  return function (_x3) {\n                    return _ref2.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this3 = this;\n      //扫码功能\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        uni.hideKeyboard();\n        var $this = _this3;\n        __f__(\"log\", item, \" at pages/modal/3018_2.vue:677\");\n        if (item.oldvalue != result.decodedata) {\n          item.oldvalue = result.decodedata;\n          item.value = result.decodedata;\n          var attr = item.fieldId;\n          $this.head_styledef.form.model[attr] = result.decodedata;\n          if (result.decodedata) {\n            //第一个输入框不为空\n            $this.focusMateria = true; //初始化,第二个输入框focus属性\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //第二个输入框获取焦点\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 1000);\n            // },500);\n          }\n\n          var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n          if (eventid) {\n            var obj_attr = _this3.head_styledef.form.model;\n            // console.log(obj_attr);\n            var req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                val: obj_attr[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: _this3.$data.param.DataCls.id,\n              objid: \"\",\n              attr: req,\n              dataJson: []\n            };\n            _this3.DataObjRunCustomEvent(info, '');\n          }\n        }\n      });\n    },\n    onevent: function onevent(item) {\n      // console.log(e.target);\n      var $this = this;\n      __f__(\"log\", item, \" at pages/modal/3018_2.vue:721\");\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        item.value = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        //子数据类扫码区事件脚本\n        var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n        if (eventid) {\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              val: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.DataCls.id,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info, data_attr);\n        }\n      }\n    },\n    onchange: function onchange(item) {\n      __f__(\"log\", item, \" at pages/modal/3018_2.vue:754\");\n      var $this = this;\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              val: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.DataCls.id,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onModelValue: function onModelValue(item) {\n      //绑定Model值\n      var attr = item.fieldId;\n      this.head_styledef.form.model[attr] = item.value;\n      var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n      var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n\n      if (!onSuffixClickCallbackEvent.id) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"后图标点击事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!onSuffixClickEvent.id) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"后图标点击回调为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      this.$data.popupType = 'right';\n      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n      this.$refs.popup.open($this.popupType);\n      this.DataObjRunCustomEvent_Return(onSuffixClickCallbackEvent.id, '', onSuffixClickEvent.id, item);\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3018_2.vue:807\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定\n      var $this = this;\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (!$this.$data.popupParam) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"popupParam为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var fieldId = $this.$data.popupParam.item.fieldId;\n      $this.head_styledef.form.model[attr] = name;\n      for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n        var attr = $this.$data.head_styledef.form.items[c];\n        if (attr.fieldId == fieldId) {\n          attr.value = name;\n        }\n      }\n      __f__(\"log\", data, \" at pages/modal/3018_2.vue:853\");\n      var callback_eventid = $this.$data.popupParam.button_callback.trim();\n      var info = {\n        eventid: callback_eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: $this.$data.param.DataCls.id,\n        objid: \"\",\n        attr: $this.$data.popupParam.req,\n        dataJson: data\n      };\n      $this.DataObjRunCustomEvent(info, $this.$data.popupParam.data_attr);\n      this.$refs.popup.close();\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.DataCls.id,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.DataCls.id // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg = {\n          type: 'small',\n          //小窗口\n          class_id: this.$data.param.DataCls.id //当前数据类id\n        };\n\n        if (data_attr) {\n          enviroment.edit_dlg.form_control = {\n            //所属的表单控件\n            name: data_attr.Name,\n            //字段属性\n            text: data_attr.DispName,\n            //显示文本\n            group_name: data_attr.GroupName,\n            //属性组\n            type: data_attr.Type,\n            //字段类型\n            readonly: data_attr.ReadOnly,\n            //是否只读\n            button_img: data_attr.button_img,\n            //引用按钮的图标\n            button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n          };\n        }\n      }\n\n      // var dataInfo = {\n      //     edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //     rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //     attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: \"\",\n      // \tglobal_attr: JSON.stringify(this.$data.global_attr), dataJson:JSON.stringify(info.dataJson)\n      // }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var input_param = _base.default.encode(JSON.stringify(info.attr)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: true,\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: input_param\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:936\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018_2.vue:939\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3018_2.vue:953\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.head_styledef.form.items.length; c++) {\n                        var attr = $this.head_styledef.form.items[c];\n                        if (attr.name != 'Layout') {\n                          if (attr.fieldId == result[i].attr) {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"CN_S_VALUE\": val,\n                                \"text\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr.dict = dictItemList;\n                          }\n                        } else if (attr.name == 'Layout') {\n                          attr.setting.colList.forEach(function (col) {\n                            if (col) {\n                              if (col.fieldId == result[i].attr) {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"CN_S_VALUE\": val,\n                                    \"text\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                col.dict = dictItemList;\n                              }\n                            }\n                          });\n                        }\n                      }\n                    }\n                    for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                      var attr = $this.$data.head_styledef.form.items[c];\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据\n                      if ($this.head_styledef.form.model[result[i].attr] == undefined) {\n                        $this.head_styledef.form.model[result[i].attr] = result[i].value;\n                      }\n                      //判断是否是栅格表单\n                      if (attr.name != 'Layout') {\n                        if (attr.fieldId == result[i].attr) {\n                          attr.value = '';\n                          attr.oldvalue = '';\n                          attr.value = result[i].value;\n                          attr.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                        }\n                      } else if (attr.name == 'Layout') {\n                        attr.setting.colList.forEach(function (col) {\n                          if (col) {\n                            if (col.fieldId == result[i].attr) {\n                              col.value = '';\n                              col.oldvalue = '';\n                              col.value = result[i].value;\n                              col.oldvalue = result[i].value;\n                              $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                            }\n                          }\n                        });\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            // var head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n            // $this.head_styledef=[];\n            // $this.head_styledef = head_styledef;\n            __f__(\"log\", $this.head_styledef, \" at pages/modal/3018_2.vue:1041\");\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                  var attr = $this.$data.head_styledef.form.items[c];\n                  //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据\n                  if ($this.head_styledef.form.model[result[i].attr] == undefined) {\n                    $this.head_styledef.form.model[result[i].attr] = result[i].value;\n                  }\n                  //判断是否是栅格表单\n                  if (attr.name != 'Layout') {\n                    if (attr.fieldId == result[i].attr) {\n                      attr.value = '';\n                      attr.oldvalue = '';\n                      attr.value = result[i].value;\n                      attr.oldvalue = result[i].value;\n                      $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                    }\n                  } else if (attr.name == 'Layout') {\n                    attr.setting.colList.forEach(function (col) {\n                      if (col) {\n                        if (col.fieldId == result[i].attr) {\n                          col.value = '';\n                          col.oldvalue = '';\n                          col.value = result[i].value;\n                          col.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                        }\n                      }\n                    });\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, item) {\n      var _this4 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.DataCls.id,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.DataCls.id // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var req = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          val: obj_attr[a] || \"\"\n        };\n      });\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'val': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.DataCls.id //当前数据类id\n      };\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.DataCls.id, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: true,\n        class_id: this.$data.param.DataCls.id,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: obj_attr,\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: '',\n        compose_info: '',\n        ext_info: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:1164\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018_2.vue:1167\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data != \"\") {\n              var actions = data.action;\n              __f__(\"log\", actions, \" at pages/modal/3018_2.vue:1181\");\n              if (actions) {\n                for (var i = 0; i < actions.length; i++) {\n                  var action = actions[i];\n                  var val = action.value;\n                  var enviroment = JSON.stringify(enviroment);\n                  if (action.action_type == 'open_panel') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_select_userdlg') {\n                    var style = val.style;\n                    // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                    var $this = _this4;\n                    var param = {\n                      item: item,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    uni.navigateTo({\n                      url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          // console.log(param);\n                          __f__(\"log\", data, \" at pages/modal/3018_2.vue:1210\");\n                          var callback_eventid = param.button_callback.trim();\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"0\",\n                            projectid: '',\n                            rclsid: '',\n                            robjid: '',\n                            userlogin: '',\n                            clsid: $this.$data.param.DataCls.id,\n                            objid: \"\",\n                            attr: param.req,\n                            inputparameter: data,\n                            dataJson: []\n                          };\n                          $this.DataObjRunCustomEvent(info, param.data_attr);\n                        }\n                      }\n                    });\n                  } else if (action.action_type == 'open_data_query_dlg') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_common_dlg') {\n                    var $this = _this4;\n                    if (val.common_dlg_id == 'check_list') {\n                      $this.$data.check_list = val.config;\n                      if (val.config.appear_style == 'sideslip')\n                        //判断是否是侧滑\n                        $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                      $this.$refs.popup.open($this.$data.popupType);\n                      var popupParam = {\n                        item: item,\n                        button_callback: button_callback,\n                        req: req,\n                        data_attr: data_attr\n                      };\n                      $this.$data.popupParam = popupParam;\n                    }\n                  } else if (action.action_type == 'open_project_query_dlg') {\n                    //console.log(action.value.select_range);\n                    //console.log(action.value.mulit_select);\n                    var priRel = '-1';\n                    if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                    var $this = _this4;\n                    var param_ = {\n                      item: item,\n                      button_callback: button_callback,\n                      req: req\n                    };\n                    uni.navigateTo({\n                      url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          var attr = param.item.fieldId;\n                          $this.head_styledef.form.model[attr] = data[0].ID + ';' + data[0].Name;\n\n                          // $this.$data.classAttrList[param.index].Attr[param.iindex].Value=data[0].Name;\n                          // $this.$data.classAttrList[param.index].Attr[param.iindex].ValID=data[0].ID+';'+data[0].Name;\n                          var callback_eventid = param.button_callback.trim();\n                          if (callback_eventid) {\n                            var info = {\n                              eventid: callback_eventid,\n                              edtype: \"2\",\n                              projectid: data[0].ID,\n                              rclsid: \"\",\n                              robjid: \"\",\n                              userlogin: \"\",\n                              clsid: $this.$data.param.DataCls.id,\n                              objid: \"\",\n                              attr: param.req,\n                              dataJson: []\n                            };\n                            $this.DataObjRunCustomEvent(info);\n                          }\n                        }\n                      }\n                    });\n                  } else {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  }\n                }\n              }\n            } else {\n              uni.showModal({\n                title: \"提示5.2\",\n                content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    //确定\n    sava: function sava() {\n      // if (this.$data.edit_ok_event)\n      // \tthis.OKDataObjRunCustomEvent();\n      // else\n      this.add();\n    },\n    add: function add() {\n      var _this5 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var obj_attr = this.head_styledef.form.model;\n      __f__(\"log\", obj_attr, \" at pages/modal/3018_2.vue:1343\");\n      // var req = Object.keys(obj_attr).map((a) => ({\n      // \tname: a,\n      // \tvalue: obj_attr[a] || \"\",\n      // }));\n\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.DataCls.id,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.DataCls.id\n        }\n      };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n\n      // console.log(obj_attr);\n      // var dataInfo={\n      //     class_id: this.$data.param.DataCls.id, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      var dataInfo = {\n        class_id: this.$data.param.DataCls.id,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:1380\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018_2.vue:1383\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          // if(result.result_type == 0){}\n          if (success.result.action) {\n            var action = JSON.parse(success.result.action);\n            __f__(\"log\", action, \" at pages/modal/3018_2.vue:1390\");\n            if (action.ret == '0') {\n              if (action.ret != 0) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.result,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.info) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.info,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3018_2?param=' + JSON.stringify(_this5.$data.param) + \"&titlename=\" + _this5.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3018_2.vue:1417\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAxOF8yLnZ1ZSJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiQmFzZTY0IiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0IiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsIm9uTG9hZCIsInVuaSIsIm1ldGhvZHMiLCJIZWFkX1VJU3R5bGVHZXRJbmZvIiwiJHRoaXMiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwidWlfc3R5bGVfaWQiLCJzdHlsZWRlZiIsImVsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEaWN0R2V0SW5mbyIsImRpY3RfaWQiLCJkaWN0X25hbWUiLCJsaXN0IiwiaXRlbU5hbWUiLCJzdWNjZXNzIiwidGV4dCIsInZhbHVlIiwiYXR0ciIsIm9udGFwIiwiZ2V0QXBwIiwiaXRlbSIsInNldFRpbWVvdXQiLCJ2YWwiLCJldmVudGlkIiwiZWR0eXBlIiwicHJvamVjdGlkIiwicmNsc2lkIiwicm9iamlkIiwidXNlcmxvZ2luIiwiY2xzaWQiLCJvYmppZCIsImRhdGFKc29uIiwib25ldmVudCIsIm9uY2hhbmdlIiwib25Nb2RlbFZhbHVlIiwicG9wdXBDaGFuZ2UiLCJjaGVja0NoYW5nZSIsInBvcHVwX2NhbmNlbCIsInBvcHVwX3NhdmEiLCJuYW1lIiwiaWQiLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJjbHNfaWQiLCJidXR0b25fbmFtZSIsIm1hc3RlciIsImVudmlyb21lbnQiLCJ0eXBlIiwiZ3JvdXBfbmFtZSIsInJlYWRvbmx5IiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiaW5mbyIsIm9ial9hdHRyIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiY2xhc3NfbmFtZSIsImV2ZW50X2lkIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJpbnB1dF9wYXJhbSIsImRpY3RJdGVtTGlzdCIsImNvbCIsImxlbmd0aCIsIkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4iLCJyZXEiLCJleHRpbmZvIiwiZCIsImJ1dHRvbl9jYWxsYmFjayIsImRhdGFfYXR0ciIsInVybCIsImV2ZW50cyIsIkFkZFBlciIsImlucHV0cGFyYW1ldGVyIiwicHJpUmVsIiwic2F2YSIsImFkZCIsIm1hc2siLCJtYXN0ZXJfY2xzX2lkIiwibWFzdGVyX29ial9pZCIsImNyZWF0b3IiLCJjcmVhdG9yX25hbWUiLCJub3RfdHJpZ2dlcl9ldmVudCIsInVwZGF0ZV9leGlzdCIsInBvc3RfcHJvY2VzcyIsImljb24iLCJkdXJhdGlvbiIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFxaUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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TUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBWjtRQUNBQTtRQUNBO1FBQ0FwQjtRQUNBO1FBQ0E7UUFDQTtVQUNBO1VBQ0E7VUFDQTtZQUFBO2NBQ0FpQjtjQUNBSztZQUNBO1VBQUE7VUFDQTtZQUNBQztZQUNBQztZQUNBQztZQUNBQztZQUNBQztZQUNBQztZQUNBQztZQUNBQztZQUNBYjtZQUNBYztVQUNBO1VBQ0E7UUFDQTtNQUNBO0lBRUE7SUFDQUU7TUFDQTtNQUNBO01BQ0E7UUFDQWI7UUFDQTtRQUNBcEI7UUFDQTtRQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7WUFBQTtjQUNBaUI7Y0FDQUs7WUFDQTtVQUFBO1VBQ0E7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQWI7WUFDQWM7VUFDQTtVQUNBO1FBQ0E7TUFDQTtJQUVBO0lBQ0FHO01BQUE7TUFDQTtNQUNBO01BQ0E7TUFDQTs7TUFFQTtRQUNBckM7VUFBQW5CO1VBQUE0QjtVQUFBQztVQUFBQztRQUFBO1FBQ0E7TUFDQTtNQUNBO1FBQ0FYO1VBQUFuQjtVQUFBNEI7VUFBQUM7VUFBQUM7UUFBQTtRQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFFQTtJQUNBO0lBQ0EyQjtNQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtRQUFBO1FBQ0E7VUFDQTNEO1FBQ0E7TUFDQTtNQUNBQTtNQUNBO0lBRUE7SUFDQTREO01BQUE7TUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO1FBQ0E7VUFDQSxVQUNBQztVQUNBQTtVQUNBOUQ7WUFBQStEO1lBQUFEO1VBQUE7UUFDQTtNQUNBO01BQ0E7UUFDQTFDO1VBQUFuQjtVQUFBNEI7VUFBQUM7VUFBQUM7UUFBQTtRQUNBO01BQ0E7TUFFQTtNQUNBUjtNQUNBO1FBQ0E7UUFDQTtVQUNBaUI7UUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO1FBQ0FNO1FBQ0FDO1FBQ0FDO1FBQ0FDO1FBQ0FDO1FB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TUFDQTtRQUNBO1FBQ0F2RDtRQUNBO1VBQ0E7VUFDQTtVQUNBO1lBQ0E7WUFDQTtZQUNBO2NBQ0E7Z0JBQ0FBO2tCQUFBbkI7a0JBQUE0QjtrQkFBQUM7a0JBQUFDO2dCQUFBO2dCQUNBO2NBQ0E7Y0FDQTtnQkFDQVg7a0JBQUFuQjtrQkFBQTRCO2tCQUFBQztrQkFBQUM7Z0JBQUE7Z0JBQ0E7Y0FDQTtjQUNBO2dCQUNBWDtrQkFBQW5CO2tCQUFBaUg7a0JBQUFDO2dCQUFBO2NBQ0E7O2NBRUE7WUFDQTtVQUNBLE9BQ0EvRjtZQUFBbkI7WUFBQWlIO1lBQUFDO1VBQUE7VUFDQTtVQUNBL0Y7WUFDQStFO1VBQ0E7VUFDQTtRQUNBO1VBQ0EvRTtZQUFBbkI7WUFBQTRCO1lBQUFDO1lBQUFDO1VBQUE7UUFDQTtNQUNBO1FBQ0E7UUFDQVg7UUFDQUE7VUFBQW5CO1VBQUE0QjtVQUFBQztVQUFBQztRQUFBO01BQ0E7SUFDQTtJQUNBcUY7TUFBQTtNQUNBaEc7UUFDQWlHO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8c3R5bGU+XHJcbi52LWhlYWRTdHlsZXtcclxuXHQvKiBib3JkZXI6IDAuMXJweCBzb2xpZCByZWQ7ICovXHJcblx0LyogbGluZS1oZWlnaHQ6IDMwcnB4OyAqL1xyXG5cdHBhZGRpbmc6IDVycHggMDtcclxufVxyXG4udi1oZWFkU3R5bGU6Zmlyc3QtY2hpbGR7XHJcblx0bWFyZ2luLXRvcDogMTVycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIC50eHRfdGl0bGV7XHJcbiAgZm9udC1zaXplOiAzNHJweDtcclxuICB0ZXh0LWFsaWduOiByaWdodDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgLyogdmVydGljYWwtYWxpZ246IDI0cnB4OyAqL1xyXG4gIFxyXG5cdC8qIGJvcmRlcjogMC4xcnB4IHNvbGlkIHJlZDsgKi9cclxufVxyXG4udi1oZWFkU3R5bGUgaW5wdXR7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdHdpZHRoOiA4NSU7ICAgXHJcblx0aGVpZ2h0OiA1MnJweDtcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDRycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEycnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSAuZm9ybS1pdGVtLXNwYW57XHJcblx0LyogdmVydGljYWwtYWxpZ246dG9wOyAqL1xyXG4gICAgY29sb3I6ICMyZDhjZjA7XHJcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHJcblx0LyogYm9yZGVyOiAwLjFycHggc29saWQgcmVkOyAqL1xyXG59XHJcbi5pbnB1dC13cmFwcGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA2NSU7ICAgXHJcblx0bGluZS1oZWlnaHQ6IDIycnB4O1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XHJcbi5jaGVja19yZW1lbWJlclB3ZCxcclxuLmlucHV0LXN3aXRjaHtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdG1hcmdpbi1sZWZ0OjEwcnB4XG59XHJcbltudnVlXSB1bmktdmlldyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMCBzb2xpZCAjMDAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XHJcblxyXG4udW5pLWlucHV0IHtcclxuXHQvKiBib3JkZXI6IG5vbmU7ICovXG59XHJcbi51bmktaWNvbntcclxuXHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0d2lkdGg6IDglO1xuICAgIGZvbnQtZmFtaWx5OiB1bmlpY29ucztcbiAgICBmb250LXNpemU6IDQwcnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIC8qIHdpZHRoOiA0OHJweDsgKi9cbiAgICBoZWlnaHQ6IDQ4cnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA0OHJweDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR2ZXJ0aWNhbC1hbGlnbjogMThycHg7XG59XHJcblxyXG5cclxuLnZpZXctY29udGVudHtcclxuXHRtaW4taGVpZ2h0OiA3MDBycHg7XHJcblx0LyogYm9yZGVyOjFweCBzb2xpZCByZWQ7ICovXHJcbn1cclxuXHJcbi5pbnB1dC1kaXNhYmxlZHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzICFpbXBvcnRhbnQ7XHJcbn1cclxuYnV0dG9uLmJ0bl9hZGQge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogIzRENkFGNDtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiByaWdodDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuYnV0dG9uLmJ0bl9jYW5jZWwge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogI2ZmZjtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICMwMDA7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG4udmlldy1wb3B1cHtcclxuXHRwb3NpdGlvbjpyZWxhdGl2ZTtcclxufVxyXG4ucG9wdXAtY29udGVudCB7XHJcblx0QGluY2x1ZGUgZmxleDtcclxuXHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG5cdHBhZGRpbmc6IDMwcnB4O1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0LyogaGVpZ2h0OiAxNTBweDsgKi9cclxuXHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcbn1cclxuLnBvcHVwLWNvbnQge1xyXG5cdG92ZXJmbG93LXk6IGF1dG87XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi5wb3B1cC1oZWlnaHQge1xyXG5cdEBpbmNsdWRlIGhlaWdodDtcclxuXHQvKiB3aWR0aDogMjAwcHg7ICovXHJcbn1cclxuLnBvcHVwLWhlYWRlcntcclxuXHRmb250LXNpemU6IDQycnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdG1hcmdpbjoyMHJweCAyMHJweCAwcHggMjBycHg7XHJcbn1cclxuLnZpZXdfcG9wdXBfQ2hlY2tMaXN0e1xyXG5cdG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG59XHJcbi5wb3B1cC1mb290ZXJ7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdHBvc2l0aW9uOmFic29sdXRlO1xyXG5cdGJvdHRvbTowO1xyXG5cdHJpZ2h0OjIwcnB4O1xyXG59XHJcbmJ1dHRvbi5idG5fcG9wdXBfYWRkIHtcclxuXHR3aWR0aDoxODBycHg7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0bWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuXHRwYWRkaW5nOiAxNXJweDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGNvbG9yOiAjZmZmO1xyXG4gICAgZm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHQvKiBmbG9hdDogbGVmdDsgKi9cclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuYnV0dG9uLmJ0bl9wb3B1cF9jYW5jZWwge1xyXG5cdHdpZHRoOjE4MHJweDtcclxuXHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRwYWRkaW5nOiAxNXJweDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGNvbG9yOiAjZmZmO1xyXG4gICAgZm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHQvKiBmbG9hdDogcmlnaHQ7ICovXHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbiNkdl9zZWxlY3R7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHdpZHRoOiA2NiU7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0LyogcGFkZGluZzogMTBycHggOHJweCAxMnJweDsgKi9cclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDBycHg7XHJcblx0LyogdmVydGljYWwtYWxpZ246IDEwcHg7ICovXHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxufVxyXG4jZHZfc2VsZWN0IC51bmktc2VsZWN0e1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1x0XHJcbn1cclxuI2R2X3NlbGVjdCAudW5pLXNlbGVjdF9faW5wdXQtdGV4dHtcclxuXHRjb2xvcjogIzJkOGNmMDtcdFxyXG59XHJcblxyXG4ucGFuZWxfdGl0bGV7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMjdBNkUxO1xyXG5cdGxpbmUtaGVpZ2h0OiA4MHJweDtcclxuXHRjb2xvcjogI2ZmZjtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0IGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcbi52LXBhbmVse1xyXG5cdG1pbi1oZWlnaHQ6Nzg4cnB4O1xyXG59XHJcbi52LXBhbmVsbGlzdHtcclxuXHRib3JkZXI6NHJweCBzb2xpZCAjYWFhO1xyXG5cdGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG5cdG1hcmdpbjogMTBycHggMjBycHggMHJweCAyMHJweDtcclxufVxyXG4udi1wYW5lbGRlbHtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4ucGFuZWxfZGVse1xyXG5cdGZvbnQtc2l6ZTogNDRycHg7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBpbml0aWFsO1xyXG5cdG1hcmdpbi10b3A6IDEwcnB4O1xyXG5cdG1hcmdpbi1yaWdodDogMjBycHg7XHJcbn1cclxuLmNsYXNzX2F0dHJfYm9keSAuZm9ybS1ncm91cCB7XHJcblx0bWFyZ2luOiAyMHJweCAzMHJweDtcclxuICAgIC8qIG1hcmdpbi1sZWZ0OiAtMTJweDtcclxuICAgIG1hcmdpbi1yaWdodDogLTEycHg7ICovXHJcbn1cclxuLnN1YmNsYXNzX2F0dHJfYm9keSAuZm9ybS1ncm91cCB7XHJcblx0bWFyZ2luOiAyMHJweCAxMHJweDtcclxuICAgIC8qIG1hcmdpbi1sZWZ0OiAtMTJweDtcclxuICAgIG1hcmdpbi1yaWdodDogLTEycHg7ICovXHJcbn1cclxuLmZvcm0tZ3JvdXAgPiBsYWJlbFtjbGFzcyo9XCJjb2wtXCJdIHtcclxuICAgIG1hcmdpbi1ib3R0b206IDhycHg7XHJcblx0Zm9udC1zaXplOiAzMnJweDtcclxufVxyXG4uZm9ybS1ncm91cCBsYWJlbCB7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgbGluZS1oZWlnaHQ6IDYwcnB4O1xyXG59XHJcbi50eF90aXRsZTJ7XHJcblx0Zm9udC1zaXplOiAzMnJweDtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dmVydGljYWwtYWxpZ246IC0ycHg7XHJcbn1cclxuLmF0dHJfZmllbGR7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0bWFyZ2luLWxlZnQ6IDhweDtcclxuXHQvKiB3aWR0aDogNzElOyAqL1xyXG59XHJcbi50ZXh0LXJpZ2h0MiB7XHJcblx0bWFyZ2luOiAwO1xyXG5cdHZlcnRpY2FsLWFsaWduOiAtNHB4O1xyXG5cdG1hcmdpbi1sZWZ0OiA5cHg7XHJcblx0ZmxvYXQ6IG5vbmU7XHJcblx0Zm9udC1zaXplOiA0NHJweDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdGZvbnQtc2l6ZTogMTJycHg7XHJcbn1cclxuLnYtcGFuZWwgaW5wdXR7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHR3aWR0aDogOTglO1xyXG5cdGhlaWdodDogNTJycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMwNDZkYjM7XHJcblx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDRycHg7XHJcbn1cclxuLmRhdGVfaXB1dHtcclxuXHQvKiBib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1OyAqL1xyXG5cdC8qIHdpZHRoOiA5OCU7ICovXHJcblx0aGVpZ2h0OiA2MnJweDtcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzA0NmRiMztcclxuXHRwYWRkaW5nOiAxMHJweCA4cnB4IDRycHg7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxufVxyXG4uZHZfaW5wdXR7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA2NSU7ICAgIFxyXG5cdC8qIGxpbmUtaGVpZ2h0OiAyMnJweDsgKi9cbn1cclxuLnZpZXctZmxvb3J7XHJcblx0cGFkZGluZzogMCAyMHJweDtcclxufVxuPC9zdHlsZT5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5cdC5kZW1vLXVuaS1yb3cge1xuXHRcdG1hcmdpbi1ib3R0b206IDBweDtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQ6OnYtZGVlcCAudW5pLXJvdyB7XG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xuXHR9XHJcblx0LnZpZXctdGFicGFnZSA6OnYtZGVlcCAudW5pLXJvdyAge1xuXHRcdG1hcmdpbi1ib3R0b206IDVweDtcblx0fVxuXHQuZGVtby11bmktY29sIHtcblx0XHRoZWlnaHQ6IDM2cHg7XG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xuXHR9XHJcblx0LmRlbW8tdW5pLXJvdyAudW5pLWlucHV0e1xyXG5cdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDEyMHB4KTtcclxuXHR9XHJcblx0LnRleHQge1xyXG5cdCAgICBmb250LXNpemU6IDEycHg7XHJcblx0ICAgIGNvbG9yOiAjNjY2O1xyXG5cdCAgICBtYXJnaW4tdG9wOiA1cHg7XHJcblx0fVxyXG5cdC8vIC51bmktcHgtNSB7XHJcblx0Ly8gXHRtYXJnaW46IDA7XHJcblx0Ly8gXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0Ly8gXHRtYXJnaW46IDA7ICAgIFxyXG5cdC8vIFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdC8vIH1cclxuXHQvLyAudW5pLXNlbGVjdHtcclxuXHQvLyBcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcblx0Ly8gXHRib3JkZXItcmFkaXVzOiAwO1xyXG5cdC8vIH1cclxuXHQvLyAudW5pLXNlY3Rpb24tY29udGVudHtcclxuXHQvLyBcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHQvLyBcdHdpZHRoOiAxMDBweDsgXHJcblx0Ly8gXHRib3JkZXI6IDFweCBzb2xpZCByZWQ7XHJcblx0Ly8gfVxuPC9zdHlsZT5cblxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdDwhLS0g6KGo5aS05qC35byPIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWhlYWRTdHlsZVwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1wiID5cclxuXHRcdCAgPCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHQgIDx2aWV3IHYtaWY9XCJpdGVtLm5hbWUhPSdMYXlvdXQnXCI+XHJcblx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdCAgOnN0eWxlPVwiJ3dpZHRoOiBjYWxjKDEwMCUgLSAnK2l0ZW0ubGFiZWxXaWR0aCsncHgpOydcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGl0ZW0udXNlRGljdD9pdGVtLmRpY3Q6aXRlbS5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdDx1bmktZGF0YS1zZWxlY3QgaWQ9XCJkdl9zZWxlY3RcIiB2LWlmPVwiaXRlbS5uYW1lPT0nU2VsZWN0JyAmJiAhaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0OnN0eWxlPVwiJ3dpZHRoOiBjYWxjKDEwMCUgLSAnK2l0ZW0ubGFiZWxXaWR0aC0xMCsncHgpOydcIlxyXG5cdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0di1tb2RlbD1cIml0ZW0udmFsdWVcIlxyXG5cdFx0XHRcdDpsb2NhbGRhdGE9XCJpdGVtLmRpY3RcIlxyXG5cdFx0XHRcdEBjaGFuZ2U9XCJvbmNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0OmNsZWFyPVwiZmFsc2VcIlxyXG5cdFx0XHQ+PC91bmktZGF0YS1zZWxlY3Q+XHJcblx0XHRcdDwhLS0g5LiL5ouJ5qGGLeWkmumAiSAtLT5cclxuXHRcdFx0PCEtLSA8c2VsZWN0LWN5IHYtZWxzZS1pZj1cImF0dHIuc2VsZWN0PT10cnVlXCIgIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0ICA6bmFtZT1cIml0ZW0uZmllbGRJZFwiIFxyXG5cdFx0XHQgIDpvcHRpb25zPVwiaXRlbS5kaWN0XCIgXHJcblx0XHRcdCAgc2hvd0NsZWFySWNvbj1cInRydWVcIiBcclxuXHRcdFx0ICBAY2hhbmdlPVwib25jaGFuZ2UyXCIgXHJcblx0XHRcdCAgOmRhdGEtaW5kZXg9XCJpbmRleFwiIFxyXG5cdFx0XHQgIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHQ+PC9zZWxlY3QtY3k+IC0tPlxyXG5cdFx0XHQ8IS0tIOaWh+acrOahhi/mlbDlrZfmoYYgLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIHYtaWY9XCIoaXRlbS5uYW1lPT0nSW5wdXQnIHx8IGl0ZW0ubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWl0ZW0uZGlzYWJsZWRcIj5cblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRAY2hhbmdlPVwiY2xhc3NBdHRyX2V4dEJ1dHRvbihpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0Jz8ndGV4dCc6aXRlbS5uYW1lPT0nSW5wdXROdW1iZXInPydudW1iZXInOid0ZXh0J1wiIFxyXG5cdFx0XHRcdFx0di1tb2RlbD1cIml0ZW0udmFsdWVcIlxyXG5cdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHQ6cGxhY2Vob2xkZXI9XCJpdGVtLnBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOml0ZW0uc2V0dGluZy5wcmVmaXggJiYgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nNzglJzppdGVtLnNldHRpbmcucHJlZml4IHx8IGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzg3JSc6Jzk2JSd9XCIgXHJcblx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIlxyXG5cdFx0XHRcdFx0QGZvY3VzPVwib250YXAoaXRlbSlcIiBcclxuXHRcdFx0XHRcdEBibHVyPVwib25ldmVudChpdGVtKVwiXHJcblx0XHRcdFx0Lz5cblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXG5cdFx0XHRcdFx0QGNsaWNrPVwiY2xhc3NBdHRyX2V4dEJ1dHRvbihpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0ICAgIDwvdmlldz5cclxuXHRcdFx0PCEtLSDlpJrooYzmlofmnKwgLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIHYtaWY9XCJpdGVtLm5hbWU9PSdUZXh0YXJlYScgJiYgIWl0ZW0uZGlzYWJsZWRcIj5cclxuXHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJ1bmktaW5wdXRcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiA6dmFsdWU9XCJpdGVtLnZhbHVlXCIgXHJcblx0XHRcdFx0ICA6cGxhY2Vob2xkZXI9XCJpdGVtLnBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHQgIEBibHVyPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCIgXHJcblx0XHRcdFx0ICA6ZGF0YS1pbmRleD1cImluZGV4XCIgXHJcblx0XHRcdFx0ICBzdHlsZT1cImhlaWdodDo2MHB4O1wiIFxyXG5cdFx0XHRcdCAgOnN0eWxlPVwieyd3aWR0aCc6Jzk2JSd9XCIgXHJcblx0XHRcdFx0ICA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcclxuXHRcdCAgICA8L3ZpZXc+XHJcblx0XHRcdDwhLS0g5aSN6YCJ5qGGIC0tPlxyXG5cdFx0XHQ8Y2hlY2tib3gtZ3JvdXAgY2xhc3M9XCJjaGVja19yZW1lbWJlclB3ZFwiIHYtaWY9XCJpdGVtLm5hbWU9PSdDaGVja2JveCdcIlxyXG5cdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIiBcclxuXHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHQ6ZGF0YS1pc2NoZWNrPVwiaXRlbS52YWx1ZVwiPlxyXG5cdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJpdGVtLnZhbHVlXCIgOmNoZWNrZWQ9XCJpdGVtLnZhbHVlXCIvPlxyXG5cdFx0XHRcdFx0PHRleHQ+e3tpdGVtLmxhYmVsfX08L3RleHQ+XHJcblx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0PCEtLSBTd2l0Y2jlvIDlhbMgLS0+XHJcblx0XHRcdDxzd2l0Y2ggY2xhc3M9XCJpbnB1dC1zd2l0Y2hcIiB2LWlmPVwiaXRlbS5uYW1lPT0nU3dpdGNoJ1wiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdCAgdi1tb2RlbD1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0ICBAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCIgLz5cclxuXHRcdFx0PCEtLSDml6XmnJ/ml7bpl7QgLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIHYtaWY9XCIoaXRlbS5uYW1lPT0nVGltZVBpY2tlcicgfHwgaXRlbS5uYW1lPT0nRGF0ZVBpY2tlcicpICYmICFpdGVtLmRpc2FibGVkXCI+XHJcblx0XHRcdFx0PHBpY2tlciBtb2RlPVwiZGF0ZVwiIGNsYXNzPVwiZGF0ZV9pcHV0XCIgOmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0ICA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHQgIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHQgIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIiBcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0ICAgPHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2l0ZW0udmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0ICA8L3ZpZXc+XHJcblx0XHQgIDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0ICA8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHQgICBcdDx1bmktY29sIHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0ICAgXHRcdDpzcGFuPVwiaXRlbS5zZXR0aW5nLnNwYW5MaXN0P2l0ZW0uc2V0dGluZy5zcGFuTGlzdFtrZXldOjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiPlxyXG5cdFx0ICAgXHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCIgPlxyXG5cdFx0ICAgXHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdCAgIFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0ICAgXHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiIHYtaWY9XCIoY29scy5uYW1lPT0nSW5wdXQnIHx8IGNvbHMubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdCAgIFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdCAgIFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHQgICBcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdCAgIFx0XHRcdFx0XHRAY2hhbmdlPVwib25jaGFuZ2UoY29scylcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdCAgIFx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWlucHV0XCIgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHQgICBcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dCc/J3RleHQnOmNvbHMubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdCAgIFx0XHRcdFx0XHR2LW1vZGVsPVwiY29scy52YWx1ZVwiXHJcblx0XHQgICBcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHQgICBcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHQgICBcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6Y29scy5zZXR0aW5nLnByZWZpeCAmJiBjb2xzLnNldHRpbmcuc3VmZml4Pyc3OCUnOmNvbHMuc2V0dGluZy5wcmVmaXggfHwgY29scy5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdCAgIFx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIlxyXG5cdFx0ICAgXHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGNvbHMpXCIgXHJcblx0XHQgICBcdFx0XHRcdFx0QGJsdXI9XCJvbmV2ZW50KGNvbHMpXCJcclxuXHRcdCAgIFx0XHRcdFx0Lz5cclxuXHRcdCAgIFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdCAgIFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHQgICBcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5zdWZmaXhdXCJcclxuXHRcdCAgIFx0XHRcdFx0XHRAY2xpY2s9XCJvbmNoYW5nZShjb2xzKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0ICAgXHRcdFx0PC92aWV3PlxyXG5cdFx0ICAgXHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGNvbHMudXNlRGljdD9jb2xzLmRpY3Q6Y29scy5zZWxlY3Rpb25zLS0+XHJcblx0XHQgICBcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cImNvbHMubmFtZT09J1NlbGVjdCcgJiYgIWNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0ICAgXHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiBcclxuXHRcdCAgIFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIlxyXG5cdFx0ICAgXHRcdFx0XHQ6bG9jYWxkYXRhPVwiY29scy5kaWN0XCJcclxuXHRcdCAgIFx0XHRcdFx0QGNoYW5nZT1cIm9uY2hhbmdlKGNvbHMpXCJcclxuXHRcdCAgIFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHQgICBcdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdCAgIFx0XHRcdD48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdCAgIFx0XHRcdDwhLS0g5aSa6KGM5paH5pysIC0tPlxyXG5cdFx0ICAgXHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cImNvbHMubmFtZT09J1RleHRhcmVhJyAmJiAhY29scy5kaXNhYmxlZFwiPlxyXG5cdFx0ICAgXHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJ1bmktaW5wdXRcIiA6dmFsdWU9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHQgICBcdFx0XHRcdCAgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHQgICBcdFx0XHRcdCAgOnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHQgICBcdFx0XHRcdCAgQGJsdXI9XCJvbk1vZGVsVmFsdWUoY29scylcIiBcclxuXHRcdCAgIFx0XHRcdFx0ICBzdHlsZT1cImhlaWdodDo2MHB4O1wiIFxyXG5cdFx0ICAgXHRcdFx0XHQgIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiIFxyXG5cdFx0ICAgXHRcdFx0XHQgIDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0ICAgXHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdCAgIFx0XHRcdDwvdmlldz5cclxuXHRcdCAgIFx0XHRcdDwhLS0g5aSN6YCJ5qGGIC0tPlxyXG5cdFx0ICAgXHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiB2LWlmPVwiY29scy5uYW1lPT0nQ2hlY2tib3gnXCJcclxuXHRcdCAgIFx0XHRcdFx0OmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHQgICBcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0ICAgXHRcdFx0XHRAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGNvbHMpXCIgXHJcblx0XHQgICBcdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHQgICBcdFx0XHRcdDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOicxMHJweCd9XCI+XHJcblx0XHQgICBcdFx0XHRcdDxsYWJlbD5cclxuXHRcdCAgIFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiY29scy52YWx1ZVwiIDpjaGVja2VkPVwiY29scy52YWx1ZVwiLz5cclxuXHRcdCAgIFx0XHRcdFx0XHQ8dGV4dD57e2NvbHMubGFiZWx9fTwvdGV4dD5cclxuXHRcdCAgIFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdCAgIFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHQgICBcdFx0XHQ8IS0tIFN3aXRjaOW8gOWFsyAtLT5cclxuXHRcdCAgIFx0XHRcdDxzd2l0Y2ggdi1pZj1cImNvbHMubmFtZT09J1N3aXRjaCdcIiA6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0ICAgXHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdCAgIFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIiBcclxuXHRcdCAgIFx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShjb2xzKVwiIFxyXG5cdFx0ICAgXHRcdFx0XHQ6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzonMTBycHgnfVwiLz5cclxuXHRcdCAgIFx0XHRcdDwhLS0g5pel5pyf5pe26Ze0IC0tPlxyXG5cdFx0ICAgXHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIihjb2xzLm5hbWU9PSdUaW1lUGlja2VyJyB8fCBjb2xzLm5hbWU9PSdEYXRlUGlja2VyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdCAgIFx0XHRcdFx0PHBpY2tlciBtb2RlPVwiZGF0ZVwiIGNsYXNzPVwiZGF0ZV9pcHV0XCIgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHQgICBcdFx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHQgICBcdFx0XHRcdCAgOnZhbHVlPVwiY29scy52YWx1ZVwiIFxyXG5cdFx0ICAgXHRcdFx0XHQgIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoY29scylcIiBcclxuXHRcdCAgIFx0XHRcdFx0PlxyXG5cdFx0ICAgXHRcdFx0XHQgICA8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7Y29scy52YWx1ZX19PC92aWV3PlxyXG5cdFx0ICAgXHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdCAgIFx0XHRcdDwvdmlldz5cclxuXHRcdCAgIFx0XHRcclxuXHRcdCAgIFx0XHQ8L3ZpZXc+XHJcblx0XHQgICBcdDwvdW5pLWNvbD5cclxuXHRcdCAgIDwvdW5pLXJvdz5cclxuXHRcdCAgXHJcblx0XHQgIFxyXG5cdFx0PC92aWV3PlxyXG5cdFx0XHJcblx0XHQ8dmlldyBjbGFzcz1cInZpZXctZmxvb3JcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJzYXZhXCIgY2xhc3M9XCJidG5fYWRkXCI+e3t0aXRsZX19PC9idXR0b24+XHJcblx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwiY2FuY2VsXCIgY2xhc3M9XCJidG5fY2FuY2VsXCI+5Y+W5raIPC9idXR0b24+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8IS0tIOaZrumAmuW8ueeqlyB0b3AgYm90dG9tIGNlbnRlciBsZWZ0IHJpZ2h0IC0tPlxyXG5cdFx0PHZpZXc+XHJcblx0XHRcdDx1bmktcG9wdXAgY2xhc3M9XCJ2aWV3LXBvcHVwXCIgcmVmPVwicG9wdXBcIiBiYWNrZ3JvdW5kLWNvbG9yPVwiI2ZmZlwiIEBjaGFuZ2U9XCJwb3B1cENoYW5nZVwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+e3tjaGVja19saXN0LnRpdGxlfX08L3ZpZXc+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwb3B1cC1jb250ZW50XCIgOmNsYXNzPVwieyAncG9wdXAtaGVpZ2h0JzogcG9wdXBUeXBlID09PSAnbGVmdCcgfHwgcG9wdXBUeXBlID09PSAncmlnaHQnIH1cIiBcclxuXHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzpjaGVja19saXN0LndpZHRoP2NoZWNrX2xpc3Qud2lkdGgrJ3B4JzonMjAwcHgnLCdoZWlnaHQnOmNoZWNrX2xpc3QuaGVpZ2h0P2NoZWNrX2xpc3QuaGVpZ2h0KydweCc6Jzg4JSd9XCI+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInBvcHVwLWNvbnRcIiA6c3R5bGU9XCJ7J2hlaWdodCc6Y2hlY2tfbGlzdC5oZWlnaHQ/Y2hlY2tfbGlzdC5oZWlnaHQtNDUrJ3B4JzonNDE1cHgnfVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInZpZXdfcG9wdXBfQ2hlY2tMaXN0XCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gY2hlY2tfbGlzdC5pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX2xpc3RcIiBAY2hhbmdlPVwiY2hlY2tDaGFuZ2VcIiA6ZGF0YS1pc2NoZWNrPVwiaXRlbS5jaGVja1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiAgOnN0eWxlPVwieydtYXJnaW4tbGVmdCc6ICcxMHJweCd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJpdGVtLmNoZWNrXCIgOmNoZWNrZWQ9XCJpdGVtLmNoZWNrXCIvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2l0ZW0ubmFtZX19PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInBvcHVwLWZvb3RlclwiPlxyXG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cInBvcHVwX3NhdmFcIiBjbGFzcz1cImJ0bl9wb3B1cF9hZGRcIj7noa7lrpo8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJwb3B1cF9jYW5jZWxcIiBjbGFzcz1cImJ0bl9wb3B1cF9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdW5pLXBvcHVwPlxyXG5cdFx0PC92aWV3PlxuICAgIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbW9kdWxlczp7XHJcblx0QmFzZTY0LFxyXG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcclxuXHQgIHRpdGxlOifmlrDlop4nLFxuICAgICAgcGFyYW06IHt9LFxyXG5cdCAgZWRpdF9pbml0YWxfZXZlbnQ6XCJcIiwgIC8v5by556qX5Yid5aeL5YyW5LqL5Lu2SURcclxuXHQgIGVkaXRfb2tfZXZlbnQ6XCJcIiwgICAgICAvL+W8ueeql+eCueWHu09LIOinpuWPkeS6i+S7tklEXHJcblx0ICBlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50OlwiXCIsICAvL+mAieaLqee7hOaIkOWvueixoeaXtuiwg+eUqFxyXG5cdCAgZWRpdF9jb21wb3NlX2Nsc19pZDpcIlwiLFxyXG5cdCAgZ2xvYmFsX2F0dHI6W10sXHJcblx0ICByZWZkYXRhc3RvcmU6IFtdLFx0ICAgLy/lvJXnlKjmlbDmja7lrZjlgqjljLovLyB7YXR0cjonR19QUkpfJyArIGJpbmRhdHRyICsgJ19JRCcsIHZhbHVlOmluZm8uaWR9XHJcblx0ICBzY2FuQ29kZVZhbDpcIlwiLFxyXG5cdCAgc3ViQ2xhc3NBdHRyTGlzdDpbXSxcclxuXHQgIHN1YlBhbmVsTGlzdDpbXSxcclxuXHQgIHN1YkNsYXNzR3JpZFN0eWxlOltdLFxyXG5cdCAgcG9wdXBUeXBlOlwiY2VudGVyXCIsXHJcblx0ICBjaGVja19saXN0Ont9LFxyXG5cdCAgXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBoZWFkX3N0eWxlZGVmOntcclxuXHRcdGZvcm06e1xyXG5cdFx0XHRpdGVtczpbXVxyXG5cdFx0fVxyXG5cdCAgfSxcbiAgICB9O1xuICB9LFxyXG4gIG9uTG9hZChvcHRpb25zKSB7XHJcblx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZX0pOyAvL+iuvue9rumhtumDqOagh+mimCBcclxuXHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHR0aGlzLiRkYXRhLnRpdGxlID0gdGhpcy4kZGF0YS5wYXJhbS5BZGRfQnRuTmFtZT90aGlzLiRkYXRhLnBhcmFtLkFkZF9CdG5OYW1lOm9wdGlvbnMudGl0bGVuYW1lOyAvL+iuvue9ruaMiemSruaWh+Wtl1xyXG5cdFxyXG5cdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdCAvL+iOt+WPluaVsOaNruexu+eahOiHquWumuS5ieihqOWNleWPguaVsFxyXG5cdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsdGhpcy5wYXJhbS5VSV9TdHlsZS5JRCk7XHJcblx0XHJcblx0Ly/pobXpnaLliJ3lp4vljJbojrflj5bnhKbngrlcclxuXHQvLyB0aGlzLmZvY3VzTWF0ZXJpYT10cnVlOyBcclxuICB9LFx0XG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihlbGUudXNlRGljdD09dHJ1ZSl7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdCAgICAgICAgYXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LGluZGV4LCdtYXN0Jyk7XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxuICAgIGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHR0aGlzLmRhdGE9W107XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdGRpY3RfbmFtZTogZGljdC5uYW1lXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RHZXRJbmZvJyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9PntcclxuXHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRpZih0eXBlPT0nbWFzdCcpe1xyXG5cdFx0XHRcdFx0dmFyIGxpc3Q9W107XHJcblx0XHRcdFx0XHR2YXIgaXRlbU5hbWU9Jyc7XHJcblx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5kaWN0X2l0ZW1fbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHQgICAgaWYoaXRlbS5pc19kZWZhdWx0PT0nMScpXHJcblx0XHRcdFx0XHQgICAgICAgIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdFx0ICAgIGxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHQgICAgICAgIHRleHQ6aXRlbS52YWx1ZSxcclxuXHRcdFx0XHRcdCAgICAgICAgdmFsdWU6aXRlbS5uYW1lLFxyXG5cdFx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQvL+aciem7mOiupOWAvO+8jOaYvuekuum7mOiupOWAvFxyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHRcdC8vICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHQvLyB0aGlzLiRzdG9yZS5jb21taXQoXCJjbGFzc0F0dHJMaXN0XCIsICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHQvLyB0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0F0dHJMaXN0XCIsICR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHRvbnRhcChpdGVtKXsgLy/miavnoIHlip/og71cclxuXHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdFx0aWYoaXRlbS5vbGR2YWx1ZSAhPSByZXN1bHQuZGVjb2RlZGF0YSl7XHJcblx0XHRcdCAgICBpdGVtLm9sZHZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0aXRlbS52YWx1ZSA9IHJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IHJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHRcdGlmKHJlc3VsdC5kZWNvZGVkYXRhKXsgLy/nrKzkuIDkuKrovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdCR0aGlzLmZvY3VzTWF0ZXJpYSA9IHRydWU7IC8v5Yid5aeL5YyW77yM56ys5LqM5Liq6L6T5YWl5qGGZm9jdXPlsZ7mgKdcclxuXHRcdFx0XHRcdC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdC8vIFx0JHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IC8v56ys5LqM5Liq6L6T5YWl5qGG6I635Y+W54Sm54K5XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdH0sMTAwMCk7XHJcblx0XHRcdFx0XHQvLyB9LDUwMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBldmVudGlkID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQuaWQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHQgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0ICAgICAgICB2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0ICAgICAgICBcdGF0dHI6IGEsXHJcblx0XHRcdCAgICAgICAgXHR2YWw6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdCAgICAgICAgfSkpO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdCAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0ICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHQgICAgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdCAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHQgICAgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdCAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0ICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0ICAgICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0XHQgICBkYXRhSnNvbjpbXSxcclxuXHRcdFx0ICAgICAgICB9XHJcblx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgJycpO1xyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH0sXHJcblx0b25ldmVudChpdGVtKXtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdGl0ZW0udmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0dmFyIGV2ZW50aWQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudC5pZDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0ICAgICAgICB2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdCAgICAgICAgLy8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0ICAgICAgICB2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgXHRhdHRyOiBhLFxyXG5cdFx0ICAgICAgICBcdHZhbDogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgICAgfSkpO1xyXG5cdFx0XHQgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdCAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0XHQgICAgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0ICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdCAgICAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHQgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0ICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdCAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHQgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0ICAgZGF0YUpzb246W10sXHJcblx0XHRcdCAgICB9XHJcblx0XHRcdCAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBkYXRhX2F0dHIpO1xyXG5cdFx0ICAgIH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdH0sXHJcblx0b25jaGFuZ2UoaXRlbSkge1xyXG5cdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0aWYoaXRlbS5vbGR2YWx1ZSAhPSBpdGVtLnZhbHVlKXtcclxuXHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBldmVudGlkID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQuaWQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xyXG5cdFx0ICAgICAgICB2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdCAgICAgICAgLy8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0ICAgICAgICB2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgXHRhdHRyOiBhLFxyXG5cdFx0ICAgICAgICBcdHZhbDogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgICAgfSkpO1xyXG5cdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdCAgICAgICAgXHRkYXRhSnNvbjpbXVxyXG5cdFx0ICAgICAgICB9XHJcblx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0ICAgIH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdH0sXHJcblx0b25Nb2RlbFZhbHVlKGl0ZW0pIHsgLy/nu5HlrppNb2RlbOWAvFxyXG5cdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcclxuXHRcdGlmKCFvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuWQjuWbvuagh+eCueWHu+S6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZighb25TdWZmaXhDbGlja0V2ZW50LmlkKXtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5ZCO5Zu+5qCH54K55Ye75Zue6LCD5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0J1xyXG5cdFx0Ly8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xyXG5cdFx0dGhpcy4kcmVmcy5wb3B1cC5vcGVuKCR0aGlzLnBvcHVwVHlwZSk7XHJcblx0XHRcclxuXHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCwgJycsIG9uU3VmZml4Q2xpY2tFdmVudC5pZCwgaXRlbSk7XHJcblx0fSxcclxuXHRwb3B1cENoYW5nZShlKSB7XHJcblx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XHJcblx0fSxcclxuXHRjaGVja0NoYW5nZShlKXsgLy/lvLnmoYZjaGVja+mAieaLqVxyXG5cdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XHJcblx0XHR2YXIgaW5kZXggPSBlLnRhcmdldC5kYXRhc2V0LmluZGV4O1xyXG5cdFx0dmFyIGlzY2hlY2sgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s7XHJcblx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdC8vIHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1bXTtcclxuXHRcdGlmKHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5tdWx0aXBsZV9jaG9pY2U9PVwiMFwiKXsgLy/liKTmlq3ml7bljZXpgInov5jmmK/lpJrpgIlcclxuXHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xyXG5cdFx0XHRcdGRhdGFbaV0uY2hlY2s9ZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGRhdGFbaW5kZXhdLmNoZWNrPWlzY2hlY2s/ZmFsc2U6dHJ1ZTtcclxuXHRcdHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1kYXRhO1xyXG5cdFx0XHJcblx0fSxcclxuXHRwb3B1cF9jYW5jZWwoZSl7IC8v5by55qGG5Y+W5raIXHJcblx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XHJcblx0fSxcclxuXHRwb3B1cF9zYXZhKGUpeyAvL+W8ueahhuehruWumlxyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBpdGVtcyA9ICR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XHJcblx0XHR2YXIgZGF0YT1bXTtcclxuXHRcdHZhciBuYW1lPVwiXCI7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmKGl0ZW1zW2ldLmNoZWNrPT10cnVlKXtcclxuXHRcdFx0XHRpZihuYW1lKVxyXG5cdFx0XHRcdFx0bmFtZSs9JzsnO1xyXG5cdFx0XHRcdG5hbWUrPWl0ZW1zW2ldLm5hbWU7XHJcblx0XHRcdFx0ZGF0YS5wdXNoKHtpZDppdGVtc1tpXS5pZCxuYW1lOml0ZW1zW2ldLm5hbWV9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYoISR0aGlzLiRkYXRhLnBvcHVwUGFyYW0pe1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJwb3B1cFBhcmFt5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dmFyIGZpZWxkSWQgPSAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtLml0ZW0uZmllbGRJZDtcclxuXHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IG5hbWU7XHJcblx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0aWYoYXR0ci5maWVsZElkPT1maWVsZElkKXtcclxuXHRcdFx0XHRhdHRyLnZhbHVlID0gbmFtZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9ICR0aGlzLiRkYXRhLnBvcHVwUGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcclxuXHRcdHZhciBpbmZvID0ge1xyXG5cdFx0ICAgIGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXHJcblx0XHQgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0ICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgcm9iamlkOiAnJyxcclxuXHRcdCAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0ICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0ICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0ICAgIGF0dHI6ICR0aGlzLiRkYXRhLnBvcHVwUGFyYW0ucmVxLFxyXG5cdFx0ICAgIGRhdGFKc29uOiBkYXRhXHJcblx0XHR9XHJcblx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgJHRoaXMuJGRhdGEucG9wdXBQYXJhbS5kYXRhX2F0dHIpO1xyXG5cdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xyXG5cdH0sXHJcblx0XHJcblx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXHJcblx0XHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHQgICAgbWFzdGVyOiB7XHJcblx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXHJcblx0XHQgICAgfVxyXG5cdFx0fTtcclxuXHRcdGlmKGRhdGFfYXR0cil7XHJcblx0XHRcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XHJcblx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXHJcblx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLC8v5b2T5YmN5pWw5o2u57G7aWRcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZGF0YV9hdHRyKSB7XHJcblx0XHRcdCAgICBlbnZpcm9tZW50LmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxyXG5cdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXHJcblx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXHJcblx0XHRcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxyXG5cdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXHJcblx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xyXG5cdFx0XHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXHJcblx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdC8vICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcclxuXHRcdC8vICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQvLyAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBcIlwiLFxyXG5cdFx0Ly8gXHRnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0ciksIGRhdGFKc29uOkpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pXHJcblx0XHQvLyB9XHJcblx0XHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHRpZihpbmZvLmRhdGFKc29uKVxyXG5cdFx0XHRpbmZvLmRhdGFKc29uID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShpbmZvLmRhdGFKc29uKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdHZhciBvYmpfYXR0cj17fTtcclxuXHRcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xyXG5cdFx0fSk7XHJcblx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZCA9ICd7JytpbmZvLmV2ZW50aWQrJ30nO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcclxuXHRcdCAgY2xhc3NfbmFtZTogJycsXHJcblx0XHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcclxuXHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxyXG5cdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcclxuXHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXHJcblx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxyXG5cdFx0ICBkYXRhX2pzb246IGluZm8uZGF0YUpzb24sXHJcblx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxyXG5cdFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXHJcblx0XHQgIGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHRcdH07XHJcblx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHQvLyByZXR1cm47XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xyXG5cdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XHJcblx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcclxuXHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBpZihhdHRyLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiQ05fU19WQUxVRVwiOnZhbCxcInRleHRcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLmRpY3QgPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYXR0ci5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIkNOX1NfVkFMVUVcIjp2YWwsXCJ0ZXh0XCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wuZGljdCA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbY107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8v5Yik5pat6KGo5Y2V6YeM5piv5ZCm5pyJ6L+U5Zue5a2X5q6177yM5rKh5pyJ5bCx6KOF6L295YiwbW9kZWzph4zvvIzngrnlh7vnoa7lrprmj5DkuqTnmoTml7blgJnluKbkuIrov5nkupvmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbcmVzdWx0W2ldLmF0dHJdPT11bmRlZmluZWQpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbcmVzdWx0W2ldLmF0dHJdPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/liKTmlq3mmK/lkKbmmK/moIXmoLzooajljZVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKGF0dHIuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHIuZmllbGRJZF0gPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoYXR0ci5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBhdHRyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2NvbC5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciA9IGRhdGEuYWN0aW9uW2ldLnZhbHVlIHx8IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gdmFyIGhlYWRfc3R5bGVkZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCR0aGlzLmhlYWRfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdC8vICR0aGlzLmhlYWRfc3R5bGVkZWY9W107XHJcblx0XHRcdFx0XHQvLyAkdGhpcy5oZWFkX3N0eWxlZGVmID0gaGVhZF9zdHlsZWRlZjtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCR0aGlzLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdC8v5Yik5pat6KGo5Y2V6YeM5piv5ZCm5pyJ6L+U5Zue5a2X5q6177yM5rKh5pyJ5bCx6KOF6L295YiwbW9kZWzph4zvvIzngrnlh7vnoa7lrprmj5DkuqTnmoTml7blgJnluKbkuIrov5nkupvmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09PXVuZGVmaW5lZCl7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW3Jlc3VsdFtpXS5hdHRyXT1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQvL+WIpOaWreaYr+WQpuaYr+agheagvOihqOWNlVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYoYXR0ci5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGlmKGF0dHIuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLm9sZHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyLmZpZWxkSWRdID1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgYXR0ci5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2NvbC5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHREYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGV2ZW50aWQsZGF0YV9hdHRyLGJ1dHRvbl9jYWxsYmFjayxpdGVtKXtcclxuXHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdCAgICB9XHJcblx0XHR9O1xyXG5cdFx0dmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHR2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0YXR0cjogYSxcclxuXHRcdFx0dmFsOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0fSkpO1xyXG5cdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcclxuXHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXHJcblx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xyXG5cdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcclxuXHRcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWUgfSk7XHJcblx0XHQgICAgICAgIH1cclxuXHRcdCAgICB9XHJcblx0XHR9XHJcblx0XHR2YXIgZXh0aW5mbyA9IGVudmlyb21lbnQ7XHJcblx0XHRleHRpbmZvLmVkaXRfZGxnID0ge1xyXG5cdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6NcclxuXHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLC8v5b2T5YmN5pWw5o2u57G7aWRcclxuXHRcdH1cclxuXHRcdC8vIHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdC8vIFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXHJcblx0XHQvLyBcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsIG9iamlkOiAnJyxhdHRyOiBKU09OLnN0cmluZ2lmeShyZXEpLCBcclxuXHRcdC8vIFx0ZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZXh0aW5mbyksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxyXG5cdFx0Ly8gfVxyXG5cdFx0ZXh0aW5mbyA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZXh0aW5mbykpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0cmVxLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XHJcblx0XHR9KTtcclxuXHRcdGlmKCFldmVudGlkLmluY2x1ZGVzKCd7JykpIGV2ZW50aWQ9ICd7JysgZXZlbnRpZCArJ30nO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdCAgZWRfdHlwZTogXCIwXCIsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0ICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0ICBjbGFzc19uYW1lOiAnJyxcclxuXHRcdCAgZXZlbnRfaWQ6IGV2ZW50aWQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgZGF0YV9qc29uOiAnJyxcclxuXHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdCAgZXh0X2luZm86IGV4dGluZm8sXHJcblx0XHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcclxuXHRcdCAgaW5wdXRfcGFyYW06ICcnLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHJldHVybjtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZiAoZGF0YSAhPSBcIlwiKSB7XHJcblx0XHRcdFx0XHR2YXIgYWN0aW9ucyA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ucyk7XHJcblx0XHRcdFx0XHRpZiAoYWN0aW9ucykge1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9uc1tpXTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBlbnZpcm9tZW50ID0gSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wYW5lbCcpIHtcclxuXHRcdFx0XHRcdFx0XHQgICB2YXIgZCA9IGRpYWxvZyh7XHJcblx0XHRcdFx0XHRcdFx0XHQgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXHJcblx0XHRcdFx0XHRcdFx0ICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0ICAgZC5zaG93KCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBzdHlsZSA9IHZhbC5zdHlsZTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHN0eWxlID09ICd1c2VyJyA/ICfpgInmi6nkurrlkZgnIDogc3R5bGUgPT0gJ2RlcGFydG1lbnQnID8gJ+mAieaLqemDqOmXqCcgOiBzdHlsZSA9PSAncm9sZScgPyAn6YCJ5oup6KeS6ImyJyA6ICcnXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtPXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbTogaXRlbSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9hdHRyOmRhdGFfYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRzOntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBwYXJhbS5yZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlucHV0cGFyYW1ldGVyOiBkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBwYXJhbS5kYXRhX2F0dHIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHRcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2RhdGFfcXVlcnlfZGxnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGQgPSBkaWFsb2coe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZC5zaG93KCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRcdFx0XHRcdGlmKHZhbC5jb21tb25fZGxnX2lkID09ICdjaGVja19saXN0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kZGF0YS5jaGVja19saXN0PSB2YWwuY29uZmlnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgaWYodmFsLmNvbmZpZy5hcHBlYXJfc3R5bGUgPT0gJ3NpZGVzbGlwJykgLy/liKTmlq3mmK/lkKbmmK/kvqfmu5FcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAncmlnaHQnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBvcHVwVHlwZSA9ICdjZW50ZXInXHJcblx0XHRcdFx0XHRcdFx0XHQgICAvLyBvcGVuIOaWueazleS8oOWFpeWPguaVsCDnrYnlkIzlnKggdW5pLXBvcHVwIOe7hOS7tuS4iue7keWumiB0eXBl5bGe5oCnXHJcblx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kcmVmcy5wb3B1cC5vcGVuKCR0aGlzLiRkYXRhLnBvcHVwVHlwZSk7XHJcblx0XHRcdFx0XHRcdFx0XHQgICB2YXIgcG9wdXBQYXJhbT17XHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW06IGl0ZW0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFfYXR0cjpkYXRhX2F0dHJcclxuXHRcdFx0XHRcdFx0XHRcdCAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgICR0aGlzLiRkYXRhLnBvcHVwUGFyYW09IHBvcHVwUGFyYW07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wcm9qZWN0X3F1ZXJ5X2RsZycpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSk7XHJcblx0XHRcdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5tdWxpdF9zZWxlY3QpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHByaVJlbCA9ICctMSc7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5YWo6YOo55u45YWzJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzAnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR6LSf6LSj55qE6aG555uuJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzEnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzInO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Y+C5LiO55qEJyB8fCBhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LliqDnmoQnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMyc7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNCc7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbV89e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtOiBpdGVtLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VsUHJqL2luZGV4P3JlbGF0aW9uPScrcHJpUmVsKycmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbV8pLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHBhcmFtLml0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tfZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIyXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiBkYXRhWzBdLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJjbHNpZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IHBhcmFtLnJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhSnNvbjpbXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBkID0gZGlhbG9nKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdGQuc2hvdygpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHQvL+ehruWumlxyXG5cdHNhdmEoKXtcclxuXHRcdC8vIGlmICh0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQpXHJcblx0XHQvLyBcdHRoaXMuT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKTtcclxuXHRcdC8vIGVsc2VcclxuXHRcdFx0dGhpcy5hZGQoKTtcclxuXHR9LFxyXG5cdGFkZCgpe1xyXG5cdFx0dW5pLnNob3dMb2FkaW5nKHtcclxuXHRcdFx0dGl0bGU6XCLliqDovb3kuK0uLi5cIixcclxuXHRcdFx0bWFzazp0cnVlXHJcblx0XHR9KTtcclxuXHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0Y29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0Ly8gdmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQvLyBcdG5hbWU6IGEsXHJcblx0XHQvLyBcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0Ly8gfSkpO1xyXG5cdFxyXG5cdFx0dmFyIGVudmlyb21lbnQgPSB7XHJcblx0XHQgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHQgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXHJcblx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXHJcblx0XHQgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICAgbWFzdGVyOiB7XHJcblx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCwgXHJcblx0XHQgICAgIH1cclxuXHRcdH07XHJcblx0XHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdFxyXG5cdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0Ly8gdmFyIGRhdGFJbmZvPXtcclxuXHRcdC8vICAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcclxuXHRcdC8vICAgICByZXE6IEpTT04uc3RyaW5naWZ5KHJlcSksIHVwZmlsZTogSlNPTi5zdHJpbmdpZnkoW10pLCBwb3N0X2RhdGE6IEpTT04uc3RyaW5naWZ5KHt9KSxcclxuXHRcdC8vICAgICBjb21wb3NlOiBKU09OLnN0cmluZ2lmeShbXSksIHJlZmRhdGFzdG9yZTogSlNPTi5zdHJpbmdpZnkoW10pLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgXHJcblx0XHQvLyBcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcclxuXHRcdC8vIH07XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRtYXN0ZXJfY2xzX2lkOicnLFxyXG5cdFx0XHRtYXN0ZXJfb2JqX2lkOicnLFxyXG5cdFx0XHRjcmVhdG9yOicnLFxyXG5cdFx0XHRjcmVhdG9yX25hbWU6JycsXHJcblx0XHRcdG5vdF90cmlnZ2VyX2V2ZW50OicnLFxyXG5cdFx0XHR1cGRhdGVfZXhpc3Q6JycsXHJcblx0XHRcdHBvc3RfcHJvY2VzczonJyxcclxuXHRcdFx0ZXh0X2luZm86IGVudmlyb21lbnQsXHJcblx0XHRcdG9ial9hdHRyOiBvYmpfYXR0clxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHJldHVyblxyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2NyZWF0ZURhdGFPYmonLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IHN1Y2Nlc3MucmVzdWx0O1xyXG5cdFx0XHRcdC8vIGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXt9XHJcblx0XHRcdFx0aWYoc3VjY2Vzcy5yZXN1bHQuYWN0aW9uKXtcclxuXHRcdFx0XHRcdHZhciBhY3Rpb24gPSBKU09OLnBhcnNlKHN1Y2Nlc3MucmVzdWx0LmFjdGlvbik7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb24pO1xyXG5cdFx0XHRcdFx0aWYoYWN0aW9uLnJldD09JzAnKXtcclxuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDon5omn6KGM6ISa5pys5aSx6LSl77yMJyArIGFjdGlvbi5yZXN1bHQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChhY3Rpb24uaW5mbykge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDon5omn6KGM6ISa5pys5aSx6LSl77yMJyArIGFjdGlvbi5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZihhY3Rpb24ucmVzdWx0X3R5cGU9PScwJyl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6YWN0aW9uLnJlc3VsdCxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcclxuXHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdC8vIFwie1wicmV0XCI6MCwgXCJyZXN1bHRfdHlwZVwiOjAsIFwicmVzdWx0XCI6XCLliJvlu7rmiJDlip8xMjMxMjMxMjNcIixcImluZm9cIjpcIlwifVwiXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTpcIuWIm+W7uuaIkOWKn++8gVwiLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xyXG5cdFx0XHRcdC8v5Yi35pawXHJcblx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDE4XzI/cGFyYW09JytKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdGNhbmNlbChlKXsgLy/lj5bmtohcclxuXHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHRkZWx0YToxIC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0fSk7XHJcblx0fSxcclxuICB9LFxufTtcbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      }\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.param = JSON.parse(options.param);\n    this.$data.title = this.$data.param.Add_BtnName ? this.$data.param.Add_BtnName : options.titlename; //设置按钮文字\n\n    __f__(\"log\", this.$data.param, \" at pages/modal/3018_2.vue:586\");\n    //获取数据类的自定义表单参数\n    this.Head_UIStyleGetInfo(this.param.DataCls.id, this.param.UI_Style.ID);\n\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var _$this$head_styledef$;\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.head_styledef);\n                    $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n                        return _regenerator.default.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                ele.show = true;\n                                if (!(ele.useDict == true)) {\n                                  _context.next = 4;\n                                  break;\n                                }\n                                _context.next = 4;\n                                return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 4:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n                      return function (_x, _x2) {\n                        return _ref.apply(this, arguments);\n                      };\n                    }());\n                    if (((_$this$head_styledef$ = $this.head_styledef.event) === null || _$this$head_styledef$ === void 0 ? void 0 : _$this$head_styledef$.length) > 0) {\n                      $this.head_styledef.event.forEach( /*#__PURE__*/function () {\n                        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(a) {\n                          return _regenerator.default.wrap(function _callee2$(_context2) {\n                            while (1) {\n                              switch (_context2.prev = _context2.next) {\n                                case 0:\n                                  if (!(a.event_id == \"initial\")) {\n                                    _context2.next = 3;\n                                    break;\n                                  }\n                                  _context2.next = 3;\n                                  return _this.loadInitEvent(a.scrip_id);\n                                case 3:\n                                case \"end\":\n                                  return _context2.stop();\n                              }\n                            }\n                          }, _callee2);\n                        }));\n                        return function (_x3) {\n                          return _ref2.apply(this, arguments);\n                        };\n                      }());\n                    }\n                  } else {\n                    uni.showModal({\n                      title: \"错误1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3);\n      }))();\n    },\n    DictGetInfo: function DictGetInfo(dict, index, type) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                //Mobox3得到得到字典信息字典项列表\n                _this2.data = [];\n                $this = _this2;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this2.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(success) {\n                    var list, itemName, attr;\n                    return _regenerator.default.wrap(function _callee4$(_context4) {\n                      while (1) {\n                        switch (_context4.prev = _context4.next) {\n                          case 0:\n                            __f__(\"log\", success, \" at pages/modal/3018_2.vue:644\");\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                list = [];\n                                itemName = '';\n                                success.result.dict_item_list.forEach(function (item) {\n                                  if (item.is_default == '1') itemName = item.name;\n                                  list.push({\n                                    text: item.value,\n                                    value: item.name\n                                  });\n                                });\n                                //有默认值,显示默认值\n                                if (itemName) {\n                                  $this.head_styledef.form.items[index].value = itemName;\n                                  attr = $this.head_styledef.form.items[index].fieldId;\n                                  $this.head_styledef.form.model[attr] = itemName;\n                                }\n                                $this.head_styledef.form.items[index].dict = list;\n                                // $this.head_styledef.form.items[index].dictitem=success.result;\n                                // this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\n                              } else {\n                                // $this.$data.subClassAttrList[index].attr_list[key].dictitem=success.result;\n                                // this.$store.commit(\"subClassAttrList\", $this.$data.subClassAttrList);\n                              }\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 2:\n                          case \"end\":\n                            return _context4.stop();\n                        }\n                      }\n                    }, _callee4);\n                  }));\n                  return function (_x4) {\n                    return _ref3.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5);\n      }))();\n    },\n    loadInitEvent: function loadInitEvent(eventid) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                $this = _this3;\n                if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n                dataInfo = {\n                  ed_type: 0,\n                  start_transaction: true,\n                  class_id: _this3.param.DataCls.id,\n                  event_id: eventid\n                };\n                __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:688\");\n                // return;\n                _this3.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n                  __f__(\"log\", success, \" at pages/modal/3018_2.vue:691\");\n                  if (success.err_code == 0) {\n                    var data = success.result;\n                    if (data.ret != 0) {\n                      var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n                      if (data.ret == 801) uni.showModal({\n                        title: '提示',\n                        content: tip,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });else uni.showModal({\n                        title: '提示',\n                        content: tip + ',提示:' + data.ret,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      return false;\n                    } else {\n                      var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n                      if (tip) uni.showModal({\n                        title: '提示',\n                        content: tip,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      var actionlist = data.action;\n                      if (actionlist) {\n                        __f__(\"log\", actionlist, \" at pages/modal/3018_2.vue:705\");\n                        for (var i = 0; i < actionlist.length; i++) {\n                          var action = actionlist[i];\n                          if (action.action_type == 'set_dlg_attr') {\n                            var result = action.value;\n                            for (var i = 0; i < result.length; i++) {\n                              if (result[i].choice_list) {\n                                for (var c = 0; c < $this.head_styledef.form.items.length; c++) {\n                                  var attr = $this.head_styledef.form.items[c];\n                                  if (attr.name != 'Layout') {\n                                    if (attr.fieldId == result[i].attr) {\n                                      var dictItemList = [];\n                                      for (var d in result[i].choice_list) {\n                                        var val = result[i].choice_list[d];\n                                        dictItemList.push({\n                                          \"CN_S_NAME\": val,\n                                          \"CN_S_VALUE\": val,\n                                          \"text\": val,\n                                          \"value\": val\n                                        });\n                                      }\n                                      attr.dict = dictItemList;\n                                    }\n                                  } else if (attr.name == 'Layout') {\n                                    attr.setting.colList.forEach(function (col) {\n                                      if (col) {\n                                        if (col.fieldId == result[i].attr) {\n                                          var dictItemList = [];\n                                          for (var d in result[i].choice_list) {\n                                            var val = result[i].choice_list[d];\n                                            dictItemList.push({\n                                              \"CN_S_NAME\": val,\n                                              \"CN_S_VALUE\": val,\n                                              \"text\": val,\n                                              \"value\": val\n                                            });\n                                          }\n                                          col.dict = dictItemList;\n                                        }\n                                      }\n                                    });\n                                  }\n                                }\n                              }\n                              for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                                var attr = $this.$data.head_styledef.form.items[c];\n                                // console.log(attr[j].Name+'=='+result[i].attr);\n                                //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据\n                                if ($this.head_styledef.form.model[result[i].attr] == undefined) {\n                                  $this.head_styledef.form.model[result[i].attr] = result[i].value;\n                                }\n                                //判断是否是栅格表单\n                                if (attr.name != 'Layout') {\n                                  if (attr.fieldId == result[i].attr) {\n                                    attr.value = '';\n                                    attr.oldvalue = '';\n                                    attr.value = result[i].value;\n                                    attr.oldvalue = result[i].value;\n                                    $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                                  }\n                                } else if (attr.name == 'Layout') {\n                                  attr.setting.colList.forEach(function (col) {\n                                    if (col) {\n                                      if (col.fieldId == result[i].attr) {\n                                        col.value = '';\n                                        col.oldvalue = '';\n                                        col.value = result[i].value;\n                                        col.oldvalue = result[i].value;\n                                        $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                                      }\n                                    }\n                                  });\n                                }\n                              }\n                              var length = 0;\n                              if (!$this.$data.refdatastore.filter(function (s) {\n                                return result[i].attr == s.attr;\n                              }).length) {\n                                length = 1;\n                                $this.$data.refdatastore.push(result[i]);\n                              }\n                              if (length == 0) {\n                                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                                    $this.$data.refdatastore[j].value = result[i].value;\n                                  }\n                                }\n                              }\n                            }\n                          } else if (data.action[i].action_type == 'set_dlg_attr_show') {\n                            var result = action.value;\n                            result.forEach( /*#__PURE__*/function () {\n                              var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(attr, key) {\n                                return _regenerator.default.wrap(function _callee7$(_context7) {\n                                  while (1) {\n                                    switch (_context7.prev = _context7.next) {\n                                      case 0:\n                                        $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                                          var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(ele, index) {\n                                            return _regenerator.default.wrap(function _callee6$(_context6) {\n                                              while (1) {\n                                                switch (_context6.prev = _context6.next) {\n                                                  case 0:\n                                                    //判断是否是栅格表单\n                                                    if (ele.name != 'Layout') {\n                                                      if (ele.fieldId == attr.attr) {\n                                                        ele.show = attr.show;\n                                                      }\n                                                    } else if (ele.name == 'Layout') {\n                                                      ele.setting.colList.forEach(function (col) {\n                                                        if (col) {\n                                                          if (col.fieldId == attr.attr) {\n                                                            col.show = attr.show;\n                                                          }\n                                                        }\n                                                      });\n                                                    }\n                                                  case 1:\n                                                  case \"end\":\n                                                    return _context6.stop();\n                                                }\n                                              }\n                                            }, _callee6);\n                                          }));\n                                          return function (_x7, _x8) {\n                                            return _ref5.apply(this, arguments);\n                                          };\n                                        }());\n                                      case 1:\n                                      case \"end\":\n                                        return _context7.stop();\n                                    }\n                                  }\n                                }, _callee7);\n                              }));\n                              return function (_x5, _x6) {\n                                return _ref4.apply(this, arguments);\n                              };\n                            }());\n                            var head_styledef = JSON.parse(JSON.stringify($this.$data.head_styledef));\n                            $this.$data.head_styledef = [];\n                            $this.$data.head_styledef = head_styledef;\n                            // console.log($this.$data.head_styledef);\n                          } else {\n                            uni.showModal({\n                              title: \"提示\",\n                              content: \"执行初始化事件失败:\" + item.action_type + '此action尚未处理!',\n                              showCancel: false,\n                              confirmText: \"取消\"\n                            });\n                          }\n                        }\n                      }\n                    }\n                  } else {\n                    uni.showModal({\n                      title: \"错误3\",\n                      content: \"执行初始化事件失败:\" + success.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误3.1\",\n                    content: \"执行初始化事件失败:\" + ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 5:\n              case \"end\":\n                return _context8.stop();\n            }\n          }\n        }, _callee8);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this4 = this;\n      //扫码功能\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        uni.hideKeyboard();\n        var $this = _this4;\n        __f__(\"log\", item, \" at pages/modal/3018_2.vue:830\");\n        if (item.oldvalue != result.decodedata) {\n          item.oldvalue = result.decodedata;\n          item.value = result.decodedata;\n          var attr = item.fieldId;\n          $this.head_styledef.form.model[attr] = result.decodedata;\n          if (result.decodedata) {\n            //第一个输入框不为空\n            $this.focusMateria = true; //初始化,第二个输入框focus属性\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //第二个输入框获取焦点\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 1000);\n            // },500);\n          }\n\n          var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n          if (eventid) {\n            var obj_attr = _this4.head_styledef.form.model;\n            // console.log(obj_attr);\n            var req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                val: obj_attr[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: _this4.$data.param.DataCls.id,\n              objid: \"\",\n              attr: req,\n              dataJson: []\n            };\n            _this4.DataObjRunCustomEvent(info, '');\n          }\n        }\n      });\n    },\n    onevent: function onevent(item) {\n      // console.log(e.target);\n      var $this = this;\n      __f__(\"log\", item, \" at pages/modal/3018_2.vue:874\");\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        item.value = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        //子数据类扫码区事件脚本\n        var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n        if (eventid) {\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              val: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.DataCls.id,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info, data_attr);\n        }\n      }\n    },\n    onchange: function onchange(item) {\n      __f__(\"log\", item, \" at pages/modal/3018_2.vue:907\");\n      var $this = this;\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              val: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.DataCls.id,\n            objid: \"\",\n            attr: req,\n            dataJson: []\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onModelValue: function onModelValue(item) {\n      //绑定Model值\n      var attr = item.fieldId;\n      this.head_styledef.form.model[attr] = item.value;\n    },\n    classAttr_extButton: function classAttr_extButton(item) {\n      var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n      var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n\n      if (!onSuffixClickCallbackEvent.id) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"后图标点击事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!onSuffixClickEvent.id) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"后图标点击回调为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      this.$data.popupType = 'right';\n      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n      this.$refs.popup.open($this.popupType);\n      this.DataObjRunCustomEvent_Return(onSuffixClickCallbackEvent.id, '', onSuffixClickEvent.id, item);\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3018_2.vue:962\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定\n      var $this = this;\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (!$this.$data.popupParam) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"popupParam为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var fieldId = $this.$data.popupParam.item.fieldId;\n      $this.head_styledef.form.model[attr] = name;\n      for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n        var attr = $this.$data.head_styledef.form.items[c];\n        if (attr.fieldId == fieldId) {\n          attr.value = name;\n        }\n      }\n      __f__(\"log\", data, \" at pages/modal/3018_2.vue:1008\");\n      var callback_eventid = $this.$data.popupParam.button_callback.trim();\n      var info = {\n        eventid: callback_eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: $this.$data.param.DataCls.id,\n        objid: \"\",\n        attr: $this.$data.popupParam.req,\n        dataJson: data\n      };\n      $this.DataObjRunCustomEvent(info, $this.$data.popupParam.data_attr);\n      this.$refs.popup.close();\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.DataCls.id,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.DataCls.id // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg = {\n          type: 'small',\n          //小窗口\n          class_id: this.$data.param.DataCls.id //当前数据类id\n        };\n\n        if (data_attr) {\n          enviroment.edit_dlg.form_control = {\n            //所属的表单控件\n            name: data_attr.Name,\n            //字段属性\n            text: data_attr.DispName,\n            //显示文本\n            group_name: data_attr.GroupName,\n            //属性组\n            type: data_attr.Type,\n            //字段类型\n            readonly: data_attr.ReadOnly,\n            //是否只读\n            button_img: data_attr.button_img,\n            //引用按钮的图标\n            button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n          };\n        }\n      }\n\n      // var dataInfo = {\n      //     edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //     rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //     attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: \"\",\n      // \tglobal_attr: JSON.stringify(this.$data.global_attr), dataJson:JSON.stringify(info.dataJson)\n      // }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var input_param = _base.default.encode(JSON.stringify(info.attr)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: true,\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: input_param\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:1091\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018_2.vue:1094\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3018_2.vue:1108\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.head_styledef.form.items.length; c++) {\n                        var attr = $this.head_styledef.form.items[c];\n                        if (attr.name != 'Layout') {\n                          if (attr.fieldId == result[i].attr) {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"CN_S_VALUE\": val,\n                                \"text\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr.dict = dictItemList;\n                          }\n                        } else if (attr.name == 'Layout') {\n                          attr.setting.colList.forEach(function (col) {\n                            if (col) {\n                              if (col.fieldId == result[i].attr) {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"CN_S_VALUE\": val,\n                                    \"text\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                col.dict = dictItemList;\n                              }\n                            }\n                          });\n                        }\n                      }\n                    }\n                    for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                      var attr = $this.$data.head_styledef.form.items[c];\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据\n                      if ($this.head_styledef.form.model[result[i].attr] == undefined) {\n                        $this.head_styledef.form.model[result[i].attr] = result[i].value;\n                      }\n                      //判断是否是栅格表单\n                      if (attr.name != 'Layout') {\n                        if (attr.fieldId == result[i].attr) {\n                          attr.value = '';\n                          attr.oldvalue = '';\n                          attr.value = result[i].value;\n                          attr.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                        }\n                      } else if (attr.name == 'Layout') {\n                        attr.setting.colList.forEach(function (col) {\n                          if (col) {\n                            if (col.fieldId == result[i].attr) {\n                              col.value = '';\n                              col.oldvalue = '';\n                              col.value = result[i].value;\n                              col.oldvalue = result[i].value;\n                              $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                            }\n                          }\n                        });\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            // var head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n            // $this.head_styledef=[];\n            // $this.head_styledef = head_styledef;\n            __f__(\"log\", $this.head_styledef, \" at pages/modal/3018_2.vue:1196\");\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                  var attr = $this.$data.head_styledef.form.items[c];\n                  //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据\n                  if ($this.head_styledef.form.model[result[i].attr] == undefined) {\n                    $this.head_styledef.form.model[result[i].attr] = result[i].value;\n                  }\n                  //判断是否是栅格表单\n                  if (attr.name != 'Layout') {\n                    if (attr.fieldId == result[i].attr) {\n                      attr.value = '';\n                      attr.oldvalue = '';\n                      attr.value = result[i].value;\n                      attr.oldvalue = result[i].value;\n                      $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                    }\n                  } else if (attr.name == 'Layout') {\n                    attr.setting.colList.forEach(function (col) {\n                      if (col) {\n                        if (col.fieldId == result[i].attr) {\n                          col.value = '';\n                          col.oldvalue = '';\n                          col.value = result[i].value;\n                          col.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                        }\n                      }\n                    });\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, item) {\n      var _this5 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.DataCls.id,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.DataCls.id // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var req = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          val: obj_attr[a] || \"\"\n        };\n      });\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'val': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.DataCls.id //当前数据类id\n      };\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.DataCls.id, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: true,\n        class_id: this.$data.param.DataCls.id,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: obj_attr,\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: '',\n        compose_info: '',\n        ext_info: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:1319\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018_2.vue:1322\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data != \"\") {\n              var actions = data.action;\n              __f__(\"log\", actions, \" at pages/modal/3018_2.vue:1336\");\n              if (actions) {\n                for (var i = 0; i < actions.length; i++) {\n                  var action = actions[i];\n                  var val = action.value;\n                  var enviroment = JSON.stringify(enviroment);\n                  if (action.action_type == 'open_panel') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_select_userdlg') {\n                    var style = val.style;\n                    // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                    var $this = _this5;\n                    var param = {\n                      item: item,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    uni.navigateTo({\n                      url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          // console.log(param);\n                          __f__(\"log\", data, \" at pages/modal/3018_2.vue:1365\");\n                          var callback_eventid = param.button_callback.trim();\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"0\",\n                            projectid: '',\n                            rclsid: '',\n                            robjid: '',\n                            userlogin: '',\n                            clsid: $this.$data.param.DataCls.id,\n                            objid: \"\",\n                            attr: param.req,\n                            inputparameter: data,\n                            dataJson: []\n                          };\n                          $this.DataObjRunCustomEvent(info, param.data_attr);\n                        }\n                      }\n                    });\n                  } else if (action.action_type == 'open_data_query_dlg') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_common_dlg') {\n                    var $this = _this5;\n                    if (val.common_dlg_id == 'check_list') {\n                      $this.$data.check_list = val.config;\n                      if (val.config.appear_style == 'sideslip')\n                        //判断是否是侧滑\n                        $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                      // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                      $this.$refs.popup.open($this.$data.popupType);\n                      var popupParam = {\n                        item: item,\n                        button_callback: button_callback,\n                        req: req,\n                        data_attr: data_attr\n                      };\n                      $this.$data.popupParam = popupParam;\n                    }\n                  } else if (action.action_type == 'open_project_query_dlg') {\n                    //console.log(action.value.select_range);\n                    //console.log(action.value.mulit_select);\n                    var priRel = '-1';\n                    if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                    var $this = _this5;\n                    var param_ = {\n                      item: item,\n                      button_callback: button_callback,\n                      req: req\n                    };\n                    uni.navigateTo({\n                      url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          var attr = param.item.fieldId;\n                          $this.head_styledef.form.model[attr] = data[0].ID + ';' + data[0].Name;\n\n                          // $this.$data.classAttrList[param.index].Attr[param.iindex].Value=data[0].Name;\n                          // $this.$data.classAttrList[param.index].Attr[param.iindex].ValID=data[0].ID+';'+data[0].Name;\n                          var callback_eventid = param.button_callback.trim();\n                          if (callback_eventid) {\n                            var info = {\n                              eventid: callback_eventid,\n                              edtype: \"2\",\n                              projectid: data[0].ID,\n                              rclsid: \"\",\n                              robjid: \"\",\n                              userlogin: \"\",\n                              clsid: $this.$data.param.DataCls.id,\n                              objid: \"\",\n                              attr: param.req,\n                              dataJson: []\n                            };\n                            $this.DataObjRunCustomEvent(info);\n                          }\n                        }\n                      }\n                    });\n                  } else {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  }\n                }\n              }\n            } else {\n              uni.showModal({\n                title: \"提示5.2\",\n                content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    //确定\n    sava: function sava() {\n      // if (this.$data.edit_ok_event)\n      // \tthis.OKDataObjRunCustomEvent();\n      // else\n      this.add();\n    },\n    add: function add() {\n      var _this6 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var obj_attr = this.head_styledef.form.model;\n      __f__(\"log\", obj_attr, \" at pages/modal/3018_2.vue:1498\");\n      // var req = Object.keys(obj_attr).map((a) => ({\n      // \tname: a,\n      // \tvalue: obj_attr[a] || \"\",\n      // }));\n\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.DataCls.id,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.DataCls.id\n        }\n      };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n\n      // console.log(obj_attr);\n      // var dataInfo={\n      //     class_id: this.$data.param.DataCls.id, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      var dataInfo = {\n        class_id: this.$data.param.DataCls.id,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3018_2.vue:1535\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3018_2.vue:1538\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          // if(result.result_type == 0){}\n          if (success.result.action) {\n            var action = JSON.parse(success.result.action);\n            __f__(\"log\", action, \" at pages/modal/3018_2.vue:1545\");\n            if (action.ret == '0') {\n              if (action.ret != 0) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.result,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.info) {\n                uni.showModal({\n                  title: \"提示\",\n                  content: '执行脚本失败,' + action.info,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return;\n              }\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3018_2?param=' + JSON.stringify(_this6.$data.param) + \"&titlename=\" + _this6.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3018_2.vue:1572\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAxOF8yLnZ1ZSJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiQmFzZTY0IiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0IiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsIm9uTG9hZCIsIm9wdGlvbnMiLCJ1bmkiLCJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLCJ0aXRsZW5hbWUiLCIkZGF0YSIsIkpTT04iLCJwYXJzZSIsIkFkZF9CdG5OYW1lIiwiSGVhZF9VSVN0eWxlR2V0SW5mbyIsIkRhdGFDbHMiLCJpZCIsIlVJX1N0eWxlIiwiSUQiLCJtZXRob2RzIiwiY2xhc3NfaWQiLCJzdHlsZV9pZCIsIiR0aGlzIiwiZGF0YUluZm8iLCJ1aV9zdHlsZV9pZCIsIiRzdG9yZSIsImRpc3BhdGNoIiwidGhlbiIsInJldCIsImVycl9jb2RlIiwic3R5bGVkZWYiLCJyZXN1bHQiLCJzdHlsZV9kZWYiLCJyZXBsYWNlIiwiaW5jbHVkZXMiLCJkZWNvZGUiLCJmb3JFYWNoIiwiZWxlIiwiaW5kZXgiLCJzaG93IiwidXNlRGljdCIsIkRpY3RHZXRJbmZvIiwiYmluZCIsImRpY3QiLCJldmVudCIsImxlbmd0aCIsImEiLCJldmVudF9pZCIsImxvYWRJbml0RXZlbnQiLCJzY3JpcF9pZCIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJlcnJfbXNnIiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwiY2F0Y2giLCJleCIsImVyck1zZyIsInR5cGUiLCJkaWN0X2lkIiwiZGljdF9uYW1lIiwibmFtZSIsInN1Y2Nlc3MiLCJsaXN0IiwiaXRlbU5hbWUiLCJkaWN0X2l0ZW1fbGlzdCIsIml0ZW0iLCJpc19kZWZhdWx0IiwicHVzaCIsInRleHQiLCJ2YWx1ZSIsImF0dHIiLCJmaWVsZElkIiwibW9kZWwiLCJldmVudGlkIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwidGlwIiwiZXJyX2luZm8iLCJqb2luIiwiaW5mbyIsImFjdGlvbmxpc3QiLCJhY3Rpb24iLCJpIiwiYWN0aW9uX3R5cGUiLCJjaG9pY2VfbGlzdCIsImMiLCJkaWN0SXRlbUxpc3QiLCJkIiwidmFsIiwic2V0dGluZyIsImNvbExpc3QiLCJjb2wiLCJ1bmRlZmluZWQiLCJvbGR2YWx1ZSIsImZpbHRlciIsInMiLCJqIiwia2V5Iiwic3RyaW5naWZ5Iiwib250YXAiLCJnZXRBcHAiLCJvblNjYW4iLCJoaWRlS2V5Ym9hcmQiLCJkZWNvZGVkYXRhIiwic2V0VGltZW91dCIsIm9uQ2hhbmdlRXZlbnQiLCJvYmpfYXR0ciIsInJlcSIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJjbHNpZCIsIm9iamlkIiwiZGF0YUpzb24iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJvbmV2ZW50IiwiZGF0YV9hdHRyIiwib25jaGFuZ2UiLCJvbk1vZGVsVmFsdWUiLCJjbGFzc0F0dHJfZXh0QnV0dG9uIiwib25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQiLCJvblN1ZmZpeENsaWNrRXZlbnQiLCIkcmVmcyIsInBvcHVwIiwib3BlbiIsIkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4iLCJwb3B1cENoYW5nZSIsImUiLCJjaGVja0NoYW5nZSIsInRhcmdldCIsImRhdGFzZXQiLCJpc2NoZWNrIiwibXVsdGlwbGVfY2hvaWNlIiwiY2hlY2siLCJwb3B1cF9jYW5jZWwiLCJjbG9zZSIsInBvcHVwX3NhdmEiLCJwb3B1cFBhcmFtIiwiY2FsbGJhY2tfZXZlbnRpZCIsImJ1dHRvbl9jYWxsYmFjayIsInRyaW0iLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJtYXN0ZXIiLCJlZGl0X2RsZyIsImZvcm1fY29udHJvbCIsIk5hbWUiLCJEaXNwTmFtZSIsImdyb3VwX25hbWUiLCJHcm91cE5hbWUiLCJUeXBlIiwicmVhZG9ubHkiLCJSZWFkT25seSIsImJ1dHRvbl9pbWciLCJidXR0b25fdG9vbHRpcCIsImVuY29kZSIsImlucHV0X3BhcmFtIiwiY2xhc3NfbmFtZSIsImV2ZW50X25hbWUiLCJkYXRhX29ial9pZCIsInByal9pZCIsInJlZl9jbHNfaWQiLCJyZWxfb2JqX2lkIiwidXNlcl9sb2dpbiIsImRhdGFfanNvbiIsImNvbXBvc2VfaW5mbyIsImV4dF9pbmZvIiwiZXh0aW5mbyIsImFjdGlvbnMiLCJkaWFsb2ciLCJzdHlsZSIsIm5hdmlnYXRlVG8iLCJ1cmwiLCJldmVudHMiLCJBZGRQZXIiLCJpbnB1dHBhcmFtZXRlciIsImNvbW1vbl9kbGdfaWQiLCJjb25maWciLCJhcHBlYXJfc3R5bGUiLCJwcmlSZWwiLCJzZWxlY3RfcmFuZ2UiLCJwYXJhbV8iLCJzYXZhIiwiYWRkIiwic2hvd0xvYWRpbmciLCJtYXNrIiwibWFzdGVyX2Nsc19pZCIsIm1hc3Rlcl9vYmpfaWQiLCJjcmVhdG9yIiwiY3JlYXRvcl9uYW1lIiwibm90X3RyaWdnZXJfZXZlbnQiLCJ1cGRhdGVfZXhpc3QiLCJwb3N0X3Byb2Nlc3MiLCJoaWRlTG9hZGluZyIsInJlc3VsdF90eXBlIiwic2hvd1RvYXN0IiwiaWNvbiIsImR1cmF0aW9uIiwicmVkaXJlY3RUbyIsImNhbmNlbCIsIm5hdmlnYXRlQmFjayIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFxaUJBO0FBcmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsZUFHZTtFQUNiQSxPQUFPLEVBQUM7SUFDVEMsTUFBTSxF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QUM7VUFDRjtRQUNELENBQUMsTUFBSTtVQUNKb0IsR0FBRyxDQUFDMkMsU0FBUyxDQUFDO1lBQUMvRCxLQUFLLEVBQUMsSUFBSTtZQUFDZ0UsT0FBTyxFQUFDVyxPQUFPLENBQUNWLE9BQU87WUFBQ0MsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3RGO01BQ0QsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWixhQUFZQSxFQUFFO1FBQ2RqRCxHQUFHLENBQUNpTSxXQUFXLEVBQUU7UUFDakJqTSxHQUFHLENBQUMyQyxTQUFTLENBQUM7VUFBQy9ELEtBQUssRUFBQyxJQUFJO1VBQUNnRSxPQUFPLEVBQUNLLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDSixVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDaEYsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNEd0osTUFBTSxrQkFBQ3pFLENBQUMsRUFBQztNQUFFO01BQ1Y5SCxHQUFHLENBQUN3TSxZQUFZLENBQUM7UUFDaEJDLEtBQUssRUFBQyxDQUFDLENBQUM7TUFDVCxDQUFDLENBQUM7SUFDSDtFQUNDO0FBQ0YsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjE1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcblxyXG5pbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1vZHVsZXM6e1xyXG5cdEJhc2U2NCxcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+aWsOWinicsXHJcbiAgICAgIHBhcmFtOiB7fSxcclxuXHQgIGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXHJcblx0ICBlZGl0X29rX2V2ZW50OlwiXCIsICAgICAgLy/lvLnnqpfngrnlh7tPSyDop6blj5Hkuovku7ZJRFxyXG5cdCAgZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudDpcIlwiLCAgLy/pgInmi6nnu4TmiJDlr7nosaHml7bosIPnlKhcclxuXHQgIGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcclxuXHQgIGdsb2JhbF9hdHRyOltdLFxyXG5cdCAgcmVmZGF0YXN0b3JlOiBbXSxcdCAgIC8v5byV55So5pWw5o2u5a2Y5YKo5Yy6Ly8ge2F0dHI6J0dfUFJKXycgKyBiaW5kYXR0ciArICdfSUQnLCB2YWx1ZTppbmZvLmlkfVxyXG5cdCAgc2NhbkNvZGVWYWw6XCJcIixcclxuXHQgIHN1YkNsYXNzQXR0ckxpc3Q6W10sXHJcblx0ICBzdWJQYW5lbExpc3Q6W10sXHJcblx0ICBzdWJDbGFzc0dyaWRTdHlsZTpbXSxcclxuXHQgIHBvcHVwVHlwZTpcImNlbnRlclwiLFxyXG5cdCAgY2hlY2tfbGlzdDp7fSxcclxuXHQgIFxyXG5cdCAgZm9jdXNNYXRlcmlhOmZhbHNlLFxyXG5cdCAgaGVhZF9zdHlsZWRlZjp7XHJcblx0XHRmb3JtOntcclxuXHRcdFx0aXRlbXM6W11cclxuXHRcdH1cclxuXHQgIH0sXHJcbiAgICB9O1xyXG4gIH0sXHJcbiAgb25Mb2FkKG9wdGlvbnMpIHtcclxuXHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuXHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxyXG5cdHRoaXMuJGRhdGEucGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xyXG5cdHRoaXMuJGRhdGEudGl0bGUgPSB0aGlzLiRkYXRhLnBhcmFtLkFkZF9CdG5OYW1lP3RoaXMuJGRhdGEucGFyYW0uQWRkX0J0bk5hbWU6b3B0aW9ucy50aXRsZW5hbWU7IC8v6K6+572u5oyJ6ZKu5paH5a2XXHJcblx0XHJcblx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0IC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0dGhpcy5IZWFkX1VJU3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uRGF0YUNscy5pZCx0aGlzLnBhcmFtLlVJX1N0eWxlLklEKTtcclxuXHRcclxuXHQvL+mhtemdouWIneWni+WMluiOt+WPlueEpueCuVxyXG5cdC8vIHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IFxyXG4gIH0sXHRcclxuICBtZXRob2RzOiB7XHJcbiAgICBhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0ZWxlLnNob3c9dHJ1ZTtcclxuXHRcdFx0XHQgICAgaWYoZWxlLnVzZURpY3Q9PXRydWUpeyAvL+WIpOaWrXVzZURpY3TmmK/lkKbkvb/nlKjlrZflhbhcclxuXHRcdFx0XHQgICAgICAgIGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCxpbmRleCwnbWFzdCcpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0aWYoJHRoaXMuaGVhZF9zdHlsZWRlZi5ldmVudD8ubGVuZ3RoPjApe1xyXG5cdFx0XHRcdCAgJHRoaXMuaGVhZF9zdHlsZWRlZi5ldmVudC5mb3JFYWNoKGFzeW5jIChhKT0+eyAgLy/liKTmlq3mmK/lkKbmmK/liJ3lp4vljJbkuovku7ZcclxuXHRcdFx0XHQgICAgaWYoYS5ldmVudF9pZCA9PSBcImluaXRpYWxcIil7XHJcblx0XHRcdFx0ICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdEV2ZW50KGEuc2NyaXBfaWQpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMVwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuICAgIGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHR0aGlzLmRhdGE9W107XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdGRpY3RfbmFtZTogZGljdC5uYW1lXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RHZXRJbmZvJyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9PntcclxuXHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRpZih0eXBlPT0nbWFzdCcpe1xyXG5cdFx0XHRcdFx0dmFyIGxpc3Q9W107XHJcblx0XHRcdFx0XHR2YXIgaXRlbU5hbWU9Jyc7XHJcblx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5kaWN0X2l0ZW1fbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHQgICAgaWYoaXRlbS5pc19kZWZhdWx0PT0nMScpXHJcblx0XHRcdFx0XHQgICAgICAgIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdFx0ICAgIGxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHQgICAgICAgIHRleHQ6aXRlbS52YWx1ZSxcclxuXHRcdFx0XHRcdCAgICAgICAgdmFsdWU6aXRlbS5uYW1lLFxyXG5cdFx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQvL+aciem7mOiupOWAvO+8jOaYvuekuum7mOiupOWAvFxyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHRcdC8vICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHQvLyB0aGlzLiRzdG9yZS5jb21taXQoXCJjbGFzc0F0dHJMaXN0XCIsICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHQvLyB0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0F0dHJMaXN0XCIsICR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRhc3luYyBsb2FkSW5pdEV2ZW50KGV2ZW50aWQpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdGlmKCFldmVudGlkLmluY2x1ZGVzKCd7JykpIGV2ZW50aWQgPSAneycrZXZlbnRpZCsnfSc7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG4gICAgICAgICAgZWRfdHlwZTogMCxcclxuICAgICAgICAgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgY2xhc3NfaWQ6IHRoaXMucGFyYW0uRGF0YUNscy5pZCxcclxuICAgICAgICAgIGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHJldHVybjtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2ldO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2NdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0ci5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKGF0dHIuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdHZhciBkaWN0SXRlbUxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJDTl9TX1ZBTFVFXCI6dmFsLFwidGV4dFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIuZGljdCA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGF0dHIubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBhdHRyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihjb2wuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRmb3IodmFyIGQgaW4gcmVzdWx0W2ldLmNob2ljZV9saXN0KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiQ05fU19WQUxVRVwiOnZhbCxcInRleHRcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5kaWN0ID0gZGljdEl0ZW1MaXN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/liKTmlq3ooajljZXph4zmmK/lkKbmnInov5Tlm57lrZfmrrXvvIzmsqHmnInlsLHoo4Xovb3liLBtb2RlbOmHjO+8jOeCueWHu+ehruWumuaPkOS6pOeahOaXtuWAmeW4puS4iui/meS6m+aVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09PXVuZGVmaW5lZCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL+WIpOaWreaYr+WQpuaYr+agheagvOihqOWNlVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgaWYoYXR0ci5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0ci5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGF0dHIuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbY29sLmZpZWxkSWRdID1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cl9zaG93Jykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5mb3JFYWNoKGFzeW5jIChhdHRyLGtleSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgLy/liKTmlq3mmK/lkKbmmK/moIXmoLzooajljZVcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlbGUuZmllbGRJZD09YXR0ci5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS5zaG93PWF0dHIuc2hvdztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNvbC5maWVsZElkPT1hdHRyLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbC5zaG93PWF0dHIuc2hvdztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaGVhZF9zdHlsZWRlZiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZiA9W107XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gaGVhZF9zdHlsZWRlZjtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmiafooYzliJ3lp4vljJbkuovku7blpLHotKXvvJpcIitpdGVtLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpcIuaJp+ihjOWIneWni+WMluS6i+S7tuWksei0pe+8mlwiK3N1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6XCLmiafooYzliJ3lp4vljJbkuovku7blpLHotKXvvJpcIitleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdFxyXG5cdFx0XHJcblx0b250YXAoaXRlbSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XHJcblx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gcmVzdWx0LmRlY29kZWRhdGEpe1xyXG5cdFx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IHJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHRcdGl0ZW0udmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSByZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHRpZihyZXN1bHQuZGVjb2RlZGF0YSl7IC8v56ys5LiA5Liq6L6T5YWl5qGG5LiN5Li656m6XHJcblx0XHRcdFx0XHQkdGhpcy5mb2N1c01hdGVyaWEgPSB0cnVlOyAvL+WIneWni+WMlu+8jOesrOS6jOS4qui+k+WFpeahhmZvY3Vz5bGe5oCnXHJcblx0XHRcdFx0XHQvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHQvLyBcdCR0aGlzLmZvY3VzTWF0ZXJpYT10cnVlOyAvL+esrOS6jOS4qui+k+WFpeahhuiOt+WPlueEpueCuVxyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcdFx0XHR9LDEwMDApO1xyXG5cdFx0XHRcdFx0Ly8gfSw1MDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50LmlkOyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0ICAgICAgICB2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0ICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHRcdCAgICAgICAgdmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdCAgICAgICAgXHRhdHRyOiBhLFxyXG5cdFx0XHQgICAgICAgIFx0dmFsOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHQgICAgICAgIH0pKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHQgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdCAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0ICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHQgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdCAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHQgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdCAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0ICAgZGF0YUpzb246W10sXHJcblx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sICcnKTtcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uZXZlbnQoaXRlbSl7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXHJcblx0XHRcdHZhciBldmVudGlkID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQuaWQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdCAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdCAgICAgICAgdmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQgICAgICAgIFx0YXR0cjogYSxcclxuXHRcdCAgICAgICAgXHR2YWw6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICAgIH0pKTtcclxuXHRcdFx0ICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHQgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0ICAgICAgIGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdCAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHQgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0ICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdCAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHQgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0ICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHQgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdCAgIGRhdGFKc29uOltdLFxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHQgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgZGF0YV9hdHRyKTtcclxuXHRcdCAgICB9XHJcblx0XHR9XHJcblx0XHRcclxuXHR9LFxyXG5cdG9uY2hhbmdlKGl0ZW0pIHtcclxuXHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgZXZlbnRpZCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50LmlkOyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdCAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdCAgICAgICAgdmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQgICAgICAgIFx0YXR0cjogYSxcclxuXHRcdCAgICAgICAgXHR2YWw6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICAgIH0pKTtcclxuXHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxyXG5cdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXHJcblx0XHQgICAgICAgIFx0ZGF0YUpzb246W11cclxuXHRcdCAgICAgICAgfVxyXG5cdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdCAgICB9XHJcblx0XHR9XHJcblx0XHRcclxuXHR9LFxyXG5cdG9uTW9kZWxWYWx1ZShpdGVtKSB7IC8v57uR5a6aTW9kZWzlgLxcclxuXHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdH0sXHJcblx0Y2xhc3NBdHRyX2V4dEJ1dHRvbihpdGVtKXtcclxuXHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0dmFyIG9uU3VmZml4Q2xpY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFxyXG5cdFx0aWYoIW9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5ZCO5Zu+5qCH54K55Ye75LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmKCFvblN1ZmZpeENsaWNrRXZlbnQuaWQpe1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLlkI7lm77moIfngrnlh7vlm57osIPkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAncmlnaHQnXHJcblx0XHQvLyBvcGVuIOaWueazleS8oOWFpeWPguaVsCDnrYnlkIzlnKggdW5pLXBvcHVwIOe7hOS7tuS4iue7keWumiB0eXBl5bGe5oCnXHJcblx0XHR0aGlzLiRyZWZzLnBvcHVwLm9wZW4oJHRoaXMucG9wdXBUeXBlKTtcclxuXHRcdFxyXG5cdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkLCAnJywgb25TdWZmaXhDbGlja0V2ZW50LmlkLCBpdGVtKTtcclxuXHR9LFxyXG5cdHBvcHVwQ2hhbmdlKGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKCflvZPliY3mqKHlvI/vvJonICsgZS50eXBlICsgJyznirbmgIHvvJonICsgZS5zaG93KTtcclxuXHR9LFxyXG5cdGNoZWNrQ2hhbmdlKGUpeyAvL+W8ueahhmNoZWNr6YCJ5oupXHJcblx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldC5kYXRhc2V0KTtcclxuXHRcdHZhciBpbmRleCA9IGUudGFyZ2V0LmRhdGFzZXQuaW5kZXg7XHJcblx0XHR2YXIgaXNjaGVjayA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaztcclxuXHRcdHZhciBkYXRhID0gdGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zO1xyXG5cdFx0Ly8gdGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPVtdO1xyXG5cdFx0aWYodGhpcy4kZGF0YS5jaGVja19saXN0Lm11bHRpcGxlX2Nob2ljZT09XCIwXCIpeyAvL+WIpOaWreaXtuWNlemAiei/mOaYr+WkmumAiVxyXG5cdFx0XHRmb3IodmFyIGkgaW4gZGF0YSl7XHJcblx0XHRcdFx0ZGF0YVtpXS5jaGVjaz1mYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZGF0YVtpbmRleF0uY2hlY2s9aXNjaGVjaz9mYWxzZTp0cnVlO1xyXG5cdFx0dGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPWRhdGE7XHJcblx0XHRcclxuXHR9LFxyXG5cdHBvcHVwX2NhbmNlbChlKXsgLy/lvLnmoYblj5bmtohcclxuXHRcdHRoaXMuJHJlZnMucG9wdXAuY2xvc2UoKTtcclxuXHR9LFxyXG5cdHBvcHVwX3NhdmEoZSl7IC8v5by55qGG56Gu5a6aXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdHZhciBkYXRhPVtdO1xyXG5cdFx0dmFyIG5hbWU9XCJcIjtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYoaXRlbXNbaV0uY2hlY2s9PXRydWUpe1xyXG5cdFx0XHRcdGlmKG5hbWUpXHJcblx0XHRcdFx0XHRuYW1lKz0nOyc7XHJcblx0XHRcdFx0bmFtZSs9aXRlbXNbaV0ubmFtZTtcclxuXHRcdFx0XHRkYXRhLnB1c2goe2lkOml0ZW1zW2ldLmlkLG5hbWU6aXRlbXNbaV0ubmFtZX0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZighJHRoaXMuJGRhdGEucG9wdXBQYXJhbSl7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcInBvcHVwUGFyYW3kuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHR2YXIgZmllbGRJZCA9ICR0aGlzLiRkYXRhLnBvcHVwUGFyYW0uaXRlbS5maWVsZElkO1xyXG5cdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gbmFtZTtcclxuXHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2NdO1xyXG5cdFx0XHRpZihhdHRyLmZpZWxkSWQ9PWZpZWxkSWQpe1xyXG5cdFx0XHRcdGF0dHIudmFsdWUgPSBuYW1lO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gJHRoaXMuJGRhdGEucG9wdXBQYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xyXG5cdFx0dmFyIGluZm8gPSB7XHJcblx0XHQgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcclxuXHRcdCAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0ICAgIHByb2plY3RpZDogJycsXHJcblx0XHQgICAgcmNsc2lkOiAnJyxcclxuXHRcdCAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHQgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHQgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHQgICAgYXR0cjogJHRoaXMuJGRhdGEucG9wdXBQYXJhbS5yZXEsXHJcblx0XHQgICAgZGF0YUpzb246IGRhdGFcclxuXHRcdH1cclxuXHRcdCR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCAkdGhpcy4kZGF0YS5wb3B1cFBhcmFtLmRhdGFfYXR0cik7XHJcblx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XHJcblx0fSxcclxuXHRcclxuXHREYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdCAgICB9XHJcblx0XHR9O1xyXG5cdFx0aWYoZGF0YV9hdHRyKXtcclxuXHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcclxuXHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6NcclxuXHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsLy/lvZPliY3mlbDmja7nsbtpZFxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkYXRhX2F0dHIpIHtcclxuXHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XHJcblx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcclxuXHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcclxuXHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXHJcblx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcclxuXHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XHJcblx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcclxuXHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXHJcblx0XHRcdCAgICB9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0Ly8gICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxyXG5cdFx0Ly8gICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcclxuXHRcdC8vICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6IFwiXCIsXHJcblx0XHQvLyBcdGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSwgZGF0YUpzb246SlNPTi5zdHJpbmdpZnkoaW5mby5kYXRhSnNvbilcclxuXHRcdC8vIH1cclxuXHRcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdGlmKGluZm8uZGF0YUpzb24pXHJcblx0XHRcdGluZm8uZGF0YUpzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XHJcblx0XHR9KTtcclxuXHRcdGlmKCFpbmZvLmV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgaW5mby5ldmVudGlkID0gJ3snK2luZm8uZXZlbnRpZCsnfSc7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcclxuXHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxyXG5cdFx0ICBjbGFzc19uYW1lOiAnJyxcclxuXHRcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcclxuXHRcdCAgZXZlbnRfbmFtZTogJycsXHJcblx0XHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxyXG5cdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXHJcblx0XHQgIHByal9pZDogaW5mby5wcm9qZWN0aWQsXHJcblx0XHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxyXG5cdFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcclxuXHRcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXHJcblx0XHQgIGRhdGFfanNvbjogaW5mby5kYXRhSnNvbixcclxuXHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdCAgZXh0X2luZm86IGVudmlyb21lbnQsXHJcblx0XHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcclxuXHRcdCAgaW5wdXRfcGFyYW06IGlucHV0X3BhcmFtLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHJldHVybjtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2ldO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2NdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0ci5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKGF0dHIuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdHZhciBkaWN0SXRlbUxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJDTl9TX1ZBTFVFXCI6dmFsLFwidGV4dFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIuZGljdCA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGF0dHIubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBhdHRyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihjb2wuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRmb3IodmFyIGQgaW4gcmVzdWx0W2ldLmNob2ljZV9saXN0KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiQ05fU19WQUxVRVwiOnZhbCxcInRleHRcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5kaWN0ID0gZGljdEl0ZW1MaXN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/liKTmlq3ooajljZXph4zmmK/lkKbmnInov5Tlm57lrZfmrrXvvIzmsqHmnInlsLHoo4Xovb3liLBtb2RlbOmHjO+8jOeCueWHu+ehruWumuaPkOS6pOeahOaXtuWAmeW4puS4iui/meS6m+aVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09PXVuZGVmaW5lZCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL+WIpOaWreaYr+WQpuaYr+agheagvOihqOWNlVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgaWYoYXR0ci5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0ci5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGF0dHIuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbY29sLmZpZWxkSWRdID1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyB2YXIgaGVhZF9zdHlsZWRlZiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoJHRoaXMuaGVhZF9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuaGVhZF9zdHlsZWRlZj1bXTtcclxuXHRcdFx0XHRcdC8vICR0aGlzLmhlYWRfc3R5bGVkZWYgPSBoZWFkX3N0eWxlZGVmO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJHRoaXMuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2NdO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly/liKTmlq3ooajljZXph4zmmK/lkKbmnInov5Tlm57lrZfmrrXvvIzmsqHmnInlsLHoo4Xovb3liLBtb2RlbOmHjO+8jOeCueWHu+ehruWumuaPkOS6pOeahOaXtuWAmeW4puS4iui/meS6m+aVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW3Jlc3VsdFtpXS5hdHRyXT09dW5kZWZpbmVkKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbcmVzdWx0W2ldLmF0dHJdPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdC8v5Yik5pat5piv5ZCm5piv5qCF5qC86KGo5Y2VXHJcblx0XHRcdFx0XHRcdFx0XHRpZihhdHRyLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgaWYoYXR0ci5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIub2xkdmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHIuZmllbGRJZF0gPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGF0dHIubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBhdHRyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihjb2wuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbY29sLmZpZWxkSWRdID1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGl0ZW0pe1xyXG5cdFx0dmFyIGVudmlyb21lbnQgPSB7XHJcblx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxyXG5cdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXHJcblx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0ICAgIG1hc3Rlcjoge1xyXG5cdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcclxuXHRcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxyXG5cdFx0ICAgIH1cclxuXHRcdH07XHJcblx0XHR2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdHZhciByZXEgPSBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHR2YWw6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHR9KSk7XHJcblx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xyXG5cdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcclxuXHRcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcclxuXHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XHJcblx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWwnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcclxuXHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIH1cclxuXHRcdH1cclxuXHRcdHZhciBleHRpbmZvID0gZW52aXJvbWVudDtcclxuXHRcdGV4dGluZm8uZWRpdF9kbGcgPSB7XHJcblx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xyXG5cdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsLy/lvZPliY3mlbDmja7nsbtpZFxyXG5cdFx0fVxyXG5cdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0Ly8gXHRlZHR5cGU6ICBcIjBcIiwgZXZlbnRpZDogZXZlbnRpZCwgcHJvamVjdGlkOiAnJyxyY2xzaWQ6ICcnLCByb2JqaWQ6ICcnLCB1c2VybG9naW46ICcnLCBcclxuXHRcdC8vIFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCwgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KHJlcSksIFxyXG5cdFx0Ly8gXHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShleHRpbmZvKSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXHJcblx0XHQvLyB9XHJcblx0XHRleHRpbmZvID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShleHRpbmZvKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgb2JqX2F0dHI9e307XHJcblx0XHRyZXEuZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdH0pO1xyXG5cdFx0aWYoIWV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgZXZlbnRpZD0gJ3snKyBldmVudGlkICsnfSc7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0ICBlZF90eXBlOiBcIjBcIixcclxuXHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHQgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogZXZlbnRpZCxcclxuXHRcdCAgZXZlbnRfbmFtZTogJycsXHJcblx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0ICBwcmpfaWQ6ICcnLFxyXG5cdFx0ICByZWZfY2xzX2lkOiAnJyxcclxuXHRcdCAgcmVsX29ial9pZDogJycsXHJcblx0XHQgIHVzZXJfbG9naW46ICcnLFxyXG5cdFx0ICBkYXRhX2pzb246ICcnLFxyXG5cdFx0ICBjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0ICBleHRfaW5mbzogZXh0aW5mbyxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogJycsXHJcblx0XHR9O1xyXG5cdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0Ly8gcmV0dXJuO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcclxuXHRcdFx0XHRcdHZhciBhY3Rpb25zID0gZGF0YS5hY3Rpb247XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25zKTtcclxuXHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25zW2ldO1xyXG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBhY3Rpb24udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3BhbmVsJykge1xyXG5cdFx0XHRcdFx0XHRcdCAgIHZhciBkID0gZGlhbG9nKHtcclxuXHRcdFx0XHRcdFx0XHRcdCAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0XHQgICB9KTtcclxuXHRcdFx0XHRcdFx0XHQgICBkLnNob3coKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlID0gdmFsLnN0eWxlO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcclxuXHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW09e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtOiBpdGVtLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2F0dHI6ZGF0YV9hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IHBhcmFtLnJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5wdXRwYXJhbWV0ZXI6IGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIHBhcmFtLmRhdGFfYXR0cik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcdFxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fZGF0YV9xdWVyeV9kbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZCA9IGRpYWxvZyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRkLnNob3coKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYodmFsLmNvbW1vbl9kbGdfaWQgPT0gJ2NoZWNrX2xpc3QnKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICR0aGlzLiRkYXRhLmNoZWNrX2xpc3Q9IHZhbC5jb25maWc7XHJcblx0XHRcdFx0XHRcdFx0XHQgICBpZih2YWwuY29uZmlnLmFwcGVhcl9zdHlsZSA9PSAnc2lkZXNsaXAnKSAvL+WIpOaWreaYr+WQpuaYr+S+p+a7kVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBvcHVwVHlwZSA9ICdyaWdodCc7XHJcblx0XHRcdFx0XHRcdFx0XHQgICBlbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ2NlbnRlcidcclxuXHRcdFx0XHRcdFx0XHRcdCAgIC8vIG9wZW4g5pa55rOV5Lyg5YWl5Y+C5pWwIOetieWQjOWcqCB1bmktcG9wdXAg57uE5Lu25LiK57uR5a6aIHR5cGXlsZ7mgKdcclxuXHRcdFx0XHRcdFx0XHRcdCAgICR0aGlzLiRyZWZzLnBvcHVwLm9wZW4oJHRoaXMuJGRhdGEucG9wdXBUeXBlKTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgIHZhciBwb3B1cFBhcmFtPXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbTogaXRlbSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9hdHRyOmRhdGFfYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJGRhdGEucG9wdXBQYXJhbT0gcG9wdXBQYXJhbTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3Byb2plY3RfcXVlcnlfZGxnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLm11bGl0X3NlbGVjdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcHJpUmVsID0gJy0xJztcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMCc7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHotJ/otKPnmoTpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMSc7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHliJvlu7rnmoQnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMic7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICczJztcclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWFs+azqOeahCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc0JztcclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeS4i+WxnueahOmhueebricpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc1JztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtXz17XHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW06IGl0ZW0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXFcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249JytwcmlSZWwrJyZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtXyksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gcGFyYW0uaXRlbS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja19ldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWR0eXBlOiBcIjJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogcGFyYW0ucmVxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFKc29uOltdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGQgPSBkaWFsb2coe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZC5zaG93KCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo1LjJcIixjb250ZW50OiAn6LCD55SoIGJlZm9yZV9jbGlja19idXR0b24g6ISa5pys6L+U5Zue56m677yMZXZlbnRfaWQnICsgZXZlbnRpZCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNVwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdFxyXG5cdC8v56Gu5a6aXHJcblx0c2F2YSgpe1xyXG5cdFx0Ly8gaWYgKHRoaXMuJGRhdGEuZWRpdF9va19ldmVudClcclxuXHRcdC8vIFx0dGhpcy5PS0RhdGFPYmpSdW5DdXN0b21FdmVudCgpO1xyXG5cdFx0Ly8gZWxzZVxyXG5cdFx0XHR0aGlzLmFkZCgpO1xyXG5cdH0sXHJcblx0YWRkKCl7XHJcblx0XHR1bmkuc2hvd0xvYWRpbmcoe1xyXG5cdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiLFxyXG5cdFx0XHRtYXNrOnRydWVcclxuXHRcdH0pO1xyXG5cdFx0dmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHRjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHQvLyB2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdC8vIFx0bmFtZTogYSxcclxuXHRcdC8vIFx0dmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQvLyB9KSk7XHJcblx0XHJcblx0XHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdCAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdCAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0ICAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5EYXRhQ2xzLmlkLCBcclxuXHRcdCAgICAgfVxyXG5cdFx0fTtcclxuXHRcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHQvLyB2YXIgZGF0YUluZm89e1xyXG5cdFx0Ly8gICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsIGRhdGFfb2JqX2lkOiAnJywgbWFzdGVyY2xzaWQ6ICcnLFxyXG5cdFx0Ly8gICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxyXG5cdFx0Ly8gICAgIGNvbXBvc2U6IEpTT04uc3RyaW5naWZ5KFtdKSwgcmVmZGF0YXN0b3JlOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBcclxuXHRcdC8vIFx0bm90X3RyaWdnZXJfc3lzX2V2ZW50OiAnJ1xyXG5cdFx0Ly8gfTtcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdGNsYXNzX25hbWU6JycsXHJcblx0XHRcdG1hc3Rlcl9jbHNfaWQ6JycsXHJcblx0XHRcdG1hc3Rlcl9vYmpfaWQ6JycsXHJcblx0XHRcdGNyZWF0b3I6JycsXHJcblx0XHRcdGNyZWF0b3JfbmFtZTonJyxcclxuXHRcdFx0bm90X3RyaWdnZXJfZXZlbnQ6JycsXHJcblx0XHRcdHVwZGF0ZV9leGlzdDonJyxcclxuXHRcdFx0cG9zdF9wcm9jZXNzOicnLFxyXG5cdFx0XHRleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdFx0b2JqX2F0dHI6IG9ial9hdHRyXHJcblx0XHR9O1xyXG5cdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0Ly8gcmV0dXJuXHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY3JlYXRlRGF0YU9iaicsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgcmVzdWx0ID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0Ly8gaWYocmVzdWx0LnJlc3VsdF90eXBlID09IDApe31cclxuXHRcdFx0XHRpZihzdWNjZXNzLnJlc3VsdC5hY3Rpb24pe1xyXG5cdFx0XHRcdFx0dmFyIGFjdGlvbiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5yZXN1bHQuYWN0aW9uKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbik7XHJcblx0XHRcdFx0XHRpZihhY3Rpb24ucmV0PT0nMCcpe1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aW9uLnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OifmiafooYzohJrmnKzlpLHotKXvvIwnICsgYWN0aW9uLnJlc3VsdCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5pbmZvKSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OifmiafooYzohJrmnKzlpLHotKXvvIwnICsgYWN0aW9uLmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXN1bHRfdHlwZT09JzAnKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xyXG5cdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0Ly8gXCJ7XCJyZXRcIjowLCBcInJlc3VsdF90eXBlXCI6MCwgXCJyZXN1bHRcIjpcIuWIm+W7uuaIkOWKnzEyMzEyMzEyM1wiLFwiaW5mb1wiOlwiXCJ9XCJcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe3RpdGxlOlwi5Yib5bu65oiQ5Yqf77yBXCIsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XHJcblx0XHRcdFx0Ly/liLfmlrBcclxuXHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsLzMwMThfMj9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0Ly8gdGhpcy5jbGFzc19hdHRyX2luaXQoKTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0Y2FuY2VsKGUpeyAvL+WPlua2iFxyXG5cdFx0dW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdGRlbHRhOjEgLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHR9KTtcclxuXHR9LFxyXG4gIH0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///150\n");
/***/ }),
/* 151 */
@@ -42046,389 +42058,471 @@
              attrs: { _i: "1-" + $30 },
            },
            [
              _c(
                "text",
                {
                  staticClass: _vm._$s("2-" + $30, "sc", "txt_title"),
                  style: _vm._$s("2-" + $30, "s", {
                    width: item.labelWidth + "px",
                  }),
                  attrs: { _i: "2-" + $30 },
                },
                [_vm._v(_vm._$s("2-" + $30, "t0-0", _vm._s(item.label)))]
              ),
              _vm._$s("3-" + $30, "i", item.name == "Select")
                ? _c("uni-data-select", {
                    class: _vm._$s(
                      "3-" + $30,
                      "c",
                      item.disabled ? "input-disabled" : ""
                    ),
                    attrs: {
                      id: "dv_select",
                      localdata: item.dict,
                      disabled: item.disabled,
                      clear: false,
                      _i: "3-" + $30,
                    },
                    on: {
                      change: function ($event) {
                        return _vm.onchange(item)
                      },
                    },
                    model: {
                      value: _vm._$s("3-" + $30, "v-model", item.value),
                      callback: function ($$v) {
                        _vm.$set(item, "value", $$v)
                      },
                      expression: "item.value",
                    },
                  })
                : _vm._e(),
              _vm._$s(
                "4-" + $30,
                "2-" + $30,
                "i",
                item.name == "Input" || item.name == "InputNumber"
                item.name != "Layout" && item.show == true
              )
                ? _c(
                    "view",
                    {
                      staticClass: _vm._$s("4-" + $30, "sc", "input-wrapper"),
                      attrs: { _i: "4-" + $30 },
                    },
                    [
                      _vm._$s("5-" + $30, "i", item.setting.prefix)
                        ? _c("text", {
                            staticClass: _vm._$s("5-" + $30, "sc", "uni-icon"),
                            class: _vm._$s("5-" + $30, "c", [
                              item.setting.prefix,
                            ]),
                            attrs: { _i: "5-" + $30 },
                      _c(
                        "text",
                        {
                          staticClass: _vm._$s("3-" + $30, "sc", "txt_title"),
                          style: _vm._$s("3-" + $30, "s", {
                            width: item.labelWidth + "px",
                          }),
                          attrs: { _i: "3-" + $30 },
                        },
                        [
                          _vm._v(
                            _vm._$s("3-" + $30, "t0-0", _vm._s(item.label))
                          ),
                        ]
                      ),
                      _vm._$s("4-" + $30, "i", item.name == "Select")
                        ? _c("uni-data-select", {
                            class: _vm._$s(
                              "4-" + $30,
                              "c",
                              item.disabled ? "input-disabled" : ""
                            ),
                            attrs: {
                              id: "dv_select",
                              localdata: item.dict,
                              disabled: item.disabled,
                              clear: false,
                              _i: "4-" + $30,
                            },
                            on: {
                              change: function ($event) {
                                return _vm.onchange(item)
                              },
                            },
                          })
                        : _vm._e(),
                      _c("input", {
                        directives: [
                          {
                            name: "model",
                            rawName: "v-model",
                            value: item.value,
                            expression: "item.value",
                          },
                        ],
                        staticClass: _vm._$s("6-" + $30, "sc", "uni-input"),
                        class: _vm._$s(
                          "6-" + $30,
                          "c",
                          item.disabled ? "input-disabled" : ""
                        ),
                        style: _vm._$s("6-" + $30, "s", {
                          width:
                            item.setting.prefix && item.setting.suffix
                              ? "78%"
                              : item.setting.prefix || item.setting.suffix
                              ? "87%"
                              : "96%",
                        }),
                        attrs: {
                          type: _vm._$s(
                            "6-" + $30,
                            "a-type",
                            item.name == "Input"
                              ? "text"
                              : item.name == "InputNumber"
                              ? "number"
                              : "text"
                          ),
                          disabled: _vm._$s(
                            "6-" + $30,
                            "a-disabled",
                            item.disabled
                          ),
                          placeholder: _vm._$s(
                            "6-" + $30,
                            "a-placeholder",
                            item.placeholder
                          ),
                          focus: _vm._$s(
                            "6-" + $30,
                            "a-focus",
                            _vm.focusMateria
                          ),
                          _i: "6-" + $30,
                        },
                        domProps: {
                          value: _vm._$s("6-" + $30, "v-model", item.value),
                        },
                        on: {
                          focus: function ($event) {
                            return _vm.ontap(item)
                          },
                          blur: function ($event) {
                            return _vm.onevent(item)
                          },
                          input: function ($event) {
                            if ($event.target.composing) {
                              return
                            }
                            _vm.$set(item, "value", $event.target.value)
                          },
                        },
                      }),
                      _vm._$s("7-" + $30, "i", item.setting.suffix)
                        ? _c("text", {
                            staticClass: _vm._$s("7-" + $30, "sc", "uni-icon"),
                            class: _vm._$s("7-" + $30, "c", [
                              item.setting.suffix,
                            ]),
                            attrs: { _i: "7-" + $30 },
                            on: {
                              click: function ($event) {
                                return _vm.onchange(item)
                            model: {
                              value: _vm._$s("4-" + $30, "v-model", item.value),
                              callback: function ($$v) {
                                _vm.$set(item, "value", $$v)
                              },
                              expression: "item.value",
                            },
                          })
                        : _vm._e(),
                    ]
                  )
                : _vm._e(),
              _vm._$s("8-" + $30, "i", item.name == "Textarea")
                ? _c(
                    "view",
                    {
                      staticClass: _vm._$s("8-" + $30, "sc", "input-wrapper"),
                      attrs: { _i: "8-" + $30 },
                    },
                    [
                      _c("textarea", {
                        staticClass: _vm._$s("9-" + $30, "sc", "uni-input"),
                        class: _vm._$s(
                          "9-" + $30,
                          "c",
                          item.disabled ? "input-disabled" : ""
                        ),
                        style: _vm._$s("9-" + $30, "s", { width: "96%" }),
                        attrs: {
                          value: _vm._$s("9-" + $30, "a-value", item.value),
                          placeholder: _vm._$s(
                            "9-" + $30,
                            "a-placeholder",
                            item.placeholder
                          ),
                          "data-index": _vm._$s(
                            "9-" + $30,
                            "a-data-index",
                            index
                          ),
                          disabled: _vm._$s(
                            "9-" + $30,
                            "a-disabled",
                            item.disabled
                          ),
                          _i: "9-" + $30,
                        },
                        on: {
                          blur: function ($event) {
                            return _vm.onModelValue(item)
                          },
                        },
                      }),
                    ]
                  )
                : _vm._e(),
              _vm._$s("10-" + $30, "i", item.name == "Checkbox")
                ? _c(
                    "checkbox-group",
                    {
                      staticClass: _vm._$s(
                        "10-" + $30,
                        "sc",
                        "check_rememberPwd"
                      ),
                      class: _vm._$s(
                        "10-" + $30,
                        "c",
                        item.disabled ? "input-disabled" : ""
                      ),
                      style: _vm._$s("10-" + $30, "s", {
                        "margin-left": "10rpx",
                      }),
                      attrs: {
                        disabled: _vm._$s(
                          "10-" + $30,
                          "a-disabled",
                          item.disabled
                        ),
                        "data-ischeck": _vm._$s(
                          "10-" + $30,
                          "a-data-ischeck",
                          item.value
                        ),
                        _i: "10-" + $30,
                      },
                      on: {
                        change: function ($event) {
                          return _vm.onModelValue(item)
                        },
                      },
                    },
                    [
                      _c("label", [
                        _c("checkbox", {
                          attrs: {
                            value: _vm._$s("12-" + $30, "a-value", item.value),
                            checked: _vm._$s(
                              "12-" + $30,
                              "a-checked",
                              item.value
                            ),
                            _i: "12-" + $30,
                          },
                        }),
                        _c("text", [
                          _vm._v(
                            _vm._$s("13-" + $30, "t0-0", _vm._s(item.label))
                          ),
                        ]),
                      ]),
                    ]
                  )
                : _vm._e(),
              _vm._$s("14-" + $30, "i", item.name == "Switch")
                ? _c("switch", {
                    class: _vm._$s(
                      "14-" + $30,
                      "c",
                      item.disabled ? "input-disabled" : ""
                    ),
                    style: _vm._$s("14-" + $30, "s", {
                      "margin-left": "10rpx",
                    }),
                    attrs: {
                      disabled: _vm._$s(
                        "14-" + $30,
                        "a-disabled",
                        item.disabled
                      ),
                      _i: "14-" + $30,
                    },
                    on: {
                      change: function ($event) {
                        return _vm.onModelValue(item)
                      },
                    },
                    model: {
                      value: _vm._$s("14-" + $30, "v-model", item.value),
                      callback: function ($$v) {
                        _vm.$set(item, "value", $$v)
                      },
                      expression: "item.value",
                    },
                  })
                : _vm._e(),
              _vm._$s(
                "15-" + $30,
                "i",
                item.name == "TimePicker" || item.name == "DatePicker"
              )
                ? _c(
                    "view",
                    {
                      staticClass: _vm._$s("15-" + $30, "sc", "input-wrapper"),
                      attrs: { _i: "15-" + $30 },
                    },
                    [
                      _c(
                        "picker",
                        {
                          staticClass: _vm._$s("16-" + $30, "sc", "date_iput"),
                          class: _vm._$s(
                            "16-" + $30,
                            "c",
                            item.disabled ? "input-disabled" : ""
                          ),
                          attrs: {
                            disabled: _vm._$s(
                              "16-" + $30,
                              "a-disabled",
                              item.disabled
                            ),
                            value: _vm._$s("16-" + $30, "a-value", item.value),
                            _i: "16-" + $30,
                          },
                          on: {
                            change: function ($event) {
                              return _vm.onModelValue(item)
                            },
                          },
                        },
                        [
                          _c(
                      _vm._$s(
                        "5-" + $30,
                        "i",
                        item.name == "Input" || item.name == "InputNumber"
                      )
                        ? _c(
                            "view",
                            {
                              staticClass: _vm._$s("17-" + $30, "sc", "picker"),
                              attrs: { _i: "17-" + $30 },
                              staticClass: _vm._$s(
                                "5-" + $30,
                                "sc",
                                "input-wrapper"
                              ),
                              attrs: { _i: "5-" + $30 },
                            },
                            [
                              _vm._v(
                                _vm._$s("17-" + $30, "t0-0", _vm._s(item.value))
                              _vm._$s("6-" + $30, "i", item.setting.prefix)
                                ? _c("text", {
                                    staticClass: _vm._$s(
                                      "6-" + $30,
                                      "sc",
                                      "uni-icon"
                                    ),
                                    class: _vm._$s("6-" + $30, "c", [
                                      item.setting.prefix,
                                    ]),
                                    attrs: { _i: "6-" + $30 },
                                    on: {
                                      change: function ($event) {
                                        return _vm.onchange(item)
                                      },
                                    },
                                  })
                                : _vm._e(),
                              _c("input", {
                                directives: [
                                  {
                                    name: "model",
                                    rawName: "v-model",
                                    value: item.value,
                                    expression: "item.value",
                                  },
                                ],
                                staticClass: _vm._$s(
                                  "7-" + $30,
                                  "sc",
                                  "uni-input"
                                ),
                                class: _vm._$s(
                                  "7-" + $30,
                                  "c",
                                  item.disabled ? "input-disabled" : ""
                                ),
                                style: _vm._$s("7-" + $30, "s", {
                                  width:
                                    item.setting.prefix && item.setting.suffix
                                      ? "78%"
                                      : item.setting.prefix ||
                                        item.setting.suffix
                                      ? "87%"
                                      : "96%",
                                }),
                                attrs: {
                                  type: _vm._$s(
                                    "7-" + $30,
                                    "a-type",
                                    item.name == "Input"
                                      ? "text"
                                      : item.name == "InputNumber"
                                      ? "number"
                                      : "text"
                                  ),
                                  disabled: _vm._$s(
                                    "7-" + $30,
                                    "a-disabled",
                                    item.disabled
                                  ),
                                  placeholder: _vm._$s(
                                    "7-" + $30,
                                    "a-placeholder",
                                    item.placeholder
                                  ),
                                  focus: _vm._$s(
                                    "7-" + $30,
                                    "a-focus",
                                    _vm.focusMateria
                                  ),
                                  _i: "7-" + $30,
                                },
                                domProps: {
                                  value: _vm._$s(
                                    "7-" + $30,
                                    "v-model",
                                    item.value
                                  ),
                                },
                                on: {
                                  focus: function ($event) {
                                    return _vm.ontap(item)
                                  },
                                  blur: function ($event) {
                                    return _vm.onevent(item)
                                  },
                                  input: function ($event) {
                                    if ($event.target.composing) {
                                      return
                                    }
                                    _vm.$set(item, "value", $event.target.value)
                                  },
                                },
                              }),
                              _vm._$s("8-" + $30, "i", item.setting.suffix)
                                ? _c("text", {
                                    staticClass: _vm._$s(
                                      "8-" + $30,
                                      "sc",
                                      "uni-icon"
                                    ),
                                    class: _vm._$s("8-" + $30, "c", [
                                      item.setting.suffix,
                                    ]),
                                    attrs: { _i: "8-" + $30 },
                                    on: {
                                      click: function ($event) {
                                        return _vm.onchange(item)
                                      },
                                    },
                                  })
                                : _vm._e(),
                            ]
                          )
                        : _vm._e(),
                      _vm._$s("9-" + $30, "i", item.name == "Textarea")
                        ? _c(
                            "view",
                            {
                              staticClass: _vm._$s(
                                "9-" + $30,
                                "sc",
                                "input-wrapper"
                              ),
                              attrs: { _i: "9-" + $30 },
                            },
                            [
                              _c("textarea", {
                                staticClass: _vm._$s(
                                  "10-" + $30,
                                  "sc",
                                  "uni-input"
                                ),
                                class: _vm._$s(
                                  "10-" + $30,
                                  "c",
                                  item.disabled ? "input-disabled" : ""
                                ),
                                style: _vm._$s("10-" + $30, "s", {
                                  width: "96%",
                                }),
                                attrs: {
                                  value: _vm._$s(
                                    "10-" + $30,
                                    "a-value",
                                    item.value
                                  ),
                                  placeholder: _vm._$s(
                                    "10-" + $30,
                                    "a-placeholder",
                                    item.placeholder
                                  ),
                                  "data-index": _vm._$s(
                                    "10-" + $30,
                                    "a-data-index",
                                    index
                                  ),
                                  disabled: _vm._$s(
                                    "10-" + $30,
                                    "a-disabled",
                                    item.disabled
                                  ),
                                  _i: "10-" + $30,
                                },
                                on: {
                                  blur: function ($event) {
                                    return _vm.onModelValue(item)
                                  },
                                },
                              }),
                            ]
                          )
                        : _vm._e(),
                      _vm._$s("11-" + $30, "i", item.name == "Checkbox")
                        ? _c(
                            "checkbox-group",
                            {
                              staticClass: _vm._$s(
                                "11-" + $30,
                                "sc",
                                "check_rememberPwd"
                              ),
                              class: _vm._$s(
                                "11-" + $30,
                                "c",
                                item.disabled ? "input-disabled" : ""
                              ),
                              style: _vm._$s("11-" + $30, "s", {
                                "margin-left": "10rpx",
                              }),
                              attrs: {
                                disabled: _vm._$s(
                                  "11-" + $30,
                                  "a-disabled",
                                  item.disabled
                                ),
                                "data-ischeck": _vm._$s(
                                  "11-" + $30,
                                  "a-data-ischeck",
                                  item.value
                                ),
                                _i: "11-" + $30,
                              },
                              on: {
                                change: function ($event) {
                                  return _vm.onModelValue(item)
                                },
                              },
                            },
                            [
                              _c("label", [
                                _c("checkbox", {
                                  attrs: {
                                    value: _vm._$s(
                                      "13-" + $30,
                                      "a-value",
                                      item.value
                                    ),
                                    checked: _vm._$s(
                                      "13-" + $30,
                                      "a-checked",
                                      item.value
                                    ),
                                    _i: "13-" + $30,
                                  },
                                }),
                                _c("text", [
                                  _vm._v(
                                    _vm._$s(
                                      "14-" + $30,
                                      "t0-0",
                                      _vm._s(item.label)
                                    )
                                  ),
                                ]),
                              ]),
                            ]
                          )
                        : _vm._e(),
                      _vm._$s("15-" + $30, "i", item.name == "Switch")
                        ? _c("switch", {
                            class: _vm._$s(
                              "15-" + $30,
                              "c",
                              item.disabled ? "input-disabled" : ""
                            ),
                            style: _vm._$s("15-" + $30, "s", {
                              "margin-left": "10rpx",
                            }),
                            attrs: {
                              disabled: _vm._$s(
                                "15-" + $30,
                                "a-disabled",
                                item.disabled
                              ),
                              _i: "15-" + $30,
                            },
                            on: {
                              change: function ($event) {
                                return _vm.onModelValue(item)
                              },
                            },
                            model: {
                              value: _vm._$s(
                                "15-" + $30,
                                "v-model",
                                item.value
                              ),
                              callback: function ($$v) {
                                _vm.$set(item, "value", $$v)
                              },
                              expression: "item.value",
                            },
                          })
                        : _vm._e(),
                      _vm._$s(
                        "16-" + $30,
                        "i",
                        item.name == "TimePicker" || item.name == "DatePicker"
                      )
                        ? _c(
                            "view",
                            {
                              staticClass: _vm._$s(
                                "16-" + $30,
                                "sc",
                                "input-wrapper"
                              ),
                              attrs: { _i: "16-" + $30 },
                            },
                            [
                              _c(
                                "picker",
                                {
                                  staticClass: _vm._$s(
                                    "17-" + $30,
                                    "sc",
                                    "date_iput"
                                  ),
                                  class: _vm._$s(
                                    "17-" + $30,
                                    "c",
                                    item.disabled ? "input-disabled" : ""
                                  ),
                                  attrs: {
                                    disabled: _vm._$s(
                                      "17-" + $30,
                                      "a-disabled",
                                      item.disabled
                                    ),
                                    value: _vm._$s(
                                      "17-" + $30,
                                      "a-value",
                                      item.value
                                    ),
                                    _i: "17-" + $30,
                                  },
                                  on: {
                                    change: function ($event) {
                                      return _vm.onModelValue(item)
                                    },
                                  },
                                },
                                [
                                  _c(
                                    "view",
                                    {
                                      staticClass: _vm._$s(
                                        "18-" + $30,
                                        "sc",
                                        "picker"
                                      ),
                                      attrs: { _i: "18-" + $30 },
                                    },
                                    [
                                      _vm._v(
                                        _vm._$s(
                                          "18-" + $30,
                                          "t0-0",
                                          _vm._s(item.value)
                                        )
                                      ),
                                    ]
                                  ),
                                ]
                              ),
                            ]
                          ),
                        ]
                      ),
                    ]
                          )
                        : _vm._e(),
                    ],
                    1
                  )
                : _vm._e(),
            ],
            1
            ]
          )
        }
      ),
      _c(
        "view",
        { staticClass: _vm._$s(18, "sc", "v-panel"), attrs: { _i: 18 } },
        { staticClass: _vm._$s(19, "sc", "v-panel"), attrs: { _i: 19 } },
        [
          _c(
            "div",
            {
              staticClass: _vm._$s(19, "sc", "panel_title"),
              attrs: { _i: 19 },
              staticClass: _vm._$s(20, "sc", "panel_title"),
              attrs: { _i: 20 },
            },
            [_vm._v(_vm._$s(19, "t0-0", _vm._s(_vm.param.Sub_Cls.Title)))]
            [_vm._v(_vm._$s(20, "t0-0", _vm._s(_vm.param.Sub_Cls.Title)))]
          ),
          _vm._$s(20, "i", _vm.param.Sub_Cls.Can_Add_Delete == true)
          _vm._$s(21, "i", _vm.param.Sub_Cls.Can_Add_Delete == true)
            ? _c(
                "view",
                {
                  staticClass: _vm._$s(20, "sc", "v-area class_attr_body"),
                  attrs: { _i: 20 },
                  staticClass: _vm._$s(21, "sc", "v-area class_attr_body"),
                  attrs: { _i: 21 },
                },
                [
                  _c("h4", [
                    _vm._v(_vm._$s(21, "t0-0", _vm._s(_vm.param.Sub_Cls.Name))),
                    _vm._v(_vm._$s(22, "t0-0", _vm._s(_vm.param.Sub_Cls.Name))),
                  ]),
                  _c(
                    "view",
                    {
                      staticClass: _vm._$s(22, "sc", "form-group"),
                      attrs: { _i: 22 },
                      staticClass: _vm._$s(23, "sc", "form-group"),
                      attrs: { _i: 23 },
                    },
                    [
                      _c(
                        "p",
                        {
                          staticClass: _vm._$s(23, "sc", "tx_title2"),
                          attrs: { _i: 23 },
                          staticClass: _vm._$s(24, "sc", "tx_title2"),
                          attrs: { _i: 24 },
                        },
                        [
                          _vm._v(
                            _vm._$s(
                              23,
                              24,
                              "t0-0",
                              _vm._s(_vm.param.Scan_Code.Name)
                            )
@@ -42436,9 +42530,9 @@
                        ]
                      ),
                      _c("input", {
                        staticClass: _vm._$s(24, "sc", "attr_field"),
                        staticClass: _vm._$s(25, "sc", "attr_field"),
                        style: _vm._$s(
                          24,
                          25,
                          "s",
                          _vm.param.Scan_Code.Have_Select_Button == true
                            ? "width: " +
@@ -42453,27 +42547,27 @@
                                "%;"
                        ),
                        attrs: {
                          value: _vm._$s(24, "a-value", _vm.scanCodeVal),
                          _i: 24,
                          value: _vm._$s(25, "a-value", _vm.scanCodeVal),
                          _i: 25,
                        },
                        on: { focus: _vm.scan_ontap, blur: _vm.scan_onevent },
                      }),
                      _vm._$s(
                        25,
                        26,
                        "i",
                        _vm.param.Scan_Code.Have_Select_Button == true
                      )
                        ? _c(
                            "div",
                            {
                              staticClass: _vm._$s(25, "sc", "text-right2"),
                              attrs: { _i: 25 },
                              staticClass: _vm._$s(26, "sc", "text-right2"),
                              attrs: { _i: 26 },
                            },
                            [
                              _c(
                                "a",
                                {
                                  attrs: { _i: 26 },
                                  attrs: { _i: 27 },
                                  on: {
                                    click: function ($event) {
                                      return _vm.scan_classAttr_extButton()
@@ -42483,18 +42577,18 @@
                                [
                                  _c("i", {
                                    staticClass: _vm._$s(
                                      27,
                                      28,
                                      "sc",
                                      "ace-icon fa"
                                    ),
                                    class: _vm._$s(
                                      27,
                                      28,
                                      "c",
                                      _vm.param.Scan_Code.Img
                                        ? _vm.param.Scan_Code.Img
                                        : "fa-plus-circle"
                                    ),
                                    attrs: { _i: 27 },
                                    attrs: { _i: 28 },
                                  }),
                                ]
                              ),
@@ -42507,19 +42601,19 @@
              )
            : _vm._e(),
          _vm._l(
            _vm._$s(28, "f", { forItems: _vm.subPanelList }),
            _vm._$s(29, "f", { forItems: _vm.subPanelList }),
            function (subpanel, iiindex, $21, $31) {
              return _c(
                "view",
                {
                  key: _vm._$s(28, "f", { forIndex: $21, key: 28 + "-" + $31 }),
                  staticClass: _vm._$s("28-" + $31, "sc", "v-panellist"),
                  key: _vm._$s(29, "f", { forIndex: $21, key: 29 + "-" + $31 }),
                  staticClass: _vm._$s("29-" + $31, "sc", "v-panellist"),
                  class: _vm._$s(
                    "28-" + $31,
                    "29-" + $31,
                    "c",
                    _vm.activelist[iiindex].active == true ? "bk-active" : ""
                  ),
                  attrs: { _i: "28-" + $31 },
                  attrs: { _i: "29-" + $31 },
                  on: {
                    click: function ($event) {
                      return _vm.onPanelClick(iiindex)
@@ -42528,40 +42622,40 @@
                },
                [
                  _vm._l(
                    _vm._$s(29 + "-" + $31, "f", {
                    _vm._$s(30 + "-" + $31, "f", {
                      forItems: subpanel.subClassAttr.form.items,
                    }),
                    function (item, index, $22, $32) {
                      return _c(
                        "view",
                        {
                          key: _vm._$s(29 + "-" + $31, "f", {
                          key: _vm._$s(30 + "-" + $31, "f", {
                            forIndex: $22,
                            key: 29 + "-" + $31 + "-" + $32,
                            key: 30 + "-" + $31 + "-" + $32,
                          }),
                          staticClass: _vm._$s(
                            "29-" + $31 + "-" + $32,
                            "30-" + $31 + "-" + $32,
                            "sc",
                            "v-area dv-panel"
                          ),
                          attrs: { _i: "29-" + $31 + "-" + $32 },
                          attrs: { _i: "30-" + $31 + "-" + $32 },
                        },
                        [
                          _c(
                            "div",
                            {
                              staticClass: _vm._$s(
                                "30-" + $31 + "-" + $32,
                                "31-" + $31 + "-" + $32,
                                "sc",
                                "dv-panel-input"
                              ),
                              attrs: { _i: "30-" + $31 + "-" + $32 },
                              attrs: { _i: "31-" + $31 + "-" + $32 },
                            },
                            [
                              _vm._$s(
                                "31-" + $31 + "-" + $32,
                                "32-" + $31 + "-" + $32,
                                "i",
                                item.name != "Layout"
                                item.name != "Layout" && item.show == true
                              )
                                ? _c(
                                    "view",
@@ -42570,23 +42664,23 @@
                                        "text",
                                        {
                                          staticClass: _vm._$s(
                                            "32-" + $31 + "-" + $32,
                                            "33-" + $31 + "-" + $32,
                                            "sc",
                                            "txt_title"
                                          ),
                                          style: _vm._$s(
                                            "32-" + $31 + "-" + $32,
                                            "33-" + $31 + "-" + $32,
                                            "s",
                                            { width: item.labelWidth + "px" }
                                          ),
                                          attrs: {
                                            _i: "32-" + $31 + "-" + $32,
                                            _i: "33-" + $31 + "-" + $32,
                                          },
                                        },
                                        [
                                          _vm._v(
                                            _vm._$s(
                                              "32-" + $31 + "-" + $32,
                                              "33-" + $31 + "-" + $32,
                                              "t0-0",
                                              _vm._s(item.label)
                                            )
@@ -42594,7 +42688,7 @@
                                        ]
                                      ),
                                      _vm._$s(
                                        "33-" + $31 + "-" + $32,
                                        "34-" + $31 + "-" + $32,
                                        "i",
                                        item.disabled
                                      )
@@ -42602,18 +42696,18 @@
                                            "span",
                                            {
                                              staticClass: _vm._$s(
                                                "33-" + $31 + "-" + $32,
                                                "34-" + $31 + "-" + $32,
                                                "sc",
                                                "form-item-span"
                                              ),
                                              attrs: {
                                                _i: "33-" + $31 + "-" + $32,
                                                _i: "34-" + $31 + "-" + $32,
                                              },
                                            },
                                            [
                                              _vm._v(
                                                _vm._$s(
                                                  "33-" + $31 + "-" + $32,
                                                  "34-" + $31 + "-" + $32,
                                                  "t0-0",
                                                  _vm._s(item.value)
                                                )
@@ -42622,7 +42716,7 @@
                                          )
                                        : _vm._e(),
                                      _vm._$s(
                                        "34-" + $31 + "-" + $32,
                                        "35-" + $31 + "-" + $32,
                                        "i",
                                        (item.name == "Input" ||
                                          item.name == "InputNumber") &&
@@ -42632,34 +42726,34 @@
                                            "view",
                                            {
                                              staticClass: _vm._$s(
                                                "34-" + $31 + "-" + $32,
                                                "35-" + $31 + "-" + $32,
                                                "sc",
                                                "dv_input"
                                                "input-wrapper"
                                              ),
                                              attrs: {
                                                _i: "34-" + $31 + "-" + $32,
                                                _i: "35-" + $31 + "-" + $32,
                                              },
                                            },
                                            [
                                              _vm._$s(
                                                "35-" + $31 + "-" + $32,
                                                "36-" + $31 + "-" + $32,
                                                "i",
                                                item.setting.prefix
                                              )
                                                ? _c("text", {
                                                    staticClass: _vm._$s(
                                                      "35-" + $31 + "-" + $32,
                                                      "36-" + $31 + "-" + $32,
                                                      "sc",
                                                      "uni-icon"
                                                    ),
                                                    class: _vm._$s(
                                                      "35-" + $31 + "-" + $32,
                                                      "36-" + $31 + "-" + $32,
                                                      "c",
                                                      [item.setting.prefix]
                                                    ),
                                                    attrs: {
                                                      _i:
                                                        "35-" + $31 + "-" + $32,
                                                        "36-" + $31 + "-" + $32,
                                                    },
                                                    on: {
                                                      change: function (
@@ -42682,19 +42776,19 @@
                                                  },
                                                ],
                                                staticClass: _vm._$s(
                                                  "36-" + $31 + "-" + $32,
                                                  "37-" + $31 + "-" + $32,
                                                  "sc",
                                                  "uni-input"
                                                ),
                                                class: _vm._$s(
                                                  "36-" + $31 + "-" + $32,
                                                  "37-" + $31 + "-" + $32,
                                                  "c",
                                                  item.disabled
                                                    ? "input-disabled"
                                                    : ""
                                                ),
                                                style: _vm._$s(
                                                  "36-" + $31 + "-" + $32,
                                                  "37-" + $31 + "-" + $32,
                                                  "s",
                                                  {
                                                    width:
@@ -42709,7 +42803,7 @@
                                                ),
                                                attrs: {
                                                  type: _vm._$s(
                                                    "36-" + $31 + "-" + $32,
                                                    "37-" + $31 + "-" + $32,
                                                    "a-type",
                                                    item.name == "Input"
                                                      ? "text"
@@ -42719,25 +42813,25 @@
                                                      : "text"
                                                  ),
                                                  disabled: _vm._$s(
                                                    "36-" + $31 + "-" + $32,
                                                    "37-" + $31 + "-" + $32,
                                                    "a-disabled",
                                                    item.disabled
                                                  ),
                                                  placeholder: _vm._$s(
                                                    "36-" + $31 + "-" + $32,
                                                    "37-" + $31 + "-" + $32,
                                                    "a-placeholder",
                                                    item.placeholder
                                                  ),
                                                  focus: _vm._$s(
                                                    "36-" + $31 + "-" + $32,
                                                    "37-" + $31 + "-" + $32,
                                                    "a-focus",
                                                    _vm.focusMateria
                                                  ),
                                                  _i: "36-" + $31 + "-" + $32,
                                                  _i: "37-" + $31 + "-" + $32,
                                                },
                                                domProps: {
                                                  value: _vm._$s(
                                                    "36-" + $31 + "-" + $32,
                                                    "37-" + $31 + "-" + $32,
                                                    "v-model",
                                                    item.value
                                                  ),
@@ -42764,24 +42858,24 @@
                                                },
                                              }),
                                              _vm._$s(
                                                "37-" + $31 + "-" + $32,
                                                "38-" + $31 + "-" + $32,
                                                "i",
                                                item.setting.suffix
                                              )
                                                ? _c("text", {
                                                    staticClass: _vm._$s(
                                                      "37-" + $31 + "-" + $32,
                                                      "38-" + $31 + "-" + $32,
                                                      "sc",
                                                      "uni-icon"
                                                    ),
                                                    class: _vm._$s(
                                                      "37-" + $31 + "-" + $32,
                                                      "38-" + $31 + "-" + $32,
                                                      "c",
                                                      [item.setting.suffix]
                                                    ),
                                                    attrs: {
                                                      _i:
                                                        "37-" + $31 + "-" + $32,
                                                        "38-" + $31 + "-" + $32,
                                                    },
                                                    on: {
                                                      click: function ($event) {
@@ -42796,13 +42890,13 @@
                                          )
                                        : _vm._e(),
                                      _vm._$s(
                                        "38-" + $31 + "-" + $32,
                                        "39-" + $31 + "-" + $32,
                                        "i",
                                        item.name == "Select" && !item.disabled
                                      )
                                        ? _c("uni-data-select", {
                                            class: _vm._$s(
                                              "38-" + $31 + "-" + $32,
                                              "39-" + $31 + "-" + $32,
                                              "c",
                                              item.disabled
                                                ? "input-disabled"
@@ -42813,7 +42907,7 @@
                                              localdata: item.dict,
                                              disabled: item.disabled,
                                              clear: false,
                                              _i: "38-" + $31 + "-" + $32,
                                              _i: "39-" + $31 + "-" + $32,
                                            },
                                            on: {
                                              change: function ($event) {
@@ -42822,7 +42916,7 @@
                                            },
                                            model: {
                                              value: _vm._$s(
                                                "38-" + $31 + "-" + $32,
                                                "39-" + $31 + "-" + $32,
                                                "v-model",
                                                item.value
                                              ),
@@ -42834,7 +42928,7 @@
                                          })
                                        : _vm._e(),
                                      _vm._$s(
                                        "39-" + $31 + "-" + $32,
                                        "40-" + $31 + "-" + $32,
                                        "i",
                                        item.name == "Textarea" &&
                                          !item.disabled
@@ -42843,50 +42937,50 @@
                                            "view",
                                            {
                                              staticClass: _vm._$s(
                                                "39-" + $31 + "-" + $32,
                                                "40-" + $31 + "-" + $32,
                                                "sc",
                                                "input-wrapper"
                                              ),
                                              attrs: {
                                                _i: "39-" + $31 + "-" + $32,
                                                _i: "40-" + $31 + "-" + $32,
                                              },
                                            },
                                            [
                                              _c("textarea", {
                                                staticClass: _vm._$s(
                                                  "40-" + $31 + "-" + $32,
                                                  "41-" + $31 + "-" + $32,
                                                  "sc",
                                                  "uni-input"
                                                ),
                                                class: _vm._$s(
                                                  "40-" + $31 + "-" + $32,
                                                  "41-" + $31 + "-" + $32,
                                                  "c",
                                                  item.disabled
                                                    ? "input-disabled"
                                                    : ""
                                                ),
                                                style: _vm._$s(
                                                  "40-" + $31 + "-" + $32,
                                                  "41-" + $31 + "-" + $32,
                                                  "s",
                                                  { width: "96%" }
                                                ),
                                                attrs: {
                                                  value: _vm._$s(
                                                    "40-" + $31 + "-" + $32,
                                                    "41-" + $31 + "-" + $32,
                                                    "a-value",
                                                    item.value
                                                  ),
                                                  placeholder: _vm._$s(
                                                    "40-" + $31 + "-" + $32,
                                                    "41-" + $31 + "-" + $32,
                                                    "a-placeholder",
                                                    item.placeholder
                                                  ),
                                                  disabled: _vm._$s(
                                                    "40-" + $31 + "-" + $32,
                                                    "41-" + $31 + "-" + $32,
                                                    "a-disabled",
                                                    item.disabled
                                                  ),
                                                  _i: "40-" + $31 + "-" + $32,
                                                  _i: "41-" + $31 + "-" + $32,
                                                },
                                                on: {
                                                  blur: function ($event) {
@@ -42900,7 +42994,7 @@
                                          )
                                        : _vm._e(),
                                      _vm._$s(
                                        "41-" + $31 + "-" + $32,
                                        "42-" + $31 + "-" + $32,
                                        "i",
                                        item.name == "Checkbox"
                                      )
@@ -42908,34 +43002,34 @@
                                            "checkbox-group",
                                            {
                                              staticClass: _vm._$s(
                                                "41-" + $31 + "-" + $32,
                                                "42-" + $31 + "-" + $32,
                                                "sc",
                                                "check_rememberPwd"
                                              ),
                                              class: _vm._$s(
                                                "41-" + $31 + "-" + $32,
                                                "42-" + $31 + "-" + $32,
                                                "c",
                                                item.disabled
                                                  ? "input-disabled"
                                                  : ""
                                              ),
                                              style: _vm._$s(
                                                "41-" + $31 + "-" + $32,
                                                "42-" + $31 + "-" + $32,
                                                "s",
                                                { "margin-left": "10rpx" }
                                              ),
                                              attrs: {
                                                "data-ischeck": _vm._$s(
                                                  "41-" + $31 + "-" + $32,
                                                  "42-" + $31 + "-" + $32,
                                                  "a-data-ischeck",
                                                  item.value
                                                ),
                                                disabled: _vm._$s(
                                                  "41-" + $31 + "-" + $32,
                                                  "42-" + $31 + "-" + $32,
                                                  "a-disabled",
                                                  item.disabled
                                                ),
                                                _i: "41-" + $31 + "-" + $32,
                                                _i: "42-" + $31 + "-" + $32,
                                              },
                                              on: {
                                                change: function ($event) {
@@ -42948,22 +43042,22 @@
                                                _c("checkbox", {
                                                  attrs: {
                                                    value: _vm._$s(
                                                      "43-" + $31 + "-" + $32,
                                                      "44-" + $31 + "-" + $32,
                                                      "a-value",
                                                      item.value
                                                    ),
                                                    checked: _vm._$s(
                                                      "43-" + $31 + "-" + $32,
                                                      "44-" + $31 + "-" + $32,
                                                      "a-checked",
                                                      item.value
                                                    ),
                                                    _i: "43-" + $31 + "-" + $32,
                                                    _i: "44-" + $31 + "-" + $32,
                                                  },
                                                }),
                                                _c("text", [
                                                  _vm._v(
                                                    _vm._$s(
                                                      "44-" + $31 + "-" + $32,
                                                      "45-" + $31 + "-" + $32,
                                                      "t0-0",
                                                      _vm._s(item.label)
                                                    )
@@ -42974,30 +43068,30 @@
                                          )
                                        : _vm._e(),
                                      _vm._$s(
                                        "45-" + $31 + "-" + $32,
                                        "46-" + $31 + "-" + $32,
                                        "i",
                                        item.name == "Switch"
                                      )
                                        ? _c("switch", {
                                            class: _vm._$s(
                                              "45-" + $31 + "-" + $32,
                                              "46-" + $31 + "-" + $32,
                                              "c",
                                              item.disabled
                                                ? "input-disabled"
                                                : ""
                                            ),
                                            style: _vm._$s(
                                              "45-" + $31 + "-" + $32,
                                              "46-" + $31 + "-" + $32,
                                              "s",
                                              { "margin-left": "10rpx" }
                                            ),
                                            attrs: {
                                              disabled: _vm._$s(
                                                "45-" + $31 + "-" + $32,
                                                "46-" + $31 + "-" + $32,
                                                "a-disabled",
                                                item.disabled
                                              ),
                                              _i: "45-" + $31 + "-" + $32,
                                              _i: "46-" + $31 + "-" + $32,
                                            },
                                            on: {
                                              change: function ($event) {
@@ -43006,7 +43100,7 @@
                                            },
                                            model: {
                                              value: _vm._$s(
                                                "45-" + $31 + "-" + $32,
                                                "46-" + $31 + "-" + $32,
                                                "v-model",
                                                item.value
                                              ),
@@ -43018,7 +43112,7 @@
                                          })
                                        : _vm._e(),
                                      _vm._$s(
                                        "46-" + $31 + "-" + $32,
                                        "47-" + $31 + "-" + $32,
                                        "i",
                                        (item.name == "TimePicker" ||
                                          item.name == "DatePicker") &&
@@ -43028,12 +43122,12 @@
                                            "view",
                                            {
                                              staticClass: _vm._$s(
                                                "46-" + $31 + "-" + $32,
                                                "47-" + $31 + "-" + $32,
                                                "sc",
                                                "input-wrapper"
                                              ),
                                              attrs: {
                                                _i: "46-" + $31 + "-" + $32,
                                                _i: "47-" + $31 + "-" + $32,
                                              },
                                            },
                                            [
@@ -43041,12 +43135,12 @@
                                                "picker",
                                                {
                                                  staticClass: _vm._$s(
                                                    "47-" + $31 + "-" + $32,
                                                    "48-" + $31 + "-" + $32,
                                                    "sc",
                                                    "date_iput"
                                                  ),
                                                  class: _vm._$s(
                                                    "47-" + $31 + "-" + $32,
                                                    "48-" + $31 + "-" + $32,
                                                    "c",
                                                    item.disabled
                                                      ? "input-disabled"
@@ -43054,16 +43148,16 @@
                                                  ),
                                                  attrs: {
                                                    disabled: _vm._$s(
                                                      "47-" + $31 + "-" + $32,
                                                      "48-" + $31 + "-" + $32,
                                                      "a-disabled",
                                                      item.disabled
                                                    ),
                                                    value: _vm._$s(
                                                      "47-" + $31 + "-" + $32,
                                                      "48-" + $31 + "-" + $32,
                                                      "a-value",
                                                      item.value
                                                    ),
                                                    _i: "47-" + $31 + "-" + $32,
                                                    _i: "48-" + $31 + "-" + $32,
                                                  },
                                                  on: {
                                                    change: function ($event) {
@@ -43078,13 +43172,13 @@
                                                    "view",
                                                    {
                                                      staticClass: _vm._$s(
                                                        "48-" + $31 + "-" + $32,
                                                        "49-" + $31 + "-" + $32,
                                                        "sc",
                                                        "picker"
                                                      ),
                                                      attrs: {
                                                        _i:
                                                          "48-" +
                                                          "49-" +
                                                          $31 +
                                                          "-" +
                                                          $32,
@@ -43093,7 +43187,7 @@
                                                    [
                                                      _vm._v(
                                                        _vm._$s(
                                                          "48-" +
                                                          "49-" +
                                                            $31 +
                                                            "-" +
                                                            $32,
@@ -43113,22 +43207,22 @@
                                  )
                                : _vm._e(),
                              _vm._$s(
                                "49-" + $31 + "-" + $32,
                                "50-" + $31 + "-" + $32,
                                "i",
                                item.name == "Layout"
                                item.name == "Layout" && item.show == true
                              )
                                ? _c(
                                    "uni-row",
                                    {
                                      staticClass: _vm._$s(
                                        "49-" + $31 + "-" + $32,
                                        "50-" + $31 + "-" + $32,
                                        "sc",
                                        "demo-uni-row"
                                      ),
                                      attrs: { _i: "49-" + $31 + "-" + $32 },
                                      attrs: { _i: "50-" + $31 + "-" + $32 },
                                    },
                                    _vm._l(
                                      _vm._$s(50 + "-" + $31 + "-" + $32, "f", {
                                      _vm._$s(51 + "-" + $31 + "-" + $32, "f", {
                                        forItems: item.setting.colList,
                                      }),
                                      function (cols, key, $23, $33) {
@@ -43136,12 +43230,12 @@
                                          "uni-col",
                                          {
                                            key: _vm._$s(
                                              50 + "-" + $31 + "-" + $32,
                                              51 + "-" + $31 + "-" + $32,
                                              "f",
                                              {
                                                forIndex: $23,
                                                key:
                                                  50 +
                                                  51 +
                                                  "-" +
                                                  $31 +
                                                  "-" +
@@ -43155,7 +43249,7 @@
                                                ? item.setting.spanList[key]
                                                : 24 / item.setting.col,
                                              _i:
                                                "50-" +
                                                "51-" +
                                                $31 +
                                                "-" +
                                                $32 +
@@ -43165,7 +43259,7 @@
                                          },
                                          [
                                            _vm._$s(
                                              "51-" +
                                              "52-" +
                                                $31 +
                                                "-" +
                                                $32 +
@@ -43181,7 +43275,7 @@
                                                      "text",
                                                      {
                                                        staticClass: _vm._$s(
                                                          "52-" +
                                                          "53-" +
                                                            $31 +
                                                            "-" +
                                                            $32 +
@@ -43191,7 +43285,7 @@
                                                          "txt_title"
                                                        ),
                                                        style: _vm._$s(
                                                          "52-" +
                                                          "53-" +
                                                            $31 +
                                                            "-" +
                                                            $32 +
@@ -43206,7 +43300,7 @@
                                                        ),
                                                        attrs: {
                                                          _i:
                                                            "52-" +
                                                            "53-" +
                                                            $31 +
                                                            "-" +
                                                            $32 +
@@ -43217,7 +43311,7 @@
                                                      [
                                                        _vm._v(
                                                          _vm._$s(
                                                            "52-" +
                                                            "53-" +
                                                              $31 +
                                                              "-" +
                                                              $32 +
@@ -43230,7 +43324,7 @@
                                                      ]
                                                    ),
                                                    _vm._$s(
                                                      "53-" +
                                                      "54-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -43244,7 +43338,7 @@
                                                          {
                                                            staticClass:
                                                              _vm._$s(
                                                                "53-" +
                                                                "54-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43255,7 +43349,7 @@
                                                              ),
                                                            attrs: {
                                                              _i:
                                                                "53-" +
                                                                "54-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43266,7 +43360,7 @@
                                                          [
                                                            _vm._v(
                                                              _vm._$s(
                                                                "53-" +
                                                                "54-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43282,7 +43376,7 @@
                                                        )
                                                      : _vm._e(),
                                                    _vm._$s(
                                                      "54-" +
                                                      "55-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -43299,18 +43393,18 @@
                                                          {
                                                            staticClass:
                                                              _vm._$s(
                                                                "54-" +
                                                                "55-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
                                                                  "-" +
                                                                  $33,
                                                                "sc",
                                                                "dv_input"
                                                                "input-wrapper"
                                                              ),
                                                            attrs: {
                                                              _i:
                                                                "54-" +
                                                                "55-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43320,7 +43414,7 @@
                                                          },
                                                          [
                                                            _vm._$s(
                                                              "55-" +
                                                              "56-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43333,7 +43427,7 @@
                                                              ? _c("text", {
                                                                  staticClass:
                                                                    _vm._$s(
                                                                      "55-" +
                                                                      "56-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -43344,7 +43438,7 @@
                                                                    ),
                                                                  class:
                                                                    _vm._$s(
                                                                      "55-" +
                                                                      "56-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -43359,7 +43453,7 @@
                                                                    ),
                                                                  attrs: {
                                                                    _i:
                                                                      "55-" +
                                                                      "56-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43392,7 +43486,7 @@
                                                              ],
                                                              staticClass:
                                                                _vm._$s(
                                                                  "56-" +
                                                                  "57-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43402,7 +43496,7 @@
                                                                  "uni-input"
                                                                ),
                                                              class: _vm._$s(
                                                                "56-" +
                                                                "57-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43414,7 +43508,7 @@
                                                                  : ""
                                                              ),
                                                              style: _vm._$s(
                                                                "56-" +
                                                                "57-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43440,7 +43534,7 @@
                                                              ),
                                                              attrs: {
                                                                type: _vm._$s(
                                                                  "56-" +
                                                                  "57-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43457,7 +43551,7 @@
                                                                ),
                                                                disabled:
                                                                  _vm._$s(
                                                                    "56-" +
                                                                    "57-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43468,7 +43562,7 @@
                                                                  ),
                                                                placeholder:
                                                                  _vm._$s(
                                                                    "56-" +
                                                                    "57-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43478,7 +43572,7 @@
                                                                    cols.placeholder
                                                                  ),
                                                                focus: _vm._$s(
                                                                  "56-" +
                                                                  "57-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43488,7 +43582,7 @@
                                                                  _vm.focusMateria
                                                                ),
                                                                _i:
                                                                  "56-" +
                                                                  "57-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43497,7 +43591,7 @@
                                                              },
                                                              domProps: {
                                                                value: _vm._$s(
                                                                  "56-" +
                                                                  "57-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43545,7 +43639,7 @@
                                                              },
                                                            }),
                                                            _vm._$s(
                                                              "57-" +
                                                              "58-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43558,7 +43652,7 @@
                                                              ? _c("text", {
                                                                  staticClass:
                                                                    _vm._$s(
                                                                      "57-" +
                                                                      "58-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -43569,7 +43663,7 @@
                                                                    ),
                                                                  class:
                                                                    _vm._$s(
                                                                      "57-" +
                                                                      "58-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -43584,7 +43678,7 @@
                                                                    ),
                                                                  attrs: {
                                                                    _i:
                                                                      "57-" +
                                                                      "58-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43607,7 +43701,7 @@
                                                        )
                                                      : _vm._e(),
                                                    _vm._$s(
                                                      "58-" +
                                                      "59-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -43619,7 +43713,7 @@
                                                    )
                                                      ? _c("uni-data-select", {
                                                          class: _vm._$s(
                                                            "58-" +
                                                            "59-" +
                                                              $31 +
                                                              "-" +
                                                              $32 +
@@ -43638,7 +43732,7 @@
                                                              cols.disabled,
                                                            clear: false,
                                                            _i:
                                                              "58-" +
                                                              "59-" +
                                                              $31 +
                                                              "-" +
                                                              $32 +
@@ -43656,7 +43750,7 @@
                                                          },
                                                          model: {
                                                            value: _vm._$s(
                                                              "58-" +
                                                              "59-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43680,7 +43774,7 @@
                                                        })
                                                      : _vm._e(),
                                                    _vm._$s(
                                                      "59-" +
                                                      "60-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -43695,7 +43789,7 @@
                                                          {
                                                            staticClass:
                                                              _vm._$s(
                                                                "59-" +
                                                                "60-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43706,7 +43800,7 @@
                                                              ),
                                                            attrs: {
                                                              _i:
                                                                "59-" +
                                                                "60-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43718,7 +43812,7 @@
                                                            _c("textarea", {
                                                              staticClass:
                                                                _vm._$s(
                                                                  "60-" +
                                                                  "61-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43728,7 +43822,7 @@
                                                                  "uni-input"
                                                                ),
                                                              class: _vm._$s(
                                                                "60-" +
                                                                "61-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43740,7 +43834,7 @@
                                                                  : ""
                                                              ),
                                                              style: _vm._$s(
                                                                "60-" +
                                                                "61-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43751,7 +43845,7 @@
                                                              ),
                                                              attrs: {
                                                                value: _vm._$s(
                                                                  "60-" +
                                                                  "61-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43762,7 +43856,7 @@
                                                                ),
                                                                placeholder:
                                                                  _vm._$s(
                                                                    "60-" +
                                                                    "61-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43773,7 +43867,7 @@
                                                                  ),
                                                                disabled:
                                                                  _vm._$s(
                                                                    "60-" +
                                                                    "61-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43783,7 +43877,7 @@
                                                                    cols.disabled
                                                                  ),
                                                                _i:
                                                                  "60-" +
                                                                  "61-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43804,7 +43898,7 @@
                                                        )
                                                      : _vm._e(),
                                                    _vm._$s(
                                                      "61-" +
                                                      "62-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -43818,7 +43912,7 @@
                                                          {
                                                            staticClass:
                                                              _vm._$s(
                                                                "61-" +
                                                                "62-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43828,7 +43922,7 @@
                                                                "check_rememberPwd"
                                                              ),
                                                            class: _vm._$s(
                                                              "61-" +
                                                              "62-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43840,7 +43934,7 @@
                                                                : ""
                                                            ),
                                                            style: _vm._$s(
                                                              "61-" +
                                                              "62-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43854,7 +43948,7 @@
                                                            ),
                                                            attrs: {
                                                              disabled: _vm._$s(
                                                                "61-" +
                                                                "62-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -43865,7 +43959,7 @@
                                                              ),
                                                              "data-ischeck":
                                                                _vm._$s(
                                                                  "61-" +
                                                                  "62-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43875,7 +43969,7 @@
                                                                  cols.value
                                                                ),
                                                              _i:
                                                                "61-" +
                                                                "62-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43898,7 +43992,7 @@
                                                                attrs: {
                                                                  value:
                                                                    _vm._$s(
                                                                      "63-" +
                                                                      "64-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -43909,7 +44003,7 @@
                                                                    ),
                                                                  checked:
                                                                    _vm._$s(
                                                                      "63-" +
                                                                      "64-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -43919,7 +44013,7 @@
                                                                      cols.value
                                                                    ),
                                                                  _i:
                                                                    "63-" +
                                                                    "64-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -43930,7 +44024,7 @@
                                                              _c("text", [
                                                                _vm._v(
                                                                  _vm._$s(
                                                                    "64-" +
                                                                    "65-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -43948,7 +44042,7 @@
                                                        )
                                                      : _vm._e(),
                                                    _vm._$s(
                                                      "65-" +
                                                      "66-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -43959,7 +44053,7 @@
                                                    )
                                                      ? _c("switch", {
                                                          class: _vm._$s(
                                                            "65-" +
                                                            "66-" +
                                                              $31 +
                                                              "-" +
                                                              $32 +
@@ -43971,7 +44065,7 @@
                                                              : ""
                                                          ),
                                                          style: _vm._$s(
                                                            "65-" +
                                                            "66-" +
                                                              $31 +
                                                              "-" +
                                                              $32 +
@@ -43985,7 +44079,7 @@
                                                          ),
                                                          attrs: {
                                                            disabled: _vm._$s(
                                                              "65-" +
                                                              "66-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -43995,7 +44089,7 @@
                                                              item.disabled
                                                            ),
                                                            _i:
                                                              "65-" +
                                                              "66-" +
                                                              $31 +
                                                              "-" +
                                                              $32 +
@@ -44013,7 +44107,7 @@
                                                          },
                                                          model: {
                                                            value: _vm._$s(
                                                              "65-" +
                                                              "66-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -44037,7 +44131,7 @@
                                                        })
                                                      : _vm._e(),
                                                    _vm._$s(
                                                      "66-" +
                                                      "67-" +
                                                        $31 +
                                                        "-" +
                                                        $32 +
@@ -44055,7 +44149,7 @@
                                                          {
                                                            staticClass:
                                                              _vm._$s(
                                                                "66-" +
                                                                "67-" +
                                                                  $31 +
                                                                  "-" +
                                                                  $32 +
@@ -44066,7 +44160,7 @@
                                                              ),
                                                            attrs: {
                                                              _i:
                                                                "66-" +
                                                                "67-" +
                                                                $31 +
                                                                "-" +
                                                                $32 +
@@ -44080,7 +44174,7 @@
                                                              {
                                                                staticClass:
                                                                  _vm._$s(
                                                                    "67-" +
                                                                    "68-" +
                                                                      $31 +
                                                                      "-" +
                                                                      $32 +
@@ -44090,7 +44184,7 @@
                                                                    "date_iput"
                                                                  ),
                                                                class: _vm._$s(
                                                                  "67-" +
                                                                  "68-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -44104,7 +44198,7 @@
                                                                attrs: {
                                                                  disabled:
                                                                    _vm._$s(
                                                                      "67-" +
                                                                      "68-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -44115,7 +44209,7 @@
                                                                    ),
                                                                  value:
                                                                    _vm._$s(
                                                                      "67-" +
                                                                      "68-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -44125,7 +44219,7 @@
                                                                      cols.value
                                                                    ),
                                                                  _i:
                                                                    "67-" +
                                                                    "68-" +
                                                                    $31 +
                                                                    "-" +
                                                                    $32 +
@@ -44149,7 +44243,7 @@
                                                                  {
                                                                    staticClass:
                                                                      _vm._$s(
                                                                        "68-" +
                                                                        "69-" +
                                                                          $31 +
                                                                          "-" +
                                                                          $32 +
@@ -44160,7 +44254,7 @@
                                                                      ),
                                                                    attrs: {
                                                                      _i:
                                                                        "68-" +
                                                                        "69-" +
                                                                        $31 +
                                                                        "-" +
                                                                        $32 +
@@ -44171,7 +44265,7 @@
                                                                  [
                                                                    _vm._v(
                                                                      _vm._$s(
                                                                        "68-" +
                                                                        "69-" +
                                                                          $31 +
                                                                          "-" +
                                                                          $32 +
@@ -44209,26 +44303,26 @@
                    }
                  ),
                  _vm._$s(
                    "69-" + $31,
                    "70-" + $31,
                    "i",
                    _vm.param.Sub_Cls.Can_Add_Delete == true
                  )
                    ? _c(
                        "view",
                        {
                          staticClass: _vm._$s("69-" + $31, "sc", "v-paneldel"),
                          attrs: { _i: "69-" + $31 },
                          staticClass: _vm._$s("70-" + $31, "sc", "v-paneldel"),
                          attrs: { _i: "70-" + $31 },
                        },
                        [
                          _c(
                            "a",
                            {
                              staticClass: _vm._$s(
                                "70-" + $31,
                                "71-" + $31,
                                "sc",
                                "panel_del"
                              ),
                              attrs: { _i: "70-" + $31 },
                              attrs: { _i: "71-" + $31 },
                              on: {
                                click: function ($event) {
                                  return _vm.panel_del(iiindex)
@@ -44238,11 +44332,11 @@
                            [
                              _c("i", {
                                staticClass: _vm._$s(
                                  "71-" + $31,
                                  "72-" + $31,
                                  "sc",
                                  "ace-icon fu-delete"
                                ),
                                attrs: { _i: "71-" + $31 },
                                attrs: { _i: "72-" + $31 },
                              }),
                            ]
                          ),
@@ -44259,34 +44353,34 @@
      ),
      _c(
        "view",
        { staticClass: _vm._$s(72, "sc", "view-floor"), attrs: { _i: 72 } },
        { staticClass: _vm._$s(73, "sc", "view-floor"), attrs: { _i: 73 } },
        [
          _vm._$s(73, "i", _vm.param.Sub_Cls.Can_Add_Delete == true)
          _vm._$s(74, "i", _vm.param.Sub_Cls.Can_Add_Delete == true)
            ? _c("button", {
                staticClass: _vm._$s(73, "sc", "btn_cancel"),
                attrs: { _i: 73 },
                staticClass: _vm._$s(74, "sc", "btn_cancel"),
                attrs: { _i: 74 },
                on: { click: _vm.cancel },
              })
            : _vm._e(),
          _vm._$s(74, "i", _vm.param.Sub_Cls.Can_Add_Delete == true)
          _vm._$s(75, "i", _vm.param.Sub_Cls.Can_Add_Delete == true)
            ? _c(
                "button",
                {
                  staticClass: _vm._$s(74, "sc", "btn_add"),
                  attrs: { _i: 74 },
                  on: { click: _vm.sava },
                },
                [_vm._v(_vm._$s(74, "t0-0", _vm._s(_vm.title)))]
              )
            : _vm._$s(75, "e", _vm.param.Sub_Cls.Can_Add_Delete == false)
            ? _c(
                "button",
                {
                  staticClass: _vm._$s(75, "sc", "btn_sava"),
                  staticClass: _vm._$s(75, "sc", "btn_add"),
                  attrs: { _i: 75 },
                  on: { click: _vm.sava },
                },
                [_vm._v(_vm._$s(75, "t0-0", _vm._s(_vm.title)))]
              )
            : _vm._$s(76, "e", _vm.param.Sub_Cls.Can_Add_Delete == false)
            ? _c(
                "button",
                {
                  staticClass: _vm._$s(76, "sc", "btn_sava"),
                  attrs: { _i: 76 },
                  on: { click: _vm.sava },
                },
                [_vm._v(_vm._$s(76, "t0-0", _vm._s(_vm.title)))]
              )
            : _vm._e(),
        ]
@@ -44298,28 +44392,28 @@
            "uni-popup",
            {
              ref: "popup",
              staticClass: _vm._$s(77, "sc", "view-popup"),
              attrs: { "background-color": "#fff", _i: 77 },
              staticClass: _vm._$s(78, "sc", "view-popup"),
              attrs: { "background-color": "#fff", _i: 78 },
              on: { change: _vm.popupChange },
            },
            [
              _c(
                "view",
                {
                  staticClass: _vm._$s(78, "sc", "popup-header"),
                  attrs: { _i: 78 },
                  staticClass: _vm._$s(79, "sc", "popup-header"),
                  attrs: { _i: 79 },
                },
                [_vm._v(_vm._$s(78, "t0-0", _vm._s(_vm.check_list.title)))]
                [_vm._v(_vm._$s(79, "t0-0", _vm._s(_vm.check_list.title)))]
              ),
              _c(
                "view",
                {
                  staticClass: _vm._$s(79, "sc", "popup-content"),
                  class: _vm._$s(79, "c", {
                  staticClass: _vm._$s(80, "sc", "popup-content"),
                  class: _vm._$s(80, "c", {
                    "popup-height":
                      _vm.popupType === "left" || _vm.popupType === "right",
                  }),
                  style: _vm._$s(79, "s", {
                  style: _vm._$s(80, "s", {
                    width: _vm.check_list.width
                      ? _vm.check_list.width + "px"
                      : "200px",
@@ -44327,61 +44421,61 @@
                      ? _vm.check_list.height + "px"
                      : "88%",
                  }),
                  attrs: { _i: 79 },
                  attrs: { _i: 80 },
                },
                [
                  _c(
                    "view",
                    {
                      staticClass: _vm._$s(80, "sc", "popup-cont"),
                      style: _vm._$s(80, "s", {
                      staticClass: _vm._$s(81, "sc", "popup-cont"),
                      style: _vm._$s(81, "s", {
                        height: _vm.check_list.height
                          ? _vm.check_list.height - 45 + "px"
                          : "415px",
                      }),
                      attrs: { _i: 80 },
                      attrs: { _i: 81 },
                    },
                    _vm._l(
                      _vm._$s(81, "f", { forItems: _vm.check_list.items }),
                      _vm._$s(82, "f", { forItems: _vm.check_list.items }),
                      function (item, index, $24, $34) {
                        return _c(
                          "view",
                          {
                            key: _vm._$s(81, "f", {
                            key: _vm._$s(82, "f", {
                              forIndex: $24,
                              key: 81 + "-" + $34,
                              key: 82 + "-" + $34,
                            }),
                            staticClass: _vm._$s(
                              "81-" + $34,
                              "82-" + $34,
                              "sc",
                              "view_popup_CheckList"
                            ),
                            attrs: { _i: "81-" + $34 },
                            attrs: { _i: "82-" + $34 },
                          },
                          [
                            _c(
                              "checkbox-group",
                              {
                                staticClass: _vm._$s(
                                  "82-" + $34,
                                  "83-" + $34,
                                  "sc",
                                  "check_list"
                                ),
                                style: _vm._$s("82-" + $34, "s", {
                                style: _vm._$s("83-" + $34, "s", {
                                  "margin-left": "10rpx",
                                }),
                                attrs: {
                                  "data-ischeck": _vm._$s(
                                    "82-" + $34,
                                    "83-" + $34,
                                    "a-data-ischeck",
                                    item.check
                                  ),
                                  "data-index": _vm._$s(
                                    "82-" + $34,
                                    "83-" + $34,
                                    "a-data-index",
                                    index
                                  ),
                                  _i: "82-" + $34,
                                  _i: "83-" + $34,
                                },
                                on: { change: _vm.checkChange },
                              },
@@ -44390,22 +44484,22 @@
                                  _c("checkbox", {
                                    attrs: {
                                      value: _vm._$s(
                                        "84-" + $34,
                                        "85-" + $34,
                                        "a-value",
                                        item.check
                                      ),
                                      checked: _vm._$s(
                                        "84-" + $34,
                                        "85-" + $34,
                                        "a-checked",
                                        item.check
                                      ),
                                      _i: "84-" + $34,
                                      _i: "85-" + $34,
                                    },
                                  }),
                                  _c("text", [
                                    _vm._v(
                                      _vm._$s(
                                        "85-" + $34,
                                        "86-" + $34,
                                        "t0-0",
                                        _vm._s(item.name)
                                      )
@@ -44423,18 +44517,18 @@
                  _c(
                    "view",
                    {
                      staticClass: _vm._$s(86, "sc", "popup-footer"),
                      attrs: { _i: 86 },
                      staticClass: _vm._$s(87, "sc", "popup-footer"),
                      attrs: { _i: 87 },
                    },
                    [
                      _c("button", {
                        staticClass: _vm._$s(87, "sc", "btn_popup_add"),
                        attrs: { _i: 87 },
                        staticClass: _vm._$s(88, "sc", "btn_popup_add"),
                        attrs: { _i: 88 },
                        on: { click: _vm.popup_sava },
                      }),
                      _c("button", {
                        staticClass: _vm._$s(88, "sc", "btn_popup_cancel"),
                        attrs: { _i: 88 },
                        staticClass: _vm._$s(89, "sc", "btn_popup_cancel"),
                        attrs: { _i: 89 },
                        on: { click: _vm.popup_cancel },
                      }),
                    ]
@@ -44476,7 +44570,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      activelist: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.title = options.titlename;\n    this.$data.param = JSON.parse(options.param);\n    __f__(\"log\", this.$data.param, \" at pages/modal/3037_2.vue:764\");\n    //获取数据类的自定义表单参数\n    this.Head_UIStyleGetInfo(this.param.Master_Cls.ID, this.param.Master_Cls.UI_Style.ID);\n    this.Detail1_UIstyleGetInfo(this.param.Sub_Cls.ID, this.$data.param.Sub_Cls.UI_Style.ID);\n\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.head_styledef);\n                    $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n                        return _regenerator.default.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                if (!(ele.useDict == true)) {\n                                  _context.next = 3;\n                                  break;\n                                }\n                                _context.next = 3;\n                                return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 3:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n                      return function (_x, _x2) {\n                        return _ref.apply(this, arguments);\n                      };\n                    }());\n                  } else {\n                    uni.showModal({\n                      title: \"错误1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this2;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    $this.$data.detail1_styledef.SelBut_Checked = true;\n                    $this.detail1_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele, index) {\n                        return _regenerator.default.wrap(function _callee3$(_context3) {\n                          while (1) {\n                            switch (_context3.prev = _context3.next) {\n                              case 0:\n                                if (!(ele.useDict == true)) {\n                                  _context3.next = 3;\n                                  break;\n                                }\n                                _context3.next = 3;\n                                return _this2.DictGetInfo(ele.bind.dict, index, 'sub');\n                              case 3:\n                              case \"end\":\n                                return _context3.stop();\n                            }\n                          }\n                        }, _callee3);\n                      }));\n                      return function (_x3, _x4) {\n                        return _ref2.apply(this, arguments);\n                      };\n                    }());\n                    // var aa = JSON.stringify(this.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n                    // console.log($this.$data.detail1StyleDefList);\n                  } else {\n                    uni.showModal({\n                      title: \"错误2\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误2.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    DictGetInfo: function DictGetInfo(dict, index, type) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                //Mobox3得到得到字典信息字典项列表\n                _this3.data = [];\n                $this = _this3;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this3.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                    var list, itemName, attr;\n                    return _regenerator.default.wrap(function _callee5$(_context5) {\n                      while (1) {\n                        switch (_context5.prev = _context5.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              list = [];\n                              itemName = '';\n                              success.result.dict_item_list.forEach(function (item) {\n                                if (item.is_default == '1') itemName = item.name;\n                                list.push({\n                                  text: item.value,\n                                  value: item.name\n                                });\n                              });\n                              if (type == 'mast') {\n                                //有默认值,显示默认值\n                                if (itemName) {\n                                  $this.head_styledef.form.items[index].value = itemName;\n                                  attr = $this.head_styledef.form.items[index].fieldId;\n                                  $this.head_styledef.form.model[attr] = itemName;\n                                }\n                                $this.head_styledef.form.items[index].dict = list;\n                                // console.log($this.$data.detail1StyleDefList);\n                              } else {\n                                if (itemName) {\n                                  $this.detail1_styledef.form.items[index].value = itemName;\n                                  attr = $this.detail1_styledef.form.items[index].fieldId;\n                                  $this.detail1_styledef.form.model[attr] = itemName;\n                                }\n                                $this.detail1_styledef.form.items[index].dict = list;\n                                __f__(\"log\", $this.$data.detail1_styledef, \" at pages/modal/3037_2.vue:880\");\n                              }\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context5.stop();\n                        }\n                      }\n                    }, _callee5);\n                  }));\n                  return function (_x5) {\n                    return _ref3.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this4 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        uni.hideKeyboard();\n        var $this = _this4;\n        __f__(\"log\", item, \" at pages/modal/3037_2.vue:898\");\n        if (item.oldvalue != result.decodedata) {\n          item.oldvalue = result.decodedata;\n          item.value = result.decodedata;\n          var attr = item.fieldId;\n          $this.head_styledef.form.model[attr] = result.decodedata;\n          if (result.decodedata) {\n            //第一个输入框不为空\n            $this.focusMateria = true; //初始化,第二个输入框focus属性\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //第二个输入框获取焦点\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 1000);\n            // },500);\n          }\n          //子数据类扫码区事件脚本\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var obj_attr = _this4.head_styledef.form.model;\n            // console.log(obj_attr);\n            var req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    onevent: function onevent(item) {\n      // console.log(e.target);\n      var $this = this;\n      __f__(\"log\", item, \" at pages/modal/3037_2.vue:944\");\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              value: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: item.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    onchange: function onchange(item) {\n      __f__(\"log\", item, \" at pages/modal/3037_2.vue:978\");\n      var $this = this;\n      __f__(\"log\", item, \" at pages/modal/3037_2.vue:980\");\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              value: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this5 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3037_2.vue:1013\");\n        var isflag = true;\n        for (var i in _this5.$data.subPanelList) {\n          if (_this5.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this5.$data.scanCodeVal = result.decodedata;\n          var eventid = _this5.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            //主数据类属性\n            var obj_attr = _this5.head_styledef.form.model;\n            // console.log(obj_attr);\n            var mast_req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr[a] || \"\"\n              };\n            });\n            var obj_attr2 = _this5.detail1_styledef.form.model;\n            var req = Object.keys(obj_attr2).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr2[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: mast_req,\n              sub_attr: req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this5.$data.scanCodeVal\n              }]\n            };\n            _this5.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            //主数据类属性\n            var obj_attr = this.head_styledef.form.model;\n            // console.log(obj_attr);\n            var mast_req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr[a] || \"\"\n              };\n            });\n            // var input_param = Base64.encode(\n            //   JSON.stringify(\n            //     Object.keys(obj_attr).map((a) => ({\n            //       attr: a,\n            //       value: obj_attr[a] || \"\",\n            //     }))\n            //   )\n            // );\n            var obj_attr2 = this.detail1_styledef.form.model;\n            var req = Object.keys(obj_attr2).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr2[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: mast_req,\n              sub_attr: req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onModelValue: function onModelValue(item) {\n      //绑定Model值\n      //console.log(e.target)\n      var attr = item.fieldId;\n      $this.head_styledef.form.model[attr] = item.value;\n    },\n    panel_del: function panel_del(index) {\n      //面板删除\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          class_id: this.$data.param.Sub_Cls.ID,\n          class_name: '',\n          obj_id: this.$data.subPanelList[index].ObjID\n        };\n        // console.log(dataInfo);\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('dataObjDel', dataInfo).then(function (success) {\n          // console.log(success);\n          uni.hideLoading();\n          if (ret.err_code == 0) {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/3037_2.vue:1141\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var mast_attr = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          value: obj_attr[a] || \"\"\n        };\n      });\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var detail_attr = {};\n        subPanelList[s].subClassAttr.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        var sub_req = Object.keys(detail_attr).map(function (a) {\n          return {\n            attr: a,\n            value: detail_attr[a] || \"\"\n          };\n        });\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var req = [];\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        edit_dlg: {\n          type: 'small',\n          //小窗口\n          class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n        },\n\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: mast_attr\n        },\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: [],\n        global_attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr,\n        enviroment: enviroment\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3037_2.vue:1222\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var mast_attr = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          value: obj_attr[a] || \"\"\n        };\n      });\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: [{\n          attr: 'mast_input_3037',\n          value: name\n        }],\n        global_attr: mast_attr,\n        inputParamter: data,\n        enviroment: ''\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    onPanelClick: function onPanelClick(value) {\n      //点击面板高亮显示\n      // console.log(value);\n      this.activelist.forEach(function (ele) {\n        ele.active = false;\n      });\n      this.activelist[value].active = true;\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: '', global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: true,\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:1358\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037_2.vue:1361\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037_2.vue:1375\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.head_styledef.form.items.length; c++) {\n                        var attr = $this.head_styledef.form.items[c];\n                        if (attr.name != 'Layout') {\n                          if (attr.fieldId == result[i].attr) {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"CN_S_VALUE\": val,\n                                \"text\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr.dict = dictItemList;\n                          }\n                        } else if (attr.name == 'Layout') {\n                          attr.setting.colList.forEach(function (col) {\n                            if (col) {\n                              if (col.fieldId == result[i].attr) {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"CN_S_VALUE\": val,\n                                    \"text\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                col.dict = dictItemList;\n                              }\n                            }\n                          });\n                        }\n                      }\n                    }\n                    for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                      var attr = $this.$data.head_styledef.form.items[c];\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr.name != 'Layout') {\n                        if (attr.fieldId == result[i].attr) {\n                          attr.value = '';\n                          attr.oldvalue = '';\n                          attr.value = result[i].value;\n                          attr.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                        }\n                      } else if (attr.name == 'Layout') {\n                        attr.setting.colList.forEach(function (col) {\n                          if (col) {\n                            if (col.fieldId == result[i].attr) {\n                              col.value = '';\n                              col.oldvalue = '';\n                              col.value = result[i].value;\n                              col.oldvalue = result[i].value;\n                              $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                            }\n                          }\n                        });\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                  var attr = $this.$data.head_styledef.form.items[c];\n                  if (attr.name != 'Layout') {\n                    if (attr.fieldId == result[i].attr) {\n                      attr.value = '';\n                      attr.oldvalue = '';\n                      attr.value = result[i].value;\n                      attr.oldvalue = result[i].value;\n                      $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                    }\n                  } else if (attr.name == 'Layout') {\n                    attr.setting.colList.forEach(function (col) {\n                      if (col) {\n                        if (col.fieldId == result[i].attr) {\n                          col.value = '';\n                          col.oldvalue = '';\n                          col.value = result[i].value;\n                          col.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                        }\n                      }\n                    });\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this6 = this;\n      var $this = this;\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.value;\n      });\n      var enviroment = {};\n      if (info.enviroment) {\n        enviroment = info.enviroment;\n      } else {\n        enviroment = {\n          'function': '3000',\n          // 功能点编号\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          edit_dlg: {\n            type: 'small',\n            //小窗口\n            class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n          },\n\n          master: {\n            cls_id: info.clsid,\n            // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n            obj_attrs: obj_attr\n          }\n        };\n      }\n      var global_attr = this.$data.global_attr;\n      if (info.global_attr) {\n        global_attr = info.global_attr;\n      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var inputParamter = info.inputParamter;\n      if (info.inputParamter) {\n        info.inputParamter = _base.default.encode(JSON.stringify(info.inputParamter)); //将字符串转换为base64编码\n      }\n\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: true,\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid.replace('{', '').replace('}', ''),\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: info.inputParamter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:1569\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037_2.vue:1572\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037_2.vue:1586\");\n              for (var ii = 0; ii < actionlist.length; ii++) {\n                var action = actionlist[ii];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                        for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                          var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            if (attr[j].Name == result[i].attr) {\n                              if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"CN_S_VALUE\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                attr[j].dictitem = dictItemList;\n                                // attr[j].dictitem = result[i].choice_list;\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037_2.vue:1616\");\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                            // attr.value = '';\n                            // attr.oldvalue = '';\n                            // attr.value = result[i].value;\n                            // attr.oldvalue = result[i].value;\n                          }\n                        }\n                      }\n                    }\n\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (action.action_type == 'set_global_attr') {\n                  $this.$actiontr = action.value || [];\n                } else if (action.action_type == 'open_common_dlg') {\n                  //打开侧滑弹框\n                  var $this = _this6;\n                  if (action.value.common_dlg_id == 'check_list') {\n                    $this.$data.check_list = action.value.config;\n                    if (action.value.config.appear_style == 'sideslip')\n                      //判断是否是侧滑\n                      $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                    // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                    $this.$refs.popup.open($this.$data.popupType);\n                  }\n                } else if (action.action_type == 'add_subcls_panel') {\n                  //主从数据类扫码查询数据\n                  var result = action.value;\n                  var $this = _this6;\n                  var list_1 = JSON.parse(JSON.stringify(_this6.$data.detail1_styledef));\n                  var scanCodeVal = $this.$data.scanCodeVal;\n                  var rand = '';\n                  for (var i = 0; i < 5; i++) {\n                    //生成5位随机数\n                    rand += Math.floor(Math.random() * 10);\n                  }\n                  if (inputParamter[0].attr) {\n                    if (inputParamter[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  if (info.attr[0].attr) {\n                    if (info.attr[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  $this.$data.subPanelList.push({\n                    scanCodeVal: scanCodeVal,\n                    subClassAttr: list_1\n                  });\n                  $this.activelist.push({\n                    active: false\n                  });\n                  for (var i = 0; i < result.length; i++) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                        if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                        var _subClassAttr = $this.$data.subPanelList[s].subClassAttr.form.items;\n                        for (var c = 0; c < _subClassAttr.length; c++) {\n                          if (_subClassAttr[c].name != 'Layout') {\n                            if (_subClassAttr[c].fieldId == result[i].attr) _subClassAttr[c].value = result[i].value;\n                          } else if (_subClassAttr[c].name == 'Layout') {\n                            _subClassAttr[c].setting.colList.forEach(function (col) {\n                              if (col) {\n                                if (col.fieldId == result[i].attr) col.value = result[i].value;\n                              }\n                            });\n                          }\n                        }\n\n                        // $this.$data.subPanelList[s].subClassAttr=list_1;\n                      }\n                    }\n                    // console.log($this.$data.subPanelList);\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n            if (data.result) {\n              var list_1 = JSON.parse(JSON.stringify(_this6.$data.detail1_styledef));\n              var scanCodeVal = $this.$data.scanCodeVal;\n              var rand = '';\n              for (var i = 0; i < 5; i++) {\n                //生成5位随机数\n                rand += Math.floor(Math.random() * 10);\n              }\n              if (inputParamter[0].attr) {\n                if (inputParamter[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + rand;\n              }\n              if (info.attr[0].attr) {\n                if (info.attr[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + rand;\n              }\n              $this.$data.subPanelList.push({\n                scanCodeVal: scanCodeVal,\n                subClassAttr: list_1\n              });\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                  if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                    if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                    var _subClassAttr = $this.$data.subPanelList[s].subClassAttr.form.items;\n                    for (var c = 0; c < _subClassAttr.length; c++) {\n                      if (_subClassAttr[c].name != 'Layout') {\n                        if (_subClassAttr[c].fieldId == result[i].attr) _subClassAttr[c].value = result[i].value;\n                      } else if (_subClassAttr[c].name == 'Layout') {\n                        _subClassAttr[c].setting.colList.forEach(function (col) {\n                          if (col) {\n                            if (col.fieldId == result[i].attr) col.value = result[i].value;\n                          }\n                        });\n                      }\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    //确定\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      //获取表头属性\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var req = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          value: obj_attr[a] || \"\"\n        };\n      });\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var detail_attr = {};\n        subPanelList[s].subClassAttr.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        var sub_req = Object.keys(detail_attr).map(function (a) {\n          return {\n            attr: a,\n            value: detail_attr[a] || \"\"\n          };\n        });\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      var dataJson = _base.default.encode(JSON.stringify(dataJson)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (!eventID.includes('{')) eventID = '{' + eventID + '}';\n      var dataInfo = {\n        ed_type: \"7\",\n        start_transaction: true,\n        class_id: 'MBOX',\n        class_name: '',\n        event_id: eventID,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: '',\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: dataJson,\n        compose_info: '',\n        ext_info: '',\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:1868\");\n      // uni.hideLoading();\n      // \treturn;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037_2.vue:1872\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n              //刷新\n              uni.redirectTo({\n                url: '../modal/3037_2?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAzN18yLnZ1ZSJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiQmFzZTY0IiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0IiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiYWN0aXZlbGlzdCIsIm9uTG9hZCIsInVuaSIsIm1ldGhvZHMiLCJIZWFkX1VJU3R5bGVHZXRJbmZvIiwiJHRoaXMiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwidWlfc3R5bGVfaWQiLCJzdHlsZWRlZiIsImVsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEZXRhaWwxX1VJc3R5bGVHZXRJbmZvIiwiRGljdEdldEluZm8iLCJkaWN0X2lkIiwiZGljdF9uYW1lIiwibGlzdCIsIml0ZW1OYW1lIiwic3VjY2VzcyIsInRleHQiLCJ2YWx1ZSIsImF0dHIiLCJvbnRhcCIsImdldEFwcCIsIml0ZW0iLCJzZXRUaW1lb3V0IiwiZXZlbnRpZCIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsImNsc2lkIiwib2JqaWQiLCJtYXN0X2F0dHIiLCJpbnB1dFBhcmFtdGVyIiwib25ldmVudCIsIm9uY2hhbmdlIiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsInN1Yl9hdHRyIiwic2Nhbl9vbmV2ZW50Iiwib25Nb2RlbFZhbHVlIiwicGFuZWxfZGVsIiwiY2xhc3NfbmFtZSIsIm9ial9pZCIsInNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImRldGFpbF9hdHRyIiwib2JqZWN0cyIsIm9ial9hdHRycyIsImNsc19pZCIsImJ1dHRvbl9uYW1lIiwiZWRpdF9kbGciLCJ0eXBlIiwibWFzdGVyX2NscyIsImNsc19uYW1lIiwic3ViX2NscyIsImVudmlyb21lbnQiLCJwb3B1cENoYW5nZSIsImNoZWNrQ2hhbmdlIiwicG9wdXBfY2FuY2VsIiwicG9wdXBfc2F2YSIsIm5hbWUiLCJpZCIsIm9uUGFuZWxDbGljayIsIkRhdGFPYmpSdW5DdXN0b21FdmVudCIsIm1hc3RlciIsImdyb3VwX25hbWUiLCJyZWFkb25seSIsImJ1dHRvbl9pbWciLCJidXR0b25fdG9vbHRpcCIsImluZm8iLCJvYmpfYXR0ciIsImVkX3R5cGUiLCJzdGFydF90cmFuc2FjdGlvbiIsImV2ZW50X2lkIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJpbnB1dF9wYXJhbSIsImRpY3RJdGVtTGlzdCIsImNvbCIsImxlbmd0aCIsInNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwicmFuZCIsInN1YkNsYXNzQXR0ciIsImFjdGl2ZSIsIl9zdWJDbGFzc0F0dHIiLCJzYXZhIiwiZGVsdGEiLCJzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwibWFzayIsImlucHV0XzMwMzciLCJvcF90eXBlIiwidXJsIiwiY2FuY2VsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFxdEJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUNBO0VBQ0FBO0lBQ0FDO0VBQ0E7RUFDQUM7SUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUFBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUNBQztNQUFBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BRUFDO01BQ0FDO1FBQ0FDO1VBQ0FDO1FBQ0E7TUFDQTtNQUNBQztNQUNBQztNQUNBQztJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBQztNQUFBdEI7SUFBQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTs7SUFFQTtJQUNBO0VBQ0E7O0VBQ0F1QjtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFB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QXJFO1FBQ0F1QztRQUNBK0I7UUFDQUM7UUFDQUM7UUFDQUw7UUFDQU07UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQXBHO1FBQ0FxRztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBckY7UUFDQTtVQUNBO1VBQ0E7WUFDQTtZQUNBO2NBQUF0QjtjQUFBK0I7Y0FBQUM7Y0FBQUM7WUFBQSxRQUNBWDtjQUFBdEI7Y0FBQStCO2NBQUFDO2NBQUFDO1lBQUE7WUFDQTtVQUNBO1lBQ0E7WUFDQTtjQUFBakM7Y0FBQStCO2NBQUFDO2NBQUFDO1lBQUE7WUFFQTtZQUNBLG9EQUNBUiw2RUFDQTtjQUNBO2NBQ0FIO2dCQUNBb0c7Y0FDQTtZQUNBO1VBQ0E7UUFDQTtVQUNBcEc7WUFBQXRCO1lBQUErQjtZQUFBQztZQUFBQztVQUFBO1FBQ0E7TUFDQTtRQUNBO1FBQ0FYO1FBQ0FBO1VBQUF0QjtVQUFBK0I7VUFBQUM7VUFBQUM7UUFBQTtNQUNBO0lBQ0E7SUFHQTBGO01BQUE7TUFDQXJHO1FBQ0ErRjtNQUNBO0lBQ0E7RUFDQTtBQUNBO0FBQUEsMkIiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHN0eWxlPlxyXG4udi1oZWFkU3R5bGV7XHJcbiAgLyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi52LWhlYWRTdHlsZTpmaXJzdC1jaGlsZHtcclxuXHRtYXJnaW4tdG9wOiAxNXJweDtcclxufVxyXG4udi1oZWFkU3R5bGUgLnR4dF90aXRsZXtcclxuICBmb250LXNpemU6IDM0cnB4O1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB2ZXJ0aWNhbC1hbGlnbjogMTJweDtcclxufVxyXG4udi1oZWFkU3R5bGUgaW5wdXR7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7ICovXHJcblx0Lyogd2lkdGg6IDY1JTsgKi9cclxuXHR3aWR0aDogODUlOyAgICBcclxuXHRoZWlnaHQ6IDUycnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHJweDtcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuXHRwYWRkaW5nOiAxMHJweCA4cnB4IDEycnB4O1xyXG5cdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0bWFyZ2luLXRvcDogNHJweDtcclxufVxyXG4udi1oZWFkU3R5bGUgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdGZvbnQtc2l6ZTogMTJycHg7XHJcbn1cclxuLmlucHV0LXdyYXBwZXJ7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDY1JTsgICAgXHJcblx0bGluZS1oZWlnaHQ6IDIycnB4O1xufVxyXG5bbnZ1ZV0gdW5pLXZpZXcge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXI6IDAgc29saWQgIzAwMDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxyXG5cclxuLnVuaS1pbnB1dCB7XHJcblx0LyogYm9yZGVyOiBub25lOyAqL1xufVxyXG4udW5pLWljb257XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG5cdHdpZHRoOiA4JTtcbiAgICBmb250LWZhbWlseTogdW5paWNvbnM7XG4gICAgZm9udC1zaXplOiA0MHJweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAvKiB3aWR0aDogNDhycHg7ICovXG4gICAgaGVpZ2h0OiA0OHJweDtcbiAgICBsaW5lLWhlaWdodDogNDhycHg7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dmVydGljYWwtYWxpZ246IDE4cnB4O1xufVxyXG5cclxuXHJcbi52aWV3LWNvbnRlbnR7XHJcblx0bWluLWhlaWdodDogNzAwcnB4O1xyXG5cdC8qIGJvcmRlcjoxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi5kdi1wYW5lbHtcbiAgICAvKiBwYWRkaW5nOiAxMHJweCAyMHJweCA0cnB4IDBweDsgKi9cbiAgICBib3JkZXItcmFkaXVzOiAxMnJweDtcbiAgICAvKiBtYXJnaW4tYm90dG9tOiAyMHJweDsgKi9cclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4uZHYtcGFuZWw6Zmlyc3QtY2hpbGR7XG4gICAgcGFkZGluZy10b3A6IDEwcnB4O1xyXG59XG4uZHYtcGFuZWwtaW5wdXR7XHJcblx0d2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XHJcbi5kdi1wYW5lbCAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHZlcnRpY2FsLWFsaWduOiAxMnB4O1xyXG59XHJcblxyXG4uZHYtcGFuZWwgaW5wdXR7XHJcblx0LyogdmVydGljYWwtYWxpZ246IG1pZGRsZTsgKi9cclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHR3aWR0aDogNjglOyBcclxuXHRoZWlnaHQ6IDUycnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHJweDtcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDdweCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDZycHggOHJweCA4cnB4O1xyXG5cdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0bWFyZ2luLXRvcDogMHJweDtcclxufVxyXG4uZHYtcGFuZWwgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdGZvbnQtc2l6ZTogMTBycHg7XHJcbn1cclxuLmlucHV0LWRpc2FibGVke1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjMgIWltcG9ydGFudDtcclxufVxyXG4uZHYtcGFuZWwgLmZvcm0taXRlbS1zcGFue1xyXG5cdHZlcnRpY2FsLWFsaWduOnRvcDtcclxuICAgIGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcblx0d29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHdpZHRoOiBjYWxjKDEwMCUgLSAxMDBweCk7XHJcblx0LyogYm9yZGVyOiAxcnB4IHNvbGlkIHJlZDsgKi9cclxufVxyXG5idXR0b24uYnRuX2NhbmNlbCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuYnV0dG9uLmJ0bl9hZGQge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMzhycHg7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG4jZHZfc2VsZWN0e1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR3aWR0aDogNjYlOyBcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuXHQvKiBwYWRkaW5nOiAxMHJweCA4cnB4IDEycnB4OyAqL1xyXG5cdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0bWFyZ2luLXRvcDogMHJweDtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogMTBweDtcclxufVxyXG4jZHZfc2VsZWN0IC51bmktc2VsZWN0e1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1x0XHJcbn1cclxuI2R2X3NlbGVjdCAudW5pLXNlbGVjdF9faW5wdXQtdGV4dHtcclxuXHRjb2xvcjogIzJkOGNmMDtcdFxyXG59XHJcblxyXG4ucGFuZWxfdGl0bGV7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMjdBNkUxO1xyXG5cdGxpbmUtaGVpZ2h0OiA4MHJweDtcclxuXHRjb2xvcjogI2ZmZjtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0IGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcbi52LXBhbmVse1xyXG5cdG1pbi1oZWlnaHQ6NzcwcnB4O1xyXG59XHJcbi52LXBhbmVsbGlzdHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6I2VmZWZlZjtcclxuXHRib3JkZXI6NHJweCBzb2xpZCAjYWFhO1xyXG5cdGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG5cdG1hcmdpbjogMTBycHggMTBycHggMHJweCAyMHJweDtcclxufVxyXG4udi1wYW5lbGRlbHtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4ucGFuZWxfZGVse1xyXG5cdGZvbnQtc2l6ZTogNDRycHg7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBpbml0aWFsO1xyXG5cdG1hcmdpbi10b3A6IDEwcnB4O1xyXG5cdG1hcmdpbi1yaWdodDogMjBycHg7XHJcbn1cclxuYnV0dG9uLmJ0bl9hZGQge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiByaWdodDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuYnV0dG9uLmJ0bl9jYW5jZWwge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX3NhdmEge1xyXG5cdHdpZHRoOjEwMCU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRiYWNrZ3JvdW5kOiAjMjdBNkUxO1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRjb2xvcjogI2ZmZjtcclxuICAgIGZvbnQtc2l6ZTogMzhycHg7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5jbGFzc19hdHRyX2JvZHkgLmZvcm0tZ3JvdXAge1xyXG5cdG1hcmdpbjogMjBycHggMzBycHg7XHJcbiAgICAvKiBtYXJnaW4tbGVmdDogLTEycHg7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyAqL1xyXG59XHJcbi5zdWJjbGFzc19hdHRyX2JvZHkgLmZvcm0tZ3JvdXAge1xyXG5cdG1hcmdpbjogMjBycHggMTBycHg7XHJcbiAgICAvKiBtYXJnaW4tbGVmdDogLTEycHg7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyAqL1xyXG59XHJcbi5mb3JtLWdyb3VwID4gbGFiZWxbY2xhc3MqPVwiY29sLVwiXSB7XHJcbiAgICBtYXJnaW4tYm90dG9tOiA4cnB4O1xyXG5cdGZvbnQtc2l6ZTogMzJycHg7XHJcbn1cclxuLmZvcm0tZ3JvdXAgbGFiZWwge1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIGxpbmUtaGVpZ2h0OiA2MHJweDtcclxufVxyXG4udHhfdGl0bGUye1xyXG5cdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHZlcnRpY2FsLWFsaWduOiAtMnB4O1xyXG59XHJcbi5hdHRyX2ZpZWxke1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdG1hcmdpbi1sZWZ0OiA4cHg7XHJcblx0Lyogd2lkdGg6IDcxJTsgKi9cclxufVxyXG4udGV4dC1yaWdodDIge1xyXG5cdG1hcmdpbjogMDtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogLTRweDtcclxuXHRtYXJnaW4tbGVmdDogOXB4O1xyXG5cdGZsb2F0OiBub25lO1xyXG5cdGZvbnQtc2l6ZTogNDRycHg7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbmlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEycnB4O1xyXG59XHJcbi52LXBhbmVsIGlucHV0e1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0d2lkdGg6IDk4JTtcclxuXHRoZWlnaHQ6IDUycnB4O1xyXG5cdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMDQ2ZGIzO1xyXG5cdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiA0cnB4O1xyXG59XHJcbi5kYXRlX2lwdXR7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogOTglOyAqL1xyXG5cdGhlaWdodDogNjJycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMwNDZkYjM7XHJcblx0cGFkZGluZzogMTBycHggOHJweCA0cnB4O1xyXG5cdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcbn1cclxuLmR2X2lucHV0e1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogNjUlOyAgICBcclxuXHQvKiBsaW5lLWhlaWdodDogMjJycHg7ICovXG59XHJcbi52aWV3LXBvcHVwe1xyXG5cdHBvc2l0aW9uOnJlbGF0aXZlO1xyXG59XHJcbi5wb3B1cC1jb250ZW50IHtcclxuXHRAaW5jbHVkZSBmbGV4O1xyXG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcblx0cGFkZGluZzogMzBycHg7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHQvKiBoZWlnaHQ6IDE1MHB4OyAqL1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgKi9cclxufVxyXG4ucG9wdXAtY29udCB7XHJcblx0b3ZlcmZsb3cteTogYXV0bztcclxuXHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcbn1cclxuLnBvcHVwLWhlaWdodCB7XHJcblx0QGluY2x1ZGUgaGVpZ2h0O1xyXG5cdC8qIHdpZHRoOiAyMDBweDsgKi9cclxufVxyXG4ucG9wdXAtaGVhZGVye1xyXG5cdGZvbnQtc2l6ZTogNDJycHg7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0bWFyZ2luOjIwcnB4IDIwcnB4IDBweCAyMHJweDtcclxufVxyXG4udmlld19wb3B1cF9DaGVja0xpc3R7XHJcblx0bWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbn1cclxuLnBvcHVwLWZvb3RlcntcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0cG9zaXRpb246YWJzb2x1dGU7XHJcblx0Ym90dG9tOjA7XHJcblx0cmlnaHQ6MjBycHg7XHJcbn1cclxuYnV0dG9uLmJ0bl9wb3B1cF9hZGQge1xyXG5cdHdpZHRoOjE4MHJweDtcclxuXHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRtYXJnaW4tcmlnaHQ6IDIwcnB4O1xyXG5cdHBhZGRpbmc6IDE1cnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdC8qIGZsb2F0OiBsZWZ0OyAqL1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX3BvcHVwX2NhbmNlbCB7XHJcblx0d2lkdGg6MTgwcnB4O1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDE1cnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdC8qIGZsb2F0OiByaWdodDsgKi9cclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuLmJrLWFjdGl2ZXtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZGQ0IyO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkICNENkZDQjI7XHJcbn1cclxuLnZpZXctZmxvb3J7XHJcblx0cGFkZGluZzogMCAyMHJweDtcclxufVxuPC9zdHlsZT5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5cdC5kZW1vLXVuaS1yb3cge1xuXHRcdG1hcmdpbi1ib3R0b206IDBweDtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQ6OnYtZGVlcCAudW5pLXJvdyB7XG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xuXHR9XHJcblx0LnZpZXctdGFicGFnZSA6OnYtZGVlcCAudW5pLXJvdyAge1xuXHRcdG1hcmdpbi1ib3R0b206IDVweDtcblx0fVxuXHQuZGVtby11bmktY29sIHtcblx0XHRoZWlnaHQ6IDM2cHg7XG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xuXHR9XHJcblx0LmRlbW8tdW5pLXJvdyAudW5pLWlucHV0e1xyXG5cdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDEyMHB4KTtcclxuXHR9XHJcblx0LnRleHQge1xyXG5cdCAgICBmb250LXNpemU6IDEycHg7XHJcblx0ICAgIGNvbG9yOiAjNjY2O1xyXG5cdCAgICBtYXJnaW4tdG9wOiA1cHg7XHJcblx0fVxyXG5cdC8vIC51bmktcHgtNSB7XHJcblx0Ly8gXHRtYXJnaW46IDA7XHJcblx0Ly8gXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0Ly8gXHRtYXJnaW46IDA7ICAgIFxyXG5cdC8vIFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdC8vIH1cclxuXHQvLyAudW5pLXNlbGVjdHtcclxuXHQvLyBcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcblx0Ly8gXHRib3JkZXItcmFkaXVzOiAwO1xyXG5cdC8vIH1cclxuXHQvLyAudW5pLXNlY3Rpb24tY29udGVudHtcclxuXHQvLyBcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHQvLyBcdHdpZHRoOiAxMDBweDsgXHJcblx0Ly8gXHRib3JkZXI6IDFweCBzb2xpZCByZWQ7XHJcblx0Ly8gfVxuPC9zdHlsZT5cblxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdDwhLS0g6KGo5aS05qC35byPIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWhlYWRTdHlsZVwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1wiID5cclxuXHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGl0ZW0udXNlRGljdD9pdGVtLmRpY3Q6aXRlbS5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdDx1bmktZGF0YS1zZWxlY3QgaWQ9XCJkdl9zZWxlY3RcIiB2LWlmPVwiaXRlbS5uYW1lPT0nU2VsZWN0J1wiXHJcblx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCJcclxuXHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0OmxvY2FsZGF0YT1cIml0ZW0uZGljdFwiXHJcblx0XHRcdFx0QGNoYW5nZT1cIm9uY2hhbmdlKGl0ZW0pXCJcclxuXHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHQ6Y2xlYXI9XCJmYWxzZVwiXHJcblx0XHRcdD48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0PCEtLSDkuIvmi4nmoYYt5aSa6YCJIC0tPlxyXG5cdFx0XHQ8IS0tIDxzZWxlY3QtY3kgdi1lbHNlLWlmPVwiYXR0ci5zZWxlY3Q9PXRydWVcIiAgOnZhbHVlPVwiaXRlbS52YWx1ZVwiIFxyXG5cdFx0XHQgIDpuYW1lPVwiaXRlbS5maWVsZElkXCIgXHJcblx0XHRcdCAgOm9wdGlvbnM9XCJpdGVtLmRpY3RcIiBcclxuXHRcdFx0ICBzaG93Q2xlYXJJY29uPVwidHJ1ZVwiIFxyXG5cdFx0XHQgIEBjaGFuZ2U9XCJvbmNoYW5nZTJcIiBcclxuXHRcdFx0ICA6ZGF0YS1pbmRleD1cImluZGV4XCIgXHJcblx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdD48L3NlbGVjdC1jeT4gLS0+XHJcblx0XHRcdDwhLS0g5paH5pys5qGGL+aVsOWtl+ahhiAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J0lucHV0JyB8fCBpdGVtLm5hbWU9PSdJbnB1dE51bWJlcidcIj5cblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRAY2hhbmdlPVwib25jaGFuZ2UoaXRlbSlcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJ1bmktaW5wdXRcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0OmZvY3VzPVwiZm9jdXNNYXRlcmlhXCJcclxuXHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGl0ZW0pXCIgXHJcblx0XHRcdFx0XHRAYmx1cj1cIm9uZXZlbnQoaXRlbSlcIlxyXG5cdFx0XHRcdC8+XG5cdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcuc3VmZml4XCIgXHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnN1ZmZpeF1cIlxuXHRcdFx0XHRcdEBjbGljaz1cIm9uY2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHQgICAgPC92aWV3PlxyXG5cdFx0XHQ8IS0tIOWkmuihjOaWh+acrCAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J1RleHRhcmVhJ1wiPlxyXG5cdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHQgIDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdCAgQGJsdXI9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIiBcclxuXHRcdFx0XHQgIDpkYXRhLWluZGV4PVwiaW5kZXhcIiBcclxuXHRcdFx0XHQgIHN0eWxlPVwiaGVpZ2h0OjYwcHg7XCIgXHJcblx0XHRcdFx0ICA6c3R5bGU9XCJ7J3dpZHRoJzonOTYlJ31cIiBcclxuXHRcdFx0XHQgIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdD48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFxyXG5cdFx0ICAgIDwvdmlldz5cclxuXHRcdFx0PCEtLSDlpI3pgInmoYYgLS0+XHJcblx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgdi1pZj1cIml0ZW0ubmFtZT09J0NoZWNrYm94J1wiXHJcblx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIFxyXG5cdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJpdGVtLnZhbHVlXCIgXHJcblx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIj5cclxuXHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiaXRlbS52YWx1ZVwiIDpjaGVja2VkPVwiaXRlbS52YWx1ZVwiLz5cclxuXHRcdFx0XHRcdDx0ZXh0Pnt7aXRlbS5sYWJlbH19PC90ZXh0PlxyXG5cdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdDwhLS0gU3dpdGNo5byA5YWzIC0tPlxyXG5cdFx0XHQ8c3dpdGNoIHYtaWY9XCJpdGVtLm5hbWU9PSdTd2l0Y2gnXCIgOmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdCAgdi1tb2RlbD1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0ICBAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCIgXHJcblx0XHRcdCAgOnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIi8+XHJcblx0XHRcdDwhLS0g5pel5pyf5pe26Ze0IC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiaXRlbS5uYW1lPT0nVGltZVBpY2tlcicgfHwgaXRlbS5uYW1lPT0nRGF0ZVBpY2tlcidcIj5cclxuXHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgY2xhc3M9XCJkYXRlX2lwdXRcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiBcclxuXHRcdFx0XHQgIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdCAgOnZhbHVlPVwiaXRlbS52YWx1ZVwiIFxyXG5cdFx0XHRcdCAgQGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIFxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHQgICA8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7aXRlbS52YWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PCEtLSDku47mlbDmja4gLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtcGFuZWxcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsX3RpdGxlXCI+e3twYXJhbS5TdWJfQ2xzLlRpdGxlfX08L2Rpdj5cclxuXHRcdFx0PCEtLSDku47mlbDmja7miavnoIHljLogLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidi1hcmVhIGNsYXNzX2F0dHJfYm9keVwiIHYtaWY9XCJwYXJhbS5TdWJfQ2xzLkNhbl9BZGRfRGVsZXRlID09IHRydWVcIj5cclxuXHRcdFx0XHQ8aDQgc3R5bGU9XCJtYXJnaW46IDE1cnB4IDAgMCAzMHJweDtmb250LXdlaWdodDogYm9sZDtcIj7mlrDlop57e3BhcmFtLlN1Yl9DbHMuTmFtZSB9fTwvaDQ+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcblx0XHRcdFx0XHQ8IS0tIOW3puWPs+W4g+WxgCAtLT5cclxuXHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgPnt7cGFyYW0uU2Nhbl9Db2RlLk5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJzY2FuQ29kZVZhbFwiIEBmb2N1cz1cInNjYW5fb250YXBcIiBAYmx1cj1cInNjYW5fb25ldmVudFwiIDpzdHlsZT1cInBhcmFtLlNjYW5fQ29kZS5IYXZlX1NlbGVjdF9CdXR0b249PXRydWU/J3dpZHRoOiAnKygxMDAtKHBhcmFtLlNjYW5fQ29kZS5OYW1lLmxlbmd0aCAqIDUpLTE0KSsnJTsnOid3aWR0aDogJysoMTAwLShwYXJhbS5TY2FuX0NvZGUuTmFtZS5sZW5ndGggKiA1KS01KSsnJTsnXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIiB2LWlmPVwicGFyYW0uU2Nhbl9Db2RlLkhhdmVfU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHQ8YSBAdGFwPVwic2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uKClcIiA+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYVwiIDpjbGFzcz1cInBhcmFtLlNjYW5fQ29kZS5JbWc/cGFyYW0uU2Nhbl9Db2RlLkltZzonZmEtcGx1cy1jaXJjbGUnXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSDkuIrkuIvluIPlsYAgLS0+XHJcblx0XHRcdFx0XHQ8IS0tIDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIj57e3BhcmFtLlNjYW5fQ29kZS5OYW1lfX3vvJo8L3RleHQ+IFxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwicGFyYW0uU2Nhbl9Db2RlLkhhdmVfU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPiAgXHJcblx0XHRcdFx0XHRcdDxhIEB0YXA9XCJtc19jbGFzc0F0dHJfZXh0QnV0dG9uKClcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhXCIgOmNsYXNzPVwicGFyYW0uU2Nhbl9Db2RlLkltZz9wYXJhbS5TY2FuX0NvZGUuSW1nOidmYS1wbHVzLWNpcmNsZSdcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiID4gLS0+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFxyXG5cdFx0XHQ8IS0tIOS7juaVsOaNruaYvuekuuivpuaDheWMuiAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ2LXBhbmVsbGlzdFwiIHYtZm9yPVwiKHN1YnBhbmVsLGlpaW5kZXgpIGluIHN1YlBhbmVsTGlzdFwiIFxyXG5cdFx0XHRcdEB0YXA9XCJvblBhbmVsQ2xpY2soaWlpbmRleClcIlxuXHRcdFx0XHQ6Y2xhc3M9XCJhY3RpdmVsaXN0W2lpaW5kZXhdLmFjdGl2ZT09dHJ1ZT8nYmstYWN0aXZlJzonJ1wiPlxyXG5cdFx0XHQgIDx2aWV3IGNsYXNzPVwidi1hcmVhIGR2LXBhbmVsXCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gc3VicGFuZWwuc3ViQ2xhc3NBdHRyLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtaW5wdXRcIj5cclxuXHRcdFx0XHRcdDwhLS0g5pmu6YCa5biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0PHZpZXcgdi1pZj1cIml0ZW0ubmFtZSE9J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiIHYtaWY9XCJpdGVtLmRpc2FibGVkXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwhLS0g5paH5pys5qGGL+aVsOWtl+ahhiAtLT5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiIHYtaWY9XCIoaXRlbS5uYW1lPT0nSW5wdXQnIHx8IGl0ZW0ubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWl0ZW0uZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnByZWZpeFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaWNvblwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdEBjaGFuZ2U9XCJvbmNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0OmZvY3VzPVwiZm9jdXNNYXRlcmlhXCJcclxuXHRcdFx0XHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGl0ZW0pXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRAYmx1cj1cIm9uZXZlbnQoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvbmNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwhLS0g5LiL5ouJ5qGGLeWNlemAiSBpdGVtLnVzZURpY3Q/aXRlbS5kaWN0Oml0ZW0uc2VsZWN0aW9ucy0tPlxyXG5cdFx0XHRcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cIml0ZW0ubmFtZT09J1NlbGVjdCcgJiYgIWl0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHQ6bG9jYWxkYXRhPVwiaXRlbS5kaWN0XCJcclxuXHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25jaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0PjwvdW5pLWRhdGEtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHQ8IS0tIOWkmuihjOaWh+acrCAtLT5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J1RleHRhcmVhJyAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cInVuaS1pbnB1dFwiIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHQgIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdFx0XHRcdCAgOnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0ICBAYmx1cj1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIFxyXG5cdFx0XHRcdFx0XHRcdCAgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiBcclxuXHRcdFx0XHRcdFx0XHQgIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0PjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PCEtLSDlpI3pgInmoYYgLS0+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgdi1pZj1cIml0ZW0ubmFtZT09J0NoZWNrYm94J1wiXHJcblx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIFxyXG5cdFx0XHRcdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJpdGVtLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIj5cclxuXHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiaXRlbS52YWx1ZVwiIDpjaGVja2VkPVwiaXRlbS52YWx1ZVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0Pnt7aXRlbS5sYWJlbH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdDwhLS0gU3dpdGNo5byA5YWzIC0tPlxyXG5cdFx0XHRcdFx0XHQ8c3dpdGNoIHYtaWY9XCJpdGVtLm5hbWU9PSdTd2l0Y2gnXCIgOmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0di1tb2RlbD1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCIgXHJcblx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIi8+XHJcblx0XHRcdFx0XHRcdDwhLS0g5pel5pyf5pe26Ze0IC0tPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiKGl0ZW0ubmFtZT09J1RpbWVQaWNrZXInIHx8IGl0ZW0ubmFtZT09J0RhdGVQaWNrZXInKSAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiBjbGFzcz1cImRhdGVfaXB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0ICA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHQgIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHQgIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIiBcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0ICAgPHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2l0ZW0udmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PCEtLSDmoIXmoLzluIPlsYAgLS0+XHJcblx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdDx1bmktY29sIHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdDpzcGFuPVwiaXRlbS5zZXR0aW5nLnNwYW5MaXN0P2l0ZW0uc2V0dGluZy5zcGFuTGlzdFtrZXldOjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiPlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiIHYtaWY9XCIoY29scy5uYW1lPT0nSW5wdXQnIHx8IGNvbHMubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25jaGFuZ2UoY29scylcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWlucHV0XCIgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dCc/J3RleHQnOmNvbHMubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiY29scy52YWx1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6Y29scy5zZXR0aW5nLnByZWZpeCAmJiBjb2xzLnNldHRpbmcuc3VmZml4Pyc3OCUnOmNvbHMuc2V0dGluZy5wcmVmaXggfHwgY29scy5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGNvbHMpXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGJsdXI9XCJvbmV2ZW50KGNvbHMpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5zdWZmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvbmNoYW5nZShjb2xzKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGNvbHMudXNlRGljdD9jb2xzLmRpY3Q6Y29scy5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cImNvbHMubmFtZT09J1NlbGVjdCcgJiYgIWNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6bG9jYWxkYXRhPVwiY29scy5kaWN0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uY2hhbmdlKGNvbHMpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5aSa6KGM5paH5pysIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cImNvbHMubmFtZT09J1RleHRhcmVhJyAmJiAhY29scy5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJ1bmktaW5wdXRcIiA6dmFsdWU9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgQGJsdXI9XCJvbk1vZGVsVmFsdWUoY29scylcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBzdHlsZT1cImhlaWdodDo2MHB4O1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5aSN6YCJ5qGGIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiB2LWlmPVwiY29scy5uYW1lPT0nQ2hlY2tib3gnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGNvbHMpXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOicxMHJweCd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiY29scy52YWx1ZVwiIDpjaGVja2VkPVwiY29scy52YWx1ZVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2NvbHMubGFiZWx9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIFN3aXRjaOW8gOWFsyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDxzd2l0Y2ggdi1pZj1cImNvbHMubmFtZT09J1N3aXRjaCdcIiA6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShjb2xzKVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzonMTBycHgnfVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5pel5pyf5pe26Ze0IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIihjb2xzLm5hbWU9PSdUaW1lUGlja2VyJyB8fCBjb2xzLm5hbWU9PSdEYXRlUGlja2VyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHBpY2tlciBtb2RlPVwiZGF0ZVwiIGNsYXNzPVwiZGF0ZV9pcHV0XCIgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOnZhbHVlPVwiY29scy52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoY29scylcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICA8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7Y29scy52YWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0ICA8L3ZpZXc+XHJcblx0XHRcdCAgXHJcblx0XHRcdCAgPHZpZXcgY2xhc3M9XCJ2LXBhbmVsZGVsXCIgdi1pZj1cInBhcmFtLlN1Yl9DbHMuQ2FuX0FkZF9EZWxldGUgPT0gdHJ1ZVwiPlxyXG5cdFx0XHQgIFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwicGFuZWxfZGVsXCIgQHRhcD1cInBhbmVsX2RlbChpaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZnUtZGVsZXRlXCI+PC9pPjwvYT5cclxuXHRcdFx0ICA8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHRcdFxyXG5cdFx0XHJcblx0XHQ8dmlldyBjbGFzcz1cInZpZXctZmxvb3JcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIiB2LWlmPVwicGFyYW0uU3ViX0Nscy5DYW5fQWRkX0RlbGV0ZSA9PSB0cnVlXCI+5Y+W5raIPC9idXR0b24+XHJcblx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwic2F2YVwiIGNsYXNzPVwiYnRuX2FkZFwiIHYtaWY9XCJwYXJhbS5TdWJfQ2xzLkNhbl9BZGRfRGVsZXRlID09IHRydWVcIj57e3RpdGxlfX08L2J1dHRvbj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJzYXZhXCIgY2xhc3M9XCJidG5fc2F2YVwiIHYtZWxzZS1pZj1cInBhcmFtLlN1Yl9DbHMuQ2FuX0FkZF9EZWxldGUgPT0gZmFsc2VcIj57e3RpdGxlfX08L2J1dHRvbj5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS0g5pmu6YCa5by556qXIHRvcCBib3R0b20gY2VudGVyIGxlZnQgcmlnaHQgLS0+XHJcblx0XHQ8dmlldz5cclxuXHRcdFx0PHVuaS1wb3B1cCBjbGFzcz1cInZpZXctcG9wdXBcIiByZWY9XCJwb3B1cFwiIGJhY2tncm91bmQtY29sb3I9XCIjZmZmXCIgQGNoYW5nZT1cInBvcHVwQ2hhbmdlXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj57e2NoZWNrX2xpc3QudGl0bGV9fTwvdmlldz5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIiA6Y2xhc3M9XCJ7ICdwb3B1cC1oZWlnaHQnOiBwb3B1cFR5cGUgPT09ICdsZWZ0JyB8fCBwb3B1cFR5cGUgPT09ICdyaWdodCcgfVwiIFxyXG5cdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOmNoZWNrX2xpc3Qud2lkdGg/Y2hlY2tfbGlzdC53aWR0aCsncHgnOicyMDBweCcsJ2hlaWdodCc6Y2hlY2tfbGlzdC5oZWlnaHQ/Y2hlY2tfbGlzdC5oZWlnaHQrJ3B4JzonODglJ31cIj5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwicG9wdXAtY29udFwiIDpzdHlsZT1cInsnaGVpZ2h0JzpjaGVja19saXN0LmhlaWdodD9jaGVja19saXN0LmhlaWdodC00NSsncHgnOic0MTVweCd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwidmlld19wb3B1cF9DaGVja0xpc3RcIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBjaGVja19saXN0Lml0ZW1zXCI+XHJcblx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfbGlzdFwiIEBjaGFuZ2U9XCJjaGVja0NoYW5nZVwiIDpkYXRhLWlzY2hlY2s9XCJpdGVtLmNoZWNrXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiICA6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzogJzEwcnB4J31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94IDp2YWx1ZT1cIml0ZW0uY2hlY2tcIiA6Y2hlY2tlZD1cIml0ZW0uY2hlY2tcIi8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0Pnt7aXRlbS5uYW1lfX08L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XHJcblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwicG9wdXBfc2F2YVwiIGNsYXNzPVwiYnRuX3BvcHVwX2FkZFwiPuehruWumjwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cInBvcHVwX2NhbmNlbFwiIGNsYXNzPVwiYnRuX3BvcHVwX2NhbmNlbFwiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC91bmktcG9wdXA+XHJcblx0XHQ8L3ZpZXc+XG4gICAgPC92aWV3PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+aWsOWinicsXG4gICAgICBwYXJhbToge30sXHJcblx0ICBlZGl0X2luaXRhbF9ldmVudDpcIlwiLCAgLy/lvLnnqpfliJ3lp4vljJbkuovku7ZJRFxyXG5cdCAgZWRpdF9va19ldmVudDpcIlwiLCAgICAgIC8v5by556qX54K55Ye7T0sg6Kem5Y+R5LqL5Lu2SURcclxuXHQgIGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXHJcblx0ICBlZGl0X2NvbXBvc2VfY2xzX2lkOlwiXCIsXHJcblx0ICBnbG9iYWxfYXR0cjpbXSxcclxuXHQgIHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cclxuXHQgIHNjYW5Db2RlVmFsOlwiXCIsXHJcblx0ICBzdWJDbGFzc0F0dHJMaXN0OltdLFxyXG5cdCAgc3ViUGFuZWxMaXN0OltdLFxyXG5cdCAgc3ViQ2xhc3NHcmlkU3R5bGU6W10sXHJcblx0ICBwb3B1cFR5cGU6XCJjZW50ZXJcIixcclxuXHQgIGNoZWNrX2xpc3Q6e30sXHJcblx0ICBcclxuXHQgIGZvY3VzTWF0ZXJpYTpmYWxzZSxcclxuXHQgIGhlYWRfc3R5bGVkZWY6e1xyXG5cdFx0Zm9ybTp7XHJcblx0XHRcdGl0ZW1zOltdXHJcblx0XHR9XHJcblx0ICB9LFxuICAgICAgZGV0YWlsMV9zdHlsZWRlZjp7fSxcbiAgICAgIGRldGFpbDFTdHlsZURlZkxpc3Q6W10sXHJcblx0ICBhY3RpdmVsaXN0OltdLFxuICAgIH07XG4gIH0sXHJcbiAgb25Mb2FkKG9wdGlvbnMpIHtcclxuXHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuXHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxyXG5cdHRoaXMuJGRhdGEudGl0bGUgPSBvcHRpb25zLnRpdGxlbmFtZTtcclxuXHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnBhcmFtKTtcclxuXHQgLy/ojrflj5bmlbDmja7nsbvnmoToh6rlrprkuYnooajljZXlj4LmlbBcclxuXHR0aGlzLkhlYWRfVUlTdHlsZUdldEluZm8odGhpcy5wYXJhbS5NYXN0ZXJfQ2xzLklELHRoaXMucGFyYW0uTWFzdGVyX0Nscy5VSV9TdHlsZS5JRCk7XHJcblx0dGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uU3ViX0Nscy5JRCx0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVUlfU3R5bGUuSUQpO1xyXG5cdFxyXG5cdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0Ly8gdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgXHJcbiAgfSxcdFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgSGVhZF9VSVN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsaW5kZXgpID0+IHtcclxuXHRcdFx0XHQgICAgaWYoZWxlLnVzZURpY3Q9PXRydWUpeyAvL+WIpOaWrXVzZURpY3TmmK/lkKbkvb/nlKjlrZflhbhcclxuXHRcdFx0XHQgICAgICAgIGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCxpbmRleCwnbWFzdCcpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMVwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcbiAgICBhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZi5TZWxCdXRfQ2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdFx0JHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihlbGUudXNlRGljdD09dHJ1ZSl7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdCAgICAgICAgYXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LGluZGV4LCdzdWInKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdC8vIHZhciBhYSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxuICAgIGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHR0aGlzLmRhdGE9W107XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdGRpY3RfbmFtZTogZGljdC5uYW1lXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RHZXRJbmZvJyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHR2YXIgaXRlbU5hbWU9Jyc7XHJcblx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZGljdF9pdGVtX2xpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihpdGVtLmlzX2RlZmF1bHQ9PScxJylcclxuXHRcdFx0XHQgICAgICAgIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdCAgICBsaXN0LnB1c2goe1xyXG5cdFx0XHRcdCAgICAgICAgdGV4dDppdGVtLnZhbHVlLFxyXG5cdFx0XHRcdCAgICAgICAgdmFsdWU6aXRlbS5uYW1lLFxyXG5cdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHRcdFx0aWYodHlwZT09J21hc3QnKXsvL+aciem7mOiupOWAvO+8jOaYvuekuum7mOiupOWAvFxyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRcdGlmKGl0ZW1OYW1lKXtcclxuXHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS52YWx1ZT1pdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmZpZWxkSWQ7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0JHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5kaWN0PWxpc3Q7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjNcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0XHJcblx0b250YXAoaXRlbSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdC8vY29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IHJlc3VsdC5kZWNvZGVkYXRhKXtcclxuXHRcdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0aWYocmVzdWx0LmRlY29kZWRhdGEpeyAvL+esrOS4gOS4qui+k+WFpeahhuS4jeS4uuepulxyXG5cdFx0XHRcdFx0JHRoaXMuZm9jdXNNYXRlcmlhID0gdHJ1ZTsgLy/liJ3lp4vljJbvvIznrKzkuozkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0Ly8gXHQkdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgLy/nrKzkuozkuKrovpPlhaXmoYbojrflj5bnhKbngrlcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0fSwxMDAwKTtcclxuXHRcdFx0XHRcdC8vIH0sNTAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcclxuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHQgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0ICAgICAgICB2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0ICAgICAgICBcdGF0dHI6IGEsXHJcblx0XHRcdCAgICAgICAgXHR2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdFx0ICAgICAgICB9KSk7XHJcblx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcclxuXHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcclxuXHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXHJcblx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uZXZlbnQoaXRlbSl7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHQgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0ICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHQgICAgICAgIHZhciByZXEgPSBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBcdGF0dHI6IGEsXHJcblx0XHQgICAgICAgIFx0dmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICAgIH0pKTtcclxuXHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxyXG5cdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdCAgICAgICAgXHRtYXN0X2F0dHI6IFtdLFxyXG5cdFx0ICAgICAgICBcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiBpdGVtLnZhbHVlIH1dXHJcblx0XHQgICAgICAgIH1cclxuXHRcdCAgICAgICAgXHJcblx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0XHQgICAgfVxyXG5cdFx0fVxyXG5cdFx0XHJcblx0fSxcclxuXHRvbmNoYW5nZShpdGVtKSB7XHJcblx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgZXZlbnRpZCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50LmlkOyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdCAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdCAgICAgICAgdmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQgICAgICAgIFx0YXR0cjogYSxcclxuXHRcdCAgICAgICAgXHR2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgICAgfSkpO1xyXG5cdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdCAgICAgICAgfVxyXG5cdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdCAgICB9XHJcblx0XHR9XHJcblx0XHRcclxuXHR9LFxyXG5cdHNjYW5fb250YXAoZSl7IC8v5omr56CB5Yy65omr56CB5Yqf6IO9XHJcblx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0dmFyIGlzZmxhZz10cnVlO1xyXG5cdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Qpe1xyXG5cdFx0XHRcdGlmKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IHJlc3VsdC5kZWNvZGVkYXRhKSBcclxuXHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRpZiAoaXNmbGFnKSB7XHJcblx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9cmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXHJcblx0XHRcdFx0XHR2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0XHRcdHZhciBtYXN0X3JlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdFx0dmFyIG9ial9hdHRyMiA9IHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdFx0dmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyMikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogb2JqX2F0dHIyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiAnNycsLy9cIjBcIixcclxuXHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgIGF0dHI6IG1hc3RfcmVxLFxyXG5cdFx0XHRcdFx0XHRzdWJfYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cclxuXHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH0sXHJcblx0c2Nhbl9vbmV2ZW50KGUpe1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0aWYoZS50YXJnZXQudmFsdWUpe1xyXG5cdFx0XHR2YXIgaXNmbGFnPXRydWU7XHJcblx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XHJcblx0XHRcdFx0aWYodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaV0uc2NhbkNvZGVWYWwgPT0gZS50YXJnZXQudmFsdWUpIFxyXG5cdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXHJcblx0XHRcdGlmIChpc2ZsYWcpIHtcclxuXHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1lLnRhcmdldC52YWx1ZTtcclxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcclxuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvlsZ7mgKdcclxuXHRcdFx0XHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0XHRcdFx0dmFyIG1hc3RfcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHQvLyB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0XHRcdFx0Ly8gICBKU09OLnN0cmluZ2lmeShcclxuXHRcdFx0XHRcdC8vICAgICBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0Ly8gICAgICAgYXR0cjogYSxcclxuXHRcdFx0XHRcdC8vICAgICAgIHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0Ly8gICAgIH0pKVxyXG5cdFx0XHRcdFx0Ly8gICApXHJcblx0XHRcdFx0XHQvLyApO1xyXG5cdFx0XHRcdFx0dmFyIG9ial9hdHRyMiA9IHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdFx0dmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyMikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogb2JqX2F0dHIyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdFx0ZWR0eXBlOiAnNycsLy9cIjBcIixcclxuXHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdFx0Y2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgIGF0dHI6IG1hc3RfcmVxLFxyXG5cdFx0XHRcdFx0XHRzdWJfYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0dGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cdG9uTW9kZWxWYWx1ZShpdGVtKSB7IC8v57uR5a6aTW9kZWzlgLxcclxuXHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0fSxcclxuXHRwYW5lbF9kZWwoaW5kZXgpeyAvL+mdouadv+WIoOmZpFxyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdGlmICh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpbmRleF0uc2NhbkNvZGVWYWwgPT0gdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCkge1xyXG5cdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPScnO1xyXG5cdFx0fVxyXG5cdFx0aWYoIXRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRClcclxuXHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdGVsc2V7XHJcblx0XHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdFx0Y2xhc3NfaWQ6dGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdGNsYXNzX25hbWU6JycsXHJcblx0XHRcdFx0b2JqX2lkOnRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRFxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdC8vIHJldHVybjtcclxuXHRcdFx0dW5pLnNob3dMb2FkaW5nKHsgdGl0bGU6XCLliqDovb3kuK0uLi5cIiB9KTtcclxuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5Yig6Zmk5oiQ5Yqf77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo5LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24oZSl7IC8v6YCJ5oup5oyJ6ZKu5YmNXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIEJlZm9yZV9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQmVmb3JlX1NlbGVjdF9FdmVudDtcclxuXHRcdGlmKCFCZWZvcmVfU2VsZWN0X0V2ZW50KXtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5YmN5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0dmFyIG1hc3RfYXR0ciA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0fSkpO1xyXG5cdFx0dmFyIG9iamVjdHM9W107XHJcblx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xyXG5cdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBzdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0dmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0XHRzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0ICAgIGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0XHRcdCAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0XHRcdCAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0XHRcdCAgICAgIH0pO1xyXG5cdFx0XHQgICAgfWVsc2VcclxuXHRcdFx0ICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR2YXIgc3ViX3JlcSA9IE9iamVjdC5rZXlzKGRldGFpbF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHR2YWx1ZTogZGV0YWlsX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdFx0fSkpO1xyXG5cdFx0XHRvYmplY3RzLnB1c2goe1xyXG5cdFx0XHRcdG9ial9pZDpzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXHJcblx0XHRcdFx0b2JqX2F0dHJzOnN1Yl9yZXFcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHZhciByZXE9W107XHJcblx0XHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdFx0J2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdFx0Y2xzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55LuO5pWw5o2u57G75qCH6K+GXHJcblx0XHRcdCdidXR0b24nOiAndG9wJywgLy8gdG9wL2JvdHRvbVxyXG5cdFx0XHRidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdGVkaXRfZGxnOiB7XHJcblx0XHRcdFx0dHlwZTogJ3NtYWxsJywgLy/lsI/nqpflj6NcclxuXHRcdFx0XHRjbGFzc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHRcdH0sXHJcblx0XHRcdG1hc3Rlcl9jbHM6IHtcclxuXHRcdFx0XHRjbHNfbmFtZTogJ01CT1gnLCAvLyR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcclxuXHRcdFx0XHRvYmpfYXR0cnM6IG1hc3RfYXR0clxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdWJfY2xzOiB7XHJcblx0XHRcdFx0Y2xzX25hbWU6ICdNQk9YJywgLy8kdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLk5hbWUsXHJcblx0XHRcdFx0b2JqZWN0czogb2JqZWN0c1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0dmFyIGluZm8gPSB7XHJcblx0XHQgICAgZXZlbnRpZDogQmVmb3JlX1NlbGVjdF9FdmVudC5JRCxcclxuXHRcdCAgICBlZHR5cGU6IFwiN1wiLC8vXCIwXCIsXHJcblx0XHQgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICByY2xzaWQ6ICcnLFxyXG5cdFx0ICAgIHJvYmppZDogJycsXHJcblx0XHQgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0ICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0ICAgIGF0dHI6IFtdLFxyXG5cdFx0XHRnbG9iYWxfYXR0cjogcmVxLFxyXG5cdFx0XHRtYXN0X2F0dHI6IG1hc3RfYXR0cixcclxuXHRcdFx0aW5wdXRQYXJhbXRlcjogbWFzdF9hdHRyLFxyXG5cdFx0XHRlbnZpcm9tZW50OiBlbnZpcm9tZW50XHJcblx0XHR9XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpbmZvKTtcclxuXHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0fSxcclxuXHRwb3B1cENoYW5nZShlKSB7XHJcblx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XHJcblx0fSxcclxuXHRjaGVja0NoYW5nZShlKXsgLy/lvLnmoYZjaGVja+mAieaLqVxyXG5cdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XHJcblx0XHR2YXIgaW5kZXggPSBlLnRhcmdldC5kYXRhc2V0LmluZGV4O1xyXG5cdFx0dmFyIGlzY2hlY2sgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s7XHJcblx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdC8vIHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1bXTtcclxuXHRcdGlmKHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5tdWx0aXBsZV9jaG9pY2U9PVwiMFwiKXsgLy/liKTmlq3ml7bljZXpgInov5jmmK/lpJrpgIlcclxuXHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xyXG5cdFx0XHRcdGRhdGFbaV0uY2hlY2s9ZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGRhdGFbaW5kZXhdLmNoZWNrPWlzY2hlY2s/ZmFsc2U6dHJ1ZTtcclxuXHRcdHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1kYXRhO1xyXG5cdFx0XHJcblx0fSxcclxuXHRwb3B1cF9jYW5jZWwoZSl7IC8v5by55qGG5Y+W5raIXHJcblx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XHJcblx0fSxcclxuXHRwb3B1cF9zYXZhKGUpeyAvL+W8ueahhuehruWumiDpgInmi6nmjInpkq7lkI5cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgQWZ0ZXJfU2VsZWN0X0V2ZW50ID0gJHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLkFmdGVyX1NlbGVjdF9FdmVudDtcclxuXHRcdGlmKCFBZnRlcl9TZWxlY3RfRXZlbnQpe1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nlkI7kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdHZhciBkYXRhPVtdO1xyXG5cdFx0dmFyIG5hbWU9XCJcIjtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYoaXRlbXNbaV0uY2hlY2s9PXRydWUpe1xyXG5cdFx0XHRcdGlmKG5hbWUpXHJcblx0XHRcdFx0XHRuYW1lKz0nOyc7XHJcblx0XHRcdFx0bmFtZSs9aXRlbXNbaV0ubmFtZTtcclxuXHRcdFx0XHRkYXRhLnB1c2goe2lkOml0ZW1zW2ldLmlkLG5hbWU6aXRlbXNbaV0ubmFtZX0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZihkYXRhLmxlbmd0aD09MCl7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdHZhciBtYXN0X2F0dHIgPSBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHR2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdH0pKTtcclxuXHRcdFxyXG5cdFx0JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9bmFtZTtcclxuXHRcdHZhciBpbmZvID0ge1xyXG5cdFx0ICAgIGV2ZW50aWQ6IEFmdGVyX1NlbGVjdF9FdmVudC5JRCxcclxuXHRcdCAgICBlZHR5cGU6IFwiN1wiLFxyXG5cdFx0ICAgIHByb2plY3RpZDogJycsXHJcblx0XHQgICAgcmNsc2lkOiAnJyxcclxuXHRcdCAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHR1c2VybG9naW46ICcnLFxyXG5cdFx0XHRjbHNpZDogJ01CT1gnLFxyXG5cdFx0XHRvYmppZDogXCJcIixcclxuXHRcdFx0YXR0cjogW3thdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyx2YWx1ZTogbmFtZX1dLFxyXG5cdFx0XHRnbG9iYWxfYXR0cjogbWFzdF9hdHRyLFxyXG5cdFx0XHRpbnB1dFBhcmFtdGVyOiBkYXRhLFxyXG5cdFx0XHRlbnZpcm9tZW50OiAnJ1xyXG5cdFx0fVxyXG5cdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XHJcblx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xyXG5cdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xyXG5cdH0sXHJcblx0b25QYW5lbENsaWNrKHZhbHVlKXsgLy/ngrnlh7vpnaLmnb/pq5jkuq7mmL7npLpcclxuXHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHQgICAgdGhpcy5hY3RpdmVsaXN0LmZvckVhY2goZWxlPT57XHJcblx0ICAgICAgICBlbGUuYWN0aXZlID0gZmFsc2U7XHJcblx0ICAgIH0pO1xyXG5cdCAgICB0aGlzLmFjdGl2ZWxpc3RbdmFsdWVdLmFjdGl2ZSA9IHRydWU7XHJcblx0fSxcclxuXHRcclxuXHREYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdCAgICB9XHJcblx0XHR9O1xyXG5cdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcclxuXHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXHJcblx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHR9XHJcblx0XHRpZiAoZGF0YV9hdHRyKSB7XHJcblx0XHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7ZcclxuXHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcclxuXHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXHJcblx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4RcclxuXHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcclxuXHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xyXG5cdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xyXG5cdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXHJcblx0XHQgICAgfVxyXG5cdFx0fVxyXG5cdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xyXG5cdCAvLyAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXHJcblx0IC8vICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXHJcblx0IC8vICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6ICcnLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcclxuXHQgLy8gICAgfVxyXG5cdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0aWYoaW5mby5kYXRhSnNvbilcclxuXHRcdFx0aW5mby5kYXRhSnNvbiA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoaW5mby5kYXRhSnNvbikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgb2JqX2F0dHI9e307XHJcblx0XHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdH0pO1xyXG5cdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9JztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxyXG5cdFx0ICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxyXG5cdFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcclxuXHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXHJcblx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcclxuXHRcdCAgZGF0YV9qc29uOiBpbmZvLmRhdGFKc29uLFxyXG5cdFx0ICBjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogJycsXHJcblx0XHR9O1xyXG5cdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0Ly8gcmV0dXJuO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XHJcblx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBpZihhdHRyLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiQ05fU19WQUxVRVwiOnZhbCxcInRleHRcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLmRpY3QgPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYXR0ci5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIkNOX1NfVkFMVUVcIjp2YWwsXCJ0ZXh0XCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wuZGljdCA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2NdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKGF0dHIuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHIuZmllbGRJZF0gPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoYXR0ci5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBhdHRyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2NvbC5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciA9IGRhdGEuYWN0aW9uW2ldLnZhbHVlIHx8IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBpZihhdHRyLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0ci5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoYXR0ci5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGF0dHIuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgaWYoY29sKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtjb2wuZmllbGRJZF0gPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdH0pO1xyXG5cdFx0dmFyIGVudmlyb21lbnQgPSB7fTtcclxuXHRcdGlmKGluZm8uZW52aXJvbWVudCl7XHJcblx0XHRcdGVudmlyb21lbnQgPSBpbmZvLmVudmlyb21lbnQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdCdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHRcdFx0Y2xzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55LuO5pWw5o2u57G75qCH6K+GXHJcblx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXHJcblx0XHRcdFx0YnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0XHRcdGVkaXRfZGxnOiB7XHJcblx0XHRcdFx0XHR0eXBlOiAnc21hbGwnLCAvL+Wwj+eql+WPo1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxyXG5cdFx0XHRcdH0sXHJcblx0XHQgICAgICAgIG1hc3Rlcjoge1xyXG5cdFx0ICAgICAgICAgICAgY2xzX2lkOiBpbmZvLmNsc2lkLCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxyXG5cdFx0XHRcdFx0b2JqX2F0dHJzOm9ial9hdHRyLFxyXG5cdFx0ICAgICAgICB9XHJcblx0XHRcdH07XHJcblx0XHRcdFxyXG5cdFx0fVxyXG5cdFx0dmFyIGdsb2JhbF9hdHRyID0gdGhpcy4kZGF0YS5nbG9iYWxfYXR0cjtcclxuXHRcdGlmIChpbmZvLmdsb2JhbF9hdHRyKSB7XHJcblx0XHRcdGdsb2JhbF9hdHRyID0gaW5mby5nbG9iYWxfYXR0cjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgaW5wdXRQYXJhbXRlcj1pbmZvLmlucHV0UGFyYW10ZXI7XHJcblx0XHRpZihpbmZvLmlucHV0UGFyYW10ZXIpe1xyXG5cdFx0XHRpbmZvLmlucHV0UGFyYW10ZXIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uaW5wdXRQYXJhbXRlcikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR9XHJcblx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0XHJcblx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZD0gJ3snKyBpbmZvLmV2ZW50aWQgKyd9JztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxyXG5cdFx0ICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxyXG5cdFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxyXG5cdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcclxuXHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXHJcblx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxyXG5cdFx0ICBkYXRhX2pzb246ICcnLFxyXG5cdFx0ICBjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5mby5pbnB1dFBhcmFtdGVyLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHJldHVybjtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaWkrKykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2lpXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIkNOX1NfVkFMVUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHIudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykgeyAgLy/miZPlvIDkvqfmu5HlvLnmoYZcclxuXHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihhY3Rpb24udmFsdWUuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJGRhdGEuY2hlY2tfbGlzdD0gYWN0aW9uLnZhbHVlLmNvbmZpZztcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGlmKGFjdGlvbi52YWx1ZS5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0JztcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAnY2VudGVyJ1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgLy8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJHJlZnMucG9wdXAub3BlbigkdGhpcy4kZGF0YS5wb3B1cFR5cGUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykgeyAvL+S4u+S7juaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJhbmQgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7IC8v55Sf5oiQNeS9jemaj+acuuaVsFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyYW5kICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChpbnB1dFBhcmFtdGVyWzBdLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlucHV0UGFyYW10ZXJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyByYW5kO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmF0dHJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyByYW5kO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7IFxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuYWN0aXZlbGlzdC5wdXNoKHthY3RpdmU6ZmFsc2V9KTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09IHNjYW5Db2RlVmFsKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLk9iaklEPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5mb3JtLml0ZW1zO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKF9zdWJDbGFzc0F0dHJbY10ubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKF9zdWJDbGFzc0F0dHJbY10uZmllbGRJZCA9PSByZXN1bHRbaV0uYXR0cikgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0X3N1YkNsYXNzQXR0cltjXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKF9zdWJDbGFzc0F0dHJbY10ubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIF9zdWJDbGFzc0F0dHJbY10uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihjb2wuZmllbGRJZCA9PSByZXN1bHRbaV0uYXR0cikgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cj1saXN0XzE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XHJcblx0XHRcdFx0XHRcdHZhciBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0XHR2YXIgc2NhbkNvZGVWYWwgPSAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbDtcclxuXHRcdFx0XHRcdFx0dmFyIHJhbmQgPSAnJztcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsgLy/nlJ/miJA15L2N6ZqP5py65pWwXHJcblx0XHRcdFx0XHRcdFx0cmFuZCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGlucHV0UGFyYW10ZXJbMF0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpbnB1dFBhcmFtdGVyWzBdLmF0dHIgPT0gXCJtYXN0X2lucHV0XzMwMzdcIikgLy/liKTmlq3mmK/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyByYW5kO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChpbmZvLmF0dHJbMF0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpbmZvLmF0dHJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIiArIHJhbmQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxyXG5cdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcclxuXHRcdFx0XHRcdFx0fSk7IFxyXG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHIuZm9ybS5pdGVtcztcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoX3N1YkNsYXNzQXR0cltjXS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBpZihfc3ViQ2xhc3NBdHRyW2NdLmZpZWxkSWQgPT0gcmVzdWx0W2ldLmF0dHIpIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X3N1YkNsYXNzQXR0cltjXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoX3N1YkNsYXNzQXR0cltjXS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBfc3ViQ2xhc3NBdHRyW2NdLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkID09IHJlc3VsdFtpXS5hdHRyKSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vN1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdFxyXG5cdC8v56Gu5a6aXHJcblx0c2F2YSgpe1xyXG5cdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWJjeiEmuacrFxyXG5cdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQuSUQpO1xyXG5cdFx0ZWxzZSBpZiAodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCkgLy/liKTmlq3lip/og73ngrnlj4LmlbDmmK/lkKbmnInnoa7lrprlkI7ohJrmnKxcclxuXHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtkZWx0YToxIH0pOy8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdH0sXHJcblx0c2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudChldmVudElEKXtcclxuXHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXHJcblx0XHRcdG1hc2s6dHJ1ZVxyXG5cdFx0fSk7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0Ly/ojrflj5booajlpLTlsZ7mgKdcclxuXHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0dmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0fSkpO1xyXG5cdFx0XHJcblx0XHR2YXIgb2JqZWN0cz1bXTtcclxuXHRcdHZhciBzdWJQYW5lbExpc3QgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Q7XHJcblx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHR2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHRcdHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHIuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHQgICAgaWYoaXRlbS5uYW1lID09IFwiTGF5b3V0XCIpeyAgLy/liKTmlq3mmK/lkKbmmK/moIXmoI/moLzlvI9cclxuXHRcdFx0ICAgICAgaXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHRcdFx0ICAgICAgICBpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuXHRcdFx0ICAgICAgfSk7XHJcblx0XHRcdCAgICB9ZWxzZVxyXG5cdFx0XHQgICAgICBkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHZhciBzdWJfcmVxID0gT2JqZWN0LmtleXMoZGV0YWlsX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdHZhbHVlOiBkZXRhaWxfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHR9KSk7XHJcblx0XHRcdG9iamVjdHMucHVzaCh7XHJcblx0XHRcdFx0b2JqX2lkOnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCxcclxuXHRcdFx0XHRvYmpfYXR0cnM6c3ViX3JlcVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dmFyIGRhdGFKc29uPXtcclxuXHRcdFx0bWFzdGVyX2Nsczp7XHJcblx0XHRcdFx0Y2xzX25hbWU6J01CT1gnLC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxyXG5cdFx0XHRcdG9ial9hdHRyczpyZXFcclxuXHRcdFx0fSxcclxuXHRcdFx0aW5wdXRfMzAzNzokdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCwgICAvL+aJq+eggeWGheWuuVxyXG5cdFx0XHRvcF90eXBlOiR0aGlzLiRkYXRhLnBhcmFtLk9wZXJhdGlvblR5cGUsIC8v5L2c5Lia57G75Z6L5a6a5LmJXHJcblx0XHRcdHN1Yl9jbHM6e1xyXG5cdFx0XHRcdGNsc19uYW1lOidNQk9YJywvLyR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuTmFtZSxcclxuXHRcdFx0XHRvYmplY3RzOm9iamVjdHNcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XHJcblx0IFx0dmFyIGRhdGFKc29uID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShkYXRhSnNvbikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0IFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHQgXHRpZighZXZlbnRJRC5pbmNsdWRlcygneycpKSBldmVudElEPSAneycrIGV2ZW50SUQgKyd9JztcclxuXHQgXHR2YXIgZGF0YUluZm89e1xyXG5cdCBcdCAgZWRfdHlwZTogXCI3XCIsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdCBcdCAgY2xhc3NfaWQ6ICdNQk9YJyxcclxuXHQgXHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdCBcdCAgZXZlbnRfaWQ6IGV2ZW50SUQsXHJcblx0IFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHQgXHQgIGRhdGFfb2JqX2lkOiAnJyxcclxuXHQgXHQgIG9ial9hdHRyOiAnJyxcclxuXHQgXHQgIHByal9pZDogJycsXHJcblx0IFx0ICByZWZfY2xzX2lkOiAnJyxcclxuXHQgXHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdCBcdCAgdXNlcl9sb2dpbjogJycsXHJcblx0IFx0ICBkYXRhX2pzb246IGRhdGFKc29uLFxyXG5cdCBcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHQgXHQgIGV4dF9pbmZvOiAnJyxcclxuXHQgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcclxuXHQgXHQgIGlucHV0X3BhcmFtOiAnJyxcclxuXHQgXHR9O1xyXG5cdCBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdCAvLyBcdHJldHVybjtcclxuXHQgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHQgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHQgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHQgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcclxuXHRcdFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXHJcblx0XHRcdFx0XHRcdCR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xyXG5cdFx0XHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRcdFx0Ly/liLfmlrBcclxuXHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzAzN18yP3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0IFx0XHR9ZWxzZXtcclxuXHQgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHR9XHJcblx0IFx0fSkuY2F0Y2goZXg9PntcclxuXHQgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0IFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzguMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdH0pO1xyXG5cdCB9LFxyXG5cdCBcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcbn07XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      activelist: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.title = options.titlename;\n    this.$data.param = JSON.parse(options.param);\n    __f__(\"log\", this.$data.param, \" at pages/modal/3037_2.vue:767\");\n    //获取数据类的自定义表单参数\n    this.Head_UIStyleGetInfo(this.param.Master_Cls.ID, this.param.Master_Cls.UI_Style.ID);\n    this.Detail1_UIstyleGetInfo(this.param.Sub_Cls.ID, this.$data.param.Sub_Cls.UI_Style.ID);\n\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var _$this$head_styledef$;\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.head_styledef);\n                    $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n                        return _regenerator.default.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                ele.show = true;\n                                if (!(ele.useDict == true)) {\n                                  _context.next = 4;\n                                  break;\n                                }\n                                _context.next = 4;\n                                return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 4:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n                      return function (_x, _x2) {\n                        return _ref.apply(this, arguments);\n                      };\n                    }());\n                    if (((_$this$head_styledef$ = $this.head_styledef.event) === null || _$this$head_styledef$ === void 0 ? void 0 : _$this$head_styledef$.length) > 0) {\n                      $this.head_styledef.event.forEach( /*#__PURE__*/function () {\n                        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(a) {\n                          return _regenerator.default.wrap(function _callee2$(_context2) {\n                            while (1) {\n                              switch (_context2.prev = _context2.next) {\n                                case 0:\n                                  if (!(a.event_id == \"initial\")) {\n                                    _context2.next = 3;\n                                    break;\n                                  }\n                                  _context2.next = 3;\n                                  return _this.loadInitEvent(a.scrip_id, 'head');\n                                case 3:\n                                case \"end\":\n                                  return _context2.stop();\n                              }\n                            }\n                          }, _callee2);\n                        }));\n                        return function (_x3) {\n                          return _ref2.apply(this, arguments);\n                        };\n                      }());\n                    }\n                  } else {\n                    uni.showModal({\n                      title: \"错误1\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this2;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var _$this$detail1_styled;\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    $this.$data.detail1_styledef.SelBut_Checked = true;\n                    $this.detail1_styledef.form.items.forEach( /*#__PURE__*/function () {\n                      var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(ele, index) {\n                        return _regenerator.default.wrap(function _callee4$(_context4) {\n                          while (1) {\n                            switch (_context4.prev = _context4.next) {\n                              case 0:\n                                if (!(ele.useDict == true)) {\n                                  _context4.next = 3;\n                                  break;\n                                }\n                                _context4.next = 3;\n                                return _this2.DictGetInfo(ele.bind.dict, index, 'sub');\n                              case 3:\n                              case \"end\":\n                                return _context4.stop();\n                            }\n                          }\n                        }, _callee4);\n                      }));\n                      return function (_x4, _x5) {\n                        return _ref3.apply(this, arguments);\n                      };\n                    }());\n                    if (((_$this$detail1_styled = $this.detail1_styledef.event) === null || _$this$detail1_styled === void 0 ? void 0 : _$this$detail1_styled.length) > 0) {\n                      $detail1_styledefforEach( /*#__PURE__*/function () {\n                        var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(a) {\n                          return _regenerator.default.wrap(function _callee5$(_context5) {\n                            while (1) {\n                              switch (_context5.prev = _context5.next) {\n                                case 0:\n                                  if (!(a.event_id == \"initial\")) {\n                                    _context5.next = 3;\n                                    break;\n                                  }\n                                  _context5.next = 3;\n                                  return _this2.loadInitEvent(a.scrip_id, 'detail');\n                                case 3:\n                                case \"end\":\n                                  return _context5.stop();\n                              }\n                            }\n                          }, _callee5);\n                        }));\n                        return function (_x6) {\n                          return _ref4.apply(this, arguments);\n                        };\n                      }());\n                    }\n                    // var aa = JSON.stringify(this.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n                    // console.log($this.$data.detail1StyleDefList);\n                  } else {\n                    uni.showModal({\n                      title: \"错误2\",\n                      content: ret.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误2.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    DictGetInfo: function DictGetInfo(dict, index, type) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                //Mobox3得到得到字典信息字典项列表\n                _this3.data = [];\n                $this = _this3;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this3.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(success) {\n                    var list, itemName, attr;\n                    return _regenerator.default.wrap(function _callee7$(_context7) {\n                      while (1) {\n                        switch (_context7.prev = _context7.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              list = [];\n                              itemName = '';\n                              success.result.dict_item_list.forEach(function (item) {\n                                if (item.is_default == '1') itemName = item.name;\n                                list.push({\n                                  text: item.value,\n                                  value: item.name\n                                });\n                              });\n                              if (type == 'mast') {\n                                //有默认值,显示默认值\n                                if (itemName) {\n                                  $this.head_styledef.form.items[index].value = itemName;\n                                  attr = $this.head_styledef.form.items[index].fieldId;\n                                  $this.head_styledef.form.model[attr] = itemName;\n                                }\n                                $this.head_styledef.form.items[index].dict = list;\n                                // console.log($this.$data.detail1StyleDefList);\n                              } else {\n                                if (itemName) {\n                                  $this.detail1_styledef.form.items[index].value = itemName;\n                                  attr = $this.detail1_styledef.form.items[index].fieldId;\n                                  $this.detail1_styledef.form.model[attr] = itemName;\n                                }\n                                $this.detail1_styledef.form.items[index].dict = list;\n                                __f__(\"log\", $this.$data.detail1_styledef, \" at pages/modal/3037_2.vue:898\");\n                              }\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context7.stop();\n                        }\n                      }\n                    }, _callee7);\n                  }));\n                  return function (_x7) {\n                    return _ref5.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context8.stop();\n            }\n          }\n        }, _callee8);\n      }))();\n    },\n    loadInitEvent: function loadInitEvent(eventid, type) {\n      var _this4 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n        var $this, styledef, dataInfo;\n        return _regenerator.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                $this = _this4;\n                styledef = type == 'head' ? _this4.head_styledef : _this4.detail1_styledef;\n                if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n                dataInfo = {\n                  ed_type: 0,\n                  start_transaction: true,\n                  class_id: _this4.param.DataCls.id,\n                  event_id: eventid\n                };\n                __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:919\");\n                // return;\n                _this4.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n                  __f__(\"log\", success, \" at pages/modal/3037_2.vue:922\");\n                  if (success.err_code == 0) {\n                    var data = success.result;\n                    if (data.ret != 0) {\n                      var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n                      if (data.ret == 801) uni.showModal({\n                        title: '提示',\n                        content: tip,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });else uni.showModal({\n                        title: '提示',\n                        content: tip + ',提示:' + data.ret,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      return false;\n                    } else {\n                      var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n                      if (tip) uni.showModal({\n                        title: '提示',\n                        content: tip,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      var actionlist = data.action;\n                      if (actionlist) {\n                        __f__(\"log\", actionlist, \" at pages/modal/3037_2.vue:936\");\n                        for (var i = 0; i < actionlist.length; i++) {\n                          var action = actionlist[i];\n                          if (action.action_type == 'set_dlg_attr') {\n                            var result = action.value;\n                            for (var i = 0; i < result.length; i++) {\n                              if (result[i].choice_list) {\n                                for (var c = 0; c < styledef.form.items.length; c++) {\n                                  var attr = styledef.form.items[c];\n                                  if (attr.name != 'Layout') {\n                                    if (attr.fieldId == result[i].attr) {\n                                      var dictItemList = [];\n                                      for (var d in result[i].choice_list) {\n                                        var val = result[i].choice_list[d];\n                                        dictItemList.push({\n                                          \"CN_S_NAME\": val,\n                                          \"CN_S_VALUE\": val,\n                                          \"text\": val,\n                                          \"value\": val\n                                        });\n                                      }\n                                      attr.dict = dictItemList;\n                                    }\n                                  } else if (attr.name == 'Layout') {\n                                    attr.setting.colList.forEach(function (col) {\n                                      if (col) {\n                                        if (col.fieldId == result[i].attr) {\n                                          var dictItemList = [];\n                                          for (var d in result[i].choice_list) {\n                                            var val = result[i].choice_list[d];\n                                            dictItemList.push({\n                                              \"CN_S_NAME\": val,\n                                              \"CN_S_VALUE\": val,\n                                              \"text\": val,\n                                              \"value\": val\n                                            });\n                                          }\n                                          col.dict = dictItemList;\n                                        }\n                                      }\n                                    });\n                                  }\n                                }\n                              }\n                              for (var c = 0; c < styledef.form.items.length; c++) {\n                                var attr = styledef.form.items[c];\n                                // console.log(attr[j].Name+'=='+result[i].attr);\n                                //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据\n                                if ($this.head_styledef.form.model[result[i].attr] == undefined) {\n                                  $this.head_styledef.form.model[result[i].attr] = result[i].value;\n                                }\n                                //判断是否是栅格表单\n                                if (attr.name != 'Layout') {\n                                  if (attr.fieldId == result[i].attr) {\n                                    attr.value = '';\n                                    attr.oldvalue = '';\n                                    attr.value = result[i].value;\n                                    attr.oldvalue = result[i].value;\n                                    $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                                  }\n                                } else if (attr.name == 'Layout') {\n                                  attr.setting.colList.forEach(function (col) {\n                                    if (col) {\n                                      if (col.fieldId == result[i].attr) {\n                                        col.value = '';\n                                        col.oldvalue = '';\n                                        col.value = result[i].value;\n                                        col.oldvalue = result[i].value;\n                                        $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                                      }\n                                    }\n                                  });\n                                }\n                              }\n                              var length = 0;\n                              if (!$this.$data.refdatastore.filter(function (s) {\n                                return result[i].attr == s.attr;\n                              }).length) {\n                                length = 1;\n                                $this.$data.refdatastore.push(result[i]);\n                              }\n                              if (length == 0) {\n                                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                                    $this.$data.refdatastore[j].value = result[i].value;\n                                  }\n                                }\n                              }\n                            }\n                          } else if (data.action[i].action_type == 'set_dlg_attr_show') {\n                            var result = action.value;\n                            result.forEach( /*#__PURE__*/function () {\n                              var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(attr, key) {\n                                return _regenerator.default.wrap(function _callee10$(_context10) {\n                                  while (1) {\n                                    switch (_context10.prev = _context10.next) {\n                                      case 0:\n                                        styledef.form.items.forEach( /*#__PURE__*/function () {\n                                          var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(ele, index) {\n                                            return _regenerator.default.wrap(function _callee9$(_context9) {\n                                              while (1) {\n                                                switch (_context9.prev = _context9.next) {\n                                                  case 0:\n                                                    //判断是否是栅格表单\n                                                    if (ele.name != 'Layout') {\n                                                      if (ele.fieldId == attr.attr) {\n                                                        ele.show = attr.show;\n                                                      }\n                                                    } else if (ele.name == 'Layout') {\n                                                      ele.setting.colList.forEach(function (col) {\n                                                        if (col) {\n                                                          if (col.fieldId == attr.attr) {\n                                                            col.show = attr.show;\n                                                          }\n                                                        }\n                                                      });\n                                                    }\n                                                  case 1:\n                                                  case \"end\":\n                                                    return _context9.stop();\n                                                }\n                                              }\n                                            }, _callee9);\n                                          }));\n                                          return function (_x10, _x11) {\n                                            return _ref7.apply(this, arguments);\n                                          };\n                                        }());\n                                      case 1:\n                                      case \"end\":\n                                        return _context10.stop();\n                                    }\n                                  }\n                                }, _callee10);\n                              }));\n                              return function (_x8, _x9) {\n                                return _ref6.apply(this, arguments);\n                              };\n                            }());\n                            var style_def = JSON.parse(JSON.stringify(styledef));\n                            if (type == 'head') {\n                              $this.$data.head_styledef = [];\n                              $this.$data.head_styledef = style_def;\n                              // console.log($this.$data.head_styledef);\n                            } else {\n                              $this.$data.detail1_styledef = [];\n                              $this.$data.detail1_styledef = style_def;\n                              // console.log($this.$data.detail1_styledef);\n                            }\n                          } else {\n                            uni.showModal({\n                              title: \"提示\",\n                              content: \"执行初始化事件失败:\" + item.action_type + '此action尚未处理!',\n                              showCancel: false,\n                              confirmText: \"取消\"\n                            });\n                          }\n                        }\n                      }\n                    }\n                  } else {\n                    uni.showModal({\n                      title: \"错误3\",\n                      content: \"执行初始化事件失败:\" + success.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误3.1\",\n                    content: \"执行初始化事件失败:\" + ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 6:\n              case \"end\":\n                return _context11.stop();\n            }\n          }\n        }, _callee11);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this5 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        uni.hideKeyboard();\n        var $this = _this5;\n        __f__(\"log\", item, \" at pages/modal/3037_2.vue:1067\");\n        if (item.oldvalue != result.decodedata) {\n          item.oldvalue = result.decodedata;\n          item.value = result.decodedata;\n          var attr = item.fieldId;\n          $this.head_styledef.form.model[attr] = result.decodedata;\n          if (result.decodedata) {\n            //第一个输入框不为空\n            $this.focusMateria = true; //初始化,第二个输入框focus属性\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //第二个输入框获取焦点\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 1000);\n            // },500);\n          }\n          //子数据类扫码区事件脚本\n          var eventid = _this5.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var obj_attr = _this5.head_styledef.form.model;\n            // console.log(obj_attr);\n            var req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this5.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    onevent: function onevent(item) {\n      // console.log(e.target);\n      var $this = this;\n      __f__(\"log\", item, \" at pages/modal/3037_2.vue:1113\");\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              value: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: item.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    onchange: function onchange(item) {\n      __f__(\"log\", item, \" at pages/modal/3037_2.vue:1147\");\n      var $this = this;\n      __f__(\"log\", item, \" at pages/modal/3037_2.vue:1149\");\n      if (item.oldvalue != item.value) {\n        item.oldvalue = item.value;\n        var attr = item.fieldId;\n        $this.head_styledef.form.model[attr] = item.value;\n        var eventid = item.bind.onChangeEvent.id; //内容变化后事件\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var obj_attr = this.head_styledef.form.model;\n          // console.log(obj_attr);\n          var req = Object.keys(obj_attr).map(function (a) {\n            return {\n              attr: a,\n              value: obj_attr[a] || \"\"\n            };\n          });\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this6 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3037_2.vue:1182\");\n        var isflag = true;\n        for (var i in _this6.$data.subPanelList) {\n          if (_this6.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this6.$data.scanCodeVal = result.decodedata;\n          var eventid = _this6.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            //主数据类属性\n            var obj_attr = _this6.head_styledef.form.model;\n            // console.log(obj_attr);\n            var mast_req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr[a] || \"\"\n              };\n            });\n            var obj_attr2 = _this6.detail1_styledef.form.model;\n            var req = Object.keys(obj_attr2).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr2[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: mast_req,\n              sub_attr: req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this6.$data.scanCodeVal\n              }]\n            };\n            _this6.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            //主数据类属性\n            var obj_attr = this.head_styledef.form.model;\n            // console.log(obj_attr);\n            var mast_req = Object.keys(obj_attr).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr[a] || \"\"\n              };\n            });\n            // var input_param = Base64.encode(\n            //   JSON.stringify(\n            //     Object.keys(obj_attr).map((a) => ({\n            //       attr: a,\n            //       value: obj_attr[a] || \"\",\n            //     }))\n            //   )\n            // );\n            var obj_attr2 = this.detail1_styledef.form.model;\n            var req = Object.keys(obj_attr2).map(function (a) {\n              return {\n                attr: a,\n                value: obj_attr2[a] || \"\"\n              };\n            });\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: mast_req,\n              sub_attr: req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onModelValue: function onModelValue(item) {\n      //绑定Model值\n      //console.log(e.target)\n      var attr = item.fieldId;\n      $this.head_styledef.form.model[attr] = item.value;\n    },\n    panel_del: function panel_del(index) {\n      //面板删除\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          class_id: this.$data.param.Sub_Cls.ID,\n          class_name: '',\n          obj_id: this.$data.subPanelList[index].ObjID\n        };\n        // console.log(dataInfo);\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('dataObjDel', dataInfo).then(function (success) {\n          // console.log(success);\n          uni.hideLoading();\n          if (ret.err_code == 0) {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/3037_2.vue:1310\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var mast_attr = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          value: obj_attr[a] || \"\"\n        };\n      });\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var detail_attr = {};\n        subPanelList[s].subClassAttr.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        var sub_req = Object.keys(detail_attr).map(function (a) {\n          return {\n            attr: a,\n            value: detail_attr[a] || \"\"\n          };\n        });\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var req = [];\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        edit_dlg: {\n          type: 'small',\n          //小窗口\n          class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n        },\n\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: mast_attr\n        },\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: [],\n        global_attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr,\n        enviroment: enviroment\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3037_2.vue:1391\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var mast_attr = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          value: obj_attr[a] || \"\"\n        };\n      });\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: [{\n          attr: 'mast_input_3037',\n          value: name\n        }],\n        global_attr: mast_attr,\n        inputParamter: data,\n        enviroment: ''\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    onPanelClick: function onPanelClick(value) {\n      //点击面板高亮显示\n      // console.log(value);\n      this.activelist.forEach(function (ele) {\n        ele.active = false;\n      });\n      this.activelist[value].active = true;\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: '', global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: true,\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:1527\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037_2.vue:1530\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037_2.vue:1544\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.head_styledef.form.items.length; c++) {\n                        var attr = $this.head_styledef.form.items[c];\n                        if (attr.name != 'Layout') {\n                          if (attr.fieldId == result[i].attr) {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"CN_S_VALUE\": val,\n                                \"text\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr.dict = dictItemList;\n                          }\n                        } else if (attr.name == 'Layout') {\n                          attr.setting.colList.forEach(function (col) {\n                            if (col) {\n                              if (col.fieldId == result[i].attr) {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"CN_S_VALUE\": val,\n                                    \"text\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                col.dict = dictItemList;\n                              }\n                            }\n                          });\n                        }\n                      }\n                    }\n                    for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                      var attr = $this.$data.head_styledef.form.items[c];\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr.name != 'Layout') {\n                        if (attr.fieldId == result[i].attr) {\n                          attr.value = '';\n                          attr.oldvalue = '';\n                          attr.value = result[i].value;\n                          attr.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                        }\n                      } else if (attr.name == 'Layout') {\n                        attr.setting.colList.forEach(function (col) {\n                          if (col) {\n                            if (col.fieldId == result[i].attr) {\n                              col.value = '';\n                              col.oldvalue = '';\n                              col.value = result[i].value;\n                              col.oldvalue = result[i].value;\n                              $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                            }\n                          }\n                        });\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.head_styledef.form.items.length; c++) {\n                  var attr = $this.$data.head_styledef.form.items[c];\n                  if (attr.name != 'Layout') {\n                    if (attr.fieldId == result[i].attr) {\n                      attr.value = '';\n                      attr.oldvalue = '';\n                      attr.value = result[i].value;\n                      attr.oldvalue = result[i].value;\n                      $this.head_styledef.form.model[attr.fieldId] = result[i].value;\n                    }\n                  } else if (attr.name == 'Layout') {\n                    attr.setting.colList.forEach(function (col) {\n                      if (col) {\n                        if (col.fieldId == result[i].attr) {\n                          col.value = '';\n                          col.oldvalue = '';\n                          col.value = result[i].value;\n                          col.oldvalue = result[i].value;\n                          $this.head_styledef.form.model[col.fieldId] = result[i].value;\n                        }\n                      }\n                    });\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this7 = this;\n      var $this = this;\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.value;\n      });\n      var enviroment = {};\n      if (info.enviroment) {\n        enviroment = info.enviroment;\n      } else {\n        enviroment = {\n          'function': '3000',\n          // 功能点编号\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          edit_dlg: {\n            type: 'small',\n            //小窗口\n            class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n          },\n\n          master: {\n            cls_id: info.clsid,\n            // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n            obj_attrs: obj_attr\n          }\n        };\n      }\n      var global_attr = this.$data.global_attr;\n      if (info.global_attr) {\n        global_attr = info.global_attr;\n      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var inputParamter = info.inputParamter;\n      if (info.inputParamter) {\n        info.inputParamter = _base.default.encode(JSON.stringify(info.inputParamter)); //将字符串转换为base64编码\n      }\n\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: true,\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid.replace('{', '').replace('}', ''),\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: info.inputParamter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:1738\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037_2.vue:1741\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037_2.vue:1755\");\n              for (var ii = 0; ii < actionlist.length; ii++) {\n                var action = actionlist[ii];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                        for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                          var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            if (attr[j].Name == result[i].attr) {\n                              if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"CN_S_VALUE\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                attr[j].dictitem = dictItemList;\n                                // attr[j].dictitem = result[i].choice_list;\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037_2.vue:1785\");\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                            // attr.value = '';\n                            // attr.oldvalue = '';\n                            // attr.value = result[i].value;\n                            // attr.oldvalue = result[i].value;\n                          }\n                        }\n                      }\n                    }\n\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (action.action_type == 'set_global_attr') {\n                  $this.$actiontr = action.value || [];\n                } else if (action.action_type == 'open_common_dlg') {\n                  //打开侧滑弹框\n                  var $this = _this7;\n                  if (action.value.common_dlg_id == 'check_list') {\n                    $this.$data.check_list = action.value.config;\n                    if (action.value.config.appear_style == 'sideslip')\n                      //判断是否是侧滑\n                      $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                    // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                    $this.$refs.popup.open($this.$data.popupType);\n                  }\n                } else if (action.action_type == 'add_subcls_panel') {\n                  //主从数据类扫码查询数据\n                  var result = action.value;\n                  var $this = _this7;\n                  var list_1 = JSON.parse(JSON.stringify(_this7.$data.detail1_styledef));\n                  var scanCodeVal = $this.$data.scanCodeVal;\n                  var rand = '';\n                  for (var i = 0; i < 5; i++) {\n                    //生成5位随机数\n                    rand += Math.floor(Math.random() * 10);\n                  }\n                  if (inputParamter[0].attr) {\n                    if (inputParamter[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  if (info.attr[0].attr) {\n                    if (info.attr[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  $this.$data.subPanelList.push({\n                    scanCodeVal: scanCodeVal,\n                    subClassAttr: list_1\n                  });\n                  $this.activelist.push({\n                    active: false\n                  });\n                  for (var i = 0; i < result.length; i++) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                        if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                        var _subClassAttr = $this.$data.subPanelList[s].subClassAttr.form.items;\n                        for (var c = 0; c < _subClassAttr.length; c++) {\n                          if (_subClassAttr[c].name != 'Layout') {\n                            if (_subClassAttr[c].fieldId == result[i].attr) _subClassAttr[c].value = result[i].value;\n                          } else if (_subClassAttr[c].name == 'Layout') {\n                            _subClassAttr[c].setting.colList.forEach(function (col) {\n                              if (col) {\n                                if (col.fieldId == result[i].attr) col.value = result[i].value;\n                              }\n                            });\n                          }\n                        }\n\n                        // $this.$data.subPanelList[s].subClassAttr=list_1;\n                      }\n                    }\n                    // console.log($this.$data.subPanelList);\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n            if (data.result) {\n              var list_1 = JSON.parse(JSON.stringify(_this7.$data.detail1_styledef));\n              var scanCodeVal = $this.$data.scanCodeVal;\n              var rand = '';\n              for (var i = 0; i < 5; i++) {\n                //生成5位随机数\n                rand += Math.floor(Math.random() * 10);\n              }\n              if (inputParamter[0].attr) {\n                if (inputParamter[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + rand;\n              }\n              if (info.attr[0].attr) {\n                if (info.attr[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + rand;\n              }\n              $this.$data.subPanelList.push({\n                scanCodeVal: scanCodeVal,\n                subClassAttr: list_1\n              });\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                  if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                    if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                    var _subClassAttr = $this.$data.subPanelList[s].subClassAttr.form.items;\n                    for (var c = 0; c < _subClassAttr.length; c++) {\n                      if (_subClassAttr[c].name != 'Layout') {\n                        if (_subClassAttr[c].fieldId == result[i].attr) _subClassAttr[c].value = result[i].value;\n                      } else if (_subClassAttr[c].name == 'Layout') {\n                        _subClassAttr[c].setting.colList.forEach(function (col) {\n                          if (col) {\n                            if (col.fieldId == result[i].attr) col.value = result[i].value;\n                          }\n                        });\n                      }\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    //确定\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      //获取表头属性\n      var obj_attr = this.head_styledef.form.model;\n      // console.log(obj_attr);\n      var req = Object.keys(obj_attr).map(function (a) {\n        return {\n          attr: a,\n          value: obj_attr[a] || \"\"\n        };\n      });\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var detail_attr = {};\n        subPanelList[s].subClassAttr.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        var sub_req = Object.keys(detail_attr).map(function (a) {\n          return {\n            attr: a,\n            value: detail_attr[a] || \"\"\n          };\n        });\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      var dataJson = _base.default.encode(JSON.stringify(dataJson)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (!eventID.includes('{')) eventID = '{' + eventID + '}';\n      var dataInfo = {\n        ed_type: \"7\",\n        start_transaction: true,\n        class_id: 'MBOX',\n        class_name: '',\n        event_id: eventID,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: '',\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: dataJson,\n        compose_info: '',\n        ext_info: '',\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037_2.vue:2037\");\n      // uni.hideLoading();\n      // \treturn;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037_2.vue:2041\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (tip) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n              //刷新\n              uni.redirectTo({\n                url: '../modal/3037_2?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAzN18yLnZ1ZSJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiQmFzZTY0IiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0IiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiYWN0aXZlbGlzdCIsIm9uTG9hZCIsIm9wdGlvbnMiLCJ1bmkiLCJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLCJ0aXRsZW5hbWUiLCIkZGF0YSIsIkpTT04iLCJwYXJzZSIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCJNYXN0ZXJfQ2xzIiwiSUQiLCJVSV9TdHlsZSIsIkRldGFpbDFfVUlzdHlsZUdldEluZm8iLCJTdWJfQ2xzIiwibWV0aG9kcyIsImNsYXNzX2lkIiwic3R5bGVfaWQiLCIkdGhpcyIsImRhdGFJbmZvIiwidWlfc3R5bGVfaWQiLCIkc3RvcmUiLCJkaXNwYXRjaCIsInRoZW4iLCJyZXQiLCJlcnJfY29kZSIsInN0eWxlZGVmIiwicmVzdWx0Iiwic3R5bGVfZGVmIiwicmVwbGFjZSIsImluY2x1ZGVzIiwiZGVjb2RlIiwiZm9yRWFjaCIsImVsZSIsImluZGV4Iiwic2hvdyIsInVzZURpY3QiLCJEaWN0R2V0SW5mbyIsImJpbmQiLCJkaWN0IiwiZXZlbnQiLCJsZW5ndGgiLCJhIiwiZXZlbnRfaWQiLCJsb2FkSW5pdEV2ZW50Iiwic2NyaXBfaWQiLCJzaG93TW9kYWwiLCJjb250ZW50IiwiZXJyX21zZyIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsImNhdGNoIiwiZXgiLCJlcnJNc2ciLCJTZWxCdXRfQ2hlY2tlZCIsIiRkZXRhaWwxX3N0eWxlZGVmZm9yRWFjaCIsInR5cGUiLCJkaWN0X2lkIiwiaWQiLCJkaWN0X25hbWUiLCJuYW1lIiwic3VjY2VzcyIsImxpc3QiLCJpdGVtTmFtZSIsImRpY3RfaXRlbV9saXN0IiwiaXRlbSIsImlzX2RlZmF1bHQiLCJwdXNoIiwidGV4dCIsInZhbHVlIiwiYXR0ciIsImZpZWxkSWQiLCJtb2RlbCIsImV2ZW50aWQiLCJlZF90eXBlIiwic3RhcnRfdHJhbnNhY3Rpb24iLCJEYXRhQ2xzIiwidGlwIiwiZXJyX2luZm8iLCJqb2luIiwiaW5mbyIsImFjdGlvbmxpc3QiLCJhY3Rpb24iLCJpIiwiYWN0aW9uX3R5cGUiLCJjaG9pY2VfbGlzdCIsImMiLCJkaWN0SXRlbUxpc3QiLCJkIiwidmFsIiwic2V0dGluZyIsImNvbExpc3QiLCJjb2wiLCJ1bmRlZmluZWQiLCJvbGR2YWx1ZSIsImZpbHRlciIsInMiLCJqIiwia2V5Iiwic3RyaW5naWZ5Iiwib250YXAiLCJnZXRBcHAiLCJvblNjYW4iLCJoaWRlS2V5Ym9hcmQiLCJkZWNvZGVkYXRhIiwic2V0VGltZW91dCIsIlNjYW5fQ29kZSIsIklucHV0X0NoYW5nZV9FdmVudCIsIm9ial9hdHRyIiwicmVxIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsImNsc2lkIiwib2JqaWQiLCJtYXN0X2F0dHIiLCJpbnB1dFBhcmFtdGVyIiwic2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJvbmV2ZW50Iiwib25jaGFuZ2UiLCJvbkNoYW5nZUV2ZW50IiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwic2Nhbl9vbnRhcCIsImUiLCJpc2ZsYWciLCJtYXN0X3JlcSIsIm9ial9hdHRyMiIsInN1Yl9hdHRyIiwic2Nhbl9vbmV2ZW50IiwidGFyZ2V0Iiwib25Nb2RlbFZhbHVlIiwicGFuZWxfZGVsIiwiT2JqSUQiLCJzcGxpY2UiLCJjbGFzc19uYW1lIiwib2JqX2lkIiwic2hvd0xvYWRpbmciLCJoaWRlTG9hZGluZyIsIm1zZyIsInNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbiIsIkJlZm9yZV9TZWxlY3RfRXZlbnQiLCJvYmplY3RzIiwiZGV0YWlsX2F0dHIiLCJzdWJDbGFzc0F0dHIiLCJjb2xzIiwic3ViX3JlcSIsIm9ial9hdHRycyIsImVudmlyb21lbnQiLCJjbHNfaWQiLCJidXR0b25fbmFtZSIsImVkaXRfZGxnIiwibWFzdGVyX2NscyIsImNsc19uYW1lIiwic3ViX2NscyIsInBvcHVwQ2hhbmdlIiwiY2hlY2tDaGFuZ2UiLCJkYXRhc2V0IiwiaXNjaGVjayIsIm11bHRpcGxlX2Nob2ljZSIsImNoZWNrIiwicG9wdXBfY2FuY2VsIiwiJHJlZnMiLCJwb3B1cCIsImNsb3NlIiwicG9wdXBfc2F2YSIsIkFmdGVyX1NlbGVjdF9FdmVudCIsIm9uUGFuZWxDbGljayIsImFjdGl2ZSIsImRhdGFfYXR0ciIsIm1hc3RlciIsImZvcm1fY29udHJvbCIsIk5hbWUiLCJEaXNwTmFtZSIsImdyb3VwX25hbWUiLCJHcm91cE5hbWUiLCJUeXBlIiwicmVhZG9ubHkiLCJSZWFkT25seSIsImJ1dHRvbl9pbWciLCJidXR0b25fdG9vbHRpcCIsImVuY29kZSIsImRhdGFKc29uIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJpbnB1dF9wYXJhbSIsImlpIiwiQXR0ciIsImRpY3RpdGVtIiwiVmFsdWUiLCIkYWN0aW9udHIiLCJjb21tb25fZGxnX2lkIiwiY29uZmlnIiwiYXBwZWFyX3N0eWxlIiwib3BlbiIsImxpc3RfMSIsInJhbmQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJfc3ViQ2xhc3NBdHRyIiwic2F2YSIsIkJlZm9yZV9PS19FdmVudCIsInNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJBZnRlcl9PS19FdmVudCIsIm5hdmlnYXRlQmFjayIsImRlbHRhIiwiZXZlbnRJRCIsIm1hc2siLCJpbnB1dF8zMDM3Iiwib3BfdHlwZSIsIk9wZXJhdGlvblR5cGUiLCJyZWRpcmVjdFRvIiwidXJsIiwiY2FuY2VsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF3dEJBO0FBeHRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUMsYUFBYSxHQUFDcUMsS0FBSyxDQUFDWixLQUFLLENBQUMxQjtjQUMxRixDQUFDLENBQUM7WUFDSDtVQUNEO1FBQ0EsQ0FBQyxNQUFJO1VBQ0p1QixHQUFHLENBQUMyQyxTQUFTLENBQUM7WUFBQ2xFLEtBQUssRUFBQyxLQUFLO1lBQUNtRSxPQUFPLEVBQUNjLE9BQU8sQ0FBQ2IsT0FBTztZQUFDQyxVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDdkY7TUFDRCxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFDLEVBQUUsRUFBRTtRQUNaO1FBQ0RqRCxHQUFHLENBQUMySSxXQUFXLEVBQUU7UUFDaEIzSSxHQUFHLENBQUMyQyxTQUFTLENBQUM7VUFBQ2xFLEtBQUssRUFBQyxPQUFPO1VBQUNtRSxPQUFPLEVBQUNLLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDSixVQUFVLEVBQUMsS0FBSztVQUFDQyxXQUFXLEVBQUM7UUFBSSxDQUFDLENBQUM7TUFDbkYsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUdGK0ssTUFBTSxrQkFBQ2pHLENBQUMsRUFBQztNQUFFO01BQ1Y3SCxHQUFHLENBQUNxTixZQUFZLENBQUM7UUFDaEJDLEtBQUssRUFBQyxDQUFDLENBQUM7TUFDVCxDQUFDLENBQUM7SUFDSDtFQUNDO0FBQ0YsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjE2MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcbi8vXHJcblxyXG5pbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1vZHVsZXM6e1xyXG5cdEJhc2U2NCxcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+aWsOWinicsXHJcbiAgICAgIHBhcmFtOiB7fSxcclxuXHQgIGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXHJcblx0ICBlZGl0X29rX2V2ZW50OlwiXCIsICAgICAgLy/lvLnnqpfngrnlh7tPSyDop6blj5Hkuovku7ZJRFxyXG5cdCAgZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudDpcIlwiLCAgLy/pgInmi6nnu4TmiJDlr7nosaHml7bosIPnlKhcclxuXHQgIGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcclxuXHQgIGdsb2JhbF9hdHRyOltdLFxyXG5cdCAgcmVmZGF0YXN0b3JlOiBbXSxcdCAgIC8v5byV55So5pWw5o2u5a2Y5YKo5Yy6Ly8ge2F0dHI6J0dfUFJKXycgKyBiaW5kYXR0ciArICdfSUQnLCB2YWx1ZTppbmZvLmlkfVxyXG5cdCAgc2NhbkNvZGVWYWw6XCJcIixcclxuXHQgIHN1YkNsYXNzQXR0ckxpc3Q6W10sXHJcblx0ICBzdWJQYW5lbExpc3Q6W10sXHJcblx0ICBzdWJDbGFzc0dyaWRTdHlsZTpbXSxcclxuXHQgIHBvcHVwVHlwZTpcImNlbnRlclwiLFxyXG5cdCAgY2hlY2tfbGlzdDp7fSxcclxuXHQgIFxyXG5cdCAgZm9jdXNNYXRlcmlhOmZhbHNlLFxyXG5cdCAgaGVhZF9zdHlsZWRlZjp7XHJcblx0XHRmb3JtOntcclxuXHRcdFx0aXRlbXM6W11cclxuXHRcdH1cclxuXHQgIH0sXHJcbiAgICAgIGRldGFpbDFfc3R5bGVkZWY6e30sXHJcbiAgICAgIGRldGFpbDFTdHlsZURlZkxpc3Q6W10sXHJcblx0ICBhY3RpdmVsaXN0OltdLFxyXG4gICAgfTtcclxuICB9LFxyXG4gIG9uTG9hZChvcHRpb25zKSB7XHJcblx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZX0pOyAvL+iuvue9rumhtumDqOagh+mimCBcclxuXHR0aGlzLiRkYXRhLnRpdGxlID0gb3B0aW9ucy50aXRsZW5hbWU7XHJcblx0dGhpcy4kZGF0YS5wYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0IC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0dGhpcy5IZWFkX1VJU3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uTWFzdGVyX0Nscy5JRCx0aGlzLnBhcmFtLk1hc3Rlcl9DbHMuVUlfU3R5bGUuSUQpO1xyXG5cdHRoaXMuRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLlN1Yl9DbHMuSUQsdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlVJX1N0eWxlLklEKTtcclxuXHRcclxuXHQvL+mhtemdouWIneWni+WMluiOt+WPlueEpueCuVxyXG5cdC8vIHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IFxyXG4gIH0sXHRcclxuICBtZXRob2RzOiB7XHJcbiAgICBhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0ZWxlLnNob3c9dHJ1ZTtcclxuXHRcdFx0XHQgICAgaWYoZWxlLnVzZURpY3Q9PXRydWUpeyAvL+WIpOaWrXVzZURpY3TmmK/lkKbkvb/nlKjlrZflhbhcclxuXHRcdFx0XHQgICAgICAgIGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCxpbmRleCwnbWFzdCcpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0aWYoJHRoaXMuaGVhZF9zdHlsZWRlZi5ldmVudD8ubGVuZ3RoPjApe1xyXG5cdFx0XHRcdCAgJHRoaXMuaGVhZF9zdHlsZWRlZi5ldmVudC5mb3JFYWNoKGFzeW5jIChhKT0+eyAgLy/liKTmlq3mmK/lkKbmmK/liJ3lp4vljJbkuovku7ZcclxuXHRcdFx0XHQgICAgaWYoYS5ldmVudF9pZCA9PSBcImluaXRpYWxcIil7XHJcblx0XHRcdFx0ICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdEV2ZW50KGEuc2NyaXBfaWQsJ2hlYWQnKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcbiAgICBhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZi5TZWxCdXRfQ2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdFx0JHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihlbGUudXNlRGljdD09dHJ1ZSl7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdCAgICAgICAgYXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LGluZGV4LCdzdWInKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGlmKCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZXZlbnQ/Lmxlbmd0aD4wKXtcclxuXHRcdFx0XHQgICRkZXRhaWwxX3N0eWxlZGVmZm9yRWFjaChhc3luYyAoYSk9PnsgIC8v5Yik5pat5piv5ZCm5piv5Yid5aeL5YyW5LqL5Lu2XHJcblx0XHRcdFx0ICAgIGlmKGEuZXZlbnRfaWQgPT0gXCJpbml0aWFsXCIpe1xyXG5cdFx0XHRcdCAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRFdmVudChhLnNjcmlwX2lkLCdkZXRhaWwnKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIHZhciBhYSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgRGljdEdldEluZm8oZGljdCxpbmRleCx0eXBlKXsgLy9Nb2JveDPlvpfliLDlvpfliLDlrZflhbjkv6Hmga/lrZflhbjpobnliJfooahcclxuXHRcdHRoaXMuZGF0YT1bXTtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm8gPXtcclxuXHRcdFx0ZGljdF9pZDogZGljdC5pZCxcclxuXHRcdFx0ZGljdF9uYW1lOiBkaWN0Lm5hbWVcclxuXHRcdH07XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGljdEdldEluZm8nLGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKT0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBsaXN0PVtdO1xyXG5cdFx0XHRcdHZhciBpdGVtTmFtZT0nJztcclxuXHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5kaWN0X2l0ZW1fbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0ICAgIGlmKGl0ZW0uaXNfZGVmYXVsdD09JzEnKVxyXG5cdFx0XHRcdCAgICAgICAgaXRlbU5hbWUgPSBpdGVtLm5hbWU7XHJcblx0XHRcdFx0ICAgIGxpc3QucHVzaCh7XHJcblx0XHRcdFx0ICAgICAgICB0ZXh0Oml0ZW0udmFsdWUsXHJcblx0XHRcdFx0ICAgICAgICB2YWx1ZTppdGVtLm5hbWUsXHJcblx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdFx0XHRpZih0eXBlPT0nbWFzdCcpey8v5pyJ6buY6K6k5YC877yM5pi+56S66buY6K6k5YC8XHJcblx0XHRcdFx0XHRpZihpdGVtTmFtZSl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWU9aXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdD1saXN0O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNle1xyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRhc3luYyBsb2FkSW5pdEV2ZW50KGV2ZW50aWQsdHlwZSl7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIHN0eWxlZGVmID0gdHlwZT09J2hlYWQnP3RoaXMuaGVhZF9zdHlsZWRlZjp0aGlzLmRldGFpbDFfc3R5bGVkZWY7XHJcblx0XHRpZighZXZlbnRpZC5pbmNsdWRlcygneycpKSBldmVudGlkID0gJ3snK2V2ZW50aWQrJ30nO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHQgICAgICBlZF90eXBlOiAwLFxyXG5cdCAgICAgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdCAgICAgIGNsYXNzX2lkOiB0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0ICAgICAgZXZlbnRfaWQ6IGV2ZW50aWQsXHJcblx0XHR9O1xyXG5cdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0Ly8gcmV0dXJuO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XHJcblx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IHN0eWxlZGVmLmZvcm0uaXRlbXMubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBpZihhdHRyLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiQ05fU19WQUxVRVwiOnZhbCxcInRleHRcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLmRpY3QgPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYXR0ci5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIkNOX1NfVkFMVUVcIjp2YWwsXCJ0ZXh0XCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wuZGljdCA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgc3R5bGVkZWYuZm9ybS5pdGVtcy5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/liKTmlq3ooajljZXph4zmmK/lkKbmnInov5Tlm57lrZfmrrXvvIzmsqHmnInlsLHoo4Xovb3liLBtb2RlbOmHjO+8jOeCueWHu+ehruWumuaPkOS6pOeahOaXtuWAmeW4puS4iui/meS6m+aVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09PXVuZGVmaW5lZCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtyZXN1bHRbaV0uYXR0cl09cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL+WIpOaWreaYr+WQpuaYr+agheagvOihqOWNlVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgaWYoYXR0ci5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0ci5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGF0dHIuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlmKGNvbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbY29sLmZpZWxkSWRdID1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cl9zaG93Jykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5mb3JFYWNoKGFzeW5jIChhdHRyLGtleSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBzdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIC8v5Yik5pat5piv5ZCm5piv5qCF5qC86KGo5Y2VXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZWxlLmZpZWxkSWQ9PWF0dHIuYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUuc2hvdz1hdHRyLnNob3c7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoZWxlLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjb2wuZmllbGRJZD09YXR0ci5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuc2hvdz1hdHRyLnNob3c7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlX2RlZiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGU9PSdoZWFkJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYgPVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gc3R5bGVfZGVmO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmID1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHN0eWxlX2RlZjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuaJp+ihjOWIneWni+WMluS6i+S7tuWksei0pe+8mlwiK2l0ZW0uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50Olwi5omn6KGM5Yid5aeL5YyW5LqL5Lu25aSx6LSl77yaXCIrc3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMy4xXCIsY29udGVudDpcIuaJp+ihjOWIneWni+WMluS6i+S7tuWksei0pe+8mlwiK2V4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0XHJcblx0b250YXAoaXRlbSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdC8vY29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IHJlc3VsdC5kZWNvZGVkYXRhKXtcclxuXHRcdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0aWYocmVzdWx0LmRlY29kZWRhdGEpeyAvL+esrOS4gOS4qui+k+WFpeahhuS4jeS4uuepulxyXG5cdFx0XHRcdFx0JHRoaXMuZm9jdXNNYXRlcmlhID0gdHJ1ZTsgLy/liJ3lp4vljJbvvIznrKzkuozkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0Ly8gXHQkdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgLy/nrKzkuozkuKrovpPlhaXmoYbojrflj5bnhKbngrlcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0fSwxMDAwKTtcclxuXHRcdFx0XHRcdC8vIH0sNTAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcclxuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHQgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0ICAgICAgICB2YXIgcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0ICAgICAgICBcdGF0dHI6IGEsXHJcblx0XHRcdCAgICAgICAgXHR2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdFx0ICAgICAgICB9KSk7XHJcblx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcclxuXHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcclxuXHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXHJcblx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uZXZlbnQoaXRlbSl7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHQgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0ICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHQgICAgICAgIHZhciByZXEgPSBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBcdGF0dHI6IGEsXHJcblx0XHQgICAgICAgIFx0dmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICAgIH0pKTtcclxuXHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxyXG5cdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdCAgICAgICAgXHRtYXN0X2F0dHI6IFtdLFxyXG5cdFx0ICAgICAgICBcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiBpdGVtLnZhbHVlIH1dXHJcblx0XHQgICAgICAgIH1cclxuXHRcdCAgICAgICAgXHJcblx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0XHQgICAgfVxyXG5cdFx0fVxyXG5cdFx0XHJcblx0fSxcclxuXHRvbmNoYW5nZShpdGVtKSB7XHJcblx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgZXZlbnRpZCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50LmlkOyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdCAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHQgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdCAgICAgICAgdmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQgICAgICAgIFx0YXR0cjogYSxcclxuXHRcdCAgICAgICAgXHR2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgICAgfSkpO1xyXG5cdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdCAgICAgICAgfVxyXG5cdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdCAgICB9XHJcblx0XHR9XHJcblx0XHRcclxuXHR9LFxyXG5cdHNjYW5fb250YXAoZSl7IC8v5omr56CB5Yy65omr56CB5Yqf6IO9XHJcblx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0dmFyIGlzZmxhZz10cnVlO1xyXG5cdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Qpe1xyXG5cdFx0XHRcdGlmKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IHJlc3VsdC5kZWNvZGVkYXRhKSBcclxuXHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRpZiAoaXNmbGFnKSB7XHJcblx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9cmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXHJcblx0XHRcdFx0XHR2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdFx0XHRcdHZhciBtYXN0X3JlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdFx0dmFyIG9ial9hdHRyMiA9IHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdFx0dmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyMikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogb2JqX2F0dHIyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiAnNycsLy9cIjBcIixcclxuXHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgIGF0dHI6IG1hc3RfcmVxLFxyXG5cdFx0XHRcdFx0XHRzdWJfYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cclxuXHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH0sXHJcblx0c2Nhbl9vbmV2ZW50KGUpe1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0aWYoZS50YXJnZXQudmFsdWUpe1xyXG5cdFx0XHR2YXIgaXNmbGFnPXRydWU7XHJcblx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XHJcblx0XHRcdFx0aWYodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaV0uc2NhbkNvZGVWYWwgPT0gZS50YXJnZXQudmFsdWUpIFxyXG5cdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXHJcblx0XHRcdGlmIChpc2ZsYWcpIHtcclxuXHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1lLnRhcmdldC52YWx1ZTtcclxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcclxuXHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvlsZ7mgKdcclxuXHRcdFx0XHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0XHRcdFx0dmFyIG1hc3RfcmVxID0gT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHQvLyB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0XHRcdFx0Ly8gICBKU09OLnN0cmluZ2lmeShcclxuXHRcdFx0XHRcdC8vICAgICBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0Ly8gICAgICAgYXR0cjogYSxcclxuXHRcdFx0XHRcdC8vICAgICAgIHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0Ly8gICAgIH0pKVxyXG5cdFx0XHRcdFx0Ly8gICApXHJcblx0XHRcdFx0XHQvLyApO1xyXG5cdFx0XHRcdFx0dmFyIG9ial9hdHRyMiA9IHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdFx0dmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyMikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogb2JqX2F0dHIyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0ZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdFx0ZWR0eXBlOiAnNycsLy9cIjBcIixcclxuXHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0cm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdFx0Y2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXHJcblx0XHRcdCAgICAgICAgICAgIGF0dHI6IG1hc3RfcmVxLFxyXG5cdFx0XHRcdFx0XHRzdWJfYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0dGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cdG9uTW9kZWxWYWx1ZShpdGVtKSB7IC8v57uR5a6aTW9kZWzlgLxcclxuXHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0fSxcclxuXHRwYW5lbF9kZWwoaW5kZXgpeyAvL+mdouadv+WIoOmZpFxyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdGlmICh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpbmRleF0uc2NhbkNvZGVWYWwgPT0gdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCkge1xyXG5cdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPScnO1xyXG5cdFx0fVxyXG5cdFx0aWYoIXRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRClcclxuXHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdGVsc2V7XHJcblx0XHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdFx0Y2xhc3NfaWQ6dGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdGNsYXNzX25hbWU6JycsXHJcblx0XHRcdFx0b2JqX2lkOnRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRFxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdC8vIHJldHVybjtcclxuXHRcdFx0dW5pLnNob3dMb2FkaW5nKHsgdGl0bGU6XCLliqDovb3kuK0uLi5cIiB9KTtcclxuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5Yig6Zmk5oiQ5Yqf77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo5LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24oZSl7IC8v6YCJ5oup5oyJ6ZKu5YmNXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIEJlZm9yZV9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQmVmb3JlX1NlbGVjdF9FdmVudDtcclxuXHRcdGlmKCFCZWZvcmVfU2VsZWN0X0V2ZW50KXtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5YmN5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0dmFyIG1hc3RfYXR0ciA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0fSkpO1xyXG5cdFx0dmFyIG9iamVjdHM9W107XHJcblx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xyXG5cdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBzdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0dmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0XHRzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0ICAgIGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0XHRcdCAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0XHRcdCAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0XHRcdCAgICAgIH0pO1xyXG5cdFx0XHQgICAgfWVsc2VcclxuXHRcdFx0ICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR2YXIgc3ViX3JlcSA9IE9iamVjdC5rZXlzKGRldGFpbF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHR2YWx1ZTogZGV0YWlsX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdFx0fSkpO1xyXG5cdFx0XHRvYmplY3RzLnB1c2goe1xyXG5cdFx0XHRcdG9ial9pZDpzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXHJcblx0XHRcdFx0b2JqX2F0dHJzOnN1Yl9yZXFcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHZhciByZXE9W107XHJcblx0XHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdFx0J2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdFx0Y2xzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55LuO5pWw5o2u57G75qCH6K+GXHJcblx0XHRcdCdidXR0b24nOiAndG9wJywgLy8gdG9wL2JvdHRvbVxyXG5cdFx0XHRidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdGVkaXRfZGxnOiB7XHJcblx0XHRcdFx0dHlwZTogJ3NtYWxsJywgLy/lsI/nqpflj6NcclxuXHRcdFx0XHRjbGFzc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHRcdH0sXHJcblx0XHRcdG1hc3Rlcl9jbHM6IHtcclxuXHRcdFx0XHRjbHNfbmFtZTogJ01CT1gnLCAvLyR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcclxuXHRcdFx0XHRvYmpfYXR0cnM6IG1hc3RfYXR0clxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdWJfY2xzOiB7XHJcblx0XHRcdFx0Y2xzX25hbWU6ICdNQk9YJywgLy8kdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLk5hbWUsXHJcblx0XHRcdFx0b2JqZWN0czogb2JqZWN0c1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0dmFyIGluZm8gPSB7XHJcblx0XHQgICAgZXZlbnRpZDogQmVmb3JlX1NlbGVjdF9FdmVudC5JRCxcclxuXHRcdCAgICBlZHR5cGU6IFwiN1wiLC8vXCIwXCIsXHJcblx0XHQgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdCAgICByY2xzaWQ6ICcnLFxyXG5cdFx0ICAgIHJvYmppZDogJycsXHJcblx0XHQgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdCAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0ICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0ICAgIGF0dHI6IFtdLFxyXG5cdFx0XHRnbG9iYWxfYXR0cjogcmVxLFxyXG5cdFx0XHRtYXN0X2F0dHI6IG1hc3RfYXR0cixcclxuXHRcdFx0aW5wdXRQYXJhbXRlcjogbWFzdF9hdHRyLFxyXG5cdFx0XHRlbnZpcm9tZW50OiBlbnZpcm9tZW50XHJcblx0XHR9XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpbmZvKTtcclxuXHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0fSxcclxuXHRwb3B1cENoYW5nZShlKSB7XHJcblx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XHJcblx0fSxcclxuXHRjaGVja0NoYW5nZShlKXsgLy/lvLnmoYZjaGVja+mAieaLqVxyXG5cdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XHJcblx0XHR2YXIgaW5kZXggPSBlLnRhcmdldC5kYXRhc2V0LmluZGV4O1xyXG5cdFx0dmFyIGlzY2hlY2sgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s7XHJcblx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdC8vIHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1bXTtcclxuXHRcdGlmKHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5tdWx0aXBsZV9jaG9pY2U9PVwiMFwiKXsgLy/liKTmlq3ml7bljZXpgInov5jmmK/lpJrpgIlcclxuXHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xyXG5cdFx0XHRcdGRhdGFbaV0uY2hlY2s9ZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGRhdGFbaW5kZXhdLmNoZWNrPWlzY2hlY2s/ZmFsc2U6dHJ1ZTtcclxuXHRcdHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1kYXRhO1xyXG5cdFx0XHJcblx0fSxcclxuXHRwb3B1cF9jYW5jZWwoZSl7IC8v5by55qGG5Y+W5raIXHJcblx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XHJcblx0fSxcclxuXHRwb3B1cF9zYXZhKGUpeyAvL+W8ueahhuehruWumiDpgInmi6nmjInpkq7lkI5cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgQWZ0ZXJfU2VsZWN0X0V2ZW50ID0gJHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLkFmdGVyX1NlbGVjdF9FdmVudDtcclxuXHRcdGlmKCFBZnRlcl9TZWxlY3RfRXZlbnQpe1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nlkI7kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdHZhciBkYXRhPVtdO1xyXG5cdFx0dmFyIG5hbWU9XCJcIjtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYoaXRlbXNbaV0uY2hlY2s9PXRydWUpe1xyXG5cdFx0XHRcdGlmKG5hbWUpXHJcblx0XHRcdFx0XHRuYW1lKz0nOyc7XHJcblx0XHRcdFx0bmFtZSs9aXRlbXNbaV0ubmFtZTtcclxuXHRcdFx0XHRkYXRhLnB1c2goe2lkOml0ZW1zW2ldLmlkLG5hbWU6aXRlbXNbaV0ubmFtZX0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZihkYXRhLmxlbmd0aD09MCl7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHRcdHZhciBtYXN0X2F0dHIgPSBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHR2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdH0pKTtcclxuXHRcdFxyXG5cdFx0JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9bmFtZTtcclxuXHRcdHZhciBpbmZvID0ge1xyXG5cdFx0ICAgIGV2ZW50aWQ6IEFmdGVyX1NlbGVjdF9FdmVudC5JRCxcclxuXHRcdCAgICBlZHR5cGU6IFwiN1wiLFxyXG5cdFx0ICAgIHByb2plY3RpZDogJycsXHJcblx0XHQgICAgcmNsc2lkOiAnJyxcclxuXHRcdCAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHR1c2VybG9naW46ICcnLFxyXG5cdFx0XHRjbHNpZDogJ01CT1gnLFxyXG5cdFx0XHRvYmppZDogXCJcIixcclxuXHRcdFx0YXR0cjogW3thdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyx2YWx1ZTogbmFtZX1dLFxyXG5cdFx0XHRnbG9iYWxfYXR0cjogbWFzdF9hdHRyLFxyXG5cdFx0XHRpbnB1dFBhcmFtdGVyOiBkYXRhLFxyXG5cdFx0XHRlbnZpcm9tZW50OiAnJ1xyXG5cdFx0fVxyXG5cdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XHJcblx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xyXG5cdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xyXG5cdH0sXHJcblx0b25QYW5lbENsaWNrKHZhbHVlKXsgLy/ngrnlh7vpnaLmnb/pq5jkuq7mmL7npLpcclxuXHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHQgICAgdGhpcy5hY3RpdmVsaXN0LmZvckVhY2goZWxlPT57XHJcblx0ICAgICAgICBlbGUuYWN0aXZlID0gZmFsc2U7XHJcblx0ICAgIH0pO1xyXG5cdCAgICB0aGlzLmFjdGl2ZWxpc3RbdmFsdWVdLmFjdGl2ZSA9IHRydWU7XHJcblx0fSxcclxuXHRcclxuXHREYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdCAgICB9XHJcblx0XHR9O1xyXG5cdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcclxuXHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXHJcblx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHR9XHJcblx0XHRpZiAoZGF0YV9hdHRyKSB7XHJcblx0XHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7ZcclxuXHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcclxuXHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXHJcblx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4RcclxuXHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcclxuXHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xyXG5cdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xyXG5cdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXHJcblx0XHQgICAgfVxyXG5cdFx0fVxyXG5cdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xyXG5cdCAvLyAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXHJcblx0IC8vICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXHJcblx0IC8vICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6ICcnLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcclxuXHQgLy8gICAgfVxyXG5cdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0aWYoaW5mby5kYXRhSnNvbilcclxuXHRcdFx0aW5mby5kYXRhSnNvbiA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoaW5mby5kYXRhSnNvbikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgb2JqX2F0dHI9e307XHJcblx0XHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdH0pO1xyXG5cdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9JztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxyXG5cdFx0ICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxyXG5cdFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcclxuXHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXHJcblx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcclxuXHRcdCAgZGF0YV9qc29uOiBpbmZvLmRhdGFKc29uLFxyXG5cdFx0ICBjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogJycsXHJcblx0XHR9O1xyXG5cdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0Ly8gcmV0dXJuO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XHJcblx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBpZihhdHRyLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiQ05fU19WQUxVRVwiOnZhbCxcInRleHRcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLmRpY3QgPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYXR0ci5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoY29sLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIkNOX1NfVkFMVUVcIjp2YWwsXCJ0ZXh0XCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wuZGljdCA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2NdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKGF0dHIuZmllbGRJZD09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHIuZmllbGRJZF0gPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoYXR0ci5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBhdHRyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wudmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLm9sZHZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2NvbC5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciA9IGRhdGEuYWN0aW9uW2ldLnZhbHVlIHx8IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjXTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGF0dHIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBpZihhdHRyLmZpZWxkSWQ9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHRhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBcdGF0dHIudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgIFx0YXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgXHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0ci5maWVsZElkXSA9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoYXR0ci5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGF0dHIuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgaWYoY29sKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdGNvbC52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHRjb2wub2xkdmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFtjb2wuZmllbGRJZF0gPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdH0pO1xyXG5cdFx0dmFyIGVudmlyb21lbnQgPSB7fTtcclxuXHRcdGlmKGluZm8uZW52aXJvbWVudCl7XHJcblx0XHRcdGVudmlyb21lbnQgPSBpbmZvLmVudmlyb21lbnQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdCdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHRcdFx0Y2xzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55LuO5pWw5o2u57G75qCH6K+GXHJcblx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXHJcblx0XHRcdFx0YnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0XHRcdGVkaXRfZGxnOiB7XHJcblx0XHRcdFx0XHR0eXBlOiAnc21hbGwnLCAvL+Wwj+eql+WPo1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxyXG5cdFx0XHRcdH0sXHJcblx0XHQgICAgICAgIG1hc3Rlcjoge1xyXG5cdFx0ICAgICAgICAgICAgY2xzX2lkOiBpbmZvLmNsc2lkLCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxyXG5cdFx0XHRcdFx0b2JqX2F0dHJzOm9ial9hdHRyLFxyXG5cdFx0ICAgICAgICB9XHJcblx0XHRcdH07XHJcblx0XHRcdFxyXG5cdFx0fVxyXG5cdFx0dmFyIGdsb2JhbF9hdHRyID0gdGhpcy4kZGF0YS5nbG9iYWxfYXR0cjtcclxuXHRcdGlmIChpbmZvLmdsb2JhbF9hdHRyKSB7XHJcblx0XHRcdGdsb2JhbF9hdHRyID0gaW5mby5nbG9iYWxfYXR0cjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR2YXIgaW5wdXRQYXJhbXRlcj1pbmZvLmlucHV0UGFyYW10ZXI7XHJcblx0XHRpZihpbmZvLmlucHV0UGFyYW10ZXIpe1xyXG5cdFx0XHRpbmZvLmlucHV0UGFyYW10ZXIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uaW5wdXRQYXJhbXRlcikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHR9XHJcblx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0XHJcblx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZD0gJ3snKyBpbmZvLmV2ZW50aWQgKyd9JztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxyXG5cdFx0ICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxyXG5cdFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxyXG5cdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcclxuXHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXHJcblx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxyXG5cdFx0ICBkYXRhX2pzb246ICcnLFxyXG5cdFx0ICBjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5mby5pbnB1dFBhcmFtdGVyLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHJldHVybjtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaWkrKykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2lpXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIkNOX1NfVkFMVUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0ci5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHIudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0ci5vbGR2YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykgeyAgLy/miZPlvIDkvqfmu5HlvLnmoYZcclxuXHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihhY3Rpb24udmFsdWUuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJGRhdGEuY2hlY2tfbGlzdD0gYWN0aW9uLnZhbHVlLmNvbmZpZztcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGlmKGFjdGlvbi52YWx1ZS5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0JztcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAnY2VudGVyJ1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgLy8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgJHRoaXMuJHJlZnMucG9wdXAub3BlbigkdGhpcy4kZGF0YS5wb3B1cFR5cGUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykgeyAvL+S4u+S7juaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJhbmQgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7IC8v55Sf5oiQNeS9jemaj+acuuaVsFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyYW5kICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChpbnB1dFBhcmFtdGVyWzBdLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlucHV0UGFyYW10ZXJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyByYW5kO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmF0dHJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyByYW5kO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7IFxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuYWN0aXZlbGlzdC5wdXNoKHthY3RpdmU6ZmFsc2V9KTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09IHNjYW5Db2RlVmFsKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLk9iaklEPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5mb3JtLml0ZW1zO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKF9zdWJDbGFzc0F0dHJbY10ubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGlmKF9zdWJDbGFzc0F0dHJbY10uZmllbGRJZCA9PSByZXN1bHRbaV0uYXR0cikgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0X3N1YkNsYXNzQXR0cltjXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKF9zdWJDbGFzc0F0dHJbY10ubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIF9zdWJDbGFzc0F0dHJbY10uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihjb2wuZmllbGRJZCA9PSByZXN1bHRbaV0uYXR0cikgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wudmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cj1saXN0XzE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XHJcblx0XHRcdFx0XHRcdHZhciBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0XHR2YXIgc2NhbkNvZGVWYWwgPSAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbDtcclxuXHRcdFx0XHRcdFx0dmFyIHJhbmQgPSAnJztcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsgLy/nlJ/miJA15L2N6ZqP5py65pWwXHJcblx0XHRcdFx0XHRcdFx0cmFuZCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGlucHV0UGFyYW10ZXJbMF0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpbnB1dFBhcmFtdGVyWzBdLmF0dHIgPT0gXCJtYXN0X2lucHV0XzMwMzdcIikgLy/liKTmlq3mmK/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIgKyByYW5kO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChpbmZvLmF0dHJbMF0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpbmZvLmF0dHJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIiArIHJhbmQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxyXG5cdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcclxuXHRcdFx0XHRcdFx0fSk7IFxyXG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHIuZm9ybS5pdGVtcztcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoX3N1YkNsYXNzQXR0cltjXS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBpZihfc3ViQ2xhc3NBdHRyW2NdLmZpZWxkSWQgPT0gcmVzdWx0W2ldLmF0dHIpIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X3N1YkNsYXNzQXR0cltjXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoX3N1YkNsYXNzQXR0cltjXS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBfc3ViQ2xhc3NBdHRyW2NdLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGNvbC5maWVsZElkID09IHJlc3VsdFtpXS5hdHRyKSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vN1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdFxyXG5cdC8v56Gu5a6aXHJcblx0c2F2YSgpe1xyXG5cdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWJjeiEmuacrFxyXG5cdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQuSUQpO1xyXG5cdFx0ZWxzZSBpZiAodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCkgLy/liKTmlq3lip/og73ngrnlj4LmlbDmmK/lkKbmnInnoa7lrprlkI7ohJrmnKxcclxuXHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtkZWx0YToxIH0pOy8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdH0sXHJcblx0c2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudChldmVudElEKXtcclxuXHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXHJcblx0XHRcdG1hc2s6dHJ1ZVxyXG5cdFx0fSk7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0Ly/ojrflj5booajlpLTlsZ7mgKdcclxuXHRcdHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0Ly8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdFx0dmFyIHJlcSA9IE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0fSkpO1xyXG5cdFx0XHJcblx0XHR2YXIgb2JqZWN0cz1bXTtcclxuXHRcdHZhciBzdWJQYW5lbExpc3QgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Q7XHJcblx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHR2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHRcdHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHIuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHQgICAgaWYoaXRlbS5uYW1lID09IFwiTGF5b3V0XCIpeyAgLy/liKTmlq3mmK/lkKbmmK/moIXmoI/moLzlvI9cclxuXHRcdFx0ICAgICAgaXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHRcdFx0ICAgICAgICBpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuXHRcdFx0ICAgICAgfSk7XHJcblx0XHRcdCAgICB9ZWxzZVxyXG5cdFx0XHQgICAgICBkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHZhciBzdWJfcmVxID0gT2JqZWN0LmtleXMoZGV0YWlsX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdHZhbHVlOiBkZXRhaWxfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHR9KSk7XHJcblx0XHRcdG9iamVjdHMucHVzaCh7XHJcblx0XHRcdFx0b2JqX2lkOnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCxcclxuXHRcdFx0XHRvYmpfYXR0cnM6c3ViX3JlcVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dmFyIGRhdGFKc29uPXtcclxuXHRcdFx0bWFzdGVyX2Nsczp7XHJcblx0XHRcdFx0Y2xzX25hbWU6J01CT1gnLC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxyXG5cdFx0XHRcdG9ial9hdHRyczpyZXFcclxuXHRcdFx0fSxcclxuXHRcdFx0aW5wdXRfMzAzNzokdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCwgICAvL+aJq+eggeWGheWuuVxyXG5cdFx0XHRvcF90eXBlOiR0aGlzLiRkYXRhLnBhcmFtLk9wZXJhdGlvblR5cGUsIC8v5L2c5Lia57G75Z6L5a6a5LmJXHJcblx0XHRcdHN1Yl9jbHM6e1xyXG5cdFx0XHRcdGNsc19uYW1lOidNQk9YJywvLyR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuTmFtZSxcclxuXHRcdFx0XHRvYmplY3RzOm9iamVjdHNcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XHJcblx0IFx0dmFyIGRhdGFKc29uID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShkYXRhSnNvbikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0IFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHQgXHRpZighZXZlbnRJRC5pbmNsdWRlcygneycpKSBldmVudElEPSAneycrIGV2ZW50SUQgKyd9JztcclxuXHQgXHR2YXIgZGF0YUluZm89e1xyXG5cdCBcdCAgZWRfdHlwZTogXCI3XCIsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdCBcdCAgY2xhc3NfaWQ6ICdNQk9YJyxcclxuXHQgXHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdCBcdCAgZXZlbnRfaWQ6IGV2ZW50SUQsXHJcblx0IFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHQgXHQgIGRhdGFfb2JqX2lkOiAnJyxcclxuXHQgXHQgIG9ial9hdHRyOiAnJyxcclxuXHQgXHQgIHByal9pZDogJycsXHJcblx0IFx0ICByZWZfY2xzX2lkOiAnJyxcclxuXHQgXHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdCBcdCAgdXNlcl9sb2dpbjogJycsXHJcblx0IFx0ICBkYXRhX2pzb246IGRhdGFKc29uLFxyXG5cdCBcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHQgXHQgIGV4dF9pbmZvOiAnJyxcclxuXHQgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcclxuXHQgXHQgIGlucHV0X3BhcmFtOiAnJyxcclxuXHQgXHR9O1xyXG5cdCBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdC8vIHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdCAvLyBcdHJldHVybjtcclxuXHQgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHQgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHQgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHQgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHR2YXIgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcclxuXHRcdFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXHJcblx0XHRcdFx0XHRcdCR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xyXG5cdFx0XHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRcdFx0Ly/liLfmlrBcclxuXHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzAzN18yP3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0IFx0XHR9ZWxzZXtcclxuXHQgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHR9XHJcblx0IFx0fSkuY2F0Y2goZXg9PntcclxuXHQgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0IFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzguMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdH0pO1xyXG5cdCB9LFxyXG5cdCBcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///160\n");
/***/ }),
/* 161 */
@@ -52187,7 +52281,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 127));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 201));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../components/js-base64/base64.js */ 65));\nvar _app = _interopRequireDefault(__webpack_require__(/*! ./modules/app */ 202));\n_vue.default.use(_vuex.default);\nvar store = new _vuex.default.Store({\n  modules: {\n    app: _app.default,\n    Base64: _base.default\n  },\n  state: {\n    hasLogin: false,\n    apkVersionInfo: \"\",\n    loginProvider: \"\",\n    areaFunc: '',\n    thisareaFuncID: '',\n    thisareaFuncSubID: '',\n    thisEditName: '',\n    thisEditSubName: '',\n    thisDictName: '',\n    _classAttrList: {},\n    _classGridStyleInfo: {},\n    _subClassAttrList: {},\n    _subClassGridStyleInfo: {},\n    _dicValueInfo: {},\n    DataObjRunCustomEventInfo: '',\n    querySelpsn: '',\n    ProjectGetAnalysisList: '',\n    addclassattr: '',\n    DelObj: '',\n    username: \"sa\",\n    userpwd: \"0000\",\n    url: \"139.159.144.10:8080/mobox3\",\n    //115.29.185.26:5000\n    OIOrgSAPI: '',\n    //115.29.185.26:5101\n    OIMoboxSAPI: '',\n    //115.29.185.26:5102\n    OIDataSAPI: '',\n    //115.29.185.26:5103\n    OIMongodbSvr: '' //115.29.185.26:5201\n  },\n\n  mutations: {\n    setUrl: function setUrl(state, url) {\n      state.url = url;\n    },\n    setOrgSApi: function setOrgSApi(state, url) {\n      state.OIOrgSAPI = url;\n    },\n    setMobxoSApi: function setMobxoSApi(state, url) {\n      state.OIMoboxSAPI = url;\n    },\n    setDataSApi: function setDataSApi(state, url) {\n      state.OIDataSAPI = url;\n    },\n    setMongodbSvr: function setMongodbSvr(state, url) {\n      state.OIMongodbSvr = url;\n    },\n    setApkVersionInfo: function setApkVersionInfo(state, ret) {\n      state.apkVersionInfo = ret;\n    },\n    login: function login(state, provider) {\n      state.hasLogin = true;\n      state.loginProvider = provider;\n    },\n    areaFunc: function areaFunc(state, ret) {\n      state.areaFunc = ret;\n    },\n    setareaFuncid: function setareaFuncid(state, id) {\n      state.thisareaFuncID = id;\n    },\n    setareaFunSubcid: function setareaFunSubcid(state, id) {\n      state.thisareaFuncSubID = id;\n    },\n    seteditName: function seteditName(state, editName) {\n      state.thisEditName = editName;\n    },\n    seteditSubName: function seteditSubName(state, editName) {\n      state.thisEditSubName = editName;\n    },\n    setDictName: function setDictName(state, dictName) {\n      state.thisDictName = dictName;\n    },\n    classAttrList: function classAttrList(state, ret) {\n      // state._classAttrList[state.thisareaFuncID] = ret;\n      _vue.default.set(state._classAttrList, state.thisareaFuncID, ret);\n    },\n    classGridStyleInfo: function classGridStyleInfo(state, ret) {\n      // state._classGridStyleInfo[state.thisareaFuncID] = ret;\n      var data = {};\n      if (state._classGridStyleInfo[state.thisareaFuncID]) data = state._classGridStyleInfo[state.thisareaFuncID];\n      _vue.default.set(data, state.thisEditName, ret);\n      _vue.default.set(state._classGridStyleInfo, state.thisareaFuncID, data);\n    },\n    subClassAttrList: function subClassAttrList(state, ret) {\n      _vue.default.set(state._subClassAttrList, state.thisareaFuncSubID, ret);\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(state, ret) {\n      var data = {};\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) data = state._subClassGridStyleInfo[state.thisareaFuncSubID];\n      _vue.default.set(data, state.thisEditSubName, ret);\n      _vue.default.set(state._subClassGridStyleInfo, state.thisareaFuncSubID, data);\n    },\n    dicValueInfo: function dicValueInfo(state, ret) {\n      // state._dicValueInfo[state.thisareaFuncID] = ret;\n      _vue.default.set(state._dicValueInfo, state.thisDictName, ret);\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(state, ret) {\n      state.DataObjRunCustomEventInfo = ret;\n    },\n    querySelpsn: function querySelpsn(state, ret) {\n      state.querySelpsn = ret;\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(state, ret) {\n      state.ProjectGetAnalysisList = ret;\n    },\n    addclassattr: function addclassattr(state, ret) {\n      state.addclassattr = ret;\n    },\n    DelObj: function DelObj(state, ret) {\n      state.DelObj = ret;\n    },\n    logout: function logout(state) {\n      state.hasLogin = false;\n    }\n  },\n  getters: {\n    GetApkServionInfo: function GetApkServionInfo(state) {\n      return state.apkVersionInfo;\n    },\n    loginid: function loginid(state) {\n      return state.loginProvider.loginid;\n    },\n    getUrl: function getUrl(state) {\n      return state.url;\n    },\n    getOrgSApi: function getOrgSApi(state, url) {\n      return state.OIOrgSAPI;\n    },\n    getMobxoSApi: function getMobxoSApi(state, url) {\n      return state.OIMoboxSAPI;\n    },\n    getDataSApi: function getDataSApi(state, url) {\n      return state.OIDataSAPI;\n    },\n    getMongodbSvr: function getMongodbSvr(state, url) {\n      return state.OIMongodbSvr;\n    },\n    getclassAttrList: function getclassAttrList(state) {\n      return state._classAttrList[state.thisareaFuncID];\n    },\n    getclassGridStyleInfo: function getclassGridStyleInfo(state) {\n      if (state._classGridStyleInfo[state.thisareaFuncID]) return state._classGridStyleInfo[state.thisareaFuncID][state.thisEditName];else return \"\";\n    },\n    getSubClassAttrList: function getSubClassAttrList(state) {\n      return state._subClassAttrList[state.thisareaFuncSubID];\n    },\n    getSubClassGridStyleInfo: function getSubClassGridStyleInfo(state) {\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) return state._subClassGridStyleInfo[state.thisareaFuncSubID][state.thisEditSubName];else return \"\";\n    },\n    getdicValueInfo: function getdicValueInfo(state) {\n      return state._dicValueInfo[state.thisDictName];\n    }\n  },\n  actions: {\n    //{commit} 解构,\n    //univerifyInfo 自定义参数\n    GetApkVersionInfo: function GetApkVersionInfo(_ref, univerifyInfo) {\n      var commit = _ref.commit,\n        state = _ref.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\"; //+\"/OrgWebS\"\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        // var ser = univerifyInfo.server.split('/');\n        // if(ser[1] == 'mobox3'){\n        // \t// reject({\"errMsg\":\"Mobox3暂时未支持自动更新!\"});\n        // \tresolve({code:'00000',data:\"\",msg:\"\"});\n        // \treturn;\n        // }\n        uni.request({\n          url: openinfo + \"PDA/GetApkVersionInfo\",\n          data: {},\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:203\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo + \",方法:GetApkVersionInfo,是否正确\"\n              });\n            } else if (res.statusCode == 500) {\n              reject({\n                \"errMsg\": \"未找到更新包所在目录!\"\n              });\n            }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"setApkVersionInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:218\");\n            reject(err);\n          }\n        });\n      });\n    },\n    login: function login(_ref2, univerifyInfo) {\n      var commit = _ref2.commit,\n        state = _ref2.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        univerifyInfo.uname = univerifyInfo.uname || '';\n        univerifyInfo.pwd = univerifyInfo.pwd || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        if (univerifyInfo.uname.length < 2) {\n          reject({\n            \"errMsg\": '账号最短为 2 个字符!'\n          });\n        }\n        if (univerifyInfo.pwd.length < 1) {\n          reject({\n            \"errMsg\": '密码最短为 1个字符!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\";\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        var ser = univerifyInfo.server.split('/');\n        var url = openinfo + \"PDA/SignIn\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        commit(\"setOrgSApi\", '');\n        commit(\"setMobxoSApi\", '');\n        commit(\"setDataSApi\", '');\n        commit(\"setMongodbSvr\", '');\n        if (ser[1] == 'mobox3') {\n          //判断地址是否是Mobox3\n          var orgSApi = \"http://\" + ser[0].split(':')[0] + \":5101/\";\n          var mobxoSApi = \"http://\" + ser[0].split(':')[0] + \":5102/\";\n          var dataSApi = \"http://\" + ser[0].split(':')[0] + \":5103/\";\n          var mongodbSvr = \"http://\" + ser[0].split(':')[0] + \":5201/\";\n          commit(\"setOrgSApi\", orgSApi);\n          commit(\"setMobxoSApi\", mobxoSApi);\n          commit(\"setDataSApi\", dataSApi);\n          commit(\"setMongodbSvr\", mongodbSvr);\n          url = orgSApi + 'api/user/ace/VerifyPassword';\n          univerifyInfo = {\n            app_type: \"mobox\",\n            user_login: _base.default.encode(univerifyInfo.uname),\n            user_psw: _base.default.encode(univerifyInfo.pwd)\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:278\");\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"login\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:288\");\n            reject(err);\n          }\n        });\n      });\n    },\n    areaFunc: function areaFunc(_ref3, univerifyInfo) {\n      var commit = _ref3.commit,\n        state = _ref3.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        var url = state.url + \"PDA/PDAArea\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          url = state.OIMoboxSAPI + 'api/app/area/GetList?sessionid=' + state.loginProvider.loginid.result.session_id;\n          univerifyInfo = {\n            app_type: \"MES\"\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:325\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo\n              });\n            }\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"areaFunc\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // Mobox3获取应用领域下的功能点\n    GetFuncTree: function GetFuncTree(_ref4, univerifyInfo) {\n      var commit = _ref4.commit,\n        state = _ref4.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetFuncTree?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classAttrList: function classAttrList(_ref5, univerifyInfo) {\n      var commit = _ref5.commit,\n        state = _ref5.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:403\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classGridStyleInfo: function classGridStyleInfo(_ref6, univerifyInfo) {\n      var commit = _ref6.commit,\n        state = _ref6.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:449\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"classGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassAttrList: function subClassAttrList(_ref7, univerifyInfo) {\n      var commit = _ref7.commit,\n        state = _ref7.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:497\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(_ref8, univerifyInfo) {\n      var commit = _ref8.commit,\n        state = _ref8.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:543\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"subClassGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    dicValueInfo: function dicValueInfo(_ref9, univerifyInfo) {\n      var commit = _ref9.commit,\n        state = _ref9.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADicValueGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              state.thisDictName = univerifyInfo.dic_name;\n              commit(\"dicValueInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:602\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(_ref10, univerifyInfo) {\n      var commit = _ref10.commit,\n        state = _ref10.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADataObjRunCustomEvent\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DataObjRunCustomEventInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:641\");\n            reject(err);\n          }\n        });\n      });\n    },\n    querySelpsn: function querySelpsn(_ref11, univerifyInfo) {\n      var commit = _ref11.commit,\n        state = _ref11.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"selpsn/queryjson\";\n        var datajson = univerifyInfo;\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIOrgSAPI) {\n          //判断是否是Mobox3\n          url = state.OIOrgSAPI + 'api/user/query/query?sessionid=' + state.loginProvider.loginid.result.session_id;\n          datajson = {\n            query_str: univerifyInfo.jp\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: datajson,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            // console.log(res);\n            try {\n              res = JSON.parse(res.data);\n            } catch (e) {\n              res = res.data;\n            }\n            if (res.code == '00000' || res.err_code == 0) {\n              commit(\"querySelpsn\", res);\n              resolve(res);\n            } else {\n              reject({\n                \"errMsg\": res.msg ? res.msg : res.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:685\");\n            reject(err);\n          }\n        });\n      });\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(_ref12, univerifyInfo) {\n      var commit = _ref12.commit,\n        state = _ref12.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"bpm/ProjectGetAnalysisList\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          // url = state.OIMoboxSAPI+'api/app/area/GetList?sessionid='+state.loginProvider.loginid.result.session_id;\n          // univerifyInfo = {\n          // \tapp_type: \"MES\",\n          // };\n          // header={};\n          reject({\n            \"errMsg\": \"Mobox3暂时未支持选择项目接口!\"\n          });\n          // resolve({code:'00000',data:\"\",msg:\"\"});\n          return;\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:718\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"ProjectGetAnalysisList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:728\");\n            reject(err);\n          }\n        });\n      });\n    },\n    addclassattr: function addclassattr(_ref13, univerifyInfo) {\n      var commit = _ref13.commit,\n        state = _ref13.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/addclassattr\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"addclassattr\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:773\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DelObj: function DelObj(_ref14, univerifyInfo) {\n      var commit = _ref14.commit,\n        state = _ref14.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/DelObj\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:795\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DelObj\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:805\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    classAttrGetList: function classAttrGetList(_ref15, univerifyInfo) {\n      var commit = _ref15.commit,\n        state = _ref15.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    subClassAttrGetList: function subClassAttrGetList(_ref16, univerifyInfo) {\n      var commit = _ref16.commit,\n        state = _ref16.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/item/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到字典项列表\n    DictItemGetList: function DictItemGetList(_ref17, univerifyInfo) {\n      var commit = _ref17.commit,\n        state = _ref17.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/item/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/GetInfo2?sessionid=SESSION_ID\n    // Mobox3得到字典信息\n    DictGetInfo: function DictGetInfo(_ref18, univerifyInfo) {\n      var commit = _ref18.commit,\n        state = _ref18.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/GetInfo2?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Create?sessionid=SESSION_ID\n    // Mobox3创建数据对象\n    createDataObj: function createDataObj(_ref19, univerifyInfo) {\n      var commit = _ref19.commit,\n        state = _ref19.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Create?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:955\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/uistyle/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到数据类显示样式信息\n    UIStyleGetInfo: function UIStyleGetInfo(_ref20, univerifyInfo) {\n      var commit = _ref20.commit,\n        state = _ref20.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/uistyle/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            __f__(\"log\", _res, \" at store/index.js:976\");\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/RunCustomEvent?sessionid=SESSION_ID\n    // Mobox3执行自定义脚本\n    runCustomEvent: function runCustomEvent(_ref21, univerifyInfo) {\n      var commit = _ref21.commit,\n        state = _ref21.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/RunCustomEvent?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Delete?sessionid=SESSION_ID\n    // Mobox3删除数据对象\n    dataObjDel: function dataObjDel(_ref22, univerifyInfo) {\n      var commit = _ref22.commit,\n        state = _ref22.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Delete?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/query/Query?sessionid=SESSION_ID\n    // Mobox3查询数据对象\n    dataObjQuery: function dataObjQuery(_ref23, univerifyInfo) {\n      var commit = _ref23.commit,\n        state = _ref23.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/query/Query?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/app/GetInfo?sessionid=SESSION_ID\n    // Mobox3获取功能点信息\n    appGetInfo: function appGetInfo(_ref24, univerifyInfo) {\n      var commit = _ref24.commit,\n        state = _ref24.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    }\n  }\n});\nvar _default = store;\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJtb2R1bGVzIiwiYXBwIiwiQmFzZTY0Iiwic3RhdGUiLCJoYXNMb2dpbiIsImFwa1ZlcnNpb25JbmZvIiwibG9naW5Qcm92aWRlciIsImFyZWFGdW5jIiwidGhpc2FyZWFGdW5jSUQiLCJ0aGlzYXJlYUZ1bmNTdWJJRCIsInRoaXNFZGl0TmFtZSIsInRoaXNFZGl0U3ViTmFtZSIsInRoaXNEaWN0TmFtZSIsIl9jbGFzc0F0dHJMaXN0IiwiX2NsYXNzR3JpZFN0eWxlSW5mbyIsIl9zdWJDbGFzc0F0dHJMaXN0IiwiX3N1YkNsYXNzR3JpZFN0eWxlSW5mbyIsIl9kaWNWYWx1ZUluZm8iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvIiwicXVlcnlTZWxwc24iLCJQcm9qZWN0R2V0QW5hbHlzaXNMaXN0IiwiYWRkY2xhc3NhdHRyIiwiRGVsT2JqIiwidXNlcm5hbWUiLCJ1c2VycHdkIiwidXJsIiwiT0lPcmdTQVBJIiwiT0lNb2JveFNBUEkiLCJPSURhdGFTQVBJIiwiT0lNb25nb2RiU3ZyIiwibXV0YXRpb25zIiwic2V0VXJsIiwic2V0T3JnU0FwaSIsInNldE1vYnhvU0FwaSIsInNldERhdGFTQXBpIiwic2V0TW9uZ29kYlN2ciIsInNldEFwa1ZlcnNpb25JbmZvIiwicmV0IiwibG9naW4iLCJwcm92aWRlciIsInNldGFyZWFGdW5jaWQiLCJpZCIsInNldGFyZWFGdW5TdWJjaWQiLCJzZXRlZGl0TmFtZSIsImVkaXROYW1lIiwic2V0ZWRpdFN1Yk5hbWUiLCJzZXREaWN0TmFtZSIsImRpY3ROYW1lIiwiY2xhc3NBdHRyTGlzdCIsInNldCIsImNsYXNzR3JpZFN0eWxlSW5mbyIsImRhdGEiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGVJbmZvIiwiZGljVmFsdWVJbmZvIiwibG9nb3V0IiwiZ2V0dGVycyIsIkdldEFwa1NlcnZpb25JbmZvIiwibG9naW5pZCIsImdldFVybCIsImdldE9yZ1NBcGkiLCJnZXRNb2J4b1NBcGkiLCJnZXREYXRhU0FwaSIsImdldE1vbmdvZGJTdnIiLCJnZXRjbGFzc0F0dHJMaXN0IiwiZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvIiwiZ2V0U3ViQ2xhc3NBdHRyTGlzdCIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImdldGRpY1ZhbHVlSW5mbyIsImFjdGlvbnMiLCJHZXRBcGtWZXJzaW9uSW5mbyIsInVuaXZlcmlmeUluZm8iLCJjb21taXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlcnZlciIsImxlbmd0aCIsIm9wZW5pbmZvIiwidW5pIiwicmVxdWVzdCIsIm1ldGhvZCIsImRhdGFUeXBlIiwiaGVhZGVyIiwic3VjY2VzcyIsInJlcyIsInN0YXR1c0NvZGUiLCJjb2RlIiwibXNnIiwiZmFpbCIsImVyciIsInVuYW1lIiwicHdkIiwic2VyIiwic3BsaXQiLCJvcmdTQXBpIiwibW9ieG9TQXBpIiwiZGF0YVNBcGkiLCJtb25nb2RiU3ZyIiwiYXBwX3R5cGUiLCJ1c2VyX2xvZ2luIiwiZW5jb2RlIiwidXNlcl9wc3ciLCJlcnJfY29kZSIsImVycl9tc2ciLCJsb2dpbkluZm8iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U3RvcmFnZVN5bmMiLCJjbmFtZSIsInBsdXMiLCJkZXZpY2UiLCJtb2RlbCIsInR5cGUiLCJyZXN1bHQiLCJzZXNzaW9uX2lkIiwiR2V0RnVuY1RyZWUiLCJfcmVzIiwiZGljX25hbWUiLCJkYXRhanNvbiIsInF1ZXJ5X3N0ciIsImpwIiwicGFyc2UiLCJlIiwiY2xhc3NBdHRyR2V0TGlzdCIsInN1YkNsYXNzQXR0ckdldExpc3QiLCJEaWN0SXRlbUdldExpc3QiLCJEaWN0R2V0SW5mbyIsImNyZWF0ZURhdGFPYmoiLCJVSVN0eWxlR2V0SW5mbyIsInJ1bkN1c3RvbUV2ZW50IiwiZGF0YU9iakRlbCIsImRhdGFPYmpRdWVyeSIsImFwcEdldElu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RWE1RixLQUFLO0FBQUEsMkIiLCJmaWxlIjoiMjAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXHJcbmltcG9ydCBWdWV4IGZyb20gJ3Z1ZXgnXHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5WdWUudXNlKFZ1ZXgpXHJcblxyXG5pbXBvcnQgYXBwIGZyb20gJy4vbW9kdWxlcy9hcHAnXHJcbmNvbnN0IHN0b3JlID0gbmV3IFZ1ZXguU3RvcmUoe1xyXG5cdG1vZHVsZXM6e1xyXG5cdFx0YXBwLFxyXG5cdFx0QmFzZTY0LFxyXG5cdH0sXHJcblx0c3RhdGU6IHtcclxuXHRcdGhhc0xvZ2luOiBmYWxzZSxcclxuXHRcdGFwa1ZlcnNpb25JbmZvOiBcIlwiLFxyXG5cdFx0bG9naW5Qcm92aWRlcjogXCJcIixcclxuXHRcdGFyZWFGdW5jOicnLFxyXG5cdFx0dGhpc2FyZWFGdW5jSUQ6JycsXHJcblx0XHR0aGlzYXJlYUZ1bmNTdWJJRDonJyxcclxuXHRcdHRoaXNFZGl0TmFtZTonJyxcclxuXHRcdHRoaXNFZGl0U3ViTmFtZTonJyxcclxuXHRcdHRoaXNEaWN0TmFtZTonJyxcclxuXHRcdF9jbGFzc0F0dHJMaXN0Ont9LFxyXG5cdFx0X2NsYXNzR3JpZFN0eWxlSW5mbzp7fSxcclxuXHRcdF9zdWJDbGFzc0F0dHJMaXN0Ont9LFxyXG5cdFx0X3N1YkNsYXNzR3JpZFN0eWxlSW5mbzp7fSxcclxuXHRcdF9kaWNWYWx1ZUluZm86e30sXHJcblx0XHREYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvOicnLFxyXG5cdFx0cXVlcnlTZWxwc246JycsXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0OicnLFxyXG5cdFx0YWRkY2xhc3NhdHRyOicnLFxyXG5cdFx0RGVsT2JqOicnLFxyXG5cdFx0dXNlcm5hbWU6XCJzYVwiLFxyXG5cdFx0dXNlcnB3ZDpcIjAwMDBcIixcclxuXHRcdHVybDpcIjEzOS4xNTkuMTQ0LjEwOjgwODAvbW9ib3gzXCIsIC8vMTE1LjI5LjE4NS4yNjo1MDAwXHJcblx0XHRPSU9yZ1NBUEk6ICcnLCAvLzExNS4yOS4xODUuMjY6NTEwMVxyXG5cdFx0T0lNb2JveFNBUEk6ICcnLCAvLzExNS4yOS4xODUuMjY6NTEwMlxyXG5cdFx0T0lEYXRhU0FQSTogJycsIC8vMTE1LjI5LjE4NS4yNjo1MTAzXHJcblx0XHRPSU1vbmdvZGJTdnI6ICcnIC8vMTE1LjI5LjE4NS4yNjo1MjAxXHJcblx0fSxcclxuXHRtdXRhdGlvbnM6IHtcclxuXHRcdHNldFVybChzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLnVybCA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRPcmdTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lPcmdTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldE1vYnhvU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLk9JTW9ib3hTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldERhdGFTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lEYXRhU0FQSSA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRNb25nb2RiU3ZyKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lNb25nb2RiU3ZyID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldEFwa1ZlcnNpb25JbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXBrVmVyc2lvbkluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0bG9naW4oc3RhdGUsIHByb3ZpZGVyKSB7XHJcblx0XHRcdHN0YXRlLmhhc0xvZ2luID0gdHJ1ZTtcclxuXHRcdFx0c3RhdGUubG9naW5Qcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cdFx0fSxcclxuXHRcdGFyZWFGdW5jKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXJlYUZ1bmMgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0YXJlYUZ1bmNpZChzdGF0ZSxpZCl7XHJcblx0XHRcdHN0YXRlLnRoaXNhcmVhRnVuY0lEPWlkO1xyXG5cdFx0fSxcclxuXHRcdHNldGFyZWFGdW5TdWJjaWQoc3RhdGUsaWQpe1xyXG5cdFx0XHRzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRD1pZDtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0TmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0TmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0U3ViTmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0U3ViTmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXREaWN0TmFtZShzdGF0ZSxkaWN0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZT1kaWN0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRjbGFzc0F0dHJMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0F0dHJMaXN0LHN0YXRlLnRoaXNhcmVhRnVuY0lELHJldCk7XHJcblx0XHR9LFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdHZhciBkYXRhID0ge307XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdGRhdGEgPSBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdFx0VnVlLnNldChkYXRhLHN0YXRlLnRoaXNFZGl0TmFtZSxyZXQpO1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm8sc3RhdGUudGhpc2FyZWFGdW5jSUQsZGF0YSk7XHJcblx0XHR9LFxyXG5cdFx0c3ViQ2xhc3NBdHRyTGlzdChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Qsc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQscmV0KTtcclxuXHRcdH0sXHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUsIHJldCkge1xyXG5cdFx0XHR2YXIgZGF0YSA9IHt9O1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRkYXRhID0gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF07XHJcblx0XHRcdFZ1ZS5zZXQoZGF0YSxzdGF0ZS50aGlzRWRpdFN1Yk5hbWUscmV0KTtcclxuXHRcdFx0VnVlLnNldChzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvLHN0YXRlLnRoaXNhcmVhRnVuY1N1YklELGRhdGEpO1xyXG5cdFx0fSxcclxuXHRcdGRpY1ZhbHVlSW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdC8vIHN0YXRlLl9kaWNWYWx1ZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9kaWNWYWx1ZUluZm8sc3RhdGUudGhpc0RpY3ROYW1lLHJldCk7XHJcblx0XHR9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0cXVlcnlTZWxwc24oc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5xdWVyeVNlbHBzbiA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuUHJvamVjdEdldEFuYWx5c2lzTGlzdCA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRhZGRjbGFzc2F0dHIoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5hZGRjbGFzc2F0dHIgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0RGVsT2JqKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuRGVsT2JqID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdGxvZ291dChzdGF0ZSkge1xyXG5cdFx0XHRzdGF0ZS5oYXNMb2dpbiA9IGZhbHNlXHJcblx0XHR9LFxyXG5cdH0sXHJcblx0Z2V0dGVyczoge1xyXG5cdFx0R2V0QXBrU2VydmlvbkluZm8oc3RhdGUpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLmFwa1ZlcnNpb25JbmZvXHJcblx0XHR9LFxyXG5cdFx0bG9naW5pZChzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkXHJcblx0XHR9LFxyXG5cdFx0Z2V0VXJsKHN0YXRlKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS51cmxcclxuXHRcdH0sXHJcblx0XHRnZXRPcmdTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLk9JT3JnU0FQSTtcclxuXHRcdH0sXHJcblx0XHRnZXRNb2J4b1NBcGkoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lNb2JveFNBUEk7XHJcblx0XHR9LFxyXG5cdFx0Z2V0RGF0YVNBcGkoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lEYXRhU0FQSTtcclxuXHRcdH0sXHJcblx0XHRnZXRNb25nb2RiU3ZyKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLk9JTW9uZ29kYlN2cjtcclxuXHRcdH0sXHJcblx0XHRnZXRjbGFzc0F0dHJMaXN0KHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9jbGFzc0F0dHJMaXN0W3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdH0sXHJcblx0XHRnZXRjbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRpZihzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXSlcclxuXHRcdFx0XHRyZXR1cm4gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF1bc3RhdGUudGhpc0VkaXROYW1lXTtcclxuXHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH0sXHJcblx0XHRnZXRTdWJDbGFzc0F0dHJMaXN0KHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9zdWJDbGFzc0F0dHJMaXN0W3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXTtcclxuXHRcdH0sXHJcblx0XHRnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRyZXR1cm4gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF1bc3RhdGUudGhpc0VkaXRTdWJOYW1lXTtcclxuXHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH0sXHJcblx0XHRnZXRkaWNWYWx1ZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX2RpY1ZhbHVlSW5mb1tzdGF0ZS50aGlzRGljdE5hbWVdO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRcclxuXHR9LFxyXG5cdGFjdGlvbnM6IHtcclxuXHRcdC8ve2NvbW1pdH0g6Kej5p6E77yMXHJcblx0XHQvL3VuaXZlcmlmeUluZm8g6Ieq5a6a5LmJ5Y+C5pWwXHJcblx0XHRHZXRBcGtWZXJzaW9uSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHVuaXZlcmlmeUluZm8gfHwge307XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5zZXJ2ZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlciB8fCAnJztcclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby5zZXJ2ZXIubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon5pyN5Yqh5Zmo5Zyw5Z2A5LiN6IO95Li656m6ISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIG9wZW5pbmZvID0gXCJodHRwOi8vXCIgKyB1bml2ZXJpZnlJbmZvLnNlcnZlciArIFwiL1wiOyAvLytcIi9PcmdXZWJTXCJcclxuXHRcdFx0XHQvL+iuvue9ruWFqOWxgOWPguaVsO+8mnVybC3mnI3liqHlmajlnLDlnYBcclxuXHRcdFx0XHRjb21taXQoXCJzZXRVcmxcIixvcGVuaW5mbyk7XHJcblx0XHRcdFx0Ly8gdmFyIHNlciA9IHVuaXZlcmlmeUluZm8uc2VydmVyLnNwbGl0KCcvJyk7XHJcblx0XHRcdFx0Ly8gaWYoc2VyWzFdID09ICdtb2JveDMnKXtcclxuXHRcdFx0XHQvLyBcdC8vIHJlamVjdCh7XCJlcnJNc2dcIjpcIk1vYm94M+aaguaXtuacquaUr+aMgeiHquWKqOabtOaWsO+8gVwifSk7XHJcblx0XHRcdFx0Ly8gXHRyZXNvbHZlKHtjb2RlOicwMDAwMCcsZGF0YTpcIlwiLG1zZzpcIlwifSk7XHJcblx0XHRcdFx0Ly8gXHRyZXR1cm47XHJcblx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogb3BlbmluZm8gKyBcIlBEQS9HZXRBcGtWZXJzaW9uSW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YToge30sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHQgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpOyBcclxuXHRcdFx0XHRcdFx0aWYocmVzLnN0YXR1c0NvZGU9PTQwNCl7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi5Zyw5Z2A5LiN5a+577yM6K+35qOA5p+l6K+l5Zyw5Z2A77yaXCIrIG9wZW5pbmZvICtcIizmlrnms5XvvJpHZXRBcGtWZXJzaW9uSW5mbyzmmK/lkKbmraPnoa5cIn0pO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYocmVzLnN0YXR1c0NvZGU9PTUwMCl7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi5pyq5om+5Yiw5pu05paw5YyF5omA5Zyo55uu5b2V77yBXCJ9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJzZXRBcGtWZXJzaW9uSW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRsb2dpbjogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHVuaXZlcmlmeUluZm8gfHwge307XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5zZXJ2ZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlciB8fCAnJztcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnVuYW1lID0gdW5pdmVyaWZ5SW5mby51bmFtZSB8fCAnJztcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnB3ZCA9IHVuaXZlcmlmeUluZm8ucHdkIHx8ICcnO1xyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnNlcnZlci5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOifmnI3liqHlmajlnLDlnYDkuI3og73kuLrnqbohJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby51bmFtZS5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+i0puWPt+acgOefreS4uiAyIOS4quWtl+espiEnfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnB3ZC5sZW5ndGggPCAxKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+WvhueggeacgOefreS4uiAx5Liq5a2X56ymISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIG9wZW5pbmZvID0gXCJodHRwOi8vXCIgKyB1bml2ZXJpZnlJbmZvLnNlcnZlciArIFwiL1wiO1xyXG5cdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHRcdGNvbW1pdChcInNldFVybFwiLG9wZW5pbmZvKTtcclxuXHRcdFx0XHR2YXIgc2VyID0gdW5pdmVyaWZ5SW5mby5zZXJ2ZXIuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHR2YXIgdXJsID0gb3BlbmluZm8gKyBcIlBEQS9TaWduSW5cIjtcclxuXHRcdFx0XHR2YXIgaGVhZGVyID0geydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ307XHJcblx0XHRcdFx0Y29tbWl0KFwic2V0T3JnU0FwaVwiLCcnKTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXRNb2J4b1NBcGlcIiwnJyk7XHJcblx0XHRcdFx0Y29tbWl0KFwic2V0RGF0YVNBcGlcIiwnJyk7XHJcblx0XHRcdFx0Y29tbWl0KFwic2V0TW9uZ29kYlN2clwiLCcnKTtcclxuXHRcdFx0XHRpZihzZXJbMV0gPT0gJ21vYm94MycpeyAvL+WIpOaWreWcsOWdgOaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdFx0dmFyIG9yZ1NBcGkgPSBcImh0dHA6Ly9cIiArIHNlclswXS5zcGxpdCgnOicpWzBdICsgXCI6NTEwMS9cIjtcclxuXHRcdFx0XHRcdHZhciBtb2J4b1NBcGkgPSBcImh0dHA6Ly9cIiArIHNlclswXS5zcGxpdCgnOicpWzBdICsgXCI6NTEwMi9cIjtcclxuXHRcdFx0XHRcdHZhciBkYXRhU0FwaSA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MTAzL1wiO1xyXG5cdFx0XHRcdFx0dmFyIG1vbmdvZGJTdnIgPSBcImh0dHA6Ly9cIiArIHNlclswXS5zcGxpdCgnOicpWzBdICsgXCI6NTIwMS9cIjtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldE9yZ1NBcGlcIixvcmdTQXBpKTtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldE1vYnhvU0FwaVwiLG1vYnhvU0FwaSk7XHJcblx0XHRcdFx0XHRjb21taXQoXCJzZXREYXRhU0FwaVwiLGRhdGFTQXBpKTtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldE1vbmdvZGJTdnJcIixtb25nb2RiU3ZyKTtcclxuXHRcdFx0XHRcdHVybCA9IG9yZ1NBcGkrJ2FwaS91c2VyL2FjZS9WZXJpZnlQYXNzd29yZCc7XHJcblx0XHRcdFx0XHR1bml2ZXJpZnlJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRhcHBfdHlwZTogXCJtb2JveFwiLFxyXG5cdFx0XHRcdFx0XHR1c2VyX2xvZ2luOiBCYXNlNjQuZW5jb2RlKHVuaXZlcmlmeUluZm8udW5hbWUpLFxyXG5cdFx0XHRcdFx0XHR1c2VyX3BzdzogQmFzZTY0LmVuY29kZSh1bml2ZXJpZnlJbmZvLnB3ZCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0aGVhZGVyPXt9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHVybCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiBoZWFkZXIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7IFxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcgfHwgcmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJsb2dpblwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnP3JldC5tc2c6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGFyZWFGdW5jOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR2YXIgdXJsID0gc3RhdGUudXJsICsgXCJQREEvUERBQXJlYVwiO1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHRpZihzdGF0ZS5PSU1vYm94U0FQSSl7IC8v5Yik5pat5piv5ZCm5pivTW9ib3gzXHJcblx0XHRcdFx0XHR1cmwgPSBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2FwcC9hcmVhL0dldExpc3Q/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkO1xyXG5cdFx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0YXBwX3R5cGU6IFwiTUVTXCIsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0aGVhZGVyPXt9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRpZihyZXMuc3RhdHVzQ29kZT09NDA0KXtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLlnLDlnYDkuI3lr7nvvIzor7fmo4Dmn6Xor6XlnLDlnYDvvJpcIisgb3BlbmluZm99KTtcclxuXHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJyB8fCByZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2c/cmV0Lm1zZzpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIE1vYm94M+iOt+WPluW6lOeUqOmihuWfn+S4i+eahOWKn+iDveeCuVxyXG5cdFx0R2V0RnVuY1RyZWU6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9hcHAvR2V0RnVuY1RyZWU/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRjbGFzc0F0dHJMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUF0dHJMaXN0XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFHcmlkU3R5bGVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhID17fTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWdWUuc2V0KGRhdGEsdW5pdmVyaWZ5SW5mby5uYW1lLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiY2xhc3NHcmlkU3R5bGVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdHN1YkNsYXNzQXR0ckxpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBQXR0ckxpc3RcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUdyaWRTdHlsZUdldEluZm9cIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdmFyIGRhdGEgPXt9O1xyXG5cdFx0XHRcdFx0XHRcdC8vIFZ1ZS5zZXQoZGF0YSx1bml2ZXJpZnlJbmZvLm5hbWUscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJzdWJDbGFzc0dyaWRTdHlsZUluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGRpY1ZhbHVlSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBRGljVmFsdWVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZSA9IHVuaXZlcmlmeUluZm8uZGljX25hbWVcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJkaWNWYWx1ZUluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFEYXRhT2JqUnVuQ3VzdG9tRXZlbnRcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRxdWVyeVNlbHBzbjogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dmFyIHVybCA9IHN0YXRlLnVybCArIFwic2VscHNuL3F1ZXJ5anNvblwiO1xyXG5cdFx0XHRcdHZhciBkYXRhanNvbiA9IHVuaXZlcmlmeUluZm87XHJcblx0XHRcdFx0dmFyIGhlYWRlciA9IHsnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9O1xyXG5cdFx0XHRcdGlmKHN0YXRlLk9JT3JnU0FQSSl7IC8v5Yik5pat5piv5ZCm5pivTW9ib3gzXHJcblx0XHRcdFx0IFx0dXJsID0gc3RhdGUuT0lPcmdTQVBJKydhcGkvdXNlci9xdWVyeS9xdWVyeT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQ7XHJcblx0XHRcdFx0XHRkYXRhanNvbiA9IHtcclxuXHRcdFx0XHQgXHRcdHF1ZXJ5X3N0cjogdW5pdmVyaWZ5SW5mby5qcCxcclxuXHRcdFx0XHQgXHR9O1xyXG5cdFx0XHRcdCBcdGhlYWRlcj17fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiBkYXRhanNvbixcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IGhlYWRlcixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0dHJ5e1xyXG5cdFx0XHRcdFx0XHRcdHJlcyA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xyXG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7IFxyXG5cdFx0XHRcdFx0XHRcdHJlcyA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChyZXMuY29kZT09JzAwMDAwJyB8fCByZXMuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInF1ZXJ5U2VscHNuXCIscmVzKTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlcyk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJlcy5tc2c/cmVzLm1zZzpyZXMuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0UHJvamVjdEdldEFuYWx5c2lzTGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0IHZhciB1cmwgPSBzdGF0ZS51cmwgKyBcImJwbS9Qcm9qZWN0R2V0QW5hbHlzaXNMaXN0XCI7XHJcblx0XHRcdFx0IHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHQgaWYoc3RhdGUuT0lNb2JveFNBUEkpeyAvL+WIpOaWreaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdCBcdC8vIHVybCA9IHN0YXRlLk9JTW9ib3hTQVBJKydhcGkvYXBwL2FyZWEvR2V0TGlzdD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQ7XHJcblx0XHRcdFx0IFx0Ly8gdW5pdmVyaWZ5SW5mbyA9IHtcclxuXHRcdFx0XHQgXHQvLyBcdGFwcF90eXBlOiBcIk1FU1wiLFxyXG5cdFx0XHRcdCBcdC8vIH07XHJcblx0XHRcdFx0IFx0Ly8gaGVhZGVyPXt9O1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwiTW9ib3gz5pqC5pe25pyq5pSv5oyB6YCJ5oup6aG555uu5o6l5Y+j77yBXCJ9KTtcclxuXHRcdFx0XHRcdC8vIHJlc29sdmUoe2NvZGU6JzAwMDAwJyxkYXRhOlwiXCIsbXNnOlwiXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHQgfVxyXG5cdFx0XHRcdCAgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiUHJvamVjdEdldEFuYWx5c2lzTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRhZGRjbGFzc2F0dHI6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9hZGRjbGFzc2F0dHJcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImFkZGNsYXNzYXR0clwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpKU09OLnN0cmluZ2lmeShyZXQpfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHREZWxPYmo6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvRGVsT2JqXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJEZWxPYmpcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6SlNPTi5zdHJpbmdpZnkocmV0KX0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0XHJcblx0XHQvLyBhcGkvY2xhc3MvYXR0ci9HZXRMaXN0P3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPlvpfliLDmlbDmja7nsbvlsZ7mgKdcclxuXHRcdGNsYXNzQXR0ckdldExpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvY2xhc3MvYXR0ci9HZXRMaXN0P3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJjbGFzc0F0dHJMaXN0XCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5pWw5o2u57G75bGe5oCnXHJcblx0XHRzdWJDbGFzc0F0dHJHZXRMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9kaWN0L2l0ZW0vR2V0SW5mbz9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5a2X5YW46aG55YiX6KGoXHJcblx0XHREaWN0SXRlbUdldExpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2RpY3QvaXRlbS9HZXRJbmZvP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RpY3QvR2V0SW5mbzI/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOWtl+WFuOS/oeaBr1xyXG5cdFx0RGljdEdldEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2RpY3QvR2V0SW5mbzI/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8vIGFwaS9kYXRhb2JqL0NyZWF0ZT9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5Yib5bu65pWw5o2u5a+56LGhXHJcblx0XHRjcmVhdGVEYXRhT2JqOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9kYXRhb2JqL0NyZWF0ZT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Ly8gYXBpL2NsYXNzL3Vpc3R5bGUvR2V0SW5mbz9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5pWw5o2u57G75pi+56S65qC35byP5L+h5oGvXHJcblx0XHRVSVN0eWxlR2V0SW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9jbGFzcy91aXN0eWxlL0dldEluZm8/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RhdGFvYmovUnVuQ3VzdG9tRXZlbnQ/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+aJp+ihjOiHquWumuS5ieiEmuacrFxyXG5cdFx0cnVuQ3VzdG9tRXZlbnQ6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9SdW5DdXN0b21FdmVudD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvZGF0YW9iai9EZWxldGU/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+WIoOmZpOaVsOaNruWvueixoVxyXG5cdFx0ZGF0YU9iakRlbDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9kYXRhb2JqL0RlbGV0ZT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvZGF0YW9iai9xdWVyeS9RdWVyeT9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5p+l6K+i5pWw5o2u5a+56LGhXHJcblx0XHRkYXRhT2JqUXVlcnk6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9xdWVyeS9RdWVyeT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvYXBwL0dldEluZm8/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+iOt+WPluWKn+iDveeCueS/oeaBr1xyXG5cdFx0YXBwR2V0SW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2FwcC9HZXRJbmZvP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdH1cclxufSlcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHN0b3JlXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///200\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 127));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 201));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../components/js-base64/base64.js */ 65));\nvar _app = _interopRequireDefault(__webpack_require__(/*! ./modules/app */ 202));\n_vue.default.use(_vuex.default);\nvar store = new _vuex.default.Store({\n  modules: {\n    app: _app.default,\n    Base64: _base.default\n  },\n  state: {\n    hasLogin: false,\n    deviceId: '',\n    apkVersionInfo: \"\",\n    loginProvider: \"\",\n    areaFunc: '',\n    thisareaFuncID: '',\n    thisareaFuncSubID: '',\n    thisEditName: '',\n    thisEditSubName: '',\n    thisDictName: '',\n    _classAttrList: {},\n    _classGridStyleInfo: {},\n    _subClassAttrList: {},\n    _subClassGridStyleInfo: {},\n    _dicValueInfo: {},\n    DataObjRunCustomEventInfo: '',\n    querySelpsn: '',\n    ProjectGetAnalysisList: '',\n    addclassattr: '',\n    DelObj: '',\n    username: \"sa\",\n    userpwd: \"0000\",\n    url: \"139.159.144.10:8080/mobox3\",\n    //115.29.185.26:5000\n    OIOrgSAPI: '',\n    //115.29.185.26:5101\n    OIMoboxSAPI: '',\n    //115.29.185.26:5102\n    OIDataSAPI: '',\n    //115.29.185.26:5103\n    OIMongodbSvr: '' //115.29.185.26:5201\n  },\n\n  mutations: {\n    setDeviceId: function setDeviceId(state, ret) {\n      state.deviceId = ret;\n    },\n    setUrl: function setUrl(state, url) {\n      state.url = url;\n    },\n    setOrgSApi: function setOrgSApi(state, url) {\n      state.OIOrgSAPI = url;\n    },\n    setMobxoSApi: function setMobxoSApi(state, url) {\n      state.OIMoboxSAPI = url;\n    },\n    setDataSApi: function setDataSApi(state, url) {\n      state.OIDataSAPI = url;\n    },\n    setMongodbSvr: function setMongodbSvr(state, url) {\n      state.OIMongodbSvr = url;\n    },\n    setApkVersionInfo: function setApkVersionInfo(state, ret) {\n      state.apkVersionInfo = ret;\n    },\n    login: function login(state, provider) {\n      state.hasLogin = true;\n      state.loginProvider = provider;\n    },\n    areaFunc: function areaFunc(state, ret) {\n      state.areaFunc = ret;\n    },\n    setareaFuncid: function setareaFuncid(state, id) {\n      state.thisareaFuncID = id;\n    },\n    setareaFunSubcid: function setareaFunSubcid(state, id) {\n      state.thisareaFuncSubID = id;\n    },\n    seteditName: function seteditName(state, editName) {\n      state.thisEditName = editName;\n    },\n    seteditSubName: function seteditSubName(state, editName) {\n      state.thisEditSubName = editName;\n    },\n    setDictName: function setDictName(state, dictName) {\n      state.thisDictName = dictName;\n    },\n    classAttrList: function classAttrList(state, ret) {\n      // state._classAttrList[state.thisareaFuncID] = ret;\n      _vue.default.set(state._classAttrList, state.thisareaFuncID, ret);\n    },\n    classGridStyleInfo: function classGridStyleInfo(state, ret) {\n      // state._classGridStyleInfo[state.thisareaFuncID] = ret;\n      var data = {};\n      if (state._classGridStyleInfo[state.thisareaFuncID]) data = state._classGridStyleInfo[state.thisareaFuncID];\n      _vue.default.set(data, state.thisEditName, ret);\n      _vue.default.set(state._classGridStyleInfo, state.thisareaFuncID, data);\n    },\n    subClassAttrList: function subClassAttrList(state, ret) {\n      _vue.default.set(state._subClassAttrList, state.thisareaFuncSubID, ret);\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(state, ret) {\n      var data = {};\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) data = state._subClassGridStyleInfo[state.thisareaFuncSubID];\n      _vue.default.set(data, state.thisEditSubName, ret);\n      _vue.default.set(state._subClassGridStyleInfo, state.thisareaFuncSubID, data);\n    },\n    dicValueInfo: function dicValueInfo(state, ret) {\n      // state._dicValueInfo[state.thisareaFuncID] = ret;\n      _vue.default.set(state._dicValueInfo, state.thisDictName, ret);\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(state, ret) {\n      state.DataObjRunCustomEventInfo = ret;\n    },\n    querySelpsn: function querySelpsn(state, ret) {\n      state.querySelpsn = ret;\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(state, ret) {\n      state.ProjectGetAnalysisList = ret;\n    },\n    addclassattr: function addclassattr(state, ret) {\n      state.addclassattr = ret;\n    },\n    DelObj: function DelObj(state, ret) {\n      state.DelObj = ret;\n    },\n    logout: function logout(state) {\n      state.hasLogin = false;\n    }\n  },\n  getters: {\n    getDeviceId: function getDeviceId(state, ret) {\n      return state.deviceId;\n    },\n    GetApkServionInfo: function GetApkServionInfo(state) {\n      return state.apkVersionInfo;\n    },\n    loginid: function loginid(state) {\n      return state.loginProvider.loginid;\n    },\n    getUrl: function getUrl(state) {\n      return state.url;\n    },\n    getOrgSApi: function getOrgSApi(state, url) {\n      return state.OIOrgSAPI;\n    },\n    getMobxoSApi: function getMobxoSApi(state, url) {\n      return state.OIMoboxSAPI;\n    },\n    getDataSApi: function getDataSApi(state, url) {\n      return state.OIDataSAPI;\n    },\n    getMongodbSvr: function getMongodbSvr(state, url) {\n      return state.OIMongodbSvr;\n    },\n    getclassAttrList: function getclassAttrList(state) {\n      return state._classAttrList[state.thisareaFuncID];\n    },\n    getclassGridStyleInfo: function getclassGridStyleInfo(state) {\n      if (state._classGridStyleInfo[state.thisareaFuncID]) return state._classGridStyleInfo[state.thisareaFuncID][state.thisEditName];else return \"\";\n    },\n    getSubClassAttrList: function getSubClassAttrList(state) {\n      return state._subClassAttrList[state.thisareaFuncSubID];\n    },\n    getSubClassGridStyleInfo: function getSubClassGridStyleInfo(state) {\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) return state._subClassGridStyleInfo[state.thisareaFuncSubID][state.thisEditSubName];else return \"\";\n    },\n    getdicValueInfo: function getdicValueInfo(state) {\n      return state._dicValueInfo[state.thisDictName];\n    }\n  },\n  actions: {\n    //{commit} 解构,\n    //univerifyInfo 自定义参数\n    GetApkVersionInfo: function GetApkVersionInfo(_ref, univerifyInfo) {\n      var commit = _ref.commit,\n        state = _ref.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\"; //+\"/OrgWebS\"\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        // var ser = univerifyInfo.server.split('/');\n        // if(ser[1] == 'mobox3'){\n        // \t// reject({\"errMsg\":\"Mobox3暂时未支持自动更新!\"});\n        // \tresolve({code:'00000',data:\"\",msg:\"\"});\n        // \treturn;\n        // }\n        uni.request({\n          url: openinfo + \"PDA/GetApkVersionInfo\",\n          data: {},\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:210\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo + \",方法:GetApkVersionInfo,是否正确\"\n              });\n            } else if (res.statusCode == 500) {\n              reject({\n                \"errMsg\": \"未找到更新包所在目录!\"\n              });\n            }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"setApkVersionInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:225\");\n            reject(err);\n          }\n        });\n      });\n    },\n    login: function login(_ref2, univerifyInfo) {\n      var commit = _ref2.commit,\n        state = _ref2.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        univerifyInfo.uname = univerifyInfo.uname || '';\n        univerifyInfo.pwd = univerifyInfo.pwd || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        if (univerifyInfo.uname.length < 2) {\n          reject({\n            \"errMsg\": '账号最短为 2 个字符!'\n          });\n        }\n        if (univerifyInfo.pwd.length < 1) {\n          reject({\n            \"errMsg\": '密码最短为 1个字符!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\";\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        var ser = univerifyInfo.server.split('/');\n        var url = openinfo + \"PDA/SignIn\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        commit(\"setOrgSApi\", '');\n        commit(\"setMobxoSApi\", '');\n        commit(\"setDataSApi\", '');\n        commit(\"setMongodbSvr\", '');\n        if (ser[1] == 'mobox3') {\n          //判断地址是否是Mobox3\n          var orgSApi = \"http://\" + ser[0].split(':')[0] + \":5101/\";\n          var mobxoSApi = \"http://\" + ser[0].split(':')[0] + \":5102/\";\n          var dataSApi = \"http://\" + ser[0].split(':')[0] + \":5103/\";\n          var mongodbSvr = \"http://\" + ser[0].split(':')[0] + \":5201/\";\n          commit(\"setOrgSApi\", orgSApi);\n          commit(\"setMobxoSApi\", mobxoSApi);\n          commit(\"setDataSApi\", dataSApi);\n          commit(\"setMongodbSvr\", mongodbSvr);\n          url = orgSApi + 'api/user/ace/VerifyPassword';\n          univerifyInfo = {\n            app_type: \"mobox\",\n            user_login: _base.default.encode(univerifyInfo.uname),\n            user_psw: _base.default.encode(univerifyInfo.pwd),\n            client_info: {\n              type: 3,\n              //客户端类型:0–PC,1–WEB,2–安卓,3–安卓PAD,4–iPhone, 5–iPad, 6–其它\n              num: state.deviceId //PDA的设备号\n            }\n          };\n\n          header = {};\n        }\n        __f__(\"log\", univerifyInfo, \" at store/index.js:281\");\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:289\");\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"login\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:299\");\n            reject(err);\n          }\n        });\n      });\n    },\n    areaFunc: function areaFunc(_ref3, univerifyInfo) {\n      var commit = _ref3.commit,\n        state = _ref3.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        var url = state.url + \"PDA/PDAArea\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          url = state.OIMoboxSAPI + 'api/app/area/GetList?sessionid=' + state.loginProvider.loginid.result.session_id;\n          univerifyInfo = {\n            app_type: \"MES\"\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:336\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo\n              });\n            }\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"areaFunc\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // Mobox3获取应用领域下的功能点\n    GetFuncTree: function GetFuncTree(_ref4, univerifyInfo) {\n      var commit = _ref4.commit,\n        state = _ref4.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetFuncTree?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classAttrList: function classAttrList(_ref5, univerifyInfo) {\n      var commit = _ref5.commit,\n        state = _ref5.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:414\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classGridStyleInfo: function classGridStyleInfo(_ref6, univerifyInfo) {\n      var commit = _ref6.commit,\n        state = _ref6.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:460\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"classGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassAttrList: function subClassAttrList(_ref7, univerifyInfo) {\n      var commit = _ref7.commit,\n        state = _ref7.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:508\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(_ref8, univerifyInfo) {\n      var commit = _ref8.commit,\n        state = _ref8.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:554\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"subClassGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    dicValueInfo: function dicValueInfo(_ref9, univerifyInfo) {\n      var commit = _ref9.commit,\n        state = _ref9.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADicValueGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              state.thisDictName = univerifyInfo.dic_name;\n              commit(\"dicValueInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:613\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(_ref10, univerifyInfo) {\n      var commit = _ref10.commit,\n        state = _ref10.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADataObjRunCustomEvent\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DataObjRunCustomEventInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:652\");\n            reject(err);\n          }\n        });\n      });\n    },\n    querySelpsn: function querySelpsn(_ref11, univerifyInfo) {\n      var commit = _ref11.commit,\n        state = _ref11.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"selpsn/queryjson\";\n        var datajson = univerifyInfo;\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIOrgSAPI) {\n          //判断是否是Mobox3\n          url = state.OIOrgSAPI + 'api/user/query/query?sessionid=' + state.loginProvider.loginid.result.session_id;\n          datajson = {\n            query_str: univerifyInfo.jp\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: datajson,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            // console.log(res);\n            try {\n              res = JSON.parse(res.data);\n            } catch (e) {\n              res = res.data;\n            }\n            if (res.code == '00000' || res.err_code == 0) {\n              commit(\"querySelpsn\", res);\n              resolve(res);\n            } else {\n              reject({\n                \"errMsg\": res.msg ? res.msg : res.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:696\");\n            reject(err);\n          }\n        });\n      });\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(_ref12, univerifyInfo) {\n      var commit = _ref12.commit,\n        state = _ref12.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"bpm/ProjectGetAnalysisList\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          // url = state.OIMoboxSAPI+'api/app/area/GetList?sessionid='+state.loginProvider.loginid.result.session_id;\n          // univerifyInfo = {\n          // \tapp_type: \"MES\",\n          // };\n          // header={};\n          reject({\n            \"errMsg\": \"Mobox3暂时未支持选择项目接口!\"\n          });\n          // resolve({code:'00000',data:\"\",msg:\"\"});\n          return;\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:729\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"ProjectGetAnalysisList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:739\");\n            reject(err);\n          }\n        });\n      });\n    },\n    addclassattr: function addclassattr(_ref13, univerifyInfo) {\n      var commit = _ref13.commit,\n        state = _ref13.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/addclassattr\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"addclassattr\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:784\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DelObj: function DelObj(_ref14, univerifyInfo) {\n      var commit = _ref14.commit,\n        state = _ref14.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/DelObj\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:806\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DelObj\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:816\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    classAttrGetList: function classAttrGetList(_ref15, univerifyInfo) {\n      var commit = _ref15.commit,\n        state = _ref15.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    subClassAttrGetList: function subClassAttrGetList(_ref16, univerifyInfo) {\n      var commit = _ref16.commit,\n        state = _ref16.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/item/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到字典项列表\n    DictItemGetList: function DictItemGetList(_ref17, univerifyInfo) {\n      var commit = _ref17.commit,\n        state = _ref17.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/item/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/GetInfo2?sessionid=SESSION_ID\n    // Mobox3得到字典信息\n    DictGetInfo: function DictGetInfo(_ref18, univerifyInfo) {\n      var commit = _ref18.commit,\n        state = _ref18.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/GetInfo2?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Create?sessionid=SESSION_ID\n    // Mobox3创建数据对象\n    createDataObj: function createDataObj(_ref19, univerifyInfo) {\n      var commit = _ref19.commit,\n        state = _ref19.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Create?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:966\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/uistyle/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到数据类显示样式信息\n    UIStyleGetInfo: function UIStyleGetInfo(_ref20, univerifyInfo) {\n      var commit = _ref20.commit,\n        state = _ref20.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/uistyle/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            __f__(\"log\", _res, \" at store/index.js:987\");\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/RunCustomEvent?sessionid=SESSION_ID\n    // Mobox3执行自定义脚本\n    runCustomEvent: function runCustomEvent(_ref21, univerifyInfo) {\n      var commit = _ref21.commit,\n        state = _ref21.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/RunCustomEvent?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Delete?sessionid=SESSION_ID\n    // Mobox3删除数据对象\n    dataObjDel: function dataObjDel(_ref22, univerifyInfo) {\n      var commit = _ref22.commit,\n        state = _ref22.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Delete?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/query/Query?sessionid=SESSION_ID\n    // Mobox3查询数据对象\n    dataObjQuery: function dataObjQuery(_ref23, univerifyInfo) {\n      var commit = _ref23.commit,\n        state = _ref23.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/query/Query?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/app/GetInfo?sessionid=SESSION_ID\n    // Mobox3获取功能点信息\n    appGetInfo: function appGetInfo(_ref24, univerifyInfo) {\n      var commit = _ref24.commit,\n        state = _ref24.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    }\n  }\n});\nvar _default = store;\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJtb2R1bGVzIiwiYXBwIiwiQmFzZTY0Iiwic3RhdGUiLCJoYXNMb2dpbiIsImRldmljZUlkIiwiYXBrVmVyc2lvbkluZm8iLCJsb2dpblByb3ZpZGVyIiwiYXJlYUZ1bmMiLCJ0aGlzYXJlYUZ1bmNJRCIsInRoaXNhcmVhRnVuY1N1YklEIiwidGhpc0VkaXROYW1lIiwidGhpc0VkaXRTdWJOYW1lIiwidGhpc0RpY3ROYW1lIiwiX2NsYXNzQXR0ckxpc3QiLCJfY2xhc3NHcmlkU3R5bGVJbmZvIiwiX3N1YkNsYXNzQXR0ckxpc3QiLCJfc3ViQ2xhc3NHcmlkU3R5bGVJbmZvIiwiX2RpY1ZhbHVlSW5mbyIsIkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8iLCJxdWVyeVNlbHBzbiIsIlByb2plY3RHZXRBbmFseXNpc0xpc3QiLCJhZGRjbGFzc2F0dHIiLCJEZWxPYmoiLCJ1c2VybmFtZSIsInVzZXJwd2QiLCJ1cmwiLCJPSU9yZ1NBUEkiLCJPSU1vYm94U0FQSSIsIk9JRGF0YVNBUEkiLCJPSU1vbmdvZGJTdnIiLCJtdXRhdGlvbnMiLCJzZXREZXZpY2VJZCIsInJldCIsInNldFVybCIsInNldE9yZ1NBcGkiLCJzZXRNb2J4b1NBcGkiLCJzZXREYXRhU0FwaSIsInNldE1vbmdvZGJTdnIiLCJzZXRBcGtWZXJzaW9uSW5mbyIsImxvZ2luIiwicHJvdmlkZXIiLCJzZXRhcmVhRnVuY2lkIiwiaWQiLCJzZXRhcmVhRnVuU3ViY2lkIiwic2V0ZWRpdE5hbWUiLCJlZGl0TmFtZSIsInNldGVkaXRTdWJOYW1lIiwic2V0RGljdE5hbWUiLCJkaWN0TmFtZSIsImNsYXNzQXR0ckxpc3QiLCJzZXQiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkYXRhIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImRpY1ZhbHVlSW5mbyIsImxvZ291dCIsImdldHRlcnMiLCJnZXREZXZpY2VJZCIsIkdldEFwa1NlcnZpb25JbmZvIiwibG9naW5pZCIsImdldFVybCIsImdldE9yZ1NBcGkiLCJnZXRNb2J4b1NBcGkiLCJnZXREYXRhU0FwaSIsImdldE1vbmdvZGJTdnIiLCJnZXRjbGFzc0F0dHJMaXN0IiwiZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvIiwiZ2V0U3ViQ2xhc3NBdHRyTGlzdCIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImdldGRpY1ZhbHVlSW5mbyIsImFjdGlvbnMiLCJHZXRBcGtWZXJzaW9uSW5mbyIsInVuaXZlcmlmeUluZm8iLCJjb21taXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlcnZlciIsImxlbmd0aCIsIm9wZW5pbmZvIiwidW5pIiwicmVxdWVzdCIsIm1ldGhvZCIsImRhdGFUeXBlIiwiaGVhZGVyIiwic3VjY2VzcyIsInJlcyIsInN0YXR1c0NvZGUiLCJjb2RlIiwibXNnIiwiZmFpbCIsImVyciIsInVuYW1lIiwicHdkIiwic2VyIiwic3BsaXQiLCJvcmdTQXBpIiwibW9ieG9TQXBpIiwiZGF0YVNBcGkiLCJtb25nb2RiU3ZyIiwiYXBwX3R5cGUiLCJ1c2VyX2xvZ2luIiwiZW5jb2RlIiwidXNlcl9wc3ciLCJjbGllbnRfaW5mbyIsInR5cGUiLCJudW0iLCJlcnJfY29kZSIsImVycl9tc2ciLCJsb2dpbkluZm8iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U3RvcmFnZVN5bmMiLCJjbmFtZSIsInBsdXMiLCJkZXZpY2UiLCJtb2RlbCIsInJlc3VsdCIsInNlc3Npb25faWQiLCJHZXRGdW5jVHJlZSIsIl9yZXMiLCJkaWNfbmFtZSIsImRhdGFqc29uIiwicXVlcnlfc3RyIiwianAiLCJwYXJzZSIsImUiLCJjbGFzc0F0dHJHZXRMaXN0Iiwic3ViQ2xhc3NBdHRyR2V0TGlzdCIsIkRpY3RJdGVtR2V0TGlzdCIsIkRpY3RHZXRJbmZvIiwiY3JlYXRlRGF0YU9iaiIsIlVJU3R5bGVHZXRJbmZvIiwicnVuQ3VzdG9tRXZlbnQiLCJkYXRhT2JqRGVsIiwiZGF0YU9ialF1ZXJ5IiwiYXBwR2V0SW5mbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBRkFBLFlBQUcsQ0FBQ0MsR0FBRyxDQUFDQyxhQUFJLENBQUM7QUFHYixJQUFNQyxLQUFLLEdBQUcsSUFBSUQsYUFBSSxDQUFDRSxLQUFLLENBQUM7RUFDNUJDLE9BQU8sRUFBQztJQUNQQyxHQUFHLEVBQUhBLFlBQUc7SUFDSEMsTUFBTSxFQUFOQTtFQUNELENBQUM7RUFDREMsS0FBSyxFQUFFO0lBQ05DLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLFFBQVEsRUFBQyxFQUFFO0lBQ1hDLGNBQWMsRUFBRSxFQUFFO0lBQ2xCQyxhQUFhLEVBQUUsRUFBRTtJQUNqQkMsUUFBUSxFQUFDLEVBQUU7SUFDWEMsY0FBYyxFQUFDLEVBQUU7SUFDakJDLGlCQUFpQixFQUFDLEVBQUU7SUFDcEJDLFlBQVksRUFBQyxFQUFFO0lBQ2ZDLGVBQWUsRUFBQyxFQUFFO0lBQ2xCQyxZQUFZLEVBQUMsRUFBRTtJQUNmQyxjQUFjLEVBQUMsQ0FBQyxDQUFDO0lBQ2pCQyxtQkFBbUIsRUFBQyxDQUFDLENBQUM7SUFDdEJDLGlCQUFpQixFQUFDLENBQUMsQ0FBQztJQUNwQkMsc0JBQXNCLEVBQUMsQ0FBQyxDQUFDO0lBQ3pCQyxhQUFhLEVBQUMsQ0FBQyxDQUFDO0lBQ2hCQyx5QkFBeUIsRUFBQyxFQUFFO0lBQzVCQyxXQUFXLEVBQUMsRUFBRTtJQUNkQyxzQkFBc0IsRUFBQyxFQUFFO0lBQ3pCQyxZQUFZLEVBQUMsRUFBRTtJQUNmQyxNQUFNLEVBQUMsRUFBRTtJQUNUQyxRQUFRLEVBQUMsSUFBSTtJQUNiQyxPQUFPLEVBQUMsTUFBTTtJQUNkQyxHQUFHLEVBQUMsNEJBQTRCO0lBQUU7SUFDbENDLFNBQVMsRUFBRSxFQUFFO0lBQUU7SUFDZkMsV0FBVyxFQUFFLEVBQUU7SUFBRTtJQUNqQkMsVUFBVSxFQUFFLEVBQUU7SUFBRTtJQUNoQkMsWUFB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QUFDLE1BQU07VUFDZkUsT0FBTyxFQUFFLGlCQUFDbUMsSUFBSSxFQUFLO1lBQ2xCO1lBQ0EsSUFBTXpGLEdBQUcsR0FBR3lGLElBQUksQ0FBQ3JFLElBQUk7WUFDckIsSUFBSXBCLEdBQUcsQ0FBQzRFLFFBQVEsSUFBSSxDQUFDLEVBQUU7Y0FDdEI7Y0FDQWhDLE9BQU8sQ0FBQzVDLEdBQUcsQ0FBQztZQUNiLENBQUMsTUFBTTtjQUNONkMsTUFBTSxDQUFDO2dCQUFDLFFBQVEsRUFBQzdDLEdBQUcsQ0FBQzZFO2NBQU8sQ0FBQyxDQUFDO1lBQy9CO1VBQ0QsQ0FBQztVQUNEbEIsSUFBSSxFQUFFLGNBQUNDLEdBQUcsRUFBSztZQUNkO1lBQ0FmLE1BQU0sQ0FBQ2UsR0FBRyxDQUFDO1VBQ1o7UUFDRCxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSDtFQUVEO0FBQ0QsQ0FBQyxDQUFDO0FBQUEsZUFFYS9GLEtBQUs7QUFBQSwyQiIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFZ1ZXggZnJvbSAndnVleCdcclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcblZ1ZS51c2UoVnVleClcclxuXHJcbmltcG9ydCBhcHAgZnJvbSAnLi9tb2R1bGVzL2FwcCdcclxuY29uc3Qgc3RvcmUgPSBuZXcgVnVleC5TdG9yZSh7XHJcblx0bW9kdWxlczp7XHJcblx0XHRhcHAsXHJcblx0XHRCYXNlNjQsXHJcblx0fSxcclxuXHRzdGF0ZToge1xyXG5cdFx0aGFzTG9naW46IGZhbHNlLFxyXG5cdFx0ZGV2aWNlSWQ6JycsXHJcblx0XHRhcGtWZXJzaW9uSW5mbzogXCJcIixcclxuXHRcdGxvZ2luUHJvdmlkZXI6IFwiXCIsXHJcblx0XHRhcmVhRnVuYzonJyxcclxuXHRcdHRoaXNhcmVhRnVuY0lEOicnLFxyXG5cdFx0dGhpc2FyZWFGdW5jU3ViSUQ6JycsXHJcblx0XHR0aGlzRWRpdE5hbWU6JycsXHJcblx0XHR0aGlzRWRpdFN1Yk5hbWU6JycsXHJcblx0XHR0aGlzRGljdE5hbWU6JycsXHJcblx0XHRfY2xhc3NBdHRyTGlzdDp7fSxcclxuXHRcdF9jbGFzc0dyaWRTdHlsZUluZm86e30sXHJcblx0XHRfc3ViQ2xhc3NBdHRyTGlzdDp7fSxcclxuXHRcdF9zdWJDbGFzc0dyaWRTdHlsZUluZm86e30sXHJcblx0XHRfZGljVmFsdWVJbmZvOnt9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbzonJyxcclxuXHRcdHF1ZXJ5U2VscHNuOicnLFxyXG5cdFx0UHJvamVjdEdldEFuYWx5c2lzTGlzdDonJyxcclxuXHRcdGFkZGNsYXNzYXR0cjonJyxcclxuXHRcdERlbE9iajonJyxcclxuXHRcdHVzZXJuYW1lOlwic2FcIixcclxuXHRcdHVzZXJwd2Q6XCIwMDAwXCIsXHJcblx0XHR1cmw6XCIxMzkuMTU5LjE0NC4xMDo4MDgwL21vYm94M1wiLCAvLzExNS4yOS4xODUuMjY6NTAwMFxyXG5cdFx0T0lPcmdTQVBJOiAnJywgLy8xMTUuMjkuMTg1LjI2OjUxMDFcclxuXHRcdE9JTW9ib3hTQVBJOiAnJywgLy8xMTUuMjkuMTg1LjI2OjUxMDJcclxuXHRcdE9JRGF0YVNBUEk6ICcnLCAvLzExNS4yOS4xODUuMjY6NTEwM1xyXG5cdFx0T0lNb25nb2RiU3ZyOiAnJyAvLzExNS4yOS4xODUuMjY6NTIwMVxyXG5cdH0sXHJcblx0bXV0YXRpb25zOiB7XHJcblx0XHRzZXREZXZpY2VJZChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLmRldmljZUlkID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdHNldFVybChzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLnVybCA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRPcmdTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lPcmdTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldE1vYnhvU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLk9JTW9ib3hTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldERhdGFTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lEYXRhU0FQSSA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRNb25nb2RiU3ZyKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lNb25nb2RiU3ZyID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldEFwa1ZlcnNpb25JbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXBrVmVyc2lvbkluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0bG9naW4oc3RhdGUsIHByb3ZpZGVyKSB7XHJcblx0XHRcdHN0YXRlLmhhc0xvZ2luID0gdHJ1ZTtcclxuXHRcdFx0c3RhdGUubG9naW5Qcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cdFx0fSxcclxuXHRcdGFyZWFGdW5jKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXJlYUZ1bmMgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0YXJlYUZ1bmNpZChzdGF0ZSxpZCl7XHJcblx0XHRcdHN0YXRlLnRoaXNhcmVhRnVuY0lEPWlkO1xyXG5cdFx0fSxcclxuXHRcdHNldGFyZWFGdW5TdWJjaWQoc3RhdGUsaWQpe1xyXG5cdFx0XHRzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRD1pZDtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0TmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0TmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0U3ViTmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0U3ViTmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXREaWN0TmFtZShzdGF0ZSxkaWN0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZT1kaWN0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRjbGFzc0F0dHJMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0F0dHJMaXN0LHN0YXRlLnRoaXNhcmVhRnVuY0lELHJldCk7XHJcblx0XHR9LFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdHZhciBkYXRhID0ge307XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdGRhdGEgPSBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdFx0VnVlLnNldChkYXRhLHN0YXRlLnRoaXNFZGl0TmFtZSxyZXQpO1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm8sc3RhdGUudGhpc2FyZWFGdW5jSUQsZGF0YSk7XHJcblx0XHR9LFxyXG5cdFx0c3ViQ2xhc3NBdHRyTGlzdChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Qsc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQscmV0KTtcclxuXHRcdH0sXHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUsIHJldCkge1xyXG5cdFx0XHR2YXIgZGF0YSA9IHt9O1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRkYXRhID0gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF07XHJcblx0XHRcdFZ1ZS5zZXQoZGF0YSxzdGF0ZS50aGlzRWRpdFN1Yk5hbWUscmV0KTtcclxuXHRcdFx0VnVlLnNldChzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvLHN0YXRlLnRoaXNhcmVhRnVuY1N1YklELGRhdGEpO1xyXG5cdFx0fSxcclxuXHRcdGRpY1ZhbHVlSW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdC8vIHN0YXRlLl9kaWNWYWx1ZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9kaWNWYWx1ZUluZm8sc3RhdGUudGhpc0RpY3ROYW1lLHJldCk7XHJcblx0XHR9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0cXVlcnlTZWxwc24oc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5xdWVyeVNlbHBzbiA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuUHJvamVjdEdldEFuYWx5c2lzTGlzdCA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRhZGRjbGFzc2F0dHIoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5hZGRjbGFzc2F0dHIgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0RGVsT2JqKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuRGVsT2JqID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdGxvZ291dChzdGF0ZSkge1xyXG5cdFx0XHRzdGF0ZS5oYXNMb2dpbiA9IGZhbHNlXHJcblx0XHR9LFxyXG5cdH0sXHJcblx0Z2V0dGVyczoge1xyXG5cdFx0Z2V0RGV2aWNlSWQoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuZGV2aWNlSWRcclxuXHRcdH0sXHJcblx0XHRHZXRBcGtTZXJ2aW9uSW5mbyhzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuYXBrVmVyc2lvbkluZm9cclxuXHRcdH0sXHJcblx0XHRsb2dpbmlkKHN0YXRlKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWRcclxuXHRcdH0sXHJcblx0XHRnZXRVcmwoc3RhdGUpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLnVybFxyXG5cdFx0fSxcclxuXHRcdGdldE9yZ1NBcGkoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lPcmdTQVBJO1xyXG5cdFx0fSxcclxuXHRcdGdldE1vYnhvU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5PSU1vYm94U0FQSTtcclxuXHRcdH0sXHJcblx0XHRnZXREYXRhU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5PSURhdGFTQVBJO1xyXG5cdFx0fSxcclxuXHRcdGdldE1vbmdvZGJTdnIoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lNb25nb2RiU3ZyO1xyXG5cdFx0fSxcclxuXHRcdGdldGNsYXNzQXR0ckxpc3Qoc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdO1xyXG5cdFx0fSxcclxuXHRcdGdldGNsYXNzR3JpZFN0eWxlSW5mbyhzdGF0ZSl7XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdHJldHVybiBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXVtzdGF0ZS50aGlzRWRpdE5hbWVdO1xyXG5cdFx0XHRlbHNlIFxyXG5cdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fSxcclxuXHRcdGdldFN1YkNsYXNzQXR0ckxpc3Qoc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jU3ViSURdO1xyXG5cdFx0fSxcclxuXHRcdGdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyhzdGF0ZSl7XHJcblx0XHRcdGlmKHN0YXRlLl9zdWJDbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jU3ViSURdKVxyXG5cdFx0XHRcdHJldHVybiBzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXVtzdGF0ZS50aGlzRWRpdFN1Yk5hbWVdO1xyXG5cdFx0XHRlbHNlIFxyXG5cdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fSxcclxuXHRcdGdldGRpY1ZhbHVlSW5mbyhzdGF0ZSl7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5fZGljVmFsdWVJbmZvW3N0YXRlLnRoaXNEaWN0TmFtZV07XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdFxyXG5cdH0sXHJcblx0YWN0aW9uczoge1xyXG5cdFx0Ly97Y29tbWl0fSDop6PmnoTvvIxcclxuXHRcdC8vdW5pdmVyaWZ5SW5mbyDoh6rlrprkuYnlj4LmlbBcclxuXHRcdEdldEFwa1ZlcnNpb25JbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvID0gdW5pdmVyaWZ5SW5mbyB8fCB7fTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnNlcnZlciA9IHVuaXZlcmlmeUluZm8uc2VydmVyIHx8ICcnO1xyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnNlcnZlci5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOifmnI3liqHlmajlnLDlnYDkuI3og73kuLrnqbohJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgb3BlbmluZm8gPSBcImh0dHA6Ly9cIiArIHVuaXZlcmlmeUluZm8uc2VydmVyICsgXCIvXCI7IC8vK1wiL09yZ1dlYlNcIlxyXG5cdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHRcdGNvbW1pdChcInNldFVybFwiLG9wZW5pbmZvKTtcclxuXHRcdFx0XHQvLyB2YXIgc2VyID0gdW5pdmVyaWZ5SW5mby5zZXJ2ZXIuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHQvLyBpZihzZXJbMV0gPT0gJ21vYm94Mycpe1xyXG5cdFx0XHRcdC8vIFx0Ly8gcmVqZWN0KHtcImVyck1zZ1wiOlwiTW9ib3gz5pqC5pe25pyq5pSv5oyB6Ieq5Yqo5pu05paw77yBXCJ9KTtcclxuXHRcdFx0XHQvLyBcdHJlc29sdmUoe2NvZGU6JzAwMDAwJyxkYXRhOlwiXCIsbXNnOlwiXCJ9KTtcclxuXHRcdFx0XHQvLyBcdHJldHVybjtcclxuXHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBvcGVuaW5mbyArIFwiUERBL0dldEFwa1ZlcnNpb25JbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB7fSxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdCAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7IFxyXG5cdFx0XHRcdFx0XHRpZihyZXMuc3RhdHVzQ29kZT09NDA0KXtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLlnLDlnYDkuI3lr7nvvIzor7fmo4Dmn6Xor6XlnLDlnYDvvJpcIisgb3BlbmluZm8gK1wiLOaWueazle+8mkdldEFwa1ZlcnNpb25JbmZvLOaYr+WQpuato+ehrlwifSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihyZXMuc3RhdHVzQ29kZT09NTAwKXtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLmnKrmib7liLDmm7TmlrDljIXmiYDlnKjnm67lvZXvvIFcIn0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInNldEFwa1ZlcnNpb25JbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGxvZ2luOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvID0gdW5pdmVyaWZ5SW5mbyB8fCB7fTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnNlcnZlciA9IHVuaXZlcmlmeUluZm8uc2VydmVyIHx8ICcnO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8udW5hbWUgPSB1bml2ZXJpZnlJbmZvLnVuYW1lIHx8ICcnO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ucHdkID0gdW5pdmVyaWZ5SW5mby5wd2QgfHwgJyc7XHJcblx0XHRcdFx0aWYgKHVuaXZlcmlmeUluZm8uc2VydmVyLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+acjeWKoeWZqOWcsOWdgOS4jeiDveS4uuepuiEnfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnVuYW1lLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon6LSm5Y+35pyA55+t5Li6IDIg5Liq5a2X56ymISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHVuaXZlcmlmeUluZm8ucHdkLmxlbmd0aCA8IDEpIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon5a+G56CB5pyA55+t5Li6IDHkuKrlrZfnrKYhJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgb3BlbmluZm8gPSBcImh0dHA6Ly9cIiArIHVuaXZlcmlmeUluZm8uc2VydmVyICsgXCIvXCI7XHJcblx0XHRcdFx0Ly/orr7nva7lhajlsYDlj4LmlbDvvJp1cmwt5pyN5Yqh5Zmo5Zyw5Z2AXHJcblx0XHRcdFx0Y29tbWl0KFwic2V0VXJsXCIsb3BlbmluZm8pO1xyXG5cdFx0XHRcdHZhciBzZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlci5zcGxpdCgnLycpO1xyXG5cdFx0XHRcdHZhciB1cmwgPSBvcGVuaW5mbyArIFwiUERBL1NpZ25JblwiO1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXRPcmdTQXBpXCIsJycpO1xyXG5cdFx0XHRcdGNvbW1pdChcInNldE1vYnhvU0FwaVwiLCcnKTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXREYXRhU0FwaVwiLCcnKTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXRNb25nb2RiU3ZyXCIsJycpO1xyXG5cdFx0XHRcdGlmKHNlclsxXSA9PSAnbW9ib3gzJyl7IC8v5Yik5pat5Zyw5Z2A5piv5ZCm5pivTW9ib3gzXHJcblx0XHRcdFx0XHR2YXIgb3JnU0FwaSA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MTAxL1wiO1xyXG5cdFx0XHRcdFx0dmFyIG1vYnhvU0FwaSA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MTAyL1wiO1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFTQXBpID0gXCJodHRwOi8vXCIgKyBzZXJbMF0uc3BsaXQoJzonKVswXSArIFwiOjUxMDMvXCI7XHJcblx0XHRcdFx0XHR2YXIgbW9uZ29kYlN2ciA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MjAxL1wiO1xyXG5cdFx0XHRcdFx0Y29tbWl0KFwic2V0T3JnU0FwaVwiLG9yZ1NBcGkpO1xyXG5cdFx0XHRcdFx0Y29tbWl0KFwic2V0TW9ieG9TQXBpXCIsbW9ieG9TQXBpKTtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldERhdGFTQXBpXCIsZGF0YVNBcGkpO1xyXG5cdFx0XHRcdFx0Y29tbWl0KFwic2V0TW9uZ29kYlN2clwiLG1vbmdvZGJTdnIpO1xyXG5cdFx0XHRcdFx0dXJsID0gb3JnU0FwaSsnYXBpL3VzZXIvYWNlL1ZlcmlmeVBhc3N3b3JkJztcclxuXHRcdFx0XHRcdHVuaXZlcmlmeUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGFwcF90eXBlOiBcIm1vYm94XCIsXHJcblx0XHRcdFx0XHRcdHVzZXJfbG9naW46IEJhc2U2NC5lbmNvZGUodW5pdmVyaWZ5SW5mby51bmFtZSksXHJcblx0XHRcdFx0XHRcdHVzZXJfcHN3OiBCYXNlNjQuZW5jb2RlKHVuaXZlcmlmeUluZm8ucHdkKSxcclxuXHRcdFx0XHRcdFx0Y2xpZW50X2luZm86e1xyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IDMsIC8v5a6i5oi356uv57G75Z6L77yaMOKAk1BD77yMMeKAk1dFQu+8jDLigJPlronljZPvvIwz4oCT5a6J5Y2TUEFE77yMNOKAk2lQaG9uZe+8jCA14oCTaVBhZO+8jCA24oCT5YW25a6DXHJcblx0XHRcdFx0XHRcdFx0bnVtOiBzdGF0ZS5kZXZpY2VJZCAgLy9QREHnmoTorr7lpIflj7dcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGhlYWRlcj17fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZS5sb2codW5pdmVyaWZ5SW5mbyk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpOyBcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnIHx8IHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwibG9naW5cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZz9yZXQubXNnOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRhcmVhRnVuYzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyIHVybCA9IHN0YXRlLnVybCArIFwiUERBL1BEQUFyZWFcIjtcclxuXHRcdFx0XHR2YXIgaGVhZGVyID0geydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ307XHJcblx0XHRcdFx0aWYoc3RhdGUuT0lNb2JveFNBUEkpeyAvL+WIpOaWreaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdFx0dXJsID0gc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9hcHAvYXJlYS9HZXRMaXN0P3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZDtcclxuXHRcdFx0XHRcdHVuaXZlcmlmeUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGFwcF90eXBlOiBcIk1FU1wiLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGhlYWRlcj17fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IGhlYWRlcixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0aWYocmVzLnN0YXR1c0NvZGU9PTQwNCl7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi5Zyw5Z2A5LiN5a+577yM6K+35qOA5p+l6K+l5Zyw5Z2A77yaXCIrIG9wZW5pbmZvfSk7XHJcblx0XHRcdFx0XHRcdH0gXHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcgfHwgcmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnP3JldC5tc2c6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBNb2JveDPojrflj5blupTnlKjpoobln5/kuIvnmoTlip/og73ngrlcclxuXHRcdEdldEZ1bmNUcmVlOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JTW9ib3hTQVBJKydhcGkvYXBwL0dldEZ1bmNUcmVlP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Y2xhc3NBdHRyTGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFBdHRyTGlzdFwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyBpZihKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkuaW5jbHVkZXMoJ0xvZ2luIFBhZ2UgLSBBY2UgQWRtaW4nKSl7XHJcblx0XHRcdFx0XHRcdC8vIFx0dW5pLnJlTGF1bmNoKHtcclxuXHRcdFx0XHRcdFx0Ly8gXHRcdHVybDogJy4uL2xvZ2luL2luZGV4J1xyXG5cdFx0XHRcdFx0XHQvLyBcdH0pXHJcblx0XHRcdFx0XHRcdC8vIFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi55m75b2V5bey6L+H5pyf77yM6K+36YeN5paw55m75b2VXCJ9KTtcclxuXHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJjbGFzc0F0dHJMaXN0XCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGNsYXNzR3JpZFN0eWxlSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBR3JpZFN0eWxlR2V0SW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyBpZihKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkuaW5jbHVkZXMoJ0xvZ2luIFBhZ2UgLSBBY2UgQWRtaW4nKSl7XHJcblx0XHRcdFx0XHRcdC8vIFx0dW5pLnJlTGF1bmNoKHtcclxuXHRcdFx0XHRcdFx0Ly8gXHRcdHVybDogJy4uL2xvZ2luL2luZGV4J1xyXG5cdFx0XHRcdFx0XHQvLyBcdH0pXHJcblx0XHRcdFx0XHRcdC8vIFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi55m75b2V5bey6L+H5pyf77yM6K+36YeN5paw55m75b2VXCJ9KTtcclxuXHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YSA9e307XHJcblx0XHRcdFx0XHRcdFx0Ly8gVnVlLnNldChkYXRhLHVuaXZlcmlmeUluZm8ubmFtZSxyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImNsYXNzR3JpZFN0eWxlSW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRzdWJDbGFzc0F0dHJMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUF0dHJMaXN0XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0c3ViQ2xhc3NHcmlkU3R5bGVJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFHcmlkU3R5bGVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhID17fTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWdWUuc2V0KGRhdGEsdW5pdmVyaWZ5SW5mby5uYW1lLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NHcmlkU3R5bGVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRkaWNWYWx1ZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQURpY1ZhbHVlR2V0SW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50aGlzRGljdE5hbWUgPSB1bml2ZXJpZnlJbmZvLmRpY19uYW1lXHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiZGljVmFsdWVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdERhdGFPYmpSdW5DdXN0b21FdmVudEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBRGF0YU9ialJ1bkN1c3RvbUV2ZW50XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0cXVlcnlTZWxwc246IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHZhciB1cmwgPSBzdGF0ZS51cmwgKyBcInNlbHBzbi9xdWVyeWpzb25cIjtcclxuXHRcdFx0XHR2YXIgZGF0YWpzb24gPSB1bml2ZXJpZnlJbmZvO1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHRpZihzdGF0ZS5PSU9yZ1NBUEkpeyAvL+WIpOaWreaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdCBcdHVybCA9IHN0YXRlLk9JT3JnU0FQSSsnYXBpL3VzZXIvcXVlcnkvcXVlcnk/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkO1xyXG5cdFx0XHRcdFx0ZGF0YWpzb24gPSB7XHJcblx0XHRcdFx0IFx0XHRxdWVyeV9zdHI6IHVuaXZlcmlmeUluZm8uanAsXHJcblx0XHRcdFx0IFx0fTtcclxuXHRcdFx0XHQgXHRoZWFkZXI9e307XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0ZGF0YTogZGF0YWpzb24sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiBoZWFkZXIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdHRyeXtcclxuXHRcdFx0XHRcdFx0XHRyZXMgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcclxuXHRcdFx0XHRcdFx0fWNhdGNoKGUpeyBcclxuXHRcdFx0XHRcdFx0XHRyZXMgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAocmVzLmNvZGU9PScwMDAwMCcgfHwgcmVzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJxdWVyeVNlbHBzblwiLHJlcyk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXMpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXMubXNnP3Jlcy5tc2c6cmVzLmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdFByb2plY3RHZXRBbmFseXNpc0xpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdCB2YXIgdXJsID0gc3RhdGUudXJsICsgXCJicG0vUHJvamVjdEdldEFuYWx5c2lzTGlzdFwiO1xyXG5cdFx0XHRcdCB2YXIgaGVhZGVyID0geydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ307XHJcblx0XHRcdFx0IGlmKHN0YXRlLk9JTW9ib3hTQVBJKXsgLy/liKTmlq3mmK/lkKbmmK9Nb2JveDNcclxuXHRcdFx0XHQgXHQvLyB1cmwgPSBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2FwcC9hcmVhL0dldExpc3Q/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkO1xyXG5cdFx0XHRcdCBcdC8vIHVuaXZlcmlmeUluZm8gPSB7XHJcblx0XHRcdFx0IFx0Ly8gXHRhcHBfdHlwZTogXCJNRVNcIixcclxuXHRcdFx0XHQgXHQvLyB9O1xyXG5cdFx0XHRcdCBcdC8vIGhlYWRlcj17fTtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpcIk1vYm94M+aaguaXtuacquaUr+aMgemAieaLqemhueebruaOpeWPo++8gVwifSk7XHJcblx0XHRcdFx0XHQvLyByZXNvbHZlKHtjb2RlOicwMDAwMCcsZGF0YTpcIlwiLG1zZzpcIlwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0IH1cclxuXHRcdFx0XHQgIFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IGhlYWRlcixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIlByb2plY3RHZXRBbmFseXNpc0xpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0YWRkY2xhc3NhdHRyOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvYWRkY2xhc3NhdHRyXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJhZGRjbGFzc2F0dHJcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6SlNPTi5zdHJpbmdpZnkocmV0KX0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0RGVsT2JqOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL0RlbE9ialwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiRGVsT2JqXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOkpTT04uc3RyaW5naWZ5KHJldCl9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdFxyXG5cdFx0Ly8gYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5pWw5o2u57G75bGe5oCnXHJcblx0XHRjbGFzc0F0dHJHZXRMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9jbGFzcy9hdHRyL0dldExpc3Q/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOaVsOaNruexu+WxnuaAp1xyXG5cdFx0c3ViQ2xhc3NBdHRyR2V0TGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9jbGFzcy9hdHRyL0dldExpc3Q/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvZGljdC9pdGVtL0dldEluZm8/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOWtl+WFuOmhueWIl+ihqFxyXG5cdFx0RGljdEl0ZW1HZXRMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9kaWN0L2l0ZW0vR2V0SW5mbz9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9kaWN0L0dldEluZm8yP3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPlvpfliLDlrZflhbjkv6Hmga9cclxuXHRcdERpY3RHZXRJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9kaWN0L0dldEluZm8yP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvLyBhcGkvZGF0YW9iai9DcmVhdGU/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+WIm+W7uuaVsOaNruWvueixoVxyXG5cdFx0Y3JlYXRlRGF0YU9iajogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9DcmVhdGU/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8vIGFwaS9jbGFzcy91aXN0eWxlL0dldEluZm8/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOaVsOaNruexu+aYvuekuuagt+W8j+S/oeaBr1xyXG5cdFx0VUlTdHlsZUdldEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvY2xhc3MvdWlzdHlsZS9HZXRJbmZvP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9kYXRhb2JqL1J1bkN1c3RvbUV2ZW50P3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPmiafooYzoh6rlrprkuYnohJrmnKxcclxuXHRcdHJ1bkN1c3RvbUV2ZW50OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2RhdGFvYmovUnVuQ3VzdG9tRXZlbnQ/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RhdGFvYmovRGVsZXRlP3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPliKDpmaTmlbDmja7lr7nosaFcclxuXHRcdGRhdGFPYmpEZWw6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9EZWxldGU/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RhdGFvYmovcXVlcnkvUXVlcnk/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+afpeivouaVsOaNruWvueixoVxyXG5cdFx0ZGF0YU9ialF1ZXJ5OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2RhdGFvYmovcXVlcnkvUXVlcnk/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2FwcC9HZXRJbmZvP3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPojrflj5blip/og73ngrnkv6Hmga9cclxuXHRcdGFwcEdldEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9hcHAvR2V0SW5mbz9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHR9XHJcbn0pXHJcblxyXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///200\n");
/***/ }),
/* 201 */