(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/stronger/view/stronger_panel.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, '1158fjTQ45DN5n4eq7HPIef', 'stronger_panel'); // Scripts/mod/stronger/view/stronger_panel.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-03-29 14:49:49 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var HeroController = require("hero_controller"); var StrongerController = require("stronger_controller"); var HeroConst = require("hero_const"); var StrongerPanelItem = require("Stronger_panel_item"); var CommonScrollView = require("common_scrollview"); var StrongerEvent = require("stronger_event"); var StrongerPanel = cc.Class({ "extends": BasePanel, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("stronger", "stronger_panel"); this.partner_id = arguments[0] || 0; //-- 选中的英雄 this.ctrl = StrongerController.getInstance(); this.model = StrongerController.getInstance().getModel(); this.partner_id_indedx = 0; this.partnerList = []; this.cur_hero_item = null; }, // 可以初始化声明一些变量的 initConfig: function initConfig() {}, // 初始化一些配置数据,可以用于声明一些变量之类的 initPanel: function initPanel() { this.hero_con_nd = this.seekChild("hero_con"); this.selected_nd = this.seekChild("selected_nd"); this.scroll_con_nd = this.seekChild("scroll_con"); this.now_hero_val_lb = this.seekChild("now_hero_val", cc.Label); this.loadingbar_exp_lb = this.seekChild("loadingbar_exp", cc.Label); this.loadingbar_bg_pb = this.seekChild("loadingbar_bg", cc.ProgressBar); var size = cc.size(this.scroll_con_nd.width, this.scroll_con_nd.height); var setting_2 = { item_class: StrongerPanelItem, //-- 单元类 start_x: 0, //-- 第一个单元的X起点 space_x: 10, //-- x方向的间隔 start_y: 0, //-- 第一个单元的Y起点 space_y: 8, //-- y方向的间隔 item_width: 617, //-- 单元的尺寸width item_height: 142, //-- 单元的尺寸height row: 0, //-- 行数,作用于水平滚动类型 col: 1 //-- 列数,作用于垂直滚动类型 }; this.item_scroll = new CommonScrollView(); this.item_scroll.createScroll(this.scroll_con_nd, cc.v2(-size.width / 2, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, size, setting_2, cc.v2(0, 0)); this.createHeroList(); }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { var self = this; this.addGlobalEvent(StrongerEvent.UPDATE_SCROE, function (data) { if (self.cur_hero_item) { var cur_hero_vo = self.cur_hero_item.getData(); if (cur_hero_vo.bid == data.partner_bid) { this.refreshViewByHero(cur_hero_vo); } } }.bind(this)); }, // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了 onShow: function onShow(params) {}, // 面板设置不可见的回调,这里做一些不可见的屏蔽处理 onHide: function onHide() {}, // --创建英雄列表 createHeroList: function createHeroList() { var _this = this; var self = this; // --只显示上阵英雄 var list = HeroController.getInstance().getModel().getMyPosList(); var show_list = []; for (var k in list) { //k,v in pairs(list) do var v = list[k]; var hero_vo = HeroController.getInstance().getModel().getHeroById(v.id); if (self.partner_id == 0 && show_list.length == 0) { // -- 没有默认选中的英雄则选中第一个 self.partner_id = hero_vo.partner_id; } show_list.push(hero_vo); } if (show_list.length == 0) return; var _loop = function _loop(i) { var hero_item = ItemsPool.getInstance().getItem("hero_exhibition_item"); hero_item.setData(show_list[i]); hero_item.setParent(_this.hero_con_nd); hero_item.show(); hero_item.setScale(0.8); hero_item.setPosition(60 + i * 110, 0); hero_item.addCallBack(function () { if (i == this.partner_id_indedx) return; this._onClickHero(i); }.bind(_this)); _this.partnerList[i] = hero_item; //show_list[i] }; for (var i = 0; i < show_list.length; i++) { _loop(i); } this._onClickHero(this.partner_id_indedx); }, // -- 点击英雄头像 _onClickHero: function _onClickHero(index) { var self = this; this.partner_id_indedx = index; if (this.selected_nd) { this.selected_nd.setPosition(60 + index * 110, -10); } var hero_vo = this.partnerList[index].getData(); // -- 请求伙伴变强相关数据 self.cur_hero_item = this.partnerList[index]; self.ctrl.sender11070(hero_vo.partner_id); }, // -- 刷新为某个英雄的相关数据 refreshViewByHero: function refreshViewByHero(hero_vo) { var self = this; self.now_hero_val_lb.string = hero_vo.name; var bar = self.model.getTotalAndMaxValByBid(hero_vo.bid); var total_val = bar.total, max_val = bar.max; self.loadingbar_exp_lb.string = total_val + "/" + max_val; this.loadingbar_bg_pb.progress = total_val / max_val; self.refreshItemList(hero_vo.bid); }, refreshItemList: function refreshItemList(bid) { var list_data = []; for (var k in Config.stronger_data.data_stronger_two) { //k,v in pairs(Config.stronger_data.data_stronger_two) do var v = Config.stronger_data.data_stronger_two[k]; var is_open = true; for (var i = 0; i < v.limit.length; ++i) { //_,lData in pairs(v.limit) do var lData = v.limit[i]; var open_status = this.model.checkStrongItemIsOpen(lData); if (open_status == false) { is_open = false; break; } } if (is_open) { var data = Utils.deepCopy(v); var obj = this.model.getStrongerValByBid(bid, v.id); data.score_val = obj.scroe_val; data.max_val = obj.max_val; list_data.push(data); } } this.item_scroll.setData(list_data); }, getCurHero: function getCurHero() { return this.cur_hero_item; }, // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用 onDelete: function onDelete() { if (this.item_scroll) { this.item_scroll.deleteMe(); this.item_scroll = null; } if (this.partnerList) { for (var i = 0; i < this.partnerList.length; ++i) { this.partnerList[i].deleteMe(); } this.partnerList = null; } } }); module.exports = StrongerPanel; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxzdHJvbmdlclxcdmlld1xcc3Ryb25nZXJfcGFuZWwuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiSGVyb0NvbnRyb2xsZXIiLCJTdHJvbmdlckNvbnRyb2xsZXIiLCJIZXJvQ29uc3QiLCJTdHJvbmdlclBhbmVsSXRlbSIsIkNvbW1vblNjcm9sbFZpZXciLCJTdHJvbmdlckV2ZW50IiwiU3Ryb25nZXJQYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJwYXJ0bmVyX2lkIiwiYXJndW1lbnRzIiwiY3RybCIsImdldEluc3RhbmNlIiwibW9kZWwiLCJnZXRNb2RlbCIsInBhcnRuZXJfaWRfaW5kZWR4IiwicGFydG5lckxpc3QiLCJjdXJfaGVyb19pdGVtIiwiaW5pdENvbmZpZyIsImluaXRQYW5lbCIsImhlcm9fY29uX25kIiwic2Vla0NoaWxkIiwic2VsZWN0ZWRfbmQiLCJzY3JvbGxfY29uX25kIiwibm93X2hlcm9fdmFsX2xiIiwiTGFiZWwiLCJsb2FkaW5nYmFyX2V4cF9sYiIsImxvYWRpbmdiYXJfYmdfcGIiLCJQcm9ncmVzc0JhciIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsInNldHRpbmdfMiIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwiaXRlbV9zY3JvbGwiLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsImNyZWF0ZUhlcm9MaXN0IiwicmVnaXN0ZXJFdmVudCIsInNlbGYiLCJhZGRHbG9iYWxFdmVudCIsIlVQREFURV9TQ1JPRSIsImRhdGEiLCJjdXJfaGVyb192byIsImdldERhdGEiLCJiaWQiLCJwYXJ0bmVyX2JpZCIsInJlZnJlc2hWaWV3QnlIZXJvIiwiYmluZCIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsImxpc3QiLCJnZXRNeVBvc0xpc3QiLCJzaG93X2xpc3QiLCJrIiwidiIsImhlcm9fdm8iLCJnZXRIZXJvQnlJZCIsImlkIiwibGVuZ3RoIiwicHVzaCIsImkiLCJoZXJvX2l0ZW0iLCJJdGVtc1Bvb2wiLCJnZXRJdGVtIiwic2V0RGF0YSIsInNldFBhcmVudCIsInNob3ciLCJzZXRTY2FsZSIsInNldFBvc2l0aW9uIiwiYWRkQ2FsbEJhY2siLCJfb25DbGlja0hlcm8iLCJpbmRleCIsInNlbmRlcjExMDcwIiwic3RyaW5nIiwibmFtZSIsImJhciIsImdldFRvdGFsQW5kTWF4VmFsQnlCaWQiLCJ0b3RhbF92YWwiLCJ0b3RhbCIsIm1heF92YWwiLCJtYXgiLCJwcm9ncmVzcyIsInJlZnJlc2hJdGVtTGlzdCIsImxpc3RfZGF0YSIsIkNvbmZpZyIsInN0cm9uZ2VyX2RhdGEiLCJkYXRhX3N0cm9uZ2VyX3R3byIsImlzX29wZW4iLCJsaW1pdCIsImxEYXRhIiwib3Blbl9zdGF0dXMiLCJjaGVja1N0cm9uZ0l0ZW1Jc09wZW4iLCJVdGlscyIsImRlZXBDb3B5Iiwib2JqIiwiZ2V0U3Ryb25nZXJWYWxCeUJpZCIsInNjb3JlX3ZhbCIsInNjcm9lX3ZhbCIsImdldEN1ckhlcm8iLCJvbkRlbGV0ZSIsImRlbGV0ZU1lIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGNBQWMsR0FBR0QsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlFLGtCQUFrQixHQUFHRixPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUcsU0FBUyxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJ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LENBQUN4QixJQUFWLENBQWVuQixJQUFmO0FBQ0g7QUFDSjs7QUFDRCxTQUFLWixXQUFMLENBQWlCb0MsT0FBakIsQ0FBeUJtQixTQUF6QjtBQUNILEdBM0l3QjtBQTRJekJlLEVBQUFBLFVBNUl5Qix3QkE0SVg7QUFDVixXQUFPLEtBQUsvRixhQUFaO0FBQ0gsR0E5SXdCO0FBK0l6QjtBQUNBZ0csRUFBQUEsUUFBUSxFQUFDLG9CQUFVO0FBQ2YsUUFBSSxLQUFLdkUsV0FBVCxFQUFzQjtBQUNsQixXQUFLQSxXQUFMLENBQWlCd0UsUUFBakI7QUFDQSxXQUFLeEUsV0FBTCxHQUFtQixJQUFuQjtBQUNIOztBQUNELFFBQUcsS0FBSzFCLFdBQVIsRUFBb0I7QUFDaEIsV0FBSSxJQUFJMEQsQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxHQUFDLEtBQUsxRCxXQUFMLENBQWlCd0QsTUFBL0IsRUFBc0MsRUFBRUUsQ0FBeEMsRUFBMEM7QUFDdEMsYUFBSzFELFdBQUwsQ0FBaUIwRCxDQUFqQixFQUFvQndDLFFBQXBCO0FBQ0g7O0FBQ0QsV0FBS2xHLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDtBQUNKO0FBM0p3QixDQUFULENBQXBCO0FBNkpBbUcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCbEgsYUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAzLTI5IDE0OjQ5OjQ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKVxudmFyIFN0cm9uZ2VyQ29udHJvbGxlciA9IHJlcXVpcmUoXCJzdHJvbmdlcl9jb250cm9sbGVyXCIpXG52YXIgSGVyb0NvbnN0ID0gcmVxdWlyZShcImhlcm9fY29uc3RcIilcbnZhciBTdHJvbmdlclBhbmVsSXRlbSA9IHJlcXVpcmUoXCJTdHJvbmdlcl9wYW5lbF9pdGVtXCIpXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBTdHJvbmdlckV2ZW50ID0gcmVxdWlyZShcInN0cm9uZ2VyX2V2ZW50XCIpXG52YXIgU3Ryb25nZXJQYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwic3Ryb25nZXJcIiwgXCJzdHJvbmdlcl9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5wYXJ0bmVyX2lkID0gYXJndW1lbnRzWzBdIHx8IDAgIC8vLS0g6YCJ5Lit55qE6Iux6ZuEXG4gICAgICAgIHRoaXMuY3RybCA9IFN0cm9uZ2VyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLm1vZGVsID0gU3Ryb25nZXJDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKVxuICAgICAgICB0aGlzLnBhcnRuZXJfaWRfaW5kZWR4ID0gMFxuICAgICAgICB0aGlzLnBhcnRuZXJMaXN0ID0gW11cbiAgICAgICAgdGhpcy5jdXJfaGVyb19pdGVtID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyDlj6/ku6XliJ3lp4vljJblo7DmmI7kuIDkupvlj5jph4/nmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgXG4gICAgfSwgIFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRQYW5lbDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmhlcm9fY29uX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJoZXJvX2NvblwiKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZF9uZCA9IHRoaXMuc2Vla0NoaWxkKFwic2VsZWN0ZWRfbmRcIilcbiAgICAgICAgdGhpcy5zY3JvbGxfY29uX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJzY3JvbGxfY29uXCIpXG4gICAgICAgIHRoaXMubm93X2hlcm9fdmFsX2xiID0gICB0aGlzLnNlZWtDaGlsZChcIm5vd19oZXJvX3ZhbFwiLGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmxvYWRpbmdiYXJfZXhwX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJsb2FkaW5nYmFyX2V4cFwiLGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmxvYWRpbmdiYXJfYmdfcGIgPSB0aGlzLnNlZWtDaGlsZChcImxvYWRpbmdiYXJfYmdcIixjYy5Qcm9ncmVzc0JhcilcbiAgICAgICAgbGV0IHNpemUgPSBjYy5zaXplKHRoaXMuc2Nyb2xsX2Nvbl9uZC53aWR0aCx0aGlzLnNjcm9sbF9jb25fbmQuaGVpZ2h0KVxuICAgICAgICBsZXQgc2V0dGluZ18yID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzcyA6IFN0cm9uZ2VyUGFuZWxJdGVtLCAgICAgIC8vLS0g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94IDogMCwgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3ggOiAxMCwgICAgICAgICAgICAgICAgICAgIC8vLS0geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeSA6IDAsICAgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3kgOiA4LCAgICAgICAgICAgICAgICAgICAvLy0tIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGggOiA2MTcsICAgICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQgOiAxNDIsICAgICAgICAgICAgICAvLy0tIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93IDogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sIDogMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKTtcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbC5jcmVhdGVTY3JvbGwodGhpcy5zY3JvbGxfY29uX25kLGNjLnYyKC1zaXplLndpZHRoLzIsMCksU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCxTY3JvbGxWaWV3U3RhcnRQb3MudG9wLHNpemUsc2V0dGluZ18yLGNjLnYyKDAsMCkpXG4gICAgICAgIHRoaXMuY3JlYXRlSGVyb0xpc3QoKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChTdHJvbmdlckV2ZW50LlVQREFURV9TQ1JPRSxmdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgICAgICBpZiAoc2VsZi5jdXJfaGVyb19pdGVtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cl9oZXJvX3ZvID0gc2VsZi5jdXJfaGVyb19pdGVtLmdldERhdGEoKVxuICAgICAgICAgICAgICAgIGlmIChjdXJfaGVyb192by5iaWQgPT0gZGF0YS5wYXJ0bmVyX2JpZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3QnlIZXJvKGN1cl9oZXJvX3ZvKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OmZ1bmN0aW9uKHBhcmFtcyl7XG5cbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTpmdW5jdGlvbigpe1xuXG4gICAgfSxcbiAgICAvLyAtLeWIm+W7uuiLsembhOWIl+ihqFxuICAgIGNyZWF0ZUhlcm9MaXN0KCAgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIC8vIC0t5Y+q5pi+56S65LiK6Zi16Iux6ZuEXG4gICAgICAgIGxldCBsaXN0ID0gSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldE15UG9zTGlzdCgpXG4gICAgICAgIGxldCBzaG93X2xpc3QgPSBbXVxuICAgICAgICBmb3IgKGxldCBrIGluIGxpc3QpeyAvL2ssdiBpbiBwYWlycyhsaXN0KSBkb1xuICAgICAgICAgICAgbGV0IHYgPSBsaXN0W2tdXG4gICAgICAgICAgICBsZXQgaGVyb192byA9IEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRIZXJvQnlJZCh2LmlkKVxuICAgICAgICAgICAgaWYgKHNlbGYucGFydG5lcl9pZCA9PSAwICYmIHNob3dfbGlzdC5sZW5ndGggPT0gMCApeyAvLyAtLSDmsqHmnInpu5jorqTpgInkuK3nmoToi7Hpm4TliJnpgInkuK3nrKzkuIDkuKpcbiAgICAgICAgICAgICAgICBzZWxmLnBhcnRuZXJfaWQgPSBoZXJvX3ZvLnBhcnRuZXJfaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3dfbGlzdC5wdXNoKGhlcm9fdm8pXG4gICAgICAgIH1cbiAgICAgICAgaWYoc2hvd19saXN0Lmxlbmd0aCA9PSAwKXJldHVyblxuICAgICAgICBmb3IobGV0IGk9MDtpPHNob3dfbGlzdC5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIGxldCBoZXJvX2l0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiaGVyb19leGhpYml0aW9uX2l0ZW1cIik7XG4gICAgICAgICAgICBoZXJvX2l0ZW0uc2V0RGF0YShzaG93X2xpc3RbaV0pXG4gICAgICAgICAgICBoZXJvX2l0ZW0uc2V0UGFyZW50KHRoaXMuaGVyb19jb25fbmQpO1xuICAgICAgICAgICAgaGVyb19pdGVtLnNob3coKTtcbiAgICAgICAgICAgIGhlcm9faXRlbS5zZXRTY2FsZSgwLjgpXG4gICAgICAgICAgICBoZXJvX2l0ZW0uc2V0UG9zaXRpb24oNjAraSoxMTAsMClcbiAgICAgICAgICAgIGhlcm9faXRlbS5hZGRDYWxsQmFjayhmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmKGkgPT0gdGhpcy5wYXJ0bmVyX2lkX2luZGVkeClyZXR1cm5cbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNsaWNrSGVybyhpKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgdGhpcy5wYXJ0bmVyTGlzdFtpXSA9IGhlcm9faXRlbSAvL3Nob3dfbGlzdFtpXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uQ2xpY2tIZXJvKHRoaXMucGFydG5lcl9pZF9pbmRlZHgpXG4gICAgfSxcbiAgICBcbiAgICAvLyAtLSDngrnlh7voi7Hpm4TlpLTlg49cbiAgICBfb25DbGlja0hlcm8oaW5kZXgpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgdGhpcy5wYXJ0bmVyX2lkX2luZGVkeCA9IGluZGV4XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRfbmQpe1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF9uZC5zZXRQb3NpdGlvbig2MCtpbmRleCoxMTAsLTEwKVxuICAgICAgICB9XG4gICAgICAgIGxldCBoZXJvX3ZvID0gdGhpcy5wYXJ0bmVyTGlzdFtpbmRleF0uZ2V0RGF0YSgpXG4gICAgICAgIC8vIC0tIOivt+axguS8meS8tOWPmOW8uuebuOWFs+aVsOaNrlxuICAgICAgICBzZWxmLmN1cl9oZXJvX2l0ZW0gPSB0aGlzLnBhcnRuZXJMaXN0W2luZGV4XVxuICAgICAgICBzZWxmLmN0cmwuc2VuZGVyMTEwNzAoaGVyb192by5wYXJ0bmVyX2lkKVxuICAgIH0sXG4gICAgLy8gLS0g5Yi35paw5Li65p+Q5Liq6Iux6ZuE55qE55u45YWz5pWw5o2uXG4gICAgcmVmcmVzaFZpZXdCeUhlcm8oIGhlcm9fdm8gKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIHNlbGYubm93X2hlcm9fdmFsX2xiLnN0cmluZyA9IGhlcm9fdm8ubmFtZVxuICAgICAgICBsZXQgYmFyID0gc2VsZi5tb2RlbC5nZXRUb3RhbEFuZE1heFZhbEJ5QmlkKGhlcm9fdm8uYmlkKVxuICAgICAgICBsZXQgdG90YWxfdmFsID0gYmFyLnRvdGFsLCBtYXhfdmFsID0gIGJhci5tYXhcbiAgICAgICAgc2VsZi5sb2FkaW5nYmFyX2V4cF9sYi5zdHJpbmcgPSB0b3RhbF92YWwrXCIvXCIrbWF4X3ZhbFxuICAgICAgICB0aGlzLmxvYWRpbmdiYXJfYmdfcGIucHJvZ3Jlc3MgPSAgdG90YWxfdmFsL21heF92YWxcbiAgICAgICAgc2VsZi5yZWZyZXNoSXRlbUxpc3QoaGVyb192by5iaWQpXG4gICAgfSxcbiAgICByZWZyZXNoSXRlbUxpc3QoYmlkKXtcbiAgICAgICAgbGV0IGxpc3RfZGF0YSA9IFtdXG4gICAgICAgIGZvciAobGV0IGsgaW4gQ29uZmlnLnN0cm9uZ2VyX2RhdGEuZGF0YV9zdHJvbmdlcl90d28peyAvL2ssdiBpbiBwYWlycyhDb25maWcuc3Ryb25nZXJfZGF0YS5kYXRhX3N0cm9uZ2VyX3R3bykgZG9cbiAgICAgICAgICAgIGxldCB2ID0gQ29uZmlnLnN0cm9uZ2VyX2RhdGEuZGF0YV9zdHJvbmdlcl90d29ba11cbiAgICAgICAgICAgIGxldCBpc19vcGVuID0gdHJ1ZVxuICAgICAgICAgICAgZm9yIChsZXQgaT0wO2k8di5saW1pdC5sZW5ndGg7KytpKXsvL18sbERhdGEgaW4gcGFpcnModi5saW1pdCkgZG9cbiAgICAgICAgICAgICAgICBsZXQgbERhdGEgPSB2LmxpbWl0W2ldXG4gICAgICAgICAgICAgICAgbGV0IG9wZW5fc3RhdHVzID0gdGhpcy5tb2RlbC5jaGVja1N0cm9uZ0l0ZW1Jc09wZW4obERhdGEpXG4gICAgICAgICAgICAgICAgaWYgKG9wZW5fc3RhdHVzID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICAgICAgaXNfb3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzX29wZW4pe1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gVXRpbHMuZGVlcENvcHkodilcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gdGhpcy5tb2RlbC5nZXRTdHJvbmdlclZhbEJ5QmlkKGJpZCwgdi5pZClcbiAgICAgICAgICAgICAgICBkYXRhLnNjb3JlX3ZhbCA9IG9iai5zY3JvZV92YWxcbiAgICAgICAgICAgICAgICBkYXRhLm1heF92YWwgPSAgb2JqLm1heF92YWxcbiAgICAgICAgICAgICAgICBsaXN0X2RhdGEucHVzaChkYXRhKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbV9zY3JvbGwuc2V0RGF0YShsaXN0X2RhdGEpXG4gICAgfSxcbiAgICBnZXRDdXJIZXJvKCAgKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyX2hlcm9faXRlbVxuICAgIH0sXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICBpZiAodGhpcy5pdGVtX3Njcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbC5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5wYXJ0bmVyTGlzdCl7XG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMucGFydG5lckxpc3QubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyTGlzdFtpXS5kZWxldGVNZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnRuZXJMaXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KVxubW9kdWxlLmV4cG9ydHMgPSBTdHJvbmdlclBhbmVsOyJdfQ==