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
277
278
279
280
281
282
283
284
285
286
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/activity/view/activity_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, 'cb705YL5LFHF6D9qaJoi8H3', 'activity_item_panel');
// Scripts/mod/activity/view/activity_item_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     活动 Item 项
// <br/>Create: 2019-05-06 14:34:33
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var ActivityConst = require("activity_const");
 
var GuildBossController = require("guildboss_controller");
 
var ActivityController = require("activity_controller");
 
var MainuiController = require("mainui_controller");
 
var Activity_itemPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("activity", "activity_item");
    this.ctrl = ActivityController.getInstance();
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {
    this.is_double = false;
    this.list_item = [];
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    this.mainContainer = this.root_wnd.getChildByName("main_container");
    this.itemMask = this.mainContainer.getChildByName("itemMask");
    this.textLimit = this.itemMask.getChildByName("textLimit").getComponent(cc.Label);
    this.textLimit.string = Utils.TI18N("敬请期待");
    this.itemMask.zIndex = 11;
    this.btnRule = this.mainContainer.getChildByName("btnRule");
    this.btnRule.active = false;
    this.textTimeStart = this.mainContainer.getChildByName("textTimeStart").getComponent(cc.Label);
    this.textTimeStart.string = "";
    this.textTimeStart.node.active = false;
    this.itemBG = this.mainContainer.getChildByName("itemBG");
    this.redPoint = this.mainContainer.getChildByName("redPoint");
    this.redPoint.active = false;
  },
  changeEscortCount: function changeEscortCount() {
    if (this.activityData.id == ActivityConst.limit_index.escort) {
      // var totle = EscortController.getInstance().getModel().getMyMaxCount(EscortConst.times_type.escort);
      // var current = EscortController.getInstance().getModel().getMyCount(EscortConst.times_type.escort);
      var num = totle - current;
 
      if (num < 0) {
        num = 0;
      }
 
      var str = cc.js.formatStr(Utils.TI18N("护送次数:%d/%d"), num, totle);
 
      if (!this.count) {
        this.count = Utils.createLabel(20, new cc.Color(0xff, 0xff, 0xff, 0xff), new cc.Color(0x74, 0x35, 0x0b, 0xff), 582, 65, str, this.mainContainer, 2, cc.v2(1, 0.5));
      } else {
        this.count.string = str;
      }
    }
  },
  setData: function setData(data) {
    this.activityData = data; // 只对萌受夺宝列表做判断
 
    if (this.activityData.id == ActivityConst.limit_index.escort) {
      // this.is_double = EscortController.getInstance().getModel().isDoubleTimes();
      this.changeEscortCount();
    }
 
    this.changeItemData(data); // 引导使用,不要删
    // if(data && data.id){
    //     this.setName("guide_activity_item_"+data.id)
    // }
  },
  getData: function getData() {
    return this.activityData;
  },
  addCallBack: function addCallBack(value) {
    this.callback = value;
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.btnRule, function () {
      if (this.activityData.id == ActivityConst.limit_index.escort) {
        MainuiController.getInstance().openCommonExplainView(true, Config.EscortData.data_explain);
      } else if (this.activityData.id == ActivityConst.limit_index.union) {
        MainuiController.getInstance().openCommonExplainView(true, Config.GuildDunData.data_explain);
      } else if (this.activityData.id == ActivityConst.limit_index.fightFirst) {} else if (this.activityData.id == ActivityConst.limit_index.allGod) {
        MainuiController.getInstance().openCommonExplainView(true, Config.ZsWarData.data_explain);
      } else if (this.activityData.id == ActivityConst.limit_index.guildwar) {
        MainuiController.getInstance().openCommonExplainView(true, Config.GuildWarData.data_explain);
      } else if (this.activityData.id == ActivityConst.limit_index.champion) {
        MainuiController.getInstance().openCommonExplainView(true, Config.ArenaChampionData.data_explain);
      } else if (this.activityData.id == ActivityConst.limit_index.ladder) {
        MainuiController.getInstance().openCommonExplainView(true, Config.SkyLadderData.data_explain);
      }
    }.bind(this), 1); //当用户点击的时候记录鼠标点击状态
 
    this.root_wnd.on(cc.Node.EventType.TOUCH_START, function (event) {
      var touches = event.getTouches();
      this.touch_began = touches[0].getDelta();
    }, this); //当鼠标抬起的时候恢复状态
 
    this.root_wnd.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 == true) {
        Utils.playButtonSound(ButtonSound.Normal);
 
        if (this.callback) {
          this.callback();
        }
      }
    }, this);
  },
  updateRedStatus: function updateRedStatus() {
    if (this.activityData) {
      var red_status = false;
 
      if (this.activityData.id == ActivityConst.limit_index.escort) {// red_status = EscortController:getInstance():getModel():checkRedStatus()
      } else if (this.activityData.id == ActivityConst.limit_index.union) {
        if (GuildBossController.getInstance().getModel().getChangeCount() == true && this.ctrl.getBossActivityDoubleTime() == true && this.ctrl.getFirstComeGuild() == true) {
          red_status = true;
        }
      } else if (this.activityData.id == ActivityConst.limit_index.guildwar) {// red_status = GuildwarController.getInstance().getModel().checkGuildGuildWarRedStatus();
      } else if (this.activityData.id == ActivityConst.limit_index.ladder) {// red_status = LadderController.getInstance().getModel().checkLadderRedStatus();
      }
 
      this.redPoint.active = red_status;
    }
  },
  changeItemData: function changeItemData(data) {
    if (data.val[0]) {
      for (var i in data.val[0]) {
        if (!this.list_item[i]) {
          var item = ItemsPool.getInstance().getItem("backpack_item");
 
          if (this.mainContainer) {
            item.setParent(this.mainContainer);
          }
 
          this.list_item[i] = item;
        }
 
        if (this.list_item[i]) {
          this.list_item[i].initConfig(false, 0.5, false, true);
          this.list_item[i].show();
          this.list_item[i].setPosition(40 * i + (24 * i - 1), 67);
          this.list_item[i].setData(data.val[0][i]); // this.list_item[i].setDoubleIcon(this.is_double);
        }
      }
    }
 
    this.limitItemData(data);
 
    if (data.desc) {
      if (this.textTimeStart) {
        this.textTimeStart.string = data.desc;
        this.textTimeStart.node.active = true;
      }
    }
  },
  // 限时活动子项
  limitItemData: function limitItemData(data) {
    var RoleController = require("role_controller");
 
    var role_vo = RoleController.getInstance().getRoleVo();
    var res = PathTool.getIconPath("activity/activity_big", "txt_cn_activity_item_" + data.id, false, false);
    this.loadRes(res, function (resObject) {
      this.itemBG.getComponent(cc.Sprite).spriteFrame = resObject;
    }.bind(this));
 
    if (data.is_open == 1) {
      var _bool = MainuiController.getInstance().checkIsOpenByActivate(data.activate);
 
      if (_bool == true) {
        this.handleEffect(true);
        this.itemMask.active = false;
 
        if (this.btnRule) {
          this.btnRule.active = true;
        }
 
        if (data.id == ActivityConst.limit_index.union) {
          if (role_vo.gname == "") {
            this.textLimit.string = Utils.TI18N("当前未加入公会");
            this.handleEffect(false);
          }
        }
      } else {
        this.handleEffect(false);
 
        if (this.btnRule) {
          this.btnRule.active = false;
        }
 
        this.textLimit.string = data.lock_desc;
      }
    } else {
      if (data.id == ActivityConst.limit_index.union) {
        if (role_vo.gname != "") {
          this.textLimit.string = Utils.TI18N("公会副本玩法暂未开启");
        }
      }
    }
  },
  handleEffect: function handleEffect(status) {
    if (status == false) {
      if (this.play_effect) {
        this.play_effect.setToSetupPose();
        this.play_effect.clearTracks();
        this.play_effect = null;
      }
    } else {
      if (this.mainContainer && this.play_effect == null) {
        var node = new cc.Node();
        node.setAnchorPoint(1, 0);
        node.setPosition(this.itemBG.getContentSize().width - 106, 28);
        this.mainContainer.addChild(node, 1);
        this.play_effect = node.addComponent(sp.Skeleton);
        var anima_path = PathTool.getSpinePath(PathTool.getEffectRes(505), "action");
        LoaderManager.getInstance().loadRes(anima_path, function (ske_data) {
          if (this.play_effect) {
            this.play_effect.skeletonData = ske_data;
            this.play_effect.setAnimation(0, PlayerAction.action, true);
          }
        }.bind(this));
      }
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.list_item && Utils.next(this.list_item) != null) {
      for (var i in this.list_item) {
        if (this.list_item[i].deleteMe) {
          this.list_item[i].deleteMe();
        }
      }
    }
 
    this.list_item = [];
    this.handleEffect(false);
    this.count = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpdml0eVxcdmlld1xcYWN0aXZpdHlfaXRlbV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJBY3Rpdml0eUNvbnN0IiwiR3VpbGRCb3NzQ29udHJvbGxlciIsIkFjdGl2aXR5Q29udHJvbGxlciIsIk1haW51aUNvbnRyb2xsZXIiLCJBY3Rpdml0eV9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImlzX2RvdWJsZSIsImxpc3RfaXRlbSIsImluaXRQYW5lbCIsIm1haW5Db250YWluZXIiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwiaXRlbU1hc2siLCJ0ZXh0TGltaXQiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ6SW5kZXgiLCJidG5SdWxlIiwiYWN0aXZlIiwidGV4dFRpbWVTdGFydCIsIm5vZGUiLCJpdGVtQkciLCJyZWRQb2ludCIsImNoYW5nZUVzY29ydENvdW50IiwiYWN0aXZpdHlEYXRhIiwiaWQiLCJsaW1pdF9pbmRleCIsImVzY29ydCIsIm51bSIsInRvdGxlIiwiY3VycmVudCIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwiY291bnQiLCJjcmVhdGVMYWJlbCIsIkNvbG9yIiwidjIiLCJzZXREYXRhIiwiZGF0YSIsImNoYW5nZUl0ZW1EYXRhIiwiZ2V0RGF0YSIsImFkZENhbGxCYWNrIiwidmFsdWUiLCJjYWxsYmFjayIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3BlbkNvbW1vbkV4cGxhaW5WaWV3IiwiQ29uZmlnIiwiRXNjb3J0RGF0YSIsImRhdGFfZXhwbGFpbiIsInVuaW9uIiwiR3VpbGREdW5EYXRhIiwiZmlnaHRGaXJzdCIsImFsbEdvZCIsIlpzV2FyRGF0YSIsImd1aWxkd2FyIiwiR3VpbGRXYXJEYXRhIiwiY2hhbXBpb24iLCJBcmVuYUNoYW1waW9uRGF0YSIsImxhZGRlciIsIlNreUxhZGRlckRhdGEiLCJiaW5kIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfU1RBUlQiLCJldmVudCIsInRvdWNoZXMiLCJnZXRUb3VjaGVzIiwidG91Y2hfYmVnYW4iLCJnZXREZWx0YSIsIlRPVUNIX0VORCIsInRvdWNoX2VuZCIsImlzX2NsaWNrIiwiTWF0aCIsImFicyIsIngiLCJ5IiwicGxheUJ1dHRvblNvdW5kIiwiQnV0dG9uU291bmQiLCJOb3JtYWwiLCJ1cGRhdGVSZWRTdGF0dXMiLCJyZWRfc3RhdHVzIiwiZ2V0TW9kZWwiLCJnZXRDaGFuZ2VDb3VudCIsImdldEJvc3NBY3Rpdml0eURvdWJsZVRpbWUiLCJnZXRGaXJzdENvbWVHdWlsZCIsInZhbCIsImkiLCJpdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNob3ciLCJzZXRQb3NpdGlvbiIsImxpbWl0SXRlbURhdGEiLCJkZXNjIiwiUm9sZUNvbnRyb2xsZXIiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwicmVzIiwiZ2V0SWNvblBhdGgiLCJsb2FkUmVzIiwicmVzT2JqZWN0IiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJpc19vcGVuIiwiX2Jvb2wiLCJjaGVja0lzT3BlbkJ5QWN0aXZhdGUiLCJhY3RpdmF0ZSIsImhhbmRsZUVmZmVjdCIsImduYW1lIiwibG9ja19kZXNjIiwic3RhdHVzIiwicGxheV9lZmZlY3QiLCJzZXRUb1NldHVwUG9zZSIsImNsZWFyVHJhY2tzIiwic2V0QW5jaG9yUG9pbnQiLCJnZXRDb250ZW50U2l6ZSIsIndpZHRoIiwiYWRkQ2hpbGQiLCJhZGRDb21wb25lbnQiLCJzcCIsIlNrZWxldG9uIiwiYW5pbWFfcGF0aCIsImdldFNwaW5lUGF0aCIsImdldEVmZmVjdFJlcyIsIkxvYWRlck1hbmFnZXIiLCJza2VfZGF0YSIsInNrZWxldG9uRGF0YSIsInNldEFuaW1hdGlvbiIsIlBsYXllckFjdGlvbiIsImFjdGlvbiIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsIm9uRGVsZXRlIiwibmV4dCIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsYUFBYSxHQUFHRCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSUUsbUJBQW1CLEdBQUdGLE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFDQSxJQUFJRyxrQkFBa0IsR0FBR0gsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlJLGdCQUFnQixHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBRUEsSUFBSUssa0JBQWtCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzlCLGFBQVNDLFNBRHFCO0FBRTlCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCWCxRQUFRLENBQUNZLGFBQVQsQ0FBdUIsVUFBdkIsRUFBbUMsZUFBbkMsQ0FBbEI7QUFDQSxTQUFLQyxJQUFMLEdBQVlULGtCQUFrQixDQUFDVSxXQUFuQixFQUFaO0FBQ0gsR0FMNkI7QUFPOUI7QUFDQUMsRUFBQUEsVUFBVSxFQUFDLHNCQUFVO0FBQ2pCLFNBQUtDLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0gsR0FYNkI7QUFhOUI7QUFDQUMsRUFBQUEsU0FBUyxFQUFDLHFCQUFVO0FBQ2hCLFNBQUtDLGFBQUwsR0FBcUIsS0FBS0MsUUFBTCxDQUFjQyxjQUFkLENBQTZCLGdCQUE3QixDQUFyQjtBQUVBLFNBQUtDLFFBQUwsR0FBZ0IsS0FBS0gsYUFBTCxDQUFtQkUsY0FBbkIsQ0FBa0MsVUFBbEMsQ0FBaEI7QUFDQSxTQUFLRSxTQUFMLEdBQWlCLEtBQUtELFFBQUws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Q0QsUUFBaEM7QUFDQSxpQkFBS2QsV0FBTCxDQUFpQmdCLFlBQWpCLENBQThCLENBQTlCLEVBQWlDQyxZQUFZLENBQUNDLE1BQTlDLEVBQXNELElBQXREO0FBQ0g7QUFDSixTQUwrQyxDQUs5Q3ZFLElBTDhDLENBS3pDLElBTHlDLENBQWhEO0FBTUg7QUFDSjtBQUNKLEdBMU82QjtBQTRPOUI7QUFDQXdFLEVBQUFBLE1BQU0sRUFBQyxnQkFBU0MsTUFBVCxFQUFnQixDQUV0QixDQS9PNkI7QUFpUDlCO0FBQ0FDLEVBQUFBLE1BQU0sRUFBQyxrQkFBVSxDQUVoQixDQXBQNkI7QUF1UDlCO0FBQ0FDLEVBQUFBLFFBQVEsRUFBQyxvQkFBVTtBQUNmLFFBQUcsS0FBS3JJLFNBQUwsSUFBa0JVLEtBQUssQ0FBQzRILElBQU4sQ0FBVyxLQUFLdEksU0FBaEIsS0FBNEIsSUFBakQsRUFBc0Q7QUFDbEQsV0FBSSxJQUFJcUYsQ0FBUixJQUFhLEtBQUtyRixTQUFsQixFQUE0QjtBQUN4QixZQUFHLEtBQUtBLFNBQUwsQ0FBZXFGLENBQWYsRUFBa0JrRCxRQUFyQixFQUE4QjtBQUMxQixlQUFLdkksU0FBTCxDQUFlcUYsQ0FBZixFQUFrQmtELFFBQWxCO0FBQ0g7QUFDSjtBQUNKOztBQUNELFNBQUt2SSxTQUFMLEdBQWlCLEVBQWpCO0FBQ0EsU0FBSzJHLFlBQUwsQ0FBa0IsS0FBbEI7QUFDSCxTQUFLN0UsS0FBTCxHQUFhLElBQWI7QUFDQTtBQW5RNkIsQ0FBVCxDQUF6QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOa0u+WKqCBJdGVtIOmhuVxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDUtMDYgMTQ6MzQ6MzNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWN0aXZpdHlDb25zdCA9IHJlcXVpcmUoXCJhY3Rpdml0eV9jb25zdFwiKTtcbnZhciBHdWlsZEJvc3NDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWxkYm9zc19jb250cm9sbGVyXCIpO1xudmFyIEFjdGl2aXR5Q29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpdml0eV9jb250cm9sbGVyXCIpO1xudmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIilcblxudmFyIEFjdGl2aXR5X2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYWN0aXZpdHlcIiwgXCJhY3Rpdml0eV9pdGVtXCIpO1xuICAgICAgICB0aGlzLmN0cmwgPSBBY3Rpdml0eUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmlzX2RvdWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpc3RfaXRlbSA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMubWFpbkNvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLml0ZW1NYXNrID0gdGhpcy5tYWluQ29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbU1hc2tcIik7XG4gICAgICAgIHRoaXMudGV4dExpbWl0ID0gdGhpcy5pdGVtTWFzay5nZXRDaGlsZEJ5TmFtZShcInRleHRMaW1pdFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnRleHRMaW1pdC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaVrOivt+acn+W+hVwiKTtcbiAgICAgICAgdGhpcy5pdGVtTWFzay56SW5kZXggPSAxMTtcbiAgICBcbiAgICAgICAgdGhpcy5idG5SdWxlID0gdGhpcy5tYWluQ29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuUnVsZVwiKTtcbiAgICAgICAgdGhpcy5idG5SdWxlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIFxuICAgICAgICB0aGlzLnRleHRUaW1lU3RhcnQgPSB0aGlzLm1haW5Db250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ0ZXh0VGltZVN0YXJ0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMudGV4dFRpbWVTdGFydC5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLnRleHRUaW1lU3RhcnQubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pdGVtQkcgPSB0aGlzLm1haW5Db250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJpdGVtQkdcIik7XG4gICAgICAgIHRoaXMucmVkUG9pbnQgPSB0aGlzLm1haW5Db250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyZWRQb2ludFwiKTtcbiAgICAgICAgdGhpcy5yZWRQb2ludC5hY3RpdmUgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2hhbmdlRXNjb3J0Q291bnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5lc2NvcnQpe1xuICAgICAgICAgICAgLy8gdmFyIHRvdGxlID0gRXNjb3J0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0TXlNYXhDb3VudChFc2NvcnRDb25zdC50aW1lc190eXBlLmVzY29ydCk7XG4gICAgICAgICAgICAvLyB2YXIgY3VycmVudCA9IEVzY29ydENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldE15Q291bnQoRXNjb3J0Q29uc3QudGltZXNfdHlwZS5lc2NvcnQpO1xuXG4gICAgICAgICAgICB2YXIgbnVtID0gdG90bGUgLSBjdXJyZW50O1xuICAgICAgICAgICAgaWYobnVtIDwgMCl7XG4gICAgICAgICAgICAgICAgbnVtID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuaKpOmAgeasoeaVsO+8miVkLyVkXCIpLG51bSx0b3RsZSk7XG4gICAgICAgICAgICBpZighdGhpcy5jb3VudCl7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDIwLG5ldyBjYy5Db2xvcigweGZmLDB4ZmYsMHhmZiwgMHhmZiksbmV3IGNjLkNvbG9yKDB4NzQsMHgzNSwweDBiLDB4ZmYpLDU4Miw2NSxzdHIsdGhpcy5tYWluQ29udGFpbmVyLDIsY2MudjIoMSwwLjUpKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQuc3RyaW5nID0gc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGE6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMuYWN0aXZpdHlEYXRhID0gZGF0YTtcbiAgICAgICAgLy8g5Y+q5a+56JCM5Y+X5aS65a6d5YiX6KGo5YGa5Yik5patXG4gICAgICAgIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguZXNjb3J0KXtcbiAgICAgICAgICAgIC8vIHRoaXMuaXNfZG91YmxlID0gRXNjb3J0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuaXNEb3VibGVUaW1lcygpO1xuXHRcdCAgICB0aGlzLmNoYW5nZUVzY29ydENvdW50KClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZUl0ZW1EYXRhKGRhdGEpO1xuICAgICAgICAvLyDlvJXlr7zkvb/nlKgs5LiN6KaB5YigXG4gICAgICAgIC8vIGlmKGRhdGEgJiYgZGF0YS5pZCl7XG4gICAgICAgIC8vICAgICB0aGlzLnNldE5hbWUoXCJndWlkZV9hY3Rpdml0eV9pdGVtX1wiK2RhdGEuaWQpXG4gICAgICAgIC8vIH1cbiAgICB9LFxuXG4gICAgZ2V0RGF0YTpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpdml0eURhdGE7XG4gICAgfSxcblxuICAgIGFkZENhbGxCYWNrOmZ1bmN0aW9uKCB2YWx1ZSApe1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gIHZhbHVlO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYnRuUnVsZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5lc2NvcnQpe1xuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQ29tbW9uRXhwbGFpblZpZXcodHJ1ZSwgQ29uZmlnLkVzY29ydERhdGEuZGF0YV9leHBsYWluKVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC51bmlvbil7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Db21tb25FeHBsYWluVmlldyh0cnVlLCBDb25maWcuR3VpbGREdW5EYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguZmlnaHRGaXJzdCl7XG5cbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguYWxsR29kKXtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkNvbW1vbkV4cGxhaW5WaWV3KHRydWUsIENvbmZpZy5ac1dhckRhdGEuZGF0YV9leHBsYWluKVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5ndWlsZHdhcil7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Db21tb25FeHBsYWluVmlldyh0cnVlLCBDb25maWcuR3VpbGRXYXJEYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguY2hhbXBpb24pe1xuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQ29tbW9uRXhwbGFpblZpZXcodHJ1ZSwgQ29uZmlnLkFyZW5hQ2hhbXBpb25EYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXgubGFkZGVyKXtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkNvbW1vbkV4cGxhaW5WaWV3KHRydWUsIENvbmZpZy5Ta3lMYWRkZXJEYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIC8v5b2T55So5oi354K55Ye755qE5pe25YCZ6K6w5b2V6byg5qCH54K55Ye754q25oCBXG4gICAgICAgIHRoaXMucm9vdF93bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuZ2V0VG91Y2hlcygpO1xuICAgICAgICAgICAgdGhpcy50b3VjaF9iZWdhbiA9IHRvdWNoZXNbMF0uZ2V0RGVsdGEoKTtcbiAgICAgICAgfSx0aGlzKTtcblxuIFxuXG4gICAgICAgIC8v5b2T6byg5qCH5oqs6LW355qE5pe25YCZ5oGi5aSN54q25oCBXG4gICAgICAgIHRoaXMucm9vdF93bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmdldFRvdWNoZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hfZW5kID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuICAgICAgICAgICAgdmFyIGlzX2NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMudG91Y2hfYmVnYW4hPW51bGwpe1xuICAgICAgICAgICAgICAgIGlzX2NsaWNrID0gTWF0aC5hYnModGhpcy50b3VjaF9lbmQueCAtIHRoaXMudG91Y2hfYmVnYW4ueCkgPD0gMjAgJiZcblx0XHRcdFx0TWF0aC5hYnModGhpcy50b3VjaF9lbmQueSAtIHRoaXMudG91Y2hfYmVnYW4ueSkgPD0gMjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc19jbGljayA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSx0aGlzKTtcblxuICAgIH0sXG5cbiAgICB1cGRhdGVSZWRTdGF0dXM6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5hY3Rpdml0eURhdGEpe1xuICAgICAgICAgICAgdmFyIHJlZF9zdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguZXNjb3J0KXtcbiAgICAgICAgICAgICAgICAvLyByZWRfc3RhdHVzID0gRXNjb3J0Q29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOmdldE1vZGVsKCk6Y2hlY2tSZWRTdGF0dXMoKVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC51bmlvbil7XG4gICAgICAgICAgICAgICAgaWYoR3VpbGRCb3NzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0Q2hhbmdlQ291bnQoKSA9PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLmdldEJvc3NBY3Rpdml0eURvdWJsZVRpbWUoKSA9PSB0cnVlICYmXG5cdFx0XHRcdHRoaXMuY3RybC5nZXRGaXJzdENvbWVHdWlsZCgpID09IHRydWUgKXtcbiAgICAgICAgICAgICAgICAgICAgcmVkX3N0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5ndWlsZHdhcil7XG4gICAgICAgICAgICAgICAgLy8gcmVkX3N0YXR1cyA9IEd1aWxkd2FyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuY2hlY2tHdWlsZEd1aWxkV2FyUmVkU3RhdHVzKCk7XG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLmFjdGl2aXR5RGF0YS5pZCA9PSBBY3Rpdml0eUNvbnN0LmxpbWl0X2luZGV4LmxhZGRlcil7XG4gICAgICAgICAgICAgICAgLy8gcmVkX3N0YXR1cyA9IExhZGRlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmNoZWNrTGFkZGVyUmVkU3RhdHVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZFBvaW50LmFjdGl2ZSA9IHJlZF9zdGF0dXM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlSXRlbURhdGE6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIGlmKGRhdGEudmFsWzBdKXtcbiAgICAgICAgICAgIGZvcih2YXIgaSBpbiBkYXRhLnZhbFswXSl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMubGlzdF9pdGVtW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5tYWluQ29udGFpbmVyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0UGFyZW50KHRoaXMubWFpbkNvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RfaXRlbVtpXSA9IGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMubGlzdF9pdGVtW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0X2l0ZW1baV0uaW5pdENvbmZpZyhmYWxzZSwgMC41LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdF9pdGVtW2ldLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0X2l0ZW1baV0uc2V0UG9zaXRpb24oNDAqaSArICgyNCppLTEpLCA2Nyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdF9pdGVtW2ldLnNldERhdGEoZGF0YS52YWxbMF1baV0pO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxpc3RfaXRlbVtpXS5zZXREb3VibGVJY29uKHRoaXMuaXNfZG91YmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saW1pdEl0ZW1EYXRhKGRhdGEpO1xuICAgICAgICBpZihkYXRhLmRlc2Mpe1xuICAgICAgICAgICAgaWYodGhpcy50ZXh0VGltZVN0YXJ0KXtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRUaW1lU3RhcnQuc3RyaW5nID0gZGF0YS5kZXNjO1xuXHQgICAgXHQgICAgdGhpcy50ZXh0VGltZVN0YXJ0Lm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpmZDml7bmtLvliqjlrZDpoblcbiAgICBsaW1pdEl0ZW1EYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB2YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xuICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRJY29uUGF0aChcImFjdGl2aXR5L2FjdGl2aXR5X2JpZ1wiLCBcInR4dF9jbl9hY3Rpdml0eV9pdGVtX1wiK2RhdGEuaWQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhyZXMsIChmdW5jdGlvbihyZXNPYmplY3Qpe1xuICAgICAgICAgICAgdGhpcy5pdGVtQkcuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuXG4gICAgICAgIGlmKGRhdGEuaXNfb3BlbiA9PSAxKXtcbiAgICAgICAgICAgIHZhciBfYm9vbCA9IE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGVja0lzT3BlbkJ5QWN0aXZhdGUoZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgICAgICBpZihfYm9vbCA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1NYXNrLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuYnRuUnVsZSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuUnVsZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihkYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXgudW5pb24pe1xuICAgICAgICAgICAgICAgICAgICBpZihyb2xlX3ZvLmduYW1lID09IFwiXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0TGltaXQuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlvZPliY3mnKrliqDlhaXlhazkvJpcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5idG5SdWxlKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5SdWxlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRleHRMaW1pdC5zdHJpbmcgPSBkYXRhLmxvY2tfZGVzYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZihkYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXgudW5pb24pe1xuICAgICAgICAgICAgICAgIGlmKHJvbGVfdm8uZ25hbWUgIT0gXCJcIil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dExpbWl0LnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YWs5Lya5Ymv5pys546p5rOV5pqC5pyq5byA5ZCvXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBcblxuICAgIGhhbmRsZUVmZmVjdDpmdW5jdGlvbihzdGF0dXMpe1xuICAgICAgICBpZihzdGF0dXMgPT0gZmFsc2Upe1xuICAgICAgICAgICAgaWYodGhpcy5wbGF5X2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdC5zZXRUb1NldHVwUG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGxheV9lZmZlY3QuY2xlYXJUcmFja3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZih0aGlzLm1haW5Db250YWluZXIgJiYgdGhpcy5wbGF5X2VmZmVjdCA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBjYy5Ob2RlKCk7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBbmNob3JQb2ludCgxLDApXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQb3NpdGlvbih0aGlzLml0ZW1CRy5nZXRDb250ZW50U2l6ZSgpLndpZHRoLTEwNiwgMjgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFpbkNvbnRhaW5lci5hZGRDaGlsZChub2RlLDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdCA9IG5vZGUuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKTtcbiAgICAgICAgICAgICAgICB2YXIgYW5pbWFfcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChQYXRoVG9vbC5nZXRFZmZlY3RSZXMoNTA1KSwgXCJhY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXMoYW5pbWFfcGF0aCwgZnVuY3Rpb24oc2tlX2RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5wbGF5X2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0LnNrZWxldG9uRGF0YSA9IHNrZV9kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdC5zZXRBbmltYXRpb24oMCwgUGxheWVyQWN0aW9uLmFjdGlvbiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6ZnVuY3Rpb24ocGFyYW1zKXtcblxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuICAgIFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLmxpc3RfaXRlbSAmJiBVdGlscy5uZXh0KHRoaXMubGlzdF9pdGVtKSE9bnVsbCl7XG4gICAgICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5saXN0X2l0ZW0pe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubGlzdF9pdGVtW2ldLmRlbGV0ZU1lKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0X2l0ZW1baV0uZGVsZXRlTWUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RfaXRlbSA9IFtdO1xuICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSk7XG5cdCAgICB0aGlzLmNvdW50ID0gbnVsbDtcbiAgICB9LFxufSkiXX0=