(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/vip/view/privilege_item.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '90b3eRiJLBIe4tObr+gzAhm', 'privilege_item'); // Scripts/mod/vip/view/privilege_item.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-03-01 15:43:37 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var VipController = require("vip_controller"); var RoleController = require("role_controller"); var TimeTool = require("timetool"); var CommonScrollView = require("common_scrollview"); var Privilege_itemPanel = cc.Class({ "extends": BasePanel, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("vip", "privilege_item"); }, // 可以初始化声明一些变量的 initConfig: function initConfig() { this.ctrl = VipController.getInstance(); this.model = this.ctrl.getModel(); }, // 初始化一些配置数据,可以用于声明一些变量之类的 initPanel: function initPanel() { this.container_nd = this.seekChild("container"); this.image_title_sp = this.seekChild(this.container_nd, "image_title", cc.Sprite); this.title_txt_lb = this.seekChild(this.container_nd, "title_txt", cc.Label); this.limit_txt_lb = this.seekChild(this.container_nd, "limit_txt", cc.Label); this.iamge_icon_sp = this.seekChild(this.container_nd, "image_icon", cc.Sprite); this.image_sell_out_nd = this.seekChild(this.container_nd, "image_sell_out"); this.buy_btn_nd = this.seekChild(this.container_nd, "buy_btn"); this.buy_btn_rt = this.seekChild(this.buy_btn_nd, "label", cc.RichText); this.buy_btn_sp = this.seekChild(this.buy_btn_nd, "img", cc.Sprite); this.desc_txt_rt = this.seekChild(this.container_nd, "desc_txt", cc.RichText); this.left_day_txt_rt = this.seekChild(this.container_nd, "left_day_txt", cc.RichText); var good_list = this.seekChild(this.container_nd, "good_list"); var tab_size = good_list.getContentSize(); var setting = { item_class: "backpack_item", // 单元类 start_x: 0, // 第一个单元的X起点 space_x: 0, // x方向的间隔 start_y: 0, // 第一个单元的Y起点 space_y: 0, // y方向的间隔 item_width: BackPackItem.Width * 0.7, // 单元的尺寸width item_height: BackPackItem.Height * 0.7, // 单元的尺寸height row: 1, // 行数,作用于水平滚动类型 col: 1, // 列数,作用于垂直滚动类型 // need_dynamic: true scale: 0.7 }; this.tab_scrollview = new CommonScrollView(); this.tab_scrollview.createScroll(good_list, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5)); this.loadRes(PathTool.getItemRes(3), function (bg_sp) { this.buy_btn_sp.spriteFrame = bg_sp; }.bind(this)); this.buy_btn_sp.node.active = false; }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { Utils.onTouchEnd(this.buy_btn_nd, function () { this._onClickBuyBtn(); }.bind(this), 1); }, setData: function setData(data) { this.data = data; if (this.root_wnd) this.onShow(); }, // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了 onShow: function onShow() { if (this.data == null) return; var data = this.data; this.privilege_cfg = data; var srv_data = this.model.getPrivilegeDataById(data.id); if (!srv_data) { srv_data = {}; srv_data.status = 0; srv_data.expire_time = 0; } //标题 if (this.privilege_cfg.title_type == 1) { this.loadRes(PathTool.getUIIconPath("vip", "vip_image_1"), function (sf_obj) { this.image_title_sp.spriteFrame = sf_obj; }.bind(this)); } else if (this.privilege_cfg.title_type == 2) { this.loadRes(PathTool.getUIIconPath("vip", "vip_image_3"), function (sf_obj) { this.image_title_sp.spriteFrame = sf_obj; }.bind(this)); } this.title_txt_lb.string = this.privilege_cfg.name || ""; //图标 if (this.privilege_cfg.icon_id) { var res_path = PathTool.getUIIconPath("vip", "vip_icon" + this.privilege_cfg.icon_id); this.loadRes(res_path, function (sf_obj) { this.iamge_icon_sp.spriteFrame = sf_obj; }.bind(this)); } //描述 this.desc_txt_rt.string = this.privilege_cfg.desc || ""; //奖励物品 var role_vo = RoleController.getInstance().getRoleVo(); var privilege_award_cfg = gdata("privilege_data", "data_privilege_award", [data.id]); if (privilege_award_cfg) { var award_data = {}; for (var k in privilege_award_cfg) { var v = privilege_award_cfg[k]; if (v.min <= role_vo.lev && v.max >= role_vo.lev) { award_data = Utils.deepCopy(v.reward); break; } } var item_list = []; for (var k in award_data) { var v = award_data[k]; var vo = Utils.deepCopy(Utils.getItemConfig(v[0])); if (vo) { vo.bid = vo.id; vo.num = v[1]; vo.quantity = v[1]; item_list.push(vo); } } this.tab_scrollview.setData(item_list); this.tab_scrollview.addEndCallBack(function () { var list = this.tab_scrollview.getItemList(); for (var k in list) { if (list[k]) list[k].setDefaultTip(); } }.bind(this)); } //限购类型 if (this.privilege_cfg.limit_type == 0) { this.limit_txt_lb.string = Utils.TI18N("永久限购"); } else if (this.privilege_cfg.limit_day < 2) { this.limit_txt_lb.string = Utils.TI18N("每日限购"); } else if (this.privilege_cfg.limit_day < 8) { this.limit_txt_lb.string = Utils.TI18N("每周限购"); } else if (this.privilege_cfg.limit_day < 32) { this.limit_txt_lb.string = Utils.TI18N("每月限购"); } //按钮显示状态 if (srv_data.status == 1) { if (this.privilege_cfg.limit_type == 0) { this.image_sell_out_nd.active = true; this.buy_btn_nd.active = false; if (this.left_day_txt_rt) { this.left_day_txt_rt.node.active = false; } } else { this.image_sell_out_nd.active = false; this.buy_btn_nd.active = false; var cur_time = gcore.SmartSocket.getTime(); var left_time = (srv_data.expire_time || 0) - cur_time; if (left_time < 0) { left_time = 0; } var day = Math.floor(left_time / 86400); if (day < 1) { this.left_day_txt_rt.string = cc.js.formatStr("还有%s", TimeTool.GetTimeFormatTwo(left_time)); } else { this.left_day_txt_rt.string = cc.js.formatStr("还有%s天", day); } this.left_day_txt_rt.node.active = true; } } else { this.image_sell_out_nd.active = false; this.buy_btn_nd.active = true; if (this.left_day_txt_rt) { this.left_day_txt_rt.node.active = false; } if (this.privilege_cfg.pay_type == 1) { this.buy_btn_rt.string = cc.js.formatStr("%d元", this.privilege_cfg.loss); this.buy_btn_sp.node.active = false; this.buy_btn_rt.node.x = 0; } else if (this.privilege_cfg.pay_type == 2) { this.buy_btn_rt.string = cc.js.formatStr("%d", this.privilege_cfg.loss); this.buy_btn_sp.node.active = true; this.buy_btn_rt.node.x = 10; } } }, //-- 点击购买 _onClickBuyBtn: function _onClickBuyBtn() { if (this.privilege_cfg) { if (this.privilege_cfg.pay_type == 1) { //人民币 var charge_id = this.privilege_cfg.charge_id; var charge_config = gdata("charge_data", "data_charge_data", [charge_id || 0]); if (charge_config) { SDK.pay(charge_config.val, null, charge_config.id, charge_config.name, charge_config.name, null, null); } } else if (this.privilege_cfg.pay_type == 2) { //钻石 this.ctrl.sender24501(this.privilege_cfg.id); } } }, // 面板设置不可见的回调,这里做一些不可见的屏蔽处理 onHide: function onHide() {}, // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用 onDelete: function onDelete() { if (this.tab_scrollview) { this.tab_scrollview.deleteMe(); this.tab_scrollview = null; } } }); cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2aXBcXHZpZXdcXHByaXZpbGVnZV9pdGVtLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlZpcENvbnRyb2xsZXIiLCJSb2xlQ29udHJvbGxlciIsIlRpbWVUb29sIiwiQ29tbW9uU2Nyb2xsVmlldyIsIlByaXZpbGVnZV9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiaW5pdENvbmZpZyIsImN0cmwiLCJnZXRJbnN0YW5jZSIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0UGFuZWwiLCJjb250YWluZXJfbmQiLCJzZWVrQ2hpbGQiLCJpbWFnZV90aXRsZV9zcCIsIlNwcml0ZSIsInRpdGxlX3R4dF9sYiIsIkxhYmVsIiwibGltaXRfdHh0X2xiIiwiaWFtZ2VfaWNvbl9zcCIsImltYWdlX3NlbGxfb3V0X25kIiwiYnV5X2J0bl9uZCIsImJ1eV9idG5fcnQiLCJSaWNoVGV4dCIsImJ1eV9idG5fc3AiLCJkZXNjX3R4dF9ydCIsImxlZnRfZGF5X3R4dF9ydCIsImdvb2RfbGlzdCIsInRhYl9zaXplIiwiZ2V0Q29udGVudFNpemUiLCJzZXR0aW5nIiwiaXRlbV9jbGFzcyIsInN0YXJ0X3giLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiQmFja1BhY2tJdGVtIiwiV2lkdGgiLCJpdGVtX2hlaWdodCIsIkhlaWdodCIsInJvdyIsImNvbCIsInNjYWxlIiwidGFiX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJob3Jpem9udGFsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwibG9hZFJlcyIsImdldEl0ZW1SZXMiLCJiZ19zcCIsInNwcml0ZUZyYW1lIiwiYmluZCIsIm5vZGUiLCJhY3RpdmUiLCJyZWdpc3RlckV2ZW50IiwiVXRpbHMiLCJvblRvdWNoRW5kIiwiX29uQ2xpY2tCdXlCdG4iLCJzZXREYXRhIiwiZGF0YSIsInJvb3Rfd25kIiwib25TaG93IiwicHJpdmlsZWdlX2NmZyIsInNydl9kYXRhIiwiZ2V0UHJpdmlsZWdlRGF0YUJ5SWQiLCJpZCIsInN0YXR1cyIsImV4cGlyZV90aW1lIiwidGl0bGVfdHlwZSIsImdldFVJSWNvblBhdGgiLCJzZl9vYmoiLCJzdHJpbmciLCJuYW1lIiwiaWNvbl9pZCIsInJlc19wYXRoIiwiZGVzYyIsInJvbGVfdm8iLCJnZXRSb2xlVm8iLCJwcml2aWxlZ2VfYXdhcmRfY2ZnIiwiZ2RhdGEiLCJhd2FyZF9kYXRhIiwiayIsInYiLCJtaW4iLCJsZXYiLCJtYXgiLCJkZWVwQ29weSIsInJld2FyZCIsIml0ZW1fbGlzdCIsInZvIiwiZ2V0SXRlbUNvbmZpZyIsImJpZCIsIm51bSIsInF1YW50aXR5IiwicHVzaCIsImFkZEVuZENhbGxCYWNrIiwibGlzdCIsImdldEl0ZW1MaXN0Iiwic2V0RGVmYXVsdFRpcCIsImxpbWl0X3R5cGUiLCJUSTE4TiIsImxpbWl0X2RheSIsImN1cl90aW1lIiwiZ2NvcmUiLCJTbWFydFNvY2tldCIsImdldFRpbWUiLCJsZWZ0X3RpbWUiLCJkYXkiLCJNYXRoIiwiZmxvb3IiLCJqcyIsImZvcm1hdFN0ciIsIkdldFRpbWVGb3JtYXRUd28iLCJwYXlfdHlwZSIsImxvc3MiLCJ4IiwiY2hhcmdlX2lkIiwiY2hhcmdlX2NvbmZpZyIsIlNESyIsInBheSIsInZhbCIsInNlbmRlcjI0NTAxIiwib25IaWRlIiwib25EZWxldGUiLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGFBQWEsR0FBR0QsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlFLGNBQWMsR0FBR0YsT0FBTyxDQUFDLGlCQUFELENBQTVC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c0M7QUFBSztBQUM5QyxhQUFLOUcsSUFBTCxDQUFVc0gsV0FBVixDQUFzQixLQUFLM0QsYUFBTCxDQUFtQkcsRUFBekM7QUFDSDtBQUNKO0FBQ0osR0F4TThCO0FBME0vQjtBQUNBeUQsRUFBQUEsTUFBTSxFQUFFLGtCQUFZLENBRW5CLENBN004QjtBQStNL0I7QUFDQUMsRUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLFFBQUksS0FBS25GLGNBQVQsRUFBeUI7QUFDckIsV0FBS0EsY0FBTCxDQUFvQm9GLFFBQXBCO0FBQ0EsV0FBS3BGLGNBQUwsR0FBc0IsSUFBdEI7QUFDSDtBQUNKO0FBck44QixDQUFULENBQTFCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0wMSAxNTo0MzozNyBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgVmlwQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKTtcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcblxudmFyIFByaXZpbGVnZV9pdGVtUGFuZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInZpcFwiLCBcInByaXZpbGVnZV9pdGVtXCIpO1xuICAgIH0sXG5cbiAgICAvLyDlj6/ku6XliJ3lp4vljJblo7DmmI7kuIDkupvlj5jph4/nmoRcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3RybCA9IFZpcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJjb250YWluZXJcIik7XG4gICAgICAgIHRoaXMuaW1hZ2VfdGl0bGVfc3AgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmNvbnRhaW5lcl9uZCwgXCJpbWFnZV90aXRsZVwiLCBjYy5TcHJpdGUpO1xuICAgICAgICB0aGlzLnRpdGxlX3R4dF9sYiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuY29udGFpbmVyX25kLCBcInRpdGxlX3R4dFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMubGltaXRfdHh0X2xiID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jb250YWluZXJfbmQsIFwibGltaXRfdHh0XCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5pYW1nZV9pY29uX3NwID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jb250YWluZXJfbmQsIFwiaW1hZ2VfaWNvblwiLCBjYy5TcHJpdGUpO1xuICAgICAgICB0aGlzLmltYWdlX3NlbGxfb3V0X25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jb250YWluZXJfbmQsIFwiaW1hZ2Vfc2VsbF9vdXRcIik7XG5cbiAgICAgICAgdGhpcy5idXlfYnRuX25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jb250YWluZXJfbmQsIFwiYnV5X2J0blwiKTtcbiAgICAgICAgdGhpcy5idXlfYnRuX3J0ID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5idXlfYnRuX25kLCBcImxhYmVsXCIsIGNjLlJpY2hUZXh0KTtcbiAgICAgICAgdGhpcy5idXlfYnRuX3NwID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5idXlfYnRuX25kLCBcImltZ1wiLCBjYy5TcHJpdGUpO1xuICAgICAgICB0aGlzLmRlc2NfdHh0X3J0ID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jb250YWluZXJfbmQsIFwiZGVzY190eHRcIiwgY2MuUmljaFRleHQpO1xuICAgICAgICB0aGlzLmxlZnRfZGF5X3R4dF9ydCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuY29udGFpbmVyX25kLCBcImxlZnRfZGF5X3R4dFwiLCBjYy5SaWNoVGV4dCk7XG5cbiAgICAgICAgdmFyIGdvb2RfbGlzdCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuY29udGFpbmVyX25kLCBcImdvb2RfbGlzdFwiKTtcbiAgICAgICAgdmFyIHRhYl9zaXplID0gZ29vZF9saXN0LmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzczogXCJiYWNrcGFja19pdGVtXCIsICAgICAgLy8g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeDogMCwgICAgICAgICAgICAgICAgICAgIC8vIHjmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XG4gICAgICAgICAgICBzcGFjZV95OiAwLCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiBCYWNrUGFja0l0ZW0uV2lkdGggKiAwLjcsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiBCYWNrUGFja0l0ZW0uSGVpZ2h0ICogMC43LCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3c6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICAvLyBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgICAgIHNjYWxlOiAwLjdcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYl9zY3JvbGx2aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKVxuICAgICAgICB0aGlzLnRhYl9zY3JvbGx2aWV3LmNyZWF0ZVNjcm9sbChnb29kX2xpc3QsIGNjLnYyKDAsIDApLCBTY3JvbGxWaWV3RGlyLmhvcml6b250YWwsIFNjcm9sbFZpZXdTdGFydFBvcy50b3AsIHRhYl9zaXplLCBzZXR0aW5nLCBjYy52MigwLjUsIDAuNSkpXG5cbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEl0ZW1SZXMoMyksIGZ1bmN0aW9uIChiZ19zcCkge1xuICAgICAgICAgICAgdGhpcy5idXlfYnRuX3NwLnNwcml0ZUZyYW1lID0gYmdfc3A7XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5idXlfYnRuX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idXlfYnRuX25kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNsaWNrQnV5QnRuKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICB9LFxuXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLm9uU2hvdygpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMucHJpdmlsZWdlX2NmZyA9IGRhdGE7XG5cbiAgICAgICAgdmFyIHNydl9kYXRhID0gdGhpcy5tb2RlbC5nZXRQcml2aWxlZ2VEYXRhQnlJZChkYXRhLmlkKTtcbiAgICAgICAgaWYgKCFzcnZfZGF0YSkge1xuICAgICAgICAgICAgc3J2X2RhdGEgPSB7fTtcbiAgICAgICAgICAgIHNydl9kYXRhLnN0YXR1cyA9IDA7XG4gICAgICAgICAgICBzcnZfZGF0YS5leHBpcmVfdGltZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvL+agh+mimFxuICAgICAgICBpZiAodGhpcy5wcml2aWxlZ2VfY2ZnLnRpdGxlX3R5cGUgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJ2aXBcIiwgXCJ2aXBfaW1hZ2VfMVwiKSwgZnVuY3Rpb24gKHNmX29iaikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VfdGl0bGVfc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcml2aWxlZ2VfY2ZnLnRpdGxlX3R5cGUgPT0gMikge1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJ2aXBcIiwgXCJ2aXBfaW1hZ2VfM1wiKSwgZnVuY3Rpb24gKHNmX29iaikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VfdGl0bGVfc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXRsZV90eHRfbGIuc3RyaW5nID0gdGhpcy5wcml2aWxlZ2VfY2ZnLm5hbWUgfHwgXCJcIjtcblxuICAgICAgICAvL+Wbvuagh1xuICAgICAgICBpZiAodGhpcy5wcml2aWxlZ2VfY2ZnLmljb25faWQpIHtcbiAgICAgICAgICAgIHZhciByZXNfcGF0aCA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJ2aXBcIiwgXCJ2aXBfaWNvblwiICsgdGhpcy5wcml2aWxlZ2VfY2ZnLmljb25faWQpO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlc19wYXRoLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pYW1nZV9pY29uX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG5cbiAgICAgICAgLy/mj4/ov7BcbiAgICAgICAgdGhpcy5kZXNjX3R4dF9ydC5zdHJpbmcgPSB0aGlzLnByaXZpbGVnZV9jZmcuZGVzYyB8fCBcIlwiO1xuXG4gICAgICAgIC8v5aWW5Yqx54mp5ZOBXG4gICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgdmFyIHByaXZpbGVnZV9hd2FyZF9jZmcgPSBnZGF0YShcInByaXZpbGVnZV9kYXRhXCIsIFwiZGF0YV9wcml2aWxlZ2VfYXdhcmRcIiwgW2RhdGEuaWRdKTtcbiAgICAgICAgaWYgKHByaXZpbGVnZV9hd2FyZF9jZmcpIHtcbiAgICAgICAgICAgIHZhciBhd2FyZF9kYXRhID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIHByaXZpbGVnZV9hd2FyZF9jZmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHByaXZpbGVnZV9hd2FyZF9jZmdba107XG4gICAgICAgICAgICAgICAgaWYgKHYubWluIDw9IHJvbGVfdm8ubGV2ICYmIHYubWF4ID49IHJvbGVfdm8ubGV2KSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YXJkX2RhdGEgPSBVdGlscy5kZWVwQ29weSh2LnJld2FyZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhd2FyZF9kYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSBhd2FyZF9kYXRhW2tdO1xuICAgICAgICAgICAgICAgIHZhciB2byA9IFV0aWxzLmRlZXBDb3B5KFV0aWxzLmdldEl0ZW1Db25maWcodlswXSkpO1xuICAgICAgICAgICAgICAgIGlmICh2bykge1xuICAgICAgICAgICAgICAgICAgICB2by5iaWQgPSB2by5pZDtcbiAgICAgICAgICAgICAgICAgICAgdm8ubnVtID0gdlsxXTtcbiAgICAgICAgICAgICAgICAgICAgdm8ucXVhbnRpdHkgPSB2WzFdXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1fbGlzdC5wdXNoKHZvKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFiX3Njcm9sbHZpZXcuc2V0RGF0YShpdGVtX2xpc3QpXG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGx2aWV3LmFkZEVuZENhbGxCYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMudGFiX3Njcm9sbHZpZXcuZ2V0SXRlbUxpc3QoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrIGluIGxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3Rba10pXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0W2tdLnNldERlZmF1bHRUaXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH1cblxuICAgICAgICAvL+mZkOi0reexu+Wei1xuICAgICAgICBpZiAodGhpcy5wcml2aWxlZ2VfY2ZnLmxpbWl0X3R5cGUgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saW1pdF90eHRfbGIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmsLjkuYXpmZDotK1cIik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcml2aWxlZ2VfY2ZnLmxpbWl0X2RheSA8IDIpIHtcbiAgICAgICAgICAgIHRoaXMubGltaXRfdHh0X2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5q+P5pel6ZmQ6LStXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJpdmlsZWdlX2NmZy5saW1pdF9kYXkgPCA4KSB7XG4gICAgICAgICAgICB0aGlzLmxpbWl0X3R4dF9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuavj+WRqOmZkOi0rVwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByaXZpbGVnZV9jZmcubGltaXRfZGF5IDwgMzIpIHtcbiAgICAgICAgICAgIHRoaXMubGltaXRfdHh0X2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5q+P5pyI6ZmQ6LStXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy/mjInpkq7mmL7npLrnirbmgIFcbiAgICAgICAgaWYgKHNydl9kYXRhLnN0YXR1cyA9PSAxKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcml2aWxlZ2VfY2ZnLmxpbWl0X3R5cGUgPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2Vfc2VsbF9vdXRfbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1eV9idG5fbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdF9kYXlfdHh0X3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdF9kYXlfdHh0X3J0Lm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlX3NlbGxfb3V0X25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV5X2J0bl9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgY3VyX3RpbWUgPSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgdmFyIGxlZnRfdGltZSA9IChzcnZfZGF0YS5leHBpcmVfdGltZSB8fCAwKSAtIGN1cl90aW1lO1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0X3RpbWUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnRfdGltZSA9IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGRheSA9IE1hdGguZmxvb3IobGVmdF90aW1lIC8gODY0MDApO1xuICAgICAgICAgICAgICAgIGlmIChkYXkgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdF9kYXlfdHh0X3J0LnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIjxzaXplPTI0Pui/mOaciTwvc2l6ZT48c2l6ZT0yND48Y29sb3I9IzI0OTAwMz4lczwvYz48L3NpemU+XCIsIFRpbWVUb29sLkdldFRpbWVGb3JtYXRUd28obGVmdF90aW1lKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0X2RheV90eHRfcnQuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFwi6L+Y5pyJPGNvbG9yPSMyNDkwMDM+JXM8L2M+5aSpXCIsIGRheSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0X2RheV90eHRfcnQubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbWFnZV9zZWxsX291dF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnV5X2J0bl9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMubGVmdF9kYXlfdHh0X3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0X2RheV90eHRfcnQubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnByaXZpbGVnZV9jZmcucGF5X3R5cGUgPT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV5X2J0bl9ydC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCIlZOWFg1wiLCB0aGlzLnByaXZpbGVnZV9jZmcubG9zcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5idXlfYnRuX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5idXlfYnRuX3J0Lm5vZGUueCA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJpdmlsZWdlX2NmZy5wYXlfdHlwZSA9PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXlfYnRuX3J0LnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIiVkXCIsIHRoaXMucHJpdmlsZWdlX2NmZy5sb3NzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1eV9idG5fc3Aubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV5X2J0bl9ydC5ub2RlLnggPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLy0tIOeCueWHu+i0reS5sFxuICAgIF9vbkNsaWNrQnV5QnRuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnByaXZpbGVnZV9jZmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByaXZpbGVnZV9jZmcucGF5X3R5cGUgPT0gMSkgeyAgIC8v5Lq65rCR5biBXG4gICAgICAgICAgICAgICAgdmFyIGNoYXJnZV9pZCA9IHRoaXMucHJpdmlsZWdlX2NmZy5jaGFyZ2VfaWQ7XG4gICAgICAgICAgICAgICAgdmFyIGNoYXJnZV9jb25maWcgPSBnZGF0YShcImNoYXJnZV9kYXRhXCIsIFwiZGF0YV9jaGFyZ2VfZGF0YVwiLCBbY2hhcmdlX2lkIHx8IDBdKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcmdlX2NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBTREsucGF5KGNoYXJnZV9jb25maWcudmFsLCBudWxsLCBjaGFyZ2VfY29uZmlnLmlkLCBjaGFyZ2VfY29uZmlnLm5hbWUsIGNoYXJnZV9jb25maWcubmFtZSwgbnVsbCwgbnVsbCkgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByaXZpbGVnZV9jZmcucGF5X3R5cGUgPT0gMikgeyAgICAvL+mSu+efs1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyNDUwMSh0aGlzLnByaXZpbGVnZV9jZmcuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOmdouadv+iuvue9ruS4jeWPr+ingeeahOWbnuiwgyzov5nph4zlgZrkuIDkupvkuI3lj6/op4HnmoTlsY/olL3lpITnkIZcbiAgICBvbkhpZGU6IGZ1bmN0aW9uICgpIHtcblxuICAgIH0sXG5cbiAgICAvLyDlvZPpnaLmnb/ku47kuLvoioLngrnph4rmlL7mjonnmoTosIPnlKjmjqXlj6Ms6ZyA6KaB5omL5Yqo6LCD55SoLOiAjOS4lOS5n+S4gOWumuimgeiwg+eUqFxuICAgIG9uRGVsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYl9zY3JvbGx2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGx2aWV3LmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGx2aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==