jt
2024-03-22 151765dd21f31cb17bdafbb2cc7afda4a5409076
unpackage/dist/dev/app-plus/app-service.js
@@ -47109,7 +47109,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//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  onNavigationBarButtonTap: function onNavigationBarButtonTap(e) {\n    //  \tconsole.log(e);\n    // e.text=\"\\ue924\";\n    // console.log(e.fontSize);\n    if (this.isFilter) this.isFilter = false;else this.isFilter = true;\n  },\n  onBackPress: function onBackPress(e) {\n    // console.log(\"监听返回按钮事件\",e);\n    var eventChannel = this.$scope.eventChannel;\n    // const eventChannel = this.getOpenerEventChannel();\n    eventChannel.emit('view_3201', \"\");\n    // uni.navigateBack({\n    // \tdelta:1 ,//返回层数,2则上上页\n    // });\n    // return true;\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      isFilter: true,\n      param: {},\n      focusMateria: false,\n      styledef: {},\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      items: [],\n      active_id: '',\n      activelist: [],\n      where: '',\n      wheres: '',\n      orderby: '',\n      query_id: '',\n      pageindex: 1,\n      page_size: 10,\n      page_count: 0,\n      scrollTop: 0,\n      old: {\n        scrollTop: 0\n      },\n      isScroll: true,\n      //获取数据类的HTML页面\n      ListHtml_Panel: \"\",\n      ListPageHtml_Show: {\n        name: \"\",\n        event: {\n          id: \"\",\n          name: \"\"\n        }\n      }\n    };\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n      var _this$param$ListPage$;\n      return _regenerator.default.wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\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              _this.isFilter = true;\n              if (_this.param.ShowFilter) _this.isFilter = false;\n              //获取数据类的自定义表单参数\n              _this.Head_UIStyleGetInfo(_this.param.DataCls.id, _this.param.Query_Panel.id);\n              if (!(((_this$param$ListPage$ = _this.param.ListPage.ListItem_UIDef) === null || _this$param$ListPage$ === void 0 ? void 0 : _this$param$ListPage$.ui_type) == \"HTML页面\")) {\n                _context.next = 11;\n                break;\n              }\n              _context.next = 9;\n              return _this.Html_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 9:\n              _context.next = 13;\n              break;\n            case 11:\n              _context.next = 13;\n              return _this.Detail1_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 13:\n              _this.orderby = _this.param.Order ? _this.param.Order : 'T_CREATE Desc';\n              if (!_this.param.Query_Event) {\n                _context.next = 19;\n                break;\n              }\n              _context.next = 17;\n              return _this.onSearChange(_this.param.DataCls.id, _this.param.Query_Event.id);\n            case 17:\n              _context.next = 25;\n              break;\n            case 19:\n              _this.wheres = _this.param.Condition;\n              _this.pageindex = 1;\n              _this.page_size = 3;\n              _this.query_id = \"\";\n              _context.next = 25;\n              return _this.loadDataGetList();\n            case 25:\n              __f__(\"log\", _this.$data.param, \" at pages/modal/3200.vue:691\");\n              //页面初始化获取焦点\n              // this.focusMateria=true; \n            case 26:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }))();\n  },\n  methods: {\n    //滚动到底部后懒加载数据\n    scrolltolower: function scrolltolower(e) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!_this2.isScroll) {\n                  _context2.next = 7;\n                  break;\n                }\n                if (!(_this2.page_count == _this2.pageindex)) {\n                  _context2.next = 3;\n                  break;\n                }\n                return _context2.abrupt(\"return\");\n              case 3:\n                _this2.pageindex += 1;\n                if (_this2.where || _this2.page_count == 1) {\n                  _this2.query_id = \"\";\n                  _this2.detail1StyleDefList = [];\n                }\n                _context2.next = 7;\n                return _this2.loadDataGetList();\n              case 7:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    scroll: function scroll(e) {\n      // console.log(e.detail.scrollTop)\n      this.old.scrollTop = e.detail.scrollTop;\n    },\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this3 = 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 = _this3;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                }; // console.log(dataInfo);\n                _this3.$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                    // this.form = this.head_styledef.form.model;\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 _callee3(ele, index) {\n                        return _regenerator.default.wrap(function _callee3$(_context3) {\n                          while (1) {\n                            switch (_context3.prev = _context3.next) {\n                              case 0:\n                                __f__(\"log\", ele.useDict, \" at pages/modal/3200.vue:736\");\n                                if (!(ele.useDict == true)) {\n                                  _context3.next = 4;\n                                  break;\n                                }\n                                _context3.next = 4;\n                                return _this3.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 4:\n                              case \"end\":\n                                return _context3.stop();\n                            }\n                          }\n                        }, _callee3);\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 _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this4 = 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                //获取自定义表单样式\n                $this = _this4;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this4.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  __f__(\"log\", ret, \" at pages/modal/3200.vue:758\");\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 = false;\n                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\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 _context5.stop();\n            }\n          }\n        }, _callee5);\n      }))();\n    },\n    Html_UIstyleGetInfo: function Html_UIstyleGetInfo(class_id, style_id) {\n      var _this5 = 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 = _this5;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this5.$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.ListPageHtml_Show = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.ListPageHtml_Show);\n                  } else {\n                    uni.showModal({\n                      title: \"错误10\",\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: \"错误10.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 _this6 = 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                _this6.data = [];\n                $this = _this6;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this6.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(success) {\n                    var list, itemName, attr, head_styledef;\n                    return _regenerator.default.wrap(function _callee7$(_context7) {\n                      while (1) {\n                        switch (_context7.prev = _context7.next) {\n                          case 0:\n                            __f__(\"log\", success, \" at pages/modal/3200.vue:831\");\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                                head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n                                $this.head_styledef = [];\n                                $this.head_styledef = head_styledef;\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: \"错误3.1\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 2:\n                          case \"end\":\n                            return _context7.stop();\n                        }\n                      }\n                    }, _callee7);\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: \"错误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    // 执行查询事件\n    onSearChange: function onSearChange(clsid, eventid) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {\n        var $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    $this = _this7;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: clsid,\n                      event_id: eventid\n                    };\n                    _this7.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_query_condition\") {\n                                var value = item.value;\n                                $this.wheres = value.condition;\n                                $this.orderby = value.order ? value.order : $this.orderby;\n                                $this.pageindex = 1;\n                                $this.query_id = \"\";\n                                $this.detail1StyleDefList = [];\n                                $this.loadDataGetList();\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: \"错误4\",\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: \"错误4.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误4.2\",\n                    content: \"执行“查询事件”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context9.stop();\n            }\n          }\n        }, _callee9);\n      }))();\n    },\n    //查询数据类数据信息\n    loadDataGetList: function loadDataGetList() {\n      var _this8 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n        var condition, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                try {\n                  uni.showLoading({\n                    title: \"加载中...\",\n                    mask: true\n                  });\n                  //条件查询\n                  condition = _this8.wheres;\n                  if (_this8.where) {\n                    if (condition) condition += ' and ';\n                    condition += _this8.where;\n                  }\n                  // console.log(condition);\n                  // console.log(this.orderby);\n                  $this = _this8;\n                  dataInfo = {\n                    class_id: _this8.param.DataCls.id,\n                    attrs: [],\n                    condition: _this8.toWhereBase64String(\"\" + condition + \"\"),\n                    prj_rel_type: \"\",\n                    order_by: _this8.orderby,\n                    page_size: _this8.page_size,\n                    page: _this8.pageindex,\n                    query_id: _this8.query_id\n                  };\n                  _this8.$store.dispatch('dataObjQuery', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:954\");\n                    uni.hideLoading();\n                    if (ret.err_code == 0) {\n                      // var list=[];\n                      $this.query_id = '';\n                      if (ret.result) {\n                        $this.page_count = ret.result.page_count;\n                        if (ret.result.page_count > 1) $this.query_id = ret.result.query_id;\n                        if ($this.ListPageHtml_Show.event.id) {\n                          ret.result.obj_list.forEach(function (obj) {\n                            var info = {\n                              id: obj.id\n                            };\n                            obj.attr_list.forEach(function (attr) {\n                              info[attr.name] = attr.value;\n                            });\n                            var detailStyle = {\n                              SelBut_Checked: false,\n                              form: {},\n                              info: info\n                            };\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                          });\n                          // console.log(this.detail1StyleDefList);\n                          var jsonlist = [];\n                          $this.detail1StyleDefList.forEach(function (attr) {\n                            jsonlist.push({\n                              id: attr.info.id,\n                              attrs: Object.keys(attr.info).map(function (a) {\n                                return {\n                                  attr: a,\n                                  value: attr.info[a] || \"\"\n                                };\n                              })\n                            });\n                          });\n                          // console.log(jsonlist);\n                          var data_json = _base.default.encode(JSON.stringify(jsonlist));\n                          var eventid = $this.ListPageHtml_Show.event.id;\n                          if (!$this.ListPageHtml_Show.event.id.includes('{')) eventid = '{' + $this.ListPageHtml_Show.event.id + '}';\n                          //HTML页面事件\n                          $this.runCustomEvent({\n                            ed_type: 0,\n                            start_transaction: true,\n                            class_id: $this.param.DataCls.id,\n                            event_id: eventid,\n                            data_json: data_json\n                          });\n                        } else {\n                          // $this.detail1StyleDefList=[];\n                          ret.result.obj_list.forEach(function (obj) {\n                            var styleStr = JSON.stringify($this.detail1_styledef);\n                            var detailStyle = JSON.parse(styleStr);\n                            // var info ={\n                            //     S_ID:obj.id,\n                            // };\n                            obj.attr_list.forEach(function (attr) {\n                              // info[attr.name]=attr.value;\n                              detailStyle.form.items.forEach(function (ele) {\n                                if (ele.name != 'Layout') {\n                                  if (ele.fieldId == attr.name) ele.value = attr.value;\n                                } else if (ele.name == 'Layout') {\n                                  ele.setting.colList.forEach(function (col) {\n                                    if (col) {\n                                      if (col.fieldId == attr.name) col.value = attr.value;\n                                    }\n                                  });\n                                }\n                              });\n                            });\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                            //list.push(info);\n                          });\n                        }\n\n                        // 解决view层不同步的问题\n                        // $this.scrollTop = $this.old.scrollTop;\n                        $this.isScroll = false;\n                        setTimeout(function () {\n                          $this.isScroll = true;\n                        }, 1000);\n                        // console.log($this.detail1StyleDefList);\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误5\",\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: \"错误5.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误5.2\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context10.stop();\n            }\n          }\n        }, _callee10);\n      }))();\n    },\n    //刷新\n    Refresh: function Refresh(value) {\n      //刷新当前页面\n      // location.reload();\n      uni.redirectTo({\n        url: '../modal/3200?param=' + JSON.stringify(this.$data.param) + \"&titlename=\" + this.$data.title\n      });\n    },\n    //点击显示浏览对象显示页面\n    onViewPageClick: function onViewPageClick(style) {\n      var _this9 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n        var $this;\n        return _regenerator.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                if (_this9.param.ViewPage) {\n                  if (_this9.param.ViewPage.View_UIDef) {\n                    _this9.styledef = style;\n                    $this = _this9;\n                    uni.navigateTo({\n                      url: '../modal/3200_view?param=' + JSON.stringify(_this9.param) + \"&titlename=\" + _this9.title + \"&style=\" + JSON.stringify(style),\n                      events: {\n                        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据\n                        ExitViewEvent: function ExitViewEvent(data) {\n                          var _$this$param$ViewPage;\n                          __f__(\"log\", data, \" at pages/modal/3200.vue:1080\");\n                          //退出页面后事件\n                          var eventid = (_$this$param$ViewPage = $this.param.ViewPage.Exit_View_Event) === null || _$this$param$ViewPage === void 0 ? void 0 : _$this$param$ViewPage.id;\n                          if (eventid) {\n                            try {\n                              var obj_attr = {\n                                'S_ID': $this.styledef.form.objId\n                              };\n                              $this.styledef.form.attrs.forEach(function (attr) {\n                                obj_attr[attr.name] = attr.value;\n                              });\n                              // console.log(obj_attr);\n                              var input_param = _base.default.encode(JSON.stringify(obj_attr));\n                              $this.runCustomEvent({\n                                ed_type: 0,\n                                start_transaction: true,\n                                class_id: $this.param.DataCls.id,\n                                event_id: eventid,\n                                obj_attr: obj_attr,\n                                input_param: input_param\n                              });\n                            } catch (ex) {\n                              var tip = typeof ex == \"string\" ? ex : ex.message;\n                              uni.showModal({\n                                title: \"错误\",\n                                content: tip,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      }\n                    });\n                  }\n                }\n              case 1:\n              case \"end\":\n                return _context11.stop();\n            }\n          }\n        }, _callee11);\n      }))();\n    },\n    //点击按钮\n    onBtnClick: function onBtnClick(btn, style) {\n      var that = this;\n      if (btn.Prompt) {\n        uni.showModal({\n          title: '提示',\n          content: btn.PromptContent || \"是否确定?\",\n          success: function success(res) {\n            if (res.confirm) {\n              that.onButtonClicked(btn, style);\n              // } else if (res.cancel) {\n              // \tconsole.log('用户点击取消');\n            }\n          }\n        });\n      } else that.onButtonClicked(btn, style);\n    },\n    //点击按钮列表\n    actionSheetTap: function actionSheetTap() {\n      var that = this;\n      var itemlist = [];\n      this.param.ListPage.Page_Button.forEach(function (btn) {\n        itemlist.push(btn.ShowName);\n      });\n      uni.showActionSheet({\n        // title: '按钮列表',\n        itemList: itemlist,\n        success: function success(e) {\n          __f__(\"log\", e.tapIndex, \" at pages/modal/3200.vue:1138\");\n          var btn = that.param.ListPage.Page_Button[e.tapIndex];\n          if (btn.Prompt) {\n            uni.showModal({\n              title: '提示',\n              content: btn.PromptContent || \"是否确定?\",\n              success: function success(res) {\n                if (res.confirm) {\n                  that.onButtonClicked(btn);\n                  // } else if (res.cancel) {\n                  // \tconsole.log('用户点击取消');\n                }\n              }\n            });\n          } else that.onButtonClicked(btn);\n        }\n      });\n    },\n    //处理相关按钮\n    onButtonClicked: function onButtonClicked(btn, style) {\n      var _this10 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {\n        var enviroment, tip;\n        return _regenerator.default.wrap(function _callee12$(_context12) {\n          while (1) {\n            switch (_context12.prev = _context12.next) {\n              case 0:\n                style = style || '';\n                try {\n                  enviroment = {\n                    button: \"top\",\n                    button_name: btn.ShowName,\n                    cls_id: btn.Cls_ID,\n                    function: \"3200\",\n                    master: {}\n                  };\n                  if (btn.FunCode == \"Add\" || btn.FunCode == \"Modify\") {\n                    if (btn.Edit_dlg.Model == \"small\") {\n                      _this10.showAddSmallDialog(btn, style, enviroment);\n                    }\n                  } else if (btn.FunCode == \"Delete\") {\n                    _this10.DeleteObj(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else {\n                    uni.showModal({\n                      title: \"提示\",\n                      content: \"未实现\",\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 2:\n              case \"end\":\n                return _context12.stop();\n            }\n          }\n        }, _callee12);\n      }))();\n    },\n    //新增修改小窗口数据\n    showAddSmallDialog: function showAddSmallDialog(btn, style, enviroment) {\n      var data = {\n        Add_BtnName: btn.ShowName,\n        EditDlgMode: btn.Edit_dlg.Model,\n        clsid: this.param.DataCls.id,\n        cls_name: this.param.DataCls.name,\n        Edit_dlg: btn.Edit_dlg\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../modal/3018?param=' + JSON.stringify(data) + \"&titlename=\" + btn.Edit_dlg.Name + \"&type=addDataObj\",\n        events: {\n          // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据\n          addDataObj: function addDataObj(data) {\n            __f__(\"log\", data, \" at pages/modal/3200.vue:1198\");\n            $this.Refresh();\n          }\n        }\n      });\n    },\n    //删除数据对象\n    DeleteObj: function DeleteObj(btn, style, enviroment) {\n      // console.log(style);\n      var $this = this;\n      uni.showModal({\n        title: '提示',\n        content: '确定删除该数据!',\n        success: function success(res) {\n          if (res.confirm) {\n            var objID = style.form.objId;\n            if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n            var dataInfo = {\n              class_id: btn.Cls_ID,\n              class_name: '',\n              obj_id: objID\n            };\n            // console.log(dataInfo);\n            $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n              // console.log(ret);\n              if (ret.err_code == 0) {\n                //执行后处理事件\n                $this.AfterProcess_Event(btn.clsId, btm.AfterProcess_Event, enviroment);\n                //清除当前列表数据\n                $this.detail1StyleDefList.forEach(function (ele, index) {\n                  if (ele.form.objId == objID) {\n                    $this.detail1StyleDefList.splice(index, 1);\n                  }\n                });\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"删除成功!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              } else {\n                uni.showModal({\n                  title: \"错误6.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: \"错误6\",\n                content: ex.errMsg,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            });\n          } else if (res.cancel) {}\n        }\n      });\n    },\n    //执行后处理事件\n    AfterProcess_Event: function AfterProcess_Event(clsId, afterProcess_Event, enviroment) {\n      var _this11 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n        var tip;\n        return _regenerator.default.wrap(function _callee13$(_context13) {\n          while (1) {\n            switch (_context13.prev = _context13.next) {\n              case 0:\n                _context13.prev = 0;\n                if (!afterProcess_Event.ID) {\n                  _context13.next = 4;\n                  break;\n                }\n                _context13.next = 4;\n                return _this11.runCustomEvent({\n                  ed_type: 0,\n                  start_transaction: true,\n                  class_id: clsId,\n                  event_id: afterProcess_Event.ID\n                });\n              case 4:\n                _context13.next = 10;\n                break;\n              case 6:\n                _context13.prev = 6;\n                _context13.t0 = _context13[\"catch\"](0);\n                tip = typeof _context13.t0 == \"string\" ? _context13.t0 : _context13.t0.message;\n                uni.showModal({\n                  title: \"错误7\",\n                  content: tip,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              case 10:\n              case \"end\":\n                return _context13.stop();\n            }\n          }\n        }, _callee13, null, [[0, 6]]);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this12 = this;\n      //扫码功能\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3200.vue:1271\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this12;\n        __f__(\"log\", item, \" at pages/modal/3200.vue:1276\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this12.head_styledef.form.model[attr] = item.value;\n          var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n          var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n          var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n          var isflag = false;\n          if (onChangeEvent.id) {\n            //内容变化后事件\n            $this.onChange(onChangeEvent);\n          } else {\n            $this.where = '';\n            if (item.value) $this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n            $this.query_id = '';\n            $this.pageindex = 1;\n            $this.detail1StyleDefList = [];\n            $this.loadDataGetList();\n          }\n          if (item.value) {\n            //第一个输入框不为空\n            $this.focusMateria = true; //初始化,第二个输入框focus属性\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //第二个输入框获取焦点\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 100);\n            // },500);\n          }\n          // if(onSuffixClickCallbackEvent.id){   //后图标点击事件\n          //   this.onSuffixClick(onSuffixClickCallbackEvent);\n          // }\n          // if(onSuffixClickEvent.id){   //后图标点击回调\n          //   this.onSuffixClickCallback(onSuffixClickEvent);\n          // }\n        }\n      });\n    },\n    onEnterChange: function onEnterChange(item) {\n      //回车,点击按钮,取消节点事件\n      // console.log(item);\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 onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n        var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n        var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n        var isflag = false;\n        if (onChangeEvent.id) {\n          //内容变化后事件\n          this.onChange(onChangeEvent);\n        } else {\n          this.where = '';\n          if (item.value) this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n          this.query_id = '';\n          this.pageindex = 1;\n          this.detail1StyleDefList = [];\n          this.loadDataGetList();\n        }\n        // if(onSuffixClickCallbackEvent.id){   //后图标点击事件\n        //   this.onSuffixClick(onSuffixClickCallbackEvent);\n        // }\n        // if(onSuffixClickEvent.id){   //后图标点击回调\n        //   this.onSuffixClickCallback(onSuffixClickEvent);\n        // }\n      }\n    },\n    // 内容变化后事件\n    onChange: function onChange(event) {\n      var _this13 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {\n        var obj_attr, input_param, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    obj_attr = _this13.head_styledef.form.model; // console.log(obj_attr);\n                    input_param = _base.default.encode(JSON.stringify(Object.keys(obj_attr).map(function (a) {\n                      return {\n                        attr: a,\n                        value: obj_attr[a] || \"\"\n                      };\n                    })));\n                    $this = _this13;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: _this13.$data.head_styledef.form.clsId,\n                      class_name: '',\n                      event_id: event.id,\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: '',\n                      global_attr: '',\n                      input_param: input_param\n                    };\n                    _this13.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_dlg_attr\") {\n                                // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n                                var data = item.value;\n                                $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(ele, index) {\n                                    return _regenerator.default.wrap(function _callee15$(_context15) {\n                                      while (1) {\n                                        switch (_context15.prev = _context15.next) {\n                                          case 0:\n                                            data.forEach( /*#__PURE__*/function () {\n                                              var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(ele2, index) {\n                                                return _regenerator.default.wrap(function _callee14$(_context14) {\n                                                  while (1) {\n                                                    switch (_context14.prev = _context14.next) {\n                                                      case 0:\n                                                        if (ele.fieldId == ele2.attr) {\n                                                          ele.value = ele2.value;\n                                                        }\n                                                      case 1:\n                                                      case \"end\":\n                                                        return _context14.stop();\n                                                    }\n                                                  }\n                                                }, _callee14);\n                                              }));\n                                              return function (_x6, _x7) {\n                                                return _ref4.apply(this, arguments);\n                                              };\n                                            }());\n                                          case 1:\n                                          case \"end\":\n                                            return _context15.stop();\n                                        }\n                                      }\n                                    }, _callee15);\n                                  }));\n                                  return function (_x4, _x5) {\n                                    return _ref3.apply(this, arguments);\n                                  };\n                                }());\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: \"错误8\",\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: \"错误8.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误8.2\",\n                    content: \"执行“内容变化后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context16.stop();\n            }\n          }\n        }, _callee16);\n      }))();\n    },\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    //事件处理\n    runCustomEvent: function runCustomEvent(dataInfo) {\n      var _this14 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {\n        var $this, tip;\n        return _regenerator.default.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                try {\n                  $this = _this14;\n                  _this14.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:1442\");\n                    if (ret.err_code == 0) {\n                      var result = ret.result;\n                      if (result.ret != 0) {\n                        var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                        if (result.ret == 801) uni.showModal({\n                          title: '提示',\n                          content: tip,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });else uni.showModal({\n                          title: '提示',\n                          content: tip + ',提示:' + result.ret,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                        return false;\n                      } else {\n                        var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                        if (tip) uni.showModal({\n                          title: '提示',\n                          content: tip,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                        if (result.result_type == 0 && result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"goback_to_pre_page\") {\n                              //返回上一页\n                              var value = item.value;\n                              uni.navigateBack({\n                                delta: 1 //返回层数,2则上上页\n                              });\n                            } else if (item.action_type == \"hidden_button\") {\n                              //隐藏按钮\n                              var value = item.value;\n                              value.forEach(function (btn) {\n                                var index = $this.param.ListPage.Page_Button.findIndex(function (button) {\n                                  return button.ShowName == btn;\n                                });\n                                if (index > -1) $this.param.ListPage.Page_Button.splice(index, 1);\n                              });\n                              // } else if(item.action_type == \"refresh_cur_row\"){ //\n                              // \tvar value = item.value;\n                            } else if (item.action_type == \"set_panel_html\") {\n                              //显示Html页面\n                              // var value = item.value;\n                              $this.ListHtml_Panel = item.value;\n                              // $this.detail1StyleDefList.forEach((ele,index)=>{\n                              // \tele.ListHtml_Panel = item.value[index];\n                              // });\n                            } else {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: \"当前action_type:\" + item.action_type + \"未处理\",\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          });\n                        } else {\n                          // this.detail2StyleDefList=[];\n                          if (result.info) {\n                            uni.showModal({\n                              title: \"提示\",\n                              content: result.info,\n                              showCancel: false,\n                              confirmText: \"取消\"\n                            });\n                          }\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误9\",\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: \"错误9.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误9.2\",\n                    content: \"执行事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context17.stop();\n            }\n          }\n        }, _callee17);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //取消\n      var eventChannel = this.$scope.eventChannel;\n      // const eventChannel = this.getOpenerEventChannel();\n      eventChannel.emit('view_3201', \"\");\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    /**\r\n     * 只支持[\"column1='A' or column2='B'\", \"column3='C' and column4='D'\", \"column5='E'\"]这种格式\r\n     * {\r\n     *     \"model\": 0 / 1,\r\n     *     \"condition\":\r\n     *     [\r\n     *         [\r\n     *             { },\r\n     *             { },\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ]\r\n     *     ]\r\n     * }\r\n     */\n    toWhereBase64String: function toWhereBase64String(list) {\n      if (typeof list == 'string') list = [list];\n      var sql = [];\n      var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=', '>', ' like'];\n      list.forEach(function (ls) {\n        var where = ls.trim().toLowerCase();\n        if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\\(/, '').replace(/\\)$/, '');\n        if (where.includes(' and ')) {\n          // 二级and放在第一级数组中\n          where.split(' and ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$;\n              var values = l.split(sep);\n              var field = (_values$ = values[0]) === null || _values$ === void 0 ? void 0 : _values$.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$2;\n                value = (_values$2 = values[1]) === null || _values$2 === void 0 ? void 0 : _values$2.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n        } else if (where.includes(' or ')) {\n          // 二级or放在第二级同一组数组中\n          var s = [];\n          where.split(' or ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$3;\n              var values = l.split(sep);\n              var field = (_values$3 = values[0]) === null || _values$3 === void 0 ? void 0 : _values$3.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$4;\n                value = (_values$4 = values[1]) === null || _values$4 === void 0 ? void 0 : _values$4.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n          sql.push(s);\n        } else {\n          var li = where;\n          // 单一查询条件直接放在第一级数组中\n          var l = li.trim();\n          if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n          var sep = '';\n          for (var i = 0; i < seps.length; i++) {\n            if (l.includes(seps[i])) {\n              sep = seps[i];\n              break;\n            }\n          }\n          if (sep) {\n            var _values$5;\n            var values = l.split(sep);\n            var field = (_values$5 = values[0]) === null || _values$5 === void 0 ? void 0 : _values$5.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n            var value = '';\n            var op = sep.trim();\n            if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n              value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n              if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n            } else {\n              var _values$6;\n              value = (_values$6 = values[1]) === null || _values$6 === void 0 ? void 0 : _values$6.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n              if (['in', 'not in'].includes(op)) {\n                value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                value = value.split(',').map(function (v) {\n                  return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                });\n              }\n            }\n            sql.push([{\n              field: field,\n              value: value,\n              op: op\n            }]);\n          }\n        }\n      });\n      if (sql.length > 0) return _base.default.encode(JSON.stringify({\n        model: 1,\n        condition: sql\n      }));else return '';\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzIwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsIm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsIm9uQmFja1ByZXNzIiwiZXZlbnRDaGFubmVsIiwiZGF0YSIsInRpdGxlIiwiaXNGaWx0ZXIiLCJwYXJhbSIsImZvY3VzTWF0ZXJpYSIsInN0eWxlZGVmIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJhY3RpdmVfaWQiLCJhY3RpdmVsaXN0Iiwid2hlcmUiLCJ3aGVyZXMiLCJvcmRlcmJ5IiwicXVlcnlfaWQiLCJwYWdlaW5kZXgiLCJwYWdlX3NpemUiLCJwYWdlX2NvdW50Iiwic2Nyb2xsVG9wIiwib2xkIiwiaXNTY3JvbGwiLCJMaXN0SHRtbF9QYW5lbCIsIkxpc3RQYWdlSHRtbF9TaG93IiwibmFtZSIsImV2ZW50IiwiaWQiLCJvbkxvYWQiLCJ1bmkiLCJtZXRob2RzIiwic2Nyb2xsdG9sb3dlciIsInNjcm9sbCIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCIkdGhpcyIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJ1aV9zdHlsZV9pZCIsImVsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEZXRhaWwxX1VJc3R5bGVHZXRJbmZvIiwiSHRtbF9VSXN0eWxlR2V0SW5mbyIsInN0eWxlX2RlZiIsIkRpY3RHZXRJbmZvIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsImxpc3QiLCJpdGVtTmFtZSIsInN1Y2Nlc3MiLCJ0ZXh0IiwidmFsdWUiLCJhdHRyIiwib25TZWFyQ2hhbmdlIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiZXZlbnRfaWQiLCJyZXN1bHQiLCJ0aXAiLCJsb2FkRGF0YUdldExpc3QiLCJtYXNrIiwiY29uZGl0aW9uIiwiYXR0cnMiLCJwcmpfcmVsX3R5cGUiLCJvcmRlcl9ieSIsInBhZ2UiLCJyZXQiLCJvYmoiLCJpbmZvIiwiU2VsQnV0X0NoZWNrZWQiLCJkZXRhaWxTdHlsZSIsImFjdGl2ZSIsImpzb25saXN0IiwiZXZlbnRpZCIsImRhdGFfanNvbiIsInNldFRpbWVvdXQiLCJSZWZyZXNoIiwidXJsIiwib25WaWV3UGFnZUNsaWNrIiwiZXZlbnRzIiwiRXhpdFZpZXdFdmVudCIsIm9ial9hdHRyIiwiaW5wdXRfcGFyYW0iLCJvbkJ0bkNsaWNrIiwidGhhdCIsImFjdGlvblNoZWV0VGFwIiwiaXRlbWxpc3QiLCJpdGVtTGlzdCIsIm9uQnV0dG9uQ2xpY2tlZCIsInN0eWxlIiwiZW52aXJvbWVudCIsImJ1dHRvbiIsImJ1dHRvbl9uYW1lIiwiY2xzX2lkIiwiZnVuY3Rpb24iLCJtYXN0ZXIiLCJzaG93QWRkU21hbGxEaWFsb2ciLCJBZGRfQnRuTmFtZSIsIkVkaXREbGdNb2RlIiwiY2xzaWQiLCJjbHNfbmFtZSIsIkVkaXRfZGxnIiwiYWRkRGF0YU9iaiIsIkRlbGV0ZU9iaiIsImNsYXNzX25hbWUiLCJvYmpfaWQiLCJBZnRlclByb2Nlc3NfRXZlbnQiLCJhZnRlclByb2Nlc3NfRXZlbnQiLCJvbnRhcCIsImdldEFwcCIsIml0ZW0iLCJvbkVudGVyQ2hhbmdlIiwib25DaGFuZ2UiLCJKU09OIiwiT2JqZWN0IiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsIm9uUGFuZWxDbGljayIsInJ1bkN1c3RvbUV2ZW50IiwiZGVsdGEiLCJjYW5jZWwiLCJ0b1doZXJlQmFzZTY0U3RyaW5nIiwic2VwIiwic3FsIiwiZmllbGQiLCJvcCIsIm1vZGVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFxbEJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFDQTtFQUNBQTtJQUNBQztFQUNBO0VBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsbUJBQ0EsMkJBRUE7RUFDQTtFQUNBQztJQUNBO0lBQ0E7SUFDQTtJQUNBQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztRQUNBQztVQUNBQztRQUNBO01BQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUo7TUFDQUs7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7UUFDQUQ7TUFDQTtNQUNBRTtNQUNBO01BQ0FDO01BQ0FDO1FBQ0FDO1FBQ0FD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QztRQUNBeEU7TUFDQSxTQUVBO0lBQ0E7RUFFQTtBQUNBO0FBQUEsMkIiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHN0eWxlPlxyXG4udi1oZWFkU3R5bGU6Zmlyc3QtY2hpbGR7XHJcblx0bWFyZ2luLXRvcDogMTVycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIC50eHRfdGl0bGV7XHJcbiAgZm9udC1zaXplOiAzNHJweDtcclxuICB0ZXh0LWFsaWduOiByaWdodDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgdmVydGljYWwtYWxpZ246IDI0cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdHdpZHRoOiA4NSU7ICAgIFxyXG5cdGhlaWdodDogNTJycHg7XG4gICAgbGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiA0cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0Zm9udC1zaXplOiAxMnJweDtcclxufVxyXG4uaW5wdXQtd3JhcHBlcntcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogNjUlOyAgICBcclxuXHRsaW5lLWhlaWdodDogMjJycHg7XG59XHJcbltudnVlXSB1bmktdmlldyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMCBzb2xpZCAjMDAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XHJcbi51bmktaW5wdXQge1xyXG5cdC8qIGJvcmRlcjogbm9uZTsgKi9cbn1cclxuLnVuaS1pY29ue1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgKi9cclxuXHR3aWR0aDogOCU7XG4gICAgZm9udC1mYW1pbHk6IHVuaWljb25zO1xuICAgIGZvbnQtc2l6ZTogNDBycHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgLyogd2lkdGg6IDQ4cnB4OyAqL1xuICAgIGhlaWdodDogNDhycHg7XG4gICAgbGluZS1oZWlnaHQ6IDQ4cnB4O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHZlcnRpY2FsLWFsaWduOiAxOHJweDtcbn1cclxuLnYtY29udGVudHtcclxuXHRoZWlnaHQ6IDk0NXJweDtcclxuXHRvdmVyZmxvdzogaGlkZTtcclxuXHQvKiBib3JkZXI6MC4xcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi52aWV3LWNvbnRlbnR7XHJcblx0bWFyZ2luLXRvcDogMTBycHg7XHJcbn1cbi5kdi1wYW5lbC1ia2NvbG9ye1xuICBiYWNrZ3JvdW5kLWNvbG9yOiNlZmVmZWY7XG59XHJcbi5kdi1wYW5lbHsgXG4gICAgYmFja2dyb3VuZC1jb2xvcjojZWZlZmVmO1xuICAgIHBhZGRpbmc6IDIwcnB4IDIwcnB4IDIwcnB4IDBweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4uZHYtbGlzdEh0bWwtUGFuZWwsXG4uZHYtcGFuZWwtaW5wdXR7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aWR0aDogOTElO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxyXG4uZHYtcGFuZWwtYnV0aWNvbntcbiAgbGluZS1oZWlnaHQ6IDBycHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIC8qIGZvbnQtc2l6ZTogMTdweDsgKi9cbiAgcGFkZGluZzogMCAzMHJweDtcbn1cbi5kdi1wYW5lbC1idXRpY29uIC5idG4tcGFkZGluZ3tcbiAgICBwYWRkaW5nOiAwcnB4IDIwcnB4O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxyXG4uZHYtcGFuZWwtYnV0aWNvbiBhIGkgeyBcclxuXHRmb250LXNpemU6IDM4cnB4O1xufVxyXG4uZHYtcGFuZWwtYnV0aWNvbiBidXR0b257XHJcblx0bWluLXdpZHRoOiAxMjBycHg7XG4gICAgZm9udC1zaXplOiAzMnJweDtcclxuXHRwYWRkaW5nOiAyMHJweCAyMHJweCAwcnB4IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxO1xyXG5cdGJhY2tncm91bmQ6ICM0RDZBRjQ7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGNvbG9yOiAjZmZmO1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGJvcmRlci1yYWRpdXM6IDhycHg7XG59XHJcbi5kdi1wYW5lbCAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5kdi1wYW5lbCBpbnB1dHtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRib3JkZXI6IDJycHggc29saWQgI2Q1ZDVkNTtcclxuXHR3aWR0aDogNjglOyBcclxuXHRoZWlnaHQ6IDUycnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHJweDtcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDE0cnB4ICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0cGFkZGluZzogNnJweCA4cnB4IDhycHg7XHJcblx0Zm9udC1zaXplOiAzMnJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiAwcnB4O1xyXG59XHJcbi5kdi1wYW5lbCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0Zm9udC1zaXplOiAxMHJweDtcclxufVxyXG4uZHYtcGFuZWwgLmZvcm0taXRlbS1zcGFue1xyXG5cdHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcclxuICAgIGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcblx0d29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHdpZHRoOiBjYWxjKDEwMCUgLSAxMDBweCk7XHJcbn1cclxuLmR2LXBhbmVsLWJ1dHRvbntcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cclxuLmR2LXBhbmVsLWJ1dHRvbiBjaGVja2JveC1ncm91cCB7IFxyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cclxuLmR2LXBhbmVsLWJ1dHRvbiB1bmktY2hlY2tib3ggLnVuaS1jaGVja2JveC1pbnB1dHtcclxuXHR3aWR0aDogMzRycHg7XHJcblx0aGVpZ2h0OiAzNHJweDtcclxufVxyXG4uZHYtcGFuZWwtYnV0dG9uIGEgaSB7IFxyXG5cdGZvbnQtc2l6ZTogMzZycHg7XG59XHJcbi5kdi1wYW5lbC1idXR0b24gYnV0dG9uIHsgXG5cdGhlaWdodDogNTBycHg7XG5cdGZvbnQtc2l6ZTogMjZycHg7XG5cdHBhZGRpbmc6IDAgMjRycHg7XHJcbn1cclxuLnZpZXctZmxvb3J7XHJcblx0cGFkZGluZzogMCAyMHJweDtcclxuXHQvKiBib3JkZXI6MXB4IHNvbGlkIHJlZDsgKi9cclxufVxyXG5idXR0b24uYnRuX3JlZnJlc2gge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDI1cnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0YmFja2dyb3VuZDogIzRENkFGNDtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX2NhbmNlbCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogMjVycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRiYWNrZ3JvdW5kOiAjZmZmO1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRjb2xvcjogIzAwMDtcclxuICAgIGZvbnQtc2l6ZTogMzhycHg7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdG1hcmdpbi1yaWdodDogMjBycHg7XHJcbn1cclxuXG4uYmstYWN0aXZle1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZGQ0IyO1xufVxyXG4udW5pLXBhZGRpbmctd3JhcHtcclxuICBtYXJnaW4tdG9wOiAyMHJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk4REFFQTtcbiAgd2lkdGg6IDEwNHJweDtcbiAgaGVpZ2h0OiA4MHJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA1NHJweDtcbiAgcGFkZGluZzogMjRycHggMCAwIDA7XG4gIGZsb2F0OiByaWdodDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XHJcbi51bmktcGFkZGluZy13cmFwIGF7XG4gIGZvbnQtc2l6ZTogNDBycHg7XG59XHJcbiNkdl9zZWxlY3R7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHdpZHRoOiA2NiU7IFxyXG5cdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdC8qIHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7ICovXHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiAwcnB4O1xyXG5cdHZlcnRpY2FsLWFsaWduOiAyMHJweDtcclxufVxyXG4jZHZfc2VsZWN0IC51bmktc2VsZWN0e1xyXG5cdGJvcmRlcjogMnJweCBzb2xpZCAjY2NjO1xyXG5cdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcdFxyXG59XHJcbiNkdl9zZWxlY3QgLnVuaS1zZWxlY3RfX2lucHV0LXRleHR7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHRcclxufVxyXG4uaW5wdXQtZGlzYWJsZWR7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMyAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4uZHZfcGFuZWxfY29uZGVudHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6I0Q2RkNCMjtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTJycHg7XHJcbn1cclxuLmR2X3BhbmVsX2F0dHJ7XHJcblx0bWFyZ2luLWJvdHRvbTogMTBycHg7XHJcbn1cclxuLmR2X3BhbmVsX2F0dHIgLmR2X2lubGluZXtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbi5kdl9wYW5lbF9hdHRyIGl7XHJcblx0dmVydGljYWwtYWxpZ246IDI1cHg7XHJcblx0bWFyZ2luOiAwIDEwcHg7XHJcbn1cclxuLmR2X3BhbmVsX2F0dHIgLmR2X2lubGluZSBwe1xyXG5cdGJhY2tncm91bmQ6ICM0RDZBRjQ7XHJcblx0Y29sb3I6ICNmZmY7XHJcblx0cGFkZGluZzogMTBycHggMTVycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG59XHJcbi5zY3JvbGwtWSB7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi5zY3JvbGwtdmlld19IIHtcclxuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG5cdHdpZHRoOiAxMDAlO1xyXG59XHJcblxuLmR2X3BhbmVsX2NvbnRlbnR7XG4gICAgbWFyZ2luOiAwIDEwcHg7XG59XHJcbi5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRye1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbn1cclxuLmR2X3BhbmVsX2NvbnRlbnQgLmR2X3BhbmVsX2F0dHIgaXtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogMjJweDtcbiAgICBtYXJnaW46IDAgMTBweDtcbn1cbi5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5jaXJjZWxfbm9kZXt9XG4vKiDmmK/oj7HlvaLnmoQgKi9cbi5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9kaWFtb25kX25vZGUge31cbi5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9ib3hfbm9kZXtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XHJcbi5kdl9wYW5lbF9jb250ZW50IC5kdl9wYW5lbF9hdHRyIC5kdl9ib3hfbm9kZSBwe1xuICAgIGJhY2tncm91bmQ6ICM0RDZBRjQ7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgcGFkZGluZzogM3B4IDdweDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjwvc3R5bGU+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuXHQuZGVtby11bmktcm93IHtcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblx0Ojp2LWRlZXAgLnVuaS1yb3cge1xuXHRcdG1hcmdpbi1ib3R0b206IDBweDtcblx0fVxyXG5cdC52aWV3LXRhYnBhZ2UgOjp2LWRlZXAgLnVuaS1yb3cgIHtcblx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XG5cdH1cblx0LmRlbW8tdW5pLWNvbCB7XG5cdFx0aGVpZ2h0OiAzNnB4O1xuXHRcdGJvcmRlci1yYWRpdXM6IDVweDtcblx0fVxyXG5cdC5kZW1vLXVuaS1yb3cgLnVuaS1pbnB1dHtcclxuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XHJcblx0fVxuPC9zdHlsZT5cblxyXG48dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcblx0XHQ8IS0tIDx2aWV3IGNsYXNzPVwiZHZfcGFuZWxfY29uZGVudFwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImR2X3BhbmVsX2F0dHJcIj5cclxuXHRcdFx0XHQ8bGFiZWw+Tm/vvJo8L2xhYmVsPlxyXG5cdFx0XHRcdDxzcGFuPlRBMjQwMTI5LTAwMDAxPC9zcGFuPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiZHZfcGFuZWxfYXR0clwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiZHZfaW5saW5lXCI+XHJcblx0XHRcdFx0XHQ8cD7mr5vmlpnnur/ovrk8L3A+XHJcblx0XHRcdFx0XHQ8bGFiZWw+TDAwMi0xPC9sYWJlbD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PGkgY2xhc3M9XCJtb2JveC1ub3JtYWwtcmlnaHRcIj48L2k+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbmxpbmVcIj5cclxuXHRcdFx0XHRcdDxwPuavm+aWmee6v+i+uTwvcD5cclxuXHRcdFx0XHRcdDxsYWJlbD5MMDAzLTM8L2xhYmVsPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PiAtLT5cclxuXHRcdFxyXG5cdCAgPHZpZXcgY2xhc3M9XCJ2LWNvbnRlbnRcIj5cclxuXHRcdDwhLS0g6KGo5aS05qC35byPIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWhlYWRTdHlsZVwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1wiIHYtaWY9XCJpc0ZpbHRlcj09dHJ1ZVwiPlxyXG5cdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHQ8IS0tIOS4i+aLieahhi3ljZXpgIkgaXRlbS51c2VEaWN0P2l0ZW0uZGljdDppdGVtLnNlbGVjdGlvbnMtLT5cclxuXHRcdFx0PHVuaS1kYXRhLXNlbGVjdCBpZD1cImR2X3NlbGVjdFwiIHYtaWY9XCJpdGVtLm5hbWU9PSdTZWxlY3QnXCJcclxuXHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHQ6bG9jYWxkYXRhPVwiaXRlbS5kaWN0XCJcclxuXHRcdFx0XHRAY2hhbmdlPVwib25DaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdFx0PjwvdW5pLWRhdGEtc2VsZWN0PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiaXRlbS5uYW1lPT0nSW5wdXQnIHx8IGl0ZW0ubmFtZT09J0lucHV0TnVtYmVyJ1wiPlxyXG5cdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcucHJlZml4XCIgXHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnByZWZpeF1cIlxyXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOidudW1iZXInXCIgXHJcblx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5zZXR0aW5nLnByZWZpeCAmJiBpdGVtLnNldHRpbmcuc3VmZml4Pyc3OCUnOml0ZW0uc2V0dGluZy5wcmVmaXggfHwgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzTWF0ZXJpYVwiXHJcblx0XHRcdFx0XHRAZm9jdXM9XCJvbnRhcChpdGVtKVwiIFxyXG5cdFx0XHRcdFx0QGtleXVwLmVudGVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0XHRAYmx1cj1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdC8+XHJcblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXHJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHQgICAgPC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0XHJcblx0XHQ8c2Nyb2xsLXZpZXcgOnNjcm9sbC10b3A9XCJzY3JvbGxUb3BcIiA6c2Nyb2xsLXk9XCJ0cnVlXCIgY2xhc3M9XCJzY3JvbGwtWVwiXHJcblx0XHQgIEBzY3JvbGx0b2xvd2VyPVwic2Nyb2xsdG9sb3dlclwiIEBzY3JvbGw9XCJzY3JvbGxcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWNvbnRlbnRcIiBpZD1cInRhYnBhbmVsXCI+XHJcblx0XHRcdCAgPHZpZXcgY2xhc3M9XCJkdi1wYW5lbCBkdi1wYW5lbC1ia2NvbG9yXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDFTdHlsZURlZkxpc3RcIiBcclxuXHRcdFx0XHRAY2xpY2s9XCJvblBhbmVsQ2xpY2soaWkpXCJcclxuXHRcdFx0XHQ6aWQ9XCIncGFuZWwnK3N0eWxlLmZvcm0uaHRtbG9iaklkXCJcclxuXHRcdFx0XHQ6Y2xhc3M9XCJhY3RpdmVsaXN0W2lpXS5hY3RpdmU9PXRydWU/J2JrLWFjdGl2ZSc6JydcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCIgdi1pZj1cInBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlXCI+XHJcblx0XHRcdFx0ICA8Y2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJzdHlsZS5TZWxCdXRfQ2hlY2tlZFwiIDpjaGVja2VkPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiAvPlxyXG5cdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHQgIDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PCEtLSBIVE1M6aG16Z2i57G75Z6L5pi+56S6IC0tPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1saXN0SHRtbC1QYW5lbFwiIHYtaWY9XCJMaXN0SHRtbF9QYW5lbFwiIHYtaHRtbD1cIkxpc3RIdG1sX1BhbmVsW2lpXVwiXHJcblx0XHRcdFx0ICA6c3R5bGU9XCJwYXJhbS5MaXN0UGFnZS5DaGVja0JveD09dHJ1ZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo4NSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT1mYWxzZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo5MSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlICYmIHBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PWZhbHNlPyd3aWR0aDo4OCU7Jzond2lkdGg6MTAwJTsnXCI+XHJcblx0XHRcdFx0XHQ8IS0tIDxkaXYgY2xhc3M9XCJkdl9wYW5lbF9jb250ZW50XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdl9wYW5lbF9hdHRyXCI+XHJcblx0XHRcdFx0XHRcdCAgPGxhYmVsPk5v77yaPC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0ICA8c3Bhbj5UQTI0MDEyOS0wMDAwMTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdl9wYW5lbF9hdHRyXCI+XHJcblx0XHRcdFx0XHRcdCAgPGRpdiBjbGFzcz1cImR2X2JveF9ub2RlXCI+XHJcblx0XHRcdFx0XHRcdFx0PHA+5q+b5paZ57q/6L65PC9wPlxyXG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5MMDAyLTE8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHQgIDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQgIDxpIGNsYXNzPVwibW9ib3gtbm9ybWFsLXJpZ2h0XCI+PC9pPlxyXG5cdFx0XHRcdFx0XHQgIDxkaXYgY2xhc3M9XCJkdl9ib3hfbm9kZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxwPuavm+aWmee6v+i+uTwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8bGFiZWw+TDAwMy0zPC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0ICA8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PCEtLSDoh6rlrprkuYnooajljZXnsbvlnovmmL7npLogLS0+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCIgdi1pZj1cIiFMaXN0SHRtbF9QYW5lbFwiXHJcblx0XHRcdFx0ICA6c3R5bGU9XCJwYXJhbS5MaXN0UGFnZS5DaGVja0JveD09dHJ1ZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo4NSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT1mYWxzZSAmJiBwYXJhbS5MaXN0UGFnZS5DbGlja19WaWV3PT10cnVlPyd3aWR0aDo5MSU7JzpcclxuXHRcdFx0XHQgIHBhcmFtLkxpc3RQYWdlLkNoZWNrQm94PT10cnVlICYmIHBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PWZhbHNlPyd3aWR0aDo4OCU7Jzond2lkdGg6MTAwJTsnXCI+XHJcblx0XHRcdFx0ICA8ZGl2IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHN0eWxlLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHRcdDwhLS0g5pmu6YCa5biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0PHZpZXcgdi1pZj1cIml0ZW0ubmFtZSE9J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiIHYtaWY9XCJpdGVtLmRpc2FibGVkXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwhLS0g5paH5pys5qGGL+aVsOWtl+ahhiAtLT5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiIHYtaWY9XCIoaXRlbS5uYW1lPT0nSW5wdXQnIHx8IGl0ZW0ubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWl0ZW0uZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnByZWZpeFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaWNvblwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdEBjaGFuZ2U9XCJvbkNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0OmZvY3VzPVwiZm9jdXNNYXRlcmlhXCJcclxuXHRcdFx0XHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGl0ZW0pXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRAYmx1cj1cIm9uZXZlbnQoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvbkNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwhLS0g5LiL5ouJ5qGGLeWNlemAiSBpdGVtLnVzZURpY3Q/aXRlbS5kaWN0Oml0ZW0uc2VsZWN0aW9ucy0tPlxyXG5cdFx0XHRcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cIml0ZW0ubmFtZT09J1NlbGVjdCcgJiYgIWl0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHQ6bG9jYWxkYXRhPVwiaXRlbS5kaWN0XCJcclxuXHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25DaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0PjwvdW5pLWRhdGEtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHQ8IS0tIOWkmuihjOaWh+acrCAtLT5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J1RleHRhcmVhJyAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cInVuaS1pbnB1dFwiIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHQgIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiIFxyXG5cdFx0XHRcdFx0XHRcdCAgOnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0ICBAYmx1cj1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIFxyXG5cdFx0XHRcdFx0XHRcdCAgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiBcclxuXHRcdFx0XHRcdFx0XHQgIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0PjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PCEtLSDlpI3pgInmoYYgLS0+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgdi1pZj1cIml0ZW0ubmFtZT09J0NoZWNrYm94J1wiXHJcblx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShpdGVtKVwiIFxyXG5cdFx0XHRcdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJpdGVtLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIj5cclxuXHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiaXRlbS52YWx1ZVwiIDpjaGVja2VkPVwiaXRlbS52YWx1ZVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0Pnt7aXRlbS5sYWJlbH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdDwhLS0gU3dpdGNo5byA5YWzIC0tPlxyXG5cdFx0XHRcdFx0XHQ8c3dpdGNoIHYtaWY9XCJpdGVtLm5hbWU9PSdTd2l0Y2gnXCIgOmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0di1tb2RlbD1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGl0ZW0pXCIgXHJcblx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieydtYXJnaW4tbGVmdCc6JzEwcnB4J31cIi8+XHJcblx0XHRcdFx0XHRcdDwhLS0g5pel5pyf5pe26Ze0IC0tPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiKGl0ZW0ubmFtZT09J1RpbWVQaWNrZXInIHx8IGl0ZW0ubmFtZT09J0RhdGVQaWNrZXInKSAmJiAhaXRlbS5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiBjbGFzcz1cImRhdGVfaXB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHRcdFx0ICA6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHQgIDp2YWx1ZT1cIml0ZW0udmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHQgIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoaXRlbSlcIiBcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0ICAgPHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2l0ZW0udmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PCEtLSDmoIXmoLzluIPlsYAgLS0+XHJcblx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdDx1bmktY29sIHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdDpzcGFuPVwiaXRlbS5zZXR0aW5nLnNwYW5MaXN0P2l0ZW0uc2V0dGluZy5zcGFuTGlzdFtrZXldOjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiPlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdl9pbnB1dFwiIHYtaWY9XCIoY29scy5uYW1lPT0nSW5wdXQnIHx8IGNvbHMubmFtZT09J0lucHV0TnVtYmVyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5wcmVmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25DaGFuZ2UoY29scylcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWlucHV0XCIgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dCc/J3RleHQnOmNvbHMubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiY29scy52YWx1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6Y29scy5zZXR0aW5nLnByZWZpeCAmJiBjb2xzLnNldHRpbmcuc3VmZml4Pyc3OCUnOmNvbHMuc2V0dGluZy5wcmVmaXggfHwgY29scy5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGNvbHMpXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGJsdXI9XCJvbmV2ZW50KGNvbHMpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgdi1pZj1cImNvbHMuc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiW2NvbHMuc2V0dGluZy5zdWZmaXhdXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvbkNoYW5nZShjb2xzKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGNvbHMudXNlRGljdD9jb2xzLmRpY3Q6Y29scy5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cImNvbHMubmFtZT09J1NlbGVjdCcgJiYgIWNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6bG9jYWxkYXRhPVwiY29scy5kaWN0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uQ2hhbmdlKGNvbHMpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5aSa6KGM5paH5pysIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cImNvbHMubmFtZT09J1RleHRhcmVhJyAmJiAhY29scy5kaXNhYmxlZFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJ1bmktaW5wdXRcIiA6dmFsdWU9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgQGJsdXI9XCJvbk1vZGVsVmFsdWUoY29scylcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBzdHlsZT1cImhlaWdodDo2MHB4O1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIDpzdHlsZT1cInsnd2lkdGgnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5aSN6YCJ5qGGIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiB2LWlmPVwiY29scy5uYW1lPT0nQ2hlY2tib3gnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRAY2hhbmdlPVwib25Nb2RlbFZhbHVlKGNvbHMpXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpkYXRhLWlzY2hlY2s9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOicxMHJweCd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiY29scy52YWx1ZVwiIDpjaGVja2VkPVwiY29scy52YWx1ZVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2NvbHMubGFiZWx9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIFN3aXRjaOW8gOWFsyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDxzd2l0Y2ggdi1pZj1cImNvbHMubmFtZT09J1N3aXRjaCdcIiA6Y2xhc3M9XCJjb2xzLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0di1tb2RlbD1cImNvbHMudmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0QGNoYW5nZT1cIm9uTW9kZWxWYWx1ZShjb2xzKVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzonMTBycHgnfVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5pel5pyf5pe26Ze0IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIihjb2xzLm5hbWU9PSdUaW1lUGlja2VyJyB8fCBjb2xzLm5hbWU9PSdEYXRlUGlja2VyJykgJiYgIWNvbHMuZGlzYWJsZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHBpY2tlciBtb2RlPVwiZGF0ZVwiIGNsYXNzPVwiZGF0ZV9pcHV0XCIgOmNsYXNzPVwiY29scy5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgOnZhbHVlPVwiY29scy52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIEBjaGFuZ2U9XCJvbk1vZGVsVmFsdWUoY29scylcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICA8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7Y29scy52YWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHQgICA8L2Rpdj5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCIgdi1pZj1cInBhcmFtLkxpc3RQYWdlLkNsaWNrX1ZpZXc9PXRydWVcIiA+XHJcblx0XHRcdFx0ICA8YSBAY2xpY2s9XCJvblZpZXdQYWdlQ2xpY2soc3R5bGUpXCI+PGkgY2xhc3M9XCJtb2JveC1ub3JtYWwtcmlnaHQtYXJyb3dcIiAvPjwvYT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0aWNvblwiIHYtaWY9XCJwYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9CdXR0b25cIiA+XHJcblx0XHRcdFx0ICA8dmlldyBjbGFzcz1cImJ0bi1wYWRkaW5nXCIgdi1mb3I9XCIoYnRuLGtleSkgaW4gcGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fQnV0dG9uXCI+XHJcblx0XHRcdFx0XHQ8YSBAY2xpY2s9XCJvbkJ0bkNsaWNrKGJ0bixzdHlsZSlcIiA6dGl0bGU9XCJidG4uU2hvd05hbWVcIiB2LWlmPVwiYnRuLlN0eWxlPT0naW1nJ1wiPlxyXG5cdFx0XHRcdFx0XHQ8aSA6Y2xhc3M9XCJidG4uSW1nXCIgLz5cclxuXHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJvbkJ0bkNsaWNrKGJ0bixzdHlsZSlcIiBjbGFzcz1cImJ0bi1wYWRkaW5nXCIgdi1lbHNlLWlmPVwiYnRuLlN0eWxlPT0ndGV4dCdcIj57e2J0bi5TaG93TmFtZX19PC9idXR0b24+XHJcblx0XHRcdFx0ICA8L3ZpZXc+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdCAgPC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3Njcm9sbC12aWV3PlxyXG5cdCAgPC92aWV3PlxyXG5cdFx0XHJcblx0ICA8dmlldyBjbGFzcz1cInZpZXctZmxvb3JcIj5cclxuXHQgIFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cImNhbmNlbFwiIGNsYXNzPVwiYnRuX2NhbmNlbFwiIFxyXG5cdFx0ICA6c3R5bGU9XCJ7J3dpZHRoJzpwYXJhbS5MaXN0UGFnZS5QYWdlX0J1dHRvbi5sZW5ndGg+MD8nMzkuNSUnOic0OC41JSd9XCI+5YWz6ZetPC9idXR0b24+XHJcblx0ICBcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJSZWZyZXNoXCIgY2xhc3M9XCJidG5fcmVmcmVzaFwiIFxyXG5cdFx0ICA6c3R5bGU9XCJ7J3dpZHRoJzpwYXJhbS5MaXN0UGFnZS5QYWdlX0J1dHRvbi5sZW5ndGg+MD8nMzkuNSUnOic0OC41JSd9XCI+5Yi35pawPC9idXR0b24+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1wYWRkaW5nLXdyYXBcIiB2LWlmPVwicGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24ubGVuZ3RoPjBcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktYnRuLXZcIj5cclxuXHRcdFx0XHQ8YSBAdGFwPVwiYWN0aW9uU2hlZXRUYXBcIj48SWNvbiBjbGFzcz1cIm1vYm94LW5vcm1hbC1tb3JlXCIvPjwvYT5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdCAgPC92aWV3PlxuICAgIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbW9kdWxlczp7XHJcblx0QmFzZTY0LFxyXG4gIH0sXHJcbiAgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwKGUpIHtcclxuIC8vICBcdGNvbnNvbGUubG9nKGUpO1xyXG5cdC8vIGUudGV4dD1cIlxcdWU5MjRcIjtcclxuICBcdC8vIGNvbnNvbGUubG9nKGUuZm9udFNpemUpO1xyXG5cdGlmKHRoaXMuaXNGaWx0ZXIpXHJcblx0ICAgIHRoaXMuaXNGaWx0ZXI9ZmFsc2U7XHJcblx0ZWxzZVxyXG5cdCAgICB0aGlzLmlzRmlsdGVyPXRydWU7XHJcbiAgfSxcclxuICBvbkJhY2tQcmVzcyhlKXtcblx0Ly8gY29uc29sZS5sb2coXCLnm5HlkKzov5Tlm57mjInpkq7kuovku7ZcIixlKTtcclxuXHR2YXIgZXZlbnRDaGFubmVsID0gdGhpcy4kc2NvcGUuZXZlbnRDaGFubmVsO1xyXG5cdC8vIGNvbnN0IGV2ZW50Q2hhbm5lbCA9IHRoaXMuZ2V0T3BlbmVyRXZlbnRDaGFubmVsKCk7XHJcblx0ZXZlbnRDaGFubmVsLmVtaXQoJ3ZpZXdfMzIwMScsXCJcIik7XHJcblx0Ly8gdW5pLm5hdmlnYXRlQmFjayh7XHJcblx0Ly8gXHRkZWx0YToxICwvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHQvLyB9KTtcblx0Ly8gcmV0dXJuIHRydWU7XG4gIH0sXHRcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+aWsOWinicsXHJcbiAgICAgIGlzRmlsdGVyOnRydWUsXG4gICAgICBwYXJhbToge30sXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBzdHlsZWRlZjp7fSxcclxuXHQgIGhlYWRfc3R5bGVkZWY6e1xyXG5cdFx0Zm9ybTp7XHJcblx0XHRcdGl0ZW1zOltdXHJcblx0XHR9XHJcblx0ICB9LFxuICAgICAgZGV0YWlsMV9zdHlsZWRlZjp7fSxcbiAgICAgIGRldGFpbDFTdHlsZURlZkxpc3Q6W10sXG4gICAgICBkZXRhaWwyX3N0eWxlZGVmOnt9LFxuICAgICAgZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSxcclxuXHQgIGl0ZW1zOiBbXSxcclxuICAgICAgYWN0aXZlX2lkOicnLFxyXG5cdCAgYWN0aXZlbGlzdDpbXSxcbiAgICAgIHdoZXJlOicnLFxuICAgICAgd2hlcmVzOicnLFxuICAgICAgb3JkZXJieTonJyxcbiAgICAgIHF1ZXJ5X2lkOicnLFxuICAgICAgcGFnZWluZGV4OjEsXG4gICAgICBwYWdlX3NpemU6MTAsXG4gICAgICBwYWdlX2NvdW50OjAsXHJcblx0ICBzY3JvbGxUb3A6IDAsXHJcblx0ICBvbGQ6IHtcclxuXHQgIFx0c2Nyb2xsVG9wOiAwXHJcblx0ICB9LFxyXG5cdCAgaXNTY3JvbGw6dHJ1ZSxcclxuXHQgIC8v6I635Y+W5pWw5o2u57G755qESFRNTOmhtemdolxyXG5cdCAgTGlzdEh0bWxfUGFuZWw6XCJcIixcclxuXHQgIExpc3RQYWdlSHRtbF9TaG93OiB7XHJcblx0ICBcdG5hbWU6IFwiXCIsXHJcblx0ICBcdGV2ZW50OiB7XHJcblx0ICBcdFx0aWQ6IFwiXCIsXHJcblx0ICBcdFx0bmFtZTogXCJcIlxyXG5cdCAgXHR9XHJcblx0ICB9LFxuICAgIH07XG4gIH0sXHJcbiAgYXN5bmMgb25Mb2FkKG9wdGlvbnMpIHtcclxuXHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuXHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxyXG5cdHRoaXMuJGRhdGEudGl0bGUgPSBvcHRpb25zLnRpdGxlbmFtZTtcclxuXHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHR0aGlzLmlzRmlsdGVyPXRydWU7XHJcblx0aWYodGhpcy5wYXJhbS5TaG93RmlsdGVyKVxyXG5cdCAgdGhpcy5pc0ZpbHRlcj1mYWxzZTtcclxuXHQvL+iOt+WPluaVsOaNruexu+eahOiHquWumuS5ieihqOWNleWPguaVsFxyXG5cdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsdGhpcy5wYXJhbS5RdWVyeV9QYW5lbC5pZCk7XHJcblx0aWYodGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZj8udWlfdHlwZT09XCJIVE1M6aG16Z2iXCIpe1xyXG5cdFx0Ly8gSFRNTOmhtemdolxyXG5cdFx0Ly/ojrflj5bmlbDmja7nsbvnmoRIVE1M6aG16Z2iXHJcblx0XHRhd2FpdCB0aGlzLkh0bWxfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWYuaWQpO1xyXG5cdH1lbHNle1xyXG5cdFx0YXdhaXQgdGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKHRoaXMucGFyYW0uRGF0YUNscy5pZCx0aGlzLnBhcmFtLkxpc3RQYWdlLkxpc3RJdGVtX1VJRGVmLmlkKTtcclxuXHR9XHJcblx0dGhpcy5vcmRlcmJ5ID0gdGhpcy5wYXJhbS5PcmRlcj90aGlzLnBhcmFtLk9yZGVyOidUX0NSRUFURSBEZXNjJztcclxuXHRpZih0aGlzLnBhcmFtLlF1ZXJ5X0V2ZW50KXtcclxuXHQgICAgYXdhaXQgdGhpcy5vblNlYXJDaGFuZ2UodGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uUXVlcnlfRXZlbnQuaWQpO1xyXG5cdH0gZWxzZXtcclxuXHQgIHRoaXMud2hlcmVzID0gdGhpcy5wYXJhbS5Db25kaXRpb247XHJcblx0ICB0aGlzLnBhZ2VpbmRleCA9IDE7XHJcblx0ICB0aGlzLnBhZ2Vfc2l6ZSA9IDM7XHJcblx0ICB0aGlzLnF1ZXJ5X2lkID0gXCJcIjtcclxuXHQgIGF3YWl0IHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0fVxyXG5cdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0Ly8gdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgXHJcbiAgfSxcdFxuICBtZXRob2RzOiB7XHJcblx0Ly/mu5rliqjliLDlupXpg6jlkI7mh5LliqDovb3mlbDmja5cclxuXHRhc3luYyBzY3JvbGx0b2xvd2VyKGUpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGUpXHJcblx0XHRpZih0aGlzLmlzU2Nyb2xsKXsgLy/liKTmlq3liLfmlrDkuIDmrKHlkI7kuI3kvJrmjIHnu63liLfmlrBcclxuXHRcdFx0aWYodGhpcy5wYWdlX2NvdW50PT10aGlzLnBhZ2VpbmRleCl7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucGFnZWluZGV4ICs9IDE7XHJcblx0XHRcdGlmKHRoaXMud2hlcmUgfHwgdGhpcy5wYWdlX2NvdW50PT0xKSB7XHJcblx0XHRcdCAgdGhpcy5xdWVyeV9pZCA9IFwiXCI7XHJcblx0XHRcdCAgdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGF3YWl0IHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRzY3JvbGw6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGUuZGV0YWlsLnNjcm9sbFRvcClcclxuXHRcdHRoaXMub2xkLnNjcm9sbFRvcCA9IGUuZGV0YWlsLnNjcm9sbFRvcFxyXG5cdH0sXHJcblx0YXN5bmMgSGVhZF9VSVN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIHRoaXMuZm9ybSA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVsZS51c2VEaWN0KTtcclxuXHRcdFx0XHQgICAgaWYoZWxlLnVzZURpY3Q9PXRydWUpeyAvL+WIpOaWrXVzZURpY3TmmK/lkKbkvb/nlKjlrZflhbhcclxuXHRcdFx0XHQgICAgICAgIGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCxpbmRleCwnbWFzdCcpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMVwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdCAgICBcclxuXHR9LFxyXG5cdGFzeW5jIERldGFpbDFfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmLlNlbEJ1dF9DaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vIHZhciBhYSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0ICAgIFxyXG5cdH0sXHJcblx0YXN5bmMgSHRtbF9VSXN0eWxlR2V0SW5mbyhjbGFzc19pZCwgc3R5bGVfaWQpIHsgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdGNsYXNzX2lkOiBjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6IHN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsIGRhdGFJbmZvKS50aGVuKHJldCA9PiB7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZiA9IFwiXCI7XHJcblx0XHRcdFx0aWYgKHJldC5yZXN1bHQuc3R5bGVfZGVmKSB7XHJcblx0XHRcdFx0XHQvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHRcdHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLCBcIlwiKTtcclxuXHRcdFx0XHRcdC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0XHRpZiAoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdFxyXG5cdFx0XHRcdFx0XHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cgPSByZXQucmVzdWx0LnN0eWxlX2RlZiA/IEpTT04ucGFyc2Uoc3R5bGVkZWYpIDoge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMTBcIixcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IHJldC5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMTAuMVwiLFxyXG5cdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFxyXG5cdH0sXHJcblx0YXN5bmMgRGljdEdldEluZm8oZGljdCxpbmRleCx0eXBlKXsgLy9Nb2JveDPlvpfliLDlvpfliLDlrZflhbjkv6Hmga/lrZflhbjpobnliJfooahcclxuXHRcdHRoaXMuZGF0YT1bXTtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm8gPXtcclxuXHRcdFx0ZGljdF9pZDogZGljdC5pZCxcclxuXHRcdFx0ZGljdF9uYW1lOiBkaWN0Lm5hbWVcclxuXHRcdH07XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGljdEdldEluZm8nLGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKT0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdGlmKHR5cGU9PSdtYXN0Jyl7XHJcblx0XHRcdFx0XHR2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHRcdHZhciBpdGVtTmFtZT0nJztcclxuXHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LmRpY3RfaXRlbV9saXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdCAgICBpZihpdGVtLmlzX2RlZmF1bHQ9PScxJylcclxuXHRcdFx0XHRcdCAgICAgICAgaXRlbU5hbWUgPSBpdGVtLm5hbWU7XHJcblx0XHRcdFx0XHQgICAgbGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdCAgICAgICAgdGV4dDppdGVtLnZhbHVlLFxyXG5cdFx0XHRcdFx0ICAgICAgICB2YWx1ZTppdGVtLm5hbWUsXHJcblx0XHRcdFx0XHQgICAgfSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdC8v5pyJ6buY6K6k5YC877yM5pi+56S66buY6K6k5YC8XHJcblx0XHRcdFx0XHRpZihpdGVtTmFtZSl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWU9aXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdD1saXN0O1xyXG5cdFx0XHRcdFx0dmFyIGhlYWRfc3R5bGVkZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCR0aGlzLmhlYWRfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWY9W107XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmID0gaGVhZF9zdHlsZWRlZjtcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbaW5kZXhdLmF0dHJfbGlzdFtrZXldLmRpY3RpdGVtPXN1Y2Nlc3MucmVzdWx0O1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy4kc3RvcmUuY29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLCAkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMy4xXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdFxyXG5cdC8vIOaJp+ihjOafpeivouS6i+S7tlxyXG5cdGFzeW5jIG9uU2VhckNoYW5nZShjbHNpZCxldmVudGlkKSB7XHJcblx0IHRyeSB7XHJcblx0ICAgIGlmIChldmVudC5pZCkge1xyXG5cdCBcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgXHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICBlZF90eXBlOiAwLFxyXG4gICAgICAgICAgICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgICBjbGFzc19pZDogY2xzaWQsXHJcblx0XHRcdGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdCAgICAgIH07XHJcblx0IFx0ICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdCBcdCAgXHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdCBcdCAgXHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHQgXHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7IFxyXG5cdCBcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0IFx0XHRcdCAgICB2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0IFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK3Jlc3VsdC5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdCBcdFx0XHR9ZWxzZXtcclxuXHQgXHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHQgXHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcdFx0XHJcblx0IFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0IFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdCBcdFx0XHRcdFx0XHRpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3F1ZXJ5X2NvbmRpdGlvblwiKXsgXHJcblx0IFx0XHRcdFx0XHRcdCAgICB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdCBcdFx0XHRcdFx0XHQgICAgJHRoaXMud2hlcmVzID0gdmFsdWUuY29uZGl0aW9uO1xyXG5cdCBcdFx0XHRcdFx0XHQgICAgJHRoaXMub3JkZXJieSA9IHZhbHVlLm9yZGVyP3ZhbHVlLm9yZGVyOiR0aGlzLm9yZGVyYnk7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMucGFnZWluZGV4ID0gMTtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5xdWVyeV9pZCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHQgXHRcdFx0XHRcdFx0ICAgICR0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdCBcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHQgXHRcdFx0XHR9ZWxzZXtcclxuXHQgXHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHQgXHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHQgXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdFx0XHRcdFx0fVxyXG5cdCBcdFx0XHRcdH1cclxuXHQgXHRcdFx0fVxyXG5cdCBcdCAgXHRcdFxyXG5cdCBcdCAgXHR9ZWxzZXtcclxuXHQgXHQgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdCAgXHR9XHJcblx0IFx0ICB9KS5jYXRjaChleD0+e1xyXG5cdCBcdCAgXHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0IFx0ICBcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0ICB9KTtcclxuXHQgICAgIH1cclxuXHQgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgIHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHQgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMlwiLGNvbnRlbnQ6XCLmiafooYzigJzmn6Xor6Lkuovku7bigJ3kuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcclxuXHQgfVxyXG5cdH0sXHJcblx0Ly/mn6Xor6LmlbDmja7nsbvmlbDmja7kv6Hmga9cclxuXHRhc3luYyBsb2FkRGF0YUdldExpc3QoKXsgICBcclxuXHQgIHRyeXtcclxuXHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXHJcblx0XHRcdG1hc2s6dHJ1ZVxyXG5cdFx0fSk7XHJcblx0ICAgIC8v5p2h5Lu25p+l6K+iXHJcblx0ICAgIHZhciBjb25kaXRpb24gPSB0aGlzLndoZXJlcztcclxuXHQgICAgaWYodGhpcy53aGVyZSl7XHJcblx0ICAgICAgaWYoY29uZGl0aW9uKSBjb25kaXRpb24gKz0nIGFuZCAnO1xyXG5cdCAgICAgIGNvbmRpdGlvbis9dGhpcy53aGVyZTtcclxuXHQgICAgfVxyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhjb25kaXRpb24pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLm9yZGVyYnkpO1xyXG5cdCAgICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6IHRoaXMucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0YXR0cnM6IFtdLFxyXG5cdFx0XHRjb25kaXRpb246IHRoaXMudG9XaGVyZUJhc2U2NFN0cmluZyhcIlwiKyBjb25kaXRpb24gK1wiXCIpLCBcclxuXHRcdFx0cHJqX3JlbF90eXBlOiBcIlwiLFxyXG5cdFx0XHRvcmRlcl9ieTogdGhpcy5vcmRlcmJ5LFxyXG5cdFx0XHRwYWdlX3NpemU6IHRoaXMucGFnZV9zaXplLFxyXG5cdFx0XHRwYWdlOiB0aGlzLnBhZ2VpbmRleCxcclxuXHRcdFx0cXVlcnlfaWQ6IHRoaXMucXVlcnlfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpRdWVyeScsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHQvLyB2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHQkdGhpcy5xdWVyeV9pZCA9ICcnO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQpe1xyXG5cdFx0XHRcdFx0JHRoaXMucGFnZV9jb3VudCA9IHJldC5yZXN1bHQucGFnZV9jb3VudDtcclxuXHRcdFx0XHRcdGlmKHJldC5yZXN1bHQucGFnZV9jb3VudD4xKSAkdGhpcy5xdWVyeV9pZCA9IHJldC5yZXN1bHQucXVlcnlfaWQ7XHJcblx0XHRcdFx0XHRpZigkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdy5ldmVudC5pZCl7XHJcblx0XHRcdFx0XHRcdHJldC5yZXN1bHQub2JqX2xpc3QuZm9yRWFjaCgob2JqKSA9PiB7XHJcblx0XHRcdFx0XHQgICAgICB2YXIgaW5mbyA9e1xyXG5cdFx0XHRcdFx0ICAgICAgICAgIGlkOm9iai5pZCxcclxuXHRcdFx0XHRcdCAgICAgIH07XHJcblx0XHRcdFx0XHQgICAgICBvYmouYXR0cl9saXN0LmZvckVhY2goKGF0dHIpID0+IHtcclxuXHRcdFx0XHRcdCAgICAgICAgaW5mb1thdHRyLm5hbWVdPWF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHQgICAgICB9KTtcclxuXHRcdFx0XHRcdCAgICAgIHZhciBkZXRhaWxTdHlsZSA9e1xyXG5cdFx0XHRcdFx0ICAgICAgICAgIFNlbEJ1dF9DaGVja2VkOmZhbHNlLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGZvcm06e30sXHJcblx0XHRcdFx0XHQgICAgICAgICAgaW5mbzppbmZvXHJcblx0XHRcdFx0XHQgICAgICB9O1xyXG5cdFx0XHRcdFx0ICAgICAgZGV0YWlsU3R5bGUuZm9ybS5odG1sb2JqSWQgPSBvYmouaWQ/b2JqLmlkLnJlcGxhY2UoLy0vZywnJykucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKTonbnVsbCc7XHJcblx0XHRcdFx0XHQgICAgICBkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gb2JqLmlkO1xyXG5cdFx0XHRcdFx0ICAgICAgZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IG9iai5hdHRyX2xpc3Q7XHJcblx0XHRcdFx0XHQgICAgICAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHRcdFx0XHQgICR0aGlzLmFjdGl2ZWxpc3QucHVzaCh7YWN0aXZlOmZhbHNlfSk7XHJcblx0XHRcdFx0XHQgICAgfSk7XHJcblx0XHRcdFx0XHQgICAgLy8gY29uc29sZS5sb2codGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcdCAgICB2YXIganNvbmxpc3Q9W107XHJcblx0XHRcdFx0XHQgICAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuXHRcdFx0XHRcdCAgICAgIGpzb25saXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0ICAgICAgICBpZDphdHRyLmluZm8uaWQsXHJcblx0XHRcdFx0XHQgICAgICAgIGF0dHJzOiBPYmplY3Qua2V5cyhhdHRyLmluZm8pLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdCAgICAgICAgICBhdHRyOiBhLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIHZhbHVlOiBhdHRyLmluZm9bYV0gfHwgXCJcIixcclxuXHRcdFx0XHRcdCAgICAgICAgfSkpXHJcblx0XHRcdFx0XHQgICAgICB9KTtcclxuXHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhX2pzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb25saXN0KSk7XHJcblx0XHRcdFx0XHQgICAgdmFyIGV2ZW50aWQgPSAkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdy5ldmVudC5pZDtcclxuXHRcdFx0XHRcdCAgICBpZiAoISR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50LmlkLmluY2x1ZGVzKCd7JykpXHJcblx0XHRcdFx0XHQgICAgXHRldmVudGlkID0gJ3snICsgJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQuaWQgKyAnfSc7XHJcblx0XHRcdFx0XHQgICAgLy9IVE1M6aG16Z2i5LqL5Lu2XHJcblx0XHRcdFx0XHQgICAgJHRoaXMucnVuQ3VzdG9tRXZlbnQoe1xyXG5cdFx0XHRcdFx0ICAgIFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdCAgICBcdHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0ICAgIFx0Y2xhc3NfaWQ6ICR0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHQgICAgXHRldmVudF9pZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICBcdGRhdGFfanNvbixcclxuXHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0ICAvLyAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0ICByZXQucmVzdWx0Lm9ial9saXN0LmZvckVhY2goKG9iaikgPT4ge1xyXG5cdFx0XHRcdFx0XHR2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSgkdGhpcy5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0dmFyIGRldGFpbFN0eWxlID0gSlNPTi5wYXJzZShzdHlsZVN0cik7XHJcblx0XHRcdFx0XHRcdC8vIHZhciBpbmZvID17XHJcblx0XHRcdFx0XHRcdC8vICAgICBTX0lEOm9iai5pZCxcclxuXHRcdFx0XHRcdFx0Ly8gfTtcclxuXHRcdFx0XHRcdFx0b2JqLmF0dHJfbGlzdC5mb3JFYWNoKChhdHRyKSA9PiB7XHJcblx0XHRcdFx0XHRcdCAgLy8gaW5mb1thdHRyLm5hbWVdPWF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdCAgZGV0YWlsU3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+e1xyXG5cdFx0XHRcdFx0XHRcdGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0ICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLm5hbWUpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0ICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLm5hbWUpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQgIFxyXG5cdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmh0bWxvYmpJZCA9IG9iai5pZD9vYmouaWQucmVwbGFjZSgvLS9nLCcnKS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOidudWxsJztcclxuXHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IG9iai5pZDtcclxuXHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IG9iai5hdHRyX2xpc3Q7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmFjdGl2ZWxpc3QucHVzaCh7YWN0aXZlOmZhbHNlfSk7XHJcblx0XHRcdFx0XHRcdC8vbGlzdC5wdXNoKGluZm8pO1xyXG5cdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQgIFxyXG5cdFx0XHRcdFx0Ly8g6Kej5Yazdmlld+WxguS4jeWQjOatpeeahOmXrumimFxyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuc2Nyb2xsVG9wID0gJHRoaXMub2xkLnNjcm9sbFRvcDtcclxuXHRcdFx0XHRcdCR0aGlzLmlzU2Nyb2xsPWZhbHNlO1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5pc1Njcm9sbD10cnVlO1xyXG5cdFx0XHRcdFx0fSwxMDAwKTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0ICB9IGNhdGNoIChleCkge1xyXG5cdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzUuMlwiLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCAgfVxyXG5cdH0sXHJcblx0XHJcblx0Ly/liLfmlrBcclxuXHRSZWZyZXNoKHZhbHVlKXtcclxuXHQgIC8v5Yi35paw5b2T5YmN6aG16Z2iXHJcblx0ICAvLyBsb2NhdGlvbi5yZWxvYWQoKTtcclxuXHQgIHVuaS5yZWRpcmVjdFRvKHtcclxuXHQgIFx0dXJsOicuLi9tb2RhbC8zMjAwP3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMuJGRhdGEudGl0bGVcclxuXHQgIH0pO1xyXG5cdH0sXHJcblx0Ly/ngrnlh7vmmL7npLrmtY/op4jlr7nosaHmmL7npLrpobXpnaJcclxuXHRhc3luYyBvblZpZXdQYWdlQ2xpY2soc3R5bGUpe1xyXG5cdCAgaWYodGhpcy5wYXJhbS5WaWV3UGFnZSl7XHJcblx0XHQgIGlmKHRoaXMucGFyYW0uVmlld1BhZ2UuVmlld19VSURlZil7XHJcblx0XHRcdHRoaXMuc3R5bGVkZWYgPSBzdHlsZTtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdHVybDonLi4vbW9kYWwvMzIwMF92aWV3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMudGl0bGUrXCImc3R5bGU9XCIrSlNPTi5zdHJpbmdpZnkoc3R5bGUpLFxyXG5cdFx0XHRcdGV2ZW50czoge1xyXG5cdFx0XHRcdCAgICAvLyDkuLrmjIflrprkuovku7bmt7vliqDkuIDkuKrnm5HlkKzlmajvvIzojrflj5booqvmiZPlvIDpobXpnaLkvKDpgIHliLDlvZPliY3pobXpnaLnmoTmlbDmja5cclxuXHRcdFx0XHQgICAgRXhpdFZpZXdFdmVudDogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHRcdCAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG5cdFx0XHRcdFx0ICAvL+mAgOWHuumhtemdouWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0ICB2YXIgZXZlbnRpZCA9ICR0aGlzLnBhcmFtLlZpZXdQYWdlLkV4aXRfVmlld19FdmVudD8uaWQ7XHJcblx0XHRcdFx0XHQgIGlmKGV2ZW50aWQpe1xyXG5cdFx0XHRcdFx0ICAgIHRyeSB7XHJcblx0XHRcdFx0XHRcdCAgdmFyIG9ial9hdHRyID0geydTX0lEJzokdGhpcy5zdHlsZWRlZi5mb3JtLm9iaklkfTtcclxuXHRcdFx0XHRcdCAgICAgICR0aGlzLnN0eWxlZGVmLmZvcm0uYXR0cnMuZm9yRWFjaCgoYXR0cikgPT4ge1xyXG5cdFx0XHRcdFx0XHQgICAgb2JqX2F0dHJbYXR0ci5uYW1lXT1hdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0ICAgICAgfSk7XHJcblx0XHRcdFx0XHQgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHRcdFx0XHQgICAgICB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG9ial9hdHRyKSk7XHJcblx0XHRcdFx0XHQgICAgICAkdGhpcy5ydW5DdXN0b21FdmVudCh7XHJcblx0XHRcdFx0XHQgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGNsYXNzX2lkOiAkdGhpcy5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIG9ial9hdHRyLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGlucHV0X3BhcmFtLFxyXG5cdFx0XHRcdFx0ICAgICAgfSk7XHJcblx0XHRcdFx0XHQgICAgfSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHQgIH0gICAgICAgXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHQgIH1cclxuXHR9LFxyXG5cdC8v54K55Ye75oyJ6ZKuXHJcblx0b25CdG5DbGljayhidG4sc3R5bGUpe1xyXG5cdCAgdmFyIHRoYXQgPSB0aGlzXHJcblx0ICBpZiAoYnRuLlByb21wdCkge1xyXG5cdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHQgIHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdCAgY29udGVudDogYnRuLlByb21wdENvbnRlbnQgfHwgXCLmmK/lkKbnoa7lrprvvJ9cIixcclxuXHRcdCAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0ICAgIGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0ICBcdCAgdGhhdC5vbkJ1dHRvbkNsaWNrZWQoYnRuLHN0eWxlKTtcclxuXHRcdCAgICAvLyB9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdCAgICAvLyBcdGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vlj5bmtognKTtcclxuXHRcdCAgICB9XHJcblx0XHQgIH1cclxuXHRcdH0pO1xyXG5cdCAgfSBlbHNlIHRoYXQub25CdXR0b25DbGlja2VkKGJ0bixzdHlsZSk7XHJcblx0fSxcclxuXHQvL+eCueWHu+aMiemSruWIl+ihqFxyXG5cdGFjdGlvblNoZWV0VGFwKCkge1xyXG5cdCAgXHR2YXIgdGhhdCA9IHRoaXNcclxuXHRcdHZhciBpdGVtbGlzdD1bXTtcclxuXHRcdHRoaXMucGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24uZm9yRWFjaCgoYnRuKSA9PiB7XHJcblx0XHRcdGl0ZW1saXN0LnB1c2goYnRuLlNob3dOYW1lKTtcclxuXHRcdH0pO1xyXG5cdCAgXHR1bmkuc2hvd0FjdGlvblNoZWV0KHtcclxuXHQgIFx0XHQvLyB0aXRsZTogJ+aMiemSruWIl+ihqCcsXHJcblx0ICBcdFx0aXRlbUxpc3Q6IGl0ZW1saXN0LFxyXG5cdCAgXHRcdHN1Y2Nlc3M6IChlKSA9PiB7XHJcblx0ICBcdFx0XHRjb25zb2xlLmxvZyhlLnRhcEluZGV4KTtcclxuXHQgIFx0XHRcdHZhciBidG4gPSB0aGF0LnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uW2UudGFwSW5kZXhdO1xyXG5cdCAgXHRcdFx0aWYgKGJ0bi5Qcm9tcHQpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGJ0bi5Qcm9tcHRDb250ZW50IHx8IFwi5piv5ZCm56Gu5a6a77yfXCIsXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoYXQub25CdXR0b25DbGlja2VkKGJ0bik7XHJcblx0XHRcdFx0XHRcdFx0Ly8gfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHQgIFx0XHRcdH0gZWxzZSB0aGF0Lm9uQnV0dG9uQ2xpY2tlZChidG4pO1xyXG5cdCAgXHRcdH1cclxuXHQgIFx0fSlcclxuXHR9LFxyXG5cdC8v5aSE55CG55u45YWz5oyJ6ZKuXHJcblx0YXN5bmMgb25CdXR0b25DbGlja2VkKGJ0bixzdHlsZSkge1xyXG4gICAgICBzdHlsZSA9IHN0eWxlIHx8ICcnO1xyXG5cdCAgdHJ5IHtcclxuXHQgICAgdmFyIGVudmlyb21lbnQgPSB7XHJcblx0ICAgICAgYnV0dG9uOiBcInRvcFwiLFxyXG5cdCAgICAgIGJ1dHRvbl9uYW1lOiBidG4uU2hvd05hbWUsXHJcblx0ICAgICAgY2xzX2lkOiBidG4uQ2xzX0lELFxyXG5cdCAgICAgIGZ1bmN0aW9uOiBcIjMyMDBcIixcclxuXHQgICAgICBtYXN0ZXI6IHt9LFxyXG5cdCAgICB9O1xyXG5cdCAgICBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJBZGRcIiB8fCBidG4uRnVuQ29kZSA9PSBcIk1vZGlmeVwiKSB7XHJcblx0ICAgICAgaWYgKGJ0bi5FZGl0X2RsZy5Nb2RlbCA9PSBcInNtYWxsXCIpe1xyXG5cdCAgICAgICAgdGhpcy5zaG93QWRkU21hbGxEaWFsb2coYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0XHQgIH1cclxuXHQgICAgfSBlbHNlIGlmIChidG4uRnVuQ29kZSA9PSBcIkRlbGV0ZVwiKSB7XHJcblx0ICAgICAgdGhpcy5EZWxldGVPYmooYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0ICAgIC8vIH0gZWxzZSBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJUcmlnZ2VyRXZlbnRcIikge1xyXG5cdCAgICAvLyAgIHRoaXMudHJpZ2dlckV2ZW50KGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdCAgICB9IGVsc2Uge1xyXG5cdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrlrp7njrBcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgICAgfVxyXG5cdCAgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgIH1cclxuXHR9LFxyXG5cdC8v5paw5aKe5L+u5pS55bCP56qX5Y+j5pWw5o2uXHJcblx0c2hvd0FkZFNtYWxsRGlhbG9nKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpe1xyXG5cdFx0dmFyIGRhdGE9e1xyXG5cdFx0XHRBZGRfQnRuTmFtZTogYnRuLlNob3dOYW1lLFxyXG5cdFx0XHRFZGl0RGxnTW9kZTogYnRuLkVkaXRfZGxnLk1vZGVsLFxyXG5cdFx0XHRjbHNpZDogdGhpcy5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRjbHNfbmFtZTogIHRoaXMucGFyYW0uRGF0YUNscy5uYW1lLFxyXG5cdFx0XHRFZGl0X2RsZzogYnRuLkVkaXRfZGxnXHJcblx0XHR9O1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0dXJsOicuLi9tb2RhbC8zMDE4P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoZGF0YSkrXCImdGl0bGVuYW1lPVwiK2J0bi5FZGl0X2RsZy5OYW1lK1wiJnR5cGU9YWRkRGF0YU9ialwiLFxyXG5cdFx0XHRldmVudHM6IHtcclxuXHRcdFx0ICAgIC8vIOS4uuaMh+WumuS6i+S7tua3u+WKoOS4gOS4quebkeWQrOWZqO+8jOiOt+WPluiiq+aJk+W8gOmhtemdouS8oOmAgeWIsOW9k+WJjemhtemdoueahOaVsOaNrlxyXG5cdFx0XHQgICAgYWRkRGF0YU9iajogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHQgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHQgICR0aGlzLlJlZnJlc2goKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdC8v5Yig6Zmk5pWw5o2u5a+56LGhXHJcblx0RGVsZXRlT2JqKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpe1xyXG5cdCAgLy8gY29uc29sZS5sb2coc3R5bGUpO1xyXG5cdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgIHVuaS5zaG93TW9kYWwoe1xyXG5cdCAgXHR0aXRsZTogJ+aPkOekuicsXHJcblx0ICBcdGNvbnRlbnQ6ICfnoa7lrprliKDpmaTor6XmlbDmja7vvIEnLFxyXG5cdCAgXHRzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcblx0ICBcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0dmFyIG9iaklEPXN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHRcdFx0aWYoIXN0eWxlLmZvcm0ub2JqSWQuaW5jbHVkZXMoJ3snKSkgb2JqSUQgPSAneycrc3R5bGUuZm9ybS5vYmpJZCsnfSc7XHJcblx0XHRcdFx0ICAgICAgICAgIFxyXG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdFx0XHRjbGFzc19pZDogYnRuLkNsc19JRCxcclxuXHRcdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0XHRcdFx0b2JqX2lkOiBvYmpJRFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9iakRlbCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdC8v5omn6KGM5ZCO5aSE55CG5LqL5Lu2XHJcblx0XHRcdFx0XHRcdCR0aGlzLkFmdGVyUHJvY2Vzc19FdmVudChidG4uY2xzSWQsIGJ0bS5BZnRlclByb2Nlc3NfRXZlbnQsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHQvL+a4hemZpOW9k+WJjeWIl+ihqOaVsOaNrlxyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKGVsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0ICBpZihlbGUuZm9ybS5vYmpJZCA9PSBvYmpJRCl7XHJcblx0XHRcdFx0XHRcdCAgICAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzZcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xyXG5cdCAgXHJcblx0fSxcclxuXHQvL+aJp+ihjOWQjuWkhOeQhuS6i+S7tlxyXG5cdGFzeW5jIEFmdGVyUHJvY2Vzc19FdmVudChjbHNJZCwgYWZ0ZXJQcm9jZXNzX0V2ZW50LCBlbnZpcm9tZW50KXtcclxuXHQgIHRyeSB7XHJcblx0ICAgIGlmIChhZnRlclByb2Nlc3NfRXZlbnQuSUQpIHtcclxuXHRcdFx0Ly/miafooYzlkI7lpITnkIbkuovku7ZcclxuXHRcdFx0YXdhaXQgdGhpcy5ydW5DdXN0b21FdmVudCh7XHJcblx0ICAgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHQgICAgICAgICAgICBjbGFzc19pZDogY2xzSWQsXHJcblx0ICAgICAgICAgICAgZXZlbnRfaWQ6IGFmdGVyUHJvY2Vzc19FdmVudC5JRCxcclxuXHQgICAgICAgIH0pO1xyXG5cdCAgICB9XHJcblx0ICB9IGNhdGNoIChleCkge1xyXG5cdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzdcIixjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgIH1cclxuXHR9LFxyXG5cclxuXHRvbnRhcChpdGVtKXsgLy/miavnoIHlip/og71cclxuXHRcdC8vIHZhciAkZWxlID0gZTtcclxuXHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdCAgICAgICR0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdFx0ICAgIH0gZWxzZXtcblx0XHRcdFx0ICAkdGhpcy53aGVyZSA9Jyc7XG5cdFx0XHRcdCAgaWYoaXRlbS52YWx1ZSlcblx0XHRcdFx0XHQkdGhpcy53aGVyZSA9aXRlbS5maWVsZElkK1wiIGxpa2UgJyVcIitpdGVtLnZhbHVlK1wiJSdcIjtcblx0XHRcdFx0ICAkdGhpcy5xdWVyeV9pZD0nJztcblx0XHRcdFx0ICAkdGhpcy5wYWdlaW5kZXggPSAxO1xuXHRcdFx0XHQgICR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3Q9W107XG5cdFx0XHRcdCAgJHRoaXMubG9hZERhdGFHZXRMaXN0KCk7XG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZihpdGVtLnZhbHVlKXsgLy/nrKzkuIDkuKrovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdCR0aGlzLmZvY3VzTWF0ZXJpYSA9IHRydWU7IC8v5Yid5aeL5YyW77yM56ys5LqM5Liq6L6T5YWl5qGGZm9jdXPlsZ7mgKdcclxuXHRcdFx0XHRcdC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdC8vIFx0JHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IC8v56ys5LqM5Liq6L6T5YWl5qGG6I635Y+W54Sm54K5XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdH0sMTAwKTtcclxuXHRcdFx0XHRcdC8vIH0sNTAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uRW50ZXJDaGFuZ2UoaXRlbSl7IC8v5Zue6L2m77yM54K55Ye75oyJ6ZKu77yM5Y+W5raI6IqC54K55LqL5Lu2XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHJcblx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdCAgICAgIHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0ICAgIH0gZWxzZXtcblx0XHRcdCAgdGhpcy53aGVyZSA9Jyc7XHJcblx0XHRcdCAgaWYoaXRlbS52YWx1ZSlcclxuXHRcdFx0XHR0aGlzLndoZXJlID1pdGVtLmZpZWxkSWQrXCIgbGlrZSAnJVwiK2l0ZW0udmFsdWUrXCIlJ1wiO1xyXG5cdFx0XHQgIHRoaXMucXVlcnlfaWQ9Jyc7XHJcblx0XHRcdCAgdGhpcy5wYWdlaW5kZXggPSAxO1xyXG5cdFx0XHQgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0ICB0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xuXHRcdFx0fVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdCAgICAvLyB9XHJcblx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdCAgICAvLyB9XHJcblx0XHR9XHJcblx0fSxcclxuXHQvLyDlhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRhc3luYyBvbkNoYW5nZShldmVudCkge1xyXG5cdCAgICB0cnkge1xyXG5cdCAgICAgICAgaWYgKGV2ZW50LmlkKSB7XHJcblx0ICAgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdCAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0ICAgICAgICAgIHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0ICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXHJcblx0ICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdCAgICAgICAgICAgICAgICBhdHRyOiBhLFxyXG5cdCAgICAgICAgICAgICAgICB2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHQgICAgICAgICAgICAgIH0pKVxyXG5cdCAgICAgICAgICAgIClcclxuXHQgICAgICAgICAgKTtcclxuXHRcdFx0ICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHQgICAgICAgICAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXHJcblx0ICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmlkLFxyXG5cdFx0XHRcdGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0XHRcdGRhdGFfb2JqX2lkOiAnJyxcclxuXHQgICAgICAgICAgICBvYmpfYXR0cjogb2JqX2F0dHIsXHJcblx0XHRcdFx0cHJqX2lkOiAnJyxcclxuXHRcdFx0XHRyZWZfY2xzX2lkOiAnJyxcclxuXHRcdFx0XHRyZWxfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHR1c2VyX2xvZ2luOiAnJyxcclxuXHRcdFx0XHRkYXRhX2pzb246ICcnLFxyXG5cdFx0XHRcdGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHRcdFx0ZXh0X2luZm86ICcnLFxyXG5cdFx0XHRcdGdsb2JhbF9hdHRyOiAnJyxcclxuXHQgICAgICAgICAgICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0ICAgICAgICAgIH07XHJcblx0XHRcdCAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0ICBcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdCAgXHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0OyBcclxuXHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdCAgICB2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHQgICAgaWYgKHJlc3VsdC5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5pbmZvIDogcmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRpZihyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCAmJiByZXN1bHQuYWN0aW9uKXtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9kbGdfYXR0clwiKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgLy8gdmFsdWUgPSB7XCJhdHRyXCI6XCJ4eHhcIiwgXCJ2YWx1ZVwiOlwieHh4XCJ9XHJcblx0XHRcdFx0XHRcdFx0XHQgIHZhciBkYXRhID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIGRhdGEuZm9yRWFjaChhc3luYyAoZWxlMixpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gZWxlMi5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZWxlLnZhbHVlID0gZWxlMi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRpZihyZXN1bHQuaW5mbyl7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdCAgXHRcdFxyXG5cdFx0XHQgIFx0fWVsc2V7XHJcblx0XHRcdCAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdCAgXHR9XHJcblx0XHRcdCAgfSkuY2F0Y2goZXg9PntcclxuXHRcdFx0ICBcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0ICBcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdCAgfSk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH0gY2F0Y2ggKGV4KSB7XHJcblx0ICAgICAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4yXCIsY29udGVudDpcIuaJp+ihjOKAnOWGheWuueWPmOWMluWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcclxuXHQgICAgfVxyXG5cdH0sXHJcblx0Ly/ngrnkuK3ooajljZVcclxuXHRvblBhbmVsQ2xpY2sodmFsdWUpeyAvL+eCueWHu+mdouadv+mrmOS6ruaYvuekulxyXG5cdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xyXG5cdCAgICB0aGlzLmFjdGl2ZWxpc3QuZm9yRWFjaChlbGU9PntcclxuXHQgICAgICAgIGVsZS5hY3RpdmUgPSBmYWxzZTtcclxuXHQgICAgfSk7XHJcblx0ICAgIHRoaXMuYWN0aXZlbGlzdFt2YWx1ZV0uYWN0aXZlID0gdHJ1ZTtcclxuXHR9LFxyXG5cdFx0XHJcblx0Ly/kuovku7blpITnkIZcclxuXHRhc3luYyBydW5DdXN0b21FdmVudChkYXRhSW5mbykge1xyXG5cdCAgICB0cnkge1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQgIFx0Y29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0ICBcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7IFxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0ICAgIHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmVycl9pbmZvIDogcmVzdWx0LmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pe1xyXG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdFx0XHRcdFx0XHRpZihpdGVtLmFjdGlvbl90eXBlID09IFwiZ29iYWNrX3RvX3ByZV9wYWdlXCIpeyAvL+i/lOWbnuS4iuS4gOmhtVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWx0YToxICwvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImhpZGRlbl9idXR0b25cIil7IC8v6ZqQ6JeP5oyJ6ZKuXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLmZvckVhY2goYnRuID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgIHZhciBpbmRleCA9ICR0aGlzLnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uLmZpbmRJbmRleChidXR0b24gPT4gYnV0dG9uLlNob3dOYW1lID09IGJ0bilcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlmIChpbmRleCA+IC0xKSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uLnNwbGljZShpbmRleCwgMSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHRcdC8vIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicmVmcmVzaF9jdXJfcm93XCIpeyAvL1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3BhbmVsX2h0bWxcIikgeyAvL+aYvuekukh0bWzpobXpnaJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuTGlzdEh0bWxfUGFuZWwgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKGVsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHRlbGUuTGlzdEh0bWxfUGFuZWwgPSBpdGVtLnZhbHVlW2luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLlvZPliY1hY3Rpb25fdHlwZe+8mlwiK2l0ZW0uYWN0aW9uX3R5cGUrXCLmnKrlpITnkIZcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpyZXN1bHQuaW5mbyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0ICBcdFx0XHJcblx0XHRcdCAgXHR9ZWxzZXtcclxuXHRcdFx0ICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor685XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICBcdH1cclxuXHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0ICBcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0ICBcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH0pO1xyXG5cdCAgICB9IGNhdGNoIChleCkge1xyXG5cdCAgICAgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzkuMlwiLGNvbnRlbnQ6XCLmiafooYzkuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHJcblx0ICAgIH1cclxuXHR9LFxyXG5cdFxyXG5cdGNhbmNlbChlKXsgLy/lj5bmtohcclxuXHRcdHZhciBldmVudENoYW5uZWwgPSB0aGlzLiRzY29wZS5ldmVudENoYW5uZWw7XHJcblx0XHQvLyBjb25zdCBldmVudENoYW5uZWwgPSB0aGlzLmdldE9wZW5lckV2ZW50Q2hhbm5lbCgpO1xyXG5cdFx0ZXZlbnRDaGFubmVsLmVtaXQoJ3ZpZXdfMzIwMScsXCJcIik7XHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAsLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdC8qKlxyXG5cdCAqIOWPquaUr+aMgVtcImNvbHVtbjE9J0EnIG9yIGNvbHVtbjI9J0InXCIsIFwiY29sdW1uMz0nQycgYW5kIGNvbHVtbjQ9J0QnXCIsIFwiY29sdW1uNT0nRSdcIl3ov5nnp43moLzlvI9cclxuXHQgKiB7XHJcblx0ICogICAgIFwibW9kZWxcIjogMCAvIDEsXHJcblx0ICogICAgIFwiY29uZGl0aW9uXCI6XHJcblx0ICogICAgIFtcclxuXHQgKiAgICAgICAgIFtcclxuXHQgKiAgICAgICAgICAgICB7IH0sXHJcblx0ICogICAgICAgICAgICAgeyB9LFxyXG5cdCAqICAgICAgICAgICAgIHsgfVxyXG5cdCAqICAgICAgICAgXSxcclxuXHQgKiAgICAgICAgIFtcclxuXHQgKiAgICAgICAgICAgICB7IH1cclxuXHQgKiAgICAgICAgIF0sXHJcblx0ICogICAgICAgICBbXHJcblx0ICogICAgICAgICAgICAgeyB9XHJcblx0ICogICAgICAgICBdXHJcblx0ICogICAgIF1cclxuXHQgKiB9XHJcblx0ICovXHJcblx0dG9XaGVyZUJhc2U2NFN0cmluZyhsaXN0KSB7XHJcblx0ICAgIGlmICh0eXBlb2YgbGlzdCA9PSAnc3RyaW5nJykgbGlzdCA9IFtsaXN0XVxyXG5cdCAgICB2YXIgc3FsID0gW11cclxuXHQgICAgdmFyIHNlcHMgPSBbJyBub3QgaW4nLCAnIGluJywgJzw+JywgJyE9JywgJzw9JywgJz49JywgJzwnLCAnPScsICc+JywgJyBsaWtlJ11cclxuXHQgICAgbGlzdC5mb3JFYWNoKGxzID0+IHtcclxuXHQgICAgICAgIHZhciB3aGVyZSA9IGxzLnRyaW0oKS50b0xvd2VyQ2FzZSgpXHJcblx0ICAgICAgICBpZiAod2hlcmUuc3RhcnRzV2l0aCgnKCcpICYmIHdoZXJlLmVuZHNXaXRoKCcpJykpIHdoZXJlID0gd2hlcmUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICBpZiAod2hlcmUuaW5jbHVkZXMoJyBhbmQgJykpIHtcclxuXHQgICAgICAgICAgICAvLyDkuoznuqdhbmTmlL7lnKjnrKzkuIDnuqfmlbDnu4TkuK1cclxuXHQgICAgICAgICAgICB3aGVyZS5zcGxpdCgnIGFuZCAnKS5mb3JFYWNoKGxpID0+IHtcclxuXHQgICAgICAgICAgICAgICAgdmFyIGwgPSBsaS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgaWYgKGwuc3RhcnRzV2l0aCgnKCcpICYmIGwuZW5kc1dpdGgoJyknKSkgbCA9IGwucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgICAgIHZhciBzZXAgPSAnJ1xyXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChsLmluY2x1ZGVzKHNlcHNbaV0pKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gc2Vwc1tpXVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgaWYgKHNlcCkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGwuc3BsaXQoc2VwKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gdmFsdWVzWzBdPy50cmltKCkucmVwbGFjZSgvXlxcWy8sICcnKS5yZXBsYWNlKC9cXF0kLywgJycpXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAnJ1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9wID0gc2VwLnRyaW0oKVxyXG5cdFxyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFsnIGluJywgJyBub3QgaW4nXS5pbmNsdWRlcyhzZXApICYmIHZhbHVlc1sxXS5pbmNsdWRlcygnc2VsZWN0ICcpICYmIHZhbHVlc1sxXS5pbmNsdWRlcygnIGZyb20gJykpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoL15cXHMqKGlufG5vdCBpbilcXHMqLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgdmFsdWUuZW5kc1dpdGgoJyknKSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1sxXT8udHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKVxyXG5cdFxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbJ2luJywgJ25vdCBpbiddLmluY2x1ZGVzKG9wKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJykubWFwKHYgPT4gdi50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIHNxbC5wdXNoKFt7IGZpZWxkLCB2YWx1ZSwgb3AgfV0pXHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICB9KVxyXG5cdCAgICAgICAgfVxyXG5cdCAgICAgICAgZWxzZSBpZiAod2hlcmUuaW5jbHVkZXMoJyBvciAnKSkge1xyXG5cdCAgICAgICAgICAgIC8vIOS6jOe6p29y5pS+5Zyo56ys5LqM57qn5ZCM5LiA57uE5pWw57uE5LitXHJcblx0ICAgICAgICAgICAgdmFyIHMgPSBbXVxyXG5cdCAgICAgICAgICAgIHdoZXJlLnNwbGl0KCcgb3IgJykuZm9yRWFjaChsaSA9PiB7XHJcblx0ICAgICAgICAgICAgICAgIHZhciBsID0gbGkudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICB2YXIgc2VwID0gJydcclxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXBzLmxlbmd0aDsgaSsrKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAobC5pbmNsdWRlcyhzZXBzW2ldKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9IHNlcHNbaV1cclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIGlmIChzZXApIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBsLnNwbGl0KHNlcClcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJykucmVwbGFjZSgvXFxdJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJydcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvcCA9IHNlcC50cmltKClcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJ3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJyBmcm9tICcpKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsLnJlcGxhY2UoZmllbGQsICcnKS5yZXBsYWNlKC9eXFxzKihpbnxub3QgaW4pXFxzKi8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnKCcpICYmIHZhbHVlLmVuZHNXaXRoKCcpJykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJylcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoWydpbicsICdub3QgaW4nXS5pbmNsdWRlcyhvcCkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKSlcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICBzcWwucHVzaChbeyBmaWVsZCwgdmFsdWUsIG9wIH1dKVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgfSlcclxuXHQgICAgICAgICAgICBzcWwucHVzaChzKVxyXG5cdCAgICAgICAgfVxyXG5cdCAgICAgICAgZWxzZSB7XHJcblx0ICAgICAgICAgICAgdmFyIGxpID0gd2hlcmVcclxuXHQgICAgICAgICAgICAvLyDljZXkuIDmn6Xor6LmnaHku7bnm7TmjqXmlL7lnKjnrKzkuIDnuqfmlbDnu4TkuK1cclxuXHQgICAgICAgICAgICB2YXIgbCA9IGxpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgIHZhciBzZXAgPSAnJ1xyXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vwcy5sZW5ndGg7IGkrKykge1xyXG5cdCAgICAgICAgICAgICAgICBpZiAobC5pbmNsdWRlcyhzZXBzW2ldKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgc2VwID0gc2Vwc1tpXVxyXG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICBpZiAoc2VwKSB7XHJcblx0ICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBsLnNwbGl0KHNlcClcclxuXHQgICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gdmFsdWVzWzBdPy50cmltKCkucmVwbGFjZSgvXlxcWy8sICcnKS5yZXBsYWNlKC9cXF0kLywgJycpXHJcblx0ICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICcnXHJcblx0ICAgICAgICAgICAgICAgIHZhciBvcCA9IHNlcC50cmltKClcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgaWYgKFsnIGluJywgJyBub3QgaW4nXS5pbmNsdWRlcyhzZXApICYmIHZhbHVlc1sxXS5pbmNsdWRlcygnc2VsZWN0ICcpICYmIHZhbHVlc1sxXS5pbmNsdWRlcygnIGZyb20gJykpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbC5yZXBsYWNlKGZpZWxkLCAnJykucmVwbGFjZSgvXlxccyooaW58bm90IGluKVxccyovLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnKCcpICYmIHZhbHVlLmVuZHNXaXRoKCcpJykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJylcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChbJ2luJywgJ25vdCBpbiddLmluY2x1ZGVzKG9wKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKSlcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICBzcWwucHVzaChbeyBmaWVsZCwgdmFsdWUsIG9wIH1dKVxyXG5cdCAgICAgICAgICAgIH1cclxuXHQgICAgICAgIH1cclxuXHQgICAgfSlcclxuXHRcclxuXHQgICAgaWYgKHNxbC5sZW5ndGggPiAwKVxyXG5cdCAgICAgICAgcmV0dXJuIEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe1xyXG5cdCAgICAgICAgICAgIG1vZGVsOiAxLFxyXG5cdCAgICAgICAgICAgIGNvbmRpdGlvbjogc3FsXHJcblx0ICAgICAgICB9KSlcclxuXHQgICAgZWxzZVxyXG5cdCAgICAgICAgcmV0dXJuICcnXHJcblx0fVxyXG5cclxuICB9LFxufTtcbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///165\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//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  onNavigationBarButtonTap: function onNavigationBarButtonTap(e) {\n    //  \tconsole.log(e);\n    // e.text=\"\\ue924\";\n    // console.log(e.fontSize);\n    if (this.isFilter) this.isFilter = false;else this.isFilter = true;\n  },\n  onBackPress: function onBackPress(e) {\n    // console.log(\"监听返回按钮事件\",e);\n    var eventChannel = this.$scope.eventChannel;\n    // const eventChannel = this.getOpenerEventChannel();\n    eventChannel.emit('view_3201', \"\");\n    // uni.navigateBack({\n    // \tdelta:1 ,//返回层数,2则上上页\n    // });\n    // return true;\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      isFilter: true,\n      param: {},\n      focusMateria: false,\n      styledef: {},\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      items: [],\n      active_id: '',\n      activelist: [],\n      where: '',\n      wheres: '',\n      orderby: '',\n      query_id: '',\n      pageindex: 1,\n      page_size: 10,\n      page_count: 0,\n      scrollTop: 0,\n      old: {\n        scrollTop: 0\n      },\n      isScroll: true,\n      //获取数据类的HTML页面\n      ListHtml_Panel: \"\",\n      ListPageHtml_Show: {\n        name: \"\",\n        event: {\n          id: \"\",\n          name: \"\"\n        }\n      }\n    };\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n      var _this$param$ListPage$;\n      return _regenerator.default.wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\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              _this.isFilter = true;\n              if (_this.param.ShowFilter) _this.isFilter = false;\n              //获取数据类的自定义表单参数\n              if (_this.param.Query_Panel) {\n                _this.Head_UIStyleGetInfo(_this.param.DataCls.id, _this.param.Query_Panel.id);\n              }\n              if (!(((_this$param$ListPage$ = _this.param.ListPage.ListItem_UIDef) === null || _this$param$ListPage$ === void 0 ? void 0 : _this$param$ListPage$.ui_type) == \"HTML页面\")) {\n                _context.next = 11;\n                break;\n              }\n              _context.next = 9;\n              return _this.Html_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 9:\n              _context.next = 13;\n              break;\n            case 11:\n              _context.next = 13;\n              return _this.Detail1_UIstyleGetInfo(_this.param.DataCls.id, _this.param.ListPage.ListItem_UIDef.id);\n            case 13:\n              _this.orderby = _this.param.Order ? _this.param.Order : 'T_CREATE Desc';\n              if (!_this.param.Query_Event) {\n                _context.next = 19;\n                break;\n              }\n              _context.next = 17;\n              return _this.onSearChange(_this.param.DataCls.id, _this.param.Query_Event.id);\n            case 17:\n              _context.next = 25;\n              break;\n            case 19:\n              _this.wheres = _this.param.Condition;\n              _this.pageindex = 1;\n              _this.page_size = 3;\n              _this.query_id = \"\";\n              _context.next = 25;\n              return _this.loadDataGetList();\n            case 25:\n              __f__(\"log\", _this.$data.param, \" at pages/modal/3200.vue:693\");\n              //页面初始化获取焦点\n              // this.focusMateria=true; \n            case 26:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }))();\n  },\n  methods: {\n    //滚动到底部后懒加载数据\n    scrolltolower: function scrolltolower(e) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!_this2.isScroll) {\n                  _context2.next = 7;\n                  break;\n                }\n                if (!(_this2.page_count == _this2.pageindex)) {\n                  _context2.next = 3;\n                  break;\n                }\n                return _context2.abrupt(\"return\");\n              case 3:\n                _this2.pageindex += 1;\n                if (_this2.where || _this2.page_count == 1) {\n                  _this2.query_id = \"\";\n                  _this2.detail1StyleDefList = [];\n                }\n                _context2.next = 7;\n                return _this2.loadDataGetList();\n              case 7:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    scroll: function scroll(e) {\n      // console.log(e.detail.scrollTop)\n      this.old.scrollTop = e.detail.scrollTop;\n    },\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this3 = 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 = _this3;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                }; // console.log(dataInfo);\n                _this3.$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                    // this.form = this.head_styledef.form.model;\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 _callee3(ele, index) {\n                        return _regenerator.default.wrap(function _callee3$(_context3) {\n                          while (1) {\n                            switch (_context3.prev = _context3.next) {\n                              case 0:\n                                __f__(\"log\", ele.useDict, \" at pages/modal/3200.vue:738\");\n                                if (!(ele.useDict == true)) {\n                                  _context3.next = 4;\n                                  break;\n                                }\n                                _context3.next = 4;\n                                return _this3.DictGetInfo(ele.bind.dict, index, 'mast');\n                              case 4:\n                              case \"end\":\n                                return _context3.stop();\n                            }\n                          }\n                        }, _callee3);\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 _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this4 = 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                //获取自定义表单样式\n                $this = _this4;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this4.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  __f__(\"log\", ret, \" at pages/modal/3200.vue:760\");\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 = false;\n                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\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 _context5.stop();\n            }\n          }\n        }, _callee5);\n      }))();\n    },\n    Html_UIstyleGetInfo: function Html_UIstyleGetInfo(class_id, style_id) {\n      var _this5 = 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 = _this5;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this5.$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.ListPageHtml_Show = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.ListPageHtml_Show);\n                  } else {\n                    uni.showModal({\n                      title: \"错误10\",\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: \"错误10.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 _this6 = 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                _this6.data = [];\n                $this = _this6;\n                dataInfo = {\n                  dict_id: dict.id,\n                  dict_name: dict.name\n                }; // console.log(dataInfo);\n                _this6.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(success) {\n                    var list, itemName, attr, head_styledef;\n                    return _regenerator.default.wrap(function _callee7$(_context7) {\n                      while (1) {\n                        switch (_context7.prev = _context7.next) {\n                          case 0:\n                            __f__(\"log\", success, \" at pages/modal/3200.vue:833\");\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                                head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n                                $this.head_styledef = [];\n                                $this.head_styledef = head_styledef;\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: \"错误3.1\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 2:\n                          case \"end\":\n                            return _context7.stop();\n                        }\n                      }\n                    }, _callee7);\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: \"错误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    // 执行查询事件\n    onSearChange: function onSearChange(clsid, eventid) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {\n        var $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                try {\n                  if (eventid) {\n                    $this = _this7;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: clsid,\n                      event_id: eventid\n                    };\n                    _this7.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_query_condition\") {\n                                var value = item.value;\n                                $this.wheres = value.condition;\n                                $this.orderby = value.order ? value.order : $this.orderby;\n                                $this.pageindex = 1;\n                                $this.query_id = \"\";\n                                $this.detail1StyleDefList = [];\n                                $this.loadDataGetList();\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: \"错误4\",\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: \"错误4.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误4.2\",\n                    content: \"执行“查询事件”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context9.stop();\n            }\n          }\n        }, _callee9);\n      }))();\n    },\n    //查询数据类数据信息\n    loadDataGetList: function loadDataGetList() {\n      var _this8 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n        var condition, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                try {\n                  uni.showLoading({\n                    title: \"加载中...\",\n                    mask: true\n                  });\n                  //条件查询\n                  condition = _this8.wheres;\n                  if (_this8.where) {\n                    if (condition) condition += ' and ';\n                    condition += _this8.where;\n                  }\n                  // console.log(condition);\n                  // console.log(this.orderby);\n                  $this = _this8;\n                  dataInfo = {\n                    class_id: _this8.param.DataCls.id,\n                    attrs: [],\n                    condition: _this8.toWhereBase64String(\"\" + condition + \"\"),\n                    prj_rel_type: \"\",\n                    order_by: _this8.orderby,\n                    page_size: _this8.page_size,\n                    page: _this8.pageindex,\n                    query_id: _this8.query_id\n                  };\n                  _this8.$store.dispatch('dataObjQuery', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:956\");\n                    uni.hideLoading();\n                    if (ret.err_code == 0) {\n                      // var list=[];\n                      $this.query_id = '';\n                      if (ret.result) {\n                        $this.page_count = ret.result.page_count;\n                        if (ret.result.page_count > 1) $this.query_id = ret.result.query_id;\n                        if ($this.ListPageHtml_Show.event.id) {\n                          ret.result.obj_list.forEach(function (obj) {\n                            var info = {\n                              id: obj.id\n                            };\n                            obj.attr_list.forEach(function (attr) {\n                              info[attr.name] = attr.value;\n                            });\n                            var detailStyle = {\n                              SelBut_Checked: false,\n                              form: {},\n                              info: info\n                            };\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                          });\n                          // console.log(this.detail1StyleDefList);\n                          var jsonlist = [];\n                          $this.detail1StyleDefList.forEach(function (attr) {\n                            jsonlist.push({\n                              id: attr.info.id,\n                              attrs: Object.keys(attr.info).map(function (a) {\n                                return {\n                                  attr: a,\n                                  value: attr.info[a] || \"\"\n                                };\n                              })\n                            });\n                          });\n                          // console.log(jsonlist);\n                          var data_json = _base.default.encode(JSON.stringify(jsonlist));\n                          var eventid = $this.ListPageHtml_Show.event.id;\n                          if (!$this.ListPageHtml_Show.event.id.includes('{')) eventid = '{' + $this.ListPageHtml_Show.event.id + '}';\n                          //HTML页面事件\n                          $this.runCustomEvent({\n                            ed_type: 0,\n                            start_transaction: true,\n                            class_id: $this.param.DataCls.id,\n                            event_id: eventid,\n                            data_json: data_json\n                          });\n                        } else {\n                          // $this.detail1StyleDefList=[];\n                          ret.result.obj_list.forEach(function (obj) {\n                            var styleStr = JSON.stringify($this.detail1_styledef);\n                            var detailStyle = JSON.parse(styleStr);\n                            // var info ={\n                            //     S_ID:obj.id,\n                            // };\n                            obj.attr_list.forEach(function (attr) {\n                              // info[attr.name]=attr.value;\n                              detailStyle.form.items.forEach(function (ele) {\n                                if (ele.name != 'Layout') {\n                                  if (ele.fieldId == attr.name) ele.value = attr.value;\n                                } else if (ele.name == 'Layout') {\n                                  ele.setting.colList.forEach(function (col) {\n                                    if (col) {\n                                      if (col.fieldId == attr.name) col.value = attr.value;\n                                    }\n                                  });\n                                }\n                              });\n                            });\n                            detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n                            detailStyle.form.objId = obj.id;\n                            detailStyle.form.attrs = obj.attr_list;\n                            $this.detail1StyleDefList.push(detailStyle);\n                            $this.activelist.push({\n                              active: false\n                            });\n                            //list.push(info);\n                          });\n                        }\n\n                        // 解决view层不同步的问题\n                        // $this.scrollTop = $this.old.scrollTop;\n                        $this.isScroll = false;\n                        setTimeout(function () {\n                          $this.isScroll = true;\n                        }, 1000);\n                        // console.log($this.detail1StyleDefList);\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误5\",\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: \"错误5.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误5.2\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context10.stop();\n            }\n          }\n        }, _callee10);\n      }))();\n    },\n    //刷新\n    Refresh: function Refresh(value) {\n      //刷新当前页面\n      // location.reload();\n      uni.redirectTo({\n        url: '../modal/3200?param=' + JSON.stringify(this.$data.param) + \"&titlename=\" + this.$data.title\n      });\n    },\n    //点击显示浏览对象显示页面\n    onViewPageClick: function onViewPageClick(style) {\n      var _this9 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n        var $this;\n        return _regenerator.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                if (_this9.param.ViewPage) {\n                  if (_this9.param.ViewPage.View_UIDef) {\n                    _this9.styledef = style;\n                    $this = _this9;\n                    uni.navigateTo({\n                      url: '../modal/3200_view?param=' + JSON.stringify(_this9.param) + \"&titlename=\" + _this9.title + \"&style=\" + JSON.stringify(style),\n                      events: {\n                        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据\n                        ExitViewEvent: function ExitViewEvent(data) {\n                          var _$this$param$ViewPage;\n                          __f__(\"log\", data, \" at pages/modal/3200.vue:1082\");\n                          //退出页面后事件\n                          var eventid = (_$this$param$ViewPage = $this.param.ViewPage.Exit_View_Event) === null || _$this$param$ViewPage === void 0 ? void 0 : _$this$param$ViewPage.id;\n                          if (eventid) {\n                            try {\n                              var obj_attr = {\n                                'S_ID': $this.styledef.form.objId\n                              };\n                              $this.styledef.form.attrs.forEach(function (attr) {\n                                obj_attr[attr.name] = attr.value;\n                              });\n                              // console.log(obj_attr);\n                              var input_param = _base.default.encode(JSON.stringify(obj_attr));\n                              $this.runCustomEvent({\n                                ed_type: 0,\n                                start_transaction: true,\n                                class_id: $this.param.DataCls.id,\n                                event_id: eventid,\n                                obj_attr: obj_attr,\n                                input_param: input_param\n                              });\n                            } catch (ex) {\n                              var tip = typeof ex == \"string\" ? ex : ex.message;\n                              uni.showModal({\n                                title: \"错误\",\n                                content: tip,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      }\n                    });\n                  }\n                }\n              case 1:\n              case \"end\":\n                return _context11.stop();\n            }\n          }\n        }, _callee11);\n      }))();\n    },\n    //点击按钮\n    onBtnClick: function onBtnClick(btn, style) {\n      var that = this;\n      if (btn.Prompt) {\n        uni.showModal({\n          title: '提示',\n          content: btn.PromptContent || \"是否确定?\",\n          success: function success(res) {\n            if (res.confirm) {\n              that.onButtonClicked(btn, style);\n              // } else if (res.cancel) {\n              // \tconsole.log('用户点击取消');\n            }\n          }\n        });\n      } else that.onButtonClicked(btn, style);\n    },\n    //点击按钮列表\n    actionSheetTap: function actionSheetTap() {\n      var that = this;\n      var itemlist = [];\n      this.param.ListPage.Page_Button.forEach(function (btn) {\n        itemlist.push(btn.ShowName);\n      });\n      uni.showActionSheet({\n        // title: '按钮列表',\n        itemList: itemlist,\n        success: function success(e) {\n          __f__(\"log\", e.tapIndex, \" at pages/modal/3200.vue:1140\");\n          var btn = that.param.ListPage.Page_Button[e.tapIndex];\n          if (btn.Prompt) {\n            uni.showModal({\n              title: '提示',\n              content: btn.PromptContent || \"是否确定?\",\n              success: function success(res) {\n                if (res.confirm) {\n                  that.onButtonClicked(btn);\n                  // } else if (res.cancel) {\n                  // \tconsole.log('用户点击取消');\n                }\n              }\n            });\n          } else that.onButtonClicked(btn);\n        }\n      });\n    },\n    //处理相关按钮\n    onButtonClicked: function onButtonClicked(btn, style) {\n      var _this10 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {\n        var enviroment, tip;\n        return _regenerator.default.wrap(function _callee12$(_context12) {\n          while (1) {\n            switch (_context12.prev = _context12.next) {\n              case 0:\n                style = style || '';\n                try {\n                  enviroment = {\n                    button: \"top\",\n                    button_name: btn.ShowName,\n                    cls_id: btn.Cls_ID,\n                    function: \"3200\",\n                    master: {}\n                  };\n                  if (btn.FunCode == \"Add\" || btn.FunCode == \"Modify\") {\n                    if (btn.Edit_dlg.Model == \"small\") {\n                      _this10.showAddSmallDialog(btn, style, enviroment);\n                    }\n                  } else if (btn.FunCode == \"Delete\") {\n                    _this10.DeleteObj(btn, style, enviroment);\n                    // } else if (btn.FunCode == \"TriggerEvent\") {\n                    //   this.triggerEvent(btn, style, enviroment);\n                  } else {\n                    uni.showModal({\n                      title: \"提示\",\n                      content: \"未实现\",\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 2:\n              case \"end\":\n                return _context12.stop();\n            }\n          }\n        }, _callee12);\n      }))();\n    },\n    //新增修改小窗口数据\n    showAddSmallDialog: function showAddSmallDialog(btn, style, enviroment) {\n      var data = {\n        Add_BtnName: btn.ShowName,\n        EditDlgMode: btn.Edit_dlg.Model,\n        clsid: this.param.DataCls.id,\n        cls_name: this.param.DataCls.name,\n        Edit_dlg: btn.Edit_dlg\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../modal/3018?param=' + JSON.stringify(data) + \"&titlename=\" + btn.Edit_dlg.Name + \"&type=addDataObj\",\n        events: {\n          // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据\n          addDataObj: function addDataObj(data) {\n            __f__(\"log\", data, \" at pages/modal/3200.vue:1200\");\n            $this.Refresh();\n          }\n        }\n      });\n    },\n    //删除数据对象\n    DeleteObj: function DeleteObj(btn, style, enviroment) {\n      // console.log(style);\n      var $this = this;\n      uni.showModal({\n        title: '提示',\n        content: '确定删除该数据!',\n        success: function success(res) {\n          if (res.confirm) {\n            var objID = style.form.objId;\n            if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n            var dataInfo = {\n              class_id: btn.Cls_ID,\n              class_name: '',\n              obj_id: objID\n            };\n            // console.log(dataInfo);\n            $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n              // console.log(ret);\n              if (ret.err_code == 0) {\n                //执行后处理事件\n                $this.AfterProcess_Event(btn.clsId, btm.AfterProcess_Event, enviroment);\n                //清除当前列表数据\n                $this.detail1StyleDefList.forEach(function (ele, index) {\n                  if (ele.form.objId == objID) {\n                    $this.detail1StyleDefList.splice(index, 1);\n                  }\n                });\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"删除成功!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              } else {\n                uni.showModal({\n                  title: \"错误6.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: \"错误6\",\n                content: ex.errMsg,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            });\n          } else if (res.cancel) {}\n        }\n      });\n    },\n    //执行后处理事件\n    AfterProcess_Event: function AfterProcess_Event(clsId, afterProcess_Event, enviroment) {\n      var _this11 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n        var tip;\n        return _regenerator.default.wrap(function _callee13$(_context13) {\n          while (1) {\n            switch (_context13.prev = _context13.next) {\n              case 0:\n                _context13.prev = 0;\n                if (!afterProcess_Event.ID) {\n                  _context13.next = 4;\n                  break;\n                }\n                _context13.next = 4;\n                return _this11.runCustomEvent({\n                  ed_type: 0,\n                  start_transaction: true,\n                  class_id: clsId,\n                  event_id: afterProcess_Event.ID\n                });\n              case 4:\n                _context13.next = 10;\n                break;\n              case 6:\n                _context13.prev = 6;\n                _context13.t0 = _context13[\"catch\"](0);\n                tip = typeof _context13.t0 == \"string\" ? _context13.t0 : _context13.t0.message;\n                uni.showModal({\n                  title: \"错误7\",\n                  content: tip,\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              case 10:\n              case \"end\":\n                return _context13.stop();\n            }\n          }\n        }, _callee13, null, [[0, 6]]);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this12 = this;\n      //扫码功能\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3200.vue:1273\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this12;\n        __f__(\"log\", item, \" at pages/modal/3200.vue:1278\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this12.head_styledef.form.model[attr] = item.value;\n          var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n          var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n          var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n          var isflag = false;\n          if (onChangeEvent.id) {\n            //内容变化后事件\n            $this.onChange(onChangeEvent);\n          } else {\n            $this.where = '';\n            if (item.value) $this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n            $this.query_id = '';\n            $this.pageindex = 1;\n            $this.detail1StyleDefList = [];\n            $this.loadDataGetList();\n          }\n          if (item.value) {\n            //第一个输入框不为空\n            $this.focusMateria = true; //初始化,第二个输入框focus属性\n            // setTimeout(function(){\n            // \t$this.focusMateria=true; //第二个输入框获取焦点\n            setTimeout(function () {\n              uni.hideKeyboard();\n            }, 100);\n            // },500);\n          }\n          // if(onSuffixClickCallbackEvent.id){   //后图标点击事件\n          //   this.onSuffixClick(onSuffixClickCallbackEvent);\n          // }\n          // if(onSuffixClickEvent.id){   //后图标点击回调\n          //   this.onSuffixClickCallback(onSuffixClickEvent);\n          // }\n        }\n      });\n    },\n    onEnterChange: function onEnterChange(item) {\n      //回车,点击按钮,取消节点事件\n      // console.log(item);\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 onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n        var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n        var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n        var isflag = false;\n        if (onChangeEvent.id) {\n          //内容变化后事件\n          this.onChange(onChangeEvent);\n        } else {\n          this.where = '';\n          if (item.value) this.where = item.fieldId + \" like '%\" + item.value + \"%'\";\n          this.query_id = '';\n          this.pageindex = 1;\n          this.detail1StyleDefList = [];\n          this.loadDataGetList();\n        }\n        // if(onSuffixClickCallbackEvent.id){   //后图标点击事件\n        //   this.onSuffixClick(onSuffixClickCallbackEvent);\n        // }\n        // if(onSuffixClickEvent.id){   //后图标点击回调\n        //   this.onSuffixClickCallback(onSuffixClickEvent);\n        // }\n      }\n    },\n    // 内容变化后事件\n    onChange: function onChange(event) {\n      var _this13 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {\n        var obj_attr, input_param, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    obj_attr = _this13.head_styledef.form.model; // console.log(obj_attr);\n                    input_param = _base.default.encode(JSON.stringify(Object.keys(obj_attr).map(function (a) {\n                      return {\n                        attr: a,\n                        value: obj_attr[a] || \"\"\n                      };\n                    })));\n                    $this = _this13;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: _this13.$data.head_styledef.form.clsId,\n                      class_name: '',\n                      event_id: event.id,\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: '',\n                      global_attr: '',\n                      input_param: input_param\n                    };\n                    _this13.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_dlg_attr\") {\n                                // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n                                var data = item.value;\n                                $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n                                  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(ele, index) {\n                                    return _regenerator.default.wrap(function _callee15$(_context15) {\n                                      while (1) {\n                                        switch (_context15.prev = _context15.next) {\n                                          case 0:\n                                            data.forEach( /*#__PURE__*/function () {\n                                              var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(ele2, index) {\n                                                return _regenerator.default.wrap(function _callee14$(_context14) {\n                                                  while (1) {\n                                                    switch (_context14.prev = _context14.next) {\n                                                      case 0:\n                                                        if (ele.fieldId == ele2.attr) {\n                                                          ele.value = ele2.value;\n                                                        }\n                                                      case 1:\n                                                      case \"end\":\n                                                        return _context14.stop();\n                                                    }\n                                                  }\n                                                }, _callee14);\n                                              }));\n                                              return function (_x6, _x7) {\n                                                return _ref4.apply(this, arguments);\n                                              };\n                                            }());\n                                          case 1:\n                                          case \"end\":\n                                            return _context15.stop();\n                                        }\n                                      }\n                                    }, _callee15);\n                                  }));\n                                  return function (_x4, _x5) {\n                                    return _ref3.apply(this, arguments);\n                                  };\n                                }());\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          }\n                        }\n                      } else {\n                        uni.showModal({\n                          title: \"错误8\",\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: \"错误8.1\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误8.2\",\n                    content: \"执行“内容变化后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context16.stop();\n            }\n          }\n        }, _callee16);\n      }))();\n    },\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    //事件处理\n    runCustomEvent: function runCustomEvent(dataInfo) {\n      var _this14 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {\n        var $this, tip;\n        return _regenerator.default.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                try {\n                  $this = _this14;\n                  _this14.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                    __f__(\"log\", ret, \" at pages/modal/3200.vue:1444\");\n                    if (ret.err_code == 0) {\n                      var result = ret.result;\n                      if (result.ret != 0) {\n                        var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                        if (result.ret == 801) uni.showModal({\n                          title: '提示',\n                          content: tip,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });else uni.showModal({\n                          title: '提示',\n                          content: tip + ',提示:' + result.ret,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                        return false;\n                      } else {\n                        var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                        if (tip) uni.showModal({\n                          title: '提示',\n                          content: tip,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                        if (result.result_type == 0 && result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"goback_to_pre_page\") {\n                              //返回上一页\n                              var value = item.value;\n                              uni.navigateBack({\n                                delta: 1 //返回层数,2则上上页\n                              });\n                            } else if (item.action_type == \"hidden_button\") {\n                              //隐藏按钮\n                              var value = item.value;\n                              value.forEach(function (btn) {\n                                var index = $this.param.ListPage.Page_Button.findIndex(function (button) {\n                                  return button.ShowName == btn;\n                                });\n                                if (index > -1) $this.param.ListPage.Page_Button.splice(index, 1);\n                              });\n                              // } else if(item.action_type == \"refresh_cur_row\"){ //\n                              // \tvar value = item.value;\n                            } else if (item.action_type == \"set_panel_html\") {\n                              //显示Html页面\n                              // var value = item.value;\n                              $this.ListHtml_Panel = item.value;\n                              // $this.detail1StyleDefList.forEach((ele,index)=>{\n                              // \tele.ListHtml_Panel = item.value[index];\n                              // });\n                            } else {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: \"当前action_type:\" + item.action_type + \"未处理\",\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          });\n                        } else {\n                          // this.detail2StyleDefList=[];\n                          if (result.info) {\n                            uni.showModal({\n                              title: \"提示\",\n                              content: result.info,\n                              showCancel: false,\n                              confirmText: \"取消\"\n                            });\n                          }\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误9\",\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: \"错误9.1\",\n                      content: ex.errMsg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误9.2\",\n                    content: \"执行事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context17.stop();\n            }\n          }\n        }, _callee17);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //取消\n      var eventChannel = this.$scope.eventChannel;\n      // const eventChannel = this.getOpenerEventChannel();\n      eventChannel.emit('view_3201', \"\");\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    /**\r\n     * 只支持[\"column1='A' or column2='B'\", \"column3='C' and column4='D'\", \"column5='E'\"]这种格式\r\n     * {\r\n     *     \"model\": 0 / 1,\r\n     *     \"condition\":\r\n     *     [\r\n     *         [\r\n     *             { },\r\n     *             { },\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ]\r\n     *     ]\r\n     * }\r\n     */\n    toWhereBase64String: function toWhereBase64String(list) {\n      if (typeof list == 'string') list = [list];\n      var sql = [];\n      var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=', '>', ' like'];\n      list.forEach(function (ls) {\n        var where = ls.trim().toLowerCase();\n        if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\\(/, '').replace(/\\)$/, '');\n        if (where.includes(' and ')) {\n          // 二级and放在第一级数组中\n          where.split(' and ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$;\n              var values = l.split(sep);\n              var field = (_values$ = values[0]) === null || _values$ === void 0 ? void 0 : _values$.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$2;\n                value = (_values$2 = values[1]) === null || _values$2 === void 0 ? void 0 : _values$2.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n        } else if (where.includes(' or ')) {\n          // 二级or放在第二级同一组数组中\n          var s = [];\n          where.split(' or ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$3;\n              var values = l.split(sep);\n              var field = (_values$3 = values[0]) === null || _values$3 === void 0 ? void 0 : _values$3.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$4;\n                value = (_values$4 = values[1]) === null || _values$4 === void 0 ? void 0 : _values$4.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n          sql.push(s);\n        } else {\n          var li = where;\n          // 单一查询条件直接放在第一级数组中\n          var l = li.trim();\n          if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n          var sep = '';\n          for (var i = 0; i < seps.length; i++) {\n            if (l.includes(seps[i])) {\n              sep = seps[i];\n              break;\n            }\n          }\n          if (sep) {\n            var _values$5;\n            var values = l.split(sep);\n            var field = (_values$5 = values[0]) === null || _values$5 === void 0 ? void 0 : _values$5.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n            var value = '';\n            var op = sep.trim();\n            if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n              value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n              if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n            } else {\n              var _values$6;\n              value = (_values$6 = values[1]) === null || _values$6 === void 0 ? void 0 : _values$6.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n              if (['in', 'not in'].includes(op)) {\n                value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                value = value.split(',').map(function (v) {\n                  return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                });\n              }\n            }\n            sql.push([{\n              field: field,\n              value: value,\n              op: op\n            }]);\n          }\n        }\n      });\n      if (sql.length > 0) return _base.default.encode(JSON.stringify({\n        model: 1,\n        condition: sql\n      }));else return '';\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzIwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsIm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsImUiLCJpc0ZpbHRlciIsIm9uQmFja1ByZXNzIiwiZXZlbnRDaGFubmVsIiwiJHNjb3BlIiwiZW1pdCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiZm9jdXNNYXRlcmlhIiwic3R5bGVkZWYiLCJoZWFkX3N0eWxlZGVmIiwiZm9ybSIsIml0ZW1zIiwiZGV0YWlsMV9zdHlsZWRlZiIsImRldGFpbDFTdHlsZURlZkxpc3QiLCJkZXRhaWwyX3N0eWxlZGVmIiwiZGV0YWlsMlN0eWxlRGVmTGlzdCIsImFjdGl2ZV9pZCIsImFjdGl2ZWxpc3QiLCJ3aGVyZSIsIndoZXJlcyIsIm9yZGVyYnkiLCJxdWVyeV9pZCIsInBhZ2VpbmRleCIsInBhZ2Vfc2l6ZSIsInBhZ2VfY291bnQiLCJzY3JvbGxUb3AiLCJvbGQiLCJpc1Njcm9sbCIsIkxpc3RIdG1sX1BhbmVsIiwiTGlzdFBhZ2VIdG1sX1Nob3ciLCJuYW1lIiwiZXZlbnQiLCJpZCIsIm9uTG9hZCIsIm9wdGlvbnMiLCJ1bmkiLCJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLCJ0aXRsZW5hbWUiLCIkZGF0YSIsIkpTT04iLCJwYXJzZSIsIlNob3dGaWx0ZXIiLCJRdWVyeV9QYW5lbCIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCJEYXRhQ2xzIiwiTGlzdFBhZ2UiLCJMaXN0SXRlbV9VSURlZiIsInVpX3R5cGUiLCJIdG1sX1VJc3R5bGVHZXRJbmZvIiwiRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyIsIk9yZGVyIiwiUXVlcnlfRXZlbnQiLCJvblNlYXJDaGFuZ2UiLCJDb25kaXRpb24iLCJsb2FkRGF0YUdldExpc3QiLCJtZXRob2RzIiwic2Nyb2xsdG9sb3dlciIsInNjcm9sbCIsImRldGFpbCIsImNsYXNzX2lkIiwic3R5bGVfaWQiLCIkdGhpcyIsImRhdGFJbmZvIiwidWlfc3R5bGVfaWQiLCIkc3RvcmUiLCJkaXNwYXRjaCIsInRoZW4iLCJyZXQiLCJlcnJfY29kZSIsInJlc3VsdCIsInN0eWxlX2RlZiIsInJlcGxhY2UiLCJpbmNsdWRlcyIsImRlY29kZSIsImZvckVhY2giLCJlbGUiLCJpbmRleCIsInVzZURpY3QiLCJEaWN0R2V0SW5mbyIsImJpbmQiLCJkaWN0Iiwic2hvd01vZGFsIiwiY29udGVudCIsImVycl9tc2ciLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwiU2VsQnV0X0NoZWNrZWQiLCJ0eXBlIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsInN1Y2Nlc3MiLCJsaXN0IiwiaXRlbU5hbWUiLCJkaWN0X2l0ZW1fbGlzdCIsIml0ZW0iLCJpc19kZWZhdWx0IiwicHVzaCIsInRleHQiLCJ2YWx1ZSIsImF0dHIiLCJmaWVsZElkIiwibW9kZWwiLCJzdHJpbmdpZnkiLCJjbHNpZCIsImV2ZW50aWQiLCJlZF90eXBlIiwic3RhcnRfdHJhbnNhY3Rpb24iLCJldmVudF9pZCIsInRpcCIsImVycl9pbmZvIiwiam9pbiIsImluZm8iLCJyZXN1bHRfdHlwZSIsImFjdGlvbiIsImFjdGlvbl90eXBlIiwiY29uZGl0aW9uIiwib3JkZXIiLCJtZXNzYWdlIiwic2hvd0xvYWRpbmciLCJtYXNrIiwiYXR0cnMiLCJ0b1doZXJlQmFzZTY0U3RyaW5nIiwicHJqX3JlbF90eXBlIiwib3JkZXJfYnkiLCJwYWdlIiwiaGlkZUxvYWRpbmciLCJvYmpfbGlzdCIsIm9iaiIsImF0dHJfbGlzdCIsImRldGFpbFN0eWxlIiwiaHRtbG9iaklkIiwib2JqSWQiLCJhY3RpdmUiLCJqc29ubGlzdCIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJhIiwiZGF0YV9qc29uIiwiZW5jb2RlIiwicnVuQ3VzdG9tRXZlbnQiLCJzdHlsZVN0ciIsInNldHRpbmciLCJjb2xMaXN0IiwiY29sIiwic2V0VGltZW91dCIsIlJlZnJlc2giLCJyZWRpcmVjdFRvIiwidXJsIiwib25WaWV3UGFnZUNsaWNrIiwic3R5bGUiLCJWaWV3UGFnZSIsIlZpZXdfVUlEZWYiLCJuYXZpZ2F0ZVRvIiwiZXZlbnRzIiwiRXhpdFZpZXdFdmVudCIsIkV4aXRfVmlld19FdmVudCIsIm9ial9hdHRyIiwiaW5wdXRfcGFyYW0iLCJvbkJ0bkNsaWNrIiwiYnRuIiwidGhhdCIsIlByb21wdCIsIlByb21wdENvbnRlbnQiLCJyZXMiLCJjb25maXJtIiwib25CdXR0b25DbGlja2VkIiwiYWN0aW9uU2hlZXRUYXAiLCJpdGVtbGlzdCIsIlBhZ2VfQnV0dG9uIiwiU2hvd05hbWUiLCJzaG93QWN0aW9uU2hlZXQiLCJpdGVtTGlzdCIsInRhcEluZGV4IiwiZW52aXJvbWVudCIsImJ1dHRvbiIsImJ1dHRvbl9uYW1lIiwiY2xzX2lkIiwiQ2xzX0lEIiwiZnVuY3Rpb24iLCJtYXN0ZXIiLCJGdW5Db2RlIiwiRWRpdF9kbGciLCJNb2RlbCIsInNob3dBZGRTbWFsbERpYWxvZyIsIkRlbGV0ZU9iaiIsIkFkZF9CdG5OYW1lIiwiRWRpdERsZ01vZGUiLCJjbHNfbmFtZSIsIk5hbWUiLCJhZGREYXRhT2JqIiwib2JqSUQiLCJjbGFzc19uYW1lIiwib2JqX2lkIiwiQWZ0ZXJQcm9jZXNzX0V2ZW50IiwiY2xzSWQiLCJidG0iLCJzcGxpY2UiLCJjYW5jZWwiLCJhZnRlclByb2Nlc3NfRXZlbnQiLCJJRCIsIm9udGFwIiwiZ2V0QXBwIiwib25TY2FuIiwiZGVjb2RlZGF0YSIsImhpZGVLZXlib2FyZCIsIm9sZHZhbHVlIiwib25DaGFuZ2VFdmVudCIsIm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50Iiwib25TdWZmaXhDbGlja0V2ZW50IiwiaXNmbGFnIiwib25DaGFuZ2UiLCJvbkVudGVyQ2hhbmdlIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsImVsZTIiLCJvblBhbmVsQ2xpY2siLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsImZpbmRJbmRleCIsInNxbCIsInNlcHMiLCJscyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNwbGl0IiwibGkiLCJsIiwic2VwIiwiaSIsImxlbmd0aCIsInZhbHVlcyIsImZpZWxkIiwib3AiLCJ2IiwicyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBcWxCQTtBQXJsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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RyxDQUFDLENBQUNsRyxHQUFHLENBQUMsVUFBQTJHLENBQUM7a0JBQUEsT0FBSUEsQ0FBQyxDQUFDYixJQUFJLEVBQUUsQ0FBQ2xLLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUNBLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUFBLEVBQUM7Y0FDckY7WUFDSjtZQUNBK0osR0FBRyxDQUFDbkksSUFBSSxDQUFDLENBQUM7Y0FBRWlKLEtBQUssRUFBTEEsS0FBSztjQUFFL0ksS0FBSyxFQUFMQSxLQUFLO2NBQUVnSixFQUFFLEVBQUZBO1lBQUcsQ0FBQyxDQUFDLENBQUM7VUFDcEM7UUFDSjtNQUNKLENBQUMsQ0FBQztNQUVGLElBQUlmLEdBQUcsQ0FBQ1ksTUFBTSxHQUFHLENBQUMsRUFDZCxPQUFPdFAsYUFBTSxDQUFDa0osTUFBTSxDQUFDdkcsSUFBSSxDQUFDa0UsU0FBUyxDQUFDO1FBQ2hDRCxLQUFLLEVBQUUsQ0FBQztRQUNSYyxTQUFTLEVBQUVnSDtNQUNmLENBQUMsQ0FBQyxDQUFDLE1BRUgsT0FBTyxFQUFFO0lBQ2pCO0VBRUM7QUFDRixDQUFDO0FBQUEsMkIiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuLy9cclxuXHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbW9kdWxlczp7XHJcblx0QmFzZTY0LFxyXG4gIH0sXHJcbiAgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwKGUpIHtcclxuIC8vICBcdGNvbnNvbGUubG9nKGUpO1xyXG5cdC8vIGUudGV4dD1cIlxcdWU5MjRcIjtcclxuICBcdC8vIGNvbnNvbGUubG9nKGUuZm9udFNpemUpO1xyXG5cdGlmKHRoaXMuaXNGaWx0ZXIpXHJcblx0ICAgIHRoaXMuaXNGaWx0ZXI9ZmFsc2U7XHJcblx0ZWxzZVxyXG5cdCAgICB0aGlzLmlzRmlsdGVyPXRydWU7XHJcbiAgfSxcclxuICBvbkJhY2tQcmVzcyhlKXtcclxuXHQvLyBjb25zb2xlLmxvZyhcIuebkeWQrOi/lOWbnuaMiemSruS6i+S7tlwiLGUpO1xyXG5cdHZhciBldmVudENoYW5uZWwgPSB0aGlzLiRzY29wZS5ldmVudENoYW5uZWw7XHJcblx0Ly8gY29uc3QgZXZlbnRDaGFubmVsID0gdGhpcy5nZXRPcGVuZXJFdmVudENoYW5uZWwoKTtcclxuXHRldmVudENoYW5uZWwuZW1pdCgndmlld18zMjAxJyxcIlwiKTtcclxuXHQvLyB1bmkubmF2aWdhdGVCYWNrKHtcclxuXHQvLyBcdGRlbHRhOjEgLC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdC8vIH0pO1xyXG5cdC8vIHJldHVybiB0cnVlO1xyXG4gIH0sXHRcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHQgIHRpdGxlOifmlrDlop4nLFxyXG4gICAgICBpc0ZpbHRlcjp0cnVlLFxyXG4gICAgICBwYXJhbToge30sXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBzdHlsZWRlZjp7fSxcclxuXHQgIGhlYWRfc3R5bGVkZWY6e1xyXG5cdFx0Zm9ybTp7XHJcblx0XHRcdGl0ZW1zOltdXHJcblx0XHR9XHJcblx0ICB9LFxyXG4gICAgICBkZXRhaWwxX3N0eWxlZGVmOnt9LFxyXG4gICAgICBkZXRhaWwxU3R5bGVEZWZMaXN0OltdLFxyXG4gICAgICBkZXRhaWwyX3N0eWxlZGVmOnt9LFxyXG4gICAgICBkZXRhaWwyU3R5bGVEZWZMaXN0OltdLFxyXG5cdCAgaXRlbXM6IFtdLFxyXG4gICAgICBhY3RpdmVfaWQ6JycsXHJcblx0ICBhY3RpdmVsaXN0OltdLFxyXG4gICAgICB3aGVyZTonJyxcclxuICAgICAgd2hlcmVzOicnLFxyXG4gICAgICBvcmRlcmJ5OicnLFxyXG4gICAgICBxdWVyeV9pZDonJyxcclxuICAgICAgcGFnZWluZGV4OjEsXHJcbiAgICAgIHBhZ2Vfc2l6ZToxMCxcclxuICAgICAgcGFnZV9jb3VudDowLFxyXG5cdCAgc2Nyb2xsVG9wOiAwLFxyXG5cdCAgb2xkOiB7XHJcblx0ICBcdHNjcm9sbFRvcDogMFxyXG5cdCAgfSxcclxuXHQgIGlzU2Nyb2xsOnRydWUsXHJcblx0ICAvL+iOt+WPluaVsOaNruexu+eahEhUTUzpobXpnaJcclxuXHQgIExpc3RIdG1sX1BhbmVsOlwiXCIsXHJcblx0ICBMaXN0UGFnZUh0bWxfU2hvdzoge1xyXG5cdCAgXHRuYW1lOiBcIlwiLFxyXG5cdCAgXHRldmVudDoge1xyXG5cdCAgXHRcdGlkOiBcIlwiLFxyXG5cdCAgXHRcdG5hbWU6IFwiXCJcclxuXHQgIFx0fVxyXG5cdCAgfSxcclxuICAgIH07XHJcbiAgfSxcclxuICBhc3luYyBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0dGhpcy4kZGF0YS50aXRsZSA9IG9wdGlvbnMudGl0bGVuYW1lO1xyXG5cdHRoaXMuJGRhdGEucGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xyXG5cdHRoaXMuaXNGaWx0ZXI9dHJ1ZTtcclxuXHRpZih0aGlzLnBhcmFtLlNob3dGaWx0ZXIpXHJcblx0ICB0aGlzLmlzRmlsdGVyPWZhbHNlO1xyXG5cdC8v6I635Y+W5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0aWYodGhpcy5wYXJhbS5RdWVyeV9QYW5lbCl7XHJcblx0XHR0aGlzLkhlYWRfVUlTdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uUXVlcnlfUGFuZWwuaWQpO1xyXG5cdH1cclxuXHRpZih0aGlzLnBhcmFtLkxpc3RQYWdlLkxpc3RJdGVtX1VJRGVmPy51aV90eXBlPT1cIkhUTUzpobXpnaJcIil7XHJcblx0XHQvLyBIVE1M6aG16Z2iXHJcblx0XHQvL+iOt+WPluaVsOaNruexu+eahEhUTUzpobXpnaJcclxuXHRcdGF3YWl0IHRoaXMuSHRtbF9VSXN0eWxlR2V0SW5mbyh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsdGhpcy5wYXJhbS5MaXN0UGFnZS5MaXN0SXRlbV9VSURlZi5pZCk7XHJcblx0fWVsc2V7XHJcblx0XHRhd2FpdCB0aGlzLkRldGFpbDFfVUlzdHlsZUdldEluZm8odGhpcy5wYXJhbS5EYXRhQ2xzLmlkLHRoaXMucGFyYW0uTGlzdFBhZ2UuTGlzdEl0ZW1fVUlEZWYuaWQpO1xyXG5cdH1cclxuXHR0aGlzLm9yZGVyYnkgPSB0aGlzLnBhcmFtLk9yZGVyP3RoaXMucGFyYW0uT3JkZXI6J1RfQ1JFQVRFIERlc2MnO1xyXG5cdGlmKHRoaXMucGFyYW0uUXVlcnlfRXZlbnQpe1xyXG5cdCAgICBhd2FpdCB0aGlzLm9uU2VhckNoYW5nZSh0aGlzLnBhcmFtLkRhdGFDbHMuaWQsdGhpcy5wYXJhbS5RdWVyeV9FdmVudC5pZCk7XHJcblx0fSBlbHNle1xyXG5cdCAgdGhpcy53aGVyZXMgPSB0aGlzLnBhcmFtLkNvbmRpdGlvbjtcclxuXHQgIHRoaXMucGFnZWluZGV4ID0gMTtcclxuXHQgIHRoaXMucGFnZV9zaXplID0gMztcclxuXHQgIHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdCAgYXdhaXQgdGhpcy5sb2FkRGF0YUdldExpc3QoKTtcclxuXHR9XHJcblx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0Ly/pobXpnaLliJ3lp4vljJbojrflj5bnhKbngrlcclxuXHQvLyB0aGlzLmZvY3VzTWF0ZXJpYT10cnVlOyBcclxuICB9LFx0XHJcbiAgbWV0aG9kczoge1xyXG5cdC8v5rua5Yqo5Yiw5bqV6YOo5ZCO5oeS5Yqg6L295pWw5o2uXHJcblx0YXN5bmMgc2Nyb2xsdG9sb3dlcihlKSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhlKVxyXG5cdFx0aWYodGhpcy5pc1Njcm9sbCl7IC8v5Yik5pat5Yi35paw5LiA5qyh5ZCO5LiN5Lya5oyB57ut5Yi35pawXHJcblx0XHRcdGlmKHRoaXMucGFnZV9jb3VudD09dGhpcy5wYWdlaW5kZXgpe1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnBhZ2VpbmRleCArPSAxO1xyXG5cdFx0XHRpZih0aGlzLndoZXJlIHx8IHRoaXMucGFnZV9jb3VudD09MSkge1xyXG5cdFx0XHQgIHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdFx0XHQgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRhd2FpdCB0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0c2Nyb2xsOiBmdW5jdGlvbihlKSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhlLmRldGFpbC5zY3JvbGxUb3ApXHJcblx0XHR0aGlzLm9sZC5zY3JvbGxUb3AgPSBlLmRldGFpbC5zY3JvbGxUb3BcclxuXHR9LFxyXG5cdGFzeW5jIEhlYWRfVUlTdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQvLyB0aGlzLmZvcm0gPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbGUudXNlRGljdCk7XHJcblx0XHRcdFx0ICAgIGlmKGVsZS51c2VEaWN0PT10cnVlKXsgLy/liKTmlq11c2VEaWN05piv5ZCm5L2/55So5a2X5YW4XHJcblx0XHRcdFx0ICAgICAgICBhd2FpdCB0aGlzLkRpY3RHZXRJbmZvKGVsZS5iaW5kLmRpY3QsaW5kZXgsJ21hc3QnKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHQgICAgXHJcblx0fSxcclxuXHRhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZi5TZWxCdXRfQ2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaCgkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQvLyB2YXIgYWEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChKU09OLnBhcnNlKGFhKSk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdCAgICBcclxuXHR9LFxyXG5cdGFzeW5jIEh0bWxfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsIHN0eWxlX2lkKSB7IC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRjbGFzc19pZDogY2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOiBzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBcIlwiO1xyXG5cdFx0XHRcdGlmIChyZXQucmVzdWx0LnN0eWxlX2RlZikge1xyXG5cdFx0XHRcdFx0Ly9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0XHRzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZywgXCJcIik7XHJcblx0XHRcdFx0XHQvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdFx0aWYgKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHRcclxuXHRcdFx0XHRcdFx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLkxpc3RQYWdlSHRtbF9TaG93ID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYgPyBKU09OLnBhcnNlKHN0eWxlZGVmKSA6IHt9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLkxpc3RQYWdlSHRtbF9TaG93KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzEwXCIsXHJcblx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXggPT4ge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdHRpdGxlOiBcIumUmeivrzEwLjFcIixcclxuXHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcclxuXHR9LFxyXG5cdGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHR0aGlzLmRhdGE9W107XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdGRpY3RfbmFtZTogZGljdC5uYW1lXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RHZXRJbmZvJyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9PntcclxuXHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRpZih0eXBlPT0nbWFzdCcpe1xyXG5cdFx0XHRcdFx0dmFyIGxpc3Q9W107XHJcblx0XHRcdFx0XHR2YXIgaXRlbU5hbWU9Jyc7XHJcblx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5kaWN0X2l0ZW1fbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHQgICAgaWYoaXRlbS5pc19kZWZhdWx0PT0nMScpXHJcblx0XHRcdFx0XHQgICAgICAgIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdFx0ICAgIGxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHQgICAgICAgIHRleHQ6aXRlbS52YWx1ZSxcclxuXHRcdFx0XHRcdCAgICAgICAgdmFsdWU6aXRlbS5uYW1lLFxyXG5cdFx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQvL+aciem7mOiupOWAvO+8jOaYvuekuum7mOiupOWAvFxyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHRcdHZhciBoZWFkX3N0eWxlZGVmID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkdGhpcy5oZWFkX3N0eWxlZGVmKSk7XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmPVtdO1xyXG5cdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZiA9IGhlYWRfc3R5bGVkZWY7XHJcblx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2luZGV4XS5hdHRyX2xpc3Rba2V5XS5kaWN0aXRlbT1zdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRcdC8vIHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIiwgJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHQvLyDmiafooYzmn6Xor6Lkuovku7ZcclxuXHRhc3luYyBvblNlYXJDaGFuZ2UoY2xzaWQsZXZlbnRpZCkge1xyXG5cdCB0cnkge1xyXG5cdCAgICBpZiAoZXZlbnRpZCkge1xyXG5cdCBcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgXHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICBlZF90eXBlOiAwLFxyXG4gICAgICAgICAgICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgICBjbGFzc19pZDogY2xzaWQsXHJcblx0XHRcdGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdCAgICAgIH07XHJcblx0IFx0ICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdCBcdCAgXHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdCBcdCAgXHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHQgXHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7IFxyXG5cdCBcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0IFx0XHRcdCAgICB2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0IFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK3Jlc3VsdC5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdCBcdFx0XHR9ZWxzZXtcclxuXHQgXHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHQgXHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcdFx0XHJcblx0IFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0IFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdCBcdFx0XHRcdFx0XHRpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3F1ZXJ5X2NvbmRpdGlvblwiKXsgXHJcblx0IFx0XHRcdFx0XHRcdCAgICB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdCBcdFx0XHRcdFx0XHQgICAgJHRoaXMud2hlcmVzID0gdmFsdWUuY29uZGl0aW9uO1xyXG5cdCBcdFx0XHRcdFx0XHQgICAgJHRoaXMub3JkZXJieSA9IHZhbHVlLm9yZGVyP3ZhbHVlLm9yZGVyOiR0aGlzLm9yZGVyYnk7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5wYWdlaW5kZXggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMucXVlcnlfaWQgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHQgXHRcdFx0XHRcdFx0ICAgICR0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdCBcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHQgXHRcdFx0XHR9ZWxzZXtcclxuXHQgXHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHQgXHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHQgXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdFx0XHRcdFx0fVxyXG5cdCBcdFx0XHRcdH1cclxuXHQgXHRcdFx0fVxyXG5cdCBcdCAgXHRcdFxyXG5cdCBcdCAgXHR9ZWxzZXtcclxuXHQgXHQgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdCAgXHR9XHJcblx0IFx0ICB9KS5jYXRjaChleD0+e1xyXG5cdCBcdCAgXHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0IFx0ICBcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0ICB9KTtcclxuXHQgICAgIH1cclxuXHQgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgIHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHQgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMlwiLGNvbnRlbnQ6XCLmiafooYzigJzmn6Xor6Lkuovku7bigJ3kuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcclxuXHQgfVxyXG5cdH0sXHJcblx0Ly/mn6Xor6LmlbDmja7nsbvmlbDmja7kv6Hmga9cclxuXHRhc3luYyBsb2FkRGF0YUdldExpc3QoKXsgICBcclxuXHQgIHRyeXtcclxuXHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXHJcblx0XHRcdG1hc2s6dHJ1ZVxyXG5cdFx0fSk7XHJcblx0ICAgIC8v5p2h5Lu25p+l6K+iXHJcblx0ICAgIHZhciBjb25kaXRpb24gPSB0aGlzLndoZXJlcztcclxuXHQgICAgaWYodGhpcy53aGVyZSl7XHJcblx0ICAgICAgaWYoY29uZGl0aW9uKSBjb25kaXRpb24gKz0nIGFuZCAnO1xyXG5cdCAgICAgIGNvbmRpdGlvbis9dGhpcy53aGVyZTtcclxuXHQgICAgfVxyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhjb25kaXRpb24pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLm9yZGVyYnkpO1xyXG5cdCAgICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6IHRoaXMucGFyYW0uRGF0YUNscy5pZCxcclxuXHRcdFx0YXR0cnM6IFtdLFxyXG5cdFx0XHRjb25kaXRpb246IHRoaXMudG9XaGVyZUJhc2U2NFN0cmluZyhcIlwiKyBjb25kaXRpb24gK1wiXCIpLCBcclxuXHRcdFx0cHJqX3JlbF90eXBlOiBcIlwiLFxyXG5cdFx0XHRvcmRlcl9ieTogdGhpcy5vcmRlcmJ5LFxyXG5cdFx0XHRwYWdlX3NpemU6IHRoaXMucGFnZV9zaXplLFxyXG5cdFx0XHRwYWdlOiB0aGlzLnBhZ2VpbmRleCxcclxuXHRcdFx0cXVlcnlfaWQ6IHRoaXMucXVlcnlfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpRdWVyeScsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHQvLyB2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHQkdGhpcy5xdWVyeV9pZCA9ICcnO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQpe1xyXG5cdFx0XHRcdFx0JHRoaXMucGFnZV9jb3VudCA9IHJldC5yZXN1bHQucGFnZV9jb3VudDtcclxuXHRcdFx0XHRcdGlmKHJldC5yZXN1bHQucGFnZV9jb3VudD4xKSAkdGhpcy5xdWVyeV9pZCA9IHJldC5yZXN1bHQucXVlcnlfaWQ7XHJcblx0XHRcdFx0XHRpZigkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdy5ldmVudC5pZCl7XHJcblx0XHRcdFx0XHRcdHJldC5yZXN1bHQub2JqX2xpc3QuZm9yRWFjaCgob2JqKSA9PiB7XHJcblx0XHRcdFx0XHQgICAgICB2YXIgaW5mbyA9e1xyXG5cdFx0XHRcdFx0ICAgICAgICAgIGlkOm9iai5pZCxcclxuXHRcdFx0XHRcdCAgICAgIH07XHJcblx0XHRcdFx0XHQgICAgICBvYmouYXR0cl9saXN0LmZvckVhY2goKGF0dHIpID0+IHtcclxuXHRcdFx0XHRcdCAgICAgICAgaW5mb1thdHRyLm5hbWVdPWF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHQgICAgICB9KTtcclxuXHRcdFx0XHRcdCAgICAgIHZhciBkZXRhaWxTdHlsZSA9e1xyXG5cdFx0XHRcdFx0ICAgICAgICAgIFNlbEJ1dF9DaGVja2VkOmZhbHNlLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGZvcm06e30sXHJcblx0XHRcdFx0XHQgICAgICAgICAgaW5mbzppbmZvXHJcblx0XHRcdFx0XHQgICAgICB9O1xyXG5cdFx0XHRcdFx0ICAgICAgZGV0YWlsU3R5bGUuZm9ybS5odG1sb2JqSWQgPSBvYmouaWQ/b2JqLmlkLnJlcGxhY2UoLy0vZywnJykucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKTonbnVsbCc7XHJcblx0XHRcdFx0XHQgICAgICBkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gb2JqLmlkO1xyXG5cdFx0XHRcdFx0ICAgICAgZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IG9iai5hdHRyX2xpc3Q7XHJcblx0XHRcdFx0XHQgICAgICAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHRcdFx0XHQgICR0aGlzLmFjdGl2ZWxpc3QucHVzaCh7YWN0aXZlOmZhbHNlfSk7XHJcblx0XHRcdFx0XHQgICAgfSk7XHJcblx0XHRcdFx0XHQgICAgLy8gY29uc29sZS5sb2codGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcdCAgICB2YXIganNvbmxpc3Q9W107XHJcblx0XHRcdFx0XHQgICAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuXHRcdFx0XHRcdCAgICAgIGpzb25saXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0ICAgICAgICBpZDphdHRyLmluZm8uaWQsXHJcblx0XHRcdFx0XHQgICAgICAgIGF0dHJzOiBPYmplY3Qua2V5cyhhdHRyLmluZm8pLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdCAgICAgICAgICBhdHRyOiBhLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIHZhbHVlOiBhdHRyLmluZm9bYV0gfHwgXCJcIixcclxuXHRcdFx0XHRcdCAgICAgICAgfSkpXHJcblx0XHRcdFx0XHQgICAgICB9KTtcclxuXHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhX2pzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb25saXN0KSk7XHJcblx0XHRcdFx0XHQgICAgdmFyIGV2ZW50aWQgPSAkdGhpcy5MaXN0UGFnZUh0bWxfU2hvdy5ldmVudC5pZDtcclxuXHRcdFx0XHRcdCAgICBpZiAoISR0aGlzLkxpc3RQYWdlSHRtbF9TaG93LmV2ZW50LmlkLmluY2x1ZGVzKCd7JykpXHJcblx0XHRcdFx0XHQgICAgXHRldmVudGlkID0gJ3snICsgJHRoaXMuTGlzdFBhZ2VIdG1sX1Nob3cuZXZlbnQuaWQgKyAnfSc7XHJcblx0XHRcdFx0XHQgICAgLy9IVE1M6aG16Z2i5LqL5Lu2XHJcblx0XHRcdFx0XHQgICAgJHRoaXMucnVuQ3VzdG9tRXZlbnQoe1xyXG5cdFx0XHRcdFx0ICAgIFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdCAgICBcdHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0ICAgIFx0Y2xhc3NfaWQ6ICR0aGlzLnBhcmFtLkRhdGFDbHMuaWQsXHJcblx0XHRcdFx0XHQgICAgXHRldmVudF9pZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICBcdGRhdGFfanNvbixcclxuXHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0ICAvLyAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0ICByZXQucmVzdWx0Lm9ial9saXN0LmZvckVhY2goKG9iaikgPT4ge1xyXG5cdFx0XHRcdFx0XHR2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSgkdGhpcy5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdFx0dmFyIGRldGFpbFN0eWxlID0gSlNPTi5wYXJzZShzdHlsZVN0cik7XHJcblx0XHRcdFx0XHRcdC8vIHZhciBpbmZvID17XHJcblx0XHRcdFx0XHRcdC8vICAgICBTX0lEOm9iai5pZCxcclxuXHRcdFx0XHRcdFx0Ly8gfTtcclxuXHRcdFx0XHRcdFx0b2JqLmF0dHJfbGlzdC5mb3JFYWNoKChhdHRyKSA9PiB7XHJcblx0XHRcdFx0XHRcdCAgLy8gaW5mb1thdHRyLm5hbWVdPWF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdCAgZGV0YWlsU3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+e1xyXG5cdFx0XHRcdFx0XHRcdGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0ICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLm5hbWUpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHRcdFx0ICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdFx0XHRcdFx0XHRpZihjb2wpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLm5hbWUpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQgIFxyXG5cdFx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmh0bWxvYmpJZCA9IG9iai5pZD9vYmouaWQucmVwbGFjZSgvLS9nLCcnKS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOidudWxsJztcclxuXHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IG9iai5pZDtcclxuXHRcdFx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IG9iai5hdHRyX2xpc3Q7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmFjdGl2ZWxpc3QucHVzaCh7YWN0aXZlOmZhbHNlfSk7XHJcblx0XHRcdFx0XHRcdC8vbGlzdC5wdXNoKGluZm8pO1xyXG5cdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQgIFxyXG5cdFx0XHRcdFx0Ly8g6Kej5Yazdmlld+WxguS4jeWQjOatpeeahOmXrumimFxyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuc2Nyb2xsVG9wID0gJHRoaXMub2xkLnNjcm9sbFRvcDtcclxuXHRcdFx0XHRcdCR0aGlzLmlzU2Nyb2xsPWZhbHNlO1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5pc1Njcm9sbD10cnVlO1xyXG5cdFx0XHRcdFx0fSwxMDAwKTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0ICB9IGNhdGNoIChleCkge1xyXG5cdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzUuMlwiLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCAgfVxyXG5cdH0sXHJcblx0XHJcblx0Ly/liLfmlrBcclxuXHRSZWZyZXNoKHZhbHVlKXtcclxuXHQgIC8v5Yi35paw5b2T5YmN6aG16Z2iXHJcblx0ICAvLyBsb2NhdGlvbi5yZWxvYWQoKTtcclxuXHQgIHVuaS5yZWRpcmVjdFRvKHtcclxuXHQgIFx0dXJsOicuLi9tb2RhbC8zMjAwP3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMuJGRhdGEudGl0bGVcclxuXHQgIH0pO1xyXG5cdH0sXHJcblx0Ly/ngrnlh7vmmL7npLrmtY/op4jlr7nosaHmmL7npLrpobXpnaJcclxuXHRhc3luYyBvblZpZXdQYWdlQ2xpY2soc3R5bGUpe1xyXG5cdCAgaWYodGhpcy5wYXJhbS5WaWV3UGFnZSl7XHJcblx0XHQgIGlmKHRoaXMucGFyYW0uVmlld1BhZ2UuVmlld19VSURlZil7XHJcblx0XHRcdHRoaXMuc3R5bGVkZWYgPSBzdHlsZTtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdHVybDonLi4vbW9kYWwvMzIwMF92aWV3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMudGl0bGUrXCImc3R5bGU9XCIrSlNPTi5zdHJpbmdpZnkoc3R5bGUpLFxyXG5cdFx0XHRcdGV2ZW50czoge1xyXG5cdFx0XHRcdCAgICAvLyDkuLrmjIflrprkuovku7bmt7vliqDkuIDkuKrnm5HlkKzlmajvvIzojrflj5booqvmiZPlvIDpobXpnaLkvKDpgIHliLDlvZPliY3pobXpnaLnmoTmlbDmja5cclxuXHRcdFx0XHQgICAgRXhpdFZpZXdFdmVudDogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHRcdCAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG5cdFx0XHRcdFx0ICAvL+mAgOWHuumhtemdouWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0ICB2YXIgZXZlbnRpZCA9ICR0aGlzLnBhcmFtLlZpZXdQYWdlLkV4aXRfVmlld19FdmVudD8uaWQ7XHJcblx0XHRcdFx0XHQgIGlmKGV2ZW50aWQpe1xyXG5cdFx0XHRcdFx0ICAgIHRyeSB7XHJcblx0XHRcdFx0XHRcdCAgdmFyIG9ial9hdHRyID0geydTX0lEJzokdGhpcy5zdHlsZWRlZi5mb3JtLm9iaklkfTtcclxuXHRcdFx0XHRcdCAgICAgICR0aGlzLnN0eWxlZGVmLmZvcm0uYXR0cnMuZm9yRWFjaCgoYXR0cikgPT4ge1xyXG5cdFx0XHRcdFx0XHQgICAgb2JqX2F0dHJbYXR0ci5uYW1lXT1hdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0ICAgICAgfSk7XHJcblx0XHRcdFx0XHQgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHRcdFx0XHQgICAgICB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG9ial9hdHRyKSk7XHJcblx0XHRcdFx0XHQgICAgICAkdGhpcy5ydW5DdXN0b21FdmVudCh7XHJcblx0XHRcdFx0XHQgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGNsYXNzX2lkOiAkdGhpcy5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIG9ial9hdHRyLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgIGlucHV0X3BhcmFtLFxyXG5cdFx0XHRcdFx0ICAgICAgfSk7XHJcblx0XHRcdFx0XHQgICAgfSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHQgIH0gICAgICAgXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHQgIH1cclxuXHR9LFxyXG5cdC8v54K55Ye75oyJ6ZKuXHJcblx0b25CdG5DbGljayhidG4sc3R5bGUpe1xyXG5cdCAgdmFyIHRoYXQgPSB0aGlzXHJcblx0ICBpZiAoYnRuLlByb21wdCkge1xyXG5cdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHQgIHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdCAgY29udGVudDogYnRuLlByb21wdENvbnRlbnQgfHwgXCLmmK/lkKbnoa7lrprvvJ9cIixcclxuXHRcdCAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0ICAgIGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0ICBcdCAgdGhhdC5vbkJ1dHRvbkNsaWNrZWQoYnRuLHN0eWxlKTtcclxuXHRcdCAgICAvLyB9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdCAgICAvLyBcdGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vlj5bmtognKTtcclxuXHRcdCAgICB9XHJcblx0XHQgIH1cclxuXHRcdH0pO1xyXG5cdCAgfSBlbHNlIHRoYXQub25CdXR0b25DbGlja2VkKGJ0bixzdHlsZSk7XHJcblx0fSxcclxuXHQvL+eCueWHu+aMiemSruWIl+ihqFxyXG5cdGFjdGlvblNoZWV0VGFwKCkge1xyXG5cdCAgXHR2YXIgdGhhdCA9IHRoaXNcclxuXHRcdHZhciBpdGVtbGlzdD1bXTtcclxuXHRcdHRoaXMucGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24uZm9yRWFjaCgoYnRuKSA9PiB7XHJcblx0XHRcdGl0ZW1saXN0LnB1c2goYnRuLlNob3dOYW1lKTtcclxuXHRcdH0pO1xyXG5cdCAgXHR1bmkuc2hvd0FjdGlvblNoZWV0KHtcclxuXHQgIFx0XHQvLyB0aXRsZTogJ+aMiemSruWIl+ihqCcsXHJcblx0ICBcdFx0aXRlbUxpc3Q6IGl0ZW1saXN0LFxyXG5cdCAgXHRcdHN1Y2Nlc3M6IChlKSA9PiB7XHJcblx0ICBcdFx0XHRjb25zb2xlLmxvZyhlLnRhcEluZGV4KTtcclxuXHQgIFx0XHRcdHZhciBidG4gPSB0aGF0LnBhcmFtLkxpc3RQYWdlLlBhZ2VfQnV0dG9uW2UudGFwSW5kZXhdO1xyXG5cdCAgXHRcdFx0aWYgKGJ0bi5Qcm9tcHQpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGJ0bi5Qcm9tcHRDb250ZW50IHx8IFwi5piv5ZCm56Gu5a6a77yfXCIsXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoYXQub25CdXR0b25DbGlja2VkKGJ0bik7XHJcblx0XHRcdFx0XHRcdFx0Ly8gfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHQgIFx0XHRcdH0gZWxzZSB0aGF0Lm9uQnV0dG9uQ2xpY2tlZChidG4pO1xyXG5cdCAgXHRcdH1cclxuXHQgIFx0fSlcclxuXHR9LFxyXG5cdC8v5aSE55CG55u45YWz5oyJ6ZKuXHJcblx0YXN5bmMgb25CdXR0b25DbGlja2VkKGJ0bixzdHlsZSkge1xyXG4gICAgICBzdHlsZSA9IHN0eWxlIHx8ICcnO1xyXG5cdCAgdHJ5IHtcclxuXHQgICAgdmFyIGVudmlyb21lbnQgPSB7XHJcblx0ICAgICAgYnV0dG9uOiBcInRvcFwiLFxyXG5cdCAgICAgIGJ1dHRvbl9uYW1lOiBidG4uU2hvd05hbWUsXHJcblx0ICAgICAgY2xzX2lkOiBidG4uQ2xzX0lELFxyXG5cdCAgICAgIGZ1bmN0aW9uOiBcIjMyMDBcIixcclxuXHQgICAgICBtYXN0ZXI6IHt9LFxyXG5cdCAgICB9O1xyXG5cdCAgICBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJBZGRcIiB8fCBidG4uRnVuQ29kZSA9PSBcIk1vZGlmeVwiKSB7XHJcblx0ICAgICAgaWYgKGJ0bi5FZGl0X2RsZy5Nb2RlbCA9PSBcInNtYWxsXCIpe1xyXG5cdCAgICAgICAgdGhpcy5zaG93QWRkU21hbGxEaWFsb2coYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0XHQgIH1cclxuXHQgICAgfSBlbHNlIGlmIChidG4uRnVuQ29kZSA9PSBcIkRlbGV0ZVwiKSB7XHJcblx0ICAgICAgdGhpcy5EZWxldGVPYmooYnRuLCBzdHlsZSwgZW52aXJvbWVudCk7XHJcblx0ICAgIC8vIH0gZWxzZSBpZiAoYnRuLkZ1bkNvZGUgPT0gXCJUcmlnZ2VyRXZlbnRcIikge1xyXG5cdCAgICAvLyAgIHRoaXMudHJpZ2dlckV2ZW50KGJ0biwgc3R5bGUsIGVudmlyb21lbnQpO1xyXG5cdCAgICB9IGVsc2Uge1xyXG5cdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrlrp7njrBcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgICAgfVxyXG5cdCAgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgIH1cclxuXHR9LFxyXG5cdC8v5paw5aKe5L+u5pS55bCP56qX5Y+j5pWw5o2uXHJcblx0c2hvd0FkZFNtYWxsRGlhbG9nKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpe1xyXG5cdFx0dmFyIGRhdGE9e1xyXG5cdFx0XHRBZGRfQnRuTmFtZTogYnRuLlNob3dOYW1lLFxyXG5cdFx0XHRFZGl0RGxnTW9kZTogYnRuLkVkaXRfZGxnLk1vZGVsLFxyXG5cdFx0XHRjbHNpZDogdGhpcy5wYXJhbS5EYXRhQ2xzLmlkLFxyXG5cdFx0XHRjbHNfbmFtZTogIHRoaXMucGFyYW0uRGF0YUNscy5uYW1lLFxyXG5cdFx0XHRFZGl0X2RsZzogYnRuLkVkaXRfZGxnXHJcblx0XHR9O1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0dXJsOicuLi9tb2RhbC8zMDE4P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoZGF0YSkrXCImdGl0bGVuYW1lPVwiK2J0bi5FZGl0X2RsZy5OYW1lK1wiJnR5cGU9YWRkRGF0YU9ialwiLFxyXG5cdFx0XHRldmVudHM6IHtcclxuXHRcdFx0ICAgIC8vIOS4uuaMh+WumuS6i+S7tua3u+WKoOS4gOS4quebkeWQrOWZqO+8jOiOt+WPluiiq+aJk+W8gOmhtemdouS8oOmAgeWIsOW9k+WJjemhtemdoueahOaVsOaNrlxyXG5cdFx0XHQgICAgYWRkRGF0YU9iajogZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHQgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHQgICR0aGlzLlJlZnJlc2goKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdC8v5Yig6Zmk5pWw5o2u5a+56LGhXHJcblx0RGVsZXRlT2JqKGJ0biwgc3R5bGUsIGVudmlyb21lbnQpe1xyXG5cdCAgLy8gY29uc29sZS5sb2coc3R5bGUpO1xyXG5cdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgIHVuaS5zaG93TW9kYWwoe1xyXG5cdCAgXHR0aXRsZTogJ+aPkOekuicsXHJcblx0ICBcdGNvbnRlbnQ6ICfnoa7lrprliKDpmaTor6XmlbDmja7vvIEnLFxyXG5cdCAgXHRzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcblx0ICBcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0dmFyIG9iaklEPXN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHRcdFx0aWYoIXN0eWxlLmZvcm0ub2JqSWQuaW5jbHVkZXMoJ3snKSkgb2JqSUQgPSAneycrc3R5bGUuZm9ybS5vYmpJZCsnfSc7XHJcblx0XHRcdFx0ICAgICAgICAgIFxyXG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdFx0XHRjbGFzc19pZDogYnRuLkNsc19JRCxcclxuXHRcdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0XHRcdFx0b2JqX2lkOiBvYmpJRFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9iakRlbCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdC8v5omn6KGM5ZCO5aSE55CG5LqL5Lu2XHJcblx0XHRcdFx0XHRcdCR0aGlzLkFmdGVyUHJvY2Vzc19FdmVudChidG4uY2xzSWQsIGJ0bS5BZnRlclByb2Nlc3NfRXZlbnQsIGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHQvL+a4hemZpOW9k+WJjeWIl+ihqOaVsOaNrlxyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKGVsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0ICBpZihlbGUuZm9ybS5vYmpJZCA9PSBvYmpJRCl7XHJcblx0XHRcdFx0XHRcdCAgICAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzZcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xyXG5cdCAgXHJcblx0fSxcclxuXHQvL+aJp+ihjOWQjuWkhOeQhuS6i+S7tlxyXG5cdGFzeW5jIEFmdGVyUHJvY2Vzc19FdmVudChjbHNJZCwgYWZ0ZXJQcm9jZXNzX0V2ZW50LCBlbnZpcm9tZW50KXtcclxuXHQgIHRyeSB7XHJcblx0ICAgIGlmIChhZnRlclByb2Nlc3NfRXZlbnQuSUQpIHtcclxuXHRcdFx0Ly/miafooYzlkI7lpITnkIbkuovku7ZcclxuXHRcdFx0YXdhaXQgdGhpcy5ydW5DdXN0b21FdmVudCh7XHJcblx0ICAgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHQgICAgICAgICAgICBjbGFzc19pZDogY2xzSWQsXHJcblx0ICAgICAgICAgICAgZXZlbnRfaWQ6IGFmdGVyUHJvY2Vzc19FdmVudC5JRCxcclxuXHQgICAgICAgIH0pO1xyXG5cdCAgICB9XHJcblx0ICB9IGNhdGNoIChleCkge1xyXG5cdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzdcIixjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgIH1cclxuXHR9LFxyXG5cclxuXHRvbnRhcChpdGVtKXsgLy/miavnoIHlip/og71cclxuXHRcdC8vIHZhciAkZWxlID0gZTtcclxuXHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdCAgICAgICR0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdFx0ICAgIH0gZWxzZXtcclxuXHRcdFx0XHQgICR0aGlzLndoZXJlID0nJztcclxuXHRcdFx0XHQgIGlmKGl0ZW0udmFsdWUpXHJcblx0XHRcdFx0XHQkdGhpcy53aGVyZSA9aXRlbS5maWVsZElkK1wiIGxpa2UgJyVcIitpdGVtLnZhbHVlK1wiJSdcIjtcclxuXHRcdFx0XHQgICR0aGlzLnF1ZXJ5X2lkPScnO1xyXG5cdFx0XHRcdCAgJHRoaXMucGFnZWluZGV4ID0gMTtcclxuXHRcdFx0XHQgICR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0ICAkdGhpcy5sb2FkRGF0YUdldExpc3QoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoaXRlbS52YWx1ZSl7IC8v56ys5LiA5Liq6L6T5YWl5qGG5LiN5Li656m6XHJcblx0XHRcdFx0XHQkdGhpcy5mb2N1c01hdGVyaWEgPSB0cnVlOyAvL+WIneWni+WMlu+8jOesrOS6jOS4qui+k+WFpeahhmZvY3Vz5bGe5oCnXHJcblx0XHRcdFx0XHQvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHQvLyBcdCR0aGlzLmZvY3VzTWF0ZXJpYT10cnVlOyAvL+esrOS6jOS4qui+k+WFpeahhuiOt+WPlueEpueCuVxyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcdFx0XHR9LDEwMCk7XHJcblx0XHRcdFx0XHQvLyB9LDUwMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHRcdCAgICAvLyB9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHRcdCAgICAvLyB9XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fSxcclxuXHRvbkVudGVyQ2hhbmdlKGl0ZW0peyAvL+Wbnui9pu+8jOeCueWHu+aMiemSru+8jOWPlua2iOiKgueCueS6i+S7tlxyXG5cdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgb25DaGFuZ2VFdmVudCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50OyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHR2YXIgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdFxyXG5cdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHQgICAgICB0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdCAgICB9IGVsc2V7XHJcblx0XHRcdCAgdGhpcy53aGVyZSA9Jyc7XHJcblx0XHRcdCAgaWYoaXRlbS52YWx1ZSlcclxuXHRcdFx0XHR0aGlzLndoZXJlID1pdGVtLmZpZWxkSWQrXCIgbGlrZSAnJVwiK2l0ZW0udmFsdWUrXCIlJ1wiO1xyXG5cdFx0XHQgIHRoaXMucXVlcnlfaWQ9Jyc7XHJcblx0XHRcdCAgdGhpcy5wYWdlaW5kZXggPSAxO1xyXG5cdFx0XHQgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0ICB0aGlzLmxvYWREYXRhR2V0TGlzdCgpO1xyXG5cdFx0XHR9XHJcblx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0ICAgIC8vIH1cclxuXHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0ICAgIC8vIH1cclxuXHRcdH1cclxuXHR9LFxyXG5cdC8vIOWGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdGFzeW5jIG9uQ2hhbmdlKGV2ZW50KSB7XHJcblx0ICAgIHRyeSB7XHJcblx0ICAgICAgICBpZiAoZXZlbnQuaWQpIHtcclxuXHQgICAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0ICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHQgICAgICAgICAgdmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHQgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcclxuXHQgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0ICAgICAgICAgICAgICAgIGF0dHI6IGEsXHJcblx0ICAgICAgICAgICAgICAgIHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdCAgICAgICAgICAgICAgfSkpXHJcblx0ICAgICAgICAgICAgKVxyXG5cdCAgICAgICAgICApO1xyXG5cdFx0XHQgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdCAgdmFyIGRhdGFJbmZvPXtcclxuXHQgICAgICAgICAgICBlZF90eXBlOiAwLFxyXG5cdFx0XHRcdHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdCAgICAgICAgICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRjbGFzc19uYW1lOiAnJyxcclxuXHQgICAgICAgICAgICBldmVudF9pZDogZXZlbnQuaWQsXHJcblx0XHRcdFx0ZXZlbnRfbmFtZTogJycsXHJcblx0XHRcdFx0ZGF0YV9vYmpfaWQ6ICcnLFxyXG5cdCAgICAgICAgICAgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHRwcmpfaWQ6ICcnLFxyXG5cdFx0XHRcdHJlZl9jbHNfaWQ6ICcnLFxyXG5cdFx0XHRcdHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0XHRcdHVzZXJfbG9naW46ICcnLFxyXG5cdFx0XHRcdGRhdGFfanNvbjogJycsXHJcblx0XHRcdFx0Y29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHRleHRfaW5mbzogJycsXHJcblx0XHRcdFx0Z2xvYmFsX2F0dHI6ICcnLFxyXG5cdCAgICAgICAgICAgIGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHQgICAgICAgICAgfTtcclxuXHRcdFx0ICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0ICBcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7IFxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0ICAgIHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmVycl9pbmZvIDogcmVzdWx0LmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pe1xyXG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdFx0XHRcdFx0XHRpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X2RsZ19hdHRyXCIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAvLyB2YWx1ZSA9IHtcImF0dHJcIjpcInh4eFwiLCBcInZhbHVlXCI6XCJ4eHhcIn1cclxuXHRcdFx0XHRcdFx0XHRcdCAgdmFyIGRhdGEgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgZGF0YS5mb3JFYWNoKGFzeW5jIChlbGUyLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihlbGUuZmllbGRJZCA9PSBlbGUyLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgICBlbGUudmFsdWUgPSBlbGUyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpyZXN1bHQuaW5mbyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0ICBcdFx0XHJcblx0XHRcdCAgXHR9ZWxzZXtcclxuXHRcdFx0ICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICBcdH1cclxuXHRcdFx0ICB9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHQgIFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICB9KTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgICAgIHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684LjJcIixjb250ZW50Olwi5omn6KGM4oCc5YaF5a655Y+Y5YyW5ZCO4oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFxyXG5cdCAgICB9XHJcblx0fSxcclxuXHQvL+eCueS4reihqOWNlVxyXG5cdG9uUGFuZWxDbGljayh2YWx1ZSl7IC8v54K55Ye76Z2i5p2/6auY5Lqu5pi+56S6XHJcblx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblx0ICAgIHRoaXMuYWN0aXZlbGlzdC5mb3JFYWNoKGVsZT0+e1xyXG5cdCAgICAgICAgZWxlLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdCAgICB9KTtcclxuXHQgICAgdGhpcy5hY3RpdmVsaXN0W3ZhbHVlXS5hY3RpdmUgPSB0cnVlO1xyXG5cdH0sXHJcblx0XHRcclxuXHQvL+S6i+S7tuWkhOeQhlxyXG5cdGFzeW5jIHJ1bkN1c3RvbUV2ZW50KGRhdGFJbmZvKSB7XHJcblx0ICAgIHRyeSB7XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdCAgXHRjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDsgXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0ICAgIGlmIChyZXN1bHQucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK3Jlc3VsdC5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJnb2JhY2tfdG9fcHJlX3BhZ2VcIil7IC8v6L+U5Zue5LiK5LiA6aG1XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbHRhOjEgLC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwiaGlkZGVuX2J1dHRvblwiKXsgLy/pmpDol4/mjInpkq5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUuZm9yRWFjaChidG4gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdmFyIGluZGV4ID0gJHRoaXMucGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24uZmluZEluZGV4KGJ1dHRvbiA9PiBidXR0b24uU2hvd05hbWUgPT0gYnRuKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgaWYgKGluZGV4ID4gLTEpIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMucGFyYW0uTGlzdFBhZ2UuUGFnZV9CdXR0b24uc3BsaWNlKGluZGV4LCAxKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gfSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJyZWZyZXNoX2N1cl9yb3dcIil7IC8vXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfcGFuZWxfaHRtbFwiKSB7IC8v5pi+56S6SHRtbOmhtemdolxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5MaXN0SHRtbF9QYW5lbCA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoZWxlLGluZGV4KT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBcdGVsZS5MaXN0SHRtbF9QYW5lbCA9IGl0ZW0udmFsdWVbaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2V7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuW9k+WJjWFjdGlvbl90eXBl77yaXCIraXRlbS5hY3Rpb25fdHlwZStcIuacquWkhOeQhlwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0aWYocmVzdWx0LmluZm8pe1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHQgIFx0XHRcclxuXHRcdFx0ICBcdH1lbHNle1xyXG5cdFx0XHQgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIFx0fVxyXG5cdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHQgIFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor685LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fSk7XHJcblx0ICAgIH0gY2F0Y2ggKGV4KSB7XHJcblx0ICAgICAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOS4yXCIsY29udGVudDpcIuaJp+ihjOS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcclxuXHQgICAgfVxyXG5cdH0sXHJcblx0XHJcblx0Y2FuY2VsKGUpeyAvL+WPlua2iFxyXG5cdFx0dmFyIGV2ZW50Q2hhbm5lbCA9IHRoaXMuJHNjb3BlLmV2ZW50Q2hhbm5lbDtcclxuXHRcdC8vIGNvbnN0IGV2ZW50Q2hhbm5lbCA9IHRoaXMuZ2V0T3BlbmVyRXZlbnRDaGFubmVsKCk7XHJcblx0XHRldmVudENoYW5uZWwuZW1pdCgndmlld18zMjAxJyxcIlwiKTtcclxuXHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHRkZWx0YToxICwvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0LyoqXHJcblx0ICog5Y+q5pSv5oyBW1wiY29sdW1uMT0nQScgb3IgY29sdW1uMj0nQidcIiwgXCJjb2x1bW4zPSdDJyBhbmQgY29sdW1uND0nRCdcIiwgXCJjb2x1bW41PSdFJ1wiXei/meenjeagvOW8j1xyXG5cdCAqIHtcclxuXHQgKiAgICAgXCJtb2RlbFwiOiAwIC8gMSxcclxuXHQgKiAgICAgXCJjb25kaXRpb25cIjpcclxuXHQgKiAgICAgW1xyXG5cdCAqICAgICAgICAgW1xyXG5cdCAqICAgICAgICAgICAgIHsgfSxcclxuXHQgKiAgICAgICAgICAgICB7IH0sXHJcblx0ICogICAgICAgICAgICAgeyB9XHJcblx0ICogICAgICAgICBdLFxyXG5cdCAqICAgICAgICAgW1xyXG5cdCAqICAgICAgICAgICAgIHsgfVxyXG5cdCAqICAgICAgICAgXSxcclxuXHQgKiAgICAgICAgIFtcclxuXHQgKiAgICAgICAgICAgICB7IH1cclxuXHQgKiAgICAgICAgIF1cclxuXHQgKiAgICAgXVxyXG5cdCAqIH1cclxuXHQgKi9cclxuXHR0b1doZXJlQmFzZTY0U3RyaW5nKGxpc3QpIHtcclxuXHQgICAgaWYgKHR5cGVvZiBsaXN0ID09ICdzdHJpbmcnKSBsaXN0ID0gW2xpc3RdXHJcblx0ICAgIHZhciBzcWwgPSBbXVxyXG5cdCAgICB2YXIgc2VwcyA9IFsnIG5vdCBpbicsICcgaW4nLCAnPD4nLCAnIT0nLCAnPD0nLCAnPj0nLCAnPCcsICc9JywgJz4nLCAnIGxpa2UnXVxyXG5cdCAgICBsaXN0LmZvckVhY2gobHMgPT4ge1xyXG5cdCAgICAgICAgdmFyIHdoZXJlID0gbHMudHJpbSgpLnRvTG93ZXJDYXNlKClcclxuXHQgICAgICAgIGlmICh3aGVyZS5zdGFydHNXaXRoKCcoJykgJiYgd2hlcmUuZW5kc1dpdGgoJyknKSkgd2hlcmUgPSB3aGVyZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgIGlmICh3aGVyZS5pbmNsdWRlcygnIGFuZCAnKSkge1xyXG5cdCAgICAgICAgICAgIC8vIOS6jOe6p2FuZOaUvuWcqOesrOS4gOe6p+aVsOe7hOS4rVxyXG5cdCAgICAgICAgICAgIHdoZXJlLnNwbGl0KCcgYW5kICcpLmZvckVhY2gobGkgPT4ge1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgbCA9IGxpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcoJykgJiYgbC5lbmRzV2l0aCgnKScpKSBsID0gbC5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgdmFyIHNlcCA9ICcnXHJcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vwcy5sZW5ndGg7IGkrKykge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGwuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXAgPSBzZXBzW2ldXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICBpZiAoc2VwKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbC5zcGxpdChzZXApXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpLnJlcGxhY2UoL1xcXSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICcnXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3AgPSBzZXAudHJpbSgpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoWycgaW4nLCAnIG5vdCBpbiddLmluY2x1ZGVzKHNlcCkgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCdzZWxlY3QgJykgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCcgZnJvbSAnKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbC5yZXBsYWNlKGZpZWxkLCAnJykucmVwbGFjZSgvXlxccyooaW58bm90IGluKVxccyovLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJykpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgc3FsLnB1c2goW3sgZmllbGQsIHZhbHVlLCBvcCB9XSlcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgIH0pXHJcblx0ICAgICAgICB9XHJcblx0ICAgICAgICBlbHNlIGlmICh3aGVyZS5pbmNsdWRlcygnIG9yICcpKSB7XHJcblx0ICAgICAgICAgICAgLy8g5LqM57qnb3LmlL7lnKjnrKzkuoznuqflkIzkuIDnu4TmlbDnu4TkuK1cclxuXHQgICAgICAgICAgICB2YXIgcyA9IFtdXHJcblx0ICAgICAgICAgICAgd2hlcmUuc3BsaXQoJyBvciAnKS5mb3JFYWNoKGxpID0+IHtcclxuXHQgICAgICAgICAgICAgICAgdmFyIGwgPSBsaS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgaWYgKGwuc3RhcnRzV2l0aCgnKCcpICYmIGwuZW5kc1dpdGgoJyknKSkgbCA9IGwucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgICAgIHZhciBzZXAgPSAnJ1xyXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChsLmluY2x1ZGVzKHNlcHNbaV0pKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gc2Vwc1tpXVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgaWYgKHNlcCkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGwuc3BsaXQoc2VwKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gdmFsdWVzWzBdPy50cmltKCkucmVwbGFjZSgvXlxcWy8sICcnKS5yZXBsYWNlKC9cXF0kLywgJycpXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAnJ1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9wID0gc2VwLnRyaW0oKVxyXG5cdFxyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFsnIGluJywgJyBub3QgaW4nXS5pbmNsdWRlcyhzZXApICYmIHZhbHVlc1sxXS5pbmNsdWRlcygnc2VsZWN0ICcpICYmIHZhbHVlc1sxXS5pbmNsdWRlcygnIGZyb20gJykpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoL15cXHMqKGlufG5vdCBpbilcXHMqLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgdmFsdWUuZW5kc1dpdGgoJyknKSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1sxXT8udHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKVxyXG5cdFxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbJ2luJywgJ25vdCBpbiddLmluY2x1ZGVzKG9wKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJykubWFwKHYgPT4gdi50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIHNxbC5wdXNoKFt7IGZpZWxkLCB2YWx1ZSwgb3AgfV0pXHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICB9KVxyXG5cdCAgICAgICAgICAgIHNxbC5wdXNoKHMpXHJcblx0ICAgICAgICB9XHJcblx0ICAgICAgICBlbHNlIHtcclxuXHQgICAgICAgICAgICB2YXIgbGkgPSB3aGVyZVxyXG5cdCAgICAgICAgICAgIC8vIOWNleS4gOafpeivouadoeS7tuebtOaOpeaUvuWcqOesrOS4gOe6p+aVsOe7hOS4rVxyXG5cdCAgICAgICAgICAgIHZhciBsID0gbGkudHJpbSgpXHJcblx0ICAgICAgICAgICAgaWYgKGwuc3RhcnRzV2l0aCgnKCcpICYmIGwuZW5kc1dpdGgoJyknKSkgbCA9IGwucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgdmFyIHNlcCA9ICcnXHJcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXBzLmxlbmd0aDsgaSsrKSB7XHJcblx0ICAgICAgICAgICAgICAgIGlmIChsLmluY2x1ZGVzKHNlcHNbaV0pKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICBzZXAgPSBzZXBzW2ldXHJcblx0ICAgICAgICAgICAgICAgICAgICBicmVha1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgIGlmIChzZXApIHtcclxuXHQgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGwuc3BsaXQoc2VwKVxyXG5cdCAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpLnJlcGxhY2UoL1xcXSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJydcclxuXHQgICAgICAgICAgICAgICAgdmFyIG9wID0gc2VwLnRyaW0oKVxyXG5cdFxyXG5cdCAgICAgICAgICAgICAgICBpZiAoWycgaW4nLCAnIG5vdCBpbiddLmluY2x1ZGVzKHNlcCkgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCdzZWxlY3QgJykgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCcgZnJvbSAnKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsLnJlcGxhY2UoZmllbGQsICcnKS5yZXBsYWNlKC9eXFxzKihpbnxub3QgaW4pXFxzKi8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgdmFsdWUuZW5kc1dpdGgoJyknKSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1sxXT8udHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKVxyXG5cdFxyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJykubWFwKHYgPT4gdi50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIHNxbC5wdXNoKFt7IGZpZWxkLCB2YWx1ZSwgb3AgfV0pXHJcblx0ICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9KVxyXG5cdFxyXG5cdCAgICBpZiAoc3FsLmxlbmd0aCA+IDApXHJcblx0ICAgICAgICByZXR1cm4gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh7XHJcblx0ICAgICAgICAgICAgbW9kZWw6IDEsXHJcblx0ICAgICAgICAgICAgY29uZGl0aW9uOiBzcWxcclxuXHQgICAgICAgIH0pKVxyXG5cdCAgICBlbHNlXHJcblx0ICAgICAgICByZXR1cm4gJydcclxuXHR9XHJcblxyXG4gIH0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n");
/***/ }),
/* 166 */
@@ -47497,7 +47497,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//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      show: true,\n      duration: 0,\n      modeClass: ['fade', 'slide-left'],\n      styles: {\n        justifyContent: 'center',\n        alignItems: 'center',\n        width: '100px',\n        height: '100px',\n        borderRadius: '5px',\n        textAlign: 'center',\n        backgroundColor: '#fff'\n      },\n      wheres: '',\n      orderby: ''\n    };\n  },\n  onReady: function onReady() {\n    // console.log(1111);\n    // this.$refs.ani.init({\n    // \tduration: 1000,  //过渡动画持续时间,单位ms\t\n    // \ttimingFunction: 'linear',\n    // \ttransformOrigin: '50% 50%',\n    // \tdelay: 500  //动画延迟时间,单位 ms\t\n    // });\n    // this.$refs.ani.step({\n    // \t// translateX: '50px'\n    // },{\n    // \tduration: 1000,  //过渡动画持续时间,单位ms\t\n    // \ttimingFunction: 'linear',\n    // \ttransformOrigin: '50% 50%',\n    // \tdelay: 500  //动画延迟时间,单位 ms\t\n    // });\n    // // 开始执行动画\n    // this.$refs.ani.run(()=>{\n    // \tconsole.log('动画支持完毕')\n    // });\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n      return _regenerator.default.wrap(function _callee2$(_context2) {\n        while (1) {\n          switch (_context2.prev = _context2.next) {\n            case 0:\n              // console.log(options);\n              _this.duration = 2000;\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/3201.vue:180\");\n              //加载初始界面\n              if (_this.$data.param.welcome_page) {\n                _this.$data.styles.width = _this.$data.param.welcome_page.width + 'px';\n                _this.$data.styles.height = _this.$data.param.welcome_page.height + 'px';\n                _this.$data.styles.backgroundColor = _this.$data.param.welcome_page.bkground_color;\n                _this.$data.param.welcome_page.img = _this.$data.param.welcome_page.img.replace(/ /g, '+');\n                _this.$data.param.welcome_page.width = parseInt(_this.$data.param.welcome_page.width);\n                _this.$data.param.welcome_page.height = parseInt(_this.$data.param.welcome_page.height);\n                _this.$data.param.catalog.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.img = ele.img.replace(/ /g, '+');\n                            ele.taskQty = 0;\n                            _context.next = 4;\n                            return _this.appGetInfo(ele.function_def_id, index);\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              }\n            case 6:\n            case \"end\":\n              return _context2.stop();\n          }\n        }\n      }, _callee2);\n    }))();\n  },\n  methods: {\n    //获取功能点信息\n    appGetInfo: function appGetInfo(appid, index) {\n      var _this2 = this;\n      var $this = this;\n      var json = {\n        app_id: [appid]\n      };\n      this.$store.dispatch('appGetInfo', json).then( /*#__PURE__*/function () {\n        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(success) {\n          var app, paramStr, appName, defCode, param;\n          return _regenerator.default.wrap(function _callee3$(_context3) {\n            while (1) {\n              switch (_context3.prev = _context3.next) {\n                case 0:\n                  if (!(success.err_code == 0)) {\n                    _context3.next = 24;\n                    break;\n                  }\n                  app = success.result[0];\n                  paramStr = app.param;\n                  appName = app.name;\n                  defCode = app.def_code;\n                  param = \"\";\n                  if (paramStr) {\n                    //mobox2的param是json字符串\n                    param = paramStr.replace(/\\\\/g, \"\");\n                    //mobox3的param是base64字符串\n                    if (!paramStr.includes('\"')) param = _base.default.decode(paramStr);\n                  }\n                  if (param) {\n                    _context3.next = 10;\n                    break;\n                  }\n                  uni.showModal({\n                    title: \"提示\",\n                    content: defCode + \"该功能点未配置参数,请重新配置参数!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                  return _context3.abrupt(\"return\");\n                case 10:\n                  _this2.$data.param.catalog[index].param = param;\n                  _this2.$data.param.catalog[index].appName = appName;\n                  param = JSON.parse(param);\n                  $this.orderby = param.Order ? param.Order : 'T_CREATE Desc';\n                  if (!param.Query_Event) {\n                    _context3.next = 19;\n                    break;\n                  }\n                  _context3.next = 17;\n                  return $this.onSearChange(param.DataCls.id, param.Query_Event.id, index);\n                case 17:\n                  _context3.next = 22;\n                  break;\n                case 19:\n                  $this.wheres = param.Condition;\n                  _context3.next = 22;\n                  return $this.loadDataGetList(param.DataCls.id, index);\n                case 22:\n                  _context3.next = 25;\n                  break;\n                case 24:\n                  uni.showModal({\n                    title: \"提示\",\n                    content: success.msg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                case 25:\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: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    // 执行查询事件\n    onSearChange: function onSearChange(clsid, eventid, index) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                try {\n                  if (event.id) {\n                    $this = _this3;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: clsid,\n                      event_id: eventid\n                    };\n                    _this3.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      // console.log(ret);\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_query_condition\") {\n                                var value = item.value;\n                                $this.wheres = value.condition;\n                                $this.orderby = value.order ? value.order : $this.orderby;\n                                $this.loadDataGetList(clsid, index);\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\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                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误1.2\",\n                    content: \"执行“查询事件”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    //查询数据类数据信息\n    loadDataGetList: function loadDataGetList(clsid, index) {\n      var _this4 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n        var condition, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                try {\n                  //条件查询\n                  condition = _this4.wheres; // console.log(condition);\n                  // console.log(this.orderby);\n                  $this = _this4;\n                  dataInfo = {\n                    class_id: clsid,\n                    attrs: [],\n                    condition: _this4.toWhereBase64String(\"\" + condition + \"\"),\n                    prj_rel_type: \"\",\n                    order_by: _this4.orderby,\n                    page_size: 99999,\n                    page: 1,\n                    query_id: ''\n                  };\n                  _this4.$store.dispatch('dataObjQuery', dataInfo).then(function (ret) {\n                    // console.log(ret);\n                    if (ret.err_code == 0) {\n                      if (ret.result) {\n                        $this.$data.param.catalog[index].taskQty = ret.result.obj_list.length;\n                        // console.log($this.$data.param.catalog[index]);\n                        var param = JSON.parse(JSON.stringify($this.$data.param));\n                        $this.$data.param = [];\n                        $this.$data.param = param;\n                      }\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                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误2.2\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5);\n      }))();\n    },\n    //点击条目打开3200\n    onViewClick: function onViewClick(data) {\n      if (!data.function_def_id) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"该条目未关联功能点!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var $this = this;\n      uni.navigateTo({\n        url: '../modal/3200?param=' + data.param + \"&titlename=\" + data.appName,\n        events: {\n          // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据\n          view_3201: function view_3201(data) {\n            __f__(\"log\", data, \" at pages/modal/3201.vue:351\");\n            //刷新当前页面\n            // location.reload();\n            uni.redirectTo({\n              url: '../modal/3201?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        }\n      });\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    /**\r\n     * 只支持[\"column1='A' or column2='B'\", \"column3='C' and column4='D'\", \"column5='E'\"]这种格式\r\n     * {\r\n     *     \"model\": 0 / 1,\r\n     *     \"condition\":\r\n     *     [\r\n     *         [\r\n     *             { },\r\n     *             { },\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ]\r\n     *     ]\r\n     * }\r\n     */\n    toWhereBase64String: function toWhereBase64String(list) {\n      if (typeof list == 'string') list = [list];\n      var sql = [];\n      var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=', '>', ' like'];\n      list.forEach(function (ls) {\n        var where = ls.trim().toLowerCase();\n        if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\\(/, '').replace(/\\)$/, '');\n        if (where.includes(' and ')) {\n          // 二级and放在第一级数组中\n          where.split(' and ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$;\n              var values = l.split(sep);\n              var field = (_values$ = values[0]) === null || _values$ === void 0 ? void 0 : _values$.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$2;\n                value = (_values$2 = values[1]) === null || _values$2 === void 0 ? void 0 : _values$2.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n        } else if (where.includes(' or ')) {\n          // 二级or放在第二级同一组数组中\n          var s = [];\n          where.split(' or ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$3;\n              var values = l.split(sep);\n              var field = (_values$3 = values[0]) === null || _values$3 === void 0 ? void 0 : _values$3.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$4;\n                value = (_values$4 = values[1]) === null || _values$4 === void 0 ? void 0 : _values$4.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n          sql.push(s);\n        } else {\n          var li = where;\n          // 单一查询条件直接放在第一级数组中\n          var l = li.trim();\n          if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n          var sep = '';\n          for (var i = 0; i < seps.length; i++) {\n            if (l.includes(seps[i])) {\n              sep = seps[i];\n              break;\n            }\n          }\n          if (sep) {\n            var _values$5;\n            var values = l.split(sep);\n            var field = (_values$5 = values[0]) === null || _values$5 === void 0 ? void 0 : _values$5.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n            var value = '';\n            var op = sep.trim();\n            if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n              value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n              if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n            } else {\n              var _values$6;\n              value = (_values$6 = values[1]) === null || _values$6 === void 0 ? void 0 : _values$6.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n              if (['in', 'not in'].includes(op)) {\n                value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                value = value.split(',').map(function (v) {\n                  return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                });\n              }\n            }\n            sql.push([{\n              field: field,\n              value: value,\n              op: op\n            }]);\n          }\n        }\n      });\n      if (sql.length > 0) return _base.default.encode(JSON.stringify({\n        model: 1,\n        condition: sql\n      }));else return '';\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzIwMS52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwic2hvdyIsImR1cmF0aW9uIiwibW9kZUNsYXNzIiwic3R5bGVzIiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwid2lkdGgiLCJoZWlnaHQiLCJib3JkZXJSYWRpdXMiLCJ0ZXh0QWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJ3aGVyZXMiLCJvcmRlcmJ5Iiwib25SZWFkeSIsIm9uTG9hZCIsInVuaSIsImVsZSIsIm1ldGhvZHMiLCJhcHBHZXRJbmZvIiwiYXBwX2lkIiwic3VjY2VzcyIsImFwcCIsInBhcmFtU3RyIiwiYXBwTmFtZSIsImRlZkNvZGUiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwiJHRoaXMiLCJvblNlYXJDaGFuZ2UiLCJkYXRhSW5mbyIsImVkX3R5cGUiLCJzdGFydF90cmFuc2FjdGlvbiIsImNsYXNzX2lkIiwiZXZlbnRfaWQiLCJyZXN1bHQiLCJ0aXAiLCJsb2FkRGF0YUdldExpc3QiLCJjb25kaXRpb24iLCJhdHRycyIsInByal9yZWxfdHlwZSIsIm9yZGVyX2J5IiwicGFnZV9zaXplIiwicGFnZSIsInF1ZXJ5X2lkIiwib25WaWV3Q2xpY2siLCJ1cmwiLCJldmVudHMiLCJ2aWV3XzMyMDEiLCJjYW5jZWwiLCJkZWx0YSIsInRvV2hlcmVCYXNlNjRTdHJpbmciLCJsaXN0Iiwid2hlcmUiLCJzZXAiLCJ2YWx1ZSIsInNxbCIsImZpZWxkIiwib3AiLCJtb2RlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBK0hBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBQ0E7RUFD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O2tCQUFBO2dCQUNBO2NBQ0E7Y0FDQUM7Z0JBQUFDO2dCQUFBRjtnQkFBQUc7Y0FBQTtZQUNBO1VBQ0E7UUFDQSxPQUNBO1VBQ0E7VUFDQTtVQUNBTDtZQUNBO1lBQ0E7WUFDQTtZQUNBO2NBQ0E7Z0JBQ0FDO2dCQUNBO2NBQ0E7WUFDQTtZQUNBO2NBQUE7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUVBO2dCQUNBQztnQkFDQTtjQUNBLE9BQ0E7Z0JBQUE7Z0JBQ0FBO2dCQUVBO2tCQUNBQTtrQkFDQUE7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FDQTtjQUNBQztnQkFBQUM7Z0JBQUFGO2dCQUFBRztjQUFBO1lBQ0E7VUFDQTtVQUNBRjtRQUNBLE9BQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7WUFDQTtjQUNBRjtjQUNBO1lBQ0E7VUFDQTtVQUNBO1lBQUE7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUVBO2NBQ0FDO2NBQ0E7WUFDQSxPQUNBO2NBQUE7Y0FDQUE7Y0FFQTtnQkFDQUE7Z0JBQ0FBO2tCQUFBO2dCQUFBO2NBQ0E7WUFDQTtZQUNBQztjQUFBQztjQUFBRjtjQUFBRztZQUFBO1VBQ0E7UUFDQTtNQUNBO01BRUEsb0JBQ0E7UUFDQUM7UUFDQXJCO01BQ0EsU0FFQTtJQUNBO0VBRUE7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjE3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuXHQuZXhhbXBsZSB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdGhlaWdodDogMTUwcHg7XG5cdFx0Ly8gYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcblx0fVxuXHQudHJhbnNpdGlvbi1idXR0b24ge1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGZsZXg6IDE7XG5cdFx0bWFyZ2luLWJvdHRvbTogMTBweDtcblx0fVxuXHQuZXhhbXBsZSA6OnYtZGVlcCAudHJhbnNpdGlvbiB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdHdpZHRoOiAxMDBweDtcblx0XHRoZWlnaHQ6IDEwMHB4O1xuXHRcdGJvcmRlci1yYWRpdXM6IDVweDtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0Ly8gYmFja2dyb3VuZC1jb2xvcjogIzRjZDk2NDtcblx0XHQvLyBib3gtc2hhZG93OiAwIDAgNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG5cdH1cblx0LnRleHQge1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRjb2xvcjogI2ZmZjtcblx0fVxuPC9zdHlsZT5cbjxzdHlsZT5cclxuXHQuY29udGVudHtcclxuXHRcdG1pbi1oZWlnaHQ6IDEwMHZoO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcclxuXHRcdHBhZGRpbmc6IDFycHggMHJweDtcclxuXHR9XHJcblx0LmR2X2hlYWR7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmO1xyXG5cdH1cclxuXHQuaGVhZF90aXRsZXtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGZvbnQtc2l6ZTogMTlweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdH1cclxuXHQudW5pLXNlY3Rpb24gLnVuaS1zZWN0aW9uLWhlYWRlcntcclxuXHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuXHR9XHJcblx0LmR2X2NvbnRlbnR7XHJcblx0XHRtYXJnaW46IDMwcnB4O1xyXG5cdFx0cGFkZGluZzogMTBycHg7XHJcblx0XHRib3JkZXItcmFkaXVzOiAxMnJweDtcclxuXHR9XHJcblx0LmR2X3BhbmVse1xyXG5cdCAgYmFja2dyb3VuZC1jb2xvcjojZmZmO1xyXG5cdCAgcGFkZGluZzogMjBycHg7XHJcblx0ICBtYXJnaW4tdG9wOiAyMHJweDtcclxuXHQgIGJvcmRlci1yYWRpdXM6IDEycnB4O1xyXG5cdCAgLyogYm94LXNoYWRvdzogMnJweCAycnB4IDJycHggcmdiYSgwLCAwLCAwLCAwLjMpOyAqL1xyXG5cdH1cclxuXHQuZHZfcGFuZWw6Zmlyc3QtY2hpbGR7XHJcblx0XHRtYXJnaW46IDA7XHJcblx0fVxyXG5cdC5wYW5lbF9pbWFnZV91cGxvYWRsaXN0IHtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdC8qIHBhZGRpbmc6IDMwcnB4IDBweCAxMHJweCAwcHg7ICovXHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0d2lkdGg6IDIwMHJweDtcclxuXHRcdGhlaWdodDogMjAwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEwMCU7XHJcblx0XHRib3JkZXI6IDJycHggc29saWQgdHJhbnNwYXJlbnQ7XHJcblx0XHRib3JkZXItcmFkaXVzOiA4cnB4O1xyXG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRcdGJhY2tncm91bmQ6ICNmZmY7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHQvKiBib3gtc2hhZG93OiAwIDJycHggMnJweCByZ2JhKDAsIDAsIDAsIDAuMik7XHJcblx0XHRtYXJnaW4tcmlnaHQ6IDhycHg7ICovXHJcblx0fVxyXG5cdC5wYW5lbF9pbWFnZV91cGxvYWRsaXN0IGltYWdle1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0fVxyXG5cdC5wYW5lbF90aXRsZXtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHBhZGRpbmctbGVmdDogMzBycHg7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdH1cclxuXHQucGFuZWxfdGl0bGUgcHtcclxuXHRcdGZvbnQtc2l6ZTogMTlweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdH1cclxuXHQucGFuZWxfdGl0bGUgc3BhbntcclxuXHRcdGZvbnQtc2l6ZTogMTRweDtcclxuXHR9XHJcblx0XHJcbjwvc3R5bGU+XHJcblxyXG48dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcblx0XHQ8dmlldyBjbGFzcz1cImR2X2hlYWRcIj5cclxuXHRcdFx0PHVuaS1zZWN0aW9uIDp0aXRsZT1cInRpdGxlXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJleGFtcGxlXCIgOnN0eWxlPVwieydiYWNrZ3JvdW5kLWNvbG9yJzpwYXJhbS53ZWxjb21lX3BhZ2UuYmtncm91bmRfY29sb3IsJ2hlaWdodCc6KHBhcmFtLndlbGNvbWVfcGFnZS5oZWlnaHQrMzApKydweCd9XCI+XHJcblx0XHRcdFx0XHQ8dW5pLXRyYW5zaXRpb24gcmVmPVwiYW5pXCIgY3VzdG9tLWNsYXNzPVwidHJhbnNpdGlvblwiIDpkdXJhdGlvbj1cImR1cmF0aW9uXCIgOm1vZGUtY2xhc3M9XCJtb2RlQ2xhc3NcIiA6c3R5bGVzPVwic3R5bGVzXCIgOnNob3c9XCJzaG93XCI+XHJcblx0XHRcdFx0XHRcdDxpbWFnZSA6c3JjPVwicGFyYW0ud2VsY29tZV9wYWdlLmltZ1wiIFxyXG5cdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOnBhcmFtLndlbGNvbWVfcGFnZS53aWR0aCsncHgnLCdoZWlnaHQnOnBhcmFtLndlbGNvbWVfcGFnZS5oZWlnaHQrJ3B4J31cIj48L2ltYWdlPlxyXG5cdFx0XHRcdFx0PC91bmktdHJhbnNpdGlvbj5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdW5pLXNlY3Rpb24+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHRcclxuXHRcdDx2aWV3IGNsYXNzPVwiZHZfY29udGVudFwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImR2X3BhbmVsXCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gcGFyYW0uY2F0YWxvZ1wiIFxyXG5cdFx0XHQgIDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6aXRlbS5ia2dyb3VuZF9jb2xvcn1cIiBAdGFwPVwib25WaWV3Q2xpY2soaXRlbSlcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwYW5lbF9pbWFnZV91cGxvYWRsaXN0XCI+XHJcblx0XHRcdFx0XHQ8aW1hZ2UgOnNyYz1cIml0ZW0uaW1nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwYW5lbF90aXRsZVwiPlxyXG5cdFx0XHRcdFx0PHA+e3tpdGVtLnRpdGxlfX08L3A+XHJcblx0XHRcdFx0XHQ8c3Bhbj57e2l0ZW0udGFza1F0eX19PC9zcGFuPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcclxuXHRcdDwvdmlldz5cbiAgICA8L3ZpZXc+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxyXG5pbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1vZHVsZXM6e1xyXG5cdEJhc2U2NCxcclxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XHJcblx0ICB0aXRsZTon5paw5aKeJyxcbiAgICAgIHBhcmFtOiB7fSxcblx0ICBzaG93OiB0cnVlLFxyXG5cdCAgZHVyYXRpb246MCxcblx0ICBtb2RlQ2xhc3M6IFsnZmFkZScsICdzbGlkZS1sZWZ0J10sXG5cdCAgc3R5bGVzOiB7XHJcblx0XHRqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXHJcblx0XHRhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuXHRcdHdpZHRoOiAnMTAwcHgnLFxyXG5cdFx0aGVpZ2h0OiAnMTAwcHgnLFxyXG5cdFx0Ym9yZGVyUmFkaXVzOiAnNXB4JyxcclxuXHRcdHRleHRBbGlnbjogJ2NlbnRlcicsXHJcblx0XHRiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcclxuXHQgIH0sXG4gICAgICB3aGVyZXM6JycsXG4gICAgICBvcmRlcmJ5OicnLFxuICAgIH07XG4gIH0sXHJcbiAgb25SZWFkeSgpIHtcclxuXHQvLyBjb25zb2xlLmxvZygxMTExKTtcblx0Ly8gdGhpcy4kcmVmcy5hbmkuaW5pdCh7XG5cdC8vIFx0ZHVyYXRpb246IDEwMDAsICAvL+i/h+a4oeWKqOeUu+aMgee7reaXtumXtO+8jOWNleS9jW1zXHRcblx0Ly8gXHR0aW1pbmdGdW5jdGlvbjogJ2xpbmVhcicsXG5cdC8vIFx0dHJhbnNmb3JtT3JpZ2luOiAnNTAlIDUwJScsXG5cdC8vIFx0ZGVsYXk6IDUwMCAgLy/liqjnlLvlu7bov5/ml7bpl7TvvIzljZXkvY0gbXNcdFxuXHQvLyB9KTtcclxuXHQvLyB0aGlzLiRyZWZzLmFuaS5zdGVwKHtcclxuXHQvLyBcdC8vIHRyYW5zbGF0ZVg6ICc1MHB4J1xyXG5cdC8vIH0se1xyXG5cdC8vIFx0ZHVyYXRpb246IDEwMDAsICAvL+i/h+a4oeWKqOeUu+aMgee7reaXtumXtO+8jOWNleS9jW1zXHRcclxuXHQvLyBcdHRpbWluZ0Z1bmN0aW9uOiAnbGluZWFyJyxcclxuXHQvLyBcdHRyYW5zZm9ybU9yaWdpbjogJzUwJSA1MCUnLFxyXG5cdC8vIFx0ZGVsYXk6IDUwMCAgLy/liqjnlLvlu7bov5/ml7bpl7TvvIzljZXkvY0gbXNcdFxyXG5cdC8vIH0pO1xyXG5cdC8vIC8vIOW8gOWni+aJp+ihjOWKqOeUu1xyXG5cdC8vIHRoaXMuJHJlZnMuYW5pLnJ1bigoKT0+e1xyXG5cdC8vIFx0Y29uc29sZS5sb2coJ+WKqOeUu+aUr+aMgeWujOavlScpXHJcblx0Ly8gfSk7XG4gIH0sXHJcbiAgYXN5bmMgb25Mb2FkKG9wdGlvbnMpIHtcclxuXHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuXHR0aGlzLmR1cmF0aW9uPTIwMDA7XHJcblx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZX0pOyAvL+iuvue9rumhtumDqOagh+mimCBcclxuXHR0aGlzLiRkYXRhLnRpdGxlID0gb3B0aW9ucy50aXRsZW5hbWU7XHJcblx0dGhpcy4kZGF0YS5wYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0Ly/liqDovb3liJ3lp4vnlYzpnaJcclxuXHRpZih0aGlzLiRkYXRhLnBhcmFtLndlbGNvbWVfcGFnZSl7XHJcblx0ICB0aGlzLiRkYXRhLnN0eWxlcy53aWR0aCA9IHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLndpZHRoKydweCc7XHJcblx0ICB0aGlzLiRkYXRhLnN0eWxlcy5oZWlnaHQgPSB0aGlzLiRkYXRhLnBhcmFtLndlbGNvbWVfcGFnZS5oZWlnaHQrJ3B4JztcclxuXHQgIHRoaXMuJGRhdGEuc3R5bGVzLmJhY2tncm91bmRDb2xvciA9IHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLmJrZ3JvdW5kX2NvbG9yO1xyXG5cdCAgXHJcblx0ICB0aGlzLiRkYXRhLnBhcmFtLndlbGNvbWVfcGFnZS5pbWcgPSB0aGlzLiRkYXRhLnBhcmFtLndlbGNvbWVfcGFnZS5pbWcucmVwbGFjZSgvIC9nLCcrJyk7XHJcblx0ICB0aGlzLiRkYXRhLnBhcmFtLndlbGNvbWVfcGFnZS53aWR0aCA9IHBhcnNlSW50KHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLndpZHRoKTtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLmhlaWdodCA9IHBhcnNlSW50KHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLmhlaWdodCk7XHJcblx0ICB0aGlzLiRkYXRhLnBhcmFtLmNhdGFsb2cuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRlbGUuaW1nID0gZWxlLmltZy5yZXBsYWNlKC8gL2csJysnKTtcclxuXHRcdGVsZS50YXNrUXR5PTA7XHJcblx0XHRhd2FpdCB0aGlzLmFwcEdldEluZm8oZWxlLmZ1bmN0aW9uX2RlZl9pZCxpbmRleCk7XHJcblx0ICB9KTtcclxuXHR9XHJcblx0XHJcbiAgfSxcdFxuICBtZXRob2RzOiB7XHJcblx0Ly/ojrflj5blip/og73ngrnkv6Hmga9cclxuXHRhcHBHZXRJbmZvKGFwcGlkLGluZGV4KXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIganNvbiA9e1xyXG5cdFx0XHRhcHBfaWQ6IFthcHBpZF1cclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYXBwR2V0SW5mbycsanNvbikudGhlbihhc3luYyBzdWNjZXNzPT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIGFwcCA9IHN1Y2Nlc3MucmVzdWx0WzBdO1xyXG5cdFx0XHRcdHZhciBwYXJhbVN0ciA9IGFwcC5wYXJhbTtcclxuXHRcdFx0XHR2YXIgYXBwTmFtZSA9IGFwcC5uYW1lO1xyXG5cdFx0XHRcdHZhciBkZWZDb2RlID0gYXBwLmRlZl9jb2RlO1xyXG5cdFx0XHRcdHZhciBwYXJhbSA9IFwiXCI7XHJcblx0XHRcdFx0aWYocGFyYW1TdHIpe1xyXG5cdFx0XHRcdCAgICAvL21vYm94MueahHBhcmFt5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICBwYXJhbSA9IHBhcmFtU3RyLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgLy9tb2JveDPnmoRwYXJhbeaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICBpZighcGFyYW1TdHIuaW5jbHVkZXMoJ1wiJykpIHBhcmFtID0gQmFzZTY0LmRlY29kZShwYXJhbVN0cik7XHJcblx0XHRcdFx0fVx0ICBcclxuXHRcdFx0XHRpZighcGFyYW0pe1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmRlZkNvZGUrXCLor6Xlip/og73ngrnmnKrphY3nva7lj4LmlbDvvIzor7fph43mlrDphY3nva7lj4LmlbDvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5wYXJhbS5jYXRhbG9nW2luZGV4XS5wYXJhbT1wYXJhbTtcclxuXHRcdFx0XHR0aGlzLiRkYXRhLnBhcmFtLmNhdGFsb2dbaW5kZXhdLmFwcE5hbWU9YXBwTmFtZTtcclxuXHRcdFx0XHRwYXJhbSA9IEpTT04ucGFyc2UocGFyYW0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdCR0aGlzLm9yZGVyYnkgPSBwYXJhbS5PcmRlcj9wYXJhbS5PcmRlcjonVF9DUkVBVEUgRGVzYyc7XHJcblx0XHRcdFx0aWYocGFyYW0uUXVlcnlfRXZlbnQpe1xyXG5cdFx0XHRcdCAgICBhd2FpdCAkdGhpcy5vblNlYXJDaGFuZ2UocGFyYW0uRGF0YUNscy5pZCxwYXJhbS5RdWVyeV9FdmVudC5pZCxpbmRleCk7XHJcblx0XHRcdFx0fSBlbHNle1xyXG5cdFx0XHRcdCAgJHRoaXMud2hlcmVzID0gcGFyYW0uQ29uZGl0aW9uO1xyXG5cdFx0XHRcdCAgYXdhaXQgJHRoaXMubG9hZERhdGFHZXRMaXN0KHBhcmFtLkRhdGFDbHMuaWQsaW5kZXgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdC8vIOaJp+ihjOafpeivouS6i+S7tlxyXG5cdGFzeW5jIG9uU2VhckNoYW5nZShjbHNpZCxldmVudGlkLGluZGV4KSB7XHJcblx0IHRyeSB7XHJcblx0ICAgIGlmIChldmVudC5pZCkge1xyXG5cdCBcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgXHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICBlZF90eXBlOiAwLFxyXG5cdCAgICAgICAgc3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHQgICAgY2xhc3NfaWQ6IGNsc2lkLFxyXG5cdFx0XHRldmVudF9pZDogZXZlbnRpZCxcclxuXHQgICAgICB9O1xyXG5cdCBcdCAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHQgXHQgIFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHQgXHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0IFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0OyBcclxuXHQgXHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdCBcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdCBcdFx0XHQgICAgaWYgKHJlc3VsdC5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHQgXHRcdFx0fWVsc2V7XHJcblx0IFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0IFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHRcdFxyXG5cdCBcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pe1xyXG5cdCBcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHQgXHRcdFx0XHRcdFx0aWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9xdWVyeV9jb25kaXRpb25cIil7IFxyXG5cdCBcdFx0XHRcdFx0XHQgICAgdmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHQgXHRcdFx0XHRcdFx0ICAgICR0aGlzLndoZXJlcyA9IHZhbHVlLmNvbmRpdGlvbjtcclxuXHQgXHRcdFx0XHRcdFx0ICAgICR0aGlzLm9yZGVyYnkgPSB2YWx1ZS5vcmRlcj92YWx1ZS5vcmRlcjokdGhpcy5vcmRlcmJ5O1xyXG5cdCBcdFx0XHRcdFx0XHQgICAgJHRoaXMubG9hZERhdGFHZXRMaXN0KGNsc2lkLGluZGV4KTtcclxuXHQgXHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0IFx0XHRcdFx0fWVsc2V7XHJcblx0IFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0IFx0XHRcdFx0XHRpZihyZXN1bHQuaW5mbyl7XHJcblx0IFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpyZXN1bHQuaW5mbyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcdFx0XHRcdH1cclxuXHQgXHRcdFx0XHR9XHJcblx0IFx0XHRcdH1cclxuXHQgXHQgIFx0XHRcclxuXHQgXHQgIFx0fWVsc2V7XHJcblx0IFx0ICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHQgIFx0fVxyXG5cdCBcdCAgfSkuY2F0Y2goZXg9PntcclxuXHQgXHQgIFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdCBcdCAgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdCAgfSk7XHJcblx0ICAgICB9XHJcblx0IH0gY2F0Y2ggKGV4KSB7XHJcblx0ICAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0IFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50Olwi5omn6KGM4oCc5p+l6K+i5LqL5Lu24oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHJcblx0IH1cclxuXHR9LFxyXG5cdC8v5p+l6K+i5pWw5o2u57G75pWw5o2u5L+h5oGvXHJcblx0YXN5bmMgbG9hZERhdGFHZXRMaXN0KGNsc2lkLGluZGV4KXsgICBcclxuXHQgIHRyeXtcclxuXHQgICAgLy/mnaHku7bmn6Xor6JcclxuXHQgICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMud2hlcmVzO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhjb25kaXRpb24pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLm9yZGVyYnkpO1xyXG5cdCAgICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6IGNsc2lkLFxyXG5cdFx0XHRhdHRyczogW10sXHJcblx0XHRcdGNvbmRpdGlvbjogdGhpcy50b1doZXJlQmFzZTY0U3RyaW5nKFwiXCIrIGNvbmRpdGlvbiArXCJcIiksIFxyXG5cdFx0XHRwcmpfcmVsX3R5cGU6IFwiXCIsXHJcblx0XHRcdG9yZGVyX2J5OiB0aGlzLm9yZGVyYnksXHJcblx0XHRcdHBhZ2Vfc2l6ZTogOTk5OTksXHJcblx0XHRcdHBhZ2U6IDEsXHJcblx0XHRcdHF1ZXJ5X2lkOiAnJyxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9ialF1ZXJ5JyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdCl7XHJcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wYXJhbS5jYXRhbG9nW2luZGV4XS50YXNrUXR5PXJldC5yZXN1bHQub2JqX2xpc3QubGVuZ3RoO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEucGFyYW0uY2F0YWxvZ1tpbmRleF0pO1xyXG5cdFx0XHRcdFx0dmFyIHBhcmFtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5wYXJhbSkpO1xyXG5cdFx0XHRcdFx0JHRoaXMuJGRhdGEucGFyYW09W107XHJcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0ICB9IGNhdGNoIChleCkge1xyXG5cdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMlwiLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCAgfVxyXG5cdH0sXHJcblx0XHJcblx0Ly/ngrnlh7vmnaHnm67miZPlvIAzMjAwXHJcblx0b25WaWV3Q2xpY2soZGF0YSl7XHJcblx0XHRpZighZGF0YS5mdW5jdGlvbl9kZWZfaWQpe1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6XmnaHnm67mnKrlhbPogZTlip/og73ngrnvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0dXJsOicuLi9tb2RhbC8zMjAwP3BhcmFtPScrZGF0YS5wYXJhbStcIiZ0aXRsZW5hbWU9XCIrZGF0YS5hcHBOYW1lLFxyXG5cdFx0XHRldmVudHM6IHtcclxuXHRcdFx0XHQvLyDkuLrmjIflrprkuovku7bmt7vliqDkuIDkuKrnm5HlkKzlmajvvIzojrflj5booqvmiZPlvIDpobXpnaLkvKDpgIHliLDlvZPliY3pobXpnaLnmoTmlbDmja5cclxuXHRcdFx0XHR2aWV3XzMyMDE6IGZ1bmN0aW9uKGRhdGEpIHtcclxuXHRcdFx0XHQgICAgY29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHQvL+WIt+aWsOW9k+WJjemhtemdolxyXG5cdFx0XHRcdFx0Ly8gbG9jYXRpb24ucmVsb2FkKCk7XHJcblx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzIwMT9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrJHRoaXMuJGRhdGEudGl0bGVcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cdH0sXHRcdFx0XHJcblx0XHJcblx0XHJcblx0Y2FuY2VsKGUpeyAvL+WPlua2iFxyXG5cdFx0dW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdGRlbHRhOjEgLC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHQvKipcclxuXHQgKiDlj6rmlK/mjIFbXCJjb2x1bW4xPSdBJyBvciBjb2x1bW4yPSdCJ1wiLCBcImNvbHVtbjM9J0MnIGFuZCBjb2x1bW40PSdEJ1wiLCBcImNvbHVtbjU9J0UnXCJd6L+Z56eN5qC85byPXHJcblx0ICoge1xyXG5cdCAqICAgICBcIm1vZGVsXCI6IDAgLyAxLFxyXG5cdCAqICAgICBcImNvbmRpdGlvblwiOlxyXG5cdCAqICAgICBbXHJcblx0ICogICAgICAgICBbXHJcblx0ICogICAgICAgICAgICAgeyB9LFxyXG5cdCAqICAgICAgICAgICAgIHsgfSxcclxuXHQgKiAgICAgICAgICAgICB7IH1cclxuXHQgKiAgICAgICAgIF0sXHJcblx0ICogICAgICAgICBbXHJcblx0ICogICAgICAgICAgICAgeyB9XHJcblx0ICogICAgICAgICBdLFxyXG5cdCAqICAgICAgICAgW1xyXG5cdCAqICAgICAgICAgICAgIHsgfVxyXG5cdCAqICAgICAgICAgXVxyXG5cdCAqICAgICBdXHJcblx0ICogfVxyXG5cdCAqL1xyXG5cdHRvV2hlcmVCYXNlNjRTdHJpbmcobGlzdCkge1xyXG5cdCAgICBpZiAodHlwZW9mIGxpc3QgPT0gJ3N0cmluZycpIGxpc3QgPSBbbGlzdF1cclxuXHQgICAgdmFyIHNxbCA9IFtdXHJcblx0ICAgIHZhciBzZXBzID0gWycgbm90IGluJywgJyBpbicsICc8PicsICchPScsICc8PScsICc+PScsICc8JywgJz0nLCAnPicsICcgbGlrZSddXHJcblx0ICAgIGxpc3QuZm9yRWFjaChscyA9PiB7XHJcblx0ICAgICAgICB2YXIgd2hlcmUgPSBscy50cmltKCkudG9Mb3dlckNhc2UoKVxyXG5cdCAgICAgICAgaWYgKHdoZXJlLnN0YXJ0c1dpdGgoJygnKSAmJiB3aGVyZS5lbmRzV2l0aCgnKScpKSB3aGVyZSA9IHdoZXJlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgaWYgKHdoZXJlLmluY2x1ZGVzKCcgYW5kICcpKSB7XHJcblx0ICAgICAgICAgICAgLy8g5LqM57qnYW5k5pS+5Zyo56ys5LiA57qn5pWw57uE5LitXHJcblx0ICAgICAgICAgICAgd2hlcmUuc3BsaXQoJyBhbmQgJykuZm9yRWFjaChsaSA9PiB7XHJcblx0ICAgICAgICAgICAgICAgIHZhciBsID0gbGkudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICB2YXIgc2VwID0gJydcclxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXBzLmxlbmd0aDsgaSsrKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAobC5pbmNsdWRlcyhzZXBzW2ldKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9IHNlcHNbaV1cclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIGlmIChzZXApIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBsLnNwbGl0KHNlcClcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJykucmVwbGFjZSgvXFxdJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJydcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvcCA9IHNlcC50cmltKClcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJ3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJyBmcm9tICcpKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsLnJlcGxhY2UoZmllbGQsICcnKS5yZXBsYWNlKC9eXFxzKihpbnxub3QgaW4pXFxzKi8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnKCcpICYmIHZhbHVlLmVuZHNXaXRoKCcpJykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJylcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoWydpbicsICdub3QgaW4nXS5pbmNsdWRlcyhvcCkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKSlcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICBzcWwucHVzaChbeyBmaWVsZCwgdmFsdWUsIG9wIH1dKVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgfSlcclxuXHQgICAgICAgIH1cclxuXHQgICAgICAgIGVsc2UgaWYgKHdoZXJlLmluY2x1ZGVzKCcgb3IgJykpIHtcclxuXHQgICAgICAgICAgICAvLyDkuoznuqdvcuaUvuWcqOesrOS6jOe6p+WQjOS4gOe7hOaVsOe7hOS4rVxyXG5cdCAgICAgICAgICAgIHZhciBzID0gW11cclxuXHQgICAgICAgICAgICB3aGVyZS5zcGxpdCgnIG9yICcpLmZvckVhY2gobGkgPT4ge1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgbCA9IGxpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcoJykgJiYgbC5lbmRzV2l0aCgnKScpKSBsID0gbC5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgdmFyIHNlcCA9ICcnXHJcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vwcy5sZW5ndGg7IGkrKykge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGwuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXAgPSBzZXBzW2ldXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICBpZiAoc2VwKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbC5zcGxpdChzZXApXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpLnJlcGxhY2UoL1xcXSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICcnXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3AgPSBzZXAudHJpbSgpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoWycgaW4nLCAnIG5vdCBpbiddLmluY2x1ZGVzKHNlcCkgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCdzZWxlY3QgJykgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCcgZnJvbSAnKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbC5yZXBsYWNlKGZpZWxkLCAnJykucmVwbGFjZSgvXlxccyooaW58bm90IGluKVxccyovLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJykpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgc3FsLnB1c2goW3sgZmllbGQsIHZhbHVlLCBvcCB9XSlcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgIH0pXHJcblx0ICAgICAgICAgICAgc3FsLnB1c2gocylcclxuXHQgICAgICAgIH1cclxuXHQgICAgICAgIGVsc2Uge1xyXG5cdCAgICAgICAgICAgIHZhciBsaSA9IHdoZXJlXHJcblx0ICAgICAgICAgICAgLy8g5Y2V5LiA5p+l6K+i5p2h5Lu255u05o6l5pS+5Zyo56ys5LiA57qn5pWw57uE5LitXHJcblx0ICAgICAgICAgICAgdmFyIGwgPSBsaS50cmltKClcclxuXHQgICAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcoJykgJiYgbC5lbmRzV2l0aCgnKScpKSBsID0gbC5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICB2YXIgc2VwID0gJydcclxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHQgICAgICAgICAgICAgICAgaWYgKGwuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHNlcCA9IHNlcHNbaV1cclxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgaWYgKHNlcCkge1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbC5zcGxpdChzZXApXHJcblx0ICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJykucmVwbGFjZSgvXFxdJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAnJ1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgb3AgPSBzZXAudHJpbSgpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgIGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJ3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJyBmcm9tICcpKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoL15cXHMqKGlufG5vdCBpbilcXHMqLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICBlbHNlIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoWydpbicsICdub3QgaW4nXS5pbmNsdWRlcyhvcCkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJykpXHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgc3FsLnB1c2goW3sgZmllbGQsIHZhbHVlLCBvcCB9XSlcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH0pXHJcblx0XHJcblx0ICAgIGlmIChzcWwubGVuZ3RoID4gMClcclxuXHQgICAgICAgIHJldHVybiBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtcclxuXHQgICAgICAgICAgICBtb2RlbDogMSxcclxuXHQgICAgICAgICAgICBjb25kaXRpb246IHNxbFxyXG5cdCAgICAgICAgfSkpXHJcblx0ICAgIGVsc2VcclxuXHQgICAgcmV0dXJuICcnXHJcblx0fSxcclxuXHRcclxuICB9LFxufTtcbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///175\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//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      show: true,\n      duration: 0,\n      modeClass: ['fade', 'slide-left'],\n      styles: {\n        justifyContent: 'center',\n        alignItems: 'center',\n        width: '100px',\n        height: '100px',\n        borderRadius: '5px',\n        textAlign: 'center',\n        backgroundColor: '#fff'\n      },\n      wheres: '',\n      orderby: ''\n    };\n  },\n  onReady: function onReady() {\n    // console.log(1111);\n    // this.$refs.ani.init({\n    // \tduration: 1000,  //过渡动画持续时间,单位ms\t\n    // \ttimingFunction: 'linear',\n    // \ttransformOrigin: '50% 50%',\n    // \tdelay: 500  //动画延迟时间,单位 ms\t\n    // });\n    // this.$refs.ani.step({\n    // \t// translateX: '50px'\n    // },{\n    // \tduration: 1000,  //过渡动画持续时间,单位ms\t\n    // \ttimingFunction: 'linear',\n    // \ttransformOrigin: '50% 50%',\n    // \tdelay: 500  //动画延迟时间,单位 ms\t\n    // });\n    // // 开始执行动画\n    // this.$refs.ani.run(()=>{\n    // \tconsole.log('动画支持完毕')\n    // });\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n      return _regenerator.default.wrap(function _callee2$(_context2) {\n        while (1) {\n          switch (_context2.prev = _context2.next) {\n            case 0:\n              // console.log(options);\n              _this.duration = 2000;\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/3201.vue:180\");\n              //加载初始界面\n              if (_this.$data.param.welcome_page) {\n                _this.$data.styles.width = _this.$data.param.welcome_page.width + 'px';\n                _this.$data.styles.height = _this.$data.param.welcome_page.height + 'px';\n                _this.$data.styles.backgroundColor = _this.$data.param.welcome_page.bkground_color;\n                _this.$data.param.welcome_page.img = _this.$data.param.welcome_page.img.replace(/ /g, '+');\n                _this.$data.param.welcome_page.width = parseInt(_this.$data.param.welcome_page.width);\n                _this.$data.param.welcome_page.height = parseInt(_this.$data.param.welcome_page.height);\n                _this.$data.param.catalog.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.img = ele.img.replace(/ /g, '+');\n                            ele.taskQty = 0;\n                            _context.next = 4;\n                            return _this.appGetInfo(ele.function_def_id, index);\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              }\n            case 6:\n            case \"end\":\n              return _context2.stop();\n          }\n        }\n      }, _callee2);\n    }))();\n  },\n  methods: {\n    //获取功能点信息\n    appGetInfo: function appGetInfo(appid, index) {\n      var _this2 = this;\n      var $this = this;\n      var json = {\n        app_id: [appid]\n      };\n      this.$store.dispatch('appGetInfo', json).then( /*#__PURE__*/function () {\n        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(success) {\n          var app, paramStr, appName, defCode, param;\n          return _regenerator.default.wrap(function _callee3$(_context3) {\n            while (1) {\n              switch (_context3.prev = _context3.next) {\n                case 0:\n                  if (!(success.err_code == 0)) {\n                    _context3.next = 24;\n                    break;\n                  }\n                  app = success.result[0];\n                  paramStr = app.param;\n                  appName = app.name;\n                  defCode = app.def_code;\n                  param = \"\";\n                  if (paramStr) {\n                    //mobox2的param是json字符串\n                    param = paramStr.replace(/\\\\/g, \"\");\n                    //mobox3的param是base64字符串\n                    if (!paramStr.includes('\"')) param = _base.default.decode(paramStr);\n                  }\n                  if (param) {\n                    _context3.next = 10;\n                    break;\n                  }\n                  uni.showModal({\n                    title: \"提示\",\n                    content: defCode + \"该功能点未配置参数,请重新配置参数!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                  return _context3.abrupt(\"return\");\n                case 10:\n                  _this2.$data.param.catalog[index].param = param;\n                  _this2.$data.param.catalog[index].appName = appName;\n                  param = JSON.parse(param);\n                  $this.orderby = param.Order ? param.Order : 'T_CREATE Desc';\n                  if (!param.Query_Event) {\n                    _context3.next = 19;\n                    break;\n                  }\n                  _context3.next = 17;\n                  return $this.onSearChange(param.DataCls.id, param.Query_Event.id, index);\n                case 17:\n                  _context3.next = 22;\n                  break;\n                case 19:\n                  $this.wheres = param.Condition;\n                  _context3.next = 22;\n                  return $this.loadDataGetList(param.DataCls.id, index);\n                case 22:\n                  _context3.next = 25;\n                  break;\n                case 24:\n                  uni.showModal({\n                    title: \"提示\",\n                    content: success.msg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                case 25:\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: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    // 执行查询事件\n    onSearChange: function onSearChange(clsid, eventid, index) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                try {\n                  if (eventid) {\n                    $this = _this3;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: true,\n                      class_id: clsid,\n                      event_id: eventid\n                    };\n                    _this3.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n                      __f__(\"log\", ret, \" at pages/modal/3201.vue:254\");\n                      if (ret.err_code == 0) {\n                        var result = ret.result;\n                        if (result.ret != 0) {\n                          var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n                          if (result.ret == 801) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });else uni.showModal({\n                            title: '提示',\n                            content: tip + ',提示:' + result.ret,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          return false;\n                        } else {\n                          var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                          if (tip) uni.showModal({\n                            title: '提示',\n                            content: tip,\n                            showCancel: false,\n                            confirmText: \"取消\"\n                          });\n                          if (result.result_type == 0 && result.action) {\n                            result.action.forEach(function (item) {\n                              if (item.action_type == \"set_query_condition\") {\n                                var value = item.value;\n                                $this.wheres = value.condition;\n                                $this.orderby = value.order ? value.order : $this.orderby;\n                                $this.loadDataGetList(clsid, index);\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"提示\",\n                                content: result.info,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\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                  }\n                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误1.2\",\n                    content: \"执行“查询事件”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    //查询数据类数据信息\n    loadDataGetList: function loadDataGetList(clsid, index) {\n      var _this4 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n        var condition, $this, dataInfo, tip;\n        return _regenerator.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                try {\n                  //条件查询\n                  condition = _this4.wheres; // console.log(condition);\n                  // console.log(this.orderby);\n                  $this = _this4;\n                  dataInfo = {\n                    class_id: clsid,\n                    attrs: [],\n                    condition: _this4.toWhereBase64String(\"\" + condition + \"\"),\n                    prj_rel_type: \"\",\n                    order_by: _this4.orderby,\n                    page_size: 99999,\n                    page: 1,\n                    query_id: ''\n                  };\n                  _this4.$store.dispatch('dataObjQuery', dataInfo).then(function (ret) {\n                    // console.log(ret);\n                    if (ret.err_code == 0) {\n                      if (ret.result) {\n                        $this.$data.param.catalog[index].taskQty = ret.result.obj_list.length;\n                        // console.log($this.$data.param.catalog[index]);\n                        var param = JSON.parse(JSON.stringify($this.$data.param));\n                        $this.$data.param = [];\n                        $this.$data.param = param;\n                      }\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                } catch (ex) {\n                  tip = typeof ex == \"string\" ? ex : ex.message;\n                  uni.showModal({\n                    title: \"错误2.2\",\n                    content: tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              case 1:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5);\n      }))();\n    },\n    //点击条目打开3200\n    onViewClick: function onViewClick(data) {\n      if (!data.function_def_id) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"该条目未关联功能点!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var $this = this;\n      uni.navigateTo({\n        url: '../modal/3200?param=' + data.param + \"&titlename=\" + data.appName,\n        events: {\n          // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据\n          view_3201: function view_3201(data) {\n            __f__(\"log\", data, \" at pages/modal/3201.vue:351\");\n            //刷新当前页面\n            // location.reload();\n            uni.redirectTo({\n              url: '../modal/3201?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        }\n      });\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    /**\r\n     * 只支持[\"column1='A' or column2='B'\", \"column3='C' and column4='D'\", \"column5='E'\"]这种格式\r\n     * {\r\n     *     \"model\": 0 / 1,\r\n     *     \"condition\":\r\n     *     [\r\n     *         [\r\n     *             { },\r\n     *             { },\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ],\r\n     *         [\r\n     *             { }\r\n     *         ]\r\n     *     ]\r\n     * }\r\n     */\n    toWhereBase64String: function toWhereBase64String(list) {\n      if (typeof list == 'string') list = [list];\n      var sql = [];\n      var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=', '>', ' like'];\n      list.forEach(function (ls) {\n        var where = ls.trim().toLowerCase();\n        if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\\(/, '').replace(/\\)$/, '');\n        if (where.includes(' and ')) {\n          // 二级and放在第一级数组中\n          where.split(' and ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$;\n              var values = l.split(sep);\n              var field = (_values$ = values[0]) === null || _values$ === void 0 ? void 0 : _values$.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$2;\n                value = (_values$2 = values[1]) === null || _values$2 === void 0 ? void 0 : _values$2.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n        } else if (where.includes(' or ')) {\n          // 二级or放在第二级同一组数组中\n          var s = [];\n          where.split(' or ').forEach(function (li) {\n            var l = li.trim();\n            if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n            var sep = '';\n            for (var i = 0; i < seps.length; i++) {\n              if (l.includes(seps[i])) {\n                sep = seps[i];\n                break;\n              }\n            }\n            if (sep) {\n              var _values$3;\n              var values = l.split(sep);\n              var field = (_values$3 = values[0]) === null || _values$3 === void 0 ? void 0 : _values$3.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n              var value = '';\n              var op = sep.trim();\n              if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n                value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n                if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n              } else {\n                var _values$4;\n                value = (_values$4 = values[1]) === null || _values$4 === void 0 ? void 0 : _values$4.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                if (['in', 'not in'].includes(op)) {\n                  value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                  value = value.split(',').map(function (v) {\n                    return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                  });\n                }\n              }\n              sql.push([{\n                field: field,\n                value: value,\n                op: op\n              }]);\n            }\n          });\n          sql.push(s);\n        } else {\n          var li = where;\n          // 单一查询条件直接放在第一级数组中\n          var l = li.trim();\n          if (l.startsWith('(') && l.endsWith(')')) l = l.replace(/^\\(/, '').replace(/\\)$/, '');\n          var sep = '';\n          for (var i = 0; i < seps.length; i++) {\n            if (l.includes(seps[i])) {\n              sep = seps[i];\n              break;\n            }\n          }\n          if (sep) {\n            var _values$5;\n            var values = l.split(sep);\n            var field = (_values$5 = values[0]) === null || _values$5 === void 0 ? void 0 : _values$5.trim().replace(/^\\[/, '').replace(/\\]$/, '');\n            var value = '';\n            var op = sep.trim();\n            if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1].includes(' from ')) {\n              value = l.replace(field, '').replace(/^\\s*(in|not in)\\s*/, '').trim();\n              if (value.startsWith('(') && value.endsWith(')')) value = value.replace(/^\\(/, '').replace(/\\)$/, '').trim();\n            } else {\n              var _values$6;\n              value = (_values$6 = values[1]) === null || _values$6 === void 0 ? void 0 : _values$6.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n              if (['in', 'not in'].includes(op)) {\n                value = value.replace(/^\\(/, '').replace(/\\)$/, '');\n                value = value.split(',').map(function (v) {\n                  return v.trim().replace(/^\\'/, '').replace(/\\'$/, '');\n                });\n              }\n            }\n            sql.push([{\n              field: field,\n              value: value,\n              op: op\n            }]);\n          }\n        }\n      });\n      if (sql.length > 0) return _base.default.encode(JSON.stringify({\n        model: 1,\n        condition: sql\n      }));else return '';\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzIwMS52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwic2hvdyIsImR1cmF0aW9uIiwibW9kZUNsYXNzIiwic3R5bGVzIiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwid2lkdGgiLCJoZWlnaHQiLCJib3JkZXJSYWRpdXMiLCJ0ZXh0QWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJ3aGVyZXMiLCJvcmRlcmJ5Iiwib25SZWFkeSIsIm9uTG9hZCIsIm9wdGlvbnMiLCJ1bmkiLCJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLCJ0aXRsZW5hbWUiLCIkZGF0YSIsIkpTT04iLCJwYXJzZSIsIndlbGNvbWVfcGFnZSIsImJrZ3JvdW5kX2NvbG9yIiwiaW1nIiwicmVwbGFjZSIsInBhcnNlSW50IiwiY2F0YWxvZyIsImZvckVhY2giLCJlbGUiLCJpbmRleCIsInRhc2tRdHkiLCJhcHBHZXRJbmZvIiwiZnVuY3Rpb25fZGVmX2lkIiwibWV0aG9kcyIsImFwcGlkIiwiJHRoaXMiLCJqc29uIiwiYXBwX2lkIiwiJHN0b3JlIiwiZGlzcGF0Y2giLCJ0aGVuIiwic3VjY2VzcyIsImVycl9jb2RlIiwiYXBwIiwicmVzdWx0IiwicGFyYW1TdHIiLCJhcHBOYW1lIiwibmFtZSIsImRlZkNvZGUiLCJkZWZfY29kZSIsImluY2x1ZGVzIiwiZGVjb2RlIiwic2hvd01vZGFsIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsIk9yZGVyIiwiUXVlcnlfRXZlbnQiLCJvblNlYXJDaGFuZ2UiLCJEYXRhQ2xzIiwiaWQiLCJDb25kaXRpb24iLCJsb2FkRGF0YUdldExpc3QiLCJtc2ciLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwiY2xzaWQiLCJldmVudGlkIiwiZGF0YUluZm8iLCJlZF90eXBlIiwic3RhcnRfdHJhbnNhY3Rpb24iLCJjbGFzc19pZCIsImV2ZW50X2lkIiwicmV0IiwidGlwIiwiZXJyX2luZm8iLCJqb2luIiwiaW5mbyIsInJlc3VsdF90eXBlIiwiYWN0aW9uIiwiaXRlbSIsImFjdGlvbl90eXBlIiwidmFsdWUiLCJjb25kaXRpb24iLCJvcmRlciIsImVycl9tc2ciLCJtZXNzYWdlIiwiYXR0cnMiLCJ0b1doZXJlQmFzZTY0U3RyaW5nIiwicHJqX3JlbF90eXBlIiwib3JkZXJfYnkiLCJwYWdlX3NpemUiLCJwYWdlIiwicXVlcnlfaWQiLCJvYmpfbGlzdCIsImxlbmd0aCIsInN0cmluZ2lmeSIsIm9uVmlld0NsaWNrIiwibmF2aWdhdGVUbyIsInVybCIsImV2ZW50cyIsInZpZXdfMzIwMSIsInJlZGlyZWN0VG8iLCJjYW5jZWwiLCJlIiwibmF2aWdhdGVCYWNrIiwiZGVsdGEiLCJsaXN0Iiwic3FsIiwic2VwcyIsImxzIiwid2hlcmUiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzcGxpdCIsImxpIiwibCIsInNlcCIsImkiLCJ2YWx1ZXMiLCJmaWVsZCIsIm9wIiwibWFwIiwidiIsInB1c2giLCJzIiwiZW5jb2RlIiwibW9kZWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQStIQTtBQS9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Y0FBRXhDLEtBQUssRUFBTEEsS0FBSztjQUFFeUMsRUFBRSxFQUFGQTtZQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3BDO1FBQ0o7TUFDSixDQUFDLENBQUM7TUFFRixJQUFJZixHQUFHLENBQUNiLE1BQU0sR0FBRyxDQUFDLEVBQ2QsT0FBT3JHLGFBQU0sQ0FBQ3NJLE1BQU0sQ0FBQzlHLElBQUksQ0FBQzhFLFNBQVMsQ0FBQztRQUNoQ2lDLEtBQUssRUFBRSxDQUFDO1FBQ1I5QyxTQUFTLEVBQUV5QjtNQUNmLENBQUMsQ0FBQyxDQUFDLE1BRVAsT0FBTyxFQUFFO0lBQ2I7RUFFQztBQUNGLENBQUM7QUFBQSwyQiIsImZpbGUiOiIxNzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG4vL1xyXG5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHQgIHRpdGxlOifmlrDlop4nLFxyXG4gICAgICBwYXJhbToge30sXHJcblx0ICBzaG93OiB0cnVlLFxyXG5cdCAgZHVyYXRpb246MCxcclxuXHQgIG1vZGVDbGFzczogWydmYWRlJywgJ3NsaWRlLWxlZnQnXSxcclxuXHQgIHN0eWxlczoge1xyXG5cdFx0anVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG5cdFx0YWxpZ25JdGVtczogJ2NlbnRlcicsXHJcblx0XHR3aWR0aDogJzEwMHB4JyxcclxuXHRcdGhlaWdodDogJzEwMHB4JyxcclxuXHRcdGJvcmRlclJhZGl1czogJzVweCcsXHJcblx0XHR0ZXh0QWxpZ246ICdjZW50ZXInLFxyXG5cdFx0YmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXHJcblx0ICB9LFxyXG4gICAgICB3aGVyZXM6JycsXHJcbiAgICAgIG9yZGVyYnk6JycsXHJcbiAgICB9O1xyXG4gIH0sXHJcbiAgb25SZWFkeSgpIHtcclxuXHQvLyBjb25zb2xlLmxvZygxMTExKTtcclxuXHQvLyB0aGlzLiRyZWZzLmFuaS5pbml0KHtcclxuXHQvLyBcdGR1cmF0aW9uOiAxMDAwLCAgLy/ov4fmuKHliqjnlLvmjIHnu63ml7bpl7TvvIzljZXkvY1tc1x0XHJcblx0Ly8gXHR0aW1pbmdGdW5jdGlvbjogJ2xpbmVhcicsXHJcblx0Ly8gXHR0cmFuc2Zvcm1PcmlnaW46ICc1MCUgNTAlJyxcclxuXHQvLyBcdGRlbGF5OiA1MDAgIC8v5Yqo55S75bu26L+f5pe26Ze077yM5Y2V5L2NIG1zXHRcclxuXHQvLyB9KTtcclxuXHQvLyB0aGlzLiRyZWZzLmFuaS5zdGVwKHtcclxuXHQvLyBcdC8vIHRyYW5zbGF0ZVg6ICc1MHB4J1xyXG5cdC8vIH0se1xyXG5cdC8vIFx0ZHVyYXRpb246IDEwMDAsICAvL+i/h+a4oeWKqOeUu+aMgee7reaXtumXtO+8jOWNleS9jW1zXHRcclxuXHQvLyBcdHRpbWluZ0Z1bmN0aW9uOiAnbGluZWFyJyxcclxuXHQvLyBcdHRyYW5zZm9ybU9yaWdpbjogJzUwJSA1MCUnLFxyXG5cdC8vIFx0ZGVsYXk6IDUwMCAgLy/liqjnlLvlu7bov5/ml7bpl7TvvIzljZXkvY0gbXNcdFxyXG5cdC8vIH0pO1xyXG5cdC8vIC8vIOW8gOWni+aJp+ihjOWKqOeUu1xyXG5cdC8vIHRoaXMuJHJlZnMuYW5pLnJ1bigoKT0+e1xyXG5cdC8vIFx0Y29uc29sZS5sb2coJ+WKqOeUu+aUr+aMgeWujOavlScpXHJcblx0Ly8gfSk7XHJcbiAgfSxcclxuICBhc3luYyBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHRoaXMuZHVyYXRpb249MjAwMDtcclxuXHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxyXG5cdHRoaXMuJGRhdGEudGl0bGUgPSBvcHRpb25zLnRpdGxlbmFtZTtcclxuXHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnBhcmFtKTtcclxuXHQvL+WKoOi9veWIneWni+eVjOmdolxyXG5cdGlmKHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlKXtcclxuXHQgIHRoaXMuJGRhdGEuc3R5bGVzLndpZHRoID0gdGhpcy4kZGF0YS5wYXJhbS53ZWxjb21lX3BhZ2Uud2lkdGgrJ3B4JztcclxuXHQgIHRoaXMuJGRhdGEuc3R5bGVzLmhlaWdodCA9IHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLmhlaWdodCsncHgnO1xyXG5cdCAgdGhpcy4kZGF0YS5zdHlsZXMuYmFja2dyb3VuZENvbG9yID0gdGhpcy4kZGF0YS5wYXJhbS53ZWxjb21lX3BhZ2UuYmtncm91bmRfY29sb3I7XHJcblx0ICBcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLmltZyA9IHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLmltZy5yZXBsYWNlKC8gL2csJysnKTtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0ud2VsY29tZV9wYWdlLndpZHRoID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS53ZWxjb21lX3BhZ2Uud2lkdGgpO1xyXG5cdCAgdGhpcy4kZGF0YS5wYXJhbS53ZWxjb21lX3BhZ2UuaGVpZ2h0ID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS53ZWxjb21lX3BhZ2UuaGVpZ2h0KTtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0uY2F0YWxvZy5mb3JFYWNoKGFzeW5jIChlbGUsaW5kZXgpID0+IHtcclxuXHRcdGVsZS5pbWcgPSBlbGUuaW1nLnJlcGxhY2UoLyAvZywnKycpO1xyXG5cdFx0ZWxlLnRhc2tRdHk9MDtcclxuXHRcdGF3YWl0IHRoaXMuYXBwR2V0SW5mbyhlbGUuZnVuY3Rpb25fZGVmX2lkLGluZGV4KTtcclxuXHQgIH0pO1xyXG5cdH1cclxuXHRcclxuICB9LFx0XHJcbiAgbWV0aG9kczoge1xyXG5cdC8v6I635Y+W5Yqf6IO954K55L+h5oGvXHJcblx0YXBwR2V0SW5mbyhhcHBpZCxpbmRleCl7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGpzb24gPXtcclxuXHRcdFx0YXBwX2lkOiBbYXBwaWRdXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2FwcEdldEluZm8nLGpzb24pLnRoZW4oYXN5bmMgc3VjY2Vzcz0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBhcHAgPSBzdWNjZXNzLnJlc3VsdFswXTtcclxuXHRcdFx0XHR2YXIgcGFyYW1TdHIgPSBhcHAucGFyYW07XHJcblx0XHRcdFx0dmFyIGFwcE5hbWUgPSBhcHAubmFtZTtcclxuXHRcdFx0XHR2YXIgZGVmQ29kZSA9IGFwcC5kZWZfY29kZTtcclxuXHRcdFx0XHR2YXIgcGFyYW0gPSBcIlwiO1xyXG5cdFx0XHRcdGlmKHBhcmFtU3RyKXtcclxuXHRcdFx0XHQgICAgLy9tb2JveDLnmoRwYXJhbeaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgcGFyYW0gPSBwYXJhbVN0ci5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgIC8vbW9ib3gz55qEcGFyYW3mmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgaWYoIXBhcmFtU3RyLmluY2x1ZGVzKCdcIicpKSBwYXJhbSA9IEJhc2U2NC5kZWNvZGUocGFyYW1TdHIpO1xyXG5cdFx0XHRcdH1cdCAgXHJcblx0XHRcdFx0aWYoIXBhcmFtKXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpkZWZDb2RlK1wi6K+l5Yqf6IO954K55pyq6YWN572u5Y+C5pWw77yM6K+36YeN5paw6YWN572u5Y+C5pWw77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuJGRhdGEucGFyYW0uY2F0YWxvZ1tpbmRleF0ucGFyYW09cGFyYW07XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5wYXJhbS5jYXRhbG9nW2luZGV4XS5hcHBOYW1lPWFwcE5hbWU7XHJcblx0XHRcdFx0cGFyYW0gPSBKU09OLnBhcnNlKHBhcmFtKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQkdGhpcy5vcmRlcmJ5ID0gcGFyYW0uT3JkZXI/cGFyYW0uT3JkZXI6J1RfQ1JFQVRFIERlc2MnO1xyXG5cdFx0XHRcdGlmKHBhcmFtLlF1ZXJ5X0V2ZW50KXtcclxuXHRcdFx0XHQgICAgYXdhaXQgJHRoaXMub25TZWFyQ2hhbmdlKHBhcmFtLkRhdGFDbHMuaWQscGFyYW0uUXVlcnlfRXZlbnQuaWQsaW5kZXgpO1xyXG5cdFx0XHRcdH0gZWxzZXtcclxuXHRcdFx0XHQgICR0aGlzLndoZXJlcyA9IHBhcmFtLkNvbmRpdGlvbjtcclxuXHRcdFx0XHQgIGF3YWl0ICR0aGlzLmxvYWREYXRhR2V0TGlzdChwYXJhbS5EYXRhQ2xzLmlkLGluZGV4KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHQvLyDmiafooYzmn6Xor6Lkuovku7ZcclxuXHRhc3luYyBvblNlYXJDaGFuZ2UoY2xzaWQsZXZlbnRpZCxpbmRleCkge1xyXG5cdCB0cnkge1xyXG5cdCAgICBpZiAoZXZlbnRpZCkge1xyXG5cdCBcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHQgXHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICBlZF90eXBlOiAwLFxyXG5cdCAgICAgICAgc3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHQgICAgY2xhc3NfaWQ6IGNsc2lkLFxyXG5cdFx0XHRldmVudF9pZDogZXZlbnRpZCxcclxuXHQgICAgICB9O1xyXG5cdCBcdCAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHQgXHQgIFx0Y29uc29sZS5sb2cocmV0KTtcclxuXHQgXHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0IFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0OyBcclxuXHQgXHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdCBcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdCBcdFx0XHQgICAgaWYgKHJlc3VsdC5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHQgXHRcdFx0fWVsc2V7XHJcblx0IFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0IFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHRcdFxyXG5cdCBcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwICYmIHJlc3VsdC5hY3Rpb24pe1xyXG5cdCBcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHQgXHRcdFx0XHRcdFx0aWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9xdWVyeV9jb25kaXRpb25cIil7IFxyXG5cdCBcdFx0XHRcdFx0XHQgICAgdmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHQgXHRcdFx0XHRcdFx0ICAgICR0aGlzLndoZXJlcyA9IHZhbHVlLmNvbmRpdGlvbjtcclxuXHQgXHRcdFx0XHRcdFx0ICAgICR0aGlzLm9yZGVyYnkgPSB2YWx1ZS5vcmRlcj92YWx1ZS5vcmRlcjokdGhpcy5vcmRlcmJ5O1xyXG5cdCBcdFx0XHRcdFx0XHQgICAgJHRoaXMubG9hZERhdGFHZXRMaXN0KGNsc2lkLGluZGV4KTtcclxuXHQgXHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0IFx0XHRcdFx0fWVsc2V7XHJcblx0IFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0IFx0XHRcdFx0XHRpZihyZXN1bHQuaW5mbyl7XHJcblx0IFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpyZXN1bHQuaW5mbyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHRcdFx0XHRcdH1cclxuXHQgXHRcdFx0XHR9XHJcblx0IFx0XHRcdH1cclxuXHQgXHQgIFx0XHRcclxuXHQgXHQgIFx0fWVsc2V7XHJcblx0IFx0ICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgXHQgIFx0fVxyXG5cdCBcdCAgfSkuY2F0Y2goZXg9PntcclxuXHQgXHQgIFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdCBcdCAgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCBcdCAgfSk7XHJcblx0ICAgICB9XHJcblx0IH0gY2F0Y2ggKGV4KSB7XHJcblx0ICAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0IFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50Olwi5omn6KGM4oCc5p+l6K+i5LqL5Lu24oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0IFx0XHJcblx0IH1cclxuXHR9LFxyXG5cdC8v5p+l6K+i5pWw5o2u57G75pWw5o2u5L+h5oGvXHJcblx0YXN5bmMgbG9hZERhdGFHZXRMaXN0KGNsc2lkLGluZGV4KXsgICBcclxuXHQgIHRyeXtcclxuXHQgICAgLy/mnaHku7bmn6Xor6JcclxuXHQgICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMud2hlcmVzO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhjb25kaXRpb24pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLm9yZGVyYnkpO1xyXG5cdCAgICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6IGNsc2lkLFxyXG5cdFx0XHRhdHRyczogW10sXHJcblx0XHRcdGNvbmRpdGlvbjogdGhpcy50b1doZXJlQmFzZTY0U3RyaW5nKFwiXCIrIGNvbmRpdGlvbiArXCJcIiksIFxyXG5cdFx0XHRwcmpfcmVsX3R5cGU6IFwiXCIsXHJcblx0XHRcdG9yZGVyX2J5OiB0aGlzLm9yZGVyYnksXHJcblx0XHRcdHBhZ2Vfc2l6ZTogOTk5OTksXHJcblx0XHRcdHBhZ2U6IDEsXHJcblx0XHRcdHF1ZXJ5X2lkOiAnJyxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9ialF1ZXJ5JyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdCl7XHJcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wYXJhbS5jYXRhbG9nW2luZGV4XS50YXNrUXR5PXJldC5yZXN1bHQub2JqX2xpc3QubGVuZ3RoO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEucGFyYW0uY2F0YWxvZ1tpbmRleF0pO1xyXG5cdFx0XHRcdFx0dmFyIHBhcmFtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5wYXJhbSkpO1xyXG5cdFx0XHRcdFx0JHRoaXMuJGRhdGEucGFyYW09W107XHJcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0ICB9IGNhdGNoIChleCkge1xyXG5cdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMlwiLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCAgfVxyXG5cdH0sXHJcblx0XHJcblx0Ly/ngrnlh7vmnaHnm67miZPlvIAzMjAwXHJcblx0b25WaWV3Q2xpY2soZGF0YSl7XHJcblx0XHRpZighZGF0YS5mdW5jdGlvbl9kZWZfaWQpe1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6XmnaHnm67mnKrlhbPogZTlip/og73ngrnvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0dXJsOicuLi9tb2RhbC8zMjAwP3BhcmFtPScrZGF0YS5wYXJhbStcIiZ0aXRsZW5hbWU9XCIrZGF0YS5hcHBOYW1lLFxyXG5cdFx0XHRldmVudHM6IHtcclxuXHRcdFx0XHQvLyDkuLrmjIflrprkuovku7bmt7vliqDkuIDkuKrnm5HlkKzlmajvvIzojrflj5booqvmiZPlvIDpobXpnaLkvKDpgIHliLDlvZPliY3pobXpnaLnmoTmlbDmja5cclxuXHRcdFx0XHR2aWV3XzMyMDE6IGZ1bmN0aW9uKGRhdGEpIHtcclxuXHRcdFx0XHQgICAgY29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHQvL+WIt+aWsOW9k+WJjemhtemdolxyXG5cdFx0XHRcdFx0Ly8gbG9jYXRpb24ucmVsb2FkKCk7XHJcblx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzIwMT9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrJHRoaXMuJGRhdGEudGl0bGVcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cdH0sXHRcdFx0XHJcblx0XHJcblx0XHJcblx0Y2FuY2VsKGUpeyAvL+WPlua2iFxyXG5cdFx0dW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdGRlbHRhOjEgLC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHQvKipcclxuXHQgKiDlj6rmlK/mjIFbXCJjb2x1bW4xPSdBJyBvciBjb2x1bW4yPSdCJ1wiLCBcImNvbHVtbjM9J0MnIGFuZCBjb2x1bW40PSdEJ1wiLCBcImNvbHVtbjU9J0UnXCJd6L+Z56eN5qC85byPXHJcblx0ICoge1xyXG5cdCAqICAgICBcIm1vZGVsXCI6IDAgLyAxLFxyXG5cdCAqICAgICBcImNvbmRpdGlvblwiOlxyXG5cdCAqICAgICBbXHJcblx0ICogICAgICAgICBbXHJcblx0ICogICAgICAgICAgICAgeyB9LFxyXG5cdCAqICAgICAgICAgICAgIHsgfSxcclxuXHQgKiAgICAgICAgICAgICB7IH1cclxuXHQgKiAgICAgICAgIF0sXHJcblx0ICogICAgICAgICBbXHJcblx0ICogICAgICAgICAgICAgeyB9XHJcblx0ICogICAgICAgICBdLFxyXG5cdCAqICAgICAgICAgW1xyXG5cdCAqICAgICAgICAgICAgIHsgfVxyXG5cdCAqICAgICAgICAgXVxyXG5cdCAqICAgICBdXHJcblx0ICogfVxyXG5cdCAqL1xyXG5cdHRvV2hlcmVCYXNlNjRTdHJpbmcobGlzdCkge1xyXG5cdCAgICBpZiAodHlwZW9mIGxpc3QgPT0gJ3N0cmluZycpIGxpc3QgPSBbbGlzdF1cclxuXHQgICAgdmFyIHNxbCA9IFtdXHJcblx0ICAgIHZhciBzZXBzID0gWycgbm90IGluJywgJyBpbicsICc8PicsICchPScsICc8PScsICc+PScsICc8JywgJz0nLCAnPicsICcgbGlrZSddXHJcblx0ICAgIGxpc3QuZm9yRWFjaChscyA9PiB7XHJcblx0ICAgICAgICB2YXIgd2hlcmUgPSBscy50cmltKCkudG9Mb3dlckNhc2UoKVxyXG5cdCAgICAgICAgaWYgKHdoZXJlLnN0YXJ0c1dpdGgoJygnKSAmJiB3aGVyZS5lbmRzV2l0aCgnKScpKSB3aGVyZSA9IHdoZXJlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgaWYgKHdoZXJlLmluY2x1ZGVzKCcgYW5kICcpKSB7XHJcblx0ICAgICAgICAgICAgLy8g5LqM57qnYW5k5pS+5Zyo56ys5LiA57qn5pWw57uE5LitXHJcblx0ICAgICAgICAgICAgd2hlcmUuc3BsaXQoJyBhbmQgJykuZm9yRWFjaChsaSA9PiB7XHJcblx0ICAgICAgICAgICAgICAgIHZhciBsID0gbGkudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJygnKSAmJiBsLmVuZHNXaXRoKCcpJykpIGwgPSBsLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICB2YXIgc2VwID0gJydcclxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXBzLmxlbmd0aDsgaSsrKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAobC5pbmNsdWRlcyhzZXBzW2ldKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9IHNlcHNbaV1cclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIGlmIChzZXApIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBsLnNwbGl0KHNlcClcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJykucmVwbGFjZSgvXFxdJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJydcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvcCA9IHNlcC50cmltKClcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJ3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJyBmcm9tICcpKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsLnJlcGxhY2UoZmllbGQsICcnKS5yZXBsYWNlKC9eXFxzKihpbnxub3QgaW4pXFxzKi8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnKCcpICYmIHZhbHVlLmVuZHNXaXRoKCcpJykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbMV0/LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJylcclxuXHRcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoWydpbicsICdub3QgaW4nXS5pbmNsdWRlcyhvcCkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpLnJlcGxhY2UoL15cXCcvLCAnJykucmVwbGFjZSgvXFwnJC8sICcnKSlcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgICAgICBzcWwucHVzaChbeyBmaWVsZCwgdmFsdWUsIG9wIH1dKVxyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgfSlcclxuXHQgICAgICAgIH1cclxuXHQgICAgICAgIGVsc2UgaWYgKHdoZXJlLmluY2x1ZGVzKCcgb3IgJykpIHtcclxuXHQgICAgICAgICAgICAvLyDkuoznuqdvcuaUvuWcqOesrOS6jOe6p+WQjOS4gOe7hOaVsOe7hOS4rVxyXG5cdCAgICAgICAgICAgIHZhciBzID0gW11cclxuXHQgICAgICAgICAgICB3aGVyZS5zcGxpdCgnIG9yICcpLmZvckVhY2gobGkgPT4ge1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgbCA9IGxpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcoJykgJiYgbC5lbmRzV2l0aCgnKScpKSBsID0gbC5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgdmFyIHNlcCA9ICcnXHJcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vwcy5sZW5ndGg7IGkrKykge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGwuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXAgPSBzZXBzW2ldXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICBpZiAoc2VwKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbC5zcGxpdChzZXApXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB2YWx1ZXNbMF0/LnRyaW0oKS5yZXBsYWNlKC9eXFxbLywgJycpLnJlcGxhY2UoL1xcXSQvLCAnJylcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICcnXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3AgPSBzZXAudHJpbSgpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoWycgaW4nLCAnIG5vdCBpbiddLmluY2x1ZGVzKHNlcCkgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCdzZWxlY3QgJykgJiYgdmFsdWVzWzFdLmluY2x1ZGVzKCcgZnJvbSAnKSkge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbC5yZXBsYWNlKGZpZWxkLCAnJykucmVwbGFjZSgvXlxccyooaW58bm90IGluKVxccyovLCAnJykudHJpbSgpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFsnaW4nLCAnbm90IGluJ10uaW5jbHVkZXMob3ApKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXlxcKC8sICcnKS5yZXBsYWNlKC9cXCkkLywgJycpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJykpXHJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICAgICAgc3FsLnB1c2goW3sgZmllbGQsIHZhbHVlLCBvcCB9XSlcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgIH0pXHJcblx0ICAgICAgICAgICAgc3FsLnB1c2gocylcclxuXHQgICAgICAgIH1cclxuXHQgICAgICAgIGVsc2Uge1xyXG5cdCAgICAgICAgICAgIHZhciBsaSA9IHdoZXJlXHJcblx0ICAgICAgICAgICAgLy8g5Y2V5LiA5p+l6K+i5p2h5Lu255u05o6l5pS+5Zyo56ys5LiA57qn5pWw57uE5LitXHJcblx0ICAgICAgICAgICAgdmFyIGwgPSBsaS50cmltKClcclxuXHQgICAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcoJykgJiYgbC5lbmRzV2l0aCgnKScpKSBsID0gbC5yZXBsYWNlKC9eXFwoLywgJycpLnJlcGxhY2UoL1xcKSQvLCAnJylcclxuXHQgICAgICAgICAgICB2YXIgc2VwID0gJydcclxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcHMubGVuZ3RoOyBpKyspIHtcclxuXHQgICAgICAgICAgICAgICAgaWYgKGwuaW5jbHVkZXMoc2Vwc1tpXSkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHNlcCA9IHNlcHNbaV1cclxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgaWYgKHNlcCkge1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbC5zcGxpdChzZXApXHJcblx0ICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHZhbHVlc1swXT8udHJpbSgpLnJlcGxhY2UoL15cXFsvLCAnJykucmVwbGFjZSgvXFxdJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAnJ1xyXG5cdCAgICAgICAgICAgICAgICB2YXIgb3AgPSBzZXAudHJpbSgpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgIGlmIChbJyBpbicsICcgbm90IGluJ10uaW5jbHVkZXMoc2VwKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJ3NlbGVjdCAnKSAmJiB2YWx1ZXNbMV0uaW5jbHVkZXMoJyBmcm9tICcpKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGwucmVwbGFjZShmaWVsZCwgJycpLnJlcGxhY2UoL15cXHMqKGlufG5vdCBpbilcXHMqLywgJycpLnRyaW0oKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJygnKSAmJiB2YWx1ZS5lbmRzV2l0aCgnKScpKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS50cmltKClcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgICBlbHNlIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzWzFdPy50cmltKCkucmVwbGFjZSgvXlxcJy8sICcnKS5yZXBsYWNlKC9cXCckLywgJycpXHJcblx0XHJcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoWydpbicsICdub3QgaW4nXS5pbmNsdWRlcyhvcCkpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKVxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiB2LnRyaW0oKS5yZXBsYWNlKC9eXFwnLywgJycpLnJlcGxhY2UoL1xcJyQvLCAnJykpXHJcblx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgICAgc3FsLnB1c2goW3sgZmllbGQsIHZhbHVlLCBvcCB9XSlcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH0pXHJcblx0XHJcblx0ICAgIGlmIChzcWwubGVuZ3RoID4gMClcclxuXHQgICAgICAgIHJldHVybiBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtcclxuXHQgICAgICAgICAgICBtb2RlbDogMSxcclxuXHQgICAgICAgICAgICBjb25kaXRpb246IHNxbFxyXG5cdCAgICAgICAgfSkpXHJcblx0ICAgIGVsc2VcclxuXHQgICAgcmV0dXJuICcnXHJcblx0fSxcclxuXHRcclxuICB9LFxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///175\n");
/***/ }),
/* 176 */