difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/adventureactivity/view/adventureactivity_item_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, 'ab139obfzZPRbcq7m3tWfJe', 'adventureactivity_item_panel');
// Scripts/mod/adventureactivity/view/adventureactivity_item_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-05-09 10:03:33
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var AdventureActivityConst = require("adventureactivity_const");
 
var MainuiController = require("mainui_controller");
 
var AdventureActivityController = require("adventureactivity_controller");
 
var AdventureController = require("adventure_controller");
 
var Adventureactivity_itemPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("adventureactivity", "adventureactivity_item");
    this.ctrl = AdventureActivityController.getInstance();
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {},
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    this.main_container = this.root_wnd.getChildByName("main_container");
    this.item_bg_node = this.main_container.getChildByName("item_bg");
    this.item_bg = this.item_bg_node.getComponent(cc.Sprite);
    this.open_desc = this.main_container.getChildByName("open_desc").getComponent(cc.Label);
    this.open_desc.node.active = false;
    this.open_desc2 = this.main_container.getChildByName("open_desc_2").getComponent(cc.Label);
    this.open_desc2.node.active = false;
    this.join_bg = this.main_container.getChildByName("join_bg");
    this.join_desc = this.main_container.getChildByName("join_desc").getComponent(cc.Label);
    this.join_desc.string = "";
    this.lock_layer = this.main_container.getChildByName("lock_layer");
    this.award_list = this.main_container.getChildByName("award_list");
    this.award_list.active = false;
    var scroll_view_size = this.award_list.getContentSize();
    var setting = {
      item_class: "backpack_item",
      // 单元类
      start_x: 0,
      // 第一个单元的X起点
      space_x: 10,
      // x方向的间隔
      start_y: 0,
      // 第一个单元的Y起点
      space_y: 0,
      // y方向的间隔
      item_width: 120 * 0.7,
      // 单元的尺寸width
      item_height: 120 * 0.7,
      // 单元的尺寸height
      row: 1,
      // 行数,作用于水平滚动类型
      col: 0,
      // 列数,作用于垂直滚动类型
      need_dynamic: true,
      scale: 0.7
    };
 
    var CommonScrollView = require("common_scrollview");
 
    this.award_scrollview = new CommonScrollView();
    this.award_scrollview.createScroll(this.award_list, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, setting); // this.award_scrollview:setSwallowTouches(false)
 
    if (this.data) {
      this.updateInfo();
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    //当用户点击的时候记录鼠标点击状态
    this.main_container.on(cc.Node.EventType.TOUCH_START, function (event) {
      var touches = event.getTouches();
      this.touch_began = touches[0].getDelta();
    }, this); //当鼠标抬起的时候恢复状态
 
    this.main_container.on(cc.Node.EventType.TOUCH_END, function (event) {
      var touches = event.getTouches();
      this.touch_end = touches[0].getDelta();
      var is_click = true;
 
      if (this.touch_began != null) {
        is_click = Math.abs(this.touch_end.x - this.touch_began.x) <= 20 && Math.abs(this.touch_end.y - this.touch_began.y) <= 20;
      }
 
      if (is_click) {
        if (this.data) {
          var is_open = MainuiController.getInstance().checkIsOpenByActivate(this.data.activate);
 
          if (is_open == true) {
            this.ctrl.onClickGotoAdvenTureAcivity(this.data.retrue_id);
          } else {
            if (this.data.id == AdventureActivityConst.Ground_Type.heaven) {
              var str = cc.js.formatStr(Utils.TI18N("%s,角色%s可进入"), this.data.desc2, this.data.desc);
              message(str);
            } else {
              message(this.data.desc);
            }
          }
        }
      }
    }, this);
  },
  setData: function setData(data) {
    if (!data) return;
    this.data = data;
 
    if (this.root_wnd) {
      this.updateInfo();
    }
  },
  updateInfo: function updateInfo() {
    // 背景
    var res = PathTool.getBigBg(cc.js.formatStr("txt_cn_adventrueactivity_%d", this.data.res_id), null, "adventrueactivity");
    this.loadRes(res, function (resObject) {
      this.item_bg.spriteFrame = resObject;
    }.bind(this));
    this.join_desc.string = this.data.item_desc;
    var size = this.join_desc.node.getContentSize();
 
    if (size.width < 250) {
      size.width = 250;
    }
 
    this.join_bg.setContentSize(cc.size(size.width + 60, size.height)); // 奖励数据
 
    var item_list = [];
 
    for (var i in this.data.award) {
      var v = this.data.award[i];
      var vo = {};
 
      if (vo) {
        vo.bid = v[0];
        vo.num = v[1];
        item_list.push(vo);
      }
    }
 
    this.award_scrollview.setData(item_list);
    this.award_scrollview.addEndCallBack(function () {
      var list = this.award_scrollview.getItemList(); // var book_id_cfg = Config.dungeon_heaven_data.data_const["heaven_handbook"];
 
      for (var k in list) {
        var iData = list[k].getData();
        var is_special; // if(this.data.id == AdventureActivityConst.Ground_Type.heaven && book_id_cfg && iData){
        //     for(var n in book_id_cfg.val){
        //         if(book_id_cfg.val[n] == iData.id){
        //             is_special = 2;
        //             break;
        //         }
        //     }
        // }
 
        list[k].setDefaultTip(true, null, null, is_special);
      }
    }.bind(this));
    var is_open = MainuiController.getInstance().checkIsOpenByActivate(this.data.activate);
 
    if (is_open == true) {
      this.lock_layer.active = false;
      this.open_desc.node.active = false;
      this.award_list.active = true;
    } else {
      this.lock_layer.active = true;
      this.open_desc.string = this.data.desc;
      this.open_desc.node.active = true;
 
      if (this.data.desc != "") {
        this.open_desc2.string = this.data.desc2;
        this.open_desc2.node.active = true;
      }
 
      this.award_list.active = false;
    }
 
    this.updateRedStatus();
  },
  //  红点刷新
  updateRedStatus: function updateRedStatus() {
    if (this.data) {
      var red_status = false;
 
      if (this.data.id == AdventureActivityConst.Ground_Type.adventure) {
        //冒险
        red_status = AdventureController.getInstance().getModel().getAdventureRedPoint();
      } else if (this.data.id == AdventureActivityConst.Ground_Type.element) {//元素
        // red_status = ElementController:getInstance():getModel():checkElementRedStatus();
      } else if (this.data.id == AdventureActivityConst.Ground_Type.heaven) {//天界副本
        // red_status = HeavenController:getInstance():getModel():getHeavenRedStatus();
      }
 
      var is_open = MainuiController.getInstance().checkIsOpenByActivate(this.data.activate);
 
      if (is_open == false) {
        red_status = false;
      }
 
      Utils.addRedPointToNodeByStatus(this.main_container, red_status, this.main_container.width / 2, this.main_container.height / 2, 99, 2);
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.award_scrollview) {
      this.award_scrollview.deleteMe();
      this.award_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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhZHZlbnR1cmVhY3Rpdml0eVxcdmlld1xcYWR2ZW50dXJlYWN0aXZpdHlfaXRlbV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJBZHZlbnR1cmVBY3Rpdml0eUNvbnN0IiwiTWFpbnVpQ29udHJvbGxlciIsIkFkdmVudHVyZUFjdGl2aXR5Q29udHJvbGxlciIsIkFkdmVudHVyZUNvbnRyb2xsZXIiLCJBZHZlbnR1cmVhY3Rpdml0eV9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImluaXRQYW5lbCIsIm1haW5fY29udGFpbmVyIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsIml0ZW1fYmdfbm9kZSIsIml0ZW1fYmciLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJvcGVuX2Rlc2MiLCJMYWJlbCIsIm5vZGUiLCJhY3RpdmUiLCJvcGVuX2Rlc2MyIiwiam9pbl9iZyIsImpvaW5fZGVzYyIsInN0cmluZyIsImxvY2tfbGF5ZXIiLCJhd2FyZF9saXN0Iiwic2Nyb2xsX3ZpZXdfc2l6ZSIsImdldENvbnRlbnRTaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwibmVlZF9keW5hbWljIiwic2NhbGUiLCJDb21tb25TY3JvbGxWaWV3IiwiYXdhcmRfc2Nyb2xsdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsImhvcml6b250YWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJkYXRhIiwidXBkYXRlSW5mbyIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIk5vZGUiLCJFdmVudFR5cGUiLCJUT1VDSF9TVEFSVCIsImV2ZW50IiwidG91Y2hlcyIsImdldFRvdWNoZXMiLCJ0b3VjaF9iZWdhbiIsImdldERlbHRhIiwiVE9VQ0hfRU5EIiwidG91Y2hfZW5kIiwiaXNfY2xpY2siLCJNYXRoIiwiYWJzIiwieCIsInkiLCJpc19vcGVuIiwiY2hlY2tJc09wZW5CeUFjdGl2YXRlIiwiYWN0aXZhdGUiLCJvbkNsaWNrR290b0FkdmVuVHVyZUFjaXZpdHkiLCJyZXRydWVfaWQiLCJpZCIsIkdyb3VuZF9UeXBlIiwiaGVhdmVuIiwic3RyIiwianMiLCJmb3JtYXRTdHIiLCJVdGlscyIsIlRJMThOIiwiZGVzYzIiLCJkZXNjIiwibWVzc2FnZSIsInNldERhdGEiLCJyZXMiLCJnZXRCaWdCZyIsInJlc19pZCIsImxvYWRSZXMiLCJyZXNPYmplY3QiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJpdGVtX2Rlc2MiLCJzaXplIiwid2lkdGgiLCJzZXRDb250ZW50U2l6ZSIsImhlaWdodCIsIml0ZW1fbGlzdCIsImkiLCJhd2FyZCIsInYiLCJ2byIsImJpZCIsIm51bSIsInB1c2giLCJhZGRFbmRDYWxsQmFjayIsImxpc3QiLCJnZXRJdGVtTGlzdCIsImsiLCJpRGF0YSIsImdldERhdGEiLCJpc19zcGVjaWFsIiwic2V0RGVmYXVsdFRpcCIsInVwZGF0ZVJlZFN0YXR1cyIsInJlZF9zdGF0dXMiLCJhZHZlbnR1cmUiLCJnZXRNb2RlbCIsImdldEFkdmVudHVyZVJlZFBvaW50IiwiZWxlbWVudCIsImFkZFJlZFBvaW50VG9Ob2RlQnlTdGF0dXMiLCJvblNob3ciLCJwYXJhbXMiLCJvbkhpZGUiLCJvbkRlbGV0ZSIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUVELE9BQU8sQ0FBQyx5QkFBRCxDQUFuQzs7QUFD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QUFDakU7QUFDSDs7QUFDRCxVQUFJUCxPQUFPLEdBQUd4RSxnQkFBZ0IsQ0FBQ1csV0FBakIsR0FBK0I4RCxxQkFBL0IsQ0FBcUQsS0FBS3BCLElBQUwsQ0FBVXFCLFFBQS9ELENBQWQ7O0FBQ0EsVUFBR0YsT0FBTyxJQUFJLEtBQWQsRUFBb0I7QUFDaEI4QyxRQUFBQSxVQUFVLEdBQUcsS0FBYjtBQUNIOztBQUNEbkMsTUFBQUEsS0FBSyxDQUFDd0MseUJBQU4sQ0FBZ0MsS0FBSzdHLGNBQXJDLEVBQXFEd0csVUFBckQsRUFBaUUsS0FBS3hHLGNBQUwsQ0FBb0JvRixLQUFwQixHQUEwQixDQUEzRixFQUE4RixLQUFLcEYsY0FBTCxDQUFvQnNGLE1BQXBCLEdBQTJCLENBQXpILEVBQTRILEVBQTVILEVBQWdJLENBQWhJO0FBQ0g7QUFDSixHQTVLc0M7QUE2S3ZDO0FBQ0F3QixFQUFBQSxNQUFNLEVBQUMsZ0JBQVNDLE1BQVQsRUFBZ0IsQ0FFdEIsQ0FoTHNDO0FBa0x2QztBQUNBQyxFQUFBQSxNQUFNLEVBQUMsa0JBQVUsQ0FFaEIsQ0FyTHNDO0FBdUx2QztBQUNBQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVU7QUFDZixRQUFHLEtBQUtqRixnQkFBUixFQUF5QjtBQUNyQixXQUFLQSxnQkFBTCxDQUFzQmtGLFFBQXRCO0FBQ0EsV0FBS2xGLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0g7QUFDSjtBQTdMc0MsQ0FBVCxDQUFsQyIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDUtMDkgMTA6MDM6MzNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWR2ZW50dXJlQWN0aXZpdHlDb25zdD0gcmVxdWlyZShcImFkdmVudHVyZWFjdGl2aXR5X2NvbnN0XCIpO1xudmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG52YXIgQWR2ZW50dXJlQWN0aXZpdHlDb250cm9sbGVyID0gcmVxdWlyZShcImFkdmVudHVyZWFjdGl2aXR5X2NvbnRyb2xsZXJcIik7XG52YXIgQWR2ZW50dXJlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhZHZlbnR1cmVfY29udHJvbGxlclwiKTtcblxudmFyIEFkdmVudHVyZWFjdGl2aXR5X2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYWR2ZW50dXJlYWN0aXZpdHlcIiwgXCJhZHZlbnR1cmVhY3Rpdml0eV9pdGVtXCIpO1xuICAgICAgICB0aGlzLmN0cmwgPSBBZHZlbnR1cmVBY3Rpdml0eUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy5pdGVtX2JnX25vZGUgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9iZ1wiKTtcbiAgICAgICAgdGhpcy5pdGVtX2JnID0gdGhpcy5pdGVtX2JnX25vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMub3Blbl9kZXNjID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm9wZW5fZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLm9wZW5fZGVzYy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5fZGVzYzIgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwib3Blbl9kZXNjXzJcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5vcGVuX2Rlc2MyLm5vZGUuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5qb2luX2JnID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImpvaW5fYmdcIik7XG4gICAgICAgIHRoaXMuam9pbl9kZXNjID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImpvaW5fZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmpvaW5fZGVzYy5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLmxvY2tfbGF5ZXIgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibG9ja19sYXllclwiKTtcbiAgICAgICAgdGhpcy5hd2FyZF9saXN0ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImF3YXJkX2xpc3RcIik7XG4gICAgICAgIHRoaXMuYXdhcmRfbGlzdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSB0aGlzLmF3YXJkX2xpc3QuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBcImJhY2twYWNrX2l0ZW1cIiwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeDogMTAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeTogMCwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgaXRlbV93aWR0aDogMTIwKjAuNywgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDEyMCowLjcsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdzogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcbiAgICAgICAgICAgIGNvbDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWUsXG4gICAgICAgICAgICBzY2FsZTogMC43XG4gICAgICAgIH1cbiAgICAgICAgdmFyIENvbW1vblNjcm9sbFZpZXcgPSByZXF1aXJlKFwiY29tbW9uX3Njcm9sbHZpZXdcIik7XG4gICAgICAgIHRoaXMuYXdhcmRfc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KCk7XG4gICAgICAgIHRoaXMuYXdhcmRfc2Nyb2xsdmlldyAuY3JlYXRlU2Nyb2xsKHRoaXMuYXdhcmRfbGlzdCwgY2MudjIoMCwwKSAsIFNjcm9sbFZpZXdEaXIuaG9yaXpvbnRhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgc2Nyb2xsX3ZpZXdfc2l6ZSwgc2V0dGluZyk7XG4gICAgICAgIC8vIHRoaXMuYXdhcmRfc2Nyb2xsdmlldzpzZXRTd2FsbG93VG91Y2hlcyhmYWxzZSlcblxuICAgICAgICBpZih0aGlzLmRhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmZvKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgLy/lvZPnlKjmiLfngrnlh7vnmoTml7blgJnorrDlvZXpvKDmoIfngrnlh7vnirbmgIFcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lci5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5nZXRUb3VjaGVzKCk7XG4gICAgICAgICAgICB0aGlzLnRvdWNoX2JlZ2FuID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuICAgICAgICB9LHRoaXMpO1xuXG4gICAgICAgIC8v5b2T6byg5qCH5oqs6LW355qE5pe25YCZ5oGi5aSN54q25oCBXG4gICAgICAgIHRoaXMubWFpbl9jb250YWluZXIub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmdldFRvdWNoZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hfZW5kID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuICAgICAgICAgICAgdmFyIGlzX2NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMudG91Y2hfYmVnYW4hPW51bGwpe1xuICAgICAgICAgICAgICAgIGlzX2NsaWNrID0gTWF0aC5hYnModGhpcy50b3VjaF9lbmQueCAtIHRoaXMudG91Y2hfYmVnYW4ueCkgPD0gMjAgJiYgTWF0aC5hYnModGhpcy50b3VjaF9lbmQueSAtIHRoaXMudG91Y2hfYmVnYW4ueSkgPD0gMjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc19jbGljayl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzX29wZW4gPSBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tJc09wZW5CeUFjdGl2YXRlKHRoaXMuZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzX29wZW4gPT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub25DbGlja0dvdG9BZHZlblR1cmVBY2l2aXR5KHRoaXMuZGF0YS5yZXRydWVfaWQpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5pZCA9PSBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0Lkdyb3VuZF9UeXBlLmhlYXZlbil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIiVz77yM6KeS6ImyJXPlj6/ov5vlhaVcIiksdGhpcy5kYXRhLmRlc2MyLHRoaXMuZGF0YS5kZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKHRoaXMuZGF0YS5kZXNjKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LHRoaXMpO1xuICAgIH0sXG5cbiAgICBzZXREYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBpZighZGF0YSlyZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIGlmKHRoaXMucm9vdF93bmQpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmZvKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHVwZGF0ZUluZm86ZnVuY3Rpb24oKXtcbiAgICAgICAgLy8g6IOM5pmvXG4gICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRCaWdCZyhjYy5qcy5mb3JtYXRTdHIoXCJ0eHRfY25fYWR2ZW50cnVlYWN0aXZpdHlfJWRcIiwgdGhpcy5kYXRhLnJlc19pZCksbnVsbCxcImFkdmVudHJ1ZWFjdGl2aXR5XCIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9iZy5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuam9pbl9kZXNjLnN0cmluZyA9IHRoaXMuZGF0YS5pdGVtX2Rlc2M7XG5cbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLmpvaW5fZGVzYy5ub2RlLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIGlmKHNpemUud2lkdGggPCAyNTApe1xuICAgICAgICAgICAgc2l6ZS53aWR0aCA9IDI1MDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmpvaW5fYmcuc2V0Q29udGVudFNpemUoY2Muc2l6ZShzaXplLndpZHRoKzYwLCBzaXplLmhlaWdodCkpO1xuICAgICAgICAvLyDlpZblirHmlbDmja5cbiAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5kYXRhLmF3YXJkKXtcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy5kYXRhLmF3YXJkW2ldO1xuICAgICAgICAgICAgdmFyIHZvID0ge307XG4gICAgICAgICAgICBpZih2byl7XG4gICAgICAgICAgICAgICAgdm8uYmlkID0gdlswXTtcbiAgICAgICAgICAgICAgICB2by5udW0gPSB2WzFdO1xuICAgICAgICAgICAgICAgIGl0ZW1fbGlzdC5wdXNoKHZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF3YXJkX3Njcm9sbHZpZXcuc2V0RGF0YShpdGVtX2xpc3QpO1xuICAgICAgICB0aGlzLmF3YXJkX3Njcm9sbHZpZXcuYWRkRW5kQ2FsbEJhY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5hd2FyZF9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KCk7XG4gICAgICAgICAgICAvLyB2YXIgYm9va19pZF9jZmcgPSBDb25maWcuZHVuZ2Vvbl9oZWF2ZW5fZGF0YS5kYXRhX2NvbnN0W1wiaGVhdmVuX2hhbmRib29rXCJdO1xuICAgICAgICAgICAgZm9yKHZhciBrIGluIGxpc3Qpe1xuICAgICAgICAgICAgICAgIHZhciBpRGF0YSA9IGxpc3Rba10uZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgIHZhciBpc19zcGVjaWFsO1xuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuZGF0YS5pZCA9PSBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0Lkdyb3VuZF9UeXBlLmhlYXZlbiAmJiBib29rX2lkX2NmZyAmJiBpRGF0YSl7XG4gICAgICAgICAgICAgICAgLy8gICAgIGZvcih2YXIgbiBpbiBib29rX2lkX2NmZy52YWwpe1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgaWYoYm9va19pZF9jZmcudmFsW25dID09IGlEYXRhLmlkKXtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBpc19zcGVjaWFsID0gMjtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBsaXN0W2tdLnNldERlZmF1bHRUaXAodHJ1ZSwgbnVsbCwgbnVsbCwgaXNfc3BlY2lhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdmFyIGlzX29wZW4gPSBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tJc09wZW5CeUFjdGl2YXRlKHRoaXMuZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgIGlmKGlzX29wZW4gPT0gdHJ1ZSl7XG4gICAgICAgICAgICB0aGlzLmxvY2tfbGF5ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wZW5fZGVzYy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hd2FyZF9saXN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5sb2NrX2xheWVyLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9wZW5fZGVzYy5zdHJpbmcgPSB0aGlzLmRhdGEuZGVzYztcbiAgICAgICAgICAgIHRoaXMub3Blbl9kZXNjLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5kZXNjICE9IFwiXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9kZXNjMi5zdHJpbmcgPSB0aGlzLmRhdGEuZGVzYzI7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX2Rlc2MyLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXdhcmRfbGlzdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVJlZFN0YXR1cygpO1xuICAgIH0sXG5cbiAgICAvLyAg57qi54K55Yi35pawXG4gICAgdXBkYXRlUmVkU3RhdHVzOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICAgICAgICB2YXIgcmVkX3N0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYodGhpcy5kYXRhLmlkID09IEFkdmVudHVyZUFjdGl2aXR5Q29uc3QuR3JvdW5kX1R5cGUuYWR2ZW50dXJlKXsgLy/lhpLpmalcbiAgICAgICAgICAgICAgICByZWRfc3RhdHVzID0gQWR2ZW50dXJlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0QWR2ZW50dXJlUmVkUG9pbnQoKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZGF0YS5pZCA9PSBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0Lkdyb3VuZF9UeXBlLmVsZW1lbnQpeyAvL+WFg+e0oFxuICAgICAgICAgICAgICAgIC8vIHJlZF9zdGF0dXMgPSBFbGVtZW50Q29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOmdldE1vZGVsKCk6Y2hlY2tFbGVtZW50UmVkU3RhdHVzKCk7XG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLmRhdGEuaWQgPT0gQWR2ZW50dXJlQWN0aXZpdHlDb25zdC5Hcm91bmRfVHlwZS5oZWF2ZW4peyAvL+WkqeeVjOWJr+acrFxuICAgICAgICAgICAgICAgIC8vIHJlZF9zdGF0dXMgPSBIZWF2ZW5Db250cm9sbGVyOmdldEluc3RhbmNlKCk6Z2V0TW9kZWwoKTpnZXRIZWF2ZW5SZWRTdGF0dXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpc19vcGVuID0gTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoZWNrSXNPcGVuQnlBY3RpdmF0ZSh0aGlzLmRhdGEuYWN0aXZhdGUpO1xuICAgICAgICAgICAgaWYoaXNfb3BlbiA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgcmVkX3N0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgVXRpbHMuYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyh0aGlzLm1haW5fY29udGFpbmVyLCByZWRfc3RhdHVzLCB0aGlzLm1haW5fY29udGFpbmVyLndpZHRoLzIsIHRoaXMubWFpbl9jb250YWluZXIuaGVpZ2h0LzIsIDk5LCAyKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OmZ1bmN0aW9uKHBhcmFtcyl7XG5cbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTpmdW5jdGlvbigpe1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5hd2FyZF9zY3JvbGx2aWV3KXtcbiAgICAgICAgICAgIHRoaXMuYXdhcmRfc2Nyb2xsdmlldy5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5hd2FyZF9zY3JvbGx2aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==