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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/heroexpedit/view/heroexpedit_level_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, '264f5s4vpRMBZlM3fqX4KCC', 'heroexpedit_level_window');
// Scripts/mod/heroexpedit/view/heroexpedit_level_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-03-11 14:17:05
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var HeroConst = require("hero_const");
 
var PlayerHead = require("playerhead");
 
var HeroController = require("hero_controller");
 
var PartnerConst = require("partner_const");
 
var HeroExpeditEvent = require("heroexpedit_event");
 
var CommonScrollView = require("common_scrollview");
 
var Heroexpedit_levelWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("heroexpedit", "level_message");
    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 = arguments[0];
    this.model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.reward_list = [];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.root_wnd.getChildByName("background");
    this.background.scale = FIT_SCALE;
    this.main_container = this.root_wnd.getChildByName("main_container");
    this.text_level_msg = this.main_container.getChildByName("Image_6").getChildByName("Text_7").getComponent(cc.Label);
    this.text_level_msg.string = Utils.TI18N("");
    var text_17_0 = this.main_container.getChildByName("reward").getChildByName("Text_17_0").getComponent(cc.Label);
    text_17_0.string = Utils.TI18N("奖励");
    this.reward_panel = this.main_container.getChildByName("reward").getChildByName("reward_panel");
    var text_17 = this.main_container.getChildByName("enemy").getChildByName("Text_17");
    text_17.string = Utils.TI18N("敌方阵容");
    this.enemy_panel = this.main_container.getChildByName("enemy").getChildByName("enemy_panel");
    this.btn_fight = this.main_container.getChildByName("btn_fight");
    var Text_6 = this.btn_fight.getChildByName("Text_6").getComponent(cc.Label);
    Text_6.string = Utils.TI18N("战斗");
    this.text_name = this.main_container.getChildByName("text_name").getComponent(cc.Label);
    this.text_fight_power = this.main_container.getChildByName("text_fight_power").getComponent(cc.Label);
 
    if (this.data) {
      this.fightMessage(this.data);
    }
  },
  fightMessage: function fightMessage(data) {
    if (!this.root_wnd || !data) return;
    this.text_level_msg.string = Utils.TI18N("第") + Config.expedition_data.data_sign_info[data.id].floor + Utils.TI18N("关");
    this.my_head = new PlayerHead();
    this.my_head.setAnchorPoint(0.5, 0.5);
    this.my_head.setPosition(166 - this.main_container.width / 2, 541 - this.main_container.height / 2);
    this.my_head.setLev(data.lev);
    this.my_head.setParent(this.main_container);
    this.my_head.setHeadRes(data.face);
    this.my_head.show();
    this.text_name.string = data.name;
    this.text_fight_power.string = data.power; // 关卡奖励
 
    if (data.rewards) {
      var num = data.rewards.length;
      var pos = [];
 
      if (num == 2) {
        pos = [166, 423];
      } else {
        pos = [166, 296, 423];
      }
 
      for (var i = 0; i < num; i++) {
        if (!this.reward_list[i]) {
          this.reward_list[i] = ItemsPool.getInstance().getItem("backpack_item");
          this.reward_list[i].setParent(this.reward_panel);
          this.reward_list[i].initConfig(null, 0.9);
          this.reward_list[i].show();
        }
 
        if (this.reward_list[i]) {
          this.reward_list[i].setPosition(pos[i], 55);
 
          if (data.rewards[i].bid == 25 && data.is_holiday == 1) {
            this.reward_list[i].holidHeroExpeditTag(true, "限时提升");
          } else {
            this.reward_list[i].holidHeroExpeditTag(false);
          }
 
          this.reward_list[i].setDefaultTip();
          this.reward_list[i].setData({
            bid: data.rewards[i].bid,
            num: data.rewards[i].num
          });
        }
      }
    }
 
    var scroll_view_size = this.enemy_panel.getContentSize();
    var setting = {
      item_class: "hero_exhibition_item",
      // 单元类
      start_x: 0,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: 4,
      // 第一个单元的Y起点
      space_y: 0,
      // y方向的间隔
      item_width: 119,
      // 单元的尺寸width
      item_height: 119,
      // 单元的尺寸height
      row: 1,
      // 行数,作用于水平滚动类型
      col: 1 // 列数,作用于垂直滚动类型
 
    };
    this.enemy_list = new CommonScrollView();
    this.enemy_list.createScroll(this.enemy_panel, cc.v2(-5, 10), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, setting);
    this.enemy_list.setClickEnabled(false);
    var enemy = [];
 
    for (var i in data.guards) {
      var v = data.guards[i];
      var tab = {};
      tab.bid = v.bid;
      tab.star = v.star;
      tab.blood = v.hp_per;
      tab.lev = v.lev;
      enemy.push(tab);
    }
 
    this.enemy_list.setData(enemy, null, {
      scale: 0.8,
      can_click: false,
      from_type: HeroConst.ExhibitionItemType.eExpeditFight
    });
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.addGlobalEvent(HeroExpeditEvent.levelMessageEvent, function (data) {
      if (!data) return;
      this.data = data;
      this.fightMessage(data);
    }.bind(this));
    Utils.onTouchEnd(this.btn_fight, function () {
      this.ctrl.openHeroExpeditLevelView(false);
      HeroController.getInstance().openFormGoFightPanel(true, PartnerConst.Fun_Form.Expedit_Fight);
      this.ctrl.sender24404();
    }.bind(this), 1);
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openHeroExpeditLevelView(false);
    }.bind(this), 2);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(data) {
    if (!data) return;
    this.data = data;
    this.fightMessage(data);
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.reward_list && Utils.next(this.reward_list || []) != null) {
      for (var i in this.reward_list) {
        if (this.reward_list[i].deleteMe) {
          this.reward_list[i].deleteMe();
        }
      }
    }
 
    this.data = null;
 
    if (this.my_head) {
      this.my_head.deleteMe();
      this.my_head = null;
    }
 
    if (this.enemy_list) {
      this.enemy_list.deleteMe();
      this.enemy_list = null;
    }
 
    this.ctrl.openHeroExpeditLevelView(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvZXhwZWRpdFxcdmlld1xcaGVyb2V4cGVkaXRfbGV2ZWxfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkhlcm9Db25zdCIsIlBsYXllckhlYWQiLCJIZXJvQ29udHJvbGxlciIsIlBhcnRuZXJDb25zdCIsIkhlcm9FeHBlZGl0RXZlbnQiLCJDb21tb25TY3JvbGxWaWV3IiwiSGVyb2V4cGVkaXRfbGV2ZWxXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJUaXBzIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwicmV3YXJkX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsInNjYWxlIiwiRklUX1NDQUxFIiwibWFpbl9jb250YWluZXIiLCJ0ZXh0X2xldmVsX21zZyIsImdldENvbXBvbmVudCIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsInRleHRfMTdfMCIsInJld2FyZF9wYW5lbCIsInRleHRfMTciLCJlbmVteV9wYW5lbCIsImJ0bl9maWdodCIsIlRleHRfNiIsInRleHRfbmFtZSIsInRleHRfZmlnaHRfcG93ZXIiLCJkYXRhIiwiZmlnaHRNZXNzYWdlIiwiQ29uZmlnIiwiZXhwZWRpdGlvbl9kYXRhIiwiZGF0YV9zaWduX2luZm8iLCJpZCIsImZsb29yIiwibXlfaGVhZCIsInNldEFuY2hvclBvaW50Iiwic2V0UG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInNldExldiIsImxldiIsInNldFBhcmVudCIsInNldEhlYWRSZXMiLCJmYWNlIiwic2hvdyIsIm5hbWUiLCJwb3dlciIsInJld2FyZHMiLCJudW0iLCJsZW5ndGgiLCJwb3MiLCJpIiwiSXRlbXNQb29sIiwiZ2V0SW5zdGFuY2UiLCJnZXRJdGVtIiwiYmlkIiwiaXNfaG9saWRheSIsImhvbGlkSGVyb0V4cGVkaXRUYWciLCJzZXREZWZhdWx0VGlwIiwic2V0RGF0YSIsInNjcm9sbF92aWV3X3NpemUiLCJnZXRDb250ZW50U2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsImVuZW15X2xpc3QiLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJob3Jpem9udGFsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwic2V0Q2xpY2tFbmFibGVkIiwiZW5lbXkiLCJndWFyZHMiLCJ2IiwidGFiIiwic3RhciIsImJsb29kIiwiaHBfcGVyIiwicHVzaCIsImNhbl9jbGljayIsImZyb21fdHlwZSIsIkV4aGliaXRpb25JdGVtVHlwZSIsImVFeHBlZGl0RmlnaHQiLCJyZWdpc3RlckV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJsZXZlbE1lc3NhZ2VFdmVudCIsImJpbmQiLCJvblRvdWNoRW5kIiwib3Blbkhlcm9FeHBlZGl0TGV2ZWxWaWV3Iiwib3BlbkZvcm1Hb0ZpZ2h0UGFuZWwiLCJGdW5fRm9ybSIsIkV4cGVkaXRfRmlnaHQiLCJzZW5kZXIyNDQwNCIsIm9wZW5Sb290V25kIiwiY2xvc2VDYWxsQmFjayIsIm5leHQiLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLFNBQVMsR0FBR0QsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsSUFBSUUsVUFBVSxHQUFHRixPQUFPLENBQUMsWUFBRCxD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RyxXQUFMLElBQW9CWSxLQUFLLENBQUN1RixJQUFOLENBQVcsS0FBS25HLFdBQUwsSUFBb0IsRUFBL0IsS0FBcUMsSUFBNUQsRUFBaUU7QUFDN0QsV0FBSSxJQUFJOEMsQ0FBUixJQUFhLEtBQUs5QyxXQUFsQixFQUE4QjtBQUMxQixZQUFHLEtBQUtBLFdBQUwsQ0FBaUI4QyxDQUFqQixFQUFvQnNELFFBQXZCLEVBQWdDO0FBQzVCLGVBQUtwRyxXQUFMLENBQWlCOEMsQ0FBakIsRUFBb0JzRCxRQUFwQjtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxTQUFLOUUsSUFBTCxHQUFZLElBQVo7O0FBRUEsUUFBRyxLQUFLTyxPQUFSLEVBQWdCO0FBQ1osV0FBS0EsT0FBTCxDQUFhdUUsUUFBYjtBQUNBLFdBQUt2RSxPQUFMLEdBQWUsSUFBZjtBQUNIOztBQUVELFFBQUcsS0FBS3NDLFVBQVIsRUFBbUI7QUFDZixXQUFLQSxVQUFMLENBQWdCaUMsUUFBaEI7QUFDQSxXQUFLakMsVUFBTCxHQUFrQixJQUFsQjtBQUNIOztBQUNELFNBQUt4RSxJQUFMLENBQVVpRyx3QkFBVixDQUFtQyxLQUFuQztBQUNIO0FBcktrQyxDQUFULENBQTlCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0xMSAxNDoxNzowNVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBIZXJvQ29uc3QgPSByZXF1aXJlKFwiaGVyb19jb25zdFwiKTtcbnZhciBQbGF5ZXJIZWFkID0gcmVxdWlyZShcInBsYXllcmhlYWRcIik7XG52YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xudmFyIFBhcnRuZXJDb25zdCA9IHJlcXVpcmUoXCJwYXJ0bmVyX2NvbnN0XCIpO1xudmFyIEhlcm9FeHBlZGl0RXZlbnQgPSByZXF1aXJlKFwiaGVyb2V4cGVkaXRfZXZlbnRcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcblxudmFyIEhlcm9leHBlZGl0X2xldmVsV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImhlcm9leHBlZGl0XCIsIFwibGV2ZWxfbWVzc2FnZVwiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuVGlwczsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jdHJsID0gYXJndW1lbnRzWzBdO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSBbXTtcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xuICAgIFxuICAgICAgICB0aGlzLnRleHRfbGV2ZWxfbXNnID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIkltYWdlXzZcIikuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzdcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy50ZXh0X2xldmVsX21zZy5zdHJpbmcgPSBVdGlscy5USTE4TihcIlwiKTtcbiAgICAgICAgdmFyIHRleHRfMTdfMCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyZXdhcmRcIikuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzE3XzBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGV4dF8xN18wLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5aWW5YqxXCIpO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHRoaXMucmV3YXJkX3BhbmVsID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInJld2FyZFwiKS5nZXRDaGlsZEJ5TmFtZShcInJld2FyZF9wYW5lbFwiKTtcbiAgICAgICAgdmFyIHRleHRfMTcgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiZW5lbXlcIikuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzE3XCIpO1xuICAgICAgICB0ZXh0XzE3LnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5pWM5pa56Zi15a65XCIpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5lbmVteV9wYW5lbCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJlbmVteVwiKS5nZXRDaGlsZEJ5TmFtZShcImVuZW15X3BhbmVsXCIpO1xuICAgICAgICB0aGlzLmJ0bl9maWdodCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fZmlnaHRcIik7XG4gICAgICAgIHZhciBUZXh0XzYgPSB0aGlzLmJ0bl9maWdodC5nZXRDaGlsZEJ5TmFtZShcIlRleHRfNlwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICBUZXh0XzYuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmiJjmlpdcIik7XG4gICAgXG4gICAgICAgIHRoaXMudGV4dF9uYW1lID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRleHRfbmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnRleHRfZmlnaHRfcG93ZXIgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGV4dF9maWdodF9wb3dlclwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuXG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICAgICAgICB0aGlzLmZpZ2h0TWVzc2FnZSh0aGlzLmRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpZ2h0TWVzc2FnZTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoIXRoaXMucm9vdF93bmQgfHwgIWRhdGEpcmV0dXJuO1xuICAgICAgICB0aGlzLnRleHRfbGV2ZWxfbXNnLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi56ysXCIpK0NvbmZpZy5leHBlZGl0aW9uX2RhdGEuZGF0YV9zaWduX2luZm9bZGF0YS5pZF0uZmxvb3IrVXRpbHMuVEkxOE4oXCLlhbNcIik7XG5cbiAgICAgICAgdGhpcy5teV9oZWFkID0gbmV3IFBsYXllckhlYWQoKTtcbiAgICAgICAgdGhpcy5teV9oZWFkLnNldEFuY2hvclBvaW50KDAuNSwgMC41KVxuICAgICAgICB0aGlzLm15X2hlYWQuc2V0UG9zaXRpb24oMTY2LXRoaXMubWFpbl9jb250YWluZXIud2lkdGgvMiw1NDEtdGhpcy5tYWluX2NvbnRhaW5lci5oZWlnaHQvMik7XG4gICAgICAgIHRoaXMubXlfaGVhZC5zZXRMZXYoZGF0YS5sZXYpXG4gICAgICAgIHRoaXMubXlfaGVhZC5zZXRQYXJlbnQodGhpcy5tYWluX2NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubXlfaGVhZC5zZXRIZWFkUmVzKGRhdGEuZmFjZSk7XG4gICAgICAgIHRoaXMubXlfaGVhZC5zaG93KCk7XG5cbiAgICAgICAgdGhpcy50ZXh0X25hbWUuc3RyaW5nID0gZGF0YS5uYW1lO1xuICAgICAgICB0aGlzLnRleHRfZmlnaHRfcG93ZXIuc3RyaW5nID0gZGF0YS5wb3dlcjtcbiAgICAgICAgLy8g5YWz5Y2h5aWW5YqxXG4gICAgICAgIGlmKGRhdGEucmV3YXJkcyl7XG4gICAgICAgICAgICB2YXIgbnVtID0gZGF0YS5yZXdhcmRzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBwb3MgPSBbXTtcbiAgICAgICAgICAgIGlmKG51bSA9PSAyKXtcbiAgICAgICAgICAgICAgICBwb3MgPSBbMTY2LDQyM107XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBwb3MgPSBbMTY2LDI5Niw0MjNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDtpPG51bTtpKyspe1xuICAgICAgICAgICAgICAgIGlmKCF0aGlzLnJld2FyZF9saXN0W2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfbGlzdFtpXSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF9saXN0W2ldLnNldFBhcmVudCh0aGlzLnJld2FyZF9wYW5lbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkX2xpc3RbaV0uaW5pdENvbmZpZyhudWxsLDAuOSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkX2xpc3RbaV0uc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0aGlzLnJld2FyZF9saXN0W2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfbGlzdFtpXS5zZXRQb3NpdGlvbihwb3NbaV0sIDU1KTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5yZXdhcmRzW2ldLmJpZCA9PSAyNSAmJiBkYXRhLmlzX2hvbGlkYXkgPT0gMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF9saXN0W2ldLmhvbGlkSGVyb0V4cGVkaXRUYWcodHJ1ZSwgXCLpmZDml7bmj5DljYdcIik7XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfbGlzdFtpXS5ob2xpZEhlcm9FeHBlZGl0VGFnKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF9saXN0W2ldLnNldERlZmF1bHRUaXAoKTtcbiAgICBcdFx0ICAgICAgICB0aGlzLnJld2FyZF9saXN0W2ldLnNldERhdGEoe2JpZDpkYXRhLnJld2FyZHNbaV0uYmlkLCBudW06ZGF0YS5yZXdhcmRzW2ldLm51bX0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSB0aGlzLmVuZW15X3BhbmVsLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzczogXCJoZXJvX2V4aGliaXRpb25faXRlbVwiLCAgICAgIC8vIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeDogMCwgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogNCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDAsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGg6IDExOSwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDExOSwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93OiAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sOiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW5lbXlfbGlzdCA9IG5ldyBDb21tb25TY3JvbGxWaWV3KCk7XG4gICAgICAgIHRoaXMuZW5lbXlfbGlzdC5jcmVhdGVTY3JvbGwodGhpcy5lbmVteV9wYW5lbCwgY2MudjIoLTUsMTApLCBTY3JvbGxWaWV3RGlyLmhvcml6b250YWwsIFNjcm9sbFZpZXdTdGFydFBvcy50b3AsIHNjcm9sbF92aWV3X3NpemUsIHNldHRpbmcpO1xuICAgICAgICB0aGlzLmVuZW15X2xpc3Quc2V0Q2xpY2tFbmFibGVkKGZhbHNlKTtcblxuICAgICAgICB2YXIgZW5lbXkgPSBbXTtcbiAgICAgICAgZm9yKHZhciBpIGluIGRhdGEuZ3VhcmRzKXtcbiAgICAgICAgICAgIHZhciB2ID0gZGF0YS5ndWFyZHNbaV07XG4gICAgICAgICAgICB2YXIgdGFiID0ge307XG4gICAgICAgICAgICB0YWIuYmlkID0gdi5iaWQ7XG4gICAgICAgICAgICB0YWIuc3RhciA9IHYuc3RhcjtcbiAgICAgICAgICAgIHRhYi5ibG9vZCA9IHYuaHBfcGVyO1xuICAgICAgICAgICAgdGFiLmxldiA9IHYubGV2O1xuICAgICAgICAgICAgZW5lbXkucHVzaCh0YWIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5lbXlfbGlzdC5zZXREYXRhKGVuZW15LG51bGwse3NjYWxlOiAwLjgsIGNhbl9jbGljazogZmFsc2UsZnJvbV90eXBlOiBIZXJvQ29uc3QuRXhoaWJpdGlvbkl0ZW1UeXBlLmVFeHBlZGl0RmlnaHR9KVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEhlcm9FeHBlZGl0RXZlbnQubGV2ZWxNZXNzYWdlRXZlbnQsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgIGlmKCFkYXRhKXJldHVybjtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLmZpZ2h0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idG5fZmlnaHQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXcoZmFsc2UpO1xuICAgICAgICAgICAgSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuRm9ybUdvRmlnaHRQYW5lbCh0cnVlLCBQYXJ0bmVyQ29uc3QuRnVuX0Zvcm0uRXhwZWRpdF9GaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjQ0MDQoKVxuICAgICAgICB9LmJpbmQodGhpcyksIDEpO1xuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5iYWNrZ3JvdW5kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbkhlcm9FeHBlZGl0TGV2ZWxWaWV3KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIGlmKCFkYXRhKXJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5maWdodE1lc3NhZ2UoZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMucmV3YXJkX2xpc3QgJiYgVXRpbHMubmV4dCh0aGlzLnJld2FyZF9saXN0IHx8IFtdKSAhPW51bGwpe1xuICAgICAgICAgICAgZm9yKHZhciBpIGluIHRoaXMucmV3YXJkX2xpc3Qpe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMucmV3YXJkX2xpc3RbaV0uZGVsZXRlTWUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF9saXN0W2ldLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgICAgICBpZih0aGlzLm15X2hlYWQpe1xuICAgICAgICAgICAgdGhpcy5teV9oZWFkLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB0aGlzLm15X2hlYWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5lbmVteV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMuZW5lbXlfbGlzdC5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5lbmVteV9saXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwub3Blbkhlcm9FeHBlZGl0TGV2ZWxWaWV3KGZhbHNlKTtcbiAgICB9LFxufSkiXX0=