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
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/levupgrade/view/lev_upgrade_window.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, '20f19O9c3dDjLtZbLnHaT1+', 'lev_upgrade_window');
// Scripts/mod/levupgrade/view/lev_upgrade_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-04-26 11:37:15
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var ActionController = require("action_controller");
 
var LevupgradeController = require("levupgrade_controller");
 
var StoryEvent = require("story_event");
 
var LevupgradeWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("levupgrade", "lev_upgrade_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Tips; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = LevupgradeController.getInstance();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.lev_list = [];
    this.can_touch = false;
    this.auto_limit_time = 5;
    this.item_list = [];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    var self = this;
    self.background = self.root_wnd.getChildByName("background");
    self.main_container = self.root_wnd.getChildByName("main_container");
    self.back_panel = self.main_container.getChildByName("back_panel");
    self.title_container = self.main_container.getChildByName("title_container");
    self.play_effect = self.title_container.getChildByName("action").getComponent(sp.Skeleton);
    self.title_width = self.title_container.getContentSize().width;
    self.title_height = self.title_container.getContentSize().height;
    var item = self.main_container.getChildByName("item_1");
 
    if (item) {
      var title = item.getChildByName("title");
      title.getComponent(cc.Label).string = "冒险者等级";
      var object = {};
      object.last_lev = item.getChildByName("last_lev");
      object.now_lev = item.getChildByName("now_lev");
      this.lev_list.push(object);
    } // -- 升级奖励
 
 
    self.award_container = self.main_container.getChildByName("award_container");
    var award_title = self.award_container.getChildByName("award_title");
    award_title.getComponent(cc.Label).string = "升级奖励"; // -- 扩展类的说明,不一定有
 
    self.extend_container = self.main_container.getChildByName("extend_container");
    self.extend_panel = self.extend_container.getChildByName("extend_panel");
    self.extend_icon = self.extend_panel.getChildByName("icon");
    self.extend_title = self.extend_panel.getChildByName("title");
    self.extend_desc = self.extend_panel.getChildByName("desc");
    self.extend_ext_desc = self.extend_panel.getChildByName("ext_desc");
    self.extend_panel.getChildByName("extend_title").getComponent(cc.Label).string = "功能预告";
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.background.on('touchend', function () {
      Utils.playButtonSound(2);
 
      if (this.can_touch == true) {
        this.onClickClose();
      }
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(data) {
    var self = this; // self.root_wnd.getComponent(cc.Animation).play("lev_upgrade_window")
 
    Utils.playButtonSound("c_get");
    self.handleEffect();
    self.starTimeTicket();
    var old_lev = data.old_lev || 0;
    var lev = data.lev || 0;
    var lev_config = Config.role_data.data_role_attr[lev];
 
    if (lev_config) {
      // -- 角色等级
      var role_object = self.lev_list[0];
      role_object.last_lev.getComponent(cc.Label).string = old_lev;
      role_object.now_lev.getComponent(cc.Label).string = lev;
      self.award_data = [];
 
      for (var i = old_lev + 1; i <= lev; ++i) {
        var lev_cfg = Config.role_data.data_role_attr[i];
 
        if (lev_cfg && lev_cfg.reward) {
          for (var k = 0; k < lev_cfg.reward.length; ++k) {
            var v = lev_cfg.reward[k];
            self.checkAddAwardData(v);
          }
        }
      }
 
      self.setAwardInfo();
      self.setExtendInfo(lev_config);
    }
  },
  handleEffect: function handleEffect() {
    var self = this;
    var effect_id = 274;
 
    if (self.play_effect) {
      var sketon_path = PathTool.getSpinePath(PathTool.getEffectRes(effect_id), "action");
      this.loadRes(sketon_path, function (skeleton_data) {
        this.play_effect.skeletonData = skeleton_data;
        this.play_effect.setAnimation(0, "action2", false);
      }.bind(this));
    }
  },
  starTimeTicket: function starTimeTicket() {
    var self = this;
    self.cut_time = 0;
 
    if (self.time_ticket == null) {
      self.time_ticket = gcore.Timer.set(function () {
        self.cut_time = self.cut_time + 0.5;
 
        if (self.cut_time > 0.5) {
          self.can_touch = true;
        }
 
        if (self.cut_time >= self.auto_limit_time) {
          gcore.Timer.del(this.time_ticket);
          this.time_ticket = null;
          self.onClickClose();
        }
      }.bind(this), 500, -1);
    }
  },
  //将重复的奖励道具叠加显示
  checkAddAwardData: function checkAddAwardData(data) {
    var self = this;
    self.award_data = self.award_data || [];
 
    if (Utils.next(self.award_data) == null) {
      self.award_data.push(data);
      return;
    }
 
    for (var k = 0; k < self.award_data.length; ++k) {
      var v = self.award_data[k];
 
      if (v[0] && data[0]) {
        if (v[0] == data[0]) {
          v[1] = v[1] + data[1];
        } else {
          self.award_data.push(data);
        }
      }
    }
  },
  // -- 升级奖励物品
  setAwardInfo: function setAwardInfo() {
    var self = this;
    if (self.award_data == null) return;
 
    for (var k = 0; k < self.item_list.length; ++k) {
      var v = self.item_list[k];
      v.setVisible(false);
    }
 
    if (self.award_data && Utils.next(self.award_data) != null) {
      var space_x = 20;
      var scale = 1;
      var panel_size = self.award_container.getContentSize();
      var start_x = 0; //panel_size.width/2 - (self.award_data.length-1)*(space_x/2+120*scale/2)
 
      for (var i = 0; i < self.award_data.length; ++i) {
        var _v = self.award_data[i];
        var item = self.item_list[i];
 
        if (item == null) {
          var bid = _v[0];
          var num = _v[1];
          item = ItemsPool.getInstance().getItem("backpack_item");
          item.setParent(self.award_container);
          item.setData({
            bid: bid,
            num: num
          });
          self.item_list[i] = item;
        }
 
        var pos_x = start_x + (i + 1 - 1) * (space_x + 120 * scale);
        item.show();
        item.setPosition(pos_x, panel_size.height / 2 - 25);
      }
 
      self.award_container.active = true;
    } else {
      self.award_container.active = false;
    }
  },
  onClickClose: function onClickClose() {
    this.ctrl.openMainWindow(false);
    ActionController.getInstance().checkOpenActionLimitGiftMainWindow();
  },
  setExtendInfo: function setExtendInfo(config) {
    if (config == null) return;
    var self = this;
 
    if (config.icon == "") {
      self.back_panel.setContentSize(cc.size(SCREEN_WIDTH, 349));
      var height = this.main_container.height - 349;
      this.main_container.height -= height;
      self.extend_container.active = false;
    } else {
      self.back_panel.setContentSize(cc.size(SCREEN_WIDTH, 519));
      var path_icon = PathTool.getUIIconPath("bigbg/battledrama", config.icon);
      this.loadRes(path_icon, function (res) {
        self.extend_icon.getComponent(cc.Sprite).spriteFrame = res;
      }.bind(this));
      self.extend_title.getComponent(cc.Label).string = config.title;
      self.extend_desc.getComponent(cc.Label).string = config.desc;
      self.extend_ext_desc.getComponent(cc.Label).string = config.ext_desc;
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    this.play_effect.skeletonData = null;
 
    if (this.time_ticket) {
      gcore.Timer.del(this.time_ticket);
      this.time_ticket = null;
    }
 
    for (var i = 0; i < this.item_list.length; ++i) {
      this.item_list[i].deleteMe();
      this.item_list[i] = null;
    }
 
    gcore.GlobalEvent.fire(StoryEvent.PREPARE_PLAY_PLOT);
    this.ctrl.openMainWindow(false);
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsZXZ1cGdyYWRlXFx2aWV3XFxsZXZfdXBncmFkZV93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQWN0aW9uQ29udHJvbGxlciIsIkxldnVwZ3JhZGVDb250cm9sbGVyIiwiU3RvcnlFdmVudCIsIkxldnVwZ3JhZGVXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJUaXBzIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImxldl9saXN0IiwiY2FuX3RvdWNoIiwiYXV0b19saW1pdF90aW1lIiwiaXRlbV9saXN0Iiwib3BlbkNhbGxCYWNrIiwic2VsZiIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJiYWNrX3BhbmVsIiwidGl0bGVfY29udGFpbmVyIiwicGxheV9lZmZlY3QiLCJnZXRDb21wb25lbnQiLCJzcCIsIlNrZWxldG9uIiwidGl0bGVfd2lkdGgiLCJnZXRDb250ZW50U2l6ZSIsIndpZHRoIiwidGl0bGVfaGVpZ2h0IiwiaGVpZ2h0IiwiaXRlbSIsInRpdGxlIiwiTGFiZWwiLCJzdHJpbmciLCJvYmplY3QiLCJsYXN0X2xldiIsIm5vd19sZXYiLCJwdXNoIiwiYXdhcmRfY29udGFpbmVyIiwiYXdhcmRfdGl0bGUiLCJleHRlbmRfY29udGFpbmVyIiwiZXh0ZW5kX3BhbmVsIiwiZXh0ZW5kX2ljb24iLCJleHRlbmRfdGl0bGUiLCJleHRlbmRfZGVzYyIsImV4dGVuZF9leHRfZGVzYyIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIlV0aWxzIiwicGxheUJ1dHRvblNvdW5kIiwib25DbGlja0Nsb3NlIiwib3BlblJvb3RXbmQiLCJkYXRhIiwiaGFuZGxlRWZmZWN0Iiwic3RhclRpbWVUaWNrZXQiLCJvbGRfbGV2IiwibGV2IiwibGV2X2NvbmZpZyIsIkNvbmZpZyIsInJvbGVfZGF0YSIsImRhdGFfcm9sZV9hdHRyIiwicm9sZV9vYmplY3QiLCJhd2FyZF9kYXRhIiwiaSIsImxldl9jZmciLCJyZXdhcmQiLCJrIiwibGVuZ3RoIiwidiIsImNoZWNrQWRkQXdhcmREYXRhIiwic2V0QXdhcmRJbmZvIiwic2V0RXh0ZW5kSW5mbyIsImVmZmVjdF9pZCIsInNrZXRvbl9wYXRoIiwiZ2V0U3BpbmVQYXRoIiwiZ2V0RWZmZWN0UmVzIiwibG9hZFJlcyIsInNrZWxldG9uX2RhdGEiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJiaW5kIiwiY3V0X3RpbWUiLCJ0aW1lX3RpY2tldCIsImdjb3JlIiwiVGltZXIiLCJzZXQiLCJkZWwiLCJuZXh0Iiwic2V0VmlzaWJsZSIsInNwYWNlX3giLCJzY2FsZSIsInBhbmVsX3NpemUiLCJzdGFydF94IiwiYmlkIiwibnVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNldERhdGEiLCJwb3NfeCIsInNob3ciLCJzZXRQb3NpdGlvbiIsImFjdGl2ZSIsIm9wZW5NYWluV2luZG93IiwiY2hlY2tPcGVuQWN0aW9uTGltaXRHaWZ0TWFpbldpbmRvdyIsImNvbmZpZyIsImljb24iLCJzZXRDb250ZW50U2l6ZSIsInNpemUiLCJTQ1JFRU5fV0lEVEgiLCJwYXRoX2ljb24iLCJnZXRVSUljb25QYXRoIiwicmVzIiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJkZXNjIiwiZXh0X2Rlc2MiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJQUkVQQVJFX1BMQVlfUExPVCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztB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TUFBN0IsRUFBb0MsRUFBRUosQ0FBdEMsRUFBd0M7QUFDcEMsV0FBS25ELFNBQUwsQ0FBZW1ELENBQWYsRUFBa0J1RCxRQUFsQjtBQUNBLFdBQUsxRyxTQUFMLENBQWVtRCxDQUFmLElBQW9CLElBQXBCO0FBQ0g7O0FBQ0RvQixJQUFBQSxLQUFLLENBQUNvQyxXQUFOLENBQWtCQyxJQUFsQixDQUF1QmhJLFVBQVUsQ0FBQ2lJLGlCQUFsQztBQUNBLFNBQUtuSCxJQUFMLENBQVVpRyxjQUFWLENBQXlCLEtBQXpCO0FBQ0g7QUFwTjJCLENBQVQsQ0FBdkIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTI2IDExOjM3OjE1XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEFjdGlvbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnRyb2xsZXJcIilcbnZhciBMZXZ1cGdyYWRlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJsZXZ1cGdyYWRlX2NvbnRyb2xsZXJcIilcbnZhciBTdG9yeUV2ZW50ID0gcmVxdWlyZShcInN0b3J5X2V2ZW50XCIpXG52YXIgTGV2dXBncmFkZVdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJsZXZ1cGdyYWRlXCIsIFwibGV2X3VwZ3JhZGVfd2luZG93XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5UaXBzOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSAgTGV2dXBncmFkZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKVxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmxldl9saXN0ID0gW11cbiAgICAgICAgdGhpcy5jYW5fdG91Y2ggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvX2xpbWl0X3RpbWUgPSA1O1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5iYWNrZ3JvdW5kID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIilcblxuICAgICAgICBzZWxmLm1haW5fY29udGFpbmVyID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpXG4gICAgICAgIHNlbGYuYmFja19wYW5lbCA9IHNlbGYubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJiYWNrX3BhbmVsXCIpXG4gICAgICAgIHNlbGYudGl0bGVfY29udGFpbmVyID0gc2VsZi5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2NvbnRhaW5lclwiKVxuICAgICAgICBzZWxmLnBsYXlfZWZmZWN0ID0gc2VsZi50aXRsZV9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhY3Rpb25cIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKVxuICAgICAgICBzZWxmLnRpdGxlX3dpZHRoID0gc2VsZi50aXRsZV9jb250YWluZXIuZ2V0Q29udGVudFNpemUoKS53aWR0aFxuICAgICAgICBzZWxmLnRpdGxlX2hlaWdodCA9IHNlbGYudGl0bGVfY29udGFpbmVyLmdldENvbnRlbnRTaXplKCkuaGVpZ2h0XG5cbiAgICAgICAgbGV0IGl0ZW0gPSBzZWxmLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV8xXCIpXG4gICAgICAgIGlmKGl0ZW0pe1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpXG4gICAgICAgICAgICB0aXRsZS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi5YaS6Zmp6ICF562J57qnXCI7XG4gICAgICAgICAgICBsZXQgb2JqZWN0ID0ge31cbiAgICAgICAgICAgIG9iamVjdC5sYXN0X2xldiA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJsYXN0X2xldlwiKVxuICAgICAgICAgICAgb2JqZWN0Lm5vd19sZXYgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwibm93X2xldlwiKVxuICAgICAgICAgICAgdGhpcy5sZXZfbGlzdC5wdXNoKG9iamVjdClcbiAgICAgICAgfSAgIFxuXG4gICAgICAgIC8vIC0tIOWNh+e6p+WlluWKsVxuICAgICAgICBzZWxmLmF3YXJkX2NvbnRhaW5lciA9IHNlbGYubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhd2FyZF9jb250YWluZXJcIilcbiAgICAgICAgbGV0IGF3YXJkX3RpdGxlID0gc2VsZi5hd2FyZF9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhd2FyZF90aXRsZVwiKVxuICAgICAgICBhd2FyZF90aXRsZS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi5Y2H57qn5aWW5YqxXCI7XG5cbiAgICAgICAgLy8gLS0g5omp5bGV57G755qE6K+05piOLOS4jeS4gOWumuaciVxuICAgICAgICBzZWxmLmV4dGVuZF9jb250YWluZXIgPSBzZWxmLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiZXh0ZW5kX2NvbnRhaW5lclwiKVxuICAgICAgICBzZWxmLmV4dGVuZF9wYW5lbCA9IHNlbGYuZXh0ZW5kX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImV4dGVuZF9wYW5lbFwiKVxuICAgICAgICBzZWxmLmV4dGVuZF9pY29uID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpXG4gICAgICAgIHNlbGYuZXh0ZW5kX3RpdGxlID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZVwiKVxuICAgICAgICBzZWxmLmV4dGVuZF9kZXNjID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJkZXNjXCIpXG4gICAgICAgIHNlbGYuZXh0ZW5kX2V4dF9kZXNjID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJleHRfZGVzY1wiKVxuICAgICAgICBzZWxmLmV4dGVuZF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImV4dGVuZF90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi5Yqf6IO96aKE5ZGKXCI7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5vbigndG91Y2hlbmQnLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMilcbiAgICAgICAgICAgIGlmKHRoaXMuY2FuX3RvdWNoICA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xpY2tDbG9zZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcykgXG5cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gc2VsZi5yb290X3duZC5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKS5wbGF5KFwibGV2X3VwZ3JhZGVfd2luZG93XCIpXG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZChcImNfZ2V0XCIpIFxuICAgICAgICBzZWxmLmhhbmRsZUVmZmVjdCgpXG4gICAgICAgIHNlbGYuc3RhclRpbWVUaWNrZXQoKVxuICAgICAgICBsZXQgb2xkX2xldiA9IGRhdGEub2xkX2xldiB8fCAwXG4gICAgICAgIGxldCBsZXYgPSBkYXRhLmxldiB8fCAwXG4gICAgICAgIGxldCBsZXZfY29uZmlnID0gQ29uZmlnLnJvbGVfZGF0YS5kYXRhX3JvbGVfYXR0cltsZXZdXG4gICAgICAgIGlmKGxldl9jb25maWcpe1xuICAgICAgICAgICAgLy8gLS0g6KeS6Imy562J57qnXG4gICAgICAgICAgICBsZXQgcm9sZV9vYmplY3QgPSBzZWxmLmxldl9saXN0WzBdXG4gICAgICAgICAgICByb2xlX29iamVjdC5sYXN0X2xldi5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IG9sZF9sZXY7XG4gICAgICAgICAgICByb2xlX29iamVjdC5ub3dfbGV2LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gbGV2O1xuXG4gICAgICAgICAgICBzZWxmLmF3YXJkX2RhdGEgPSBbXVxuICAgICAgICAgICAgZm9yKGxldCBpPSBvbGRfbGV2KzE7aTw9bGV2OysraSl7XG4gICAgICAgICAgICAgICAgbGV0IGxldl9jZmcgPSBDb25maWcucm9sZV9kYXRhLmRhdGFfcm9sZV9hdHRyW2ldXG4gICAgICAgICAgICAgICAgaWYobGV2X2NmZyAmJiBsZXZfY2ZnLnJld2FyZCl7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaz0wO2s8bGV2X2NmZy5yZXdhcmQubGVuZ3RoOysrayl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IGxldl9jZmcucmV3YXJkW2tdXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrQWRkQXdhcmREYXRhKHYpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnNldEF3YXJkSW5mbygpXG4gICAgICAgICAgICBzZWxmLnNldEV4dGVuZEluZm8obGV2X2NvbmZpZylcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRWZmZWN0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGVmZmVjdF9pZCA9IDI3NDtcbiAgICAgICAgaWYoc2VsZi5wbGF5X2VmZmVjdCApeyBcbiAgICAgICAgICAgIGxldCBza2V0b25fcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChQYXRoVG9vbC5nZXRFZmZlY3RSZXMoZWZmZWN0X2lkKSwgXCJhY3Rpb25cIik7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoc2tldG9uX3BhdGgsIGZ1bmN0aW9uKHNrZWxldG9uX2RhdGEpe1xuICAgICAgICAgICAgICAgIHRoaXMucGxheV9lZmZlY3Quc2tlbGV0b25EYXRhID0gc2tlbGV0b25fZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0LnNldEFuaW1hdGlvbigwLCBcImFjdGlvbjJcIiwgZmFsc2UpOyAgICAgICAgICAgXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpOyBcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9LFxuICAgIHN0YXJUaW1lVGlja2V0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmN1dF90aW1lID0gMFxuICAgICAgICBpZihzZWxmLnRpbWVfdGlja2V0ID09IG51bGwpe1xuICAgICAgICAgICAgc2VsZi50aW1lX3RpY2tldCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHNlbGYuY3V0X3RpbWUgPSBzZWxmLmN1dF90aW1lICsgMC41XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY3V0X3RpbWUgPiAwLjUpe1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbl90b3VjaCA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoc2VsZi5jdXRfdGltZSA+PSBzZWxmLmF1dG9fbGltaXRfdGltZSl7XG4gICAgICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGlja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lX3RpY2tldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGlja0Nsb3NlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksNTAwLC0xKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvL+WwhumHjeWkjeeahOWlluWKsemBk+WFt+WPoOWKoOaYvuekulxuICAgIGNoZWNrQWRkQXdhcmREYXRhKGRhdGEpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuYXdhcmRfZGF0YSA9IHNlbGYuYXdhcmRfZGF0YSB8fCBbXVxuICAgICAgICBpZihVdGlscy5uZXh0KHNlbGYuYXdhcmRfZGF0YSkgPT0gbnVsbCl7XG4gICAgICAgICAgICBzZWxmLmF3YXJkX2RhdGEucHVzaChkYXRhKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZm9yKGxldCBrPTA7azxzZWxmLmF3YXJkX2RhdGEubGVuZ3RoOysrayl7XG4gICAgICAgICAgICBsZXQgdiA9IHNlbGYuYXdhcmRfZGF0YVtrXVxuICAgICAgICAgICAgaWYodlswXSAmJiBkYXRhWzBdKXtcbiAgICAgICAgICAgICAgICBpZih2WzBdID09IGRhdGFbMF0pe1xuICAgICAgICAgICAgICAgICAgICB2WzFdID0gdlsxXSArIGRhdGFbMV1cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hd2FyZF9kYXRhLnB1c2goZGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIC0tIOWNh+e6p+WlluWKseeJqeWTgVxuICAgIHNldEF3YXJkSW5mbyggKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpZihzZWxmLmF3YXJkX2RhdGEgPT0gbnVsbCkgIHJldHVybjtcbiAgICAgICAgZm9yKGxldCBrPTA7azxzZWxmLml0ZW1fbGlzdC5sZW5ndGg7KytrKXtcbiAgICAgICAgICAgIGxldCB2ID0gc2VsZi5pdGVtX2xpc3Rba11cbiAgICAgICAgICAgIHYuc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpZihzZWxmLmF3YXJkX2RhdGEgJiYgVXRpbHMubmV4dChzZWxmLmF3YXJkX2RhdGEpICE9IG51bGwpe1xuICAgICAgICAgICAgbGV0IHNwYWNlX3ggPSAyMFxuICAgICAgICAgICAgbGV0IHNjYWxlID0gMVxuICAgICAgICAgICAgbGV0IHBhbmVsX3NpemUgPSBzZWxmLmF3YXJkX2NvbnRhaW5lci5nZXRDb250ZW50U2l6ZSgpXG4gICAgICAgICAgICBsZXQgc3RhcnRfeCA9IDAvL3BhbmVsX3NpemUud2lkdGgvMiAtIChzZWxmLmF3YXJkX2RhdGEubGVuZ3RoLTEpKihzcGFjZV94LzIrMTIwKnNjYWxlLzIpXG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHNlbGYuYXdhcmRfZGF0YS5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IHNlbGYuYXdhcmRfZGF0YVtpXVxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gc2VsZi5pdGVtX2xpc3RbaV1cbiAgICAgICAgICAgICAgICBpZihpdGVtID09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmlkID0gdlswXVxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtID0gdlsxXVxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIilcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQoc2VsZi5hd2FyZF9jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoe2JpZDpiaWQsIG51bTpudW19KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1fbGlzdFtpXSA9IGl0ZW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBvc194ID0gc3RhcnRfeCArIChpKzEgLTEpKihzcGFjZV94KzEyMCpzY2FsZSlcbiAgICAgICAgICAgICAgICBpdGVtLnNob3coKVxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24ocG9zX3gsIHBhbmVsX3NpemUuaGVpZ2h0LzItMjUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmF3YXJkX2NvbnRhaW5lci5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHNlbGYuYXdhcmRfY29udGFpbmVyLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvbkNsaWNrQ2xvc2UoKXtcbiAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWluV2luZG93KGZhbHNlKVxuICAgICAgICBBY3Rpb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tPcGVuQWN0aW9uTGltaXRHaWZ0TWFpbldpbmRvdygpXG4gICAgfSxcbiAgICBzZXRFeHRlbmRJbmZvKGNvbmZpZyl7XG4gICAgICAgIGlmKGNvbmZpZyA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmKGNvbmZpZy5pY29uID09IFwiXCIpe1xuICAgICAgICAgICAgc2VsZi5iYWNrX3BhbmVsLnNldENvbnRlbnRTaXplKGNjLnNpemUoU0NSRUVOX1dJRFRILCAzNDkpKVxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMubWFpbl9jb250YWluZXIuaGVpZ2h0IC0gMzQ5XG4gICAgICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyLmhlaWdodCAtPSBoZWlnaHRcbiAgICAgICAgICAgIHNlbGYuZXh0ZW5kX2NvbnRhaW5lci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzZWxmLmJhY2tfcGFuZWwuc2V0Q29udGVudFNpemUoY2Muc2l6ZShTQ1JFRU5fV0lEVEgsIDUxOSkpXG4gICAgICAgICAgICBsZXQgcGF0aF9pY29uID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnL2JhdHRsZWRyYW1hXCIsIGNvbmZpZy5pY29uKVxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGhfaWNvbixmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgICAgIHNlbGYuZXh0ZW5kX2ljb24uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIHNlbGYuZXh0ZW5kX3RpdGxlLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gY29uZmlnLnRpdGxlO1xuICAgICAgICAgICAgc2VsZi5leHRlbmRfZGVzYy5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IGNvbmZpZy5kZXNjO1xuICAgICAgICAgICAgc2VsZi5leHRlbmRfZXh0X2Rlc2MuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBjb25maWcuZXh0X2Rlc2M7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMucGxheV9lZmZlY3Quc2tlbGV0b25EYXRhID0gbnVsbDtcbiAgICAgICAgaWYodGhpcy50aW1lX3RpY2tldCl7XG4gICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lX3RpY2tldCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVfdGlja2V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuaXRlbV9saXN0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0uZGVsZXRlTWUoKVxuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdG9yeUV2ZW50LlBSRVBBUkVfUExBWV9QTE9UKVxuICAgICAgICB0aGlzLmN0cmwub3Blbk1haW5XaW5kb3coZmFsc2UpXG4gICAgfSxcbn0pIl19