unpackage/dist/dev/app-plus/app-service.js
@@ -31073,7 +31073,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));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/3037.vue:736\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrGetList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.classAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(group, index) {\n              return _regenerator.default.wrap(function _callee2$(_context2) {\n                while (1) {\n                  switch (_context2.prev = _context2.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(attr, key) {\n                          return _regenerator.default.wrap(function _callee$(_context) {\n                            while (1) {\n                              switch (_context.prev = _context.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context.next = 3;\n                                    break;\n                                  }\n                                  _context.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'mast');\n                                case 3:\n                                case \"end\":\n                                  return _context.stop();\n                              }\n                            }\n                          }, _callee);\n                        }));\n                        return function (_x3, _x4) {\n                          return _ref2.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context2.stop();\n                  }\n                }\n              }, _callee2);\n            }));\n            return function (_x, _x2) {\n              return _ref.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrGetList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.subClassAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(group, index) {\n              return _regenerator.default.wrap(function _callee4$(_context4) {\n                while (1) {\n                  switch (_context4.prev = _context4.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(attr, key) {\n                          return _regenerator.default.wrap(function _callee3$(_context3) {\n                            while (1) {\n                              switch (_context3.prev = _context3.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context3.next = 3;\n                                    break;\n                                  }\n                                  _context3.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'sub');\n                                case 3:\n                                case \"end\":\n                                  return _context3.stop();\n                              }\n                            }\n                          }, _callee3);\n                        }));\n                        return function (_x7, _x8) {\n                          return _ref4.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context4.stop();\n                  }\n                }\n              }, _callee4);\n            }));\n            return function (_x5, _x6) {\n              return _ref3.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    DictItemGetList: function DictItemGetList(attr, key, index, type) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                //Mobox3得到字典项列表\n                _this.data = [];\n                $this = _this;\n                dataInfo = {\n                  dict_id: attr.dict_id,\n                  dict_name: attr.dict_name\n                }; // console.log(dataInfo);\n                _this.$store.dispatch('DictItemGetList', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                    return _regenerator.default.wrap(function _callee5$(_context5) {\n                      while (1) {\n                        switch (_context5.prev = _context5.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                $this.$data.classAttrList[index].attr_list[key].dictitem = success.result;\n                                _this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\n                              } else {\n                                $this.$data.subClassAttrList[index].attr_list[key].dictitem = success.result;\n                                _this.$store.commit(\"subClassAttrList\", $this.$data.subClassAttrList);\n                              }\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context5.stop();\n                        }\n                      }\n                    }, _callee5);\n                  }));\n                  return function (_x9) {\n                    return _ref5.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                $this = _this2;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  ui_style_type: 2,\n                  ui_style_name: styleName\n                }; // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  $this.$store.state.thisEditName = styleName;\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo;\n                    $this.viewParam('Mast');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.classGridStyle = success.result;\n                        // console.log($this.$data.classGridStyle);\n\n                        $this.viewParam('Mast');\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:873\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  $this.$store.state.thisEditSubName = styleName;\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo;\n                    $this.viewParam('Sub');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.subClassGridStyle = success.result;\n                        // console.log($this.$data.subClassGridStyle);\n\n                        $this.viewParam('Sub');\n\n                        // $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:899\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 3:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }))();\n    },\n    viewParam: function viewParam(type) {\n      //将mobox3小写参数转换为mobox2大写参数\n      var classGridStyle = '';\n      var classAttrList = '';\n      if (type == 'Mast') {\n        classGridStyle = this.$data.classGridStyle;\n        classAttrList = this.$data.classAttrList;\n      } else if (type == 'Sub') {\n        classGridStyle = this.$data.subClassGridStyle;\n        classAttrList = this.$data.subClassAttrList;\n      }\n      var class_gridStyle = {\n        ID: classGridStyle.id,\n        Name: classGridStyle.name,\n        Type: classGridStyle.type,\n        IsDefault: classGridStyle.is_defaul,\n        StyleDef: classGridStyle.style_def\n      };\n      var class_attrList = [];\n      classAttrList.forEach(function (data) {\n        var attrs = [];\n        if (data.attr_list) {\n          data.attr_list.forEach(function (attr) {\n            var dictitems = [];\n            if (attr.dictitem) {\n              attr.dictitem.forEach(function (dict) {\n                dictitems.push({\n                  ID: dict.id,\n                  Name: dict.name,\n                  Note: dict.note,\n                  Order: dict.order,\n                  ImgUrl: null,\n                  Code: dict.code,\n                  HasSub: null,\n                  ParentID: null,\n                  ParentName: null,\n                  Lvl: dict.lvl,\n                  IsDefault: dict.is_default,\n                  Value: dict.value,\n                  CN_G_ID: dict.id,\n                  CN_G_DICT_ID: null,\n                  CN_S_NAME: dict.name,\n                  CN_S_NOTE: dict.note,\n                  CN_N_ORDER: dict.order,\n                  CN_S_IMG_URL: null,\n                  CN_S_CODE: dict.code,\n                  CN_C_HAS_SUB: null,\n                  CN_G_PARENT_ITEM_ID: null,\n                  CN_G_PARENT_ITEM_NAME: null,\n                  CN_N_LVL: dict.lvl,\n                  CN_C_IS_DEFAULT: dict.is_default,\n                  CN_S_VALUE: dict.value\n                });\n              });\n            }\n            attrs.push({\n              ID: attr.id,\n              Name: attr.name,\n              Type: attr.type,\n              Size: attr.size,\n              NotEmpty: attr.not_empty,\n              DefValue: attr.def_value,\n              Order: attr.order,\n              DictName: attr.dict_name,\n              DictID: attr.dict_id,\n              CodeDefName: attr.code_def_name,\n              CodeDefID: attr.code_def_id,\n              RelClsID: null,\n              RelCls: attr.ref_cls,\n              Width: attr.width,\n              Height: attr.height,\n              CtrlStyle: attr.ctrl_style,\n              HasAce: attr.has_ace,\n              CanShow: attr.can_show,\n              CanQuery: attr.can_query,\n              ReadOnly: attr.read_only,\n              IsKey: attr.is_key,\n              IsFixed: attr.is_fixed,\n              DispName: attr.disp_name,\n              LuaAttr: attr.lua_attr,\n              Desc: attr.desc,\n              ActionDef: attr.action_def ? _base.default.decode(attr.action_def) : '',\n              Multilingual: attr.multilingual,\n              RefCondition: attr.ref_condition,\n              GroupName: data.group,\n              Value: null,\n              dictitem: dictitems\n            });\n          });\n        }\n        class_attrList.push({\n          Name: data.group,\n          Order: data.order,\n          HasAce: data.has_ace,\n          BkColor: data.bk_color,\n          ImgFontStyle: data.img_font_style,\n          Attr: attrs\n        });\n      });\n      if (type == 'Mast') {\n        this.$data.classGridStyle = class_gridStyle;\n        this.$data.classAttrList = class_attrList;\n        // console.log('------Mast--------');\n        // console.log(this.$data.classGridStyle);\n        // console.log(this.$data.classAttrList);\n        this.class_attr_init();\n      } else if (type == 'Sub') {\n        this.$data.subClassGridStyle = class_gridStyle;\n        this.$data.subClassAttrList = class_attrList;\n        // console.log('------Sub--------');\n        // console.log(this.$data.subClassGridStyle);\n        // console.log(this.$data.subClassAttrList);\n        this.subClass_attr_init();\n      }\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/3037.vue:1146\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/3037.vue:1147\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/3037.vue:1279\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/3037.vue:1280\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        edit_dlg: {\n          type: 'small',\n          //小窗口\n          class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n        },\n\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      var req = [];\n      var req = [];\n      // var attrlist = this.$data.subClassAttrList;\n      // var msg='';\n      // for (var i = 0; i < attrlist.length; i++) {\n      // \tvar attr = attrlist[i].Attr;\n      // \tfor (var j = 0; j < attr.length; j++) {\n      // \t\tvar ar = attr[j];\n      // \t\tif(ar.Type=='引用对象(多个)')\n      // \t\t\tif(ar.Value=='请') ar.Value='';\n      // \t\tif(ar.Type=='引用人员' || ar.Type=='引用项目')\n      // \t\t\treq.push({ attr: ar.Name, value: ar.ValID ?ar.ValID :'' });\n      // \t\telse if(ar.Type=='布尔值')\n      // \t\t\treq.push({ attr: ar.Name, value: ar.Value?'1':'0'});\n      // \t\telse\n      // \t\t\treq.push({ attr: ar.Name, value: ar.Value ?ar.Value :''});\n      // \t}\n      // }\n\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: [],\n        global_attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr,\n        enviroment: enviroment\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3037.vue:1434\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: [{\n          attr: 'mast_input_3037',\n          value: name\n        }],\n        global_attr: mast_attr,\n        inputParamter: data,\n        enviroment: ''\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          class_id: this.$data.param.Sub_Cls.ID,\n          class_name: '',\n          obj_id: this.$data.subPanelList[index].ObjID\n        };\n        // console.log(dataInfo);\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('dataObjDel', dataInfo).then(function (success) {\n          // console.log(success);\n          uni.hideLoading();\n          if (ret.err_code == 0) {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/3037.vue:1548\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    ontap: function ontap(e) {\n      var _this3 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // if(!isVal){\n        // \tthis.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=result.decodedata;\n        // \tvar isVald =this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // \treturn;\n        // }\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    subontap: function subontap(e) {\n      var _this4 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this4.$data.subClassAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this5 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3037.vue:1656\");\n        var isflag = true;\n        for (var i in _this5.$data.subPanelList) {\n          if (_this5.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this5.$data.scanCodeVal = result.decodedata;\n          var eventid = _this5.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this5.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this5.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this5.$data.scanCodeVal\n              }]\n            };\n            _this5.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = this.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = this.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Open;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = open == true ? false : true;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['iiindex']].subClassAttr[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1808\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1877\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          // console.log(this.$data.classAttrList[index].Attr[iindex].Value);\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    sub_onchange: function sub_onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1921\");\n      var value = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    sub_onchange2: function sub_onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      var subClassAttr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                subClassAttr[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (item[v].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = subClassAttr[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1995\");\n        if (itemvalue.Name != data_attr.Value) {\n          subClassAttr[index].Attr[iindex].Value = value;\n          // console.log(subClassAttr[index].Attr[iindex].Value);\n          var eventid = subClassAttr[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = subClassAttr;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        // var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList; //主数据类属性\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                value: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                value: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                value: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: e.target.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        return;\n      }\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/3037.vue:2142\");\n      this.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/3037.vue:2168\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:2197\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    add: function add() {\n      var _this6 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n\n      // var dataInfo={\n      //     class_id: this.$data.param.Master_Cls.ID, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.name] = item.value;\n      });\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2322\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2325\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          if (success.result.action) {\n            var action = JSON.parse(success.result.Action);\n            if (action.ret == '0') {\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3037?param=' + JSON.stringify(_this6.$data.param) + \"&titlename=\" + _this6.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3037.vue:2348\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this7 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n\n      // var dataInfo = {\n      //                 edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //                 rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //                 attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //             }\n      param.enviroment = _base.default.encode(JSON.stringify(param.enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param.enviroment,\n        global_attr: global_attr,\n        input_param: inputparameter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2402\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2405\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip) uni.showModal({\n              title: '提示',\n              content: _tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data.action) {\n              var actionlist = data.action;\n              if (actionlist) {\n                for (var j = 0; j < actionlist.length; j++) {\n                  var action = actionlist[j];\n                  var action_type = action.action_type;\n                  var value = action.value;\n                  if (action_type == 'set_dlg_attr') {\n                    if (value) {\n                      var val = value;\n                      if (typeof value == 'string') {\n                        val = JSON.parse(value);\n                      }\n                      __f__(\"log\", val, \" at pages/modal/3037.vue:2430\");\n                      for (var i = 0; i < val.length; i++) {\n                        for (var a = 0; a < _this7.$data.classAttrList.length; a++) {\n                          for (var l = 0; l < _this7.$data.classAttrList[a].Attr.length; l++) {\n                            var ca = _this7.$data.classAttrList[a].Attr[l];\n                            if (val[i].attr == ca.Name) {\n                              if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in val[i].choice_list) {\n                                  var val = val[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                ca.dictitem = dictItemList;\n                                // attr[j].dictitem = val[i].choice_list;\n                              } else {\n                                // ca.value = val[i].value;\n                              }\n                            }\n                          }\n                        }\n                        var length = 0;\n                        if (!_this7.$data.refdatastore.filter(function (s) {\n                          return val[i].attr == s.attr;\n                        }).length) {\n                          length = 1;\n                          _this7.$data.refdatastore.push(val[i]);\n                        }\n                        if (length == 0) {\n                          for (var j = 0; j < _this7.$data.refdatastore.length; j++) {\n                            if (_this7.$data.refdatastore[j].attr == val[i].attr) {\n                              _this7.$data.refdatastore[j].value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (action_type == 'open_select_userdlg') {\n                    uni.showModal({\n                      title: \"错误2.2\",\n                      content: \"open_select_userdlg这个action_type还未处理!\",\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: '', global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2544\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2547\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip2 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip2) uni.showModal({\n              title: '提示',\n              content: _tip2,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037.vue:2561\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                        var attr = $this.$data.classAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:2588\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                  var attr = $this.$data.classAttrList[c].Attr;\n                  for (var j = 0; j < attr.length; j++) {\n                    if (attr[j].Name == result[i].attr) {\n                      attr[j].Value = result[i].value;\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this8 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      //  \tvar dataInfo = {\n      //          edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,rclsid: info.rclsid, \n      // robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      // attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), global_attr: JSON.stringify(this.$data.global_attr)\n      //      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2733\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2736\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip3 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip3) uni.showModal({\n              title: '提示',\n              content: _tip3,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n              var length = 0;\n              if (!_this8.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                _this8.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < _this8.$data.refdatastore.length; j++) {\n                  if (_this8.$data.refdatastore[j].attr == result[i].attr) {\n                    _this8.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n            _this8.add();\n          }\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this9 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.Master_Cls.ID, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: '',\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: obj_attr,\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: '',\n        compose_info: '',\n        ext_info: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2861\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2864\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip4 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip4) uni.showModal({\n              title: '提示',\n              content: _tip4,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data != \"\") {\n              var actions = data.action;\n              __f__(\"log\", actions, \" at pages/modal/3037.vue:2878\");\n              if (actions) {\n                for (var i = 0; i < actions.length; i++) {\n                  var action = actions[i];\n                  var val = action.value;\n                  var enviroment = JSON.stringify(enviroment);\n                  if (action.action_type == 'open_panel') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_select_userdlg') {\n                    var style = val.style;\n                    // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                    var $this = _this9;\n                    var param = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    uni.navigateTo({\n                      url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          // console.log(param);\n                          __f__(\"log\", data, \" at pages/modal/3037.vue:2908\");\n                          var callback_eventid = param.button_callback.trim();\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"0\",\n                            projectid: '',\n                            rclsid: '',\n                            robjid: '',\n                            userlogin: '',\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req,\n                            inputparameter: data\n                          };\n                          $this.DataObjRunCustomEvent(info, param.data_attr);\n                        }\n                      }\n                    });\n                  } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                    var value = action.value;\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_project_query_dlg') {\n                    //console.log(action.value.select_range);\n                    //console.log(action.value.mulit_select);\n                    var priRel = '-1';\n                    if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                    var $this = _this9;\n                    var param_ = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req\n                    };\n                    uni.navigateTo({\n                      url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                          var callback_eventid = param.button_callback.trim();\n                          if (callback_eventid) {\n                            var info = {\n                              eventid: callback_eventid,\n                              edtype: \"2\",\n                              projectid: data[0].ID,\n                              rclsid: \"\",\n                              robjid: \"\",\n                              userlogin: \"\",\n                              clsid: $this.$data.param.Master_Cls.ID,\n                              objid: \"\",\n                              attr: param.req\n                            };\n                            $this.DataObjRunCustomEvent(info);\n                          }\n                        }\n                      }\n                    });\n                  } else {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  }\n                }\n              }\n            } else {\n              uni.showModal({\n                title: \"提示5.2\",\n                content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this10 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //    }\n      param = _base.default.encode(JSON.stringify(param)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param,\n        global_attr: '',\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3056\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3059\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip5 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip5) uni.showModal({\n              title: '提示',\n              content: _tip5,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              for (var j = 0; j < actionlist.length; j++) {\n                var action = actionlist[j];\n                var action_type = action.action_type;\n                var value = action.value;\n                if (action_type == 'set_dlg_attr') {\n                  if (value) {\n                    var val = value;\n                    if (typeof value == 'string') {\n                      val = JSON.parse(value);\n                    }\n                    __f__(\"log\", val, \" at pages/modal/3037.vue:3083\");\n                    for (var i = 0; i < val.length; i++) {\n                      for (var a = 0; a < _this10.$data.subClassAttrList.length; a++) {\n                        for (var l = 0; l < _this10.$data.subClassAttrList[a].Attr.length; l++) {\n                          var ca = _this10.$data.subClassAttrList[a].Attr[l];\n                          if (val[i].attr == ca.Name) {\n                            if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in val[i].choice_list) {\n                                var val = val[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              ca.dictitem = dictItemList;\n                              // attr[j].dictitem = val[i].choice_list;\n                            } else {\n                              // ca.value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                      var length = 0;\n                      if (!_this10.$data.refdatastore.filter(function (s) {\n                        return val[i].attr == s.attr;\n                      }).length) {\n                        length = 1;\n                        _this10.$data.refdatastore.push(val[i]);\n                      }\n                      if (length == 0) {\n                        for (var j = 0; j < _this10.$data.refdatastore.length; j++) {\n                          if (_this10.$data.refdatastore[j].attr == val[i].attr) {\n                            _this10.$data.refdatastore[j].value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n                if (action_type == 'open_select_userdlg') {\n                  uni.showModal({\n                    title: \"错误6.2\",\n                    content: \"open_select_userdlg这个action_type还未处理!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this11 = this;\n      var $this = this;\n      var enviroment = {};\n      if (info.enviroment) {\n        enviroment = info.enviroment;\n      } else {\n        enviroment = {\n          'function': '3000',\n          // 功能点编号\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          edit_dlg: {\n            type: 'small',\n            //小窗口\n            class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n          }\n        };\n      }\n\n      var global_attr = this.$data.global_attr;\n      if (info.global_attr) {\n        global_attr = info.global_attr;\n      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      if (info.inputParamter) {\n        info.inputParamter = _base.default.encode(JSON.stringify(info.inputParamter)); //将字符串转换为base64编码\n      }\n\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid.replace('{', '').replace('}', ''),\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: info.inputParamter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3189\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3192\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip6 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip6) uni.showModal({\n              title: '提示',\n              content: _tip6,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037.vue:3206\");\n              for (var ii = 0; ii < actionlist.length; ii++) {\n                var action = actionlist[ii];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                        for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                          var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            if (attr[j].Name == result[i].attr) {\n                              if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                attr[j].dictitem = dictItemList;\n                                // attr[j].dictitem = result[i].choice_list;\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:3236\");\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (action.action_type == 'set_global_attr') {\n                  $this.$actiontr = action.value || [];\n                } else if (action.action_type == 'open_common_dlg') {\n                  //打开侧滑弹框\n                  var $this = _this11;\n                  if (action.value.common_dlg_id == 'check_list') {\n                    $this.$data.check_list = action.value.config;\n                    if (action.value.config.appear_style == 'sideslip')\n                      //判断是否是侧滑\n                      $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                    // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                    $this.$refs.popup.open($this.$data.popupType);\n                  }\n                } else if (action.action_type == 'add_subcls_panel') {\n                  //主从数据类扫码查询数据\n                  var result = action.value;\n                  var $this = _this11;\n                  var list_1 = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n                  var scanCodeVal = $this.$data.scanCodeVal;\n                  var rand = '';\n                  for (var i = 0; i < 5; i++) {\n                    //生成5位随机数\n                    rand += Math.floor(Math.random() * 10);\n                  }\n                  if (info.inputParamter[0].attr) {\n                    if (info.inputParamter[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  if (info.attr[0].attr) {\n                    if (info.attr[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  $this.$data.subPanelList.push({\n                    scanCodeVal: scanCodeVal,\n                    subClassAttr: list_1\n                  });\n                  for (var i = 0; i < result.length; i++) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                        if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                        var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                        for (var c = 0; c < _subClassAttr.length; c++) {\n                          var attr = _subClassAttr[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            // console.log(attr[j].Name+'=='+result[i].attr);\n                            if (attr[j].Name == result[i].attr) {\n                              attr[j].Value = result[i].value;\n                            }\n                          }\n                        }\n\n                        // $this.$data.subPanelList[s].subClassAttr=list_1;\n                      }\n                    }\n\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n            if (data.result) {\n              var _list_ = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n              var scanCodeVal = $this.$data.scanCodeVal;\n              if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n              $this.$data.subPanelList.push({\n                scanCodeVal: scanCodeVal,\n                subClassAttr: _list_\n              });\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                  if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                    if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                    var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                    for (var c = 0; c < _subClassAttr.length; c++) {\n                      var attr = _subClassAttr[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        // console.log(attr[j].Name+'=='+result[i].attr);\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      //  \tvar dataInfo = {\n      //          edtype: \"7\", eventid: eventID, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // clsid: 'MBOX', objid: '',attr: JSON.stringify([]), extinfo: JSON.stringify([]), \n      // global_attr: JSON.stringify($this.$data.global_attr),dataJson:JSON.stringify(dataJson)\n      //      }\n      // console.log(JSON.stringify(dataInfo));\n      var dataJson = _base.default.encode(JSON.stringify(dataJson)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (!eventID.includes('{')) eventID = '{' + eventID + '}';\n      var dataInfo = {\n        ed_type: \"7\",\n        start_transaction: '',\n        class_id: 'MBOX',\n        class_name: '',\n        event_id: eventID,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: '',\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: dataJson,\n        compose_info: '',\n        ext_info: '',\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3511\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3514\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip7 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip7) uni.showModal({\n              title: '提示',\n              content: _tip7,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n              //刷新\n              uni.redirectTo({\n                url: '../modal/3037?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  }\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAzNy52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImNvbXBvbmVudHMiLCJwaWNrZXJBZGRyZXNzIiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGUiLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0Iiwib25Mb2FkIiwidW5pIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsImNsYXNzX2lkIiwiJHRoaXMiLCJzdWNjZXNzIiwiZ3JvdXAiLCJhdHRyIiwic2V0VGltZW91dCIsIm1ldGhvZHMiLCJEaWN0SXRlbUdldExpc3QiLCJkYXRhSW5mbyIsImRpY3RfaWQiLCJkaWN0X25hbWUiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJncmlkc3R5bGVJbmZvIiwidWlfc3R5bGVfdHlwZSIsInVpX3N0eWxlX25hbWUiLCJ2aWV3UGFyYW0iLCJJRCIsIk5hbWUiLCJUeXBlIiwiSXNEZWZhdWx0IiwiU3R5bGVEZWYiLCJkaWN0aXRlbXMiLCJOb3RlIiwiT3JkZXIiLCJJbWdVcmwiLCJDb2RlIiwiSGFzU3ViIiwiUGFyZW50SUQiLCJQYXJlbnROYW1lIiwiTHZsIiwiVmFsdWUiLCJDTl9HX0lEIiwiQ05fR19ESUNUX0lEIiwiQ05fU19OQU1FIiwiQ05fU19OT1RFIiwiQ05fTl9PUkRFUiIsIkNOX1NfSU1HX1VSTCIsIkNOX1NfQ09ERSIsIkNOX0NfSEFTX1NVQiIsIkNOX0dfUEFSRU5UX0lURU1fSUQiLCJDTl9HX1BBUkVOVF9JVEVNX05BTUUiLCJDTl9OX0xWTCIsIkNOX0NfSVNfREVGQVVMVCIsIkNOX1NfVkFMVUUiLCJhdHRycyIsIlNpemUiLCJOb3RFbXB0eSIsIkRlZlZhbHVlIiwiRGljdE5hbWUiLCJEaWN0SUQiLCJDb2RlRGVmTmFtZSIsIkNvZGVEZWZJRCIsIlJlbENsc0lEIiwiUmVsQ2xzIiwiV2lkdGgiLCJIZWlnaHQiLCJDdHJsU3R5bGUiLCJIYXNBY2UiLCJDYW5TaG93IiwiQ2FuUXVlcnkiLCJSZWFkT25seSIsIklzS2V5IiwiSXNGaXhlZCIsIkRpc3BOYW1lIiwiTHVhQXR0ciIsIkRlc2MiLCJBY3Rpb25EZWYiLCJNdWx0aWxpbmd1YWwiLCJSZWZDb25kaXRpb24iLCJHcm91cE5hbWUiLCJkaWN0aXRlbSIsImNsYXNzX2F0dHJMaXN0IiwiQmtDb2xvciIsIkltZ0ZvbnRTdHlsZSIsIkF0dHIiLCJjbGFzc19hdHRyX2luaXQiLCJjYSIsInllYXIiLCJtb250aCIsImRheSIsIm5ld2F0dHJsaXN0IiwiT3BlbiIsImNvbnRyb2xfc3R5bGUiLCJ0aXRsZV9wX3dkaXRoIiwiRm9udCIsIkJrX0NvbG9yIiwiVGV4dF9Db2xvciIsInJlcSIsInZhbHVlIiwiZXZlbnRpZCIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsImNsc2lkIiwib2JqaWQiLCJzdWJDbGFzc19hdHRyX2luaXQiLCJzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24iLCJtYXN0X2F0dHIiLCJzdWJfcmVxIiwidmFsU3RyIiwib2JqZWN0cyIsIm9ial9pZCIsIm9ial9hdHRycyIsImNsc19pZCIsImJ1dHRvbl9uYW1lIiwiZWRpdF9kbGciLCJ0eXBlIiwibWFzdGVyX2NscyIsImNsc19uYW1lIiwic3ViX2NscyIsImlucHV0UGFyYW10ZXIiLCJlbnZpcm9tZW50IiwicG9wdXBDaGFuZ2UiLCJjaGVja0NoYW5nZSIsInBvcHVwX2NhbmNlbCIsInBvcHVwX3NhdmEiLCJuYW1lIiwiaWQiLCJjYW5jZWwiLCJkZWx0YSIsInBhbmVsX2RlbCIsImNsYXNzX25hbWUiLCJvbnRhcCIsImdldEFwcCIsInN1Ym9udGFwIiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsIm1hc3RfcmVxIiwic2Nhbl9vbmV2ZW50Iiwib25hcnJvdyIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsInZhbCIsIm9uY2hhbmdlMiIsImlpbmRleCIsImRpbmRleCIsImluZGV4Iiwic3ViX29uY2hhbmdlIiwic3ViX29uY2hhbmdlMiIsInN1YkNsYXNzQXR0ciIsIm9uZXZlbnQiLCJvbmNoZWNrIiwiaW5wdXRWYWxMaXN0SXNEZWwiLCJhZGRyZXNzY2hhbmdlIiwiY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImNsYXNzQXR0cl9BZGRQZXIiLCJ1cmwiLCJldmVudHMiLCJBZGRQZXIiLCJjbGFzc0F0dHJfQWRkUmVmIiwiY2xhc3NBdHRyX0FkZFByaiIsInNhdmEiLCJhZGQiLCJtYXNrIiwibWFzdGVyIiwib2JqX2F0dHIiLCJtYXN0ZXJfY2xzX2lkIiwibWFzdGVyX29ial9pZCIsImNyZWF0b3IiLCJjcmVhdG9yX25hbWUiLCJub3RfdHJpZ2dlcl9ldmVudCIsInVwZGF0ZV9leGlzdCIsInBvc3RfcHJvY2VzcyIsImV4dF9pbmZvIiwiaWNvbiIsImR1cmF0aW9uIiwiaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsIkVkaXRTdHlsZSIsIlZpZXdTdHlsZSIsIk5vdFRyaWdnZXJTeXNFdmVudCIsImluZm8iLCJlZF90eXBlIiwic3RhcnRfdHJhbnNhY3Rpb24iLCJldmVudF9pZCIsImV2ZW50X25hbWUiLCJkYXRhX29ial9pZCIsInByal9pZCIsInJlZl9jbHNfaWQiLCJyZWxfb2JqX2lkIiwidXNlcl9sb2dpbiIsImRhdGFfanNvbiIsImNvbXBvc2VfaW5mbyIsImlucHV0X3BhcmFtIiwiZGljdEl0ZW1MaXN0IiwibGVuZ3RoIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwidGV4dCIsImdyb3VwX25hbWUiLCJyZWFkb25seSIsImJ1dHRvbl9pbWciLCJidXR0b25fdG9vbHRpcCIsIk9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybiIsImV4dGluZm8iLCJkIiwiYnV0dG9uX2NhbGxiYWNrIiwiZGF0YV9hdHRyIiwiaW5wdXRwYXJhbWV0ZXIiLCJwcmlSZWwiLCJzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsInJhbmQiLCJzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiaW5wdXRfMzAzNyIsIm9wX3R5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQTZyQkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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O1VBQUE7VUFDQU47UUFDQTtRQUNBcUc7UUFBQTtRQUNBQztRQUFBO1FBQ0EvRjtVQUNBRDtVQUFBO1VBQ0FSO1FBQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQXVFO1FBQ0FDO1FBQ0E5SztRQUNBMkg7UUFDQW9EO1FBQ0FDO1FBQ0FDO1FBQ0FwQjtRQUNBcUI7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQWxCO1FBQ0FsTDtRQUNBcU07TUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBO1FBQ0E1TDtRQUNBO1VBQ0E7VUFDQTtZQUNBO1lBQ0E7Y0FBQWpCO2NBQUFrQjtjQUFBQztjQUFBQztZQUFBLFFBQ0FIO2NBQUFqQjtjQUFBa0I7Y0FBQUM7Y0FBQUM7WUFBQTtZQUNBO1VBQ0E7WUFDQTtZQUNBO2NBQUFwQjtjQUFBa0I7Y0FBQUM7Y0FBQUM7WUFBQTtZQUVBO1lBQ0Esb0RBQ0FFLDZFQUNBO2NBQ0E7Y0FDQUw7Z0JBQ0F3SjtjQUNBO1lBQ0E7VUFDQTtRQUNBO1VBQ0F4SjtZQUFBakI7WUFBQWtCO1lBQUFDO1lBQUFDO1VBQUE7UUFDQTtNQUNBO1FBQ0E7UUFDQUg7UUFDQUE7VUFBQWpCO1VBQUFrQjtVQUFBQztVQUFBQztRQUFBO01BQ0E7SUFDQTtFQUdBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiIxMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8c3R5bGU+XHJcblx0LmNsYXNzX2F0dHJfdGl0bGUge1xyXG5cdFx0Zm9udC1zaXplOiA0NHJweDtcclxuXHQgICAgcGFkZGluZy1ib3R0b206IDIycnB4O1xyXG5cdCAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0fVxyXG5cdC5jbGFzc19hdHRyX3RpdGxlIC50aXRsZV9saW5lIHtcclxuXHQgICAgYm9yZGVyLWJvdHRvbTogMnJweCBzb2xpZCAjYWFhO1xyXG5cdCAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0ICAgIGJvdHRvbTogLTUwcnB4O1xyXG5cdCAgICB3aWR0aDogY2FsYygxMDAlIC0gMjkwcnB4KTtcclxuXHQgICAgbWFyZ2luLWxlZnQ6IDEwMHB4O1xyXG5cdH1cclxuXHQuY2xhc3NfYXR0cl90aXRsZSAudGl0bGVfaWNvbiB7XHJcblx0ICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuXHQgICAgd2lkdGg6IDEwMHJweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiA2NHJweDtcclxuXHQgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdCAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdCAgICBwYWRkaW5nLXRvcDogMTBycHg7ICAgIFxyXG5cdFx0cGFkZGluZy1sZWZ0OiAyMHJweDtcclxuXHQgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdCAgICBjb2xvcjogI2ZmZjtcclxuXHR9XHJcblx0LmNsYXNzX2F0dHJfdGl0bGUgaSB7XHJcblx0ICAgIGNvbG9yOiAjMmM2YWEwIWltcG9ydGFudDtcclxuXHR9XHJcblx0LmNsYXNzX2F0dHJfdGl0bGUgLnRpdGxlX2ljb24gaSB7XHJcblx0ICAgIGZvbnQtc2l6ZTogODBycHg7XHJcblx0fVxyXG5cdC5jbGFzc19hdHRyX3RpdGxlIC50aXRsZSB7XHJcblx0ICAgIHBhZGRpbmctcmlnaHQ6IDIycnB4O1xyXG5cdCAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0ICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHQgICAgYm90dG9tOiAtOHJweDtcclxuXHR9XHJcblx0LmNsYXNzX2F0dHJfdGl0bGUgLmFycm93IHtcclxuXHQgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0dG9wOiA2cnB4O1xyXG5cdFx0cmlnaHQ6IDMwcnB4O1xyXG5cdFx0Zm9udC1zaXplOiA2MHJweDtcclxuXHR9XHJcblx0aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdFx0Zm9udC1zaXplOiAxMnJweDtcclxuXHR9XHJcblx0dGV4dGFyZWF7XHJcblx0XHR3aWR0aDogOTglO1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHRcdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0XHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdFx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRcdGNvbG9yOiAjMDQ2ZGIzO1xyXG5cdFx0bWFyZ2luLXRvcDogNHB4O1xyXG5cdH1cclxuXHRpbnB1dHtcclxuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0XHR3aWR0aDogOTglO1xyXG5cdFx0aGVpZ2h0OiA1MnJweDtcclxuXHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0XHRjb2xvcjogIzA0NmRiMztcclxuXHRcdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdFx0bWFyZ2luLXRvcDogNHJweDtcclxuXHR9XHJcblx0LnNlbGVjdHsgICAgXHJcblx0XHR3aWR0aDogMjBweDtcclxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdG9wYWNpdHk6IDA7XHJcblx0fVxyXG5cdC5jbGFzc19hdHRyX2JvZHkgLmZvcm0tZ3JvdXAge1xyXG5cdFx0bWFyZ2luOiAyMHJweCAzMHJweDtcclxuXHQgICAgLyogbWFyZ2luLWxlZnQ6IC0xMnB4O1xyXG5cdCAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyAqL1xyXG5cdH1cclxuXHQuc3ViY2xhc3NfYXR0cl9ib2R5IC5mb3JtLWdyb3VwIHtcclxuXHRcdG1hcmdpbjogMjBycHggMTBycHg7XHJcblx0ICAgIC8qIG1hcmdpbi1sZWZ0OiAtMTJweDtcclxuXHQgICAgbWFyZ2luLXJpZ2h0OiAtMTJweDsgKi9cclxuXHR9XHJcblx0LmZvcm0tZ3JvdXAgPiBsYWJlbFtjbGFzcyo9XCJjb2wtXCJdIHtcclxuXHQgICAgbWFyZ2luLWJvdHRvbTogOHJweDtcclxuXHRcdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0fVxyXG5cdC5mb3JtLWdyb3VwIGxhYmVsIHtcclxuXHQgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHQgICAgbGluZS1oZWlnaHQ6IDYwcnB4O1xyXG5cdH1cclxuXHQubm8tcGFkZGluZy1yaWdodCB7XHJcblx0ICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcclxuXHR9XHJcblx0LmNvbC14cy0xMiB7XHJcblx0ICAgIHdpZHRoOiAxMDAlO1xyXG5cdH1cclxuXHQudHhfdGl0bGV7XHJcblx0XHRmb250LXNpemU6IDMycnB4O1xyXG5cdH1cclxuXHQudHhfdGl0bGUye1xyXG5cdFx0Zm9udC1zaXplOiAzMnJweDtcclxuXHRcdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0dmVydGljYWwtYWxpZ246IC0ycHg7XHJcblx0fVxyXG5cdC50ZXh0LXJpZ2h0e1xyXG5cdFx0bWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuXHRcdG1hcmdpbi10b3A6IC02cnB4O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0Zm9udC1zaXplOiA0NHJweDtcclxuXHR9XHJcblx0LnRleHQtcmlnaHQyIHtcclxuXHRcdG1hcmdpbjogMDtcclxuXHRcdHZlcnRpY2FsLWFsaWduOiAtNHB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDlweDtcclxuXHRcdGZsb2F0OiBub25lO1xyXG5cdFx0Zm9udC1zaXplOiA0NHJweDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblx0LnNlY3Rpb25faXB1dHtcclxuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0XHR3aWR0aDogOTglO1xyXG5cdFx0aGVpZ2h0OiA2MnJweDtcclxuXHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0XHRjb2xvcjogIzA0NmRiMztcclxuXHRcdHBhZGRpbmc6IDEwcnB4IDhycHggMTBycHg7XHJcblx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdH1cclxuXHQuZGF0ZV9pcHV0e1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHRcdC8qIHdpZHRoOiA5OCU7ICovXHJcblx0XHRoZWlnaHQ6IDYycnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdGNvbG9yOiAjMDQ2ZGIzO1xyXG5cdFx0cGFkZGluZzogMTBycHggOHJweCA0cnB4O1xyXG5cdFx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHR9XHJcblx0YnV0dG9uLmJ0bl9hZGQge1xyXG5cdFx0d2lkdGg6NDkuNSU7XHJcblx0XHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRcdHBhZGRpbmc6IDIwcnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogI2ZmZjtcclxuXHQgICAgZm9udC1zaXplOiAzOHJweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdH1cclxuXHRidXR0b24uYnRuX2NhbmNlbCB7XHJcblx0XHR3aWR0aDo0OS41JTtcclxuXHRcdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdFx0cGFkZGluZzogMjBycHg7XHJcblx0XHRsaW5lLWhlaWdodDogMS41O1xyXG5cdFx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdCAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblx0YnV0dG9uLmJ0bl9zYXZhIHtcclxuXHRcdHdpZHRoOjEwMCU7XHJcblx0XHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRcdHBhZGRpbmc6IDIwcnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogI2ZmZjtcclxuXHQgICAgZm9udC1zaXplOiAzOHJweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0ZmxvYXQ6IGxlZnQ7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0fVxyXG5cdC5pX3Rpc2hpe1xyXG5cdFx0Y29sb3I6IHJlZDtcclxuXHRcdHZlcnRpY2FsLWFsaWduOiBzdWI7XHJcblx0XHRmb250LXN0eWxlOiBpbml0aWFsO1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG5cdFx0Zm9udC1zaXplOiAxN3B4O1xyXG5cdH1cclxuXHQuYXR0cl9maWVsZHtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0XHRtYXJnaW4tbGVmdDogOHB4O1xyXG5cdFx0Lyogd2lkdGg6IDcxJTsgKi9cclxuXHR9XHJcblx0XHJcblx0LmlucHV0X3ZhbGxpc3Qge1xyXG5cdFx0bWF4LWhlaWdodDogMzUwcnB4O1xyXG5cdFx0b3ZlcmZsb3cteTphdXRvO1xyXG5cdFx0ZGlzcGxheTogbm9uZTtcclxuXHR9XHJcblx0LmlucHV0X3ZhbGxpc3QgdWx7XHJcblx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0XHRwYWRkaW5nOiAwIDIwcnB4O1xyXG5cdH1cclxuXHQuaW5wdXRfdmFsbGlzdCB1bCBsaXtcclxuXHRcdGxpc3Qtc3R5bGU6IG5vbmU7XHJcblx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xyXG5cdH1cclxuXHQuaW5wdXRfdmFsbGlzdCB1bCBsaSBhe1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdH1cclxuXHQuaW5wdXRfdmFsbGlzdCB1bCBsaSBhIGkge1xyXG5cdCAgICBmb250LXNpemU6IDQ1cnB4O1xyXG5cdH1cclxuXHQucGFuZWxfdGl0bGV7XHJcblx0ICAgIGZvbnQtc2l6ZTogMzhycHg7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMjdBNkUxO1xyXG5cdFx0bGluZS1oZWlnaHQ6IDgwcnB4O1xyXG5cdFx0Y29sb3I6ICNmZmY7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHR9XHJcblx0LnYtcGFuZWx7XHJcblx0XHRtaW4taGVpZ2h0Ojc4OHJweDtcclxuXHR9XHJcblx0LnYtcGFuZWxsaXN0e1xyXG5cdFx0Ym9yZGVyOjRycHggc29saWQgI2FhYTtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG5cdFx0bWFyZ2luOiAxMHJweCAyMHJweCAwcnB4IDIwcnB4O1xyXG5cdH1cclxuXHQudi1wYW5lbGRlbHtcclxuXHRcdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdH1cclxuXHQucGFuZWxfZGVse1xyXG5cdFx0Zm9udC1zaXplOiA0NHJweDtcclxuXHRcdHRleHQtZGVjb3JhdGlvbjogaW5pdGlhbDtcclxuXHRcdG1hcmdpbi10b3A6IDEwcnB4O1xyXG5cdFx0bWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuXHR9XHJcblx0LmRpdlh7XHJcblx0ICAgIHdpZHRoOiAyMHB4O1xyXG5cdCAgICBoZWlnaHQ6IDIwcHg7XHJcblx0ICAgIGJvcmRlci1yYWRpdXM6IDYwJTtcclxuXHQgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG5cdCAgICB0b3A6IC0xMHB4O1xyXG5cdCAgICByaWdodDogLTEwcHg7XHJcblx0ICAgIHotaW5kZXg6IDEwMDtcclxuXHR9XHJcblx0LnZpZXctcG9wdXB7XHJcblx0XHRwb3NpdGlvbjpyZWxhdGl2ZTtcclxuXHR9XHJcblx0LnBvcHVwLWNvbnRlbnQge1xyXG5cdFx0QGluY2x1ZGUgZmxleDtcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdHBhZGRpbmc6IDMwcnB4O1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHRcdC8qIGhlaWdodDogMTUwcHg7ICovXHJcblx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0fVxyXG5cdC5wb3B1cC1jb250IHtcclxuXHRcdG92ZXJmbG93LXk6IGF1dG87XHJcblx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0fVxyXG5cdC5wb3B1cC1oZWlnaHQge1xyXG5cdFx0QGluY2x1ZGUgaGVpZ2h0O1xyXG5cdFx0Lyogd2lkdGg6IDIwMHB4OyAqL1xyXG5cdH1cclxuXHQucG9wdXAtaGVhZGVye1xyXG5cdFx0Zm9udC1zaXplOiA0MnJweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0bWFyZ2luOjIwcnB4IDIwcnB4IDBweCAyMHJweDtcclxuXHR9XHJcblx0LnZpZXdfcG9wdXBfQ2hlY2tMaXN0e1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMjBycHg7XHJcblx0fVxyXG5cdC5wb3B1cC1mb290ZXJ7XHJcblx0XHRmbG9hdDogcmlnaHQ7XHJcblx0XHRwb3NpdGlvbjphYnNvbHV0ZTtcclxuXHRcdGJvdHRvbTowO1xyXG5cdFx0cmlnaHQ6MjBycHg7XHJcblx0fVxyXG5cdGJ1dHRvbi5idG5fcG9wdXBfYWRkIHtcclxuXHRcdHdpZHRoOjE4MHJweDtcclxuXHRcdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdFx0bWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuXHRcdHBhZGRpbmc6IDE1cnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogI2ZmZjtcclxuXHQgICAgZm9udC1zaXplOiAzOHJweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0LyogZmxvYXQ6IGxlZnQ7ICovXHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0fVxyXG5cdGJ1dHRvbi5idG5fcG9wdXBfY2FuY2VsIHtcclxuXHRcdHdpZHRoOjE4MHJweDtcclxuXHRcdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdFx0cGFkZGluZzogMTVycHg7XHJcblx0XHRsaW5lLWhlaWdodDogMS41O1xyXG5cdFx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdCAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHQvKiBmbG9hdDogcmlnaHQ7ICovXHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0fVxyXG48L3N0eWxlPlxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0PCEtLSDkuLvmlbDmja4gLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtYXJlYVwiIHYtZm9yPVwiKGNsYXNzYXR0cixpbmRleCkgaW4gY2xhc3NBdHRyTGlzdFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2xhc3NfYXR0cl90aXRsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGl0bGVfbGluZVwiPjwvZGl2PlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0aXRsZV9pY29uXCIgOnN0eWxlPVwieydiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuQmtDb2xvcn1cIj4gICBcclxuXHRcdFx0XHRcdDxpIGNsYXNzPVwiYWNlLWljb24gZmFcIiA6Y2xhc3M9XCJjbGFzc2F0dHIuSW1nRm9udFN0eWxlXCI+PC9pPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwidGl0bGVcIj57e2NsYXNzYXR0ci5OYW1lfX08L3NwYW4+XHJcblx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYXJyb3dcIiBAdGFwPVwib25hcnJvdyhpbmRleCxjbGFzc2F0dHIuT3BlbilcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIFwiOmNsYXNzPVwiY2xhc3NhdHRyLk9wZW4/J2ZhLWFuZ2xlLWRvd24nOidmYS1hbmdsZS11cCdcIj48L2k+PC9hPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PCEtLSDkuLvmlbDmja7mmL7npLror6bmg4XljLogLS0+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjbGFzc19hdHRyX2JvZHlcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmNsYXNzYXR0ci5PcGVuPydibG9jayc6J25vbmUnfVwiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJkdl9maWVsZF9kaXZcIiB2LWZvcj1cIihhdHRyLGlpbmRleCkgaW4gY2xhc3NhdHRyLkF0dHJcIj5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflrZfnrKbkuLInIHx8IGF0dHIuVHlwZT09J+WPr+WPmOmVv+Wtl+espuS4sicgfHwgYXR0ci5UeXBlPT0n5pW05pWwJyB8fCBhdHRyLlR5cGU9PSfmta7ngrnmlbAnXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PiAgPCEtLSBhdHRyLk5vdEVtcHR5PT0nMScgLS0+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwiYXR0ci5leHRfYnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBAdGFwPVwiY2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCxpaW5kZXgpXCIgPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPGRpdiBzdHlsZT0nd2lkdGg6IDEwMHB4O3Bvc2l0aW9uOiByZWxhdGl2ZTsnPiBcclxuXHRcdFx0XHRcdFx0XHQ8aW1hZ2UgY2xhc3M9XCJkaXZYXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL21zZ181MF9uZXcucG5nXCI+PC9pbWFnZT4tLT5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgOnR5cGU9XCJhdHRyLlR5cGU9PSfmlbTmlbAnIHx8IGF0dHIuVHlwZT09J+a1rueCueaVsCc/J251bWJlcic6J3RleHQnXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1pZj1cImF0dHIuSGVpZ2h0PT0nMSdcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiID4gPCEtLSA9PSdmbGFzZSc/dHJ1ZTpmYWxzZSAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PScyJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIjpkYXRhLWlpbmRleD1cImlpbmRleFwiIHN0eWxlPVwiaGVpZ2h0OjYwcHg7XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiBAZm9jdXM9XCJvbnRhcFwiIEBibHVyPVwib25ldmVudFwiIHYtZWxzZS1pZj1cImF0dHIuSGVpZ2h0PT0nMydcIiA6ZGF0YS1pbmRleD1cImluZGV4XCI6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiBzdHlsZT1cImhlaWdodDo5MHB4O1wiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPC9kaXY+IC0tPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8ZGl2IHN0eWxlPSd3aWR0aDogMTAwJTtwb3NpdGlvbjogcmVsYXRpdmU7Jz5cclxuXHRcdFx0XHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImRpdlhcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbXNnXzUwX25ldy5wbmdcIj48L2ltYWdlPiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgOnR5cGU9XCJhdHRyLlR5cGU9PSfmlbTmlbAnIHx8IGF0dHIuVHlwZT09J+a1rueCueaVsCc/J251bWJlcic6J3RleHQnXCIgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1pZj1cImF0dHIuSGVpZ2h0PT0nMSdcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWU/MTA6NSkgLSAoYXR0ci5leHRfYnV0dG9uPT10cnVlPzk6MCkgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PScyJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIjpkYXRhLWlpbmRleD1cImlpbmRleFwiIHN0eWxlPVwiaGVpZ2h0OjYwcHg7XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWU/MTA6NSkgLSAoYXR0ci5leHRfYnV0dG9uPT10cnVlPzk6MCkgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIGNsYXNzPVwiYXR0cl9maWVsZFwiIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiBAZm9jdXM9XCJvbnRhcFwiIEBibHVyPVwib25ldmVudFwiIHYtZWxzZS1pZj1cImF0dHIuSGVpZ2h0PT0nMydcIiA6ZGF0YS1pbmRleD1cImluZGV4XCI6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiBzdHlsZT1cImhlaWdodDo5MHB4O1wiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIChhdHRyLm5vdGVtcHR5PT10cnVlPzEwOjUpIC0gKGF0dHIuZXh0X2J1dHRvbj09dHJ1ZT85OjApICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPC9kaXY+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0MlwiIHYtaWY9XCJhdHRyLmV4dF9idXR0b249PXRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIEB0YXA9XCJjbGFzc0F0dHJfZXh0QnV0dG9uKGluZGV4LGlpbmRleClcIiA+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSfluIPlsJTlgLwnXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiBAY2hhbmdlPVwib25jaGVja1wiIDpkYXRhLWlzY2hlY2s9XCJhdHRyLlZhbHVlXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOiBjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCc/Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrMiArJyUnOicxMHJweCd9XCI+XHJcblx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94IDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6Y2hlY2tlZD1cImF0dHIuVmFsdWVcIi8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2F0dHIuRGlzcE5hbWV9fTxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT48L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSfml6XmnJ8nIHx8IGF0dHIuVHlwZT09J+aXtumXtCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09IHRydWU/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PHBpY2tlciBtb2RlPVwiZGF0ZVwiIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiBAY2hhbmdlPVwib25kYXRlVGltZVwiIGNsYXNzPVwiZGF0ZV9pcHV0XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCI+XHJcblx0XHRcdFx0XHRcdFx0ICAgPHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2F0dHIuVmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGNoYW5nZT1cIm9uZGF0ZVRpbWVcIiBjbGFzcz1cImRhdGVfaXB1dCBhdHRyX2ZpZWxkXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIChhdHRyLm5vdGVtcHR5PT10cnVlPzEwOjUpICsnJSd9XCI+XHJcblx0XHRcdFx0XHRcdFx0ICAgPHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2F0dHIuVmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+Wtl+WFuCcgfHwgYXR0ci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXR0ci5UeXBlPT0n5a2X5YW4LeaVtOaVsCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09IHRydWU/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PHBpY2tlciBjbGFzcz1cInNlY3Rpb25faXB1dFwiIEBjaGFuZ2U9XCJvbmNoYW5nZVwiIDpyYW5nZT1cImF0dHIuZGljdGl0ZW1cIiByYW5nZS1rZXk9XCJDTl9TX05BTUVcIiB2LWlmPVwiYXR0ci5zZWxlY3Q9PWZhbHNlXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdDxzZWxlY3QtY3kgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpuYW1lPVwiYXR0ci5OYW1lXCIgOm9wdGlvbnM9XCJhdHRyLmRpY3RpdGVtXCIgc2hvd0NsZWFySWNvbj1cInRydWVcIiBAY2hhbmdlPVwib25jaGFuZ2UyXCIgdi1lbHNlLWlmPVwiYXR0ci5zZWxlY3Q9PXRydWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvc2VsZWN0LWN5PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0PHBpY2tlciBjbGFzcz1cInNlY3Rpb25faXB1dCBhdHRyX2ZpZWxkXCIgQGNoYW5nZT1cIm9uY2hhbmdlXCIgOnJhbmdlPVwiYXR0ci5kaWN0aXRlbVwiIHJhbmdlLWtleT1cIkNOX1NfTkFNRVwiIHYtaWY9XCJhdHRyLnNlbGVjdD09ZmFsc2VcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWU/MTA6NSkgKyclJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdDxzZWxlY3QtY3kgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpuYW1lPVwiYXR0ci5OYW1lXCIgOm9wdGlvbnM9XCJhdHRyLmRpY3RpdGVtXCIgc2hvd0NsZWFySWNvbj1cInRydWVcIiBAY2hhbmdlPVwib25jaGFuZ2UyXCIgdi1lbHNlLWlmPVwiYXR0ci5zZWxlY3Q9PXRydWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieydkaXNwbGF5JzonaW5saW5lLWJsb2NrJywnbWFyZ2luLWxlZnQnOic4cHgnLCd3aWR0aCc6YXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZT8xMDo1KSArJyUnfVwiPjwvc2VsZWN0LWN5PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWNleS4qiknIHx8IGF0dHIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gdHJ1ZT8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5Y2V5LiqKSdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIEB0YXA9XCJjbGFzc0F0dHJfQWRkUmVmXCIgOmRhdGEtY2xhc3NpZD1cImF0dHIuUmVsQ2xzWzBdLmlkXCIgOmRhdGEtY2xhc3NuYW1lPVwiYXR0ci5SZWxDbHNbMF0ubmFtZVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgY2xhc3M9XCJzZWxlY3RcIiBAY2hhbmdlPVwiY2xhc3NBdHRyX0FkZFJlZlwiIDpyYW5nZT1cImF0dHIuUmVsQ2xzTGlzdFwiIHJhbmdlLWtleT1cIm5hbWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3JlZlwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZT8xMDo1KSAtIDkgKyclJ31cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOWvueixoSjljZXkuKopJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGEgQHRhcD1cImNsYXNzQXR0cl9BZGRSZWZcIiA6ZGF0YS1jbGFzc2lkPVwiYXR0ci5SZWxDbHNbMF0uaWRcIiA6ZGF0YS1jbGFzc25hbWU9XCJhdHRyLlJlbENsc1swXS5uYW1lXCIgPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0MlwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgY2xhc3M9XCJzZWxlY3RcIiBAY2hhbmdlPVwiY2xhc3NBdHRyX0FkZFJlZlwiIDpyYW5nZT1cImF0dHIuUmVsQ2xzTGlzdFwiIHJhbmdlLWtleT1cIm5hbWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3JlZlwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5Lq65ZGYJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gdHJ1ZT8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJjbGFzc19hdHRyX2FkZF9wZXJcIiBAdGFwPVwiY2xhc3NBdHRyX0FkZFBlcihpbmRleCxpaW5kZXgpXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIChhdHRyLm5vdGVtcHR5PT10cnVlPzEwOjUpIC0gOSArJyUnfVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcGVyXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So6aG555uuJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gdHJ1ZT8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cIiNcIiBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3ByalwiIEB0YXA9XCJjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleClcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWUgPzEwOjUpIC0gOSArJyUnfVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcHJqXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n57yW56CBJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gdHJ1ZT8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIChhdHRyLm5vdGVtcHR5PT10cnVlID8xMDo1KSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSfnnIHluILljLonXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXJBZGRyZXNzIGNsYXNzPVwiZGF0ZV9pcHV0XCIgQGNoYW5nZT1cImFkZHJlc3NjaGFuZ2VcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA+e3thdHRyLlZhbHVlfX08L3BpY2tlckFkZHJlc3M+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8cGlja2VyQWRkcmVzcyBjbGFzcz1cImRhdGVfaXB1dCBhdHRyX2ZpZWxkXCIgQGNoYW5nZT1cImFkZHJlc3NjaGFuZ2VcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWUgPzEwOjUpICsnJSd9XCI+e3thdHRyLlZhbHVlfX08L3BpY2tlckFkZHJlc3M+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHRcclxuXHRcdDwhLS0g5LuO5pWw5o2uIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LXBhbmVsXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbF90aXRsZVwiPnt7cGFyYW0uU3ViX0Nscy5UaXRsZX19PC9kaXY+XHJcblx0XHRcdDwhLS0g5LuO5pWw5o2u5omr56CB5Yy6IC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInYtYXJlYSBjbGFzc19hdHRyX2JvZHlcIiB2LWlmPVwicGFyYW0uU3ViX0Nscy5DYW5fQWRkX0RlbGV0ZSA9PSB0cnVlXCI+XHJcblx0XHRcdFx0PGg0IHN0eWxlPVwibWFyZ2luOiAxNXJweCAwIDAgMzBycHg7Zm9udC13ZWlnaHQ6IGJvbGQ7XCI+5paw5aKee3twYXJhbS5TdWJfQ2xzLk5hbWUgfX08L2g0PlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG5cdFx0XHRcdFx0PCEtLSDlt6blj7PluIPlsYAgLS0+XHJcblx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiID57e3BhcmFtLlNjYW5fQ29kZS5OYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwic2NhbkNvZGVWYWxcIiBAZm9jdXM9XCJzY2FuX29udGFwXCIgQGJsdXI9XCJzY2FuX29uZXZlbnRcIiA6c3R5bGU9XCJwYXJhbS5TY2FuX0NvZGUuSGF2ZV9TZWxlY3RfQnV0dG9uPT10cnVlPyd3aWR0aDogJysoMTAwLShwYXJhbS5TY2FuX0NvZGUuTmFtZS5sZW5ndGggKiA1KS0xNCkrJyU7Jzond2lkdGg6ICcrKDEwMC0ocGFyYW0uU2Nhbl9Db2RlLk5hbWUubGVuZ3RoICogNSktNSkrJyU7J1wiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCIgdi1pZj1cInBhcmFtLlNjYW5fQ29kZS5IYXZlX1NlbGVjdF9CdXR0b249PXRydWVcIj5cclxuXHRcdFx0XHRcdFx0PGEgQHRhcD1cInNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbigpXCIgPjxpIGNsYXNzPVwiYWNlLWljb24gZmFcIiA6Y2xhc3M9XCJwYXJhbS5TY2FuX0NvZGUuSW1nP3BhcmFtLlNjYW5fQ29kZS5JbWc6J2ZhLXBsdXMtY2lyY2xlJ1wiPjwvaT48L2E+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0g5LiK5LiL5biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0PCEtLSA8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCI+e3twYXJhbS5TY2FuX0NvZGUuTmFtZX1977yaPC90ZXh0PiBcclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCIgdi1pZj1cInBhcmFtLlNjYW5fQ29kZS5IYXZlX1NlbGVjdF9CdXR0b249PXRydWVcIj4gIFxyXG5cdFx0XHRcdFx0XHQ8YSBAdGFwPVwibXNfY2xhc3NBdHRyX2V4dEJ1dHRvbigpXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYVwiIDpjbGFzcz1cInBhcmFtLlNjYW5fQ29kZS5JbWc/cGFyYW0uU2Nhbl9Db2RlLkltZzonZmEtcGx1cy1jaXJjbGUnXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiA+IC0tPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8IS0tIOS7juaVsOaNruaYvuekuuivpuaDheWMuiAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ2LXBhbmVsbGlzdFwiIHYtZm9yPVwiKHN1YnBhbmVsLGlpaW5kZXgpIGluIHN1YlBhbmVsTGlzdFwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwidi1hcmVhXCIgdi1mb3I9XCIoc3ViY2xhc3NhdHRyLGluZGV4KSBpbiBzdWJwYW5lbC5zdWJDbGFzc0F0dHJcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjbGFzc19hdHRyX3RpdGxlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGl0bGVfbGluZVwiPjwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGl0bGVfaWNvblwiIDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkJrQ29sb3J9XCI+ICAgXHJcblx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJhY2UtaWNvbiBmYVwiIDpjbGFzcz1cInN1YmNsYXNzYXR0ci5JbWdGb250U3R5bGVcIj48L2k+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3tzdWJjbGFzc2F0dHIuTmFtZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJhcnJvd1wiIEB0YXA9XCJvbmFycm93KGluZGV4LHN1YmNsYXNzYXR0ci5PcGVuKVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgXCI6Y2xhc3M9XCJzdWJjbGFzc2F0dHIuT3Blbj8nZmEtYW5nbGUtZG93bic6J2ZhLWFuZ2xlLXVwJ1wiPjwvaT48L2E+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdWJjbGFzc19hdHRyX2JvZHlcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOnN1YmNsYXNzYXR0ci5PcGVuPydibG9jayc6J25vbmUnfVwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHZfZmllbGRfZGl2XCIgdi1mb3I9XCIoYXR0cixpaW5kZXgpIGluIHN1YmNsYXNzYXR0ci5BdHRyXCI+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+Wtl+espuS4sicgfHwgYXR0ci5UeXBlPT0n5Y+v5Y+Y6ZW/5a2X56ym5LiyJyB8fCBhdHRyLlR5cGU9PSfmlbTmlbAnIHx8IGF0dHIuVHlwZT09J+a1rueCueaVsCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09IHRydWU/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCArJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+ICA8IS0tIGF0dHIuTm90RW1wdHk9PScxJyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwiYXR0ci5leHRfYnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgQHRhcD1cImNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCA6dHlwZT1cImF0dHIuVHlwZT09J+aVtOaVsCcgfHwgYXR0ci5UeXBlPT0n5rWu54K55pWwJz8nbnVtYmVyJzondGV4dCdcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWlmPVwiYXR0ci5IZWlnaHQ9PScxJ1wiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIDIuNSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCIgPiA8IS0tID09J2ZsYXNlJz90cnVlOmZhbHNlIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PScyJ1wiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSAyLjUgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWVsc2UtaWY9XCJhdHRyLkhlaWdodD09JzMnXCIgOmRhdGEtaWlpbmRleD1cImlpaW5kZXhcIiA6ZGF0YS1pbmRleD1cImluZGV4XCI6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiBzdHlsZT1cImhlaWdodDo5MHB4O1wiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIDIuNSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCI+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoICsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IDp0eXBlPVwiYXR0ci5UeXBlPT0n5pW05pWwJyB8fCBhdHRyLlR5cGU9PSfmta7ngrnmlbAnPydudW1iZXInOid0ZXh0J1wiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiBAZm9jdXM9XCJvbnRhcFwiIEBibHVyPVwib25ldmVudFwiIHYtaWY9XCJhdHRyLkhlaWdodD09JzEnXCIgOmRhdGEtaWlpbmRleD1cImlpaW5kZXhcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIHN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gNyAtIChhdHRyLmV4dF9idXR0b249PXRydWU/OTowKSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PScyJ1wiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3IC0gKGF0dHIuZXh0X2J1dHRvbj09dHJ1ZT85OjApICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PSczJ1wiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6OTBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3IC0gKGF0dHIuZXh0X2J1dHRvbj09dHJ1ZT85OjApICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIiB2LWlmPVwiYXR0ci5leHRfYnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgQHRhcD1cImNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSfluIPlsJTlgLwnXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgQGNoYW5nZT1cIm9uY2hlY2tcIiA6ZGF0YS1pc2NoZWNrPVwiYXR0ci5WYWx1ZVwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOiBzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCc/c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrMiArJyUnOicxMHJweCd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpjaGVja2VkPVwiYXR0ci5WYWx1ZVwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dD57e2F0dHIuRGlzcE5hbWV9fTxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT48L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5pel5pyfJyB8fCBhdHRyLlR5cGU9PSfml7bpl7QnXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGNoYW5nZT1cIm9uZGF0ZVRpbWVcIiBjbGFzcz1cImRhdGVfaXB1dFwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIDIuNSArJyUnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICA8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7YXR0ci5WYWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBjaGFuZ2U9XCJvbmRhdGVUaW1lXCIgY2xhc3M9XCJkYXRlX2lwdXQgYXR0cl9maWVsZFwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIDcgKyclJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgPHZpZXcgY2xhc3M9XCJwaWNrZXJcIj57e2F0dHIuVmFsdWV9fTwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflrZflhbgnIHx8IGF0dHIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgY2xhc3M9XCJzZWN0aW9uX2lwdXRcIiBAY2hhbmdlPVwib25jaGFuZ2VcIiA6cmFuZ2U9XCJhdHRyLmRpY3RpdGVtXCIgcmFuZ2Uta2V5PVwiQ05fU19OQU1FXCIgdi1pZj1cImF0dHIuc2VsZWN0PT1mYWxzZVwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIDIuNSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiXCI+e3sgYXR0ci5WYWx1ZSB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c2VsZWN0LWN5IDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6bmFtZT1cImF0dHIuTmFtZVwiIDpvcHRpb25zPVwiYXR0ci5kaWN0aXRlbVwiIHNob3dDbGVhckljb249XCJ0cnVlXCIgQGNoYW5nZT1cInN1Yl9vbmNoYW5nZTJcIiB2LWVsc2UtaWY9XCJhdHRyLnNlbGVjdD09dHJ1ZVwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIDIuNSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCI+PC9zZWxlY3QtY3k+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHBpY2tlciBjbGFzcz1cInNlY3Rpb25faXB1dCBhdHRyX2ZpZWxkXCIgQGNoYW5nZT1cIm9uY2hhbmdlXCIgOnJhbmdlPVwiYXR0ci5kaWN0aXRlbVwiIHJhbmdlLWtleT1cIkNOX1NfTkFNRVwiIHYtaWY9XCJhdHRyLnNlbGVjdD09ZmFsc2VcIiA6ZGF0YS1paWluZGV4PVwiaWlpbmRleFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3ICsnJSd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiXCI+e3sgYXR0ci5WYWx1ZSB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c2VsZWN0LWN5IDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6bmFtZT1cImF0dHIuTmFtZVwiIDpvcHRpb25zPVwiYXR0ci5kaWN0aXRlbVwiIHNob3dDbGVhckljb249XCJ0cnVlXCIgQGNoYW5nZT1cInN1Yl9vbmNoYW5nZTJcIiB2LWVsc2UtaWY9XCJhdHRyLnNlbGVjdD09dHJ1ZVwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnZGlzcGxheSc6J2lubGluZS1ibG9jaycsJ21hcmdpbi1sZWZ0JzonOHB4Jywnd2lkdGgnOmF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWU/MTA6NSkgKyclJ31cIj48L3NlbGVjdC1jeT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5Y2V5LiqKScgfHwgYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSB0cnVlPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOWvueixoSjljZXkuKopJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIEB0YXA9XCJjbGFzc0F0dHJfQWRkUmVmXCIgOmRhdGEtY2xhc3NpZD1cImF0dHIuUmVsQ2xzWzBdLmlkXCIgOmRhdGEtY2xhc3NuYW1lPVwiYXR0ci5SZWxDbHNbMF0ubmFtZVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgY2xhc3M9XCJzZWxlY3RcIiBAY2hhbmdlPVwiY2xhc3NBdHRyX0FkZFJlZlwiIDpyYW5nZT1cImF0dHIuUmVsQ2xzTGlzdFwiIHJhbmdlLWtleT1cIm5hbWVcIiA6ZGF0YS1paWluZGV4PVwiaWlpbmRleFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcmVmXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6ZGF0YS1paWluZGV4PVwiaWlpbmRleFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6ZGF0YS1paWluZGV4PVwiaWlpbmRleFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAxNiArJyUnfVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOWvueixoSjljZXkuKopJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIEB0YXA9XCJjbGFzc0F0dHJfQWRkUmVmXCIgOmRhdGEtY2xhc3NpZD1cImF0dHIuUmVsQ2xzWzBdLmlkXCIgOmRhdGEtY2xhc3NuYW1lPVwiYXR0ci5SZWxDbHNbMF0ubmFtZVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0MlwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIGNsYXNzPVwic2VsZWN0XCIgQGNoYW5nZT1cImNsYXNzQXR0cl9BZGRSZWZcIiA6cmFuZ2U9XCJhdHRyLlJlbENsc0xpc3RcIiByYW5nZS1rZXk9XCJuYW1lXCIgOmRhdGEtaWlpbmRleD1cImlpaW5kZXhcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJcIj57eyBhdHRyLlZhbHVlIH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3JlZlwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOS6uuWRmCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09IHRydWU/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3BlclwiIEB0YXA9XCJjbGFzc0F0dHJfQWRkUGVyKGluZGV4LGlpbmRleClcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIHN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gMTYgKyclJ31cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0MlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcGVyXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOmhueebridcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09IHRydWU/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiI1wiIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcHJqXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAxNiArJyUnfVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJjbGFzc19hdHRyX2FkZF9wcmpcIiBAdGFwPVwiY2xhc3NBdHRyX0FkZFByaihpbmRleCxpaW5kZXgpXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n57yW56CBJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gdHJ1ZT8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6ZGF0YS1paWluZGV4PVwiaWlpbmRleFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIDcgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+ecgeW4guWMuidcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09IHRydWU/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWVcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHBpY2tlckFkZHJlc3MgY2xhc3M9XCJkYXRlX2lwdXRcIiBAY2hhbmdlPVwiYWRkcmVzc2NoYW5nZVwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgPnt7YXR0ci5WYWx1ZX19PC9waWNrZXJBZGRyZXNzPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXJBZGRyZXNzIGNsYXNzPVwiZGF0ZV9pcHV0IGF0dHJfZmllbGRcIiBAY2hhbmdlPVwiYWRkcmVzc2NoYW5nZVwiIDpkYXRhLWlpaW5kZXg9XCJpaWluZGV4XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIDcgKyclJ31cIj57e2F0dHIuVmFsdWV9fTwvcGlja2VyQWRkcmVzcz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwidi1wYW5lbGRlbFwiIHYtaWY9XCJwYXJhbS5TdWJfQ2xzLkNhbl9BZGRfRGVsZXRlID09IHRydWVcIj5cclxuXHRcdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cInBhbmVsX2RlbFwiIEB0YXA9XCJwYW5lbF9kZWwoaWlpbmRleClcIj48aSBjbGFzcz1cImFjZS1pY29uIGZ1LWRlbGV0ZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHRcclxuXHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwiY2FuY2VsXCIgY2xhc3M9XCJidG5fY2FuY2VsXCIgdi1pZj1cInBhcmFtLlN1Yl9DbHMuQ2FuX0FkZF9EZWxldGUgPT0gdHJ1ZVwiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJzYXZhXCIgY2xhc3M9XCJidG5fYWRkXCIgdi1pZj1cInBhcmFtLlN1Yl9DbHMuQ2FuX0FkZF9EZWxldGUgPT0gdHJ1ZVwiPnt7dGl0bGV9fTwvYnV0dG9uPlxyXG5cdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJzYXZhXCIgY2xhc3M9XCJidG5fc2F2YVwiIHYtZWxzZS1pZj1cInBhcmFtLlN1Yl9DbHMuQ2FuX0FkZF9EZWxldGUgPT0gZmFsc2VcIj57e3RpdGxlfX08L2J1dHRvbj5cclxuXHRcdFxyXG5cdFx0PCEtLSDmma7pgJrlvLnnqpcgdG9wIGJvdHRvbSBjZW50ZXIgbGVmdCByaWdodCAtLT5cclxuXHRcdDx2aWV3PlxyXG5cdFx0XHQ8dW5pLXBvcHVwIGNsYXNzPVwidmlldy1wb3B1cFwiIHJlZj1cInBvcHVwXCIgYmFja2dyb3VuZC1jb2xvcj1cIiNmZmZcIiBAY2hhbmdlPVwicG9wdXBDaGFuZ2VcIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInBvcHVwLWhlYWRlclwiPnt7Y2hlY2tfbGlzdC50aXRsZX19PC92aWV3PlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwicG9wdXAtY29udGVudFwiIDpjbGFzcz1cInsgJ3BvcHVwLWhlaWdodCc6IHBvcHVwVHlwZSA9PT0gJ2xlZnQnIHx8IHBvcHVwVHlwZSA9PT0gJ3JpZ2h0JyB9XCIgXHJcblx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6Y2hlY2tfbGlzdC53aWR0aD9jaGVja19saXN0LndpZHRoKydweCc6JzIwMHB4JywnaGVpZ2h0JzpjaGVja19saXN0LmhlaWdodD9jaGVja19saXN0LmhlaWdodCsncHgnOic4OCUnfVwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwb3B1cC1jb250XCIgOnN0eWxlPVwieydoZWlnaHQnOmNoZWNrX2xpc3QuaGVpZ2h0P2NoZWNrX2xpc3QuaGVpZ2h0LTQ1KydweCc6JzQxNXB4J31cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3X3BvcHVwX0NoZWNrTGlzdFwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGNoZWNrX2xpc3QuaXRlbXNcIj5cclxuXHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3gtZ3JvdXAgY2xhc3M9XCJjaGVja19saXN0XCIgQGNoYW5nZT1cImNoZWNrQ2hhbmdlXCIgOmRhdGEtaXNjaGVjaz1cIml0ZW0uY2hlY2tcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgIDpzdHlsZT1cInsnbWFyZ2luLWxlZnQnOiAnMTBycHgnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwiaXRlbS5jaGVja1wiIDpjaGVja2VkPVwiaXRlbS5jaGVja1wiLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQ+e3tpdGVtLm5hbWV9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJwb3B1cC1mb290ZXJcIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJwb3B1cF9zYXZhXCIgY2xhc3M9XCJidG5fcG9wdXBfYWRkXCI+56Gu5a6aPC9idXR0b24+XHJcblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwicG9wdXBfY2FuY2VsXCIgY2xhc3M9XCJidG5fcG9wdXBfY2FuY2VsXCI+5Y+W5raIPC9idXR0b24+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3VuaS1wb3B1cD5cclxuXHRcdDwvdmlldz5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+IFxyXG5cclxuPHNjcmlwdD5cblx0aW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcblx0aW1wb3J0IHBpY2tlckFkZHJlc3MgZnJvbSAnLi4vLi4vanMvcGlja2VyQWRkcmVzcy9waWNrZXJBZGRyZXNzLnZ1ZSdcclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRtb2R1bGVzOntcclxuXHRcdFx0QmFzZTY0LFxyXG5cdFx0fSxcclxuXHRcdGNvbXBvbmVudHM6IHtcclxuICAgICAgICAgICAgcGlja2VyQWRkcmVzc1xyXG4gICAgICAgIH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRpdGxlOiAn5paw5aKeJyxcclxuXHRcdFx0XHRwYXJhbTp7fSxcclxuXHRcdFx0XHRjbGFzc0F0dHJMaXN0OltdLFxyXG5cdFx0XHRcdGNsYXNzR3JpZFN0eWxlOltdLFxyXG5cdFx0XHRcdGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXHJcblx0XHRcdFx0ZWRpdF9va19ldmVudDpcIlwiLCAgICAgIC8v5by556qX54K55Ye7T0sg6Kem5Y+R5LqL5Lu2SURcclxuXHRcdFx0XHRlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50OlwiXCIsICAvL+mAieaLqee7hOaIkOWvueixoeaXtuiwg+eUqFxyXG5cdFx0XHRcdGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcclxuXHRcdFx0XHRnbG9iYWxfYXR0cjpbXSxcclxuXHRcdFx0XHRyZWZkYXRhc3RvcmU6IFtdLFx0ICAgLy/lvJXnlKjmlbDmja7lrZjlgqjljLovLyB7YXR0cjonR19QUkpfJyArIGJpbmRhdHRyICsgJ19JRCcsIHZhbHVlOmluZm8uaWR9XHJcblx0XHRcdFx0c2NhbkNvZGVWYWw6XCJcIixcclxuXHRcdFx0XHRzdWJDbGFzc0F0dHJMaXN0OltdLFxyXG5cdFx0XHRcdHN1YlBhbmVsTGlzdDpbXSxcclxuXHRcdFx0XHRzdWJDbGFzc0dyaWRTdHlsZTpbXSxcclxuXHRcdFx0XHRwb3B1cFR5cGU6XCJjZW50ZXJcIixcclxuXHRcdFx0XHRjaGVja19saXN0Ont9LFxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKG9wdGlvbnMpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0XHRcdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0XHRcdHZhciBwYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZT9wYXJhbS5BZGRfQnRuTmFtZTpvcHRpb25zLnRpdGxlbmFtZTsgLy/orr7nva7mjInpkq7mloflrZdcclxuXHRcdFx0Y29uc29sZS5sb2cocGFyYW0pO1xyXG5cdFx0XHRpZighcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlKXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nlYzpnaLnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lKXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xyXG5cdFx0XHQvLyB2YXIgZWRpdF9kbGcgPSB7XHJcblx0XHRcdC8vICAgICBNb2RlbDogcGFyYW0uRWRpdERsZ01vZGUsXHJcblx0XHRcdC8vICAgICBOYW1lOiBwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZVxyXG5cdFx0XHQvLyB9XHJcblx0XHRcdC8v5Li75pWw5o2u57G76I635Y+WXHJcblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uTWFzdGVyX0Nscy5JRFxyXG5cdFx0XHR9O1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc2FyZWFGdW5jSUQgPSBwYXJhbS5NYXN0ZXJfQ2xzLklEO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCl7XHJcblx0XHRcdCBcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0O1xyXG5cdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NBdHRyR2V0TGlzdCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRncm91cC5hdHRyX2xpc3QuZm9yRWFjaChhc3luYyAoYXR0cixrZXkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyLnR5cGUgPT0gXCLlrZflhbgt5a2X56ym5LiyXCIgfHwgYXR0ci50eXBlID09IFwi5a2X5YW4LeaVtOaVsFwiKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LCdtYXN0Jyk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHRcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uTWFzdGVyX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnTWFzdCcpO1xyXG5cdFx0XHRcdFx0XHR9LDUwMCk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdC8v5LuO5pWw5o2u57G76I635Y+WXHJcblx0XHRcdHZhciBzdWJkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uU3ViX0Nscy5JRFxyXG5cdFx0XHR9O1xyXG5cdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQgPSBwYXJhbS5TdWJfQ2xzLklEO1xyXG5cdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0KXtcclxuXHRcdFx0IFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLlN1Yl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ1N1YicpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N1YkNsYXNzQXR0ckdldExpc3QnLHN1YmRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LmZvckVhY2goYXN5bmMgKGdyb3VwLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0ci50eXBlID09IFwi5a2X5YW4LeWtl+espuS4slwiIHx8IGF0dHIudHlwZSA9PSBcIuWtl+WFuC3mlbTmlbBcIil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0ICR0aGlzLkRpY3RJdGVtR2V0TGlzdChhdHRyLGtleSxpbmRleCwnc3ViJyk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLlN1Yl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ1N1YicpO1xyXG5cdFx0XHRcdFx0XHR9LDUwMCk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHRhc3luYyBEaWN0SXRlbUdldExpc3QoYXR0cixrZXksaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5a2X5YW46aG55YiX6KGoXHJcblx0XHRcdFx0dGhpcy5kYXRhPVtdO1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdFx0XHRkaWN0X2lkOiBhdHRyLmRpY3RfaWQsXHJcblx0XHRcdFx0XHRkaWN0X25hbWU6IGF0dHIuZGljdF9uYW1lXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RJdGVtR2V0TGlzdCcsZGF0YUluZm8pLnRoZW4oYXN5bmMgKHN1Y2Nlc3MpPT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0aWYodHlwZT09J21hc3QnKXtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5hdHRyX2xpc3Rba2V5XS5kaWN0aXRlbT1zdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJjbGFzc0F0dHJMaXN0XCIsICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2luZGV4XS5hdHRyX2xpc3Rba2V5XS5kaWN0aXRlbT1zdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0F0dHJMaXN0XCIsICR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbyhjbHNpZCxzdHlsZU5hbWUsY2xzVHlwZSl7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgZ3JpZHN0eWxlSW5mbyA9IHtcclxuXHRcdFx0XHRcdGNsYXNzX2lkOiBjbHNpZCxcblx0XHRcdFx0XHR1aV9zdHlsZV90eXBlOiAyLFxuXHRcdFx0XHRcdHVpX3N0eWxlX25hbWU6IHN0eWxlTmFtZVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKTtcclxuXHRcdFx0XHQvL+iOt+WPluS4u+aVsOaNruexu+eVjOmdouagt+W8j1xyXG5cdFx0XHRcdGlmKGNsc1R5cGU9PSdNYXN0Jyl7XHJcblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXROYW1lID0gc3R5bGVOYW1lO1xyXG5cdFx0XHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKXtcclxuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm87XHJcblx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnTWFzdCcpO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGdyaWRzdHlsZUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUoc3VjY2Vzcy5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZiA9IEpTT04ucGFyc2Uoc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld1BhcmFtKCdNYXN0Jyk7XHJcblx0XHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjNcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmKGNsc1R5cGU9PSdTdWInKXsgIC8v6I635Y+W5LuO5pWw5o2u57G755WM6Z2i5qC35byPXHJcblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXRTdWJOYW1lID0gc3R5bGVOYW1lO1xyXG5cdFx0XHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvKXtcclxuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0dyaWRTdHlsZUluZm87XHJcblx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnU3ViJyk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhncmlkc3R5bGVJbmZvKTtcclxuXHRcdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShzdWNjZXNzLnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuc3R5bGVfZGVmID0gSlNPTi5wYXJzZShzdHlsZWRlZik7XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnU3ViJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLnN1YkNsYXNzX2F0dHJfaW5pdCgpO1xyXG5cdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4zXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dmlld1BhcmFtKHR5cGUpeyAvL+Wwhm1vYm94M+Wwj+WGmeWPguaVsOi9rOaNouS4um1vYm94MuWkp+WGmeWPguaVsFxyXG5cdFx0XHRcdHZhciBjbGFzc0dyaWRTdHlsZT0nJztcclxuXHRcdFx0XHR2YXIgY2xhc3NBdHRyTGlzdD0nJztcclxuXHRcdFx0XHRpZih0eXBlPT0nTWFzdCcpe1xyXG5cdFx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU9dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZTtcclxuXHRcdFx0XHRcdGNsYXNzQXR0ckxpc3Q9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xyXG5cdFx0XHRcdH1lbHNlIGlmKHR5cGU9PSdTdWInKXsgXHJcblx0XHRcdFx0XHRjbGFzc0dyaWRTdHlsZT10aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlO1xyXG5cdFx0XHRcdFx0Y2xhc3NBdHRyTGlzdD10aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBjbGFzc19ncmlkU3R5bGUgPXtcclxuXHRcdFx0XHRcdElEOiBjbGFzc0dyaWRTdHlsZS5pZCxcclxuXHRcdFx0XHRcdE5hbWU6IGNsYXNzR3JpZFN0eWxlLm5hbWUsXHJcblx0XHRcdFx0XHRUeXBlOiBjbGFzc0dyaWRTdHlsZS50eXBlLFxyXG5cdFx0XHRcdFx0SXNEZWZhdWx0OmNsYXNzR3JpZFN0eWxlLmlzX2RlZmF1bCxcclxuXHRcdFx0XHRcdFN0eWxlRGVmOmNsYXNzR3JpZFN0eWxlLnN0eWxlX2RlZixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhciBjbGFzc19hdHRyTGlzdCA9W107XHJcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHJzID1bXTtcclxuXHRcdFx0XHRcdGlmKGRhdGEuYXR0cl9saXN0KXtcclxuXHRcdFx0XHRcdCAgZGF0YS5hdHRyX2xpc3QuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtcyA9W107XHJcblx0XHRcdFx0XHRcdGlmKGF0dHIuZGljdGl0ZW0pe1xyXG5cdFx0XHRcdFx0XHRcdGF0dHIuZGljdGl0ZW0uZm9yRWFjaChkaWN0ID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGRpY3RpdGVtcy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0SUQ6IGRpY3QuaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdE5hbWU6IGRpY3QubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Tm90ZTogZGljdC5ub3RlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRPcmRlcjogZGljdC5vcmRlcixcclxuXHRcdFx0XHRcdFx0XHRcdFx0SW1nVXJsOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDb2RlOiBkaWN0LmNvZGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdEhhc1N1YjogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0UGFyZW50SUQ6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFBhcmVudE5hbWU6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdEx2bDogZGljdC5sdmwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdElzRGVmYXVsdDogZGljdC5pc19kZWZhdWx0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRWYWx1ZTogZGljdC52YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19JRDogZGljdC5pZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19ESUNUX0lEOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX05BTUU6IGRpY3QubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19OT1RFOiBkaWN0Lm5vdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdENOX05fT1JERVI6IGRpY3Qub3JkZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfSU1HX1VSTDogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19DT0RFOiBkaWN0LmNvZGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSEFTX1NVQjogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19QQVJFTlRfSVRFTV9JRDogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19QQVJFTlRfSVRFTV9OQU1FOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9OX0xWTDogZGljdC5sdmwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSVNfREVGQVVMVDogZGljdC5pc19kZWZhdWx0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX1ZBTFVFOiBkaWN0LnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRhdHRycy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRJRDogYXR0ci5pZCxcclxuXHRcdFx0XHRcdFx0XHROYW1lOiBhdHRyLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0VHlwZTogYXR0ci50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFNpemU6IGF0dHIuc2l6ZSxcclxuXHRcdFx0XHRcdFx0XHROb3RFbXB0eTogYXR0ci5ub3RfZW1wdHksXHJcblx0XHRcdFx0XHRcdFx0RGVmVmFsdWU6YXR0ci5kZWZfdmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0T3JkZXI6IGF0dHIub3JkZXIsXHJcblx0XHRcdFx0XHRcdFx0RGljdE5hbWU6IGF0dHIuZGljdF9uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdERpY3RJRDogYXR0ci5kaWN0X2lkLFxyXG5cdFx0XHRcdFx0XHRcdENvZGVEZWZOYW1lOiBhdHRyLmNvZGVfZGVmX25hbWUsXHJcblx0XHRcdFx0XHRcdFx0Q29kZURlZklEOiBhdHRyLmNvZGVfZGVmX2lkLFxyXG5cdFx0XHRcdFx0XHRcdFJlbENsc0lEOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFJlbENsczogYXR0ci5yZWZfY2xzLFxyXG5cdFx0XHRcdFx0XHRcdFdpZHRoOiBhdHRyLndpZHRoLFxyXG5cdFx0XHRcdFx0XHRcdEhlaWdodDogYXR0ci5oZWlnaHQsXHJcblx0XHRcdFx0XHRcdFx0Q3RybFN0eWxlOiBhdHRyLmN0cmxfc3R5bGUsXHJcblx0XHRcdFx0XHRcdFx0SGFzQWNlOiBhdHRyLmhhc19hY2UsXHJcblx0XHRcdFx0XHRcdFx0Q2FuU2hvdzogYXR0ci5jYW5fc2hvdyxcclxuXHRcdFx0XHRcdFx0XHRDYW5RdWVyeTogYXR0ci5jYW5fcXVlcnksXHJcblx0XHRcdFx0XHRcdFx0UmVhZE9ubHk6IGF0dHIucmVhZF9vbmx5LFxyXG5cdFx0XHRcdFx0XHRcdElzS2V5OiBhdHRyLmlzX2tleSxcclxuXHRcdFx0XHRcdFx0XHRJc0ZpeGVkOiBhdHRyLmlzX2ZpeGVkLFxyXG5cdFx0XHRcdFx0XHRcdERpc3BOYW1lOiBhdHRyLmRpc3BfbmFtZSxcclxuXHRcdFx0XHRcdFx0XHRMdWFBdHRyOiBhdHRyLmx1YV9hdHRyLFxyXG5cdFx0XHRcdFx0XHRcdERlc2M6IGF0dHIuZGVzYyxcclxuXHRcdFx0XHRcdFx0XHRBY3Rpb25EZWY6IGF0dHIuYWN0aW9uX2RlZj9CYXNlNjQuZGVjb2RlKGF0dHIuYWN0aW9uX2RlZik6JycsXHJcblx0XHRcdFx0XHRcdFx0TXVsdGlsaW5ndWFsOiBhdHRyLm11bHRpbGluZ3VhbCxcclxuXHRcdFx0XHRcdFx0XHRSZWZDb25kaXRpb246IGF0dHIucmVmX2NvbmRpdGlvbixcclxuXHRcdFx0XHRcdFx0XHRHcm91cE5hbWU6IGRhdGEuZ3JvdXAsXHJcblx0XHRcdFx0XHRcdFx0VmFsdWU6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0ZGljdGl0ZW06IGRpY3RpdGVtc1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjbGFzc19hdHRyTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0TmFtZTogZGF0YS5ncm91cCxcclxuXHRcdFx0XHRcdFx0T3JkZXI6IGRhdGEub3JkZXIsXHJcblx0XHRcdFx0XHRcdEhhc0FjZTogZGF0YS5oYXNfYWNlLFxyXG5cdFx0XHRcdFx0XHRCa0NvbG9yOiBkYXRhLmJrX2NvbG9yLFxyXG5cdFx0XHRcdFx0XHRJbWdGb250U3R5bGU6IGRhdGEuaW1nX2ZvbnRfc3R5bGUsXHJcblx0XHRcdFx0XHRcdEF0dHI6IGF0dHJzXHJcblx0XHRcdFx0XHR9KTsgXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0aWYodHlwZT09J01hc3QnKXtcclxuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSBjbGFzc19ncmlkU3R5bGU7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBjbGFzc19hdHRyTGlzdDtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCctLS0tLS1NYXN0LS0tLS0tLS0nKTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0XHRcdHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XHJcblx0XHRcdFx0fWVsc2UgaWYodHlwZT09J1N1YicpeyBcclxuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUgPSBjbGFzc19ncmlkU3R5bGU7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBjbGFzc19hdHRyTGlzdDtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCctLS0tLS1TdWItLS0tLS0tLScpO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSk7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdFx0dGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzX2F0dHJfaW5pdCgpe1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxyXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xyXG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XHJcblx0XHRcdFx0ICAgICAgICB2YXIgbmFtZSA9IGF0dHJsaXN0W2ldLmF0dHJncm91cF9uYW1lO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XHJcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3NdO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtLmxlbmd0aD4wKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5hdHRyPWNhLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE5hbWU6IGNsc2F0dHIuTmFtZSxcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3BlbixcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEF0dHI6IGF0dHIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Rm9udDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250Ont9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH0pXHJcblx0XHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcclxuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcclxuXHRcdFx0XHQgICAgICAgICBpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcclxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHR9XHRcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XHJcblx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XHJcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9jb21wb3NlX2Nsc19pZCA9IGV2ZW50bGlzdFtpXS5jb21wb3NlX2Nsc19pZDtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcclxuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XHJcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0ICAgIHRoaXMuaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrmib7liLDlj6/mmL7npLrnmoTnmoTlsZ7mgKdcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHN1YkNsYXNzX2F0dHJfaW5pdCgpe1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxyXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xyXG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XHJcblx0XHRcdFx0ICAgICAgICB2YXIgbmFtZSA9IGF0dHJsaXN0W2ldLmF0dHJncm91cF9uYW1lO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XHJcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W3NdO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtLmxlbmd0aD4wKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5hdHRyPWNhLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE5hbWU6IGNsc2F0dHIuTmFtZSxcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3BlbixcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEF0dHI6IGF0dHIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Rm9udDp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250Ont9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH0pXHJcblx0XHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcclxuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcclxuXHRcdFx0XHQgICAgICAgICBpZiAodGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcclxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHR9XHRcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XHJcblx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XHJcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9jb21wb3NlX2Nsc19pZCA9IGV2ZW50bGlzdFtpXS5jb21wb3NlX2Nsc19pZDtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcclxuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XHJcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0ICAgIHRoaXMuc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0c2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uKGUpeyAvL+mAieaLqeaMiemSruWJjVxyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIEJlZm9yZV9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQmVmb3JlX1NlbGVjdF9FdmVudDtcclxuXHRcdFx0XHRpZighQmVmb3JlX1NlbGVjdF9FdmVudCl7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nliY3kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIG1hc3RfYXR0cj1bXTtcclxuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lK1wi5pyq6YCJ5oup5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHZhciBvYmplY3RzID0gW107XHJcblx0XHRcdFx0dmFyIHN1YlBhbmVsTGlzdCA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdDtcclxuXHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdFx0dmFyIHN1Yl9yZXEgPSBbXTtcclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJbaV0uQXR0cjtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivt+mAieaLqScgfHwgYXIuVmFsdWUgPT0gJ+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFyLlR5cGUgPT0gJ+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChhci5WYWx1ZSA9PSAn6K+3JykgYXIuVmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/ICcxJyA6ICcwJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXIuVHlwZSA9PSAn5a2X5YW4JyB8fCBhci5UeXBlID09ICflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlID09ICflrZflhbgt5pW05pWwJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLnNlbGVjdCA9PSB0cnVlKSB7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciB2IGluIGFyLlZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFN0cilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0ciArPSBcIjtcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIgKz0gYXIuVmFsdWVbdl07XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB2YWxTdHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IGFyLk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBhci5EaXNwTmFtZSArICfkuI3og73kuLrnqbrvvIEnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0b2JqZWN0cy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0b2JqX2lkOiBzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXHJcblx0XHRcdFx0XHRcdG9ial9hdHRyczogc3ViX3JlcVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdFx0J2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdFx0XHRcdGNsc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxyXG5cdFx0XHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXHJcblx0XHRcdFx0XHRidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdFx0XHRlZGl0X2RsZzoge1xyXG5cdFx0XHRcdFx0XHR0eXBlOiAnc21hbGwnLCAvL+Wwj+eql+WPo1xyXG5cdFx0XHRcdFx0XHRjbGFzc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bWFzdGVyX2Nsczoge1xyXG5cdFx0XHRcdFx0XHRjbHNfbmFtZTogJ01CT1gnLCAvLyR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcclxuXHRcdFx0XHRcdFx0b2JqX2F0dHJzOiByZXFcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWJfY2xzOiB7XHJcblx0XHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxyXG5cdFx0XHRcdFx0XHRvYmplY3RzOiBvYmplY3RzXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhciByZXEgPSBbXTtcclxuXHRcdFx0XHR2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdC8vIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcclxuXHRcdFx0XHQvLyB2YXIgbXNnPScnO1xyXG5cdFx0XHRcdC8vIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQvLyBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHQvLyBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdC8vIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdC8vIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdC8vIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0Ly8gXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdC8vIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0Ly8gXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0Ly8gXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdC8vIFx0XHRlbHNlXHJcblx0XHRcdFx0Ly8gXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdC8vIFx0fVxyXG5cdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHQgICAgZXZlbnRpZDogQmVmb3JlX1NlbGVjdF9FdmVudC5JRCxcclxuXHRcdFx0XHQgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxyXG5cdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdCAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdCAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHQgICAgYXR0cjogW10sXHJcblx0XHRcdFx0XHRnbG9iYWxfYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X2F0dHIsXHJcblx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBtYXN0X2F0dHIsXHJcblx0XHRcdFx0XHRlbnZpcm9tZW50OiBlbnZpcm9tZW50XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xyXG5cdFx0XHRcdHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBvcHVwQ2hhbmdlKGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5qih5byP77yaJyArIGUudHlwZSArICcs54q25oCB77yaJyArIGUuc2hvdyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNoZWNrQ2hhbmdlKGUpeyAvL+W8ueahhmNoZWNr6YCJ5oupXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQuZGF0YXNldCk7XHJcblx0XHRcdFx0dmFyIGluZGV4ID0gZS50YXJnZXQuZGF0YXNldC5pbmRleDtcclxuXHRcdFx0XHR2YXIgaXNjaGVjayA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaztcclxuXHRcdFx0XHR2YXIgZGF0YSA9IHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdFx0XHQvLyB0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM9W107XHJcblx0XHRcdFx0aWYodGhpcy4kZGF0YS5jaGVja19saXN0Lm11bHRpcGxlX2Nob2ljZT09XCIwXCIpeyAvL+WIpOaWreaXtuWNlemAiei/mOaYr+WkmumAiVxyXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIGRhdGEpe1xyXG5cdFx0XHRcdFx0XHRkYXRhW2ldLmNoZWNrPWZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRhW2luZGV4XS5jaGVjaz1pc2NoZWNrP2ZhbHNlOnRydWU7XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPWRhdGE7XHJcblx0XHRcdFx0XHJcblx0XHRcdH0sXHJcblx0XHRcdHBvcHVwX2NhbmNlbChlKXsgLy/lvLnmoYblj5bmtohcclxuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBvcHVwX3NhdmEoZSl7IC8v5by55qGG56Gu5a6aIOmAieaLqeaMiemSruWQjlxyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIEFmdGVyX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5BZnRlcl9TZWxlY3RfRXZlbnQ7XHJcblx0XHRcdFx0aWYoIUFmdGVyX1NlbGVjdF9FdmVudCl7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nlkI7kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGl0ZW1zID0gJHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcztcclxuXHRcdFx0XHR2YXIgZGF0YT1bXTtcclxuXHRcdFx0XHR2YXIgbmFtZT1cIlwiO1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmKGl0ZW1zW2ldLmNoZWNrPT10cnVlKXtcclxuXHRcdFx0XHRcdFx0aWYobmFtZSlcclxuXHRcdFx0XHRcdFx0XHRuYW1lKz0nOyc7XHJcblx0XHRcdFx0XHRcdG5hbWUrPWl0ZW1zW2ldLm5hbWU7XHJcblx0XHRcdFx0XHRcdGRhdGEucHVzaCh7aWQ6aXRlbXNbaV0uaWQsbmFtZTppdGVtc1tpXS5uYW1lfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKGRhdGEubGVuZ3RoPT0wKXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgbWFzdF9hdHRyPVtdO1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrXCLmnKrpgInmi6nmlbDmja7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcclxuXHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9bmFtZTtcclxuXHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHQgICAgZXZlbnRpZDogQWZ0ZXJfU2VsZWN0X0V2ZW50LklELFxyXG5cdFx0XHRcdCAgICBlZHR5cGU6IFwiN1wiLFxyXG5cdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsXHJcblx0XHRcdFx0XHRvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdGF0dHI6IFt7YXR0cjogJ21hc3RfaW5wdXRfMzAzNycsdmFsdWU6IG5hbWV9XSxcclxuXHRcdFx0XHRcdGdsb2JhbF9hdHRyOiBtYXN0X2F0dHIsXHJcblx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBkYXRhLFxyXG5cdFx0XHRcdFx0ZW52aXJvbWVudDogJydcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XHJcblx0XHRcdFx0dGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHRjYW5jZWwoZSl7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XHJcblx0XHRcdFx0XHRkZWx0YToxIC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRwYW5lbF9kZWwoaW5kZXgpe1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5zY2FuQ29kZVZhbCA9PSB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPScnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEKVxyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdFx0XHRlbHNle1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0XHRcdFx0Y2xhc3NfaWQ6dGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRcdFx0XHRvYmpfaWQ6dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdFx0Ly8gcmV0dXJuO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHsgdGl0bGU6XCLliqDovb3kuK0uLi5cIiB9KTtcclxuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdkYXRhT2JqRGVsJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5Yig6Zmk5oiQ5Yqf77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOVwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6OS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdG9udGFwKGUpeyAvL+aJq+eggeWKn+iDvVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0XHRcdHZhciBpc1ZhbCA9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlO1xyXG5cdFx0XHRcdFx0Ly8gaWYoIWlzVmFsKXtcclxuXHRcdFx0XHRcdC8vIFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0XHQvLyBcdHZhciBpc1ZhbGQgPXRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlO1xyXG5cdFx0XHRcdFx0Ly8gXHRyZXR1cm47XHJcblx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHQvL+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0aWYgKGlzVmFsIT1yZXN1bHQuZGVjb2RlZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IFtdLFxyXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXHJcblx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuXHRcdFx0c3Vib250YXAoZSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcclxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XHJcblx0XHRcdFx0XHQvL+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0aWYgKGlzVmFsIT1yZXN1bHQuZGVjb2RlZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IFtdLFxyXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXHJcblx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuXHRcdFx0c2Nhbl9vbnRhcChlKXsgLy/miavnoIHljLrmiavnoIHlip/og71cclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KXtcclxuXHRcdFx0XHRcdFx0aWYodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaV0uc2NhbkNvZGVWYWwgPT0gcmVzdWx0LmRlY29kZWRhdGEpIFxyXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXHJcblx0XHRcdFx0XHRpZiAoaXNmbGFnKSB7XHJcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1yZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBtYXN0X3JlcT1bXTtcclxuXHRcdFx0XHRcdFx0XHQvL+S4u+aVsOaNruexu+WxnuaAp1xyXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2F0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGNsYXNzYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcclxuXHRcdFx0XHRcdCAgICAgICAgLy/lrZDmlbDmja7nsbvlsZ7mgKdcclxuXHRcdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXHJcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogJzcnLC8vXCIwXCIsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X3JlcSxcclxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdHNjYW5fb25ldmVudChlKXtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHRcdFx0aWYoZS50YXJnZXQudmFsdWUpe1xyXG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KXtcclxuXHRcdFx0XHRcdFx0aWYodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaV0uc2NhbkNvZGVWYWwgPT0gZS50YXJnZXQudmFsdWUpIFxyXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXHJcblx0XHRcdFx0XHRpZiAoaXNmbGFnKSB7XHJcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1lLnRhcmdldC52YWx1ZTtcclxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG1hc3RfcmVxPVtdO1xyXG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXHJcblx0XHRcdFx0XHRcdFx0dmFyIGNsYXNzYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICBcclxuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHZhciByZXE9W107XHJcblx0XHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvlsZ7mgKdcclxuXHRcdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykgeyBcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0XHRlZHR5cGU6ICc3JywvL1wiMFwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRyb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogbWFzdF9yZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0b25hcnJvdyhpbmRleCxvcGVuKXtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCsnLS0nK29wZW4pO1xyXG5cdFx0XHRcdHZhciBkYXRhX2F0dHI9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLk9wZW47XHJcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1vcGVuPT10cnVlP2ZhbHNlOnRydWU7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltpbmRleF0uT3Blbj1vcGVuPT10cnVlP2ZhbHNlOnRydWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdG9uZGF0ZVRpbWUoZSkge1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRcdFx0dmFyIGRhdGFfYXR0cj10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XHJcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbmNoYW5nZShlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHRcdHZhciB2YWx1ZT10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xyXG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcclxuXHRcdFx0XHRpZiAodmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcclxuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZS5OYW1lO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcclxuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmFjdGlvbjtcclxuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xyXG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2VcclxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0ICAgICAgICBcdH1cclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdH0sXHJcblx0XHRcdG9uY2hhbmdlMihpdGVtLHZhbHVlLGRlbHZhbHVlKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcclxuXHRcdFx0XHRpZihpdGVtLmxlbmd0aD09MCl7IC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcclxuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XHJcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XHJcblx0XHRcdFx0XHRcdFx0aWYoZGVsdmFsdWVbMF0uYXR0ciA9PSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5OYW1lKXtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xyXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XHJcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KXtcclxuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRpZihpdGVtW3ZdLmF0dHIgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uTmFtZSl7XHJcblx0XHRcdFx0XHRcdFx0XHRpbmRleD1pO2lpbmRleD1qO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XHJcblx0XHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XHJcblx0XHRcdFx0XHRpZiAoaXRlbXZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlPXZhbHVlO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XHJcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcclxuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdH1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdWJfb25jaGFuZ2UoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xyXG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cltlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xyXG5cdFx0XHRcdGlmICh2YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWUuTmFtZTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcclxuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcclxuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcclxuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdCAgICAgICAgXHR9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxyXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdWJfb25jaGFuZ2UyKGl0ZW0sdmFsdWUsZGVsdmFsdWUpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGVsdmFsdWUpO1xyXG5cdFx0XHRcdHZhciBzdWJDbGFzc0F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcclxuXHRcdFx0XHRpZihpdGVtLmxlbmd0aD09MCl7IC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcclxuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XHJcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiBzdWJDbGFzc0F0dHJbaV0uQXR0cil7XHJcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHN1YkNsYXNzQXR0cltpXS5BdHRyW2pdLmRpY3RpdGVtKXtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLk5hbWUgPT0gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cltpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xyXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XHJcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gc3ViQ2xhc3NBdHRyKXtcclxuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHN1YkNsYXNzQXR0cltpXS5BdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5OYW1lID09IHN1YkNsYXNzQXR0cltpXS5BdHRyW2pdLmRpY3RpdGVtW2RdLk5hbWUpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleD1pO2lpbmRleD1qO2RpbmRleD1kO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XHJcblx0XHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gc3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF07XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XHJcblx0XHRcdFx0XHRpZiAoaXRlbXZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cltpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlPXZhbHVlO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XHJcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gc3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHN1YkNsYXNzQXR0cjtcclxuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdH1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbmV2ZW50KGUpe1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xyXG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XHJcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xyXG5cdFx0XHRcdFx0Ly8gdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcclxuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xyXG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdCAgICAgICAgXHR9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcclxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdCAgICAgICAgXHRtYXN0X2F0dHI6IFtdLFxyXG5cdFx0XHRcdCAgICAgICAgXHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdtYXN0X2lucHV0XzMwMzcnLCB2YWx1ZTogZS50YXJnZXQudmFsdWUgfV1cclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgIFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fSxcclxuXHRcdFx0b25jaGVjayhlKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHRcdHZhciBpc2NoZWNrZWQgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s/ZmFsc2U6dHJ1ZTtcclxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xyXG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9aXNjaGVja2VkO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xyXG5cdFx0XHRcdGlmIChpc2NoZWNrZWQgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9aXNjaGVja2VkO1xyXG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcclxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fSxcclxuXHRcdFx0aW5wdXRWYWxMaXN0SXNEZWwoaW5kZXgpe1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0LnNwbGljZShpbmRleCwgMSk7IC8v5Yig6ZmkdGFiUGFnZWpzb27nmoTlhoXlrrlcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmlucHV0VmFsTGlzdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGFkZHJlc3NjaGFuZ2UoZSkge1xyXG5cdFx0XHQgICAgLy8gY29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHQgICAgY29uc29sZS5sb2coZS5kYXRhLmpvaW4oJzsnKSlcclxuXHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS5kYXRhLmpvaW4oJzsnKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Y2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCxpaW5kZXgpe1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dmFyIGJlZm9yZV9jbGlja19idXR0b24gPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcclxuXHRcdFx0XHR2YXIgYnV0dG9uX2NhbGxiYWNrID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJ1dHRvbl9jYWxsYmFjaztcclxuXHRcdFx0XHRpZighYmVmb3JlX2NsaWNrX2J1dHRvbil7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJiZWZvcmVfY2xpY2tfYnV0dG9uLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKCFidXR0b25fY2FsbGJhY2spe1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYnV0dG9uX2NhbGxiYWNrLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcclxuXHRcdFx0XHR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oYmVmb3JlX2NsaWNrX2J1dHRvbiwgZGF0YV9hdHRyLCBidXR0b25fY2FsbGJhY2ssIGluZGV4LGlpbmRleCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KXtcclxuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcblx0XHRcdFx0XHRldmVudHM6e1xyXG5cdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLkxvZ2luKyc7JytkYXRhWzBdLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHQgICAgaWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjRcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IGRhdGFbMF0uTG9naW4sXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9BZGRSZWYoZSl7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdC8vIHZhciB2YWx1ZT10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uUmVsQ2xzW2UudGFyZ2V0LnZhbHVlXTtcclxuXHRcdFx0XHQvLyB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KXtcclxuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249LTEmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcblx0XHRcdFx0XHRldmVudHM6e1xyXG5cdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHQgICAgaWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjJcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgLy8gdmFyIGRhdGFfYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XTtcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzYXZhKCl7XHJcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWJjeiEmuacrFxyXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50LklEKTtcclxuXHRcdFx0XHRlbHNlIGlmICh0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWQjuiEmuacrFxyXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xyXG5cdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe2RlbHRhOjEgfSk7Ly/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHRcdH0sXHJcblx0XHRcdGFkZCgpe1xyXG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiLFxyXG5cdFx0XHRcdFx0bWFzazp0cnVlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyIHJlcT1bXTtcclxuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcclxuXHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XHJcblx0XHRcdFx0XHRcdFx0fWVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XHJcblx0XHRcdFx0ICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0XHRcdCAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXHJcblx0XHRcdFx0ICAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdFx0ICAgICBtYXN0ZXI6IHtcclxuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgXHJcblx0XHRcdFx0ICAgICB9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0XHQvLyAgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgZGF0YV9vYmpfaWQ6ICcnLCBtYXN0ZXJjbHNpZDogJycsXHJcblx0XHRcdFx0Ly8gICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxyXG5cdFx0XHRcdC8vICAgICBjb21wb3NlOiBKU09OLnN0cmluZ2lmeShbXSksIHJlZmRhdGFzdG9yZTogSlNPTi5zdHJpbmdpZnkoW10pLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgXHJcblx0XHRcdFx0Ly8gXHRub3RfdHJpZ2dlcl9zeXNfZXZlbnQ6ICcnXHJcblx0XHRcdFx0Ly8gfTtcclxuXHRcdFx0XHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdFx0XHR2YXIgb2JqX2F0dHI9e307XHJcblx0XHRcdFx0cmVxLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5uYW1lXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0XHRcdGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRcdFx0bWFzdGVyX2Nsc19pZDonJyxcclxuXHRcdFx0XHRcdG1hc3Rlcl9vYmpfaWQ6JycsXHJcblx0XHRcdFx0XHRjcmVhdG9yOicnLFxyXG5cdFx0XHRcdFx0Y3JlYXRvcl9uYW1lOicnLFxyXG5cdFx0XHRcdFx0bm90X3RyaWdnZXJfZXZlbnQ6JycsXHJcblx0XHRcdFx0XHR1cGRhdGVfZXhpc3Q6JycsXHJcblx0XHRcdFx0XHRwb3N0X3Byb2Nlc3M6JycsXHJcblx0XHRcdFx0XHRleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdFx0XHRcdG9ial9hdHRyOiBvYmpfYXR0clxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdC8vIHJldHVyblxyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjcmVhdGVEYXRhT2JqJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGlmKHN1Y2Nlc3MucmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5yZXN1bHQuQWN0aW9uKTtcclxuXHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmV0PT0nMCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJlc3VsdF90eXBlPT0nMCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXCJ7XCJyZXRcIjowLCBcInJlc3VsdF90eXBlXCI6MCwgXCJyZXN1bHRcIjpcIuWIm+W7uuaIkOWKnzEyMzEyMzEyM1wiLFwiaW5mb1wiOlwiXCJ9XCJcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1lbHNlXHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6XCLliJvlu7rmiJDlip/vvIFcIixpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcclxuXHRcdFx0XHRcdFx0Ly/liLfmlrBcclxuXHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvMzAzNz9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcclxuXHRcdFx0XHR2YXIgcGFyYW0gPSB7XHJcblx0XHRcdFx0ICAgIEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcclxuXHRcdFx0XHQgICAgVmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxyXG5cdFx0XHRcdCAgICBOb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXHJcblx0XHRcdFx0ICAgIGVudmlyb21lbnQ6IHtcclxuXHRcdFx0XHQgICAgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxyXG5cdFx0XHRcdCAgICAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdFx0XHQgICAgICAgIG1hc3Rlcjoge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0XHRcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcclxuXHRcdFx0XHR2YXIgZ2xvYmFsX2F0dHIgPSAnJztcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcclxuICAgIC8vICAgICAgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblx0XHRcdFx0cGFyYW0uZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyYW0uZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0XHRcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZCA9ICd7JytpbmZvLmV2ZW50aWQrJ30nO1xyXG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcclxuXHRcdFx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcclxuXHRcdFx0XHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxyXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXHJcblx0XHRcdFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxyXG5cdFx0XHRcdCAgZXZlbnRfbmFtZTogJycsXHJcblx0XHRcdFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcclxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHQgIHByal9pZDogaW5mby5wcm9qZWN0aWQsXHJcblx0XHRcdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcclxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxyXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXHJcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxyXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHQgIGV4dF9pbmZvOiBwYXJhbS5lbnZpcm9tZW50LFxyXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06IGlucHV0cGFyYW1ldGVyLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdC8vIHJldHVybjtcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0ICB2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xyXG5cdFx0XHRcdFx0ICBpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0ICAgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdCAgICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICAgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICBcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdFx0ICB9ZWxzZXtcclxuXHRcdFx0XHRcdCAgXHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHQgIFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgIFxyXG5cdFx0XHRcdFx0XHRpZihkYXRhLmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh2YWwpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2EgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbYV0uQXR0cltsXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWxbaV0uYXR0ciAgPT0gY2EuTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgY2EuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdCAgICBEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdCAgICBcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0ICAgIFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXHJcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHQgICAgXHQgICAgbWFzdGVyOiB7XHJcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0ICAgIFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXHJcblx0XHQgICAgXHQgICAgfVxyXG5cdFx0ICAgIFx0fTtcclxuXHRcdFx0XHRlbnZpcm9tZW50LmVkaXRfZGxnID0ge1xyXG5cdFx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXHJcblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZGF0YV9hdHRyKSB7XHJcblx0XHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XHJcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xyXG5cdFx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXHJcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXHJcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xyXG5cdFx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xyXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcclxuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdCAgICBcdC8vIHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdCAgICAgLy8gICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxyXG5cdFx0ICAgICAvLyAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxyXG5cdFx0ICAgICAvLyAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiAnJywgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXHJcblx0XHQgICAgIC8vICAgIH1cclxuXHRcdCAgICBcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0ICAgIFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdCAgICBcdGlmKGluZm8uZGF0YUpzb24pXHJcblx0XHQgICAgXHRcdGluZm8uZGF0YUpzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0ICAgIFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XHJcblx0XHQgICAgXHR9KTtcclxuXHRcdCAgICBcdGlmKCFpbmZvLmV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgaW5mby5ldmVudGlkID0gJ3snK2luZm8uZXZlbnRpZCsnfSc7XHJcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xyXG5cdFx0ICAgIFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcclxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxyXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcclxuXHRcdCAgICBcdCAgY2xhc3NfbmFtZTogJycsXHJcblx0XHQgICAgXHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXHJcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICAgIFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcclxuXHRcdCAgICBcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0ICAgIFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxyXG5cdFx0ICAgIFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcclxuXHRcdCAgICBcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXHJcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxyXG5cdFx0ICAgIFx0ICBkYXRhX2pzb246IGluZm8uZGF0YUpzb24sXHJcblx0XHQgICAgXHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgICAgXHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxyXG5cdFx0ICAgIFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXHJcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiAnJyxcclxuXHRcdCAgICBcdH07XHJcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHQgICAgXHQvLyByZXR1cm47XHJcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2ldO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uVHlwZT09J+Wtl+WFuCcgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIgPSBkYXRhLmFjdGlvbltpXS52YWx1ZSB8fCBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdFx0fVxyXG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0fSk7XHJcblx0XHQgICAgfSxcclxuXHRcdFx0T0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKXtcclxuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxyXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xyXG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHRcdFx0ICAgICAgICBcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH07XHJcblx0XHQgICAgXHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9va19ldmVudC5zY3JpcF9pZDtcclxuXHRcdFx0XHR2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcclxuXHRcdCAgICBcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHQgICAgXHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXHJcblx0XHQgICAgXHQgICAgICAgIH0pLmxlbmd0aCkge1xyXG5cdFx0ICAgIFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcclxuXHRcdCAgICBcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcclxuXHRcdCAgICBcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0ICAgIH1cclxuXHRcdCAgICBcdH1cclxuXHRcdCAgICBcdHZhciBpbmZvID0ge1xyXG5cdFx0ICAgIFx0ICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHQgICAgXHQgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdCAgICBcdCAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0ICAgIFx0ICAgIHJjbHNpZDogJycsXHJcblx0XHQgICAgXHQgICAgcm9iamlkOiAnJyxcclxuXHRcdCAgICBcdCAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0ICAgIFx0ICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHQgICAgXHQgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHQgICAgXHQgICAgYXR0cjogcmVxLFxyXG5cdFx0ICAgIFx0fVxyXG5cdFx0ICAgLy8gIFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0ICAgLy8gICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLHJjbHNpZDogaW5mby5yY2xzaWQsIFxyXG5cdFx0XHRcdFx0Ly8gcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxyXG5cdFx0XHRcdFx0Ly8gYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxyXG5cdFx0ICAgLy8gICAgICB9XHJcblx0XHQgICAgXHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHQgICAgXHR2YXIgb2JqX2F0dHI9e307XHJcblx0XHQgICAgXHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XHJcblx0XHQgICAgXHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdCAgICBcdH0pO1xyXG5cdFx0ICAgIFx0aWYoIWV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgZXZlbnRpZD0gJ3snKyBldmVudGlkICsnfSc7XHJcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xyXG5cdFx0ICAgIFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcclxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxyXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcclxuXHRcdCAgICBcdCAgY2xhc3NfbmFtZTogJycsXHJcblx0XHQgICAgXHQgIGV2ZW50X2lkOiBldmVudGlkLFxyXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgICAgXHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgICBcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcclxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXHJcblx0XHQgICAgXHQgIHJlbF9vYmpfaWQ6IGluZm8ucm9iamlkLFxyXG5cdFx0ICAgIFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcclxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiAnJyxcclxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdCAgICBcdCAgZXh0X2luZm86IGVudmlyb21lbnQsXHJcblx0XHQgICAgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcclxuXHRcdCAgICBcdCAgaW5wdXRfcGFyYW06ICcnLFxyXG5cdFx0ICAgIFx0fTtcclxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdCAgICBcdC8vIHJldHVybjtcclxuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmFkZCgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHQgICAgXHRcdH1lbHNle1xyXG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNFwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0XHR9XHJcblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xyXG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHQgICAgXHR9KTtcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGluZGV4LGlpbmRleCl7XHJcblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XHJcblx0XHRcdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXHJcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXHJcblx0XHRcdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XHJcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcclxuXHRcdFx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFyIHJlcT1bXTtcclxuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXHJcblx0XHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgZXh0aW5mbyA9IGVudmlyb21lbnQ7XHJcblx0XHRcdFx0ZXh0aW5mby5lZGl0X2RsZyA9IHtcclxuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xyXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xyXG5cdFx0XHRcdCAgICBleHRpbmZvLmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxyXG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcclxuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxyXG5cdFx0XHRcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxyXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcclxuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcclxuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXHJcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gdmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdC8vIFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXHJcblx0XHRcdFx0Ly8gXHRjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBvYmppZDogJycsYXR0cjogSlNPTi5zdHJpbmdpZnkocmVxKSwgXHJcblx0XHRcdFx0Ly8gXHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShleHRpbmZvKSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXHJcblx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdGV4dGluZm8gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGV4dGluZm8pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0XHRcdHJlcS5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZighZXZlbnRpZC5pbmNsdWRlcygneycpKSBldmVudGlkPSAneycrIGV2ZW50aWQgKyd9JztcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRcdCAgZWRfdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXHJcblx0XHRcdFx0ICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5jbHNpZCxcclxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHQgIHByal9pZDogJycsXHJcblx0XHRcdFx0ICByZWZfY2xzX2lkOiAnJyxcclxuXHRcdFx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogJycsXHJcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxyXG5cdFx0XHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHQgIGV4dF9pbmZvOiBleHRpbmZvLFxyXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06ICcnLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdC8vIHJldHVybjtcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0ICB2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1x0XHJcblx0XHRcdFx0XHQgIGlmIChkYXRhLnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHQgICAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0ICAgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgICAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgIFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0XHQgIH1lbHNle1xyXG5cdFx0XHRcdFx0ICBcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdCAgXHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdCAgXHJcblx0XHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ucyA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbnMpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbnNbaV07XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBhY3Rpb24udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlbnZpcm9tZW50ID0gSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3BhbmVsJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICB2YXIgZCA9IGRpYWxvZyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgIGQuc2hvdygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc3R5bGUgPSB2YWwuc3R5bGU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbT17XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2F0dHI6ZGF0YV9hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRzOntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHI6IHBhcmFtLnJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlucHV0cGFyYW1ldGVyOiBkYXRhXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBwYXJhbS5kYXRhX2F0dHIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fZGF0YV9xdWVyeV9kbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkID0gZGlhbG9nKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkLnNob3coKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcHJvamVjdF9xdWVyeV9kbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5tdWxpdF9zZWxlY3QpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwcmlSZWwgPSAnLTEnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzAnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkei0n+i0o+eahOmhueebricpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMSc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICcyJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5YWz5rOo55qEJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc0JztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzUnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1fPXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0nK3ByaVJlbCsnJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW1fKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tfZXZlbnRpZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIyXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2plY3RpZDogZGF0YVswXS5JRCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmNsc2lkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXJsb2dpbjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBwYXJhbS5yZXEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZCA9IGRpYWxvZyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZC5zaG93KCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNVwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAgc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xyXG5cdFx0ICAgIFx0dmFyIHBhcmFtID0ge1xyXG5cdFx0ICAgIFx0ICAgIEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcclxuXHRcdCAgICBcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXHJcblx0XHQgICAgXHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxyXG5cdFx0ICAgIFx0ICAgIGVudmlyb21lbnQ6IHtcclxuXHRcdCAgICBcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICBcdCAgICAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0ICAgIFx0ICAgICAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICBcdCAgICAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0ICAgIFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxyXG5cdFx0ICAgIFx0ICAgICAgICB9XHJcblx0XHQgICAgXHQgICAgfVxyXG5cdFx0ICAgIFx0fVxyXG5cdFx0ICAgIFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XHJcblx0XHQgICAgXHR2YXIgZ2xvYmFsX2F0dHIgPSAnJztcclxuXHRcdCAgICBcdC8vIHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdCAgICAgLy8gICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcclxuXHRcdCAgICAgLy8gICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcclxuXHRcdCAgICAgLy8gICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSwgaW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLCBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcclxuXHRcdCAgICAgLy8gICAgfVxyXG5cdFx0XHRcdHBhcmFtID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShwYXJhbSkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0XHRcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZighaW5mby5ldmVudGlkLmluY2x1ZGVzKCd7JykpIGluZm8uZXZlbnRpZD0gJ3snKyBpbmZvLmV2ZW50aWQgKyd9JztcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXHJcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXHJcblx0XHRcdFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcclxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcclxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0XHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXHJcblx0XHRcdFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxyXG5cdFx0XHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXHJcblx0XHRcdFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcclxuXHRcdFx0XHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxyXG5cdFx0XHRcdCAgZGF0YV9qc29uOiAnJyxcclxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHRcdFx0ICBleHRfaW5mbzogcGFyYW0sXHJcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogJycsXHJcblx0XHRcdFx0ICBpbnB1dF9wYXJhbTogJycsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdFx0Ly8gcmV0dXJuO1xyXG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGFjdGlvbmxpc3QubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3Rbal1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWwgPSBKU09OLnBhcnNlKHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyICA9PSBjYS5OYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflrZflhbgnIHx8IGNhLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBjYS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHZhbFtpXS5jaG9pY2VfbGlzdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID12YWxbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSB2YWxbaV0uY2hvaWNlX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdCAgICBcdFx0fWVsc2V7XHJcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHQgICAgXHRcdH1cclxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdH0pO1xyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAgc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xyXG5cdFx0ICAgIFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge307XHJcblx0XHQgICAgXHRpZihpbmZvLmVudmlyb21lbnQpe1xyXG5cdFx0ICAgIFx0XHRlbnZpcm9tZW50ID0gaW5mby5lbnZpcm9tZW50O1xyXG5cdFx0ICAgIFx0fSBlbHNlIHtcclxuXHRcdCAgICBcdFx0ZW52aXJvbWVudCA9IHtcclxuXHRcdCAgICBcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0ICAgIFx0XHRcdGNsc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxyXG5cdFx0ICAgIFx0XHRcdCdidXR0b24nOiAndG9wJywgLy8gdG9wL2JvdHRvbVxyXG5cdFx0ICAgIFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICBcdFx0XHRlZGl0X2RsZzoge1xyXG5cdFx0ICAgIFx0XHRcdFx0dHlwZTogJ3NtYWxsJywgLy/lsI/nqpflj6NcclxuXHRcdCAgICBcdFx0XHRcdGNsYXNzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcclxuXHRcdCAgICBcdFx0XHR9LFxyXG5cdFx0ICAgIFx0XHR9O1xyXG5cdFx0ICAgIFx0XHRcclxuXHRcdCAgICBcdH1cclxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHI7XHJcblx0XHQgICAgXHRpZiAoaW5mby5nbG9iYWxfYXR0cikge1xyXG5cdFx0ICAgIFx0XHRnbG9iYWxfYXR0ciA9IGluZm8uZ2xvYmFsX2F0dHI7XHJcblx0XHQgICAgXHR9XHJcblx0XHRcdFx0XHJcblx0XHQgICAgXHRlbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcclxuXHRcdFx0XHRpZihpbmZvLmlucHV0UGFyYW10ZXIpe1xyXG5cdFx0XHRcdFx0aW5mby5pbnB1dFBhcmFtdGVyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShpbmZvLmlucHV0UGFyYW10ZXIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0XHRcdFxyXG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xyXG5cdFx0ICAgIFx0aW5mby5hdHRyLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XHJcblx0XHQgICAgXHR9KTtcclxuXHRcdCAgICBcdGlmKCFpbmZvLmV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgaW5mby5ldmVudGlkPSAneycrIGluZm8uZXZlbnRpZCArJ30nO1xyXG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXHJcblx0XHQgICAgXHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcclxuXHRcdCAgICBcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXHJcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICAgIFx0ICBldmVudF9pZDogaW5mby5ldmVudGlkLFxyXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcclxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgICAgXHQgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdCAgICBcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxyXG5cdFx0ICAgIFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcclxuXHRcdCAgICBcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXHJcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxyXG5cdFx0ICAgIFx0ICBkYXRhX2pzb246ICcnLFxyXG5cdFx0ICAgIFx0ICBjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0ICAgIFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcclxuXHRcdCAgICBcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxyXG5cdFx0ICAgIFx0ICBpbnB1dF9wYXJhbTogaW5mby5pbnB1dFBhcmFtdGVyLFxyXG5cdFx0ICAgIFx0fTtcclxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdCAgICBcdC8vIHJldHVybjtcclxuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpaSA9IDA7IGlpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGlpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaWldO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gcmVzdWx0W2ldLmNob2ljZV9saXN0KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kYWN0aW9udHIgPSBhY3Rpb24udmFsdWUgfHwgW107XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7ICAvL+aJk+W8gOS+p+a7keW8ueahhlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYWN0aW9uLnZhbHVlLmNvbW1vbl9kbGdfaWQgPT0gJ2NoZWNrX2xpc3QnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kZGF0YS5jaGVja19saXN0PSBhY3Rpb24udmFsdWUuY29uZmlnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIGlmKGFjdGlvbi52YWx1ZS5jb25maWcuYXBwZWFyX3N0eWxlID09ICdzaWRlc2xpcCcpIC8v5Yik5pat5piv5ZCm5piv5L6n5ruRXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBvcHVwVHlwZSA9ICdyaWdodCc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wb3B1cFR5cGUgPSAnY2VudGVyJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIC8vIG9wZW4g5pa55rOV5Lyg5YWl5Y+C5pWwIOetieWQjOWcqCB1bmktcG9wdXAg57uE5Lu25LiK57uR5a6aIHR5cGXlsZ7mgKdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kcmVmcy5wb3B1cC5vcGVuKCR0aGlzLiRkYXRhLnBvcHVwVHlwZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnYWRkX3N1YmNsc19wYW5lbCcpIHsgLy/kuLvku47mlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJhbmQgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykgeyAvL+eUn+aIkDXkvY3pmo/mnLrmlbBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhbmQgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5mby5pbnB1dFBhcmFtdGVyWzBdLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiICsgcmFuZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5mby5hdHRyWzBdLmF0dHIgPT0gXCJtYXN0X2lucHV0XzMwMzdcIikgLy/liKTmlq3mmK/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIiArIHJhbmQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pOyBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09IHNjYW5Db2RlVmFsKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXN1bHRbaV0uYXR0cj09XCJTX0lEXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyPWxpc3RfMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaW5mby5pbnB1dFBhcmFtdGVyWzBdLmF0dHI9PVwibWFzdF9pbnB1dF8zMDM3XCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIraWk7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6bGlzdF8xXHJcblx0XHRcdFx0XHRcdFx0XHR9KTsgXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXN1bHRbaV0uYXR0cj09XCJTX0lEXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5PYmpJRD1yZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzdcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdFx0fVxyXG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzcuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0fSk7XHJcblx0XHQgICAgfSxcclxuXHRcdCAgICBzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGV2ZW50SUQpe1xyXG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiLFxyXG5cdFx0XHRcdFx0bWFzazp0cnVlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgb2JqZWN0cz1bXTtcclxuXHRcdFx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xyXG5cdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHR2YXIgc3ViX3JlcT1bXTtcclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJbaV0uQXR0cjtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG9iamVjdHMucHVzaCh7XHJcblx0XHRcdFx0XHRcdG9ial9pZDpzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXHJcblx0XHRcdFx0XHRcdG9ial9hdHRyczpzdWJfcmVxXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGRhdGFKc29uPXtcclxuXHRcdFx0XHRcdG1hc3Rlcl9jbHM6e1xyXG5cdFx0XHRcdFx0XHRjbHNfbmFtZTonTUJPWCcsLy8kdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLk5hbWUsXHJcblx0XHRcdFx0XHRcdG9ial9hdHRyczpyZXFcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRpbnB1dF8zMDM3OiR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsLCAgIC8v5omr56CB5YaF5a65XHJcblx0XHRcdFx0XHRvcF90eXBlOiR0aGlzLiRkYXRhLnBhcmFtLk9wZXJhdGlvblR5cGUsIC8v5L2c5Lia57G75Z6L5a6a5LmJXHJcblx0XHRcdFx0XHRzdWJfY2xzOntcclxuXHRcdFx0XHRcdFx0Y2xzX25hbWU6J01CT1gnLC8vJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxyXG5cdFx0XHRcdFx0XHRvYmplY3RzOm9iamVjdHNcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XHJcblx0XHQgICAvLyAgXHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHQgICAvLyAgICAgICAgICBlZHR5cGU6IFwiN1wiLCBldmVudGlkOiBldmVudElELCBwcm9qZWN0aWQ6ICcnLHJjbHNpZDogJycsIHJvYmppZDogJycsIHVzZXJsb2dpbjogJycsIFxyXG5cdFx0XHRcdFx0Ly8gY2xzaWQ6ICdNQk9YJywgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoW10pLCBcclxuXHRcdFx0XHRcdC8vIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciksZGF0YUpzb246SlNPTi5zdHJpbmdpZnkoZGF0YUpzb24pXHJcblx0XHQgICAvLyAgICAgIH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhSW5mbykpO1xyXG5cdFx0ICAgIFx0dmFyIGRhdGFKc29uID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShkYXRhSnNvbikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXHJcblx0XHQgICAgXHR2YXIgZ2xvYmFsX2F0dHIgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxyXG5cdFx0ICAgIFx0aWYoIWV2ZW50SUQuaW5jbHVkZXMoJ3snKSkgZXZlbnRJRD0gJ3snKyBldmVudElEICsnfSc7XHJcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xyXG5cdFx0ICAgIFx0ICBlZF90eXBlOiBcIjdcIixcclxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxyXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogJ01CT1gnLFxyXG5cdFx0ICAgIFx0ICBjbGFzc19uYW1lOiAnJyxcclxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGV2ZW50SUQsXHJcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICAgIFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgICAgXHQgIG9ial9hdHRyOiAnJyxcclxuXHRcdCAgICBcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgICAgXHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICAgIFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiBkYXRhSnNvbixcclxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdCAgICBcdCAgZXh0X2luZm86ICcnLFxyXG5cdFx0ICAgIFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXHJcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiAnJyxcclxuXHRcdCAgICBcdH07XHJcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHQgICAgXHQvLyByZXR1cm47XHJcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHJcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCR0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50LklEKTtcclxuXHRcdFx0XHRcdFx0XHRlbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly/liLfmlrBcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDM3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHQgICAgXHRcdH1lbHNle1xyXG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0XHR9XHJcblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xyXG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdH0pO1xyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAgXHJcblx0XHRcdFxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///115\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));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 80));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: [],\n      popupType: \"center\",\n      check_list: {}\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/3037.vue:736\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrGetList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.classAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(group, index) {\n              return _regenerator.default.wrap(function _callee2$(_context2) {\n                while (1) {\n                  switch (_context2.prev = _context2.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(attr, key) {\n                          return _regenerator.default.wrap(function _callee$(_context) {\n                            while (1) {\n                              switch (_context.prev = _context.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context.next = 3;\n                                    break;\n                                  }\n                                  _context.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'mast');\n                                case 3:\n                                case \"end\":\n                                  return _context.stop();\n                              }\n                            }\n                          }, _callee);\n                        }));\n                        return function (_x3, _x4) {\n                          return _ref2.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context2.stop();\n                  }\n                }\n              }, _callee2);\n            }));\n            return function (_x, _x2) {\n              return _ref.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrGetList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.err_code == 0) {\n          $this.$data.subClassAttrList = success.result;\n          success.result.forEach( /*#__PURE__*/function () {\n            var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(group, index) {\n              return _regenerator.default.wrap(function _callee4$(_context4) {\n                while (1) {\n                  switch (_context4.prev = _context4.next) {\n                    case 0:\n                      group.attr_list.forEach( /*#__PURE__*/function () {\n                        var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(attr, key) {\n                          return _regenerator.default.wrap(function _callee3$(_context3) {\n                            while (1) {\n                              switch (_context3.prev = _context3.next) {\n                                case 0:\n                                  if (!(attr.type == \"字典-字符串\" || attr.type == \"字典-整数\")) {\n                                    _context3.next = 3;\n                                    break;\n                                  }\n                                  _context3.next = 3;\n                                  return $this.DictItemGetList(attr, key, index, 'sub');\n                                case 3:\n                                case \"end\":\n                                  return _context3.stop();\n                              }\n                            }\n                          }, _callee3);\n                        }));\n                        return function (_x7, _x8) {\n                          return _ref4.apply(this, arguments);\n                        };\n                      }());\n                    case 1:\n                    case \"end\":\n                      return _context4.stop();\n                  }\n                }\n              }, _callee4);\n            }));\n            return function (_x5, _x6) {\n              return _ref3.apply(this, arguments);\n            };\n          }());\n          setTimeout(function () {\n            $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n          }, 500);\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    DictItemGetList: function DictItemGetList(attr, key, index, type) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                //Mobox3得到字典项列表\n                _this.data = [];\n                $this = _this;\n                dataInfo = {\n                  dict_id: attr.dict_id,\n                  dict_name: attr.dict_name\n                }; // console.log(dataInfo);\n                _this.$store.dispatch('DictItemGetList', dataInfo).then( /*#__PURE__*/function () {\n                  var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(success) {\n                    return _regenerator.default.wrap(function _callee5$(_context5) {\n                      while (1) {\n                        switch (_context5.prev = _context5.next) {\n                          case 0:\n                            // console.log(success);\n                            if (success.err_code == 0) {\n                              if (type == 'mast') {\n                                $this.$data.classAttrList[index].attr_list[key].dictitem = success.result;\n                                _this.$store.commit(\"classAttrList\", $this.$data.classAttrList);\n                              } else {\n                                $this.$data.subClassAttrList[index].attr_list[key].dictitem = success.result;\n                                _this.$store.commit(\"subClassAttrList\", $this.$data.subClassAttrList);\n                              }\n                            } else {\n                              uni.showModal({\n                                title: \"错误1.2\",\n                                content: success.err_msg,\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          case 1:\n                          case \"end\":\n                            return _context5.stop();\n                        }\n                      }\n                    }, _callee5);\n                  }));\n                  return function (_x9) {\n                    return _ref5.apply(this, arguments);\n                  };\n                }()).catch(function (ex) {\n                  // console.log(ex);\n                  uni.showModal({\n                    title: \"错误1.3\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                $this = _this2;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  ui_style_type: 2,\n                  ui_style_name: styleName\n                }; // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  $this.$store.state.thisEditName = styleName;\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo;\n                    $this.viewParam('Mast');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.classGridStyle = success.result;\n                        // console.log($this.$data.classGridStyle);\n\n                        $this.viewParam('Mast');\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:873\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  $this.$store.state.thisEditSubName = styleName;\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo;\n                    $this.viewParam('Sub');\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('UIStyleGetInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.err_code == 0) {\n                        var styledef = _base.default.decode(success.result.style_def);\n                        success.result.style_def = JSON.parse(styledef);\n                        $this.$data.subClassGridStyle = success.result;\n                        // console.log($this.$data.subClassGridStyle);\n\n                        $this.viewParam('Sub');\n\n                        // $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.err_msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/3037.vue:899\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 3:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }))();\n    },\n    viewParam: function viewParam(type) {\n      //将mobox3小写参数转换为mobox2大写参数\n      var classGridStyle = '';\n      var classAttrList = '';\n      if (type == 'Mast') {\n        classGridStyle = this.$data.classGridStyle;\n        classAttrList = this.$data.classAttrList;\n      } else if (type == 'Sub') {\n        classGridStyle = this.$data.subClassGridStyle;\n        classAttrList = this.$data.subClassAttrList;\n      }\n      var class_gridStyle = {\n        ID: classGridStyle.id,\n        Name: classGridStyle.name,\n        Type: classGridStyle.type,\n        IsDefault: classGridStyle.is_defaul,\n        StyleDef: classGridStyle.style_def\n      };\n      var class_attrList = [];\n      classAttrList.forEach(function (data) {\n        var attrs = [];\n        if (data.attr_list) {\n          data.attr_list.forEach(function (attr) {\n            var dictitems = [];\n            if (attr.dictitem) {\n              attr.dictitem.forEach(function (dict) {\n                dictitems.push({\n                  ID: dict.id,\n                  Name: dict.name,\n                  Note: dict.note,\n                  Order: dict.order,\n                  ImgUrl: null,\n                  Code: dict.code,\n                  HasSub: null,\n                  ParentID: null,\n                  ParentName: null,\n                  Lvl: dict.lvl,\n                  IsDefault: dict.is_default,\n                  Value: dict.value,\n                  CN_G_ID: dict.id,\n                  CN_G_DICT_ID: null,\n                  CN_S_NAME: dict.name,\n                  CN_S_NOTE: dict.note,\n                  CN_N_ORDER: dict.order,\n                  CN_S_IMG_URL: null,\n                  CN_S_CODE: dict.code,\n                  CN_C_HAS_SUB: null,\n                  CN_G_PARENT_ITEM_ID: null,\n                  CN_G_PARENT_ITEM_NAME: null,\n                  CN_N_LVL: dict.lvl,\n                  CN_C_IS_DEFAULT: dict.is_default,\n                  CN_S_VALUE: dict.value\n                });\n              });\n            }\n            attrs.push({\n              ID: attr.id,\n              Name: attr.name,\n              Type: attr.type,\n              Size: attr.size,\n              NotEmpty: attr.not_empty,\n              DefValue: attr.def_value,\n              Order: attr.order,\n              DictName: attr.dict_name,\n              DictID: attr.dict_id,\n              CodeDefName: attr.code_def_name,\n              CodeDefID: attr.code_def_id,\n              RelClsID: null,\n              RelCls: attr.ref_cls,\n              Width: attr.width,\n              Height: attr.height,\n              CtrlStyle: attr.ctrl_style,\n              HasAce: attr.has_ace,\n              CanShow: attr.can_show,\n              CanQuery: attr.can_query,\n              ReadOnly: attr.read_only,\n              IsKey: attr.is_key,\n              IsFixed: attr.is_fixed,\n              DispName: attr.disp_name,\n              LuaAttr: attr.lua_attr,\n              Desc: attr.desc,\n              ActionDef: attr.action_def ? _base.default.decode(attr.action_def) : '',\n              Multilingual: attr.multilingual,\n              RefCondition: attr.ref_condition,\n              GroupName: data.group,\n              Value: null,\n              dictitem: dictitems\n            });\n          });\n        }\n        class_attrList.push({\n          Name: data.group,\n          Order: data.order,\n          HasAce: data.has_ace,\n          BkColor: data.bk_color,\n          ImgFontStyle: data.img_font_style,\n          Attr: attrs\n        });\n      });\n      if (type == 'Mast') {\n        this.$data.classGridStyle = class_gridStyle;\n        this.$data.classAttrList = class_attrList;\n        // console.log('------Mast--------');\n        // console.log(this.$data.classGridStyle);\n        // console.log(this.$data.classAttrList);\n        this.class_attr_init();\n      } else if (type == 'Sub') {\n        this.$data.subClassGridStyle = class_gridStyle;\n        this.$data.subClassAttrList = class_attrList;\n        // console.log('------Sub--------');\n        // console.log(this.$data.subClassGridStyle);\n        // console.log(this.$data.subClassAttrList);\n        this.subClass_attr_init();\n      }\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/3037.vue:1146\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/3037.vue:1147\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem.length > 0) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].attr = ca.Name;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      ca.RelClsList = ca.RelCls;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/3037.vue:1279\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/3037.vue:1280\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //选择按钮前\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        edit_dlg: {\n          type: 'small',\n          //小窗口\n          class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n        },\n\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      var req = [];\n      var req = [];\n      // var attrlist = this.$data.subClassAttrList;\n      // var msg='';\n      // for (var i = 0; i < attrlist.length; i++) {\n      // \tvar attr = attrlist[i].Attr;\n      // \tfor (var j = 0; j < attr.length; j++) {\n      // \t\tvar ar = attr[j];\n      // \t\tif(ar.Type=='引用对象(多个)')\n      // \t\t\tif(ar.Value=='请') ar.Value='';\n      // \t\tif(ar.Type=='引用人员' || ar.Type=='引用项目')\n      // \t\t\treq.push({ attr: ar.Name, value: ar.ValID ?ar.ValID :'' });\n      // \t\telse if(ar.Type=='布尔值')\n      // \t\t\treq.push({ attr: ar.Name, value: ar.Value?'1':'0'});\n      // \t\telse\n      // \t\t\treq.push({ attr: ar.Name, value: ar.Value ?ar.Value :''});\n      // \t}\n      // }\n\n      var info = {\n        eventid: Before_Select_Event.ID,\n        edtype: \"7\",\n        //\"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,\n        objid: \"\",\n        attr: [],\n        global_attr: req,\n        mast_attr: mast_attr,\n        inputParamter: mast_attr,\n        enviroment: enviroment\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n    },\n    popupChange: function popupChange(e) {\n      __f__(\"log\", '当前模式:' + e.type + ',状态:' + e.show, \" at pages/modal/3037.vue:1434\");\n    },\n    checkChange: function checkChange(e) {\n      //弹框check选择\n      // console.log(e.target.dataset);\n      var index = e.target.dataset.index;\n      var ischeck = e.target.dataset.ischeck;\n      var data = this.$data.check_list.items;\n      // this.$data.check_list.items=[];\n      if (this.$data.check_list.multiple_choice == \"0\") {\n        //判断时单选还是多选\n        for (var i in data) {\n          data[i].check = false;\n        }\n      }\n      data[index].check = ischeck ? false : true;\n      this.$data.check_list.items = data;\n    },\n    popup_cancel: function popup_cancel(e) {\n      //弹框取消\n      this.$refs.popup.close();\n    },\n    popup_sava: function popup_sava(e) {\n      //弹框确定 选择按钮后\n      var $this = this;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event;\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var items = $this.$data.check_list.items;\n      var data = [];\n      var name = \"\";\n      for (var i = 0; i < items.length; i++) {\n        if (items[i].check == true) {\n          if (name) name += ';';\n          name += items[i].name;\n          data.push({\n            id: items[i].id,\n            name: items[i].name\n          });\n        }\n      }\n      if (data.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未选择数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var mast_attr = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择') {\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + \"未选择数据!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_attr.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else mast_attr.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n        }\n      }\n      $this.$data.scanCodeVal = name;\n      var info = {\n        eventid: After_Select_Event.ID,\n        edtype: \"7\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: \"\",\n        attr: [{\n          attr: 'mast_input_3037',\n          value: name\n        }],\n        global_attr: mast_attr,\n        inputParamter: data,\n        enviroment: ''\n      };\n      // console.log(info);\n      this.scan_DataObjRunCustomEvent(info, \"\");\n      this.$refs.popup.close();\n    },\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          class_id: this.$data.param.Sub_Cls.ID,\n          class_name: '',\n          obj_id: this.$data.subPanelList[index].ObjID\n        };\n        // console.log(dataInfo);\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('dataObjDel', dataInfo).then(function (success) {\n          // console.log(success);\n          uni.hideLoading();\n          if (ret.err_code == 0) {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/3037.vue:1548\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    ontap: function ontap(e) {\n      var _this3 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // if(!isVal){\n        // \tthis.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=result.decodedata;\n        // \tvar isVald =this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        // \treturn;\n        // }\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this3.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    subontap: function subontap(e) {\n      var _this4 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this4.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          uni.hideKeyboard();\n          //子数据类扫码区事件脚本\n          var eventid = _this4.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this4.$data.subClassAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this4.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this5 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/3037.vue:1656\");\n        var isflag = true;\n        for (var i in _this5.$data.subPanelList) {\n          if (_this5.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          _this5.$data.scanCodeVal = result.decodedata;\n          var eventid = _this5.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this5.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this5.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this5.$data.scanCodeVal\n              }]\n            };\n            _this5.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_onevent: function scan_onevent(e) {\n      // console.log(e.target);\n      if (e.target.value) {\n        var isflag = true;\n        for (var i in this.$data.subPanelList) {\n          if (this.$data.subPanelList[i].scanCodeVal == e.target.value) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          uni.hideKeyboard();\n          this.$data.scanCodeVal = e.target.value;\n          var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = this.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = this.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: this.$data.scanCodeVal\n              }]\n            };\n            this.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      }\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Open;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = open == true ? false : true;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['iiindex']].subClassAttr[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1808\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (delvalue[0].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              this.$data.classAttrList[i].Attr[j].Value = \"\";\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            if (item[v].attr == this.$data.classAttrList[i].Attr[j].Name) {\n              index = i;\n              iindex = j;\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1877\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          // console.log(this.$data.classAttrList[index].Attr[iindex].Value);\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    sub_onchange: function sub_onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:1921\");\n      var value = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (value.Name != data_attr.Value) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        // console.log(this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value);\n        var eventid = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    sub_onchange2: function sub_onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      var subClassAttr = this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr;\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                subClassAttr[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in subClassAttr) {\n          for (var j in subClassAttr[i].Attr) {\n            for (var d in subClassAttr[i].Attr[j].dictitem) {\n              if (item[v].Name == subClassAttr[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = subClassAttr[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/3037.vue:1995\");\n        if (itemvalue.Name != data_attr.Value) {\n          subClassAttr[index].Attr[iindex].Value = value;\n          // console.log(subClassAttr[index].Attr[iindex].Value);\n          var eventid = subClassAttr[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = subClassAttr;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        return;\n      }\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        // var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        //子数据类扫码区事件脚本\n        var eventid = this.$data.param.Scan_Code.Input_Change_Event.ID;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList; //主数据类属性\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                value: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                value: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                value: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"7\",\n            //\"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: 'MBOX',\n            //this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req,\n            mast_attr: [],\n            inputParamter: [{\n              attr: 'mast_input_3037',\n              value: e.target.value\n            }]\n          };\n          this.scan_DataObjRunCustomEvent(info, \"\");\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      if (!data_attr) {\n        this.$data.subPanelList[e.target.dataset['iiindex']].subClassAttr[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        return;\n      }\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/3037.vue:2142\");\n      this.$data.subClassAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/3037.vue:2168\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/3037.vue:2197\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else if (this.$data.param.After_OK_Event)\n        //判断功能点参数是否有确定后脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);else uni.navigateBack({\n        delta: 1\n      }); //返回层数,2则上上页\n    },\n    add: function add() {\n      var _this6 = this;\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n\n      // var dataInfo={\n      //     class_id: this.$data.param.Master_Cls.ID, data_obj_id: '', masterclsid: '',\n      //     req: JSON.stringify(req), upfile: JSON.stringify([]), post_data: JSON.stringify({}),\n      //     compose: JSON.stringify([]), refdatastore: JSON.stringify([]), extinfo: JSON.stringify(enviroment), \n      // \tnot_trigger_sys_event: ''\n      // };\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.name] = item.value;\n      });\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        class_name: '',\n        master_cls_id: '',\n        master_obj_id: '',\n        creator: '',\n        creator_name: '',\n        not_trigger_event: '',\n        update_exist: '',\n        post_process: '',\n        ext_info: enviroment,\n        obj_attr: obj_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2322\");\n      // return\n      this.$store.dispatch('createDataObj', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2325\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var result = success.result;\n          if (success.result.action) {\n            var action = JSON.parse(success.result.Action);\n            if (action.ret == '0') {\n              if (action.result_type == '0') {\n                uni.showToast({\n                  title: action.result,\n                  icon: \"success\",\n                  duration: 3000\n                });\n              }\n              // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n            }\n          } else uni.showToast({\n            title: \"创建成功!\",\n            icon: \"success\",\n            duration: 3000\n          });\n          //刷新\n          uni.redirectTo({\n            url: '../modal/3037?param=' + JSON.stringify(_this6.$data.param) + \"&titlename=\" + _this6.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/3037.vue:2348\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this7 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n\n      // var dataInfo = {\n      //                 edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //                 rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //                 attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //             }\n      param.enviroment = _base.default.encode(JSON.stringify(param.enviroment)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param.enviroment,\n        global_attr: global_attr,\n        input_param: inputparameter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2402\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2405\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip) uni.showModal({\n              title: '提示',\n              content: _tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data.action) {\n              var actionlist = data.action;\n              if (actionlist) {\n                for (var j = 0; j < actionlist.length; j++) {\n                  var action = actionlist[j];\n                  var action_type = action.action_type;\n                  var value = action.value;\n                  if (action_type == 'set_dlg_attr') {\n                    if (value) {\n                      var val = value;\n                      if (typeof value == 'string') {\n                        val = JSON.parse(value);\n                      }\n                      __f__(\"log\", val, \" at pages/modal/3037.vue:2430\");\n                      for (var i = 0; i < val.length; i++) {\n                        for (var a = 0; a < _this7.$data.classAttrList.length; a++) {\n                          for (var l = 0; l < _this7.$data.classAttrList[a].Attr.length; l++) {\n                            var ca = _this7.$data.classAttrList[a].Attr[l];\n                            if (val[i].attr == ca.Name) {\n                              if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in val[i].choice_list) {\n                                  var val = val[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                ca.dictitem = dictItemList;\n                                // attr[j].dictitem = val[i].choice_list;\n                              } else {\n                                // ca.value = val[i].value;\n                              }\n                            }\n                          }\n                        }\n                        var length = 0;\n                        if (!_this7.$data.refdatastore.filter(function (s) {\n                          return val[i].attr == s.attr;\n                        }).length) {\n                          length = 1;\n                          _this7.$data.refdatastore.push(val[i]);\n                        }\n                        if (length == 0) {\n                          for (var j = 0; j < _this7.$data.refdatastore.length; j++) {\n                            if (_this7.$data.refdatastore[j].attr == val[i].attr) {\n                              _this7.$data.refdatastore[j].value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (action_type == 'open_select_userdlg') {\n                    uni.showModal({\n                      title: \"错误2.2\",\n                      content: \"open_select_userdlg这个action_type还未处理!\",\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid.replace('{','').replace('}',''),\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), inputparameter: '', global_attr: JSON.stringify(this.$data.global_attr)\n      //    }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (info.dataJson) info.dataJson = _base.default.encode(JSON.stringify(info.dataJson)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: info.dataJson,\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2544\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2547\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip2 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip2) uni.showModal({\n              title: '提示',\n              content: _tip2,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037.vue:2561\");\n              for (var i = 0; i < actionlist.length; i++) {\n                var action = actionlist[i];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                        var attr = $this.$data.classAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:2588\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (data.action[i].action_type == 'set_global_attr') {\n                  $this.$data.global_attr = data.action[i].value || [];\n                }\n              }\n            }\n            if (data.result) {\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                  var attr = $this.$data.classAttrList[c].Attr;\n                  for (var j = 0; j < attr.length; j++) {\n                    if (attr[j].Name == result[i].attr) {\n                      attr[j].Value = result[i].value;\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this8 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      //  \tvar dataInfo = {\n      //          edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,rclsid: info.rclsid, \n      // robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      // attr: JSON.stringify(info.attr), extinfo: JSON.stringify(enviroment), global_attr: JSON.stringify(this.$data.global_attr)\n      //      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2733\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2736\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip3 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip3) uni.showModal({\n              title: '提示',\n              content: _tip3,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n              var length = 0;\n              if (!_this8.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                _this8.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < _this8.$data.refdatastore.length; j++) {\n                  if (_this8.$data.refdatastore[j].attr == result[i].attr) {\n                    _this8.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n            _this8.add();\n          }\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this9 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n      // var dataInfo = {\n      // \tedtype:  \"0\", eventid: eventid, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // \tclsid: this.$data.param.Master_Cls.ID, objid: '',attr: JSON.stringify(req), \n      // \textinfo: JSON.stringify(extinfo), global_attr: JSON.stringify(this.$data.global_attr)\n      // }\n      extinfo = _base.default.encode(JSON.stringify(extinfo)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      var obj_attr = {};\n      req.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!eventid.includes('{')) eventid = '{' + eventid + '}';\n      var dataInfo = {\n        ed_type: \"0\",\n        start_transaction: '',\n        class_id: this.$data.param.clsid,\n        class_name: '',\n        event_id: eventid,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: obj_attr,\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: '',\n        compose_info: '',\n        ext_info: extinfo,\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:2861\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:2864\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip4 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip4) uni.showModal({\n              title: '提示',\n              content: _tip4,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            if (data != \"\") {\n              var actions = data.action;\n              __f__(\"log\", actions, \" at pages/modal/3037.vue:2878\");\n              if (actions) {\n                for (var i = 0; i < actions.length; i++) {\n                  var action = actions[i];\n                  var val = action.value;\n                  var enviroment = JSON.stringify(enviroment);\n                  if (action.action_type == 'open_panel') {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_select_userdlg') {\n                    var style = val.style;\n                    // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                    var $this = _this9;\n                    var param = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req,\n                      data_attr: data_attr\n                    };\n                    uni.navigateTo({\n                      url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          // console.log(param);\n                          __f__(\"log\", data, \" at pages/modal/3037.vue:2908\");\n                          var callback_eventid = param.button_callback.trim();\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"0\",\n                            projectid: '',\n                            rclsid: '',\n                            robjid: '',\n                            userlogin: '',\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req,\n                            inputparameter: data\n                          };\n                          $this.DataObjRunCustomEvent(info, param.data_attr);\n                        }\n                      }\n                    });\n                  } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                    var value = action.value;\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  } else if (action.action_type == 'open_project_query_dlg') {\n                    //console.log(action.value.select_range);\n                    //console.log(action.value.mulit_select);\n                    var priRel = '-1';\n                    if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                    var $this = _this9;\n                    var param_ = {\n                      index: index,\n                      iindex: iindex,\n                      button_callback: button_callback,\n                      req: req\n                    };\n                    uni.navigateTo({\n                      url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                      events: {\n                        AddPer: function AddPer(data, param) {\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                          $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                          var callback_eventid = param.button_callback.trim();\n                          if (callback_eventid) {\n                            var info = {\n                              eventid: callback_eventid,\n                              edtype: \"2\",\n                              projectid: data[0].ID,\n                              rclsid: \"\",\n                              robjid: \"\",\n                              userlogin: \"\",\n                              clsid: $this.$data.param.Master_Cls.ID,\n                              objid: \"\",\n                              attr: param.req\n                            };\n                            $this.DataObjRunCustomEvent(info);\n                          }\n                        }\n                      }\n                    });\n                  } else {\n                    var d = dialog({\n                      title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                      content: action.action_type + '此action尚未处理!'\n                    });\n                    d.show();\n                  }\n                }\n              }\n            } else {\n              uni.showModal({\n                title: \"提示5.2\",\n                content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this10 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      // var dataInfo = {\n      //        edtype: info.edtype, eventid: info.eventid, projectid: info.projectid,\n      //        rclsid: info.rclsid, robjid: info.robjid, userlogin: info.userlogin, clsid: info.clsid, objid: info.objid,\n      //        attr: JSON.stringify(info.attr), extinfo: JSON.stringify(param), inputparameter: inputparameter, global_attr: global_attr\n      //    }\n      param = _base.default.encode(JSON.stringify(param)); //将字符串转换为base64编码\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid,\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: param,\n        global_attr: '',\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3056\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3059\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip5 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip5) uni.showModal({\n              title: '提示',\n              content: _tip5,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              for (var j = 0; j < actionlist.length; j++) {\n                var action = actionlist[j];\n                var action_type = action.action_type;\n                var value = action.value;\n                if (action_type == 'set_dlg_attr') {\n                  if (value) {\n                    var val = value;\n                    if (typeof value == 'string') {\n                      val = JSON.parse(value);\n                    }\n                    __f__(\"log\", val, \" at pages/modal/3037.vue:3083\");\n                    for (var i = 0; i < val.length; i++) {\n                      for (var a = 0; a < _this10.$data.subClassAttrList.length; a++) {\n                        for (var l = 0; l < _this10.$data.subClassAttrList[a].Attr.length; l++) {\n                          var ca = _this10.$data.subClassAttrList[a].Attr[l];\n                          if (val[i].attr == ca.Name) {\n                            if (ca.Type == '字典' || ca.Type == '字典-字符串' || ca.Type == '字典-整数') {\n                              var dictItemList = [];\n                              for (var d in val[i].choice_list) {\n                                var val = val[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              ca.dictitem = dictItemList;\n                              // attr[j].dictitem = val[i].choice_list;\n                            } else {\n                              // ca.value = val[i].value;\n                            }\n                          }\n                        }\n                      }\n                      var length = 0;\n                      if (!_this10.$data.refdatastore.filter(function (s) {\n                        return val[i].attr == s.attr;\n                      }).length) {\n                        length = 1;\n                        _this10.$data.refdatastore.push(val[i]);\n                      }\n                      if (length == 0) {\n                        for (var j = 0; j < _this10.$data.refdatastore.length; j++) {\n                          if (_this10.$data.refdatastore[j].attr == val[i].attr) {\n                            _this10.$data.refdatastore[j].value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n                if (action_type == 'open_select_userdlg') {\n                  uni.showModal({\n                    title: \"错误6.2\",\n                    content: \"open_select_userdlg这个action_type还未处理!\",\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this11 = this;\n      var $this = this;\n      var enviroment = {};\n      if (info.enviroment) {\n        enviroment = info.enviroment;\n      } else {\n        enviroment = {\n          'function': '3000',\n          // 功能点编号\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          edit_dlg: {\n            type: 'small',\n            //小窗口\n            class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n          }\n        };\n      }\n\n      var global_attr = this.$data.global_attr;\n      if (info.global_attr) {\n        global_attr = info.global_attr;\n      }\n      enviroment = _base.default.encode(JSON.stringify(enviroment)); //将字符串转换为base64编码\n      if (info.inputParamter) {\n        info.inputParamter = _base.default.encode(JSON.stringify(info.inputParamter)); //将字符串转换为base64编码\n      }\n\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n\n      var obj_attr = {};\n      info.attr.forEach(function (item) {\n        obj_attr[item.attr] = item.val;\n      });\n      if (!info.eventid.includes('{')) info.eventid = '{' + info.eventid + '}';\n      var dataInfo = {\n        ed_type: info.edtype,\n        start_transaction: '',\n        class_id: info.clsid,\n        class_name: '',\n        event_id: info.eventid,\n        event_name: '',\n        data_obj_id: info.objid,\n        obj_attr: obj_attr,\n        prj_id: info.projectid.replace('{', '').replace('}', ''),\n        ref_cls_id: info.rclsid,\n        rel_obj_id: info.robjid,\n        user_login: info.userlogin,\n        data_json: '',\n        compose_info: '',\n        ext_info: enviroment,\n        global_attr: global_attr,\n        input_param: info.inputParamter\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3189\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3192\");\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip6 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip6) uni.showModal({\n              title: '提示',\n              content: _tip6,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var actionlist = data.action;\n            if (actionlist) {\n              __f__(\"log\", actionlist, \" at pages/modal/3037.vue:3206\");\n              for (var ii = 0; ii < actionlist.length; ii++) {\n                var action = actionlist[ii];\n                if (action.action_type == 'set_dlg_attr') {\n                  var result = action.value;\n                  for (var i = 0; i < result.length; i++) {\n                    if (result[i].choice_list) {\n                      for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                        for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                          var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            if (attr[j].Name == result[i].attr) {\n                              if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串' || attr[j].Type == '字典-整数') {\n                                var dictItemList = [];\n                                for (var d in result[i].choice_list) {\n                                  var val = result[i].choice_list[d];\n                                  dictItemList.push({\n                                    \"CN_S_NAME\": val,\n                                    \"Name\": val,\n                                    \"label\": val,\n                                    \"value\": val\n                                  });\n                                }\n                                attr[j].dictitem = dictItemList;\n                                // attr[j].dictitem = result[i].choice_list;\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/3037.vue:3236\");\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                } else if (action.action_type == 'set_global_attr') {\n                  $this.$actiontr = action.value || [];\n                } else if (action.action_type == 'open_common_dlg') {\n                  //打开侧滑弹框\n                  var $this = _this11;\n                  if (action.value.common_dlg_id == 'check_list') {\n                    $this.$data.check_list = action.value.config;\n                    if (action.value.config.appear_style == 'sideslip')\n                      //判断是否是侧滑\n                      $this.$data.popupType = 'right';else $this.$data.popupType = 'center';\n                    // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性\n                    $this.$refs.popup.open($this.$data.popupType);\n                  }\n                } else if (action.action_type == 'add_subcls_panel') {\n                  //主从数据类扫码查询数据\n                  var result = action.value;\n                  var $this = _this11;\n                  var list_1 = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n                  var scanCodeVal = $this.$data.scanCodeVal;\n                  var rand = '';\n                  for (var i = 0; i < 5; i++) {\n                    //生成5位随机数\n                    rand += Math.floor(Math.random() * 10);\n                  }\n                  if (info.inputParamter[0].attr) {\n                    if (info.inputParamter[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  if (info.attr[0].attr) {\n                    if (info.attr[0].attr == \"mast_input_3037\")\n                      //判断是主数据类扫码查询数据\n                      scanCodeVal = \"mast_input_3037-\" + rand;\n                  }\n                  $this.$data.subPanelList.push({\n                    scanCodeVal: scanCodeVal,\n                    subClassAttr: list_1\n                  });\n                  for (var i = 0; i < result.length; i++) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                        if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                        var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                        for (var c = 0; c < _subClassAttr.length; c++) {\n                          var attr = _subClassAttr[c].Attr;\n                          for (var j = 0; j < attr.length; j++) {\n                            // console.log(attr[j].Name+'=='+result[i].attr);\n                            if (attr[j].Name == result[i].attr) {\n                              attr[j].Value = result[i].value;\n                            }\n                          }\n                        }\n\n                        // $this.$data.subPanelList[s].subClassAttr=list_1;\n                      }\n                    }\n\n                    var length = 0;\n                    if (!$this.$data.refdatastore.filter(function (s) {\n                      return result[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      $this.$data.refdatastore.push(result[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                        if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                          $this.$data.refdatastore[j].value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n            if (data.result) {\n              var _list_ = JSON.parse(JSON.stringify(_this11.$data.subClassAttrList));\n              var scanCodeVal = $this.$data.scanCodeVal;\n              if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n              $this.$data.subPanelList.push({\n                scanCodeVal: scanCodeVal,\n                subClassAttr: _list_\n              });\n              var result = data.result;\n              for (var i = 0; i < result.length; i++) {\n                for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                  if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                    if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                    var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                    for (var c = 0; c < _subClassAttr.length; c++) {\n                      var attr = _subClassAttr[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        // console.log(attr[j].Name+'=='+result[i].attr);\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n                var length = 0;\n                if (!$this.$data.refdatastore.filter(function (s) {\n                  return result[i].attr == s.attr;\n                }).length) {\n                  length = 1;\n                  $this.$data.refdatastore.push(result[i]);\n                }\n                if (length == 0) {\n                  for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                    if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                      $this.$data.refdatastore[j].value = result[i].value;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\",\n        mask: true\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if (ar.notempty == true && !ar.Value) {\n            // if(ar.NotEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串' || ar.Type == '字典-整数') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if (ar.notempty == true && !ar.Value) {\n              // if(ar.NotEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      // console.log(JSON.stringify(dataJson));\n      //  \tvar dataInfo = {\n      //          edtype: \"7\", eventid: eventID, projectid: '',rclsid: '', robjid: '', userlogin: '', \n      // clsid: 'MBOX', objid: '',attr: JSON.stringify([]), extinfo: JSON.stringify([]), \n      // global_attr: JSON.stringify($this.$data.global_attr),dataJson:JSON.stringify(dataJson)\n      //      }\n      // console.log(JSON.stringify(dataInfo));\n      var dataJson = _base.default.encode(JSON.stringify(dataJson)); //将字符串转换为base64编码\n      var global_attr = _base.default.encode(JSON.stringify(this.$data.global_attr)); //将字符串转换为base64编码\n      if (!eventID.includes('{')) eventID = '{' + eventID + '}';\n      var dataInfo = {\n        ed_type: \"7\",\n        start_transaction: '',\n        class_id: 'MBOX',\n        class_name: '',\n        event_id: eventID,\n        event_name: '',\n        data_obj_id: '',\n        obj_attr: '',\n        prj_id: '',\n        ref_cls_id: '',\n        rel_obj_id: '',\n        user_login: '',\n        data_json: dataJson,\n        compose_info: '',\n        ext_info: '',\n        global_attr: global_attr,\n        input_param: ''\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/3037.vue:3511\");\n      // return;\n      this.$store.dispatch('runCustomEvent', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/3037.vue:3514\");\n        uni.hideLoading();\n        if (success.err_code == 0) {\n          var data = success.result;\n          if (data.ret != 0) {\n            var tip = data.err_info ? typeof data.err_info == 'string' ? data.err_info : data.err_info.join('<br/>') : '';\n            if (data.ret == 801) uni.showModal({\n              title: '提示',\n              content: tip,\n              showCancel: false,\n              confirmText: \"取消\"\n            });else uni.showModal({\n              title: '提示',\n              content: tip + ',提示:' + data.ret,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return false;\n          } else {\n            var _tip7 = data.info ? typeof data.info == 'string' ? data.info : data.info.join('<br/>') : '';\n            if (_tip7) uni.showModal({\n              title: '提示',\n              content: _tip7,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            var result = data.result;\n            if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n              //刷新\n              uni.redirectTo({\n                url: '../modal/3037?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n              });\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.err_msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  }\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvMzAzNy52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImNvbXBvbmVudHMiLCJwaWNrZXJBZGRyZXNzIiwiZGF0YSIsInRpdGxlIiwicGFyYW0iLCJjbGFzc0F0dHJMaXN0IiwiY2xhc3NHcmlkU3R5bGUiLCJlZGl0X2luaXRhbF9ldmVudCIsImVkaXRfb2tfZXZlbnQiLCJlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50IiwiZWRpdF9jb21wb3NlX2Nsc19pZCIsImdsb2JhbF9hdHRyIiwicmVmZGF0YXN0b3JlIiwic2NhbkNvZGVWYWwiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViUGFuZWxMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGUiLCJwb3B1cFR5cGUiLCJjaGVja19saXN0Iiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIkpTT04iLCJwYXJzZSIsIiRkYXRhIiwiQWRkX0J0bk5hbWUiLCJNYXN0ZXJfQ2xzIiwiVmlld19TdHlsZSIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJOYW1lIiwiZGF0YUluZm8iLCJjbGFzc19pZCIsIklEIiwiJHRoaXMiLCIkc3RvcmUiLCJzdGF0ZSIsInRoaXNhcmVhRnVuY0lEIiwiZ2V0dGVycyIsImdldGNsYXNzQXR0ckxpc3QiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkaXNwYXRjaCIsInRoZW4iLCJzdWNjZXNzIiwiZXJyX2NvZGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZ3JvdXAiLCJpbmRleCIsImF0dHJfbGlzdCIsImF0dHIiLCJrZXkiLCJ0eXBlIiwiRGljdEl0ZW1HZXRMaXN0Iiwic2V0VGltZW91dCIsImVycl9tc2ciLCJjYXRjaCIsImV4IiwiZXJyTXNnIiwic3ViZGF0YUluZm8iLCJTdWJfQ2xzIiwidGhpc2FyZWFGdW5jU3ViSUQiLCJnZXRTdWJDbGFzc0F0dHJMaXN0IiwibWV0aG9kcyIsImRpY3RfaWQiLCJkaWN0X25hbWUiLCJkaWN0aXRlbSIsImNvbW1pdCIsImNsc2lkIiwic3R5bGVOYW1lIiwiY2xzVHlwZSIsImdyaWRzdHlsZUluZm8iLCJ1aV9zdHlsZV90eXBlIiwidWlfc3R5bGVfbmFtZSIsInRoaXNFZGl0TmFtZSIsImdldGNsYXNzR3JpZFN0eWxlSW5mbyIsInZpZXdQYXJhbSIsInN0eWxlZGVmIiwiZGVjb2RlIiwic3R5bGVfZGVmIiwidGhpc0VkaXRTdWJOYW1lIiwiZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvIiwiY2xhc3NfZ3JpZFN0eWxlIiwiaWQiLCJuYW1lIiwiVHlwZSIsIklzRGVmYXVsdCIsImlzX2RlZmF1bCIsIlN0eWxlRGVmIiwiY2xhc3NfYXR0ckxpc3QiLCJhdHRycyIsImRpY3RpdGVtcyIsImRpY3QiLCJwdXNoIiwiTm90ZSIsIm5vdGUiLCJPcmRlciIsIm9yZGVyIiwiSW1nVXJsIiwiQ29kZSIsImNvZGUiLCJIYXNTdWIiLCJQYXJlbnRJRCIsIlBhcmVudE5hbWUiLCJMdmwiLCJsdmwiLCJpc19kZWZhdWx0IiwiVmFsdWUiLCJ2YWx1ZSIsIkNOX0dfSUQiLCJDTl9HX0RJQ1RfSUQiLCJDTl9TX05BTUUiLCJDTl9TX05PVEUiLCJDTl9OX09SREVSIiwiQ05fU19JTUdfVVJMIiwiQ05fU19DT0RFIiwiQ05fQ19IQVNfU1VCIiwiQ05fR19QQVJFTlRfSVRFTV9JRCIsIkNOX0dfUEFSRU5UX0lURU1fTkFNRSIsIkNOX05fTFZMIiwiQ05fQ19JU19ERUZBVUxUIiwiQ05fU19WQUxVRSIsIlNpemUiLCJzaXplIiwiTm90RW1wdHkiLCJub3RfZW1wdHkiLCJEZWZWYWx1ZSIsImRlZl92YWx1ZSIsIkRpY3ROYW1lIiwiRGljdElEIiwiQ29kZURlZk5hbWUiLCJjb2RlX2RlZl9uYW1lIiwiQ29kZURlZklEIiwiY29kZV9kZWZfaWQiLCJSZWxDbHNJRCIsIlJlbENscyIsInJlZl9jbHMiLCJXaWR0aCIsIndpZHRoIiwiSGVpZ2h0IiwiaGVpZ2h0IiwiQ3RybFN0eWxlIiwiY3RybF9zdHlsZSIsIkhhc0FjZSIsImhhc19hY2UiLCJDYW5TaG93IiwiY2FuX3Nob3ciLCJDYW5RdWVyeSIsImNhbl9xdWVyeSIsIlJlYWRPbmx5IiwicmVhZF9vbmx5IiwiSXNLZXkiLCJpc19rZXkiLCJJc0ZpeGVkIiwiaXNfZml4ZWQiLCJEaXNwTmFtZSIsImRpc3BfbmFtZSIsIkx1YUF0dHIiLCJsdWFfYXR0ciIsIkRlc2MiLCJkZXNjIiwiQWN0aW9uRGVmIiwiYWN0aW9uX2RlZiIsIk11bHRpbGluZ3VhbCIsIm11bHRpbGluZ3VhbCIsIlJlZkNvbmRpdGlvbiIsInJlZl9jb25kaXRpb24iLCJHcm91cE5hbWUiLCJCa0NvbG9yIiwiYmtfY29sb3IiLCJJbWdGb250U3R5bGUiLCJpbWdfZm9udF9zdHlsZSIsIkF0dHIiLCJjbGFzc19hdHRyX2luaXQiLCJzdWJDbGFzc19hdHRyX2luaXQiLCJhdHRybGlzdCIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImxlbmd0aCIsImkiLCJvcGVuIiwiYXR0cmdyb3VwX25hbWUiLCJzIiwiY2xzYXR0ciIsImoiLCJsIiwiY2EiLCJhY3Rpb24iLCJlZGl0Iiwibm90ZW1wdHkiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiYmVmb3JlX2NsaWNrX2J1dHRvbiIsImJ1dHRvbl9jYWxsYmFjayIsImhpZGRlbiIsInNlbGVjdCIsInVuZGVmaW5lZCIsImRpY3RpdGVtbGlzdCIsImQiLCJsYWJlbCIsIm5vd0RhdGUiLCJEYXRlIiwiZGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsIm1vbnRoIiwiZ2V0TW9udGgiLCJkYXkiLCJnZXREYXRlIiwiUmVsQ2xzTGlzdCIsIk9wZW4iLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsIkZvbnQiLCJCa19Db2xvciIsIlRleHRfQ29sb3IiLCJyZXEiLCJhciIsImV2ZW50bGlzdCIsImV2ZW50IiwiZXZlbnRfaWQiLCJzY3JpcF9pZCIsImNvbXBvc2VfY2xzX2lkIiwiZXZlbnRpZCIsImluZm8iLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJvYmppZCIsImluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24iLCJlIiwiQmVmb3JlX1NlbGVjdF9FdmVudCIsIlNjYW5fQ29kZSIsIm1hc3RfYXR0ciIsIlZhbElEIiwib2JqZWN0cyIsInN1Yl9yZXEiLCJzdWJDbGFzc0F0dHIiLCJ2YWxTdHIiLCJ2IiwiaGlkZUxvYWRpbmciLCJvYmpfaWQiLCJvYmpfYXR0cnMiLCJlbnZpcm9tZW50IiwiY2xzX2lkIiwiYnV0dG9uX25hbWUiLCJlZGl0X2RsZyIsIm1hc3Rlcl9jbHMiLCJjbHNfbmFtZSIsInN1Yl9jbHMiLCJpbnB1dFBhcmFtdGVyIiwic2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJwb3B1cENoYW5nZSIsInNob3ciLCJjaGVja0NoYW5nZSIsInRhcmdldCIsImRhdGFzZXQiLCJpc2NoZWNrIiwiaXRlbXMiLCJtdWx0aXBsZV9jaG9pY2UiLCJjaGVjayIsInBvcHVwX2NhbmNlbCIsIiRyZWZzIiwicG9wdXAiLCJjbG9zZSIsInBvcHVwX3NhdmEiLCJBZnRlcl9TZWxlY3RfRXZlbnQiLCJjYW5jZWwiLCJuYXZpZ2F0ZUJhY2siLCJkZWx0YSIsInBhbmVsX2RlbCIsIk9iaklEIiwic3BsaWNlIiwiY2xhc3NfbmFtZSIsInNob3dMb2FkaW5nIiwicmV0IiwibXNnIiwib250YXAiLCJnZXRBcHAiLCJvblNjYW4iLCJpc1ZhbCIsImRlY29kZWRhdGEiLCJoaWRlS2V5Ym9hcmQiLCJJbnB1dF9DaGFuZ2VfRXZlbnQiLCJzdWJvbnRhcCIsInNjYW5fb250YXAiLCJpc2ZsYWciLCJtYXN0X3JlcSIsImNsYXNzYXR0cmxpc3QiLCJzY2FuX29uZXZlbnQiLCJvbmFycm93IiwiZGF0YV9hdHRyIiwib25kYXRlVGltZSIsIm9uY2hhbmdlIiwidmFsIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiaWluZGV4IiwiZGluZGV4IiwiaXRlbXZhbHVlIiwic3ViX29uY2hhbmdlIiwic3ViX29uY2hhbmdlMiIsIm9uZXZlbnQiLCJvbmNoZWNrIiwiaXNjaGVja2VkIiwiaW5wdXRWYWxMaXN0SXNEZWwiLCJpbnB1dFZhbExpc3QiLCJhZGRyZXNzY2hhbmdlIiwiam9pbiIsImNsYXNzQXR0cl9leHRCdXR0b24iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuIiwiY2xhc3NBdHRyX0FkZFBlciIsIm5hdmlnYXRlVG8iLCJ1cmwiLCJzdHJpbmdpZnkiLCJldmVudHMiLCJBZGRQZXIiLCJMb2dpbiIsInRyaW0iLCJjbGFzc0F0dHJfQWRkUmVmIiwiY2xhc3NBdHRyX0FkZFByaiIsInNhdmEiLCJCZWZvcmVfT0tfRXZlbnQiLCJzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50IiwiQWZ0ZXJfT0tfRXZlbnQiLCJhZGQiLCJtYXNrIiwibWFzdGVyIiwiZW5jb2RlIiwib2JqX2F0dHIiLCJtYXN0ZXJfY2xzX2lkIiwibWFzdGVyX29ial9pZCIsImNyZWF0b3IiLCJjcmVhdG9yX25hbWUiLCJub3RfdHJpZ2dlcl9ldmVudCIsInVwZGF0ZV9leGlzdCIsInBvc3RfcHJvY2VzcyIsImV4dF9pbmZvIiwiQWN0aW9uIiwicmVzdWx0X3R5cGUiLCJzaG93VG9hc3QiLCJpY29uIiwiZHVyYXRpb24iLCJyZWRpcmVjdFRvIiwiRWRpdFN0eWxlIiwiVmlld1N0eWxlIiwiTm90VHJpZ2dlclN5c0V2ZW50IiwiaW5wdXRwYXJhbWV0ZXIiLCJpbmNsdWRlcyIsImVkX3R5cGUiLCJzdGFydF90cmFuc2FjdGlvbiIsImV2ZW50X25hbWUiLCJkYXRhX29ial9pZCIsInByal9pZCIsInJlZl9jbHNfaWQiLCJyZWxfb2JqX2lkIiwidXNlcl9sb2dpbiIsImRhdGFfanNvbiIsImNvbXBvc2VfaW5mbyIsImlucHV0X3BhcmFtIiwidGlwIiwiZXJyX2luZm8iLCJhY3Rpb25saXN0IiwiYWN0aW9uX3R5cGUiLCJhIiwiZGljdEl0ZW1MaXN0IiwiY2hvaWNlX2xpc3QiLCJmaWx0ZXIiLCJmb3JtX2NvbnRyb2wiLCJ0ZXh0IiwiZ3JvdXBfbmFtZSIsInJlYWRvbmx5IiwiZGF0YUpzb24iLCJjIiwiT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJleHRpbmZvIiwiYWN0aW9ucyIsImRpYWxvZyIsInN0eWxlIiwiY2FsbGJhY2tfZXZlbnRpZCIsInByaVJlbCIsInNlbGVjdF9yYW5nZSIsInBhcmFtXyIsInJlcGxhY2UiLCJpaSIsIiRhY3Rpb250ciIsImNvbW1vbl9kbGdfaWQiLCJjb25maWciLCJhcHBlYXJfc3R5bGUiLCJsaXN0XzEiLCJyYW5kIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiX3N1YkNsYXNzQXR0ciIsImV2ZW50SUQiLCJpbnB1dF8zMDM3Iiwib3BfdHlwZSIsIk9wZXJhdGlvblR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQTZyQkM7QUFDQTtBQTlyQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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S0FBSyxDQUFDdEIsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDa0MsS0FBSyxDQUFDWixLQUFLLENBQUN2QjtjQUN4RixDQUFDLENBQUM7WUFDSDtVQUNEO1FBQ0UsQ0FBQyxNQUFJO1VBQ0prQixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDM0IsS0FBSyxFQUFDLEtBQUs7WUFBQzRCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ1ksT0FBTztZQUFDM0IsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ3ZGO01BQ0QsQ0FBQyxDQUFDLENBQUMyQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDSHhDLEdBQUcsQ0FBQ29PLFdBQVcsRUFBRTtRQUNkcE8sR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQzNCLEtBQUssRUFBQyxPQUFPO1VBQUM0QixPQUFPLEVBQUM4QixFQUFFLENBQUNDLE1BQU07VUFBQzlCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSDtFQUdKO0FBQ0QsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblx0aW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXG5cdGltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXG5cdGV4cG9ydCBkZWZhdWx0IHtcblx0XHRtb2R1bGVzOntcblx0XHRcdEJhc2U2NCxcblx0XHR9LFxuXHRcdGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIHBpY2tlckFkZHJlc3NcbiAgICAgICAgfSxcblx0XHRkYXRhKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6ICfmlrDlop4nLFxuXHRcdFx0XHRwYXJhbTp7fSxcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU6W10sXG5cdFx0XHRcdGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXG5cdFx0XHRcdGVkaXRfb2tfZXZlbnQ6XCJcIiwgICAgICAvL+W8ueeql+eCueWHu09LIOinpuWPkeS6i+S7tklEXG5cdFx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXG5cdFx0XHRcdGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcblx0XHRcdFx0Z2xvYmFsX2F0dHI6W10sXG5cdFx0XHRcdHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cblx0XHRcdFx0c2NhbkNvZGVWYWw6XCJcIixcblx0XHRcdFx0c3ViQ2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0c3ViUGFuZWxMaXN0OltdLFxuXHRcdFx0XHRzdWJDbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdFx0cG9wdXBUeXBlOlwiY2VudGVyXCIsXG5cdFx0XHRcdGNoZWNrX2xpc3Q6e30sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkxvYWQob3B0aW9ucykge1xuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XG5cdFx0XHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxuXHRcdFx0dmFyIHBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZT9wYXJhbS5BZGRfQnRuTmFtZTpvcHRpb25zLnRpdGxlbmFtZTsgLy/orr7nva7mjInpkq7mloflrZdcblx0XHRcdGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdGlmKCFwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nlYzpnaLnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lKXtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6K+l5Yqf6IO954K55pyq6YWN572u56qX5Y+j5qC35byP77yM6K+36YeN5paw6YWN572u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuJGRhdGEucGFyYW0gPSBwYXJhbTtcblx0XHRcdC8vIHZhciBlZGl0X2RsZyA9IHtcblx0XHRcdC8vICAgICBNb2RlbDogcGFyYW0uRWRpdERsZ01vZGUsXG5cdFx0XHQvLyAgICAgTmFtZTogcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWVcblx0XHRcdC8vIH1cblx0XHRcdC8v5Li75pWw5o2u57G76I635Y+WXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5NYXN0ZXJfQ2xzLklEXG5cdFx0XHR9O1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLk1hc3Rlcl9DbHMuSUQ7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0KTtcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjbGFzc0F0dHJHZXRMaXN0JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIudHlwZSA9PSBcIuWtl+WFuC3lrZfnrKbkuLJcIiB8fCBhdHRyLnR5cGUgPT0gXCLlrZflhbgt5pW05pWwXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LCdtYXN0Jyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1x0XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XG5cdFx0XHRcdFx0XHR9LDUwMCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHQvL+S7juaVsOaNruexu+iOt+WPllxuXHRcdFx0dmFyIHN1YmRhdGFJbmZvID0ge1xuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uU3ViX0Nscy5JRFxuXHRcdFx0fTtcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCA9IHBhcmFtLlN1Yl9DbHMuSUQ7XG5cdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0KXtcblx0XHRcdCBcdCR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0F0dHJHZXRMaXN0JyxzdWJkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZm9yRWFjaChhc3luYyAoZ3JvdXAsaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Z3JvdXAuYXR0cl9saXN0LmZvckVhY2goYXN5bmMgKGF0dHIsa2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIudHlwZSA9PSBcIuWtl+WFuC3lrZfnrKbkuLJcIiB8fCBhdHRyLnR5cGUgPT0gXCLlrZflhbgt5pW05pWwXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgJHRoaXMuRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LCdzdWInKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5TdWJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLCdTdWInKTtcblx0XHRcdFx0XHRcdH0sNTAwKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMV8xXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFfMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bWV0aG9kczoge1xuXHRcdFx0YXN5bmMgRGljdEl0ZW1HZXRMaXN0KGF0dHIsa2V5LGluZGV4LHR5cGUpeyAvL01vYm94M+W+l+WIsOWtl+WFuOmhueWIl+ihqFxuXHRcdFx0XHR0aGlzLmRhdGE9W107XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9e1xuXHRcdFx0XHRcdGRpY3RfaWQ6IGF0dHIuZGljdF9pZCxcblx0XHRcdFx0XHRkaWN0X25hbWU6IGF0dHIuZGljdF9uYW1lXG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RJdGVtR2V0TGlzdCcsZGF0YUluZm8pLnRoZW4oYXN5bmMgKHN1Y2Nlc3MpPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0aWYodHlwZT09J21hc3QnKXtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzQXR0ckxpc3RcIiwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtpbmRleF0uYXR0cl9saXN0W2tleV0uZGljdGl0ZW09c3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIiwgJHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRhc3luYyBjbGFzc0dyaWRTdHlsZUluZm8oY2xzaWQsc3R5bGVOYW1lLGNsc1R5cGUpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgZ3JpZHN0eWxlSW5mbyA9IHtcblx0XHRcdFx0XHRjbGFzc19pZDogY2xzaWQsXG5cdFx0XHRcdFx0dWlfc3R5bGVfdHlwZTogMixcblx0XHRcdFx0XHR1aV9zdHlsZV9uYW1lOiBzdHlsZU5hbWVcblx0XHRcdFx0fTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKTtcblx0XHRcdFx0Ly/ojrflj5bkuLvmlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0aWYoY2xzVHlwZT09J01hc3QnKXtcblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXROYW1lID0gc3R5bGVOYW1lO1xuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyl7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbztcblx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnTWFzdCcpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhncmlkc3R5bGVJbmZvKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGdyaWRzdHlsZUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUoc3VjY2Vzcy5yZXN1bHQuc3R5bGVfZGVmKTtcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5zdHlsZV9kZWYgPSBKU09OLnBhcnNlKHN0eWxlZGVmKTtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3UGFyYW0oJ01hc3QnKTtcblx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYoY2xzVHlwZT09J1N1YicpeyAgLy/ojrflj5bku47mlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc0VkaXRTdWJOYW1lID0gc3R5bGVOYW1lO1xuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyl7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbztcblx0XHRcdFx0XHRcdCR0aGlzLnZpZXdQYXJhbSgnU3ViJyk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGdyaWRzdHlsZUluZm8pO1xuXHRcdFx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShzdWNjZXNzLnJlc3VsdC5zdHlsZV9kZWYpO1xuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3MucmVzdWx0LnN0eWxlX2RlZiA9IEpTT04ucGFyc2Uoc3R5bGVkZWYpO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld1BhcmFtKCdTdWInKTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dmlld1BhcmFtKHR5cGUpeyAvL+Wwhm1vYm94M+Wwj+WGmeWPguaVsOi9rOaNouS4um1vYm94MuWkp+WGmeWPguaVsFxuXHRcdFx0XHR2YXIgY2xhc3NHcmlkU3R5bGU9Jyc7XG5cdFx0XHRcdHZhciBjbGFzc0F0dHJMaXN0PScnO1xuXHRcdFx0XHRpZih0eXBlPT0nTWFzdCcpe1xuXHRcdFx0XHRcdGNsYXNzR3JpZFN0eWxlPXRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGU7XG5cdFx0XHRcdFx0Y2xhc3NBdHRyTGlzdD10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdH1lbHNlIGlmKHR5cGU9PSdTdWInKXsgXG5cdFx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU9dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZTtcblx0XHRcdFx0XHRjbGFzc0F0dHJMaXN0PXRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgY2xhc3NfZ3JpZFN0eWxlID17XG5cdFx0XHRcdFx0SUQ6IGNsYXNzR3JpZFN0eWxlLmlkLFxuXHRcdFx0XHRcdE5hbWU6IGNsYXNzR3JpZFN0eWxlLm5hbWUsXG5cdFx0XHRcdFx0VHlwZTogY2xhc3NHcmlkU3R5bGUudHlwZSxcblx0XHRcdFx0XHRJc0RlZmF1bHQ6Y2xhc3NHcmlkU3R5bGUuaXNfZGVmYXVsLFxuXHRcdFx0XHRcdFN0eWxlRGVmOmNsYXNzR3JpZFN0eWxlLnN0eWxlX2RlZixcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIGNsYXNzX2F0dHJMaXN0ID1bXTtcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xuXHRcdFx0XHRcdHZhciBhdHRycyA9W107XG5cdFx0XHRcdFx0aWYoZGF0YS5hdHRyX2xpc3Qpe1xuXHRcdFx0XHRcdCAgZGF0YS5hdHRyX2xpc3QuZm9yRWFjaChhdHRyID0+IHtcblx0XHRcdFx0XHRcdHZhciBkaWN0aXRlbXMgPVtdO1xuXHRcdFx0XHRcdFx0aWYoYXR0ci5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdGF0dHIuZGljdGl0ZW0uZm9yRWFjaChkaWN0ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRkaWN0aXRlbXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRJRDogZGljdC5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdE5hbWU6IGRpY3QubmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdE5vdGU6IGRpY3Qubm90ZSxcblx0XHRcdFx0XHRcdFx0XHRcdE9yZGVyOiBkaWN0Lm9yZGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0SW1nVXJsOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q29kZTogZGljdC5jb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0SGFzU3ViOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0UGFyZW50SUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRQYXJlbnROYW1lOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0THZsOiBkaWN0Lmx2bCxcblx0XHRcdFx0XHRcdFx0XHRcdElzRGVmYXVsdDogZGljdC5pc19kZWZhdWx0LFxuXHRcdFx0XHRcdFx0XHRcdFx0VmFsdWU6IGRpY3QudmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX0lEOiBkaWN0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fR19ESUNUX0lEOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0Q05fU19OQU1FOiBkaWN0Lm5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX05PVEU6IGRpY3Qubm90ZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX05fT1JERVI6IGRpY3Qub3JkZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX0lNR19VUkw6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9TX0NPREU6IGRpY3QuY29kZSxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0NfSEFTX1NVQjogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX0dfUEFSRU5UX0lURU1fSUQ6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9HX1BBUkVOVF9JVEVNX05BTUU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9OX0xWTDogZGljdC5sdmwsXG5cdFx0XHRcdFx0XHRcdFx0XHRDTl9DX0lTX0RFRkFVTFQ6IGRpY3QuaXNfZGVmYXVsdCxcblx0XHRcdFx0XHRcdFx0XHRcdENOX1NfVkFMVUU6IGRpY3QudmFsdWVcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhdHRycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0SUQ6IGF0dHIuaWQsXG5cdFx0XHRcdFx0XHRcdE5hbWU6IGF0dHIubmFtZSxcblx0XHRcdFx0XHRcdFx0VHlwZTogYXR0ci50eXBlLFxuXHRcdFx0XHRcdFx0XHRTaXplOiBhdHRyLnNpemUsXG5cdFx0XHRcdFx0XHRcdE5vdEVtcHR5OiBhdHRyLm5vdF9lbXB0eSxcblx0XHRcdFx0XHRcdFx0RGVmVmFsdWU6YXR0ci5kZWZfdmFsdWUsXG5cdFx0XHRcdFx0XHRcdE9yZGVyOiBhdHRyLm9yZGVyLFxuXHRcdFx0XHRcdFx0XHREaWN0TmFtZTogYXR0ci5kaWN0X25hbWUsXG5cdFx0XHRcdFx0XHRcdERpY3RJRDogYXR0ci5kaWN0X2lkLFxuXHRcdFx0XHRcdFx0XHRDb2RlRGVmTmFtZTogYXR0ci5jb2RlX2RlZl9uYW1lLFxuXHRcdFx0XHRcdFx0XHRDb2RlRGVmSUQ6IGF0dHIuY29kZV9kZWZfaWQsXG5cdFx0XHRcdFx0XHRcdFJlbENsc0lEOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRSZWxDbHM6IGF0dHIucmVmX2Nscyxcblx0XHRcdFx0XHRcdFx0V2lkdGg6IGF0dHIud2lkdGgsXG5cdFx0XHRcdFx0XHRcdEhlaWdodDogYXR0ci5oZWlnaHQsXG5cdFx0XHRcdFx0XHRcdEN0cmxTdHlsZTogYXR0ci5jdHJsX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRIYXNBY2U6IGF0dHIuaGFzX2FjZSxcblx0XHRcdFx0XHRcdFx0Q2FuU2hvdzogYXR0ci5jYW5fc2hvdyxcblx0XHRcdFx0XHRcdFx0Q2FuUXVlcnk6IGF0dHIuY2FuX3F1ZXJ5LFxuXHRcdFx0XHRcdFx0XHRSZWFkT25seTogYXR0ci5yZWFkX29ubHksXG5cdFx0XHRcdFx0XHRcdElzS2V5OiBhdHRyLmlzX2tleSxcblx0XHRcdFx0XHRcdFx0SXNGaXhlZDogYXR0ci5pc19maXhlZCxcblx0XHRcdFx0XHRcdFx0RGlzcE5hbWU6IGF0dHIuZGlzcF9uYW1lLFxuXHRcdFx0XHRcdFx0XHRMdWFBdHRyOiBhdHRyLmx1YV9hdHRyLFxuXHRcdFx0XHRcdFx0XHREZXNjOiBhdHRyLmRlc2MsXG5cdFx0XHRcdFx0XHRcdEFjdGlvbkRlZjogYXR0ci5hY3Rpb25fZGVmP0Jhc2U2NC5kZWNvZGUoYXR0ci5hY3Rpb25fZGVmKTonJyxcblx0XHRcdFx0XHRcdFx0TXVsdGlsaW5ndWFsOiBhdHRyLm11bHRpbGluZ3VhbCxcblx0XHRcdFx0XHRcdFx0UmVmQ29uZGl0aW9uOiBhdHRyLnJlZl9jb25kaXRpb24sXG5cdFx0XHRcdFx0XHRcdEdyb3VwTmFtZTogZGF0YS5ncm91cCxcblx0XHRcdFx0XHRcdFx0VmFsdWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGRpY3RpdGVtOiBkaWN0aXRlbXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdCAgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNsYXNzX2F0dHJMaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0TmFtZTogZGF0YS5ncm91cCxcblx0XHRcdFx0XHRcdE9yZGVyOiBkYXRhLm9yZGVyLFxuXHRcdFx0XHRcdFx0SGFzQWNlOiBkYXRhLmhhc19hY2UsXG5cdFx0XHRcdFx0XHRCa0NvbG9yOiBkYXRhLmJrX2NvbG9yLFxuXHRcdFx0XHRcdFx0SW1nRm9udFN0eWxlOiBkYXRhLmltZ19mb250X3N0eWxlLFxuXHRcdFx0XHRcdFx0QXR0cjogYXR0cnNcblx0XHRcdFx0XHR9KTsgXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRcblx0XHRcdFx0aWYodHlwZT09J01hc3QnKXtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gY2xhc3NfZ3JpZFN0eWxlO1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IGNsYXNzX2F0dHJMaXN0O1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCctLS0tLS1NYXN0LS0tLS0tLS0nKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdH1lbHNlIGlmKHR5cGU9PSdTdWInKXsgXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9IGNsYXNzX2dyaWRTdHlsZTtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBjbGFzc19hdHRyTGlzdDtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnLS0tLS0tU3ViLS0tLS0tLS0nKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdHRoaXMuc3ViQ2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbS5sZW5ndGg+MCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0uYXR0cj1jYS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSBjYS5SZWxDbHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRcdEZvbnQ6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250P3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udDp7fSxcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9KVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcblx0XHRcdFx0ICAgICAgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHQgICAgdGhpcy5pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c3ViQ2xhc3NfYXR0cl9pbml0KCl7XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgdmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xuXHRcdFx0XHQgICAgICAgIHZhciBuYW1lID0gYXR0cmxpc3RbaV0uYXR0cmdyb3VwX25hbWU7XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGNsc2F0dHIgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Rbc107XG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBbXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyc1tqXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Eubm90ZW1wdHkgPSBhdHRyc1tqXS5ub3RlbXB0eTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fdG9vbHRpcCA9IGF0dHJzW2pdLmJ1dHRvbl90b29sdGlwO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5oaWRkZW4gPSBhdHRyc1tqXS5oaWRkZW47XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW0ubGVuZ3RoPjApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGQgPSAwOyBkIDwgY2EuZGljdGl0ZW0ubGVuZ3RoOyBkKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS52YWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmF0dHI9Y2EuTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5pel5pyfJyB8fCBjYS5UeXBlPT0n5pe26Ze0Jyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZGF0ZS55ZWFyICsgJy0nICsgKGRhdGUubW9udGggPj0gMTAgPyBkYXRlLm1vbnRoIDogJzAnICsgZGF0ZS5tb250aCkgKyAnLScgKyAoZGF0ZS5kYXkgPj0gMTAgPyBkYXRlLmRheSA6ICcwJyArIGRhdGUuZGF5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5SZWxDbHNMaXN0ID0gY2EuUmVsQ2xzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+ecgeW4guWMuicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIG5ld2F0dHJsaXN0LnB1c2goe1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEltZ0ZvbnRTdHlsZTogY2xzYXR0ci5JbWdGb250U3R5bGUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgTmFtZTogY2xzYXR0ci5OYW1lLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9wZW46IG9wZW4sXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQXR0cjogYXR0cixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVfcF93ZGl0aDp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnRpdGxlX3Bfd2RpdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRGb250OnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udD90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ6e30sXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGV4dF9Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yOicjMDAwMDAwJ1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsdWU6IGFyLnZhbHVlP2FyLnZhbHVlOicnIH0pO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBldmVudGxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmV2ZW50O1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0ICAgIHRoaXMuc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uKGUpeyAvL+mAieaLqeaMiemSruWJjVxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgQmVmb3JlX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5CZWZvcmVfU2VsZWN0X0V2ZW50O1xuXHRcdFx0XHRpZighQmVmb3JlX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5YmN5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBtYXN0X2F0dHI9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrXCLmnKrpgInmi6nmlbDmja7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgb2JqZWN0cyA9IFtdO1xuXHRcdFx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdHZhciBzdWJfcmVxID0gW107XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJbaV0uQXR0cjtcblx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVmFsdWUgPT0gJ+ivt+mAieaLqScgfHwgYXIuVmFsdWUgPT0gJ+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlID0gJyc7XG5cdFx0XHRcdFx0XHRcdGlmIChhci5UeXBlID09ICflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFyLlZhbHVlID09ICfor7cnKSBhci5WYWx1ZSA9ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAoYXIuVHlwZSA9PSAn5byV55So5Lq65ZGYJyB8fCBhci5UeXBlID09ICflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbElEID8gYXIuVmFsSUQgOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhci5UeXBlID09ICfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGFyLlZhbHVlID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFyLlR5cGUgPT0gJ+Wtl+WFuCcgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZSA9PSAn5a2X5YW4LeaVtOaVsCcpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYXIuc2VsZWN0ID09IHRydWUpIHsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdiBpbiBhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0ciArPSBcIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyICs9IGFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHZhbFN0clxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBhci5OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogYXIuVmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogYXIuTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBhci5WYWx1ZSA/IGFyLlZhbHVlIDogJydcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmIChhci5ub3RlbXB0eSA9PSB0cnVlICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGlmKGFyLk5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBhci5EaXNwTmFtZSArICfkuI3og73kuLrnqbrvvIEnLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0b2JqX2lkOiBzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6IHN1Yl9yZXFcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHRcdGNsc19pZDogJ01CT1gnLCAvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxuXHRcdFx0XHRcdCdidXR0b24nOiAndG9wJywgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0XHRlZGl0X2RsZzoge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NtYWxsJywgLy/lsI/nqpflj6Ncblx0XHRcdFx0XHRcdGNsYXNzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1hc3Rlcl9jbHM6IHtcblx0XHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqX2F0dHJzOiByZXFcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHN1Yl9jbHM6IHtcblx0XHRcdFx0XHRcdGNsc19uYW1lOiAnTUJPWCcsIC8vJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqZWN0czogb2JqZWN0c1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIHJlcSA9IFtdO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQvLyB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdC8vIHZhciBtc2c9Jyc7XG5cdFx0XHRcdC8vIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdC8vIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdC8vIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQvLyBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0Ly8gXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0Ly8gXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQvLyBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQvLyBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0Ly8gXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQvLyBcdFx0ZWxzZVxuXHRcdFx0XHQvLyBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHQvLyB9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgIGV2ZW50aWQ6IEJlZm9yZV9TZWxlY3RfRXZlbnQuSUQsXG5cdFx0XHRcdCAgICBlZHR5cGU6IFwiN1wiLC8vXCIwXCIsXG5cdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0ICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0Z2xvYmFsX2F0dHI6IHJlcSxcblx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfYXR0cixcblx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOiBtYXN0X2F0dHIsXG5cdFx0XHRcdFx0ZW52aXJvbWVudDogZW52aXJvbWVudFxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xuXHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0fSxcblx0XHRcdHBvcHVwQ2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coJ+W9k+WJjeaooeW8j++8micgKyBlLnR5cGUgKyAnLOeKtuaAge+8micgKyBlLnNob3cpO1xuXHRcdFx0fSxcblx0XHRcdGNoZWNrQ2hhbmdlKGUpeyAvL+W8ueahhmNoZWNr6YCJ5oupXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0LmRhdGFzZXQpO1xuXHRcdFx0XHR2YXIgaW5kZXggPSBlLnRhcmdldC5kYXRhc2V0LmluZGV4O1xuXHRcdFx0XHR2YXIgaXNjaGVjayA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaztcblx0XHRcdFx0dmFyIGRhdGEgPSB0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2hlY2tfbGlzdC5pdGVtcz1bXTtcblx0XHRcdFx0aWYodGhpcy4kZGF0YS5jaGVja19saXN0Lm11bHRpcGxlX2Nob2ljZT09XCIwXCIpeyAvL+WIpOaWreaXtuWNlemAiei/mOaYr+WkmumAiVxuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiBkYXRhKXtcblx0XHRcdFx0XHRcdGRhdGFbaV0uY2hlY2s9ZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFbaW5kZXhdLmNoZWNrPWlzY2hlY2s/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jaGVja19saXN0Lml0ZW1zPWRhdGE7XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdHBvcHVwX2NhbmNlbChlKXsgLy/lvLnmoYblj5bmtohcblx0XHRcdFx0dGhpcy4kcmVmcy5wb3B1cC5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdHBvcHVwX3NhdmEoZSl7IC8v5by55qGG56Gu5a6aIOmAieaLqeaMiemSruWQjlxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgQWZ0ZXJfU2VsZWN0X0V2ZW50ID0gJHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLkFmdGVyX1NlbGVjdF9FdmVudDtcblx0XHRcdFx0aWYoIUFmdGVyX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5ZCO5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBpdGVtcyA9ICR0aGlzLiRkYXRhLmNoZWNrX2xpc3QuaXRlbXM7XG5cdFx0XHRcdHZhciBkYXRhPVtdO1xuXHRcdFx0XHR2YXIgbmFtZT1cIlwiO1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYoaXRlbXNbaV0uY2hlY2s9PXRydWUpe1xuXHRcdFx0XHRcdFx0aWYobmFtZSlcblx0XHRcdFx0XHRcdFx0bmFtZSs9JzsnO1xuXHRcdFx0XHRcdFx0bmFtZSs9aXRlbXNbaV0ubmFtZTtcblx0XHRcdFx0XHRcdGRhdGEucHVzaCh7aWQ6aXRlbXNbaV0uaWQsbmFtZTppdGVtc1tpXS5uYW1lfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGRhdGEubGVuZ3RoPT0wKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrpgInmi6nmlbDmja7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIG1hc3RfYXR0cj1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZStcIuacqumAieaLqeaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRtYXN0X2F0dHIucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdG1hc3RfYXR0ci5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdCR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPW5hbWU7XG5cdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgZXZlbnRpZDogQWZ0ZXJfU2VsZWN0X0V2ZW50LklELFxuXHRcdFx0XHQgICAgZWR0eXBlOiBcIjdcIixcblx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHR1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsXG5cdFx0XHRcdFx0b2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0YXR0cjogW3thdHRyOiAnbWFzdF9pbnB1dF8zMDM3Jyx2YWx1ZTogbmFtZX1dLFxuXHRcdFx0XHRcdGdsb2JhbF9hdHRyOiBtYXN0X2F0dHIsXG5cdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjogZGF0YSxcblx0XHRcdFx0XHRlbnZpcm9tZW50OiAnJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xuXHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHR0aGlzLiRyZWZzLnBvcHVwLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0XG5cdFx0XHRjYW5jZWwoZSl7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xuXHRcdFx0XHRcdGRlbHRhOjEgLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHBhbmVsX2RlbChpbmRleCl7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpbmRleF0uc2NhbkNvZGVWYWwgPT0gdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9Jyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIXRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRClcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdFx0XHRjbGFzc19pZDp0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxuXHRcdFx0XHRcdFx0b2JqX2lkOnRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5PYmpJRFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHRcdC8vIHJldHVybjtcblx0XHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoeyB0aXRsZTpcIuWKoOi9veS4rS4uLlwiIH0pO1xuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdkYXRhT2JqRGVsJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6OS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcChlKXsgLy/miavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly8gaWYoIWlzVmFsKXtcblx0XHRcdFx0XHQvLyBcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdC8vIFx0dmFyIGlzVmFsZCA9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly8gXHRyZXR1cm47XG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdC8v5Li75pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdFx0aWYgKGlzVmFsIT1yZXN1bHQuZGVjb2RlZGF0YSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xuXHRcdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHljLrkuovku7bohJrmnKxcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI3XCIsLy9cIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHRzdWJvbnRhcChlKXsgLy/miavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzVmFsID10aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNWYWwhPXJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeWMuuS6i+S7tuiEmuacrFxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDsgIC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdtYXN0X2lucHV0XzMwMzcnLCB2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGEgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHNjYW5fb250YXAoZSl7IC8v5omr56CB5Yy65omr56CB5Yqf6IO9XG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNmbGFnPXRydWU7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0KXtcblx0XHRcdFx0XHRcdGlmKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2ldLnNjYW5Db2RlVmFsID09IHJlc3VsdC5kZWNvZGVkYXRhKSBcblx0XHRcdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcblx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgbWFzdF9yZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIC8v5a2Q5pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6ICc3JywvL1wiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X3JlcSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdHNjYW5fb25ldmVudChlKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHRpZihlLnRhcmdldC52YWx1ZSl7XG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XG5cdFx0XHRcdFx0XHRpZih0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSBlLnRhcmdldC52YWx1ZSkgXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNmbGFnKSB7XG5cdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFzdF9yZXE9W107XG5cdFx0XHRcdFx0XHRcdC8v5Li75pWw5o2u57G75bGe5oCnXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gY2xhc3NhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFzdF9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+WxnuaAp1xuXHRcdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogJzcnLC8vXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRtYXN0X2F0dHI6IG1hc3RfcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uYXJyb3coaW5kZXgsb3Blbil7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KyctLScrb3Blbik7XG5cdFx0XHRcdHZhciBkYXRhX2F0dHI9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLk9wZW47XG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2luZGV4XS5PcGVuPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0dmFyIGRhdGFfYXR0cj10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU7XG5cdFx0XHRcdGlmKCFkYXRhX2F0dHIpe1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlMihpdGVtLHZhbHVlLGRlbHZhbHVlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRpZihkZWx2YWx1ZVswXS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5hdHRyID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGFyLlR5cGU9PSflrZflhbgt5pW05pWwJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0c3ViX29uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmICh2YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2lpaW5kZXgnXV0uc3ViQ2xhc3NBdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUpO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdHN1Yl9vbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRcdHZhciBzdWJDbGFzc0F0dHIgPSB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpaWluZGV4J11dLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLk5hbWUgPT0gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5WYWx1ZT1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRmb3IodmFyIHYgaW4gaXRlbSl7XG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHN1YkNsYXNzQXR0cil7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gc3ViQ2xhc3NBdHRyW2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW1bdl0uTmFtZSA9PSBzdWJDbGFzc0F0dHJbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7ZGluZGV4PWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBpdGVtdmFsdWUgPSBpdGVtW3ZdO1xuXHRcdFx0XHRcdHZhciBkYXRhX2F0dHIgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRcdGlmIChpdGVtdmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cltpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlPXZhbHVlO1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3ViQ2xhc3NBdHRyW2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUpO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSBzdWJDbGFzc0F0dHJbaW5kZXhdLkF0dHJbaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uZXZlbnQoZSl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0Ly8gdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7ICAvL+S4u+aVsOaNruexu+WxnuaAp1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIFx0bWFzdF9hdHRyOiBbXSxcblx0XHRcdFx0ICAgICAgICBcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiBlLnRhcmdldC52YWx1ZSB9XVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hlY2soZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciBpc2NoZWNrZWQgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0aWYoIWRhdGFfYXR0cil7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbZS50YXJnZXQuZGF0YXNldFsnaWlpbmRleCddXS5zdWJDbGFzc0F0dHJbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9aXNjaGVja2VkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0aW5wdXRWYWxMaXN0SXNEZWwoaW5kZXgpe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5pbnB1dFZhbExpc3Quc3BsaWNlKGluZGV4LCAxKTsgLy/liKDpmaR0YWJQYWdlanNvbueahOWGheWuuVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmlucHV0VmFsTGlzdCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkcmVzc2NoYW5nZShlKSB7XG5cdFx0XHQgICAgLy8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0ICAgIGNvbnNvbGUubG9nKGUuZGF0YS5qb2luKCc7JykpXG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLmRhdGEuam9pbignOycpO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGJlZm9yZV9jbGlja19idXR0b24gPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0dmFyIGJ1dHRvbl9jYWxsYmFjayA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdGlmKCFiZWZvcmVfY2xpY2tfYnV0dG9uKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJiZWZvcmVfY2xpY2tfYnV0dG9uLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFidXR0b25fY2FsbGJhY2spe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJ1dHRvbl9jYWxsYmFjay1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihiZWZvcmVfY2xpY2tfYnV0dG9uLCBkYXRhX2F0dHIsIGJ1dHRvbl9jYWxsYmFjaywgaW5kZXgsaWluZGV4KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUGVyKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uTG9naW4rJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI0XCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogZGF0YVswXS5Mb2dpbixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUmVmKGUpe1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlJlbENsc1tlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0tMSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0ICAgICAgICAvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0c2F2YSgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQpIC8v5Yik5pat5Yqf6IO954K55Y+C5pWw5piv5ZCm5pyJ56Gu5a6a5YmN6ISa5pysXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50LklEKTtcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCkgLy/liKTmlq3lip/og73ngrnlj4LmlbDmmK/lkKbmnInnoa7lrprlkI7ohJrmnKxcblx0XHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtkZWx0YToxIH0pOy8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxuXHRcdFx0fSxcblx0XHRcdGFkZCgpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXG5cdFx0XHRcdFx0bWFzazp0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgXG5cdFx0XHRcdCAgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQgXG5cdFx0XHRcdC8vIHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdC8vICAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0Ly8gICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxuXHRcdFx0XHQvLyAgICAgY29tcG9zZTogSlNPTi5zdHJpbmdpZnkoW10pLCByZWZkYXRhc3RvcmU6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIFxuXHRcdFx0XHQvLyBcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcblx0XHRcdFx0Ly8gfTtcblx0XHRcdFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdHZhciBvYmpfYXR0cj17fTtcblx0XHRcdFx0cmVxLmZvckVhY2goaXRlbT0+e1xuXHRcdFx0XHRcdG9ial9hdHRyW2l0ZW0ubmFtZV0gPSBpdGVtLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0XHRjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdGNsYXNzX25hbWU6JycsXG5cdFx0XHRcdFx0bWFzdGVyX2Nsc19pZDonJyxcblx0XHRcdFx0XHRtYXN0ZXJfb2JqX2lkOicnLFxuXHRcdFx0XHRcdGNyZWF0b3I6JycsXG5cdFx0XHRcdFx0Y3JlYXRvcl9uYW1lOicnLFxuXHRcdFx0XHRcdG5vdF90cmlnZ2VyX2V2ZW50OicnLFxuXHRcdFx0XHRcdHVwZGF0ZV9leGlzdDonJyxcblx0XHRcdFx0XHRwb3N0X3Byb2Nlc3M6JycsXG5cdFx0XHRcdFx0ZXh0X2luZm86IGVudmlyb21lbnQsXG5cdFx0XHRcdFx0b2JqX2F0dHI6IG9ial9hdHRyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0Ly8gcmV0dXJuXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjcmVhdGVEYXRhT2JqJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYoc3VjY2Vzcy5yZXN1bHQuYWN0aW9uKXtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5yZXN1bHQuQWN0aW9uKTtcblx0XHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJldD09JzAnKXtcblx0XHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmVzdWx0X3R5cGU9PScwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBcIntcInJldFwiOjAsIFwicmVzdWx0X3R5cGVcIjowLCBcInJlc3VsdFwiOlwi5Yib5bu65oiQ5YqfMTIzMTIzMTIzXCIsXCJpbmZvXCI6XCJcIn1cIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTpcIuWIm+W7uuaIkOWKn++8gVwiLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0Ly/liLfmlrBcblx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcblx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDM3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMuJGRhdGEudGl0bGVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gdGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRpbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xuXHRcdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdCAgICBFZGl0U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdCAgICBOb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXG5cdFx0XHRcdCAgICBlbnZpcm9tZW50OiB7XG5cdFx0XHRcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gJyc7XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcbiAgICAvLyAgICAgICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuICAgIC8vICAgICAgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG4gICAgLy8gICAgICAgICAgICAgfVxuXHRcdFx0XHRwYXJhbS5lbnZpcm9tZW50ID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShwYXJhbS5lbnZpcm9tZW50KSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9Jztcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICBlZF90eXBlOiBpbmZvLmVkdHlwZSxcblx0XHRcdFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0XHRcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0XHRcdCAgY2xhc3NfbmFtZTogJycsXG5cdFx0XHRcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHRcdFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHRcdFx0ICBkYXRhX29ial9pZDogaW5mby5vYmppZCxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiBpbmZvLnJjbHNpZCxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0XHRcdCAgZXh0X2luZm86IHBhcmFtLmVudmlyb21lbnQsXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdFx0XHQgIGlucHV0X3BhcmFtOiBpbnB1dHBhcmFtZXRlcixcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHQgIHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0ICBpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdCAgICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0ICAgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICAgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdCAgXHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHQgIH1lbHNle1xuXHRcdFx0XHRcdCAgXHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0ICBcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdCAgXG5cdFx0XHRcdFx0XHRpZihkYXRhLmFjdGlvbil7XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWwgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbYV0uQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWxbaV0uYXR0ciAgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGNhLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWxbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHZhbFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHQgICAgXHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHQgICAgXHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAvLyAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgICAvLyAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgLy8gICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBpbnB1dHBhcmFtZXRlcjogJycsIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgICAgLy8gICAgfVxuXHRcdCAgICBcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0aWYoaW5mby5kYXRhSnNvbilcblx0XHQgICAgXHRcdGluZm8uZGF0YUpzb24gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGluZm8uZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBvYmpfYXR0cj17fTtcblx0XHQgICAgXHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQgPSAneycraW5mby5ldmVudGlkKyd9Jztcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0ICAgIFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGluZm8uZXZlbnRpZCxcblx0XHQgICAgXHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgIFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0ICAgIFx0ICBwcmpfaWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiBpbmZvLmRhdGFKc29uLFxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGV4dF9pbmZvOiBlbnZpcm9tZW50LFxuXHRcdCAgICBcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdCAgICBcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdCAgICBcdH07XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bGV0IHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5pW05pWwJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHRcdE9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCl7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHQgICAgXHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9va19ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHQgICAgXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0ICAgIFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHQgICAgXHQgICAgICAgIH1cblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH1cblx0XHQgICAgXHR2YXIgaW5mbyA9IHtcblx0XHQgICAgXHQgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHQgICAgXHQgICAgZWR0eXBlOiBcIjBcIixcblx0XHQgICAgXHQgICAgcHJvamVjdGlkOiAnJyxcblx0XHQgICAgXHQgICAgcmNsc2lkOiAnJyxcblx0XHQgICAgXHQgICAgcm9iamlkOiAnJyxcblx0XHQgICAgXHQgICAgdXNlcmxvZ2luOiAnJyxcblx0XHQgICAgXHQgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHQgICAgXHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0ICAgIFx0ICAgIGF0dHI6IHJlcSxcblx0XHQgICAgXHR9XG5cdFx0ICAgLy8gIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgIC8vICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxyY2xzaWQ6IGluZm8ucmNsc2lkLCBcblx0XHRcdFx0XHQvLyByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdFx0Ly8gYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgIC8vICAgICAgfVxuXHRcdCAgICBcdGVudmlyb21lbnQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdCAgICBcdGluZm8uYXR0ci5mb3JFYWNoKGl0ZW09Pntcblx0XHQgICAgXHRcdG9ial9hdHRyW2l0ZW0uYXR0cl0gPSBpdGVtLnZhbDtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgXHRpZighZXZlbnRpZC5pbmNsdWRlcygneycpKSBldmVudGlkPSAneycrIGV2ZW50aWQgKyd9Jztcblx0XHQgICAgXHR2YXIgZGF0YUluZm89e1xuXHRcdCAgICBcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0ICAgIFx0ICBzdGFydF90cmFuc2FjdGlvbjogJycsXG5cdFx0ICAgIFx0ICBjbGFzc19pZDogaW5mby5jbHNpZCxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGV2ZW50aWQsXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHQgICAgXHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdCAgICBcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdCAgICBcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZCxcblx0XHQgICAgXHQgIHJlZl9jbHNfaWQ6IGluZm8ucmNsc2lkLFxuXHRcdCAgICBcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXG5cdFx0ICAgIFx0ICB1c2VyX2xvZ2luOiBpbmZvLnVzZXJsb2dpbixcblx0XHQgICAgXHQgIGRhdGFfanNvbjogJycsXG5cdFx0ICAgIFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdCAgICBcdCAgZXh0X2luZm86IGVudmlyb21lbnQsXG5cdFx0ICAgIFx0ICBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHIsXG5cdFx0ICAgIFx0ICBpbnB1dF9wYXJhbTogJycsXG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBpZiAoIXJlcS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0XHRcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4dGluZm8gPSBlbnZpcm9tZW50O1xuXHRcdFx0XHRleHRpbmZvLmVkaXRfZGxnID0ge1xuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHQgICAgZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdC8vIFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdC8vIFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KHJlcSksIFxuXHRcdFx0XHQvLyBcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGV4dGluZm8pLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRleHRpbmZvID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShleHRpbmZvKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRyZXEuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWV2ZW50aWQuaW5jbHVkZXMoJ3snKSkgZXZlbnRpZD0gJ3snKyBldmVudGlkICsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBldmVudGlkLFxuXHRcdFx0XHQgIGV2ZW50X25hbWU6ICcnLFxuXHRcdFx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcblx0XHRcdFx0ICBvYmpfYXR0cjogb2JqX2F0dHIsXG5cdFx0XHRcdCAgcHJqX2lkOiAnJyxcblx0XHRcdFx0ICByZWZfY2xzX2lkOiAnJyxcblx0XHRcdFx0ICByZWxfb2JqX2lkOiAnJyxcblx0XHRcdFx0ICB1c2VyX2xvZ2luOiAnJyxcblx0XHRcdFx0ICBkYXRhX2pzb246ICcnLFxuXHRcdFx0XHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0XHRcdCAgZXh0X2luZm86IGV4dGluZm8sXG5cdFx0XHRcdCAgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyLFxuXHRcdFx0XHQgIGlucHV0X3BhcmFtOiAnJyxcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHQvLyByZXR1cm47XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHRcdFx0XHQgIHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XHRcblx0XHRcdFx0XHQgIGlmIChkYXRhLnJldCAhPSAwKSB7XG5cdFx0XHRcdFx0ICAgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHQgICAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHQgICAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICBcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdCAgfWVsc2V7XG5cdFx0XHRcdFx0ICBcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHQgIFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0ICBcblx0XHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbnMgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9uc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3BhbmVsJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdFx0XHRcdCAgIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdHlsZSA9IHZhbC5zdHlsZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWluZGV4OmlpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9hdHRyOmRhdGFfYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5wdXRwYXJhbWV0ZXI6IGRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1x0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fZGF0YV9xdWVyeV9kbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wcm9qZWN0X3F1ZXJ5X2RsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUubXVsaXRfc2VsZWN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHByaVJlbCA9ICctMSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICcwJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR6LSf6LSj55qE6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnMSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWIm+W7uueahCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzInO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzMnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc0Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5LiL5bGe55qE6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbV89e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0nK3ByaVJlbCsnJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW1fKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tfZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMlwiLGNvbnRlbnQ6ICfosIPnlKggYmVmb3JlX2NsaWNrX2J1dHRvbiDohJrmnKzov5Tlm57nqbrvvIxldmVudF9pZCcgKyBldmVudGlkLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xuXHRcdCAgICBcdHZhciBwYXJhbSA9IHtcblx0XHQgICAgXHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdCAgICBcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0ICAgIFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcblx0XHQgICAgXHQgICAgZW52aXJvbWVudDoge1xuXHRcdCAgICBcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICAgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0ICAgIFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICAgICAgfVxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBpbnB1dHBhcmFtZXRlciA9ICcnO1xuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdCAgICBcdC8vIHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgIC8vICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0ICAgICAvLyAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgLy8gICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSwgaW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLCBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcblx0XHQgICAgIC8vICAgIH1cblx0XHRcdFx0cGFyYW0gPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHBhcmFtKSk7Ly/lsIblrZfnrKbkuLLovazmjaLkuLpiYXNlNjTnvJbnoIFcblx0XHRcdFx0dmFyIG9ial9hdHRyPXt9O1xuXHRcdFx0XHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0XHRcdFx0b2JqX2F0dHJbaXRlbS5hdHRyXSA9IGl0ZW0udmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQ9ICd7JysgaW5mby5ldmVudGlkICsnfSc7XG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgZWRfdHlwZTogaW5mby5lZHR5cGUsXG5cdFx0XHRcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdFx0XHQgIGNsYXNzX2lkOiBpbmZvLmNsc2lkLFxuXHRcdFx0XHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdFx0XHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXG5cdFx0XHRcdCAgZXZlbnRfbmFtZTogJycsXG5cdFx0XHRcdCAgZGF0YV9vYmpfaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdFx0XHQgIHByal9pZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0XHRcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0XHRcdCAgcmVsX29ial9pZDogaW5mby5yb2JqaWQsXG5cdFx0XHRcdCAgdXNlcl9sb2dpbjogaW5mby51c2VybG9naW4sXG5cdFx0XHRcdCAgZGF0YV9qc29uOiAnJyxcblx0XHRcdFx0ICBjb21wb3NlX2luZm86ICcnLFxuXHRcdFx0XHQgIGV4dF9pbmZvOiBwYXJhbSxcblx0XHRcdFx0ICBnbG9iYWxfYXR0cjogJycsXG5cdFx0XHRcdCAgaW5wdXRfcGFyYW06ICcnLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdC8vIHJldHVybjtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IHN1Y2Nlc3MucmVzdWx0O1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEucmV0ICE9IDApIHtcblx0XHRcdFx0XHRcdCAgICB2YXIgdGlwID0gZGF0YS5lcnJfaW5mbyA/IHR5cGVvZiBkYXRhLmVycl9pbmZvID09ICdzdHJpbmcnID8gZGF0YS5lcnJfaW5mbyA6IGRhdGEuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0ICAgIGlmIChkYXRhLnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytkYXRhLnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bGV0IHRpcCA9IGRhdGEuaW5mbyA/IHR5cGVvZiBkYXRhLmluZm8gPT0gJ3N0cmluZycgPyBkYXRhLmluZm8gOiBkYXRhLmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xuXHRcdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IGFjdGlvbmxpc3Rbal1cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2EgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbYV0uQXR0cltsXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflrZflhbgnIHx8IGNhLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBjYS5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID12YWxbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNlwiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzYuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XG5cdFx0ICAgIFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHt9O1xuXHRcdCAgICBcdGlmKGluZm8uZW52aXJvbWVudCl7XG5cdFx0ICAgIFx0XHRlbnZpcm9tZW50ID0gaW5mby5lbnZpcm9tZW50O1xuXHRcdCAgICBcdH0gZWxzZSB7XG5cdFx0ICAgIFx0XHRlbnZpcm9tZW50ID0ge1xuXHRcdCAgICBcdFx0XHQnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdFx0XHRjbHNfaWQ6ICdNQk9YJywgLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnku47mlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHRcdFx0J2J1dHRvbic6ICd0b3AnLCAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0XHRcdGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHRcdFx0ZWRpdF9kbGc6IHtcblx0XHQgICAgXHRcdFx0XHR0eXBlOiAnc21hbGwnLCAvL+Wwj+eql+WPo1xuXHRcdCAgICBcdFx0XHRcdGNsYXNzX2lkOiAnTUJPWCcsIC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHQgICAgXHRcdFx0fSxcblx0XHQgICAgXHRcdH07XG5cdFx0ICAgIFx0XHRcblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGdsb2JhbF9hdHRyID0gdGhpcy4kZGF0YS5nbG9iYWxfYXR0cjtcblx0XHQgICAgXHRpZiAoaW5mby5nbG9iYWxfYXR0cikge1xuXHRcdCAgICBcdFx0Z2xvYmFsX2F0dHIgPSBpbmZvLmdsb2JhbF9hdHRyO1xuXHRcdCAgICBcdH1cblx0XHRcdFx0XG5cdFx0ICAgIFx0ZW52aXJvbWVudCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCkpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlcil7XG5cdFx0XHRcdFx0aW5mby5pbnB1dFBhcmFtdGVyID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShpbmZvLmlucHV0UGFyYW10ZXIpKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0XHRcdFxuXHRcdCAgICBcdHZhciBvYmpfYXR0cj17fTtcblx0XHQgICAgXHRpbmZvLmF0dHIuZm9yRWFjaChpdGVtPT57XG5cdFx0ICAgIFx0XHRvYmpfYXR0cltpdGVtLmF0dHJdID0gaXRlbS52YWw7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIFx0aWYoIWluZm8uZXZlbnRpZC5pbmNsdWRlcygneycpKSBpbmZvLmV2ZW50aWQ9ICd7JysgaW5mby5ldmVudGlkICsnfSc7XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvPXtcblx0XHQgICAgXHQgIGVkX3R5cGU6IGluZm8uZWR0eXBlLFxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdCAgICBcdCAgY2xhc3NfaWQ6IGluZm8uY2xzaWQsXG5cdFx0ICAgIFx0ICBjbGFzc19uYW1lOiAnJyxcblx0XHQgICAgXHQgIGV2ZW50X2lkOiBpbmZvLmV2ZW50aWQsXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHQgICAgXHQgIGRhdGFfb2JqX2lkOiBpbmZvLm9iamlkLFxuXHRcdCAgICBcdCAgb2JqX2F0dHI6IG9ial9hdHRyLFxuXHRcdCAgICBcdCAgcHJqX2lkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxuXHRcdCAgICBcdCAgcmVmX2Nsc19pZDogaW5mby5yY2xzaWQsXG5cdFx0ICAgIFx0ICByZWxfb2JqX2lkOiBpbmZvLnJvYmppZCxcblx0XHQgICAgXHQgIHVzZXJfbG9naW46IGluZm8udXNlcmxvZ2luLFxuXHRcdCAgICBcdCAgZGF0YV9qc29uOiAnJyxcblx0XHQgICAgXHQgIGNvbXBvc2VfaW5mbzogJycsXG5cdFx0ICAgIFx0ICBleHRfaW5mbzogZW52aXJvbWVudCxcblx0XHQgICAgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiBpbmZvLmlucHV0UGFyYW10ZXIsXG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0Ly8gcmV0dXJuO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5lcnJfY29kZSA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gc3VjY2Vzcy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5yZXQgIT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgIHZhciB0aXAgPSBkYXRhLmVycl9pbmZvID8gdHlwZW9mIGRhdGEuZXJyX2luZm8gPT0gJ3N0cmluZycgPyBkYXRhLmVycl9pbmZvIDogZGF0YS5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHQgICAgaWYgKGRhdGEucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK2RhdGEucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRsZXQgdGlwID0gZGF0YS5pbmZvID8gdHlwZW9mIGRhdGEuaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuaW5mbyA6IGRhdGEuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XG5cdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaWkgPSAwOyBpaSA8IGFjdGlvbmxpc3QubGVuZ3RoOyBpaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gcmVzdWx0W2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7ICAvL+aJk+W8gOS+p+a7keW8ueahhlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhY3Rpb24udmFsdWUuY29tbW9uX2RsZ19pZCA9PSAnY2hlY2tfbGlzdCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kZGF0YS5jaGVja19saXN0PSBhY3Rpb24udmFsdWUuY29uZmlnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICBpZihhY3Rpb24udmFsdWUuY29uZmlnLmFwcGVhcl9zdHlsZSA9PSAnc2lkZXNsaXAnKSAvL+WIpOaWreaYr+WQpuaYr+S+p+a7kVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucG9wdXBUeXBlID0gJ2NlbnRlcidcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgLy8gb3BlbiDmlrnms5XkvKDlhaXlj4LmlbAg562J5ZCM5ZyoIHVuaS1wb3B1cCDnu4Tku7bkuIrnu5HlrpogdHlwZeWxnuaAp1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAkdGhpcy4kcmVmcy5wb3B1cC5vcGVuKCR0aGlzLiRkYXRhLnBvcHVwVHlwZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykgeyAvL+S4u+S7juaVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByYW5kID0gJyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7IC8v55Sf5oiQNeS9jemaj+acuuaVsFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhbmQgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0ciA9PSBcIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIiArIHJhbmQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZm8uYXR0clswXS5hdHRyID09IFwibWFzdF9pbnB1dF8zMDM3XCIpIC8v5Yik5pat5piv5Li75pWw5o2u57G75omr56CB5p+l6K+i5pWw5o2uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiICsgcmFuZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWw6c2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyPWxpc3RfMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCkpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBzY2FuQ29kZVZhbCA9ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKVxuXHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIitpaTtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcblx0XHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlc3VsdFtpXS5hdHRyPT1cIlNfSURcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5PYmpJRD1yZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vN1wiLGNvbnRlbnQ6c3VjY2Vzcy5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzcuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGV2ZW50SUQpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCIsXG5cdFx0XHRcdFx0bWFzazp0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicgfHwgYXIuVHlwZT09J+Wtl+WFuC3mlbTmlbAnKXtcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKGFyLm5vdGVtcHR5ID09IHRydWUgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5Ob3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIG9iamVjdHM9W107XG5cdFx0XHRcdHZhciBzdWJQYW5lbExpc3QgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Q7XG5cdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0dmFyIHN1Yl9yZXE9W107XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJbaV0uQXR0cjtcblx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyB8fCBhci5UeXBlPT0n5a2X5YW4LeaVtOaVsCcpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZiAoYXIubm90ZW1wdHkgPT0gdHJ1ZSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYoYXIuTm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0b2JqX2lkOnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdG9ial9hdHRyczpzdWJfcmVxXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGRhdGFKc29uPXtcblx0XHRcdFx0XHRtYXN0ZXJfY2xzOntcblx0XHRcdFx0XHRcdGNsc19uYW1lOidNQk9YJywvLyR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcblx0XHRcdFx0XHRcdG9ial9hdHRyczpyZXFcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGlucHV0XzMwMzc6JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwsICAgLy/miavnoIHlhoXlrrlcblx0XHRcdFx0XHRvcF90eXBlOiR0aGlzLiRkYXRhLnBhcmFtLk9wZXJhdGlvblR5cGUsIC8v5L2c5Lia57G75Z6L5a6a5LmJXG5cdFx0XHRcdFx0c3ViX2Nsczp7XG5cdFx0XHRcdFx0XHRjbHNfbmFtZTonTUJPWCcsLy8kdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLk5hbWUsXG5cdFx0XHRcdFx0XHRvYmplY3RzOm9iamVjdHNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XG5cdFx0ICAgLy8gIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgIC8vICAgICAgICAgIGVkdHlwZTogXCI3XCIsIGV2ZW50aWQ6IGV2ZW50SUQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdFx0Ly8gY2xzaWQ6ICdNQk9YJywgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoW10pLCBcblx0XHRcdFx0XHQvLyBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpLGRhdGFKc29uOkpTT04uc3RyaW5naWZ5KGRhdGFKc29uKVxuXHRcdCAgIC8vICAgICAgfVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhSW5mbykpO1xuXHRcdCAgICBcdHZhciBkYXRhSnNvbiA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YUpzb24pKTsvL+WwhuWtl+espuS4sui9rOaNouS4umJhc2U2NOe8lueggVxuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cikpOy8v5bCG5a2X56ym5Liy6L2s5o2i5Li6YmFzZTY057yW56CBXG5cdFx0ICAgIFx0aWYoIWV2ZW50SUQuaW5jbHVkZXMoJ3snKSkgZXZlbnRJRD0gJ3snKyBldmVudElEICsnfSc7XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvPXtcblx0XHQgICAgXHQgIGVkX3R5cGU6IFwiN1wiLFxuXHRcdCAgICBcdCAgc3RhcnRfdHJhbnNhY3Rpb246ICcnLFxuXHRcdCAgICBcdCAgY2xhc3NfaWQ6ICdNQk9YJyxcblx0XHQgICAgXHQgIGNsYXNzX25hbWU6ICcnLFxuXHRcdCAgICBcdCAgZXZlbnRfaWQ6IGV2ZW50SUQsXG5cdFx0ICAgIFx0ICBldmVudF9uYW1lOiAnJyxcblx0XHQgICAgXHQgIGRhdGFfb2JqX2lkOiAnJyxcblx0XHQgICAgXHQgIG9ial9hdHRyOiAnJyxcblx0XHQgICAgXHQgIHByal9pZDogJycsXG5cdFx0ICAgIFx0ICByZWZfY2xzX2lkOiAnJyxcblx0XHQgICAgXHQgIHJlbF9vYmpfaWQ6ICcnLFxuXHRcdCAgICBcdCAgdXNlcl9sb2dpbjogJycsXG5cdFx0ICAgIFx0ICBkYXRhX2pzb246IGRhdGFKc29uLFxuXHRcdCAgICBcdCAgY29tcG9zZV9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGV4dF9pbmZvOiAnJyxcblx0XHQgICAgXHQgIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0cixcblx0XHQgICAgXHQgIGlucHV0X3BhcmFtOiAnJyxcblx0XHQgICAgXHR9O1xuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHQvLyByZXR1cm47XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBzdWNjZXNzLnJlc3VsdDtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnJldCAhPSAwKSB7XG5cdFx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IGRhdGEuZXJyX2luZm8gPyB0eXBlb2YgZGF0YS5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IGRhdGEuZXJyX2luZm8gOiBkYXRhLmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdCAgICBpZiAoZGF0YS5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrZGF0YS5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdGxldCB0aXAgPSBkYXRhLmluZm8gPyB0eXBlb2YgZGF0YS5pbmZvID09ICdzdHJpbmcnID8gZGF0YS5pbmZvIDogZGF0YS5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcblx0XHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRpZihldmVudElEICE9ICR0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50LklEKVxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xuXHRcdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xuXHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC8zMDM3P3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpzdWNjZXNzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIFxuXHRcdFx0XG5cdFx0fVxuXHR9XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n");
/***/ }),
/* 116 */
@@ -32502,7 +32502,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//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '码盘',\n      param: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      // 分段器数据\n      current: 0,\n      items: ['正在码盘', '已码盘']\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.param = JSON.parse(options.param);\n    // console.log(this.$data.param);\n    //获取CG_Detail(托盘货品表)数据类的自定义表单参数\n    this.Head_UIStyleGetInfo('CG_Detail', this.$data.param.Head_Panel_Style.ID);\n    this.Detail1_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel1_Style.ID);\n    this.Detail2_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel2_Style.ID);\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // this.form = this.head_styledef.form.model;\n                    // console.log($this.$data.head_styledef);\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 _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this2;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n                    // let 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 _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this3;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\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.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.detail2_styledef);\n                  } else {\n                    uni.showModal({\n                      title: \"错误3\",\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: \"错误3.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this4 = this;\n      //扫码功能\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/5600.vue:462\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this4;\n        __f__(\"log\", item, \" at pages/modal/5600.vue:467\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this4.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          }\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        }\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 _this5 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var obj_attr, input_param, $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                    obj_attr = _this5.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 = _this5;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: '',\n                      class_id: _this5.$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                    _this5.$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 == \"insert_subtable_page_row\") {\n                                //码盘中\n                                var value = item.value;\n                                $this.viewAceionRow(value);\n                              } else if (item.action_type == \"set_subtable_page_content\") {\n                                //已码盘\n                                var value = item.value;\n                                if (value.clear == true && $this.$data.detail1StyleDefList.length > 0) {\n                                  //判断是否清空页签内容,正在码盘是否有数据\n                                  uni.showModal({\n                                    title: '提示',\n                                    content: '系统检测到有正在码盘中的货品,继续操作会清空,是否继续?',\n                                    success: function success(res) {\n                                      if (res.confirm) {\n                                        $this.$data.detail1StyleDefList = [];\n                                        $this.$data.detail2StyleDefList = [];\n                                        $this.viewAceionContent(value);\n                                      } else if (res.cancel) {\n                                        $this.$data.detail2StyleDefList = [];\n                                        $this.viewAceionContent(value);\n                                      }\n                                    }\n                                  });\n                                } else {\n                                  $this.$data.detail2StyleDefList = [];\n                                  $this.viewAceionContent(value);\n                                }\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"错误4.3\",\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 _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    //加载正在码盘内容\n    viewAceionRow: function viewAceionRow(data, type) {\n      // console.log(data);\n      var styleStr = JSON.stringify(this.$data.detail1_styledef);\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        styleStr = JSON.stringify(this.$data.detail2_styledef);\n      }\n      var detailStyle = JSON.parse(styleStr);\n      data.row.attrs.forEach(function (attr) {\n        detailStyle.form.items.forEach(function (ele) {\n          if (ele.name != 'Layout') {\n            if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n              }\n            });\n          }\n        });\n      });\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        detailStyle.form.objId = data.row.id;\n        this.$data.detail2StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail2StyleDefList);\n      } else {\n        this.$data.detail1StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail1StyleDefList);\n      }\n    },\n    //加载已码盘内容\n    viewAceionContent: function viewAceionContent(data) {\n      var _this6 = this;\n      data.content.forEach(function (cont) {\n        var styleStr = JSON.stringify(_this6.$data.detail2_styledef);\n        var detailStyle = JSON.parse(styleStr);\n        detailStyle.form.objId = cont.id;\n        cont.attrs.forEach(function (attr) {\n          detailStyle.form.items.forEach(function (ele) {\n            if (ele.name != 'Layout') {\n              if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n                }\n              });\n            }\n          });\n        });\n        _this6.$data.detail2StyleDefList.push(detailStyle);\n      });\n      // console.log(this.detail2StyleDefList);\n    },\n    onClickItem: function onClickItem(e) {\n      //选择页签\n      // console.log(e);\n      this.current = e.currentIndex;\n    },\n    onDetail1EnterChange: function onDetail1EnterChange(item) {\n      //码盘中样式回车事件\n      __f__(\"log\", item, \" at pages/modal/5600.vue:675\");\n    },\n    delItem: function delItem(index) {\n      //删除码盘中样式面板\n      this.detail1StyleDefList.splice(index, 1);\n    },\n    delDataObj: function delDataObj(style, index) {\n      //删除已码盘数\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: style.form.clsId,\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                $this.detail2StyleDefList.splice(index, 1);\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"删除成功!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\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          } else if (res.cancel) {}\n        }\n      });\n    },\n    ok: function ok() {\n      //确定\n      // var $this = this;\n      // console.log(this.$data.param.Before_OK_Event);\n      //    console.log(this.$data.param.After_OK_Event);\n      if (this.$data.param.Before_OK_Event)\n        //是否有确定前事件\n        this.sava(this.$data.param.Before_OK_Event);else if (this.$data.param.After_OK_Event)\n        //是否有确定后事件\n        this.sava(this.$data.param.After_OK_Event);\n    },\n    sava: function sava(event) {\n      var $this = this;\n      if (this.$data.detail1StyleDefList.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"没有正在码盘的数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return false;\n      }\n      //获取表头属性\n      var head_attr = {};\n      this.$data.head_styledef.form.items.forEach(function (item) {\n        head_attr[item.fieldId] = item.value;\n      });\n      // console.log(head_attr);\n      //获取正在码盘属性\n      var detailAttrList = [];\n      this.$data.detail1StyleDefList.forEach(function (style) {\n        var detail_attr = {};\n        style.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        detailAttrList.push(detail_attr);\n      });\n      // console.log(detailAttrList);\n\n      var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n        return {\n          attr: a,\n          value: head_attr[a] || \"\"\n        };\n      })));\n      var jsonlist = [];\n      detailAttrList.forEach(function (attr) {\n        jsonlist.push({\n          id: '',\n          attrs: Object.keys(attr).map(function (a) {\n            return {\n              attr: a,\n              value: attr[a] || \"\"\n            };\n          })\n        });\n      });\n      // console.log(jsonlist);\n      jsonlist.forEach( /*#__PURE__*/function () {\n        var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(json, key) {\n          return _regenerator.default.wrap(function _callee5$(_context5) {\n            while (1) {\n              switch (_context5.prev = _context5.next) {\n                case 0:\n                  _context5.next = 2;\n                  return $this.runCustomEvent(event, input_param, json);\n                case 2:\n                case \"end\":\n                  return _context5.stop();\n              }\n            }\n          }, _callee5);\n        }));\n        return function (_x, _x2) {\n          return _ref.apply(this, arguments);\n        };\n      }());\n    },\n    //执行确定脚本\n    runCustomEvent: function runCustomEvent(event, input_param, json) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, data_json, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                $this = _this7;\n                data_json = _base.default.encode(JSON.stringify(json));\n                dataInfo = {\n                  ed_type: 0,\n                  start_transaction: '',\n                  class_id: _this7.$data.head_styledef.form.clsId,\n                  class_name: '',\n                  event_id: _this7.$data.param.After_OK_Event.ID,\n                  event_name: '',\n                  data_obj_id: '',\n                  obj_attr: '',\n                  prj_id: '',\n                  ref_cls_id: '',\n                  rel_obj_id: '',\n                  user_login: '',\n                  data_json: data_json,\n                  compose_info: '',\n                  ext_info: '',\n                  global_attr: '',\n                  input_param: input_param\n                }; // console.log(dataInfo);\n                _this7.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n                  __f__(\"log\", res, \" at pages/modal/5600.vue:805\");\n                  if (res.err_code == 0) {\n                    var result = res.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 _tip2 = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                      if (_tip2) uni.showModal({\n                        title: '提示',\n                        content: _tip2,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      if (result.result_type == 0) {\n                        if (result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"insert_subtable_page_row\") {\n                              //码盘中\n                              var value = item.value;\n                              //加载已经码盘数据\n                              $this.viewAceionRow(value, 'add');\n                              //清空条码内容\n                              $this.$data.head_styledef.form.items.forEach(function (item, index) {\n                                if (item.fieldId != \"S_CNTR_CODE\") {\n                                  item.value = '';\n                                  item.oldvalue = '';\n                                  $this.$data.head_styledef.form.model[item.fieldId] = '';\n                                }\n                              });\n                              //清除正在码盘中成功的数据\n                              $this.$data.detail1StyleDefList.forEach(function (style, index) {\n                                if (style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value) {\n                                  $this.$data.detail1StyleDefList.splice(index, 1);\n                                  return;\n                                }\n                              });\n                              // this.detail2StyleDefList=[];\n                              uni.showModal({\n                                title: \"提示\",\n                                content: \"码盘成功\",\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          });\n                        } else {\n                          if ($this.$data.param.After_OK_Event.ID != event.ID) {\n                            //判断当前事件是否是确定后事件\n                            $this.sava($this.$data.param.After_OK_Event); //执行确定后事件\n                          }\n                        }\n                      } else {\n                        // $this.$data.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: res.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n                  uni.showModal({\n                    title: \"错误8.1\",\n                    content: \"执行“确定后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJjdXJyZW50Iiwib25Mb2FkIiwidW5pIiwibWV0aG9kcyIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCIkdGhpcyIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJ1aV9zdHlsZV9pZCIsInN0eWxlZGVmIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsIkRldGFpbDFfVUlzdHlsZUdldEluZm8iLCJEZXRhaWwyX1VJc3R5bGVHZXRJbmZvIiwib250YXAiLCJnZXRBcHAiLCJpdGVtIiwic2V0VGltZW91dCIsIm9uRW50ZXJDaGFuZ2UiLCJvbkNoYW5nZSIsIm9ial9hdHRyIiwiaW5wdXRfcGFyYW0iLCJKU09OIiwiT2JqZWN0IiwiYXR0ciIsInZhbHVlIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiY2xhc3NfbmFtZSIsImV2ZW50X2lkIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsInJlc3VsdCIsInN1Y2Nlc3MiLCJ0aXAiLCJ2aWV3QWNlaW9uUm93Iiwic3R5bGVTdHIiLCJkZXRhaWxTdHlsZSIsImVsZSIsInZpZXdBY2Vpb25Db250ZW50IiwiY29udCIsIm9uQ2xpY2tJdGVtIiwib25EZXRhaWwxRW50ZXJDaGFuZ2UiLCJkZWxJdGVtIiwiZGVsRGF0YU9iaiIsIm9ial9pZCIsIm9rIiwic2F2YSIsImhlYWRfYXR0ciIsInN0eWxlIiwiZGV0YWlsX2F0dHIiLCJkZXRhaWxBdHRyTGlzdCIsImpzb25saXN0IiwiaWQiLCJhdHRycyIsInJ1bkN1c3RvbUV2ZW50IiwiY2FuY2VsIiwiZGVsdGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQTBVQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBQ0E7RUFDQUE7SUFDQUM7RUFDQTtFQUNBQztJQUNBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO1FBQ0FDO1VBQ0FDO1FBQ0E7TUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBO01BQ0FDO01BQ0FMO0lBQ0E7RUFDQTtFQUNBTTtJQUNBO0lBQ0FDO01BQUFaO0lBQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQ0E7O0VBQ0FhO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQ0FDO2dCQUNBQztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUNBO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO3NCQUNBO3NCQUNBQztzQkFDQTtzQkFDQTtvQkFDQTtvQkFDQUo7b0JBQ0E7b0JBQ0E7a0JBRUE7b0JBQ0FIO3NCQUFBWjtzQkFBQW9CO3NCQUFBQztzQkFBQUM7b0JB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QkFBQUM7c0JBQUE7c0JBRUE7d0JBQ0E7MEJBQ0E2Qjs0QkFDQTs4QkFBQTs4QkFDQTs4QkFDQTs4QkFDQXBDOzhCQUNBOzhCQUNBQTtnQ0FDQTtrQ0FDQVk7a0NBQ0FBO2tDQUNBWjtnQ0FDQTs4QkFDQTs4QkFDQTs4QkFDQUE7Z0NBQ0E7a0NBQ0FBO2tDQUNBO2dDQUNBOzhCQUNBOzhCQUNBOzhCQUNBSDtnQ0FBQVo7Z0NBQUFvQjtnQ0FBQUM7Z0NBQUFDOzhCQUFBOzRCQUNBOzBCQUNBO3dCQUNBOzBCQUNBOzRCQUFBOzRCQUNBUDswQkFDQTt3QkFDQTtzQkFDQTt3QkFDQTt3QkFDQTswQkFDQUg7NEJBQUFaOzRCQUFBb0I7NEJBQUFDOzRCQUFBQzswQkFBQTt3QkFDQTtzQkFDQTtvQkFDQTtrQkFDQTtvQkFDQVY7c0JBQUFaO3NCQUFBb0I7c0JBQUFDO3NCQUFBQztvQkFBQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQVY7b0JBQUFaO29CQUFBb0I7b0JBQUFDO29CQUFBQztrQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBRUFxRDtNQUFBO01BQ0EvRDtRQUNBZ0U7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuLnYtaGVhZFN0eWxlIC50eHRfdGl0bGV7XHJcbiAgZm9udC1zaXplOiAzNHJweDtcclxuICB0ZXh0LWFsaWduOiByaWdodDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgdmVydGljYWwtYWxpZ246IDEycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIGlucHV0e1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHQvKiBib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1OyAqL1xyXG5cdC8qIHdpZHRoOiA2NSU7ICovXHJcblx0d2lkdGg6IDg1JTsgICAgXHJcblx0aGVpZ2h0OiA1MnJweDtcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDRycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEycnB4O1xyXG59XHJcbi5pbnB1dC13cmFwcGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA2NSU7ICAgIFxyXG5cdGxpbmUtaGVpZ2h0OiAyMnJweDtcbn1cclxuW252dWVdIHVuaS12aWV3IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyOiAwIHNvbGlkICMwMDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cclxuLnVuaS1pbnB1dCB7XHJcblx0LyogYm9yZGVyOiBub25lOyAqL1xufVxyXG4udW5pLWljb257XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG5cdHdpZHRoOiA4JTtcbiAgICBmb250LWZhbWlseTogdW5paWNvbnM7XG4gICAgZm9udC1zaXplOiA0MHJweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAvKiB3aWR0aDogNDhycHg7ICovXG4gICAgaGVpZ2h0OiA0OHJweDtcbiAgICBsaW5lLWhlaWdodDogNDhycHg7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dmVydGljYWwtYWxpZ246IDE4cnB4O1xufVxyXG4udmlldy1jb250ZW50e1xyXG5cdG1pbi1oZWlnaHQ6IDc2MHJweDtcclxuXHQvKiBib3JkZXI6MXB4IHNvbGlkIHJlZDsgKi9cclxufVxyXG4uZHYtcGFuZWx7XG4gICAgYmFja2dyb3VuZC1jb2xvcjojRUFGRUQ5O1xuICAgIHBhZGRpbmc6IDIwcnB4IDIwcnB4IDRycHggMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEycnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG5cdHRleHQtYWxpZ246IHJpZ2h0O1xyXG59XG4uZHYtcGFuZWwtaW5wdXR7XHJcblx0d2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XHJcbi5kdi1wYW5lbCAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4uZHYtcGFuZWwgaW5wdXR7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHR3aWR0aDogNjglOyBcclxuXHRoZWlnaHQ6IDUycnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHJweDtcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDdweCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDZycHggOHJweCA4cnB4O1xyXG5cdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0bWFyZ2luLXRvcDogMHJweDtcclxufVxyXG4uZHYtcGFuZWwgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdGZvbnQtc2l6ZTogMTBycHg7XHJcbn1cclxuLmR2LXBhbmVsIC5mb3JtLWl0ZW0tc3BhbntcclxuXHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XHJcbiAgICBjb2xvcjogIzJkOGNmMDtcclxuXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG5cdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR3aWR0aDogY2FsYygxMDAlIC0gMTAwcHgpO1xyXG59XHJcblxuLmR2LXBhbmVsLWJ1dHRvbntcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0bWFyZ2luLXJpZ2h0OiAyMHJweDtcbn1cclxuLmR2LXBhbmVsLWJ1dHRvbiBidXR0b24geyAgICBcclxuXHRsaW5lLWhlaWdodDogMS44O1xuICAgIGJvcmRlcjogbm9uZTtcclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG59XHJcbmJ1dHRvbi5idG5fY2FuY2VsIHtcclxuXHR3aWR0aDo0OS41JTtcclxuXHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRwYWRkaW5nOiAyMHJweDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX2FkZCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5sb2dvIHtcclxuXHRoZWlnaHQ6IDUwcHg7XG4gICAgd2lkdGg6IDIzMHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luOiAzOCUgYXV0bztcclxufVxyXG4uZHYtYm9yZGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcclxufVxuPC9zdHlsZT5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5cdC5kZW1vLXVuaS1yb3cge1xuXHRcdG1hcmdpbi1ib3R0b206IDBweDtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQ6OnYtZGVlcCAudW5pLXJvdyB7XG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xuXHR9XHJcblx0LnZpZXctdGFicGFnZSA6OnYtZGVlcCAudW5pLXJvdyAge1xuXHRcdG1hcmdpbi1ib3R0b206IDVweDtcblx0fVxuXHQuZGVtby11bmktY29sIHtcblx0XHRoZWlnaHQ6IDM2cHg7XG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xuXHR9XHJcblx0LmRlbW8tdW5pLXJvdyAudW5pLWlucHV0e1xyXG5cdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDEyMHB4KTtcclxuXHR9XG48L3N0eWxlPlxuXG5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdDwhLS0g6KGo5aS05qC35byPIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWhlYWRTdHlsZVwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1wiID5cclxuXHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XG5cdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcucHJlZml4XCIgXHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnByZWZpeF1cIlxuXHRcdFx0XHRcdEBjbGljaz1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWlucHV0XCJcclxuXHRcdFx0XHRcdDp0eXBlPVwiaXRlbS5uYW1lPT0nSW5wdXQnPyd0ZXh0JzondGV4dCdcIiBcclxuXHRcdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiIFxyXG5cdFx0XHRcdFx0OmZvY3VzPVwiZm9jdXNNYXRlcmlhXCJcclxuXHRcdFx0XHRcdEBmb2N1cz1cIm9udGFwKGl0ZW0pXCIgXG5cdFx0XHRcdFx0QGtleXVwLmVudGVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiXG5cdFx0XHRcdFx0QGJsdXI9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCJcclxuXHRcdFx0XHQvPlxuXHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnN1ZmZpeFwiIFxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaWNvblwiIFxyXG5cdFx0XHRcdFx0OmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5zdWZmaXhdXCJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHQgICAgPC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWNvbnRlbnRcIj5cclxuXHRcdFx0PCEtLSDpobXnrb4gLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiZHYtdGFiXCI+XHJcblx0XHRcdFx0PHVuaS1zZWdtZW50ZWQtY29udHJvbCA6Y3VycmVudD1cImN1cnJlbnRcIiA6dmFsdWVzPVwiaXRlbXNcIiBAY2xpY2tJdGVtPVwib25DbGlja0l0ZW1cIlxyXG5cdFx0XHRcdFx0c3R5bGVUeXBlPVwiYnV0dG9uXCI+XHJcblx0XHRcdFx0PC91bmktc2VnbWVudGVkLWNvbnRyb2w+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PCEtLSDmraPlnKjnoIHnm5ggLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidmlldy10YWJwYWdlXCIgdi1pZj1cImN1cnJlbnQ9PTBcIj5cclxuXHRcdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvXCIgdi1pZj1cImRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPT0wXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL21vYm94X2xvZ18yMDB4NDAucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcclxuXHRcdFx0XHQ8IS0tIDxkaXYgY2xhc3M9XCJkdi1wYW5lbFwiPlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtaW5wdXRcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiA+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPjExMTE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdCAgICAgICAgPGRpdiA+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPjExMTE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCA6c3Bhbj1cIjEyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID5mZmFhYTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGUgZHYtZm9ybS1pdGVtLWNvbFwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPmZmYWFhZmZhYWFmZmFhYWZmYWFhZmZhYWE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdj5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZSBkdi1mb3JtLWl0ZW0tY29sXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiA+ZnNmZWdmczwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGUgZHYtZm9ybS1pdGVtLWNvbFwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwidW5pLWlucHV0IGlucHV0LW1hcmdpbnRvcFwiIHN0eWxlPVwid2lkdGg6IGNhbGMoMTAwJSAtIDEyMHB4KTtcIi8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJ3YXJuXCIgQHRhcD1cImRlbEl0ZW0oMClcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PiAtLT5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWxcIiB2LWZvcj1cIihzdHlsZSxpaSkgaW4gZGV0YWlsMVN0eWxlRGVmTGlzdFwiPlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtaW5wdXRcIj5cclxuXHRcdFx0XHQgICAgICAgIDxkaXYgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gc3R5bGUuZm9ybS5pdGVtc1wiPlxyXG5cdFx0XHRcdCAgICAgICAgICAgIDwhLS0g5pmu6YCa5biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJpdGVtLm5hbWU9PSdJbnB1dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cIml0ZW0uZGlzYWJsZWRcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIhaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdDp0eXBlPVwiaXRlbS5uYW1lPT0nSW5wdXROdW1iZXInPydudW1iZXInOid0ZXh0J1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6dmFsdWU9XCJpdGVtLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6cGxhY2Vob2xkZXI9XCJpdGVtLnBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdCAgICAgICAgICAgIDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6c3Bhbj1cIjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIiFjb2xzLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp0eXBlPVwiY29scy5uYW1lPT0nSW5wdXROdW1iZXInPydudW1iZXInOid0ZXh0J1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnZhbHVlPVwiY29scy52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6cGxhY2Vob2xkZXI9XCJjb2xzLnBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdCAgICAgICAgPC9kaXY+XHJcblx0XHRcdFx0ICAgICA8L2Rpdj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJ3YXJuXCIgQHRhcD1cImRlbEl0ZW0oMClcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PCEtLSDlt7LnoIHnm5ggLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidmlldy10YWJwYWdlMlwiIHYtaWY9XCJjdXJyZW50PT0xXCI+XHJcblx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb1wiIHYtaWY9XCJkZXRhaWwyU3R5bGVEZWZMaXN0Lmxlbmd0aD09MFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9tb2JveF9sb2dfMjAweDQwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDJTdHlsZURlZkxpc3RcIj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0ICAgICAgICA8ZGl2IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHN0eWxlLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHQgICAgICAgICAgICA8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lIT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0ICAgICAgICAgICAgPCEtLSDmoIXmoLzluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIiB2LWlmPVwiaXRlbS5uYW1lPT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgXHJcblx0XHRcdFx0XHRcdFx0XHRcdDpzcGFuPVwiMjQgLyBpdGVtLnNldHRpbmcuY29sXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0di1mb3I9XCIoY29scyxrZXkpIGluIGl0ZW0uc2V0dGluZy5jb2xMaXN0XCIgXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6Y29scy5sYWJlbFdpZHRoKydweCd9XCI+e3tjb2xzLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdCAgICAgICAgPC9kaXY+XHJcblx0XHRcdFx0ICAgIDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0IFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxEYXRhT2JqKHN0eWxlLGlpKVwiPuWIoOmZpDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3PlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cImNhbmNlbFwiIGNsYXNzPVwiYnRuX2NhbmNlbFwiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0ICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAdGFwPVwib2tcIiBjbGFzcz1cImJ0bl9hZGRcIj7noa7lrpo8L2J1dHRvbj5cclxuXHRcdDwvdmlldz5cbiAgICA8L3ZpZXc+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxyXG5pbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1vZHVsZXM6e1xyXG5cdEJhc2U2NCxcclxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XHJcblx0ICB0aXRsZTon56CB55uYJyxcbiAgICAgIHBhcmFtOiB7fSxcclxuXHQgIGZvY3VzTWF0ZXJpYTpmYWxzZSxcclxuXHQgIGhlYWRfc3R5bGVkZWY6e1xyXG5cdFx0Zm9ybTp7XHJcblx0XHRcdGl0ZW1zOltdXHJcblx0XHR9XHJcblx0ICB9LFxuICAgICAgZGV0YWlsMV9zdHlsZWRlZjp7fSxcbiAgICAgIGRldGFpbDFTdHlsZURlZkxpc3Q6W10sXG4gICAgICBkZXRhaWwyX3N0eWxlZGVmOnt9LFxuICAgICAgZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSxcclxuXHQgIC8vIOWIhuauteWZqOaVsOaNrlxyXG5cdCAgY3VycmVudDogMCxcclxuXHQgIGl0ZW1zOiBbJ+ato+WcqOeggeebmCcsICflt7LnoIHnm5gnXSxcbiAgICB9O1xuICB9LFxyXG4gIG9uTG9hZChvcHRpb25zKSB7XHJcblx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0dW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBvcHRpb25zLnRpdGxlbmFtZX0pOyAvL+iuvue9rumhtumDqOagh+mimCBcclxuXHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnBhcmFtKTtcclxuXHQgLy/ojrflj5ZDR19EZXRhaWzvvIjmiZjnm5jotKflk4HooajvvInmlbDmja7nsbvnmoToh6rlrprkuYnooajljZXlj4LmlbBcclxuXHR0aGlzLkhlYWRfVUlTdHlsZUdldEluZm8oJ0NHX0RldGFpbCcsdGhpcy4kZGF0YS5wYXJhbS5IZWFkX1BhbmVsX1N0eWxlLklEKTtcclxuXHR0aGlzLkRldGFpbDFfVUlzdHlsZUdldEluZm8oJ0NHX0RldGFpbCcsdGhpcy4kZGF0YS5wYXJhbS5EZXRhaWxfTGlzdF9QYW5lbDFfU3R5bGUuSUQpO1xyXG5cdHRoaXMuRGV0YWlsMl9VSXN0eWxlR2V0SW5mbygnQ0dfRGV0YWlsJyx0aGlzLiRkYXRhLnBhcmFtLkRldGFpbF9MaXN0X1BhbmVsMl9TdHlsZS5JRCk7XHJcblx0Ly/pobXpnaLliJ3lp4vljJbojrflj5bnhKbngrlcclxuXHQvLyB0aGlzLmZvY3VzTWF0ZXJpYT10cnVlOyBcclxuICB9LFx0XG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gdGhpcy5mb3JtID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMVwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcbiAgICBhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vIGxldCBhYSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxuICAgIGFzeW5jIERldGFpbDJfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cdFxyXG5cdG9udGFwKGl0ZW0peyAvL+aJq+eggeWKn+iDvVxyXG5cdFx0Ly8gdmFyICRlbGUgPSBlO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcclxuXHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XHJcblx0XHRcdGl0ZW0udmFsdWUgPSByZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0dW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0ICAgICAgJHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHRcdGlmKGl0ZW0udmFsdWUpeyAvL+esrOS4gOS4qui+k+WFpeahhuS4jeS4uuepulxyXG5cdFx0XHRcdFx0JHRoaXMuZm9jdXNNYXRlcmlhID0gdHJ1ZTsgLy/liJ3lp4vljJbvvIznrKzkuozkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0Ly8gXHQkdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgLy/nrKzkuozkuKrovpPlhaXmoYbojrflj5bnhKbngrlcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0fSwxMDApO1xyXG5cdFx0XHRcdFx0Ly8gfSw1MDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0XHQgICAgLy8gfVxyXG5cdFx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0XHQgICAgLy8gfVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH0sXHJcblx0b25FbnRlckNoYW5nZShpdGVtKXsgLy/lm57ovabvvIzngrnlh7vmjInpkq7vvIzlj5bmtojoioLngrnkuovku7ZcclxuXHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0aWYoaXRlbS5vbGR2YWx1ZSAhPSBpdGVtLnZhbHVlKXtcclxuXHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcclxuXHRcdCAgICBpZihvbkNoYW5nZUV2ZW50LmlkKXsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0ICAgICAgdGhpcy5vbkNoYW5nZShvbkNoYW5nZUV2ZW50KTsgXHJcblx0XHQgICAgfVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdCAgICAvLyB9XHJcblx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdCAgICAvLyB9XHJcblx0XHR9XHJcblx0fSxcclxuXHQvLyDlhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRhc3luYyBvbkNoYW5nZShldmVudCkge1xyXG5cdCAgICB0cnkge1xyXG5cdCAgICAgICAgaWYgKGV2ZW50LmlkKSB7XHJcblx0ICAgICAgICAgIHZhciBvYmpfYXR0ciA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdCAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0ICAgICAgICAgIHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0ICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXHJcblx0ICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmpfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdCAgICAgICAgICAgICAgICBhdHRyOiBhLFxyXG5cdCAgICAgICAgICAgICAgICB2YWx1ZTogb2JqX2F0dHJbYV0gfHwgXCJcIixcclxuXHQgICAgICAgICAgICAgIH0pKVxyXG5cdCAgICAgICAgICAgIClcclxuXHQgICAgICAgICAgKTtcclxuXHRcdFx0ICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogJycsXHJcblx0ICAgICAgICAgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdCAgICAgICAgICAgIGV2ZW50X2lkOiBldmVudC5pZCxcclxuXHRcdFx0XHRldmVudF9uYW1lOiAnJyxcclxuXHRcdFx0XHRkYXRhX29ial9pZDogJycsXHJcblx0ICAgICAgICAgICAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0XHRcdHByal9pZDogJycsXHJcblx0XHRcdFx0cmVmX2Nsc19pZDogJycsXHJcblx0XHRcdFx0cmVsX29ial9pZDogJycsXHJcblx0XHRcdFx0dXNlcl9sb2dpbjogJycsXHJcblx0XHRcdFx0ZGF0YV9qc29uOiAnJyxcclxuXHRcdFx0XHRjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0XHRcdGV4dF9pbmZvOiAnJyxcclxuXHRcdFx0XHRnbG9iYWxfYXR0cjogJycsXHJcblx0ICAgICAgICAgICAgaW5wdXRfcGFyYW06IGlucHV0X3BhcmFtLFxyXG5cdCAgICAgICAgICB9O1xyXG5cdFx0XHQgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDsgXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0ICAgIGlmIChyZXN1bHQucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK3Jlc3VsdC5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdGxldCB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5pbmZvIDogcmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRpZihyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCAmJiByZXN1bHQuYWN0aW9uKXtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImluc2VydF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgLy/noIHnm5jkuK1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvblJvdyh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX2NvbnRlbnRcIil7ICAvL+W3sueggeebmFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5jbGVhciA9PSB0cnVlICYmICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPjApeyAvL+WIpOaWreaYr+WQpua4heepuumhteetvuWGheWuuSzmraPlnKjnoIHnm5jmmK/lkKbmnInmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfns7vnu5/mo4DmtYvliLDmnInmraPlnKjnoIHnm5jkuK3nmoTotKflk4HvvIznu6fnu63mk43kvZzkvJrmuIXnqbrvvIzmmK/lkKbnu6fnu63vvJ8nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRpZihyZXN1bHQuaW5mbyl7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuM1wiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdCAgXHRcdFxyXG5cdFx0XHQgIFx0fWVsc2V7XHJcblx0XHRcdCAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNFwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdCAgXHR9XHJcblx0XHRcdCAgfSkuY2F0Y2goZXg9PntcclxuXHRcdFx0ICBcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0ICBcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdCAgfSk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH0gY2F0Y2ggKGV4KSB7XHJcblx0ICAgICAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4yXCIsY29udGVudDpcIuaJp+ihjOKAnOWGheWuueWPmOWMluWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcclxuXHQgICAgfVxyXG5cdH0sXHJcblx0Ly/liqDovb3mraPlnKjnoIHnm5jlhoXlrrlcclxuXHR2aWV3QWNlaW9uUm93KGRhdGEsdHlwZSl7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHQgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdGlmKHR5cGUpeyAvL+ehruWumuWQjuiEmuacrOi/m+WFpeWKoOi9veW3sueggeebmOaVsOaNrlxyXG5cdFx0ICAgIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdH1cclxuXHQgICAgdmFyIGRldGFpbFN0eWxlID0gSlNPTi5wYXJzZShzdHlsZVN0cik7XHJcblx0ICAgIGRhdGEucm93LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdCAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+e1xyXG5cdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICB9KTtcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICB9KTtcclxuXHQgICAgfSk7XHJcblx0XHRpZih0eXBlKXsgLy/noa7lrprlkI7ohJrmnKzov5vlhaXliqDovb3lt7LnoIHnm5jmlbDmja5cclxuXHRcdCAgICBkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gZGF0YS5yb3cuaWQ7XHJcblx0XHQgICAgdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0ICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdCk7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly/liqDovb3lt7LnoIHnm5jlhoXlrrlcclxuXHR2aWV3QWNlaW9uQ29udGVudChkYXRhKXtcclxuXHQgICAgZGF0YS5jb250ZW50LmZvckVhY2goY29udD0+e1xyXG5cdCAgICAgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHQgICAgICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdCAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IGNvbnQuaWQ7XHJcblx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdCAgICAgICAgICBkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlPT57IFxyXG5cdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICB9KTtcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfSk7XHJcblx0ICAgICAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdCk7XHJcblx0fSxcblx0b25DbGlja0l0ZW0oZSkgeyAvL+mAieaLqemhteetvlxyXG5cdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHR0aGlzLmN1cnJlbnQgPSBlLmN1cnJlbnRJbmRleFxyXG5cdH0sXHJcblx0b25EZXRhaWwxRW50ZXJDaGFuZ2UoaXRlbSl7ICAvL+eggeebmOS4reagt+W8j+Wbnui9puS6i+S7tlxyXG5cdCAgICBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHR9LFxyXG5cdGRlbEl0ZW0oaW5kZXgpeyAgLy/liKDpmaTnoIHnm5jkuK3moLflvI/pnaLmnb9cclxuXHQgICAgdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHR9LFxuICAgIGRlbERhdGFPYmooc3R5bGUsaW5kZXgpeyAgLy/liKDpmaTlt7LnoIHnm5jmlbBcbiAgICAgIC8vIGNvbnNvbGUubG9nKHN0eWxlKTtcclxuXHQgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0ICB1bmkuc2hvd01vZGFsKHtcclxuXHQgIFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdCAgXHRjb250ZW50OiAn56Gu5a6a5Yig6Zmk6K+l5bey56CB55uY5pWw5o2u77yBJyxcclxuXHQgIFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdCAgXHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdHZhciBvYmpJRD1zdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmKCFzdHlsZS5mb3JtLm9iaklkLmluY2x1ZGVzKCd7JykpIG9iaklEID0gJ3snK3N0eWxlLmZvcm0ub2JqSWQrJ30nO1xyXG5cdFx0XHRcdCAgICAgICAgICBcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHRcdGNsYXNzX2lkOnN0eWxlLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRcdFx0b2JqX2lkOm9iaklEXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9iakRlbCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LDEpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xuICAgICAgXG4gICAgfSxcclxuXHRcclxuXHRvaygpeyAvL+ehruWumlxyXG5cdFx0Ly8gdmFyICR0aGlzID0gdGhpcztcclxuXHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgLy8gICAgY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7XHJcblx0ICAgIGlmKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+aYr+WQpuacieehruWumuWJjeS6i+S7tlxyXG5cdCAgICAgICAgdGhpcy5zYXZhKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgICAgZWxzZSBpZih0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KSAgLy/mmK/lkKbmnInnoa7lrprlkI7kuovku7ZcclxuXHQgICAgICAgIHRoaXMuc2F2YSh0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KTtcclxuXHR9LFxyXG5cdHNhdmEoZXZlbnQpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHQgICAgaWYodGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MCl7XHJcblx0ICAgICAgdW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5rKh5pyJ5q2j5Zyo56CB55uY55qE5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cdCAgICB9XHJcblx0ICAgIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0ICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHQgICAgdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdCAgICAvL+iOt+WPluato+WcqOeggeebmOWxnuaAp1xyXG5cdCAgICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHQgICAgdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHQgICAgICB2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICAgIGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0ICAgICAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0ICAgICAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfWVsc2VcclxuXHQgICAgICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgICAgfSk7XHJcblx0ICAgICAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0ICAgIFxyXG5cdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShcclxuXHRcdCAgICAgIE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICB9KSlcclxuXHRcdCAgICApXHJcblx0XHQpO1xyXG5cdFx0IHZhciBqc29ubGlzdD1bXTtcclxuXHRcdGRldGFpbEF0dHJMaXN0LmZvckVhY2goYXR0cj0+e1xyXG5cdFx0ICAgIGpzb25saXN0LnB1c2goe1xyXG5cdFx0ICAgICAgaWQ6JycsXHJcblx0XHQgICAgICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0ICAgICAgfSkpXHJcblx0XHQgICAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuXHRcdGpzb25saXN0LmZvckVhY2goYXN5bmMgKGpzb24sa2V5KT0+e1xyXG5cdFx0XHRhd2FpdCAkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uKTtcclxuXHRcdH0pO1xyXG5cdH0sXG4gICAgLy/miafooYznoa7lrprohJrmnKxcbiAgICBhc3luYyBydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YV9qc29uID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShqc29uKVxyXG5cdFx0KTtcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IDAsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcclxuXHRcdCAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0ICBjbGFzc19uYW1lOiAnJyxcclxuXHRcdCAgZXZlbnRfaWQ6IHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgIG9ial9hdHRyOiAnJyxcclxuXHRcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgZGF0YV9qc29uOiBkYXRhX2pzb24sXHJcblx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgIGV4dF9pbmZvOiAnJyxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6ICcnLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXM9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0aWYgKHJlcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IHJlcy5yZXN1bHQ7IFxyXG5cdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0bGV0IHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXtcclxuXHRcdFx0XHRcdCAgaWYocmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdFx0XHRcdCAgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImluc2VydF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgLy/noIHnm5jkuK1cclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdC8v5Yqg6L295bey57uP56CB55uY5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvblJvdyh2YWx1ZSwnYWRkJyk7XHJcblx0XHRcdFx0XHRcdFx0Ly/muIXnqbrmnaHnoIHlhoXlrrlcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5maWVsZElkICE9IFwiU19DTlRSX0NPREVcIil7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGl0ZW0udmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgaXRlbS5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbaXRlbS5maWVsZElkXSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvL+a4hemZpOato+WcqOeggeebmOS4reaIkOWKn+eahOaVsOaNrlxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKHN0eWxlLGluZGV4KT0+e1xuXHRcdFx0XHRcdFx0XHQgIGlmKHN0eWxlLmZvcm0uaXRlbXNbMF0uZmllbGRJZCA9PSBqc29uLmF0dHJzWzBdLmF0dHIgJiYgc3R5bGUuZm9ybS5pdGVtc1swXS52YWx1ZSA9PSBqc29uLmF0dHJzWzBdLnZhbHVlKXsgXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIueggeebmOaIkOWKn1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQgIH1lbHNle1xyXG5cdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCAhPSBldmVudC5JRCl7IC8v5Yik5pat5b2T5YmN5LqL5Lu25piv5ZCm5piv56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuc2F2YSgkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7IC8v5omn6KGM56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6cmVzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgbGV0IHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5lcnJNc2c7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpcIuaJp+ihjOKAnOehruWumuWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcbn07XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\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//\nvar _default = {\n  modules: {\n    Base64: _base.default\n  },\n  data: function data() {\n    return {\n      title: '码盘',\n      param: {},\n      focusMateria: false,\n      head_styledef: {\n        form: {\n          items: []\n        }\n      },\n      detail1_styledef: {},\n      detail1StyleDefList: [],\n      detail2_styledef: {},\n      detail2StyleDefList: [],\n      // 分段器数据\n      current: 0,\n      items: ['正在码盘', '已码盘']\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    this.$data.param = JSON.parse(options.param);\n    // console.log(this.$data.param);\n    //获取CG_Detail(托盘货品表)数据类的自定义表单参数\n    this.Head_UIStyleGetInfo('CG_Detail', this.$data.param.Head_Panel_Style.ID);\n    this.Detail1_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel1_Style.ID);\n    this.Detail2_UIstyleGetInfo('CG_Detail', this.$data.param.Detail_List_Panel2_Style.ID);\n    //页面初始化获取焦点\n    // this.focusMateria=true; \n  },\n\n  methods: {\n    Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // this.form = this.head_styledef.form.model;\n                    // console.log($this.$data.head_styledef);\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 _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n      var _this2 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this2;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\n                _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n                  // console.log(ret);\n                  if (ret.err_code == 0) {\n                    var styledef = \"\";\n                    if (ret.result.style_def) {\n                      //mobox2的style_def是json字符串\n                      styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n                      //mobox3的style_def是base64字符串\n                      if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n                    }\n                    $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.detail1_styledef);\n                    // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n                    // let 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 _context2.stop();\n            }\n          }\n        }, _callee2);\n      }))();\n    },\n    Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n        var $this, dataInfo;\n        return _regenerator.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                //获取自定义表单样式\n                $this = _this3;\n                dataInfo = {\n                  class_id: class_id,\n                  ui_style_id: style_id\n                };\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.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n                    // console.log($this.$data.detail2_styledef);\n                  } else {\n                    uni.showModal({\n                      title: \"错误3\",\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: \"错误3.1\",\n                    content: ex.errMsg,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 3:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3);\n      }))();\n    },\n    ontap: function ontap(item) {\n      var _this4 = this;\n      //扫码功能\n      // var $ele = e;\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/5600.vue:462\");\n        item.value = result.decodedata;\n        uni.hideKeyboard();\n        var $this = _this4;\n        __f__(\"log\", item, \" at pages/modal/5600.vue:467\");\n        if (item.oldvalue != item.value) {\n          item.oldvalue = item.value;\n          var attr = item.fieldId;\n          _this4.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          }\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        }\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 _this5 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n        var obj_attr, input_param, $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                    obj_attr = _this5.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 = _this5;\n                    dataInfo = {\n                      ed_type: 0,\n                      start_transaction: '',\n                      class_id: _this5.$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                    _this5.$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 == \"insert_subtable_page_row\") {\n                                //码盘中\n                                var value = item.value;\n                                $this.viewAceionRow(value);\n                              } else if (item.action_type == \"set_subtable_page_content\") {\n                                //已码盘\n                                var value = item.value;\n                                if (value.clear == true && $this.$data.detail1StyleDefList.length > 0) {\n                                  //判断是否清空页签内容,正在码盘是否有数据\n                                  uni.showModal({\n                                    title: '提示',\n                                    content: '系统检测到有正在码盘中的货品,继续操作会清空,是否继续?',\n                                    success: function success(res) {\n                                      if (res.confirm) {\n                                        $this.$data.detail1StyleDefList = [];\n                                        $this.$data.detail2StyleDefList = [];\n                                        $this.viewAceionContent(value);\n                                      } else if (res.cancel) {\n                                        $this.$data.detail2StyleDefList = [];\n                                        $this.viewAceionContent(value);\n                                      }\n                                    }\n                                  });\n                                } else {\n                                  $this.$data.detail2StyleDefList = [];\n                                  $this.viewAceionContent(value);\n                                }\n                              }\n                            });\n                          } else {\n                            // this.detail2StyleDefList=[];\n                            if (result.info) {\n                              uni.showModal({\n                                title: \"错误4.3\",\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 _context4.stop();\n            }\n          }\n        }, _callee4);\n      }))();\n    },\n    //加载正在码盘内容\n    viewAceionRow: function viewAceionRow(data, type) {\n      // console.log(data);\n      var styleStr = JSON.stringify(this.$data.detail1_styledef);\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        styleStr = JSON.stringify(this.$data.detail2_styledef);\n      }\n      var detailStyle = JSON.parse(styleStr);\n      data.row.attrs.forEach(function (attr) {\n        detailStyle.form.items.forEach(function (ele) {\n          if (ele.name != 'Layout') {\n            if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n              }\n            });\n          }\n        });\n      });\n      if (type) {\n        //确定后脚本进入加载已码盘数据\n        detailStyle.form.objId = data.row.id;\n        this.$data.detail2StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail2StyleDefList);\n      } else {\n        detailStyle.form.attrs = data.row.attrs;\n        this.$data.detail1StyleDefList.push(detailStyle);\n        // console.log(this.$data.detail1StyleDefList);\n      }\n    },\n    //加载已码盘内容\n    viewAceionContent: function viewAceionContent(data) {\n      var _this6 = this;\n      data.content.forEach(function (cont) {\n        var styleStr = JSON.stringify(_this6.$data.detail2_styledef);\n        var detailStyle = JSON.parse(styleStr);\n        detailStyle.form.objId = cont.id;\n        cont.attrs.forEach(function (attr) {\n          detailStyle.form.items.forEach(function (ele) {\n            if (ele.name != 'Layout') {\n              if (ele.fieldId == attr.attr) 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.attr) col.value = attr.value;\n                }\n              });\n            }\n          });\n        });\n        _this6.$data.detail2StyleDefList.push(detailStyle);\n      });\n      // console.log(this.detail2StyleDefList);\n    },\n    onClickItem: function onClickItem(e) {\n      //选择页签\n      // console.log(e);\n      this.current = e.currentIndex;\n    },\n    onDetail1EnterChange: function onDetail1EnterChange(item) {\n      //码盘中样式回车事件\n      __f__(\"log\", item, \" at pages/modal/5600.vue:676\");\n    },\n    delItem: function delItem(index) {\n      //删除码盘中样式面板\n      this.detail1StyleDefList.splice(index, 1);\n    },\n    delDataObj: function delDataObj(style, index) {\n      //删除已码盘数\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: style.form.clsId,\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                $this.detail2StyleDefList.splice(index, 1);\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"删除成功!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\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          } else if (res.cancel) {}\n        }\n      });\n    },\n    ok: function ok() {\n      //确定\n      // var $this = this;\n      // console.log(this.$data.param.Before_OK_Event);\n      //    console.log(this.$data.param.After_OK_Event);\n      if (this.$data.param.Before_OK_Event)\n        //是否有确定前事件\n        this.sava(this.$data.param.Before_OK_Event);else if (this.$data.param.After_OK_Event)\n        //是否有确定后事件\n        this.sava(this.$data.param.After_OK_Event);\n    },\n    sava: function sava(event) {\n      var $this = this;\n      if (this.$data.detail1StyleDefList.length == 0) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"没有正在码盘的数据!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return false;\n      }\n      //获取表头属性\n      var head_attr = {};\n      this.$data.head_styledef.form.items.forEach(function (item) {\n        head_attr[item.fieldId] = item.value;\n      });\n      // console.log(head_attr);\n      //获取正在码盘属性\n      var detailAttrList = [];\n      this.$data.detail1StyleDefList.forEach(function (style) {\n        var detail_attr = {};\n        style.form.items.forEach(function (item) {\n          if (item.name == \"Layout\") {\n            //判断是否是栅栏格式\n            item.setting.colList.forEach(function (cols) {\n              if (cols != null) detail_attr[cols.fieldId] = cols.value;\n            });\n          } else detail_attr[item.fieldId] = item.value;\n        });\n        detailAttrList.push(detail_attr);\n      });\n      // console.log(detailAttrList);\n      //获取正在码盘里没有显示的字段\n      this.$data.detail1StyleDefList.forEach(function (style) {\n        style.form.attrs.forEach(function (attr) {\n          for (var key in detailAttrList) {\n            var keys = Object.keys(detailAttrList[key]);\n            var isflag = true;\n            keys.forEach(function (ele) {\n              if (ele == attr.attr) isflag = false;\n            });\n            if (isflag) {\n              detailAttrList[attr.attr] = attr.value;\n            }\n          }\n        });\n      });\n      // console.log(detailAttrList);\n      //    return;\n      var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n        return {\n          attr: a,\n          value: head_attr[a] || \"\"\n        };\n      })));\n      var jsonlist = [];\n      detailAttrList.forEach(function (attr) {\n        jsonlist.push({\n          id: '',\n          attrs: Object.keys(attr).map(function (a) {\n            return {\n              attr: a,\n              value: attr[a] || \"\"\n            };\n          })\n        });\n      });\n      // console.log(jsonlist);\n      jsonlist.forEach( /*#__PURE__*/function () {\n        var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(json, key) {\n          return _regenerator.default.wrap(function _callee5$(_context5) {\n            while (1) {\n              switch (_context5.prev = _context5.next) {\n                case 0:\n                  _context5.next = 2;\n                  return $this.runCustomEvent(event, input_param, json);\n                case 2:\n                case \"end\":\n                  return _context5.stop();\n              }\n            }\n          }, _callee5);\n        }));\n        return function (_x, _x2) {\n          return _ref.apply(this, arguments);\n        };\n      }());\n    },\n    //执行确定脚本\n    runCustomEvent: function runCustomEvent(event, input_param, json) {\n      var _this7 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n        var $this, data_json, dataInfo;\n        return _regenerator.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                $this = _this7;\n                data_json = _base.default.encode(JSON.stringify(json));\n                dataInfo = {\n                  ed_type: 0,\n                  start_transaction: '',\n                  class_id: _this7.$data.head_styledef.form.clsId,\n                  class_name: '',\n                  event_id: _this7.$data.param.After_OK_Event.ID,\n                  event_name: '',\n                  data_obj_id: '',\n                  obj_attr: '',\n                  prj_id: '',\n                  ref_cls_id: '',\n                  rel_obj_id: '',\n                  user_login: '',\n                  data_json: data_json,\n                  compose_info: '',\n                  ext_info: '',\n                  global_attr: '',\n                  input_param: input_param\n                }; // console.log(dataInfo);\n                _this7.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n                  __f__(\"log\", res, \" at pages/modal/5600.vue:822\");\n                  if (res.err_code == 0) {\n                    var result = res.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 _tip2 = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n                      if (_tip2) uni.showModal({\n                        title: '提示',\n                        content: _tip2,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                      if (result.result_type == 0) {\n                        if (result.action) {\n                          result.action.forEach(function (item) {\n                            if (item.action_type == \"insert_subtable_page_row\") {\n                              //码盘中\n                              var value = item.value;\n                              //加载已经码盘数据\n                              $this.viewAceionRow(value, 'add');\n                              //清空条码内容\n                              $this.$data.head_styledef.form.items.forEach(function (item, index) {\n                                if (item.fieldId != \"S_CNTR_CODE\") {\n                                  item.value = '';\n                                  item.oldvalue = '';\n                                  $this.$data.head_styledef.form.model[item.fieldId] = '';\n                                }\n                              });\n                              //清除正在码盘中成功的数据\n                              $this.$data.detail1StyleDefList.forEach(function (style, index) {\n                                if (style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value) {\n                                  $this.$data.detail1StyleDefList.splice(index, 1);\n                                  return;\n                                }\n                              });\n                              // this.detail2StyleDefList=[];\n                              uni.showModal({\n                                title: \"提示\",\n                                content: \"码盘成功\",\n                                showCancel: false,\n                                confirmText: \"取消\"\n                              });\n                            }\n                          });\n                        } else {\n                          if ($this.$data.param.After_OK_Event.ID != event.ID) {\n                            //判断当前事件是否是确定后事件\n                            $this.sava($this.$data.param.After_OK_Event); //执行确定后事件\n                          }\n                        }\n                      } else {\n                        // $this.$data.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: res.err_msg,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  }\n                }).catch(function (ex) {\n                  var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n                  uni.showModal({\n                    title: \"错误8.1\",\n                    content: \"执行“确定后”事件失败:\" + tip,\n                    showCancel: false,\n                    confirmText: \"取消\"\n                  });\n                });\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6);\n      }))();\n    },\n    cancel: function cancel(e) {\n      //取消\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiZm9jdXNNYXRlcmlhIiwiaGVhZF9zdHlsZWRlZiIsImZvcm0iLCJpdGVtcyIsImRldGFpbDFfc3R5bGVkZWYiLCJkZXRhaWwxU3R5bGVEZWZMaXN0IiwiZGV0YWlsMl9zdHlsZWRlZiIsImRldGFpbDJTdHlsZURlZkxpc3QiLCJjdXJyZW50Iiwib25Mb2FkIiwidW5pIiwibWV0aG9kcyIsIkhlYWRfVUlTdHlsZUdldEluZm8iLCIkdGhpcyIsImRhdGFJbmZvIiwiY2xhc3NfaWQiLCJ1aV9zdHlsZV9pZCIsInN0eWxlZGVmIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsIkRldGFpbDFfVUlzdHlsZUdldEluZm8iLCJEZXRhaWwyX1VJc3R5bGVHZXRJbmZvIiwib250YXAiLCJnZXRBcHAiLCJpdGVtIiwic2V0VGltZW91dCIsIm9uRW50ZXJDaGFuZ2UiLCJvbkNoYW5nZSIsIm9ial9hdHRyIiwiaW5wdXRfcGFyYW0iLCJKU09OIiwiT2JqZWN0IiwiYXR0ciIsInZhbHVlIiwiZWRfdHlwZSIsInN0YXJ0X3RyYW5zYWN0aW9uIiwiY2xhc3NfbmFtZSIsImV2ZW50X2lkIiwiZXZlbnRfbmFtZSIsImRhdGFfb2JqX2lkIiwicHJqX2lkIiwicmVmX2Nsc19pZCIsInJlbF9vYmpfaWQiLCJ1c2VyX2xvZ2luIiwiZGF0YV9qc29uIiwiY29tcG9zZV9pbmZvIiwiZXh0X2luZm8iLCJnbG9iYWxfYXR0ciIsInJlc3VsdCIsInN1Y2Nlc3MiLCJ0aXAiLCJ2aWV3QWNlaW9uUm93Iiwic3R5bGVTdHIiLCJkZXRhaWxTdHlsZSIsImVsZSIsInZpZXdBY2Vpb25Db250ZW50IiwiY29udCIsIm9uQ2xpY2tJdGVtIiwib25EZXRhaWwxRW50ZXJDaGFuZ2UiLCJkZWxJdGVtIiwiZGVsRGF0YU9iaiIsIm9ial9pZCIsIm9rIiwic2F2YSIsImhlYWRfYXR0ciIsInN0eWxlIiwiZGV0YWlsX2F0dHIiLCJkZXRhaWxBdHRyTGlzdCIsImtleXMiLCJqc29ubGlzdCIsImlkIiwiYXR0cnMiLCJydW5DdXN0b21FdmVudCIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUEwVUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUNBO0VBQ0FBO0lBQ0FDO0VBQ0E7RUFDQUM7SUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztRQUNBQztVQUNBQztRQUNBO01BQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQTtNQUNBQztNQUNBTDtJQUNBO0VBQ0E7RUFDQU07SUFDQTtJQUNBQztNQUFBWjtJQUFBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUNBOztFQUNBYTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUNBQztnQkFDQUM7a0JBQ0FDO2tCQUNBQztnQkFDQTtnQkFDQTtrQkFDQTtrQkFDQTtvQkFDQTtvQkFDQTtzQkFDQTtzQkFDQUM7c0JBQ0E7c0JBQ0E7b0JBQ0E7b0JBQ0FKO29CQUNBO29CQUNBO2tCQUVBO29CQUNBSDtzQkFBQVo7c0JBQUFvQjtzQkFBQUM7c0JBQUFDO29CQUFBO2tCQUNBO2dCQUNBO2tCQUNBO2tCQUNBVjtvQkFBQVo7b0JBQUFvQjtvQkFBQUM7b0JBQUFDO2tCQUFBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFDQVI7Z0JBQ0FDO2tCQUNBQztrQkFDQUM7Z0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7c0JBQ0E7c0JBQ0FDO3NCQUNBO3NCQUNBO29CQUNBO29CQUNBSjtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtrQkFFQTtvQkFDQUg7c0JBQUFaO3NCQUFBb0I7c0JBQUFDO3NCQUFBQztvQkFBQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQVY7b0JBQUFaO29CQUFBb0I7b0JBQUFDO29CQUFBQztrQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FFO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQ0FUO2dCQUNBQztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUNBO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO3NCQUNBO3NCQUNBQztzQkFDQTtzQkFDQTtvQkFDQTtvQkFDQUo7b0JBQ0E7a0JBRUE7b0JBQ0FIO3NCQUFBWjtzQkFBQW9CO3NCQUFBQztzQkFBQUM7b0JBQUE7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0FWO29CQUFBWjtvQkFBQW9CO29CQUFBQztvQkFBQUM7a0JBQUE7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUVBRztNQUFBO01BQUE7TUFDQTtNQUNBO01BQ0FDO1FBQ0E7UUFDQUM7UUFDQWY7UUFFQTtRQUNBO1FBQ0E7VUFDQWU7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFFQTtZQUFBO1lBQ0FaO1VBQ0E7VUFDQTtZQUFBO1lBQ0FBO1lB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QUFBQztzQkFBQSxRQUNBVjt3QkFBQVo7d0JBQUFvQjt3QkFBQUM7d0JBQUFDO3NCQUFBO3NCQUNBO29CQUNBO3NCQUNBO3NCQUNBO3dCQUFBdEI7d0JBQUFvQjt3QkFBQUM7d0JBQUFDO3NCQUFBO3NCQUVBO3dCQUNBOzBCQUNBNkI7NEJBQ0E7OEJBQUE7OEJBQ0E7OEJBQ0E7OEJBQ0FwQzs4QkFDQTs4QkFDQUE7Z0NBQ0E7a0NBQ0FZO2tDQUNBQTtrQ0FDQVo7Z0NBQ0E7OEJBQ0E7OEJBQ0E7OEJBQ0FBO2dDQUNBO2tDQUNBQTtrQ0FDQTtnQ0FDQTs4QkFDQTs4QkFDQTs4QkFDQUg7Z0NBQUFaO2dDQUFBb0I7Z0NBQUFDO2dDQUFBQzs4QkFBQTs0QkFDQTswQkFDQTt3QkFDQTswQkFDQTs0QkFBQTs0QkFDQVA7MEJBQ0E7d0JBQ0E7c0JBQ0E7d0JBQ0E7d0JBQ0E7MEJBQ0FIOzRCQUFBWjs0QkFBQW9COzRCQUFBQzs0QkFBQUM7MEJBQUE7d0JBQ0E7c0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0FWO3NCQUFBWjtzQkFBQW9CO3NCQUFBQztzQkFBQUM7b0JBQUE7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0FWO29CQUFBWjtvQkFBQW9CO29CQUFBQztvQkFBQUM7a0JBQUE7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBc0Q7TUFBQTtNQUNBaEU7UUFDQWlFO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiIxMzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8c3R5bGU+XHJcbi52LWhlYWRTdHlsZSAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHZlcnRpY2FsLWFsaWduOiAxMnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdHdpZHRoOiA4NSU7ICAgIFxyXG5cdGhlaWdodDogNTJycHg7XG4gICAgbGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiA0cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0Zm9udC1zaXplOiAxMnJweDtcclxufVxyXG4uaW5wdXQtd3JhcHBlcntcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogNjUlOyAgICBcclxuXHRsaW5lLWhlaWdodDogMjJycHg7XG59XHJcbltudnVlXSB1bmktdmlldyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMCBzb2xpZCAjMDAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XHJcbi51bmktaW5wdXQge1xyXG5cdC8qIGJvcmRlcjogbm9uZTsgKi9cbn1cclxuLnVuaS1pY29ue1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgKi9cclxuXHR3aWR0aDogOCU7XG4gICAgZm9udC1mYW1pbHk6IHVuaWljb25zO1xuICAgIGZvbnQtc2l6ZTogNDBycHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgLyogd2lkdGg6IDQ4cnB4OyAqL1xuICAgIGhlaWdodDogNDhycHg7XG4gICAgbGluZS1oZWlnaHQ6IDQ4cnB4O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHZlcnRpY2FsLWFsaWduOiAxOHJweDtcbn1cclxuLnZpZXctY29udGVudHtcclxuXHRtaW4taGVpZ2h0OiA3NjBycHg7XHJcblx0LyogYm9yZGVyOjFweCBzb2xpZCByZWQ7ICovXHJcbn1cclxuLmR2LXBhbmVse1xuICAgIGJhY2tncm91bmQtY29sb3I6I0VBRkVEOTtcbiAgICBwYWRkaW5nOiAyMHJweCAyMHJweCA0cnB4IDBweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxuLmR2LXBhbmVsLWlucHV0e1xyXG5cdHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xufVxyXG4uZHYtcGFuZWwgLnR4dF90aXRsZXtcclxuICBmb250LXNpemU6IDM0cnB4O1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5cclxuLmR2LXBhbmVsIGlucHV0e1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0d2lkdGg6IDY4JTsgXHJcblx0aGVpZ2h0OiA1MnJweDtcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiA3cHggIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuXHRwYWRkaW5nOiA2cnB4IDhycHggOHJweDtcclxuXHRmb250LXNpemU6IDMycnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDBycHg7XHJcbn1cclxuLmR2LXBhbmVsIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEwcnB4O1xyXG59XHJcbi5kdi1wYW5lbCAuZm9ybS1pdGVtLXNwYW57XHJcblx0dmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xyXG4gICAgY29sb3I6ICMyZDhjZjA7XHJcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0d2lkdGg6IGNhbGMoMTAwJSAtIDEwMHB4KTtcclxufVxyXG5cbi5kdi1wYW5lbC1idXR0b257XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdG1hcmdpbi1yaWdodDogMjBycHg7XG59XHJcbi5kdi1wYW5lbC1idXR0b24gYnV0dG9uIHsgICAgXHJcblx0bGluZS1oZWlnaHQ6IDEuODtcbiAgICBib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxufVxyXG5idXR0b24uYnRuX2NhbmNlbCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuYnV0dG9uLmJ0bl9hZGQge1xyXG5cdHdpZHRoOjQ5LjUlO1xyXG5cdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdHBhZGRpbmc6IDIwcnB4O1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMzhycHg7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG4ubG9nbyB7XHJcblx0aGVpZ2h0OiA1MHB4O1xuICAgIHdpZHRoOiAyMzBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbjogMzglIGF1dG87XHJcbn1cclxuLmR2LWJvcmRlcntcclxuXHRib3JkZXI6IDFweCBzb2xpZCByZWQ7XHJcbn1cbjwvc3R5bGU+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuXHQuZGVtby11bmktcm93IHtcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblx0Ojp2LWRlZXAgLnVuaS1yb3cge1xuXHRcdG1hcmdpbi1ib3R0b206IDBweDtcblx0fVxyXG5cdC52aWV3LXRhYnBhZ2UgOjp2LWRlZXAgLnVuaS1yb3cgIHtcblx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XG5cdH1cblx0LmRlbW8tdW5pLWNvbCB7XG5cdFx0aGVpZ2h0OiAzNnB4O1xuXHRcdGJvcmRlci1yYWRpdXM6IDVweDtcblx0fVxyXG5cdC5kZW1vLXVuaS1yb3cgLnVuaS1pbnB1dHtcclxuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XHJcblx0fVxuPC9zdHlsZT5cblxuXHJcblxyXG48dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcblx0XHQ8IS0tIOihqOWktOagt+W8jyAtLT5cclxuXHRcdDx2aWV3IGNsYXNzPVwidi1oZWFkU3R5bGVcIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBoZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNcIiA+XHJcblx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuXHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnByZWZpeFwiIFxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaWNvblwiIFxyXG5cdFx0XHRcdFx0OmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5wcmVmaXhdXCJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0Jz8ndGV4dCc6J3RleHQnXCIgXHJcblx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5zZXR0aW5nLnByZWZpeCAmJiBpdGVtLnNldHRpbmcuc3VmZml4Pyc3OCUnOml0ZW0uc2V0dGluZy5wcmVmaXggfHwgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzTWF0ZXJpYVwiXHJcblx0XHRcdFx0XHRAZm9jdXM9XCJvbnRhcChpdGVtKVwiIFxuXHRcdFx0XHRcdEBrZXl1cC5lbnRlcj1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxuXHRcdFx0XHRcdEBibHVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0Lz5cblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0ICAgIDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwidmlldy1jb250ZW50XCI+XHJcblx0XHRcdDwhLS0g6aG1562+IC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImR2LXRhYlwiPlxyXG5cdFx0XHRcdDx1bmktc2VnbWVudGVkLWNvbnRyb2wgOmN1cnJlbnQ9XCJjdXJyZW50XCIgOnZhbHVlcz1cIml0ZW1zXCIgQGNsaWNrSXRlbT1cIm9uQ2xpY2tJdGVtXCJcclxuXHRcdFx0XHRcdHN0eWxlVHlwZT1cImJ1dHRvblwiPlxyXG5cdFx0XHRcdDwvdW5pLXNlZ21lbnRlZC1jb250cm9sPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwhLS0g5q2j5Zyo56CB55uYIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctdGFicGFnZVwiIHYtaWY9XCJjdXJyZW50PT0wXCI+XHJcblx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb1wiIHYtaWY9XCJkZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9tb2JveF9sb2dfMjAweDQwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwiZHYtcGFuZWxcIj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID4xMTExPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQgICAgICAgIDxkaXYgPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID4xMTExPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdj5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZSBkdi1mb3JtLWl0ZW0tY29sXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiA+ZmZhYWE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCA6c3Bhbj1cIjEyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID5mZmFhYWZmYWFhZmZhYWFmZmFhYWZmYWFhPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGUgZHYtZm9ybS1pdGVtLWNvbFwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPmZzZmVnZnM8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCA6c3Bhbj1cIjEyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInVuaS1pbnB1dCBpbnB1dC1tYXJnaW50b3BcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XCIvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxJdGVtKDApXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDFTdHlsZURlZkxpc3RcIj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0ICAgICAgICA8ZGl2IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHN0eWxlLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHQgICAgICAgICAgICA8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lPT0nSW5wdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiIHYtaWY9XCJpdGVtLmRpc2FibGVkXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2LWlmPVwiIWl0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0OnZhbHVlPVwiaXRlbS52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQgICAgICAgICAgICA8IS0tIOagheagvOW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCBcclxuXHRcdFx0XHRcdFx0XHRcdFx0OnNwYW49XCIyNCAvIGl0ZW0uc2V0dGluZy5jb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIiBcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNvbHMhPW51bGxcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cImNvbHMuZGlzYWJsZWRcIj57e2NvbHMudmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidW5pLWlucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIhY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cImNvbHMubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp2YWx1ZT1cImNvbHMudmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiY29scy5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHQgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICAgPC9kaXY+XHJcblx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxJdGVtKDApXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0ICAgIDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwhLS0g5bey56CB55uYIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctdGFicGFnZTJcIiB2LWlmPVwiY3VycmVudD09MVwiPlxyXG5cdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMlN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbFwiIHYtZm9yPVwiKHN0eWxlLGlpKSBpbiBkZXRhaWwyU3R5bGVEZWZMaXN0XCI+XHJcblx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1pbnB1dFwiPlxyXG5cdFx0XHRcdCAgICAgICAgPGRpdiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzdHlsZS5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdFx0ICAgICAgICAgICAgPCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cIml0ZW0ubmFtZSE9J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdCAgICAgICAgICAgIDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6c3Bhbj1cIjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIj57e2NvbHMudmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHQgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdCBcdDxidXR0b24gdHlwZT1cIndhcm5cIiBAdGFwPVwiZGVsRGF0YU9iaihzdHlsZSxpaSlcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldz5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdCAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rXCIgY2xhc3M9XCJidG5fYWRkXCI+56Gu5a6aPC9idXR0b24+XHJcblx0XHQ8L3ZpZXc+XG4gICAgPC92aWV3PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+eggeebmCcsXG4gICAgICBwYXJhbToge30sXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBoZWFkX3N0eWxlZGVmOntcclxuXHRcdGZvcm06e1xyXG5cdFx0XHRpdGVtczpbXVxyXG5cdFx0fVxyXG5cdCAgfSxcbiAgICAgIGRldGFpbDFfc3R5bGVkZWY6e30sXG4gICAgICBkZXRhaWwxU3R5bGVEZWZMaXN0OltdLFxuICAgICAgZGV0YWlsMl9zdHlsZWRlZjp7fSxcbiAgICAgIGRldGFpbDJTdHlsZURlZkxpc3Q6W10sXHJcblx0ICAvLyDliIbmrrXlmajmlbDmja5cclxuXHQgIGN1cnJlbnQ6IDAsXHJcblx0ICBpdGVtczogWyfmraPlnKjnoIHnm5gnLCAn5bey56CB55uYJ10sXG4gICAgfTtcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0dGhpcy4kZGF0YS5wYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcblx0IC8v6I635Y+WQ0dfRGV0YWls77yI5omY55uY6LSn5ZOB6KGo77yJ5pWw5o2u57G755qE6Ieq5a6a5LmJ6KGo5Y2V5Y+C5pWwXHJcblx0dGhpcy5IZWFkX1VJU3R5bGVHZXRJbmZvKCdDR19EZXRhaWwnLHRoaXMuJGRhdGEucGFyYW0uSGVhZF9QYW5lbF9TdHlsZS5JRCk7XHJcblx0dGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKCdDR19EZXRhaWwnLHRoaXMuJGRhdGEucGFyYW0uRGV0YWlsX0xpc3RfUGFuZWwxX1N0eWxlLklEKTtcclxuXHR0aGlzLkRldGFpbDJfVUlzdHlsZUdldEluZm8oJ0NHX0RldGFpbCcsdGhpcy4kZGF0YS5wYXJhbS5EZXRhaWxfTGlzdF9QYW5lbDJfU3R5bGUuSUQpO1xyXG5cdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0Ly8gdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgXHJcbiAgfSxcdFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgSGVhZF9VSVN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIHRoaXMuZm9ybSA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuICAgICAgICBcclxuICAgIH0sXG4gICAgYXN5bmMgRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaCgkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQvLyBsZXQgYWEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChKU09OLnBhcnNlKGFhKSk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcbiAgICBhc3luYyBEZXRhaWwyX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHRcclxuXHRvbnRhcChpdGVtKXsgLy/miavnoIHlip/og71cclxuXHRcdC8vIHZhciAkZWxlID0gZTtcclxuXHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdCAgICAgICR0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0XHRpZihpdGVtLnZhbHVlKXsgLy/nrKzkuIDkuKrovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdCR0aGlzLmZvY3VzTWF0ZXJpYSA9IHRydWU7IC8v5Yid5aeL5YyW77yM56ys5LqM5Liq6L6T5YWl5qGGZm9jdXPlsZ7mgKdcclxuXHRcdFx0XHRcdC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdC8vIFx0JHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IC8v56ys5LqM5Liq6L6T5YWl5qGG6I635Y+W54Sm54K5XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdH0sMTAwKTtcclxuXHRcdFx0XHRcdC8vIH0sNTAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uRW50ZXJDaGFuZ2UoaXRlbSl7IC8v5Zue6L2m77yM54K55Ye75oyJ6ZKu77yM5Y+W5raI6IqC54K55LqL5Lu2XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHJcblx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdCAgICAgIHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0ICAgIH1cclxuXHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly8g5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0YXN5bmMgb25DaGFuZ2UoZXZlbnQpIHtcclxuXHQgICAgdHJ5IHtcclxuXHQgICAgICAgIGlmIChldmVudC5pZCkge1xyXG5cdCAgICAgICAgICB2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHQgICAgICAgICAgLy8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdCAgICAgICAgICB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdCAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxyXG5cdCAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHQgICAgICAgICAgICAgICAgYXR0cjogYSxcclxuXHQgICAgICAgICAgICAgICAgdmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0ICAgICAgICAgICAgICB9KSlcclxuXHQgICAgICAgICAgICApXHJcblx0ICAgICAgICAgICk7XHJcblx0XHRcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0ICB2YXIgZGF0YUluZm89e1xyXG5cdCAgICAgICAgICAgIGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246ICcnLFxyXG5cdCAgICAgICAgICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRjbGFzc19uYW1lOiAnJyxcclxuXHQgICAgICAgICAgICBldmVudF9pZDogZXZlbnQuaWQsXHJcblx0XHRcdFx0ZXZlbnRfbmFtZTogJycsXHJcblx0XHRcdFx0ZGF0YV9vYmpfaWQ6ICcnLFxyXG5cdCAgICAgICAgICAgIG9ial9hdHRyOiBvYmpfYXR0cixcclxuXHRcdFx0XHRwcmpfaWQ6ICcnLFxyXG5cdFx0XHRcdHJlZl9jbHNfaWQ6ICcnLFxyXG5cdFx0XHRcdHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0XHRcdHVzZXJfbG9naW46ICcnLFxyXG5cdFx0XHRcdGRhdGFfanNvbjogJycsXHJcblx0XHRcdFx0Y29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHRleHRfaW5mbzogJycsXHJcblx0XHRcdFx0Z2xvYmFsX2F0dHI6ICcnLFxyXG5cdCAgICAgICAgICAgIGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHQgICAgICAgICAgfTtcclxuXHRcdFx0ICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0ICBcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHJldC5yZXN1bHQ7IFxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdFx0ICAgIHZhciB0aXAgPSByZXN1bHQuZXJyX2luZm8gPyB0eXBlb2YgcmVzdWx0LmVycl9pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmVycl9pbmZvIDogcmVzdWx0LmVycl9pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRsZXQgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIil7IC8v56CB55uY5LitXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfc3VidGFibGVfcGFnZV9jb250ZW50XCIpeyAgLy/lt7LnoIHnm5hcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsdWUuY2xlYXIgPT0gdHJ1ZSAmJiAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD4wKXsgLy/liKTmlq3mmK/lkKbmuIXnqbrpobXnrb7lhoXlrrks5q2j5Zyo56CB55uY5piv5ZCm5pyJ5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiAn57O757uf5qOA5rWL5Yiw5pyJ5q2j5Zyo56CB55uY5Lit55qE6LSn5ZOB77yM57un57ut5pON5L2c5Lya5riF56m677yM5piv5ZCm57un57ut77yfJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy52aWV3QWNlaW9uQ29udGVudCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0aWYocmVzdWx0LmluZm8pe1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjNcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHQgIFx0XHRcclxuXHRcdFx0ICBcdH1lbHNle1xyXG5cdFx0XHQgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIFx0fVxyXG5cdFx0XHQgIH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdCAgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIH0pO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9IGNhdGNoIChleCkge1xyXG5cdCAgICAgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMlwiLGNvbnRlbnQ6XCLmiafooYzigJzlhoXlrrnlj5jljJblkI7igJ3kuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHJcblx0ICAgIH1cclxuXHR9LFxyXG5cdC8v5Yqg6L295q2j5Zyo56CB55uY5YaF5a65XHJcblx0dmlld0FjZWlvblJvdyhkYXRhLHR5cGUpe1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YSk7XHJcblx0ICAgIHZhciBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRpZih0eXBlKXsgLy/noa7lrprlkI7ohJrmnKzov5vlhaXliqDovb3lt7LnoIHnm5jmlbDmja5cclxuXHRcdCAgICBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHR9XHJcblx0ICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdCAgICBkYXRhLnJvdy5hdHRycy5mb3JFYWNoKGF0dHI9PntcclxuXHQgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PntcclxuXHQgICAgICAgICAgICBpZihlbGUubmFtZSE9J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdCAgICAgICAgICAgICAgICBpZihjb2wpe1xyXG5cdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgfSk7XHJcblx0ICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgfSk7XHJcblx0ICAgIH0pO1xyXG5cdFx0aWYodHlwZSl7IC8v56Gu5a6a5ZCO6ISa5pys6L+b5YWl5Yqg6L295bey56CB55uY5pWw5o2uXHJcblx0XHQgICAgZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IGRhdGEucm93LmlkO1xyXG5cdFx0ICAgIHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTtcclxuXHRcdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QpO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGRldGFpbFN0eWxlLmZvcm0uYXR0cnMgPSBkYXRhLnJvdy5hdHRycztcclxuXHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly/liqDovb3lt7LnoIHnm5jlhoXlrrlcclxuXHR2aWV3QWNlaW9uQ29udGVudChkYXRhKXtcclxuXHQgICAgZGF0YS5jb250ZW50LmZvckVhY2goY29udD0+e1xyXG5cdCAgICAgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHQgICAgICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdCAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IGNvbnQuaWQ7XHJcblx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdCAgICAgICAgICBkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlPT57IFxyXG5cdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICB9KTtcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfSk7XHJcblx0ICAgICAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdCk7XHJcblx0fSxcblx0b25DbGlja0l0ZW0oZSkgeyAvL+mAieaLqemhteetvlxyXG5cdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHR0aGlzLmN1cnJlbnQgPSBlLmN1cnJlbnRJbmRleFxyXG5cdH0sXHJcblx0b25EZXRhaWwxRW50ZXJDaGFuZ2UoaXRlbSl7ICAvL+eggeebmOS4reagt+W8j+Wbnui9puS6i+S7tlxyXG5cdCAgICBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHR9LFxyXG5cdGRlbEl0ZW0oaW5kZXgpeyAgLy/liKDpmaTnoIHnm5jkuK3moLflvI/pnaLmnb9cclxuXHQgICAgdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHR9LFxuICAgIGRlbERhdGFPYmooc3R5bGUsaW5kZXgpeyAgLy/liKDpmaTlt7LnoIHnm5jmlbBcbiAgICAgIC8vIGNvbnNvbGUubG9nKHN0eWxlKTtcclxuXHQgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0ICB1bmkuc2hvd01vZGFsKHtcclxuXHQgIFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdCAgXHRjb250ZW50OiAn56Gu5a6a5Yig6Zmk6K+l5bey56CB55uY5pWw5o2u77yBJyxcclxuXHQgIFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdCAgXHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdHZhciBvYmpJRD1zdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmKCFzdHlsZS5mb3JtLm9iaklkLmluY2x1ZGVzKCd7JykpIG9iaklEID0gJ3snK3N0eWxlLmZvcm0ub2JqSWQrJ30nO1xyXG5cdFx0XHRcdCAgICAgICAgICBcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHRcdGNsYXNzX2lkOnN0eWxlLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRcdFx0b2JqX2lkOm9iaklEXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZGF0YU9iakRlbCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LDEpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLliKDpmaTmiJDlip/vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xuICAgICAgXG4gICAgfSxcclxuXHRcclxuXHRvaygpeyAvL+ehruWumlxyXG5cdFx0Ly8gdmFyICR0aGlzID0gdGhpcztcclxuXHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgLy8gICAgY29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7XHJcblx0ICAgIGlmKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+aYr+WQpuacieehruWumuWJjeS6i+S7tlxyXG5cdCAgICAgICAgdGhpcy5zYXZhKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgICAgZWxzZSBpZih0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KSAgLy/mmK/lkKbmnInnoa7lrprlkI7kuovku7ZcclxuXHQgICAgICAgIHRoaXMuc2F2YSh0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50KTtcclxuXHR9LFxyXG5cdHNhdmEoZXZlbnQpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHQgICAgaWYodGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MCl7XHJcblx0ICAgICAgdW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5rKh5pyJ5q2j5Zyo56CB55uY55qE5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cdCAgICB9XHJcblx0ICAgIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0ICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHQgICAgdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdCAgICAvL+iOt+WPluato+WcqOeggeebmOWxnuaAp1xyXG5cdCAgICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHQgICAgdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHQgICAgICB2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICAgIGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0ICAgICAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0ICAgICAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfWVsc2VcclxuXHQgICAgICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgICAgfSk7XHJcblx0ICAgICAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0XHQvL+iOt+WPluato+WcqOeggeebmOmHjOayoeacieaYvuekuueahOWtl+autVxyXG5cdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHRcdCAgc3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0ICAgIGZvcih2YXIga2V5IGluIGRldGFpbEF0dHJMaXN0KXtcclxuXHRcdCAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoZGV0YWlsQXR0ckxpc3Rba2V5XSk7XHJcblx0XHQgICAgICBsZXQgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdCAgICAgIGtleXMuZm9yRWFjaCgoZWxlKSA9PiB7XHJcblx0XHQgICAgICAgIGlmKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0ICAgICAgfSk7XHJcblx0XHQgICAgICBpZihpc2ZsYWcpIHtcclxuXHRcdCAgICAgICAgZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHQgICAgICB9XHJcblx0XHQgICAgfSBcclxuXHRcdCAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuXHQgLy8gICAgcmV0dXJuO1xyXG5cdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShcclxuXHRcdCAgICAgIE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICB9KSlcclxuXHRcdCAgICApXHJcblx0XHQpO1xyXG5cdFx0IHZhciBqc29ubGlzdD1bXTtcclxuXHRcdGRldGFpbEF0dHJMaXN0LmZvckVhY2goYXR0cj0+e1xyXG5cdFx0ICAgIGpzb25saXN0LnB1c2goe1xyXG5cdFx0ICAgICAgaWQ6JycsXHJcblx0XHQgICAgICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0ICAgICAgfSkpXHJcblx0XHQgICAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuXHRcdGpzb25saXN0LmZvckVhY2goYXN5bmMgKGpzb24sa2V5KT0+e1xyXG5cdFx0XHRhd2FpdCAkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uKTtcclxuXHRcdH0pO1xyXG5cdH0sXG4gICAgLy/miafooYznoa7lrprohJrmnKxcbiAgICBhc3luYyBydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YV9qc29uID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShqc29uKVxyXG5cdFx0KTtcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IDAsXHJcblx0XHQgIHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcclxuXHRcdCAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0ICBjbGFzc19uYW1lOiAnJyxcclxuXHRcdCAgZXZlbnRfaWQ6IHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgIG9ial9hdHRyOiAnJyxcclxuXHRcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgZGF0YV9qc29uOiBkYXRhX2pzb24sXHJcblx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgIGV4dF9pbmZvOiAnJyxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6ICcnLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXM9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0aWYgKHJlcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IHJlcy5yZXN1bHQ7IFxyXG5cdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0bGV0IHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXtcclxuXHRcdFx0XHRcdCAgaWYocmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdFx0XHRcdCAgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImluc2VydF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgLy/noIHnm5jkuK1cclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdC8v5Yqg6L295bey57uP56CB55uY5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvblJvdyh2YWx1ZSwnYWRkJyk7XHJcblx0XHRcdFx0XHRcdFx0Ly/muIXnqbrmnaHnoIHlhoXlrrlcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5maWVsZElkICE9IFwiU19DTlRSX0NPREVcIil7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGl0ZW0udmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgaXRlbS5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbaXRlbS5maWVsZElkXSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvL+a4hemZpOato+WcqOeggeebmOS4reaIkOWKn+eahOaVsOaNrlxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKHN0eWxlLGluZGV4KT0+e1xuXHRcdFx0XHRcdFx0XHQgIGlmKHN0eWxlLmZvcm0uaXRlbXNbMF0uZmllbGRJZCA9PSBqc29uLmF0dHJzWzBdLmF0dHIgJiYgc3R5bGUuZm9ybS5pdGVtc1swXS52YWx1ZSA9PSBqc29uLmF0dHJzWzBdLnZhbHVlKXsgXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIueggeebmOaIkOWKn1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQgIH1lbHNle1xyXG5cdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCAhPSBldmVudC5JRCl7IC8v5Yik5pat5b2T5YmN5LqL5Lu25piv5ZCm5piv56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuc2F2YSgkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudCk7IC8v5omn6KGM56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6cmVzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgbGV0IHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5lcnJNc2c7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpcIuaJp+ihjOKAnOehruWumuWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcbn07XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n");
/***/ }),
/* 137 */