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/action/view/action_main_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, 'd08cbyACEhKK734Odnrhx6G', 'action_main_window');
// Scripts/mod/action/view/action_main_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     活动主界面
// <br/>Create: 2019-04-18 16:29:40
// --------------------------------------------------------------------
var ActionConst = require("action_const");
 
var PathTool = require("pathtool");
 
var ActionController = require("action_controller");
 
var ActionEvent = require("action_event");
 
var MainuiConst = require("mainui_const");
 
var Action_mainWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("welfare", "welfare_main_view"); // this.viewTag = SCENE_TAG.ui;                //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Full; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = ActionController.getInstance();
    this.model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.sub_list = [];
    this.tab_list = {};
    this.panel_list = {};
    this.tab_width = 78;
    this.off_space = 50;
    this.selected_tab = null;
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild("background");
    this.background.scale = this.background.scale * FIT_SCALE;
    this.main_container_nd = this.seekChild("main_container");
    this.main_panel_nd = this.seekChild(this.main_container_nd, "main_panel");
    this.container_nd = this.seekChild(this.main_panel_nd, "container");
    this.close_btn_nd = this.seekChild(this.main_container_nd, "close_btn");
    this.tab_container_nd = this.seekChild(this.main_container_nd, "tab_container");
    this.tab_scroll_nd = this.seekChild(this.tab_container_nd, "tab_scroll");
    this.tab_scroll_sv = this.seekChild(this.tab_container_nd, "tab_scroll", cc.ScrollView);
    this.tab_scroll_content_nd = this.seekChild(this.tab_scroll_nd, "content");
    this.loadRes(PathTool.getBigBg("welfare/welfare_bg", "jpg"), function (res) {
      this.background.getComponent(cc.Sprite).spriteFrame = res;
    }.bind(this));
    this.loadRes(PathTool.getBigBg("welfare/welfare_bg_1"), function (res) {
      this.main_panel_nd.getChildByName("tab_sprite_bg").getComponent(cc.Sprite).spriteFrame = res;
    }.bind(this));
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.close_btn_nd, function () {
      Utils.playButtonSound(2);
      this.ctrl.openActionMainPanel(false);
    }.bind(this), 1);
    this.addGlobalEvent(ActionEvent.UPDATE_HOLIDAY_TAB_STATUS, function (function_id, vo) {
      if (function_id != this.function_id) return;
      this.setTabStatus(vo.bid);
    }.bind(this));
    this.addGlobalEvent(ActionEvent.SHOW_ACTIVITY_RED_POINT, function (bid, status) {
      this.setSpecialTabStatus(bid, status);
    }.bind(this));
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    this.function_id = params.function_id || MainuiConst.icon.action;
    this.sub_list = this.ctrl.getActionSubList(this.function_id);
    this.action_bid = params.action_bid;
    this.createSubType();
  },
  createSubType: function createSubType() {
    var self = this;
 
    if (this.sub_list == null || Utils.next(this.sub_list) == null) {} else {
      var sum = self.sub_list.length;
      var max_width = sum * (this.tab_width + this.off_space) + 110;
      this.max_width = Math.max(this.tab_scroll_nd.width, max_width);
      this.tab_scroll_content_nd.width = this.max_width;
      this.tab_scroll_sv.scrollToLeft(0);
 
      var call_back = function (item) {
        this.handleSelectedTab(item);
      }.bind(this);
 
      var index_selected = 0;
      var tab_item = null;
      var _x = null;
      var data = null;
 
      for (var i = 0; i < sum; i++) {
        data = this.sub_list[i];
 
        if (data != null && data.bid != null && this.tab_list[data.bid] == null) {
          var WelfareTab = require("welfare_tab_panel");
 
          tab_item = new WelfareTab();
          tab_item.show();
          tab_item.setData(data);
          _x = i * (this.tab_width + this.off_space) + 110;
          tab_item.setPosition(_x, -68);
          tab_item.setClickCallBack(call_back);
          tab_item.setParent(this.tab_scroll_content_nd);
          this.tab_list[data.bid] = tab_item; //设置红点状态
 
          this.setTabStatus(data.bid);
        }
      } //手动设置选中第一个
 
 
      if (this.action_bid) {
        this.handleSelectedTab(this.tab_list[this.action_bid]);
      } else {
        this.handleSelectedTab(this.tab_list[this.sub_list[0].bid]);
      }
    }
  },
  handleSelectedTab: function handleSelectedTab(tab) {
    if (this.selected_tab != null && this.selected_tab == tab) return;
 
    if (this.selected_tab != null) {
      this.selected_tab.setSelected(false);
    }
 
    this.selected_tab = tab;
 
    if (this.selected_tab != null) {
      this.selected_tab.setSelected(true);
    }
 
    this.changePanelByTab();
  },
  changePanelByTab: function changePanelByTab() {
    if (this.selected_tab == null || this.selected_tab.data == null) return;
    var data = this.selected_tab.data;
    if (data.bid == null || data.bid == 0) return;
 
    if (this.selected_panel != null) {
      if (this.selected_panel.setVisibleStatus) {
        this.selected_panel.setVisibleStatus(false);
      } else {
        this.selected_panel.setVisible(false);
      }
 
      this.selected_panel = null;
    }
 
    if (this.panel_list[data.bid] == null) {
      var panel_type = data.panel_type;
 
      if (data.panel_type == 18 || data.panel_type == 12 || data.panel_type == 21 || data.panel_type == 23 || data.panel_type == 22) {
        panel_type = 16;
      }
 
      var view_str = ActionConst.ActionPanelTypeView[panel_type];
 
      if (view_str) {
        if (this.panel_list[data.bid] == null) {
          this.panel_list[data.bid] = Utils.createClass(view_str, data.bid);
          this.panel_list[data.bid].show({
            bid: data.bid,
            function_id: this.function_id
          });
          this.panel_list[data.bid].setParent(this.container_nd);
        }
      }
    }
 
    this.selected_panel = this.panel_list[data.bid];
 
    if (this.selected_panel != null) {
      if (this.selected_panel.setVisibleStatus) {
        this.selected_panel.setVisibleStatus(true);
      } else {
        this.selected_panel.setVisible(true);
      }
    }
  },
  setTabStatus: function setTabStatus(bid) {
    var vo = this.ctrl.getHolidayAweradsStatus(bid);
    var tab_item = this.tab_list[bid];
    if (tab_item == null) return;
 
    if (vo == null || vo.status == false) {
      if (tab_item.updateTipsStatus) {
        tab_item.updateTipsStatus(false);
      }
    } else {
      if (tab_item.updateTipsStatus) {
        tab_item.updateTipsStatus(true);
      }
    } //特殊活动红点
 
 
    var status = this.model.getGiftRedStatusByBid(bid);
    this.setSpecialTabStatus(bid, status);
  },
  isSpecialTabByBid: function isSpecialTabByBid(bid) {
    return bid == ActionConst.ActionRankCommonType.high_value_gift || bid == ActionConst.ActionRankCommonType.mysterious_store;
  },
  setSpecialTabStatus: function setSpecialTabStatus(bid, status) {
    if (this.specail_tab_status && this.specail_tab_status == status) return;
    this.specail_tab_status = status;
 
    if (this.isSpecialTabByBid(bid)) {
      var tab_item = this.tab_list[bid];
      if (tab_item == null) return;
 
      if (!status) {
        if (tab_item.updateTipsStatus) {
          tab_item.updateTipsStatus(false);
        }
      } else {
        if (tab_item.updateTipsStatus) {
          tab_item.updateTipsStatus(true);
        }
      }
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    for (var k in this.tab_list) {
      if (this.tab_list[k].deleteMe) {
        this.tab_list[k].deleteMe();
        this.tab_list[k] = null;
      }
    }
 
    this.tab_list = null;
 
    for (var k in this.panel_list) {
      if (this.panel_list[k].deleteMe) {
        this.panel_list[k].deleteMe();
        this.panel_list[k] = null;
      }
    }
 
    this.panel_list = null;
    this.selected_tab = null;
    this.ctrl.openActionMainPanel(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpb25cXHZpZXdcXGFjdGlvbl9tYWluX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJBY3Rpb25Db25zdCIsInJlcXVpcmUiLCJQYXRoVG9vbCIsIkFjdGlvbkNvbnRyb2xsZXIiLCJBY3Rpb25FdmVudCIsIk1haW51aUNvbnN0IiwiQWN0aW9uX21haW5XaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJGdWxsIiwiY3RybCIsImdldEluc3RhbmNlIiwibW9kZWwiLCJnZXRNb2RlbCIsImluaXRDb25maWciLCJzdWJfbGlzdCIsInRhYl9saXN0IiwicGFuZWxfbGlzdCIsInRhYl93aWR0aCIsIm9mZl9zcGFjZSIsInNlbGVjdGVkX3RhYiIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsIm1haW5fY29udGFpbmVyX25kIiwibWFpbl9wYW5lbF9uZCIsImNvbnRhaW5lcl9uZCIsImNsb3NlX2J0bl9uZCIsInRhYl9jb250YWluZXJfbmQiLCJ0YWJfc2Nyb2xsX25kIiwidGFiX3Njcm9sbF9zdiIsIlNjcm9sbFZpZXciLCJ0YWJfc2Nyb2xsX2NvbnRlbnRfbmQiLCJsb2FkUmVzIiwiZ2V0QmlnQmciLCJyZXMiLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJnZXRDaGlsZEJ5TmFtZSIsInJlZ2lzdGVyRXZlbnQiLCJVdGlscyIsIm9uVG91Y2hFbmQiLCJwbGF5QnV0dG9uU291bmQiLCJvcGVuQWN0aW9uTWFpblBhbmVsIiwiYWRkR2xvYmFsRXZlbnQiLCJVUERBVEVfSE9MSURBWV9UQUJfU1RBVFVTIiwiZnVuY3Rpb25faWQiLCJ2byIsInNldFRhYlN0YXR1cyIsImJpZCIsIlNIT1dfQUNUSVZJVFlfUkVEX1BPSU5UIiwic3RhdHVzIiwic2V0U3BlY2lhbFRhYlN0YXR1cyIsIm9wZW5Sb290V25kIiwicGFyYW1zIiwiaWNvbiIsImFjdGlvbiIsImdldEFjdGlvblN1Ykxpc3QiLCJhY3Rpb25fYmlkIiwiY3JlYXRlU3ViVHlwZSIsInNlbGYiLCJuZXh0Iiwic3VtIiwibGVuZ3RoIiwibWF4X3dpZHRoIiwiTWF0aCIsIm1heCIsIndpZHRoIiwic2Nyb2xsVG9MZWZ0IiwiY2FsbF9iYWNrIiwiaXRlbSIsImhhbmRsZVNlbGVjdGVkVGFiIiwiaW5kZXhfc2VsZWN0ZWQiLCJ0YWJfaXRlbSIsIl94IiwiZGF0YSIsImkiLCJXZWxmYXJlVGFiIiwic2hvdyIsInNldERhdGEiLCJzZXRQb3NpdGlvbiIsInNldENsaWNrQ2FsbEJhY2siLCJzZXRQYXJlbnQiLCJ0YWIiLCJzZXRTZWxlY3RlZCIsImNoYW5nZVBhbmVsQnlUYWIiLCJzZWxlY3RlZF9wYW5lbCIsInNldFZpc2libGVTdGF0dXMiLCJzZXRWaXNpYmxlIiwicGFuZWxfdHlwZSIsInZpZXdfc3RyIiwiQWN0aW9uUGFuZWxUeXBlVmlldyIsImNyZWF0ZUNsYXNzIiwiZ2V0SG9saWRheUF3ZXJhZHNTdGF0dXMiLCJ1cGRhdGVUaXBzU3RhdHVzIiwiZ2V0R2lmdFJlZFN0YXR1c0J5QmlkIiwiaXNTcGVjaWFsVGFiQnlCaWQiLCJBY3Rpb25SYW5rQ29tbW9uVHlwZSIsImhpZ2hfdmFsdWVfZ2lmdCIsIm15c3RlcmlvdXNfc3RvcmUiLCJzcGVjYWlsX3RhYl9zdGF0dXMiLCJjbG9zZUNhbGxCYWNrIiwiayIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFdBQVcsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUMsUUFBUSxHQUFHRCxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJRSxnQkFBZ0IsR0FBR0YsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlHLFdBQVcsR0FBR0gsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUksV0FBVyxHQUFHSixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFFQSxJQUFJSyxpQkFBaUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDN0IsYUFBU0MsUUFEb0I7QUFFN0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JULFFBQVEsQ0FBQ1UsYUFBVCxDQUF1QixTQUF2QixFQUFrQyxtQkFBbEMsQ0FBbEIsQ0FEYyxDQUVkOztBQUNBLFNBQUtDLFFBQUwsR0FBZ0JDLE9BQU8sQ0FBQ0MsSUFBeEIsQ0FIYyxDQUc4Qjs7QUFDNUMsU0FBS0MsSUFBTCxHQUFZYixnQkFBZ0IsQ0FBQ2MsV0FBakIsRUFBWjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxLQUFLRixJQUFMLENBQVVHLFFBQVYsRUFBYjtBQUNILEdBUjRCO0FBVTdCO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsRUFBbEI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsSUFBcEI7QUFDSCxHQWxCNEI7QUFvQjdCO0FBQ0FDLEVBQUFBLFlBQVksRUFBRSx3QkFBWTtBQUN0QixTQUFLQyxVQUFMLEdBQWtCLEtBQUtDLFNBQUwsQ0FBZSxZQUFmLENBQWxCO0FBQ0EsU0FBS0QsVUFBTCxDQUFnQkUsS0FBaEIsR0FBd0IsS0FBS0YsVUFBTCxDQUFnQkUsS0FBaEIsR0FBd0JDLFNBQWhEO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsS0FBS0gsU0FBTCxDQUFlLGdCQUFmLENBQXpCO0FBRUEsU0FBS0ksYUFBTCxHQUFxQixLQUFLSixTQUFMLENBQWUsS0FBS0csaUJBQXBCLEVBQXVDLFlBQXZDLENBQXJCO0FBQ0EsU0FBS0UsWUFBTCxHQUFvQixLQUFLTCxTQUFMLENBQWUsS0FBS0ksYUFBcEIsRUFBbUMsV0FBbkMsQ0FBcEI7QUFFQSxTQUFLRSxZQUFMLEdBQW9CLEtBQUtOLFNBQUwsQ0FBZSxLQUFLRyxpQkFBcEIsRUFBdUMsV0FBdkMsQ0FBcEI7QUFDQSxTQUFLSSxnQkFBTCxHQUF3QixLQUFLUCxTQUFMLENBQWUsS0FBS0csaUJBQXBCLEVBQXVDLGVBQXZDLENBQXhCO0FBQ0EsU0FBS0ssYUFBTCxHQUFxQixLQUFLUixTQUFMLENBQWUsS0FBS08sZ0JBQXBCLEVBQXNDLFlBQXRDLENBQXJCO0FBQ0EsU0FBS0UsYUFBTCxHQUFxQixLQUFLVCxTQUFMLENBQWUsS0FBS08sZ0JBQXBCLEVBQXNDLFlBQXRDLEVBQW9EN0IsRUFBRSxDQUFDZ0MsVUFBdkQsQ0FBckI7QUFDQSxTQUFLQyxxQkFBTCxHQUE2QixLQUFLWCxTQUFMLENBQWUsS0FBS1EsYUFBcEIsRUFBbUMsU0FBbkMsQ0FBN0I7QUFFQSxTQUFLSSxPQUFMLENBQWF2QyxRQUFRLENBQUN3QyxRQUFULENBQWtCLG9CQUFsQixFQUF1QyxLQUF2QyxDQUFiLEVBQTRELFVBQVVDLEdBQVYsRUFBZTtBQUN2RSxXQUFLZixVQUFMLENBQWdCZ0IsWUFBaEIsQ0FBNkJyQyxFQUFFLENBQUNzQyxNQUFoQyxFQUF3Q0MsV0FBeEMsR0FBc0RILEdBQXREO0FBQ0gsS0FGMkQsQ0FFMURJLElBRjBELENBRXJELElBRnFELENBQTVEO0FBR0EsU0FBS04sT0FBTCxDQUFhdkMsUUFBUSxDQUFDd0MsUUFBVCxDQUFrQixzQkFBbEIsQ0FBYixFQUF3RCxVQUFVQyxHQUFWLEVBQWU7QUFDbkUsV0FBS1YsYUFBTCxDQUFtQmUsY0FBbkIsQ0FBa0MsZUFBbEMsRUFBbURKLFlBQW5ELENBQWdFckMsRUFBRSxDQUFDc0MsTUFBbkUsRUFBMkVDLFdBQTNFLEdBQXlGSCxHQUF6RjtBQUNILEtBRnVELENBRXRESSxJQUZzRCxDQUVqRCxJQUZpRCxDQUF4RDtBQUdILEdBekM0QjtBQTJDN0I7QUFDQUUsRUFBQUEsYUFBYSxFQUFFLHlCQUFZO0FBQ3ZCQyxJQUFBQSxLQUFLLENBQUNDLFVBQU4sQ0FBaUIsS0FBS2hCLFlBQXRCLEVBQW9DLFlBQVk7QUFDNUNlLE1BQUFBLEtBQUssQ0FBQ0UsZUFBTixDQUFzQixDQUF0QjtBQUNBLFdBQUtwQyxJQUFMLENBQVVxQyxtQkFBVixDQUE4QixLQUE5QjtBQUNILEtBSG1DLENBR2xDTixJQUhrQyxDQUc3QixJQUg2QixDQUFwQyxFQUdjLENBSGQ7QUFJQSxTQUFLTyxjQUFMLENBQW9CbEQsV0FBVyxDQUFDbUQseUJBQWhDLEVBQTJELFVBQVVDLFdBQVYsRUFBdUJDLEVBQXZCLEVBQTJCO0FBQ2xGLFVBQUlELFdBQVcsSUFBSSxLQUFLQSxXQUF4QixFQUFxQztBQUNyQyxXQUFLRSxZQUFMLENBQWtCRCxFQUFFLENBQUNFLEdBQXJCO0FBQ0gsS0FIMEQsQ0FHekRaLElBSHlELENBR3BELElBSG9ELENBQTNEO0FBSUEsU0FBS08sY0FBTCxDQUFvQmxELFdBQVcsQ0FBQ3dELHVCQUFoQyxFQUF5RCxVQUFVRCxHQUFWLEVBQWVFLE1BQWYsRUFBdUI7QUFDNUUsV0FBS0MsbUJBQUwsQ0FBeUJILEdBQXpCLEVBQThCRSxNQUE5QjtBQUNILEtBRndELENBRXZEZCxJQUZ1RCxDQUVsRCxJQUZrRCxDQUF6RDtBQUdILEdBeEQ0QjtBQTBEN0I7QUFDQWdCLEVBQUFBLFdBQVcsRUFBRSxxQkFBVUMsTUFBVixFQUFrQjtBQUMzQixTQUFLUixXQUFMLEdBQW1CUSxNQUFNLENBQUNSLFdBQVAsSUFBc0JuRCxXQUFXLENBQUM0RCxJQUFaLENBQWlCQyxNQUExRDtBQUNBLFNBQUs3QyxRQUFMLEdBQWdCLEtBQUtMLElBQUwsQ0FBVW1ELGdCQUFWLENBQTJCLEtBQUtYLFdBQWhDLENBQWhCO0FBQ0EsU0FBS1ksVUFBTCxHQUFrQkosTUFBTSxDQUFDSSxVQUF6QjtBQUNBLFNBQUtDLGFBQUw7QUFDSCxHQWhFNEI7QUFpRTdCQSxFQUFBQSxhQWpFNkIsMkJBaUViO0FBQ1osUUFBSUMsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSSxLQUFLakQsUUFBTCxJQUFpQixJQUFqQixJQUF5QjZCLEtBQUssQ0FBQ3FCLElBQU4sQ0FBVyxLQUFLbEQsUUFBaEIsS0FBNkIsSUFBMUQsRUFBZ0UsQ0FFL0QsQ0FGRCxNQUVPO0FBQ0gsVUFBSW1ELEdBQUcsR0FBR0YsSUFBSSxDQUFDakQsUUFBTCxDQUFjb0QsTUFBeEI7QUFDQSxVQUFJQyxTQUFTLEdBQUdGLEdBQUcsSUFBSSxLQUFLaEQsU0FBTCxHQUFpQixLQUFLQyxTQUExQixDQUFILEdBQTBDLEdBQTFEO0FBQ0EsV0FBS2lELFNBQUwsR0FBaUJDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEtBQUt2QyxhQUFMLENBQW1Cd0MsS0FBNUIsRUFBbUNILFNBQW5DLENBQWpCO0FBQ0EsV0FBS2xDLHFCQUFMLENBQTJCcUMsS0FBM0IsR0FBbUMsS0FBS0gsU0FBeEM7QUFDQSxXQUFLcEMsYUFBTCxDQUFtQndDLFlBQW5CLENBQWdDLENBQWhDOztBQUNBLFVBQUlDLFNBQVMsR0FBRyxVQUFVQyxJQUFWLEVBQWdCO0FBQzVCLGFBQUtDLGlCQUFMLENBQXVCRCxJQUF2QjtBQUNILE9BRmUsQ0FFZGpDLElBRmMsQ0FFVCxJQUZTLENBQWhCOztBQUdBLFVBQUltQyxjQUFjLEdBQUcsQ0FBckI7QUFDQSxVQUFJQyxRQUFRLEdBQUcsSUFBZjtBQUNBLFVBQUlDLEVBQUUsR0FBRyxJQUFUO0FBQ0EsVUFBSUMsSUFBSSxHQUFHLElBQVg7O0FBQ0EsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHZCxHQUFwQixFQUF5QmMsQ0FBQyxFQUExQixFQUE4QjtBQUMxQkQsUUFBQUEsSUFBSSxHQUFHLEtBQUtoRSxRQUFMLENBQWNpRSxDQUFkLENBQVA7O0FBQ0EsWUFBSUQsSUFBSSxJQUFJLElBQVIsSUFBZ0JBLElBQUksQ0FBQzFCLEdBQUwsSUFBWSxJQUE1QixJQUFvQyxLQUFLckMsUUFBTCxDQUFjK0QsSUFBSSxDQUFDMUIsR0FBbkIsS0FBMkIsSUFBbkUsRUFBeUU7QUFDckUsY0FBSTRCLFVBQVUsR0FBR3RGLE9BQU8sQ0FBQyxtQkFBRCxDQUF4Qjs7QUFDQWtGLFVBQUFBLFFBQVEsR0FBRyxJQUFJSSxVQUFKLEVBQVg7QUFDQUosVUFBQUEsUUFBUSxDQUFDSyxJQUFUO0FBQ0FMLFVBQUFBLFFBQVEsQ0FBQ00sT0FBVCxDQUFpQkosSUFBakI7QUFDQUQsVUFBQUEsRUFBRSxHQUFJRSxDQUFELElBQU8sS0FBSzlELFNBQUwsR0FBaUIsS0FBS0MsU0FBN0IsSUFBMEMsR0FBL0M7QUFDQTBELFVBQUFBLFFBQVEsQ0FBQ08sV0FBVCxDQUFxQk4sRUFBckIsRUFBeUIsQ0FBQyxFQUExQjtBQUNBRCxVQUFBQSxRQUFRLENBQUNRLGdCQUFULENBQTBCWixTQUExQjtBQUNBSSxVQUFBQSxRQUFRLENBQUNTLFNBQVQsQ0FBbUIsS0FBS3BELHFCQUF4QjtBQUNBLGVBQUtsQixRQUFMLENBQWMrRCxJQUFJLENBQUMxQixHQUFuQixJQUEwQndCLFFBQTFCLENBVHFFLENBVXJFOztBQUNBLGVBQUt6QixZQUFMLENBQWtCMkIsSUFBSSxDQUFDMUIsR0FBdkI7QUFDSDtBQUNKLE9BNUJFLENBNkJIOzs7QUFDQSxVQUFHLEtBQUtTLFVBQVIsRUFBbUI7QUFDZixhQUFLYSxpQkFBTCxDQUF1QixLQUFLM0QsUUFBTCxDQUFjLEtBQUs4QyxVQUFuQixDQUF2QjtBQUNILE9BRkQsTUFFSztBQUNELGFBQUthLGlCQUFMLENBQXVCLEtBQUszRCxRQUFMLENBQWMsS0FBS0QsUUFBTCxDQUFjLENBQWQsRUFBaUJzQyxHQUEvQixDQUF2QjtBQUNIO0FBQ0o7QUFDSixHQXpHNEI7QUEwRzdCc0IsRUFBQUEsaUJBQWlCLEVBQUUsMkJBQVVZLEdBQVYsRUFBZTtBQUM5QixRQUFJLEtBQUtuRSxZQUFMLElBQXFCLElBQXJCLElBQTZCLEtBQUtBLFlBQUwsSUFBcUJtRSxHQUF0RCxFQUEyRDs7QUFDM0QsUUFBSSxLQUFLbkUsWUFBTCxJQUFxQixJQUF6QixFQUErQjtBQUMzQixXQUFLQSxZQUFMLENBQWtCb0UsV0FBbEIsQ0FBOEIsS0FBOUI7QUFDSDs7QUFDRCxTQUFLcEUsWUFBTCxHQUFvQm1FLEdBQXBCOztBQUNBLFFBQUksS0FBS25FLFlBQUwsSUFBcUIsSUFBekIsRUFBK0I7QUFDM0IsV0FBS0EsWUFBTCxDQUFrQm9FLFdBQWxCLENBQThCLElBQTlCO0FBQ0g7O0FBQ0QsU0FBS0MsZ0JBQUw7QUFDSCxHQXBINEI7QUFxSDdCQSxFQUFBQSxnQkFBZ0IsRUFBRSw0QkFBWTtBQUMxQixRQUFJLEtBQUtyRSxZQUFMLElBQXFCLElBQXJCLElBQTZCLEtBQUtBLFlBQUwsQ0FBa0IyRCxJQUFsQixJQUEwQixJQUEzRCxFQUFpRTtBQUNqRSxRQUFJQSxJQUFJLEdBQUcsS0FBSzNELFlBQUwsQ0FBa0IyRCxJQUE3QjtBQUNBLFFBQUlBLElBQUksQ0FBQzFCLEdBQUwsSUFBWSxJQUFaLElBQW9CMEIsSUFBSSxDQUFDMUIsR0FBTCxJQUFZLENBQXBDLEVBQXVDOztBQUV2QyxRQUFJLEtBQUtxQyxjQUFMLElBQXVCLElBQTNCLEVBQWlDO0FBQzdCLFVBQUksS0FBS0EsY0FBTCxDQUFvQkMsZ0JBQXhCLEVBQTBDO0FBQ3RDLGFBQUtELGNBQUwsQ0FBb0JDLGdCQUFwQixDQUFxQyxLQUFyQztBQUNILE9BRkQsTUFFTztBQUNILGFBQUtELGNBQUwsQ0FBb0JFLFVBQXBCLENBQStCLEtBQS9CO0FBQ0g7O0FBQ0QsV0FBS0YsY0FBTCxHQUFzQixJQUF0QjtBQUNIOztBQUVELFFBQUksS0FBS3pFLFVBQUwsQ0FBZ0I4RCxJQUFJLENBQUMxQixHQUFyQixLQUE2QixJQUFqQyxFQUF1QztBQUNuQyxVQUFJd0MsVUFBVSxHQUFHZCxJQUFJLENBQUNjLFVBQXRCOztBQUNBLFVBQUlkLElBQUksQ0FBQ2MsVUFBTCxJQUFtQixFQUFuQixJQUF5QmQsSUFBSSxDQUFDYyxVQUFMLElBQW1CLEVBQTVDLElBQWtEZCxJQUFJLENBQUNjLFVBQUwsSUFBbUIsRUFBckUsSUFBMkVkLElBQUksQ0FBQ2MsVUFBTCxJQUFtQixFQUE5RixJQUFvR2QsSUFBSSxDQUFDYyxVQUFMLElBQW1CLEVBQTNILEVBQStIO0FBQzNIQSxRQUFBQSxVQUFVLEdBQUcsRUFBYjtBQUNIOztBQUNELFVBQUlDLFFBQVEsR0FBR3BHLFdBQVcsQ0FBQ3FHLG1CQUFaLENBQWdDRixVQUFoQyxDQUFmOztBQUNBLFVBQUlDLFFBQUosRUFBYztBQUNWLFlBQUksS0FBSzdFLFVBQUwsQ0FBZ0I4RCxJQUFJLENBQUMxQixHQUFyQixLQUE2QixJQUFqQyxFQUF1QztBQUNuQyxlQUFLcEMsVUFBTCxDQUFnQjhELElBQUksQ0FBQzFCLEdBQXJCLElBQTRCVCxLQUFLLENBQUNvRCxXQUFOLENBQWtCRixRQUFsQixFQUEyQmYsSUFBSSxDQUFDMUIsR0FBaEMsQ0FBNUI7QUFDQSxlQUFLcEMsVUFBTCxDQUFnQjhELElBQUksQ0FBQzFCLEdBQXJCLEVBQTBCNkIsSUFBMUIsQ0FBK0I7QUFBQzdCLFlBQUFBLEdBQUcsRUFBQzBCLElBQUksQ0FBQzFCLEdBQVY7QUFBY0gsWUFBQUEsV0FBVyxFQUFDLEtBQUtBO0FBQS9CLFdBQS9CO0FBQ0EsZUFBS2pDLFVBQUwsQ0FBZ0I4RCxJQUFJLENBQUMxQixHQUFyQixFQUEwQmlDLFNBQTFCLENBQW9DLEtBQUsxRCxZQUF6QztBQUNIO0FBQ0o7QUFFSjs7QUFDRCxTQUFLOEQsY0FBTCxHQUFzQixLQUFLekUsVUFBTCxDQUFnQjhELElBQUksQ0FBQzFCLEdBQXJCLENBQXRCOztBQUVBLFFBQUksS0FBS3FDLGNBQUwsSUFBdUIsSUFBM0IsRUFBaUM7QUFDN0IsVUFBSSxLQUFLQSxjQUFMLENBQW9CQyxnQkFBeEIsRUFBMEM7QUFDdEMsYUFBS0QsY0FBTCxDQUFvQkMsZ0JBQXBCLENBQXFDLElBQXJDO0FBQ0gsT0FGRCxNQUVPO0FBQ0gsYUFBS0QsY0FBTCxDQUFvQkUsVUFBcEIsQ0FBK0IsSUFBL0I7QUFDSDtBQUNKO0FBQ0osR0EzSjRCO0FBNko3QnhDLEVBQUFBLFlBN0o2Qix3QkE2SmhCQyxHQTdKZ0IsRUE2Slg7QUFDZCxRQUFJRixFQUFFLEdBQUcsS0FBS3pDLElBQUwsQ0FBVXVGLHVCQUFWLENBQW1DNUMsR0FBbkMsQ0FBVDtBQUNBLFFBQUl3QixRQUFRLEdBQUcsS0FBSzdELFFBQUwsQ0FBY3FDLEdBQWQsQ0FBZjtBQUNBLFFBQUl3QixRQUFRLElBQUksSUFBaEIsRUFBc0I7O0FBQ3RCLFFBQUkxQixFQUFFLElBQUksSUFBTixJQUFjQSxFQUFFLENBQUNJLE1BQUgsSUFBYSxLQUEvQixFQUFzQztBQUNsQyxVQUFJc0IsUUFBUSxDQUFDcUIsZ0JBQWIsRUFBK0I7QUFDM0JyQixRQUFBQSxRQUFRLENBQUNxQixnQkFBVCxDQUEwQixLQUExQjtBQUNIO0FBQ0osS0FKRCxNQUlPO0FBQ0gsVUFBSXJCLFFBQVEsQ0FBQ3FCLGdCQUFiLEVBQStCO0FBQzNCckIsUUFBQUEsUUFBUSxDQUFDcUIsZ0JBQVQsQ0FBMEIsSUFBMUI7QUFDSDtBQUNKLEtBWmEsQ0FhZDs7O0FBQ0EsUUFBSTNDLE1BQU0sR0FBRyxLQUFLM0MsS0FBTCxDQUFXdUYscUJBQVgsQ0FBaUM5QyxHQUFqQyxDQUFiO0FBQ0EsU0FBS0csbUJBQUwsQ0FBeUJILEdBQXpCLEVBQThCRSxNQUE5QjtBQUNILEdBN0s0QjtBQStLN0I2QyxFQUFBQSxpQkFBaUIsRUFBQywyQkFBUy9DLEdBQVQsRUFBYTtBQUMzQixXQUFPQSxHQUFHLElBQUkzRCxXQUFXLENBQUMyRyxvQkFBWixDQUFpQ0MsZUFBeEMsSUFBMkRqRCxHQUFHLElBQUkzRCxXQUFXLENBQUMyRyxvQkFBWixDQUFpQ0UsZ0JBQTFHO0FBQ0gsR0FqTDRCO0FBbUw3Qi9DLEVBQUFBLG1CQUFtQixFQUFDLDZCQUFTSCxHQUFULEVBQWFFLE1BQWIsRUFBb0I7QUFDcEMsUUFBRyxLQUFLaUQsa0JBQUwsSUFBMkIsS0FBS0Esa0JBQUwsSUFBMkJqRCxNQUF6RCxFQUFrRTtBQUVsRSxTQUFLaUQsa0JBQUwsR0FBMEJqRCxNQUExQjs7QUFDQSxRQUFHLEtBQUs2QyxpQkFBTCxDQUF1Qi9DLEdBQXZCLENBQUgsRUFBK0I7QUFDM0IsVUFBSXdCLFFBQVEsR0FBRyxLQUFLN0QsUUFBTCxDQUFjcUMsR0FBZCxDQUFmO0FBQ0EsVUFBR3dCLFFBQVEsSUFBSSxJQUFmLEVBQW9COztBQUNwQixVQUFHLENBQUN0QixNQUFKLEVBQVc7QUFDUCxZQUFHc0IsUUFBUSxDQUFDcUIsZ0JBQVosRUFBNkI7QUFDekJyQixVQUFBQSxRQUFRLENBQUNxQixnQkFBVCxDQUEwQixLQUExQjtBQUNIO0FBQ0osT0FKRCxNQUlLO0FBQ0QsWUFBR3JCLFFBQVEsQ0FBQ3FCLGdCQUFaLEVBQTZCO0FBQ3pCckIsVUFBQUEsUUFBUSxDQUFDcUIsZ0JBQVQsQ0FBMEIsSUFBMUI7QUFDSDtBQUNKO0FBQ0o7QUFDSixHQXBNNEI7QUFzTTdCO0FBQ0FPLEVBQUFBLGFBQWEsRUFBRSx5QkFBWTtBQUN2QixTQUFLLElBQUlDLENBQVQsSUFBYyxLQUFLMUYsUUFBbkIsRUFBNkI7QUFDekIsVUFBSSxLQUFLQSxRQUFMLENBQWMwRixDQUFkLEVBQWlCQyxRQUFyQixFQUErQjtBQUMzQixhQUFLM0YsUUFBTCxDQUFjMEYsQ0FBZCxFQUFpQkMsUUFBakI7QUFDQSxhQUFLM0YsUUFBTCxDQUFjMEYsQ0FBZCxJQUFtQixJQUFuQjtBQUNIO0FBQ0o7O0FBQ0QsU0FBSzFGLFFBQUwsR0FBZ0IsSUFBaEI7O0FBQ0EsU0FBSyxJQUFJMEYsQ0FBVCxJQUFjLEtBQUt6RixVQUFuQixFQUErQjtBQUMzQixVQUFJLEtBQUtBLFVBQUwsQ0FBZ0J5RixDQUFoQixFQUFtQkMsUUFBdkIsRUFBaUM7QUFDN0IsYUFBSzFGLFVBQUwsQ0FBZ0J5RixDQUFoQixFQUFtQkMsUUFBbkI7QUFDQSxhQUFLMUYsVUFBTCxDQUFnQnlGLENBQWhCLElBQXFCLElBQXJCO0FBQ0g7QUFDSjs7QUFDRCxTQUFLekYsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtHLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxTQUFLVixJQUFMLENBQVVxQyxtQkFBVixDQUE4QixLQUE5QjtBQUNIO0FBeE40QixDQUFULENBQXhCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg5rS75Yqo5Li755WM6Z2iXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNC0xOCAxNjoyOTo0MFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBBY3Rpb25Db25zdCA9IHJlcXVpcmUoXCJhY3Rpb25fY29uc3RcIik7XG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxudmFyIEFjdGlvbkV2ZW50ID0gcmVxdWlyZShcImFjdGlvbl9ldmVudFwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG5cbnZhciBBY3Rpb25fbWFpbldpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ3ZWxmYXJlXCIsIFwid2VsZmFyZV9tYWluX3ZpZXdcIik7XG4gICAgICAgIC8vIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy51aTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN1Yl9saXN0ID0gW107XG4gICAgICAgIHRoaXMudGFiX2xpc3QgPSB7fTtcbiAgICAgICAgdGhpcy5wYW5lbF9saXN0ID0ge31cbiAgICAgICAgdGhpcy50YWJfd2lkdGggPSA3ODtcbiAgICAgICAgdGhpcy5vZmZfc3BhY2UgPSA1MDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gdGhpcy5iYWNrZ3JvdW5kLnNjYWxlICogRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLm1haW5fcGFuZWxfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyX25kLCBcIm1haW5fcGFuZWxcIik7XG4gICAgICAgIHRoaXMuY29udGFpbmVyX25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsX25kLCBcImNvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLmNsb3NlX2J0bl9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXJfbmQsIFwiY2xvc2VfYnRuXCIpO1xuICAgICAgICB0aGlzLnRhYl9jb250YWluZXJfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyX25kLCBcInRhYl9jb250YWluZXJcIik7XG4gICAgICAgIHRoaXMudGFiX3Njcm9sbF9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMudGFiX2NvbnRhaW5lcl9uZCwgXCJ0YWJfc2Nyb2xsXCIpO1xuICAgICAgICB0aGlzLnRhYl9zY3JvbGxfc3YgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRhYl9jb250YWluZXJfbmQsIFwidGFiX3Njcm9sbFwiLCBjYy5TY3JvbGxWaWV3KTtcbiAgICAgICAgdGhpcy50YWJfc2Nyb2xsX2NvbnRlbnRfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRhYl9zY3JvbGxfbmQsIFwiY29udGVudFwiKTtcblxuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0QmlnQmcoXCJ3ZWxmYXJlL3dlbGZhcmVfYmdcIixcImpwZ1wiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gcmVzXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwid2VsZmFyZS93ZWxmYXJlX2JnXzFcIiksIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWFpbl9wYW5lbF9uZC5nZXRDaGlsZEJ5TmFtZShcInRhYl9zcHJpdGVfYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuX25kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMilcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuQWN0aW9uTWFpblBhbmVsKGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEFjdGlvbkV2ZW50LlVQREFURV9IT0xJREFZX1RBQl9TVEFUVVMsIGZ1bmN0aW9uIChmdW5jdGlvbl9pZCwgdm8pIHtcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9pZCAhPSB0aGlzLmZ1bmN0aW9uX2lkKSByZXR1cm5cbiAgICAgICAgICAgIHRoaXMuc2V0VGFiU3RhdHVzKHZvLmJpZClcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEFjdGlvbkV2ZW50LlNIT1dfQUNUSVZJVFlfUkVEX1BPSU5ULCBmdW5jdGlvbiAoYmlkLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BlY2lhbFRhYlN0YXR1cyhiaWQsIHN0YXR1cylcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB0aGlzLmZ1bmN0aW9uX2lkID0gcGFyYW1zLmZ1bmN0aW9uX2lkIHx8IE1haW51aUNvbnN0Lmljb24uYWN0aW9uO1xuICAgICAgICB0aGlzLnN1Yl9saXN0ID0gdGhpcy5jdHJsLmdldEFjdGlvblN1Ykxpc3QodGhpcy5mdW5jdGlvbl9pZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uX2JpZCA9IHBhcmFtcy5hY3Rpb25fYmlkO1xuICAgICAgICB0aGlzLmNyZWF0ZVN1YlR5cGUoKTtcbiAgICB9LFxuICAgIGNyZWF0ZVN1YlR5cGUoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAodGhpcy5zdWJfbGlzdCA9PSBudWxsIHx8IFV0aWxzLm5leHQodGhpcy5zdWJfbGlzdCkgPT0gbnVsbCkge1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc3VtID0gc2VsZi5zdWJfbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgbWF4X3dpZHRoID0gc3VtICogKHRoaXMudGFiX3dpZHRoICsgdGhpcy5vZmZfc3BhY2UpICsgMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXhfd2lkdGggPSBNYXRoLm1heCh0aGlzLnRhYl9zY3JvbGxfbmQud2lkdGgsIG1heF93aWR0aCk7XG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGxfY29udGVudF9uZC53aWR0aCA9IHRoaXMubWF4X3dpZHRoXG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGxfc3Yuc2Nyb2xsVG9MZWZ0KDApO1xuICAgICAgICAgICAgdmFyIGNhbGxfYmFjayA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RlZFRhYihpdGVtKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgICBsZXQgaW5kZXhfc2VsZWN0ZWQgPSAwO1xuICAgICAgICAgICAgbGV0IHRhYl9pdGVtID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBfeCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1bTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuc3ViX2xpc3RbaV07XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhLmJpZCAhPSBudWxsICYmIHRoaXMudGFiX2xpc3RbZGF0YS5iaWRdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFdlbGZhcmVUYWIgPSByZXF1aXJlKFwid2VsZmFyZV90YWJfcGFuZWxcIik7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtID0gbmV3IFdlbGZhcmVUYWIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGFiX2l0ZW0uc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICB0YWJfaXRlbS5zZXREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBfeCA9IChpKSAqICh0aGlzLnRhYl93aWR0aCArIHRoaXMub2ZmX3NwYWNlKSArIDExMDtcbiAgICAgICAgICAgICAgICAgICAgdGFiX2l0ZW0uc2V0UG9zaXRpb24oX3gsIC02OCk7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtLnNldENsaWNrQ2FsbEJhY2soY2FsbF9iYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGFiX2l0ZW0uc2V0UGFyZW50KHRoaXMudGFiX3Njcm9sbF9jb250ZW50X25kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJfbGlzdFtkYXRhLmJpZF0gPSB0YWJfaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgLy/orr7nva7nuqLngrnnirbmgIFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJTdGF0dXMoZGF0YS5iaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5omL5Yqo6K6+572u6YCJ5Lit56ys5LiA5LiqXG4gICAgICAgICAgICBpZih0aGlzLmFjdGlvbl9iaWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0ZWRUYWIodGhpcy50YWJfbGlzdFt0aGlzLmFjdGlvbl9iaWRdKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0ZWRUYWIodGhpcy50YWJfbGlzdFt0aGlzLnN1Yl9saXN0WzBdLmJpZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTZWxlY3RlZFRhYjogZnVuY3Rpb24gKHRhYikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF90YWIgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkX3RhYiA9PSB0YWIpIHJldHVyblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF90YWIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRfdGFiID0gdGFiO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF90YWIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIuc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VQYW5lbEJ5VGFiKCk7XG4gICAgfSxcbiAgICBjaGFuZ2VQYW5lbEJ5VGFiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkX3RhYiA9PSBudWxsIHx8IHRoaXMuc2VsZWN0ZWRfdGFiLmRhdGEgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5zZWxlY3RlZF90YWIuZGF0YTtcbiAgICAgICAgaWYgKGRhdGEuYmlkID09IG51bGwgfHwgZGF0YS5iaWQgPT0gMCkgcmV0dXJuXG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRfcGFuZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cyhmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRfcGFuZWwuc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRfcGFuZWwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFuZWxfbGlzdFtkYXRhLmJpZF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHBhbmVsX3R5cGUgPSBkYXRhLnBhbmVsX3R5cGVcbiAgICAgICAgICAgIGlmIChkYXRhLnBhbmVsX3R5cGUgPT0gMTggfHwgZGF0YS5wYW5lbF90eXBlID09IDEyIHx8IGRhdGEucGFuZWxfdHlwZSA9PSAyMSB8fCBkYXRhLnBhbmVsX3R5cGUgPT0gMjMgfHwgZGF0YS5wYW5lbF90eXBlID09IDIyKSB7XG4gICAgICAgICAgICAgICAgcGFuZWxfdHlwZSA9IDE2XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmlld19zdHIgPSBBY3Rpb25Db25zdC5BY3Rpb25QYW5lbFR5cGVWaWV3W3BhbmVsX3R5cGVdO1xuICAgICAgICAgICAgaWYgKHZpZXdfc3RyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFuZWxfbGlzdFtkYXRhLmJpZF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3RbZGF0YS5iaWRdID0gVXRpbHMuY3JlYXRlQ2xhc3Modmlld19zdHIsZGF0YS5iaWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3RbZGF0YS5iaWRdLnNob3coe2JpZDpkYXRhLmJpZCxmdW5jdGlvbl9pZDp0aGlzLmZ1bmN0aW9uX2lkfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxfbGlzdFtkYXRhLmJpZF0uc2V0UGFyZW50KHRoaXMuY29udGFpbmVyX25kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkX3BhbmVsID0gdGhpcy5wYW5lbF9saXN0W2RhdGEuYmlkXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF9wYW5lbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkX3BhbmVsLnNldFZpc2libGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0VGFiU3RhdHVzKGJpZCkge1xuICAgICAgICBsZXQgdm8gPSB0aGlzLmN0cmwuZ2V0SG9saWRheUF3ZXJhZHNTdGF0dXMoIGJpZClcbiAgICAgICAgbGV0IHRhYl9pdGVtID0gdGhpcy50YWJfbGlzdFtiaWRdXG4gICAgICAgIGlmICh0YWJfaXRlbSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlmICh2byA9PSBudWxsIHx8IHZvLnN0YXR1cyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICB0YWJfaXRlbS51cGRhdGVUaXBzU3RhdHVzKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICB0YWJfaXRlbS51cGRhdGVUaXBzU3RhdHVzKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/nibnmrormtLvliqjnuqLngrlcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMubW9kZWwuZ2V0R2lmdFJlZFN0YXR1c0J5QmlkKGJpZCk7XG4gICAgICAgIHRoaXMuc2V0U3BlY2lhbFRhYlN0YXR1cyhiaWQsIHN0YXR1cylcbiAgICB9LFxuXG4gICAgaXNTcGVjaWFsVGFiQnlCaWQ6ZnVuY3Rpb24oYmlkKXtcbiAgICAgICAgcmV0dXJuIGJpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5oaWdoX3ZhbHVlX2dpZnQgfHwgYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLm15c3RlcmlvdXNfc3RvcmVcbiAgICB9LFxuXG4gICAgc2V0U3BlY2lhbFRhYlN0YXR1czpmdW5jdGlvbihiaWQsc3RhdHVzKXtcbiAgICAgICAgaWYodGhpcy5zcGVjYWlsX3RhYl9zdGF0dXMgJiYgdGhpcy5zcGVjYWlsX3RhYl9zdGF0dXMgPT0gc3RhdHVzKSAgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5zcGVjYWlsX3RhYl9zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIGlmKHRoaXMuaXNTcGVjaWFsVGFiQnlCaWQoYmlkKSl7XG4gICAgICAgICAgICB2YXIgdGFiX2l0ZW0gPSB0aGlzLnRhYl9saXN0W2JpZF07XG4gICAgICAgICAgICBpZih0YWJfaXRlbSA9PSBudWxsKXJldHVyblxuICAgICAgICAgICAgaWYoIXN0YXR1cyl7XG4gICAgICAgICAgICAgICAgaWYodGFiX2l0ZW0udXBkYXRlVGlwc1N0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXMoZmFsc2UpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYodGFiX2l0ZW0udXBkYXRlVGlwc1N0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXModHJ1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnRhYl9saXN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJfbGlzdFtrXS5kZWxldGVNZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2xpc3Rba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9saXN0W2tdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYl9saXN0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnBhbmVsX2xpc3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVsX2xpc3Rba10uZGVsZXRlTWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3Rba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3Rba10gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYW5lbF9saXN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIgPSBudWxsO1xuICAgICAgICB0aGlzLmN0cmwub3BlbkFjdGlvbk1haW5QYW5lbChmYWxzZSk7XG4gICAgfSxcbn0pIl19