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
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/welfare/view/sureveyquest_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, '68669Ad5XpC4Lw+4ffTXOFr', 'sureveyquest_window');
// Scripts/mod/welfare/view/sureveyquest_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-08-12 15:43:29
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var WelfareEvent = require("welfare_event");
 
var WelfareConst = require("welfare_const");
 
var SureveyquestWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("welfare", "surveyquest_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Big; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = arguments[0];
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.topic_length = 10; //题目数
 
    this.index_count = -1; //做题数量
 
    this.answer_ret_temp = null;
    this.topic_layout = {}; //点击区域
 
    this.answer_list = []; //答案
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.root_wnd.getChildByName("background");
    this.main_container = this.root_wnd.getChildByName("main_container");
    this.btn_start = this.main_container.getChildByName("btn_start");
    this.btn_start.label = this.btn_start.getChildByName("Text_9").getComponent(cc.Label);
    this.btn_close = this.main_container.getChildByName("btn_close");
    this.answer_content = this.main_container.getChildByName("answer_content");
    this.answer_content.active = false;
    this.titleTopic = this.main_container.getChildByName("titleTopic").getComponent(cc.Label);
    this.topic_layout_nd = this.answer_content.getChildByName("topic_layout");
    this.scroll = this.answer_content.getChildByName("answer_scroll");
    this.content = this.answer_content.getChildByName("answer_scroll").getChildByName("content");
    this.main_container.getChildByName("Text_10").getComponent(cc.Label).string = Utils.TI18N("小助手的冒险调查"); // --调查开始的框
 
    this.text_prompt = this.main_container.getChildByName("text_prompt");
    this.start_title = this.text_prompt.getChildByName("Text_8").getComponent(cc.Label);
    this.start_title.string = "";
    this.start_memo = this.text_prompt.getChildByName("Text_8_0").getComponent(cc.Label);
    this.start_memo.string = ""; // --填空框
 
    this.suggest_panel = this.main_container.getChildByName("suggest_panel");
    this.text_field_eb = this.suggest_panel.getChildByName("text_Field").getComponent(cc.EditBox);
    this.suggest_panel.active = false; // --奖励框
 
    this.reward_panel = this.main_container.getChildByName("reward_panel");
    this.reward_panel.active = false;
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.btn_start.on('click', function () {
      Utils.playButtonSound(1);
      var open_data = this.ctrl.getModel().getQuestOpenData();
 
      if (open_data && open_data.flag != 0) {
        this.ctrl.sender24604();
        return;
      }
 
      if (this.index_count > this.topic_length) return;
 
      if (this.questNaire_list) {
        var last_data = this.questNaire_list[this.index_count]; //有题目
 
        var tab = {};
        tab.id = last_data.id;
        tab.topic_type = last_data.topic_type;
 
        if (last_data.specific_type != WelfareConst.QuestConst.fill_blank) {
          var status_return = false;
 
          for (var i in this.topic_layout) {
            if (this.topic_layout[i].active && this.topic_layout[i].getChildByName("checkmark").active) {
              status_return = true;
              break;
            }
          }
 
          if (!status_return && last_data.must == 1) {
            message(Utils.TI18N("必须选择一个答案"));
            return;
          } // [{id:"题目ID",topic_type:"类型",ret:"ret"},{id:"题目ID",topic_type:"类型",ret:"ret"},{id:"题目ID",topic_type:"类型",ret:"ret"}]
 
 
          var str = "";
 
          for (var _i in this.topic_layout) {
            if (this.topic_layout[_i].active && this.topic_layout[_i].getChildByName("checkmark").active) {
              str += _i;
            }
          }
 
          tab.ret = str;
        } else {
          //意见
          if (last_data.must == 1 && this.text_field_eb.string == "") {
            message(Utils.TI18N("当前题必填"));
            return;
          }
 
          tab.ret = this.text_field_eb.string;
        }
 
        this.answer_list.push(tab);
      }
 
      this.index_count = this.index_count + 1;
 
      if (this.index_count == 0) {
        this.ctrl.sender24602();
      }
 
      if (this.questNaire_list) {
        if (this.index_count == this.questNaire_list.length) {
          this.ctrl.sender24603(this.answer_list);
        } else {
          this.startTopicAnswer(this.questNaire_list);
        }
      }
    }, this);
    this.btn_close.on('click', function () {
      Utils.playButtonSound(2);
      this.ctrl.openSureveyQuestView(false);
    }, this);
    this.addGlobalEvent(WelfareEvent.Get_SureveyQuest_Basic, function (data) {
      if (!data || Utils.next(data) == null) return;
      var open = this.ctrl.getModel().getQuestOpenData();
 
      if (open && open.status == 0) {
        return;
      }
 
      this.answer_reward_list = data.rewards;
      var open_data = this.ctrl.getModel().getQuestOpenData();
 
      if (open_data) {
        if (open_data.flag == 0) {
          this.start_title.string = Utils.TI18N("亲爱的冒险者大人:");
          this.start_memo.string = Utils.TI18N("辛苦您参加小助手的冒险调查,小助手为大人\n\n准备了小小谢礼,放在了问卷的最后哦~");
        } else {
          this.getRewardList(open_data.flag);
        }
      }
    }.bind(this));
    this.addGlobalEvent(WelfareEvent.Get_SureveyQuest_Topic_Content, function (data) {
      if (!data || Utils.next(data) == null) return;
      var open = this.ctrl.getModel().getQuestOpenData();
 
      if (open && open.status == 0) {
        return;
      }
 
      this.topic_length = data.questionnaire_list.length;
      data.questionnaire_list.sort(function (a, b) {
        return a.sort - b.sort;
      });
      this.questNaire_list = data.questionnaire_list;
      this.startTopicAnswer(this.questNaire_list);
    }.bind(this));
    this.addGlobalEvent(WelfareEvent.SureveyQuest_Submit, function () {
      this.answer_content.active = false;
      this.suggest_panel.active = false;
      this.titleTopic.node.active = false;
      this.getRewardList();
    }, this);
    this.addGlobalEvent(WelfareEvent.Get_SureveyQuest_Get_Reward, function (data) {
      if (!data || Utils.next(data) == null) return;
      var open = this.ctrl.getModel().getQuestOpenData();
 
      if (open && open.status == 0) {
        return;
      }
 
      this.btn_start.label.string = Utils.TI18N("已完成");
      this.btn_start.label.node.getComponent(cc.LabelOutline).enabled = false;
      this.btn_start.getComponent(cc.Button).interactable = false;
      this.btn_start.getComponent(cc.Button).enableAutoGrayEffect = true;
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    var open_data = this.ctrl.getModel().getQuestOpenData();
 
    if (open_data.flag == 1) {
      this.ctrl.setWelfareStatus(WelfareConst.WelfareIcon.quest, true);
    } else {
      this.ctrl.setWelfareStatus(WelfareConst.WelfareIcon.quest, false);
    }
 
    this.ctrl.sender24601();
  },
  //题目
  startTopicAnswer: function startTopicAnswer(data) {
    var _this = this;
 
    this.scroll.getComponent(cc.ScrollView).scrollToTop(0);
    this.text_prompt.active = false;
    if (!data || Utils.next(data) == null) return;
 
    if (!data[this.index_count]) {
      return;
    }
 
    var answer = data[this.index_count].specific_type;
 
    if (answer == WelfareConst.QuestConst.single) {
      this.selectNum = WelfareConst.QuestConst.single;
    } else if (answer == WelfareConst.QuestConst.multiple) {
      this.selectNum = WelfareConst.QuestConst.multiple;
    }
 
    this.titleTopic.string = data[this.index_count].title;
 
    if (answer == WelfareConst.QuestConst.fill_blank) {
      this.answer_content.active = false;
      this.suggest_panel.active = true;
      this.text_field_eb.string = "";
      return;
    } else {
      this.answer_content.active = true;
      this.suggest_panel.active = false;
    }
 
    var str = data[this.index_count].option.replace(/\\r/g, "");
    var strArr = [];
 
    for (var i = 0; i < str.length; ++i) {
      if (str[i] == '"') {
        strArr.push(i);
      }
    }
 
    var topic = {};
 
    for (var _i2 = 0; _i2 < strArr.length / 4; ++_i2) {
      var index = _i2 * 4;
      var p = /[a-z]/i;
      var string = str.slice(strArr[index] + 1, strArr[index + 1]);
      var string1 = str.slice(strArr[index + 2] + 1, strArr[index + 3]);
      var b = p.test(string);
 
      if (b) {
        topic[string] = string1;
      }
    }
 
    for (var _i3 in this.topic_layout) {
      if (this.topic_layout[_i3]) {
        this.topic_layout[_i3].active = false;
        this.topic_layout[_i3].getChildByName("checkmark").active = false;
      }
    }
 
    var spacingY = 30;
    var count = 0;
    var itemHeight = 40;
    var height = 5;
 
    var _loop = function _loop(_i4) {
      var node = _this.topic_layout[_i4];
 
      if (node == null) {
        node = cc.instantiate(_this.topic_layout_nd);
 
        _this.content.addChild(node);
 
        node.background_sp = node.getChildByName("Background").getComponent(cc.Sprite);
        node.label = node.getChildByName("Background").getChildByName("label").getComponent("cc.Label");
        node.getChildByName("checkmark").active = false;
        _this.topic_layout[_i4] = node;
        node.on('touchend', function (event) {
          this.setButtonState(_i4);
        }, _this);
      }
 
      node.active = true;
      count++;
      var path = void 0;
 
      if (answer == WelfareConst.QuestConst.single) {
        path = PathTool.getUIIconPath("common", "common_1030");
      } else {
        path = PathTool.getUIIconPath("common", "common_1044");
      }
 
      node.label.string = topic[_i4];
 
      node.label._updateRenderData(true);
 
      40 + 30 * (2 - 1);
      var y = height;
 
      if (node.label.node.height > itemHeight) {
        height = y + node.label.node.height + spacingY;
      } else {
        height = y + itemHeight + spacingY;
      }
 
      node.setPosition(-243, -y);
 
      _this.loadRes(path, function (res) {
        node.background_sp.spriteFrame = res;
      }.bind(_this));
    };
 
    for (var _i4 in topic) {
      _loop(_i4);
    }
 
    this.content.height = height - spacingY;
 
    if (this.index_count != this.topic_length) {
      this.btn_start.label.string = Utils.TI18N("下一页");
    }
  },
  setButtonState: function setButtonState(index) {
    if (this.selectNum == WelfareConst.QuestConst.single) {
      for (var i in this.topic_layout) {
        if (this.topic_layout[i].active) {
          this.topic_layout[i].getChildByName("checkmark").active = false;
        }
      }
 
      this.topic_layout[index].getChildByName("checkmark").active = true;
    } else if (this.selectNum == WelfareConst.QuestConst.multiple) {
      this.topic_layout[index].getChildByName("checkmark").active = !this.topic_layout[index].getChildByName("checkmark").active;
      var count = 0;
 
      for (var _i5 in this.topic_layout) {
        if (this.topic_layout[_i5].active && this.topic_layout[_i5].getChildByName("checkmark").active) {
          count++;
        }
      }
 
      if (count > this.selectNum) {
        if (count == this.selectNum + 1) {
          this.topic_layout[index].getChildByName("checkmark").active = false;
        }
 
        message(Utils.TI18N("最多选择三个选项"));
      }
    }
  },
  getRewardList: function getRewardList(flag) {
    flag = flag || 1;
    this.reward_panel.active = true;
    this.end_memo = this.reward_panel.getChildByName("Text_1").getComponent(cc.Label);
    this.end_memo.string = Utils.TI18N("亲爱的冒险者大人~\n\n请收下小助手的一点心意");
 
    if (flag == 2) {
      this.btn_start.label.string = Utils.TI18N("已完成");
      this.btn_start.label.node.getComponent(cc.LabelOutline).enabled = false;
      this.btn_start.getComponent(cc.Button).interactable = false;
      this.btn_start.getComponent(cc.Button).enableAutoGrayEffect = true;
    } else {
      this.btn_start.label.string = Utils.TI18N("领取奖励");
    }
 
    if (this.answer_reward_list) {
      var content = this.reward_panel.getChildByName("good_cons").getChildByName("content");
      var space_x = 10;
      this.award_item = [];
 
      for (var i = 0; i < this.answer_reward_list.length; ++i) {
        var bid = this.answer_reward_list[i].bid;
        var num = this.answer_reward_list[i].num;
        var item = ItemsPool.getInstance().getItem("backpack_item");
        item.setParent(content);
        var x = 60 + i * 120 + i * space_x;
        item.setPosition(x, 60);
        item.show();
        item.setData({
          bid: bid,
          num: num
        });
        this.award_item.push(item);
      }
 
      content.width = this.answer_reward_list.length * 120 + (this.answer_reward_list.length - 1) * space_x;
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.award_item) {
      for (var i = 0; i < this.award_item.length; ++i) {
        if (this.award_item[i]) {
          this.award_item[i].deleteMe();
          this.award_item[i] = null;
        }
      }
 
      this.award_item = null;
    }
 
    this.ctrl.openSureveyQuestView(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx2aWV3XFxzdXJldmV5cXVlc3Rfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIldlbGZhcmVFdmVudCIsIldlbGZhcmVDb25zdCIsIlN1cmV2ZXlxdWVzdFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkJpZyIsImN0cmwiLCJhcmd1bWVudHMiLCJpbml0Q29uZmlnIiwidG9waWNfbGVuZ3RoIiwiaW5kZXhfY291bnQiLCJhbnN3ZXJfcmV0X3RlbXAiLCJ0b3BpY19sYXlvdXQiLCJhbnN3ZXJfbGlzdCIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJidG5fc3RhcnQiLCJsYWJlbCIsImdldENvbXBvbmVudCIsIkxhYmVsIiwiYnRuX2Nsb3NlIiwiYW5zd2VyX2NvbnRlbnQiLCJhY3RpdmUiLCJ0aXRsZVRvcGljIiwidG9waWNfbGF5b3V0X25kIiwic2Nyb2xsIiwiY29udGVudCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ0ZXh0X3Byb21wdCIsInN0YXJ0X3RpdGxlIiwic3RhcnRfbWVtbyIsInN1Z2dlc3RfcGFuZWwiLCJ0ZXh0X2ZpZWxkX2ViIiwiRWRpdEJveCIsInJld2FyZF9wYW5lbCIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsIm9wZW5fZGF0YSIsImdldE1vZGVsIiwiZ2V0UXVlc3RPcGVuRGF0YSIsImZsYWciLCJzZW5kZXIyNDYwNCIsInF1ZXN0TmFpcmVfbGlzdCIsImxhc3RfZGF0YSIsInRhYiIsImlkIiwidG9waWNfdHlwZSIsInNwZWNpZmljX3R5cGUiLCJRdWVzdENvbnN0IiwiZmlsbF9ibGFuayIsInN0YXR1c19yZXR1cm4iLCJpIiwibXVzdCIsIm1lc3NhZ2UiLCJzdHIiLCJyZXQiLCJwdXNoIiwic2VuZGVyMjQ2MDIiLCJsZW5ndGgiLCJzZW5kZXIyNDYwMyIsInN0YXJ0VG9waWNBbnN3ZXIiLCJvcGVuU3VyZXZleVF1ZXN0VmlldyIsImFkZEdsb2JhbEV2ZW50IiwiR2V0X1N1cmV2ZXlRdWVzdF9CYXNpYyIsImRhdGEiLCJuZXh0Iiwib3BlbiIsInN0YXR1cyIsImFuc3dlcl9yZXdhcmRfbGlzdCIsInJld2FyZHMiLCJnZXRSZXdhcmRMaXN0IiwiYmluZCIsIkdldF9TdXJldmV5UXVlc3RfVG9waWNfQ29udGVudCIsInF1ZXN0aW9ubmFpcmVfbGlzdCIsInNvcnQiLCJhIiwiYiIsIlN1cmV2ZXlRdWVzdF9TdWJtaXQiLCJub2RlIiwiR2V0X1N1cmV2ZXlRdWVzdF9HZXRfUmV3YXJkIiwiTGFiZWxPdXRsaW5lIiwiZW5hYmxlZCIsIkJ1dHRvbiIsImludGVyYWN0YWJsZSIsImVuYWJsZUF1dG9HcmF5RWZmZWN0Iiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJzZXRXZWxmYXJlU3RhdHVzIiwiV2VsZmFyZUljb24iLCJxdWVzdCIsInNlbmRlcjI0NjAxIiwiU2Nyb2xsVmlldyIsInNjcm9sbFRvVG9wIiwiYW5zd2VyIiwic2luZ2xlIiwic2VsZWN0TnVtIiwibXVsdGlwbGUiLCJ0aXRsZSIsIm9wdGlvbiIsInJlcGxhY2UiLCJzdHJBcnIiLCJ0b3BpYyIsImluZGV4IiwicCIsInNsaWNlIiwic3RyaW5nMSIsInRlc3QiLCJzcGFjaW5nWSIsImNvdW50IiwiaXRlbUhlaWdodCIsImhlaWdodCIsImluc3RhbnRpYXRlIiwiYWRkQ2hpbGQiLCJiYWNrZ3JvdW5kX3NwIiwiU3ByaXRlIiwiZXZlbnQiLCJzZXRCdXR0b25TdGF0ZSIsInBhdGgiLCJnZXRVSUljb25QYXRoIiwiX3VwZGF0ZVJlbmRlckRhdGEiLCJ5Iiwic2V0UG9zaXRpb24iLCJsb2FkUmVzIiwicmVzIiwic3ByaXRlRnJhbWUiLCJlbmRfbWVtbyIsInNwYWNlX3giLCJhd2FyZF9pdGVtIiwiYmlkIiwibnVtIiwiaXRlbSIsIkl0ZW1zUG9vbCIsImdldEluc3RhbmNlIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsIngiLCJzaG93Iiwic2V0RGF0YSIsIndpZHRoIiwiY2xvc2VDYWxsQmFjayIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsWUFBWSxHQUFHRCxPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFDQSxJQUFJRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUNBLElBQUlHLGtCQUFrQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUM5QixhQUFTQyxRQURxQjtBQUU5QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlQsUUFBUSxDQUFDVSxhQUFULENBQXVCLFNBQXZCLEVBQWtDLG9CQUFsQyxDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxRQUF6QixDQUZjLENBRW9DOztBQUNsRCxTQUFLQyxRQUFMLEdBQWdCQyxPQUFPLENBQUNDLEdBQXhCLENBSGMsQ0FHNkI7O0FBQzNDLFNBQUtDLElBQUwsR0FBWUMsU0FBUyxDQUFDLENBQUQsQ0FBckI7QUFDSCxHQVA2QjtBQVM5QjtBQUNBQyxFQUFBQSxVQUFVLEVBQUMsc0JBQVU7QUFDakIsU0FBS0MsWUFBTCxHQUFvQixFQUFwQixDQURpQixDQUNNOztBQUN2QixTQUFLQyxXQUFMLEdBQW1CLENBQUMsQ0FBcEIsQ0FGaUIsQ0FFSzs7QUFDdEIsU0FBS0MsZUFBTCxHQUF1QixJQUF2QjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsRUFBcEIsQ0FKaUIsQ0FJTTs7QUFDdkIsU0FBS0MsV0FBTCxHQUFtQixF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LENBQVYsRUFBWUEsQ0FBQyxHQUFDLEtBQUs0RSxVQUFMLENBQWdCckUsTUFBOUIsRUFBcUMsRUFBRVAsQ0FBdkMsRUFBeUM7QUFDckMsWUFBRyxLQUFLNEUsVUFBTCxDQUFnQjVFLENBQWhCLENBQUgsRUFBc0I7QUFDbEIsZUFBSzRFLFVBQUwsQ0FBZ0I1RSxDQUFoQixFQUFtQnlGLFFBQW5CO0FBQ0EsZUFBS2IsVUFBTCxDQUFnQjVFLENBQWhCLElBQXFCLElBQXJCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLNEUsVUFBTCxHQUFrQixJQUFsQjtBQUNIOztBQUVELFNBQUsvSCxJQUFMLENBQVU2RCxvQkFBVixDQUErQixLQUEvQjtBQUNIO0FBNVU2QixDQUFULENBQXpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wOC0xMiAxNTo0MzoyOVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBXZWxmYXJlRXZlbnQgPSByZXF1aXJlKFwid2VsZmFyZV9ldmVudFwiKVxudmFyIFdlbGZhcmVDb25zdCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnN0XCIpXG52YXIgU3VyZXZleXF1ZXN0V2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIndlbGZhcmVcIiwgXCJzdXJ2ZXlxdWVzdF93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkJpZzsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jdHJsID0gYXJndW1lbnRzWzBdXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMudG9waWNfbGVuZ3RoID0gMTAgLy/popjnm67mlbBcbiAgICAgICAgdGhpcy5pbmRleF9jb3VudCA9IC0xIC8v5YGa6aKY5pWw6YePXG4gICAgICAgIHRoaXMuYW5zd2VyX3JldF90ZW1wID0gbnVsbDtcbiAgICAgICAgdGhpcy50b3BpY19sYXlvdXQgPSB7fSAvL+eCueWHu+WMuuWfn1xuICAgICAgICB0aGlzLmFuc3dlcl9saXN0ID0gW10gLy/nrZTmoYhcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKVxuICAgIFxuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpXG4gICAgICAgIHRoaXMuYnRuX3N0YXJ0ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9zdGFydFwiKVxuICAgICAgICB0aGlzLmJ0bl9zdGFydC5sYWJlbCA9IHRoaXMuYnRuX3N0YXJ0LmdldENoaWxkQnlOYW1lKFwiVGV4dF85XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5idG5fY2xvc2UgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX2Nsb3NlXCIpXG4gICAgICAgIHRoaXMuYW5zd2VyX2NvbnRlbnQgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYW5zd2VyX2NvbnRlbnRcIilcbiAgICAgICAgdGhpcy5hbnN3ZXJfY29udGVudC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aXRsZVRvcGljID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlVG9waWNcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLnRvcGljX2xheW91dF9uZCA9IHRoaXMuYW5zd2VyX2NvbnRlbnQuZ2V0Q2hpbGRCeU5hbWUoXCJ0b3BpY19sYXlvdXRcIilcbiAgICAgICAgdGhpcy5zY3JvbGwgPSB0aGlzLmFuc3dlcl9jb250ZW50LmdldENoaWxkQnlOYW1lKFwiYW5zd2VyX3Njcm9sbFwiKVxuICAgICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmFuc3dlcl9jb250ZW50LmdldENoaWxkQnlOYW1lKFwiYW5zd2VyX3Njcm9sbFwiKS5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIilcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMTBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWwj+WKqeaJi+eahOWGkumZqeiwg+afpVwiKVxuICAgICAgICAvLyAtLeiwg+afpeW8gOWni+eahOahhlxuICAgICAgICB0aGlzLnRleHRfcHJvbXB0ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRleHRfcHJvbXB0XCIpXG4gICAgICAgIHRoaXMuc3RhcnRfdGl0bGUgPSB0aGlzLnRleHRfcHJvbXB0LmdldENoaWxkQnlOYW1lKFwiVGV4dF84XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5zdGFydF90aXRsZS5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLnN0YXJ0X21lbW8gPSB0aGlzLnRleHRfcHJvbXB0LmdldENoaWxkQnlOYW1lKFwiVGV4dF84XzBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLnN0YXJ0X21lbW8uc3RyaW5nID0gXCJcIjtcblxuICAgICAgICAvLyAtLeWhq+epuuahhlxuICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic3VnZ2VzdF9wYW5lbFwiKVxuICAgICAgICB0aGlzLnRleHRfZmllbGRfZWIgPSB0aGlzLnN1Z2dlc3RfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ0ZXh0X0ZpZWxkXCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KVxuICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gLS3lpZblirHmoYZcbiAgICAgICAgdGhpcy5yZXdhcmRfcGFuZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicmV3YXJkX3BhbmVsXCIpXG4gICAgICAgIHRoaXMucmV3YXJkX3BhbmVsLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJ0bl9zdGFydC5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGxldCBvcGVuX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgICAgIGlmKG9wZW5fZGF0YSAmJiBvcGVuX2RhdGEuZmxhZyAhPSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjQ2MDQoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5pbmRleF9jb3VudCA+IHRoaXMudG9waWNfbGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICBpZih0aGlzLnF1ZXN0TmFpcmVfbGlzdCl7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RfZGF0YSA9IHRoaXMucXVlc3ROYWlyZV9saXN0W3RoaXMuaW5kZXhfY291bnRdXG4gICAgICAgICAgICAgICAgLy/mnInpopjnm65cbiAgICAgICAgICAgICAgICBsZXQgdGFiID0ge31cbiAgICAgICAgICAgICAgICB0YWIuaWQgPSBsYXN0X2RhdGEuaWQ7XG4gICAgICAgICAgICAgICAgdGFiLnRvcGljX3R5cGUgPSBsYXN0X2RhdGEudG9waWNfdHlwZTtcbiAgICAgICAgICAgICAgICBpZihsYXN0X2RhdGEuc3BlY2lmaWNfdHlwZSAhPSAgV2VsZmFyZUNvbnN0LlF1ZXN0Q29uc3QuZmlsbF9ibGFuayl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGF0dXNfcmV0dXJuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLnRvcGljX2xheW91dCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnRvcGljX2xheW91dFtpXS5hY3RpdmUgJiYgdGhpcy50b3BpY19sYXlvdXRbaV0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcmV0dXJuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKCFzdGF0dXNfcmV0dXJuICYmIGxhc3RfZGF0YS5tdXN0ID09IDEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuW/hemhu+mAieaLqeS4gOS4quetlOahiFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFt7aWQ6XCLpopjnm65JRFwiLHRvcGljX3R5cGU6XCLnsbvlnotcIixyZXQ6XCJyZXRcIn0se2lkOlwi6aKY55uuSURcIix0b3BpY190eXBlOlwi57G75Z6LXCIscmV0OlwicmV0XCJ9LHtpZDpcIumimOebrklEXCIsdG9waWNfdHlwZTpcIuexu+Wei1wiLHJldDpcInJldFwifV1cbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHRoaXMudG9waWNfbGF5b3V0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudG9waWNfbGF5b3V0W2ldLmFjdGl2ZSAmJiB0aGlzLnRvcGljX2xheW91dFtpXS5nZXRDaGlsZEJ5TmFtZShcImNoZWNrbWFya1wiKS5hY3RpdmUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGFiLnJldCA9IHN0cjtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgLy/mhI/op4FcbiAgICAgICAgICAgICAgICAgICAgaWYobGFzdF9kYXRhLm11c3QgPT0gMSAmJiB0aGlzLnRleHRfZmllbGRfZWIuc3RyaW5nID09IFwiXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuW9k+WJjemimOW/heWhq1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRhYi5yZXQgPSB0aGlzLnRleHRfZmllbGRfZWIuc3RyaW5nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2VyX2xpc3QucHVzaCh0YWIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluZGV4X2NvdW50ID0gdGhpcy5pbmRleF9jb3VudCArIDFcbiAgICAgICAgICAgIGlmKHRoaXMuaW5kZXhfY291bnQgPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjI0NjAyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMucXVlc3ROYWlyZV9saXN0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluZGV4X2NvdW50ID09IHRoaXMucXVlc3ROYWlyZV9saXN0Lmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyNDYwMyh0aGlzLmFuc3dlcl9saXN0KVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VG9waWNBbnN3ZXIodGhpcy5xdWVzdE5haXJlX2xpc3QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYnRuX2Nsb3NlLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgyKVxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TdXJldmV5UXVlc3RWaWV3KGZhbHNlKVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoV2VsZmFyZUV2ZW50LkdldF9TdXJldmV5UXVlc3RfQmFzaWMsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBpZighZGF0YSB8fCBVdGlscy5uZXh0KGRhdGEpID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBvcGVuID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0UXVlc3RPcGVuRGF0YSgpXG4gICAgICAgICAgICBpZihvcGVuICYmIG9wZW4uc3RhdHVzID09IDApe1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3QgPSBkYXRhLnJld2FyZHNcbiAgICAgICAgICAgIGxldCBvcGVuX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgICAgIGlmKG9wZW5fZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYob3Blbl9kYXRhLmZsYWcgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRfdGl0bGUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkurLniLHnmoTlhpLpmanogIXlpKfkurrvvJpcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydF9tZW1vLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6L6b6Ium5oKo5Y+C5Yqg5bCP5Yqp5omL55qE5YaS6Zmp6LCD5p+l77yM5bCP5Yqp5omL5Li65aSn5Lq6XFxuXFxu5YeG5aSH5LqG5bCP5bCP6LCi56S877yM5pS+5Zyo5LqG6Zeu5Y2355qE5pyA5ZCO5ZOmflwiKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJld2FyZExpc3Qob3Blbl9kYXRhLmZsYWcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoV2VsZmFyZUV2ZW50LkdldF9TdXJldmV5UXVlc3RfVG9waWNfQ29udGVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIGlmKCFkYXRhIHx8IFV0aWxzLm5leHQoZGF0YSkgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IG9wZW4gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgICAgIGlmKG9wZW4gJiYgb3Blbi5zdGF0dXMgPT0gMCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvcGljX2xlbmd0aCA9IGRhdGEucXVlc3Rpb25uYWlyZV9saXN0Lmxlbmd0aFxuICAgICAgICAgICAgZGF0YS5xdWVzdGlvbm5haXJlX2xpc3Quc29ydChmdW5jdGlvbihhLGIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnNvcnQgLSBiLnNvcnQgXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5xdWVzdE5haXJlX2xpc3QgPSBkYXRhLnF1ZXN0aW9ubmFpcmVfbGlzdFxuICAgICAgICAgICAgdGhpcy5zdGFydFRvcGljQW5zd2VyKHRoaXMucXVlc3ROYWlyZV9saXN0KVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoV2VsZmFyZUV2ZW50LlN1cmV2ZXlRdWVzdF9TdWJtaXQsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyX2NvbnRlbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMudGl0bGVUb3BpYy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5nZXRSZXdhcmRMaXN0KClcbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFdlbGZhcmVFdmVudC5HZXRfU3VyZXZleVF1ZXN0X0dldF9SZXdhcmQsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBpZighZGF0YSB8fCBVdGlscy5uZXh0KGRhdGEpID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBvcGVuID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0UXVlc3RPcGVuRGF0YSgpXG4gICAgICAgICAgICBpZihvcGVuICYmIG9wZW4uc3RhdHVzID09IDApe1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQubGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LlrozmiJBcIilcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmxhYmVsLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmdldENvbXBvbmVudChjYy5CdXR0b24pLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gdHJ1ZVxuICAgICAgICB9LHRoaXMpXG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIMs5Lmf5bCx5piv5LiA5Liq56qX5L2T55qE5q2j5byP5YWl5Y+jLOWPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9wZW5Sb290V25kOmZ1bmN0aW9uKHBhcmFtcyl7XG4gICAgICAgIGxldCBvcGVuX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgaWYob3Blbl9kYXRhLmZsYWcgPT0gMSl7XG4gICAgICAgICAgICB0aGlzLmN0cmwuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ucXVlc3QsIHRydWUpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5jdHJsLnNldFdlbGZhcmVTdGF0dXMoV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLnF1ZXN0LCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjQ2MDEoKVxuICAgIH0sXG4gICAgLy/popjnm65cbiAgICBzdGFydFRvcGljQW5zd2VyKGRhdGEpe1xuICAgICAgICB0aGlzLnNjcm9sbC5nZXRDb21wb25lbnQoY2MuU2Nyb2xsVmlldykuc2Nyb2xsVG9Ub3AoMClcbiAgICAgICAgdGhpcy50ZXh0X3Byb21wdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYoIWRhdGEgfHwgVXRpbHMubmV4dChkYXRhKSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlmKCFkYXRhW3RoaXMuaW5kZXhfY291bnRdKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGxldCBhbnN3ZXIgPSBkYXRhW3RoaXMuaW5kZXhfY291bnRdLnNwZWNpZmljX3R5cGVcbiAgICAgICAgaWYoYW5zd2VyID09IFdlbGZhcmVDb25zdC5RdWVzdENvbnN0LnNpbmdsZSl7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE51bSA9IFdlbGZhcmVDb25zdC5RdWVzdENvbnN0LnNpbmdsZVxuICAgICAgICB9ZWxzZSBpZihhbnN3ZXIgPT0gV2VsZmFyZUNvbnN0LlF1ZXN0Q29uc3QubXVsdGlwbGUpe1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROdW0gPSBXZWxmYXJlQ29uc3QuUXVlc3RDb25zdC5tdWx0aXBsZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGl0bGVUb3BpYy5zdHJpbmcgPSBkYXRhW3RoaXMuaW5kZXhfY291bnRdLnRpdGxlXG4gICAgICAgIGlmKGFuc3dlciA9PSBXZWxmYXJlQ29uc3QuUXVlc3RDb25zdC5maWxsX2JsYW5rKXtcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyX2NvbnRlbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudGV4dF9maWVsZF9lYi5zdHJpbmcgPSBcIlwiXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmFuc3dlcl9jb250ZW50LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0ciA9IGRhdGFbdGhpcy5pbmRleF9jb3VudF0ub3B0aW9uLnJlcGxhY2UoL1xcXFxyL2csXCJcIilcbiAgICAgICAgbGV0IHN0ckFyciA9IFtdXG4gICAgICAgIGZvcihsZXQgaT0wO2k8c3RyLmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgaWYoc3RyW2ldID09ICdcIicpe1xuICAgICAgICAgICAgICAgIHN0ckFyci5wdXNoKGkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRvcGljID0ge31cbiAgICAgICAgZm9yKGxldCBpPTA7aTxzdHJBcnIubGVuZ3RoLzQ7KytpKXtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGkqNFxuICAgICAgICAgICAgbGV0IHAgPSAvW2Etel0vaTsgXG4gICAgICAgICAgICBsZXQgc3RyaW5nID0gc3RyLnNsaWNlKHN0ckFycltpbmRleF0rMSxzdHJBcnJbaW5kZXgrMV0pXG4gICAgICAgICAgICBsZXQgc3RyaW5nMSA9IHN0ci5zbGljZShzdHJBcnJbaW5kZXgrMl0rMSxzdHJBcnJbaW5kZXgrM10pXG4gICAgICAgICAgICBsZXQgYiA9IHAudGVzdChzdHJpbmcpO1xuICAgICAgICAgICAgaWYoYil7XG4gICAgICAgICAgICAgICAgdG9waWNbc3RyaW5nXSA9IHN0cmluZzFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy50b3BpY19sYXlvdXQpe1xuICAgICAgICAgICAgaWYodGhpcy50b3BpY19sYXlvdXRbaV0pe1xuICAgICAgICAgICAgICAgIHRoaXMudG9waWNfbGF5b3V0W2ldLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudG9waWNfbGF5b3V0W2ldLmdldENoaWxkQnlOYW1lKFwiY2hlY2ttYXJrXCIpLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzcGFjaW5nWSA9IDMwO1xuICAgICAgICBsZXQgY291bnQgPSAwXG4gICAgICAgIGxldCBpdGVtSGVpZ2h0ID0gNDBcbiAgICAgICAgbGV0IGhlaWdodCA9IDVcbiAgICAgICAgZm9yKGxldCBpIGluIHRvcGljKXtcbiAgICAgICAgICAgIGxldCBub2RlID0gdGhpcy50b3BpY19sYXlvdXRbaV1cbiAgICAgICAgICAgIGlmKG5vZGUgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgbm9kZSA9IGNjLmluc3RhbnRpYXRlKHRoaXMudG9waWNfbGF5b3V0X25kKVxuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudC5hZGRDaGlsZChub2RlKVxuICAgICAgICAgICAgICAgIG5vZGUuYmFja2dyb3VuZF9zcCA9IG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCYWNrZ3JvdW5kXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgICAgIG5vZGUubGFiZWwgPSBub2RlLmdldENoaWxkQnlOYW1lKFwiQmFja2dyb3VuZFwiKS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChcImNjLkxhYmVsXCIpO1xuICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy50b3BpY19sYXlvdXRbaV0gPSBub2RlO1xuICAgICAgICAgICAgICAgIG5vZGUub24oJ3RvdWNoZW5kJyxmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QnV0dG9uU3RhdGUoaSlcbiAgICAgICAgICAgICAgICB9LHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICBjb3VudCsrXG4gICAgICAgICAgICBsZXQgcGF0aFxuICAgICAgICAgICAgaWYoYW5zd2VyID09IFdlbGZhcmVDb25zdC5RdWVzdENvbnN0LnNpbmdsZSl7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIixcImNvbW1vbl8xMDMwXCIpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBwYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzEwNDRcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUubGFiZWwuc3RyaW5nID0gdG9waWNbaV1cbiAgICAgICAgICAgIG5vZGUubGFiZWwuX3VwZGF0ZVJlbmRlckRhdGEodHJ1ZSlcbiAgICAgICAgICAgIDQwICsgMzAgKiAoMi0xKVxuICAgICAgICAgICAgbGV0IHkgPSBoZWlnaHRcbiAgICAgICAgICAgIGlmKG5vZGUubGFiZWwubm9kZS5oZWlnaHQgPiBpdGVtSGVpZ2h0KXtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSAoeSArIG5vZGUubGFiZWwubm9kZS5oZWlnaHQpICsgc3BhY2luZ1lcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGhlaWdodCA9ICh5ICsgaXRlbUhlaWdodCkgKyBzcGFjaW5nWVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBub2RlLnNldFBvc2l0aW9uKC0yNDMsLXkpXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocGF0aCxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgICAgIG5vZGUuYmFja2dyb3VuZF9zcC5zcHJpdGVGcmFtZSA9IHJlcztcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnQuaGVpZ2h0ID0gaGVpZ2h0IC0gc3BhY2luZ1lcbiAgICAgICAgaWYodGhpcy5pbmRleF9jb3VudCAhPSB0aGlzLnRvcGljX2xlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLmJ0bl9zdGFydC5sYWJlbC5zdHJpbmcgID0gVXRpbHMuVEkxOE4oXCLkuIvkuIDpobVcIilcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0QnV0dG9uU3RhdGUoaW5kZXgpe1xuICAgICAgICBpZih0aGlzLnNlbGVjdE51bSA9PSBXZWxmYXJlQ29uc3QuUXVlc3RDb25zdC5zaW5nbGUpe1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIHRoaXMudG9waWNfbGF5b3V0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRvcGljX2xheW91dFtpXS5hY3RpdmUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcGljX2xheW91dFtpXS5nZXRDaGlsZEJ5TmFtZShcImNoZWNrbWFya1wiKS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvcGljX2xheW91dFtpbmRleF0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5zZWxlY3ROdW0gPT0gV2VsZmFyZUNvbnN0LlF1ZXN0Q29uc3QubXVsdGlwbGUpe1xuICAgICAgICAgICAgdGhpcy50b3BpY19sYXlvdXRbaW5kZXhdLmdldENoaWxkQnlOYW1lKFwiY2hlY2ttYXJrXCIpLmFjdGl2ZSA9ICF0aGlzLnRvcGljX2xheW91dFtpbmRleF0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlO1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLnRvcGljX2xheW91dCl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy50b3BpY19sYXlvdXRbaV0uYWN0aXZlICYmIHRoaXMudG9waWNfbGF5b3V0W2ldLmdldENoaWxkQnlOYW1lKFwiY2hlY2ttYXJrXCIpLmFjdGl2ZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50KytcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjb3VudCA+IHRoaXMuc2VsZWN0TnVtKXtcbiAgICAgICAgICAgICAgICBpZihjb3VudCA9PSB0aGlzLnNlbGVjdE51bSArIDEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcGljX2xheW91dFtpbmRleF0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuacgOWkmumAieaLqeS4ieS4qumAiemhuVwiKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UmV3YXJkTGlzdChmbGFnKXtcbiAgICAgICAgZmxhZyA9IGZsYWcgfHwgMVxuICAgICAgICB0aGlzLnJld2FyZF9wYW5lbC5hY3RpdmUgPSB0cnVlXG4gICAgICAgIHRoaXMuZW5kX21lbW8gPSB0aGlzLnJld2FyZF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMuZW5kX21lbW8uc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkurLniLHnmoTlhpLpmanogIXlpKfkurp+XFxuXFxu6K+35pS25LiL5bCP5Yqp5omL55qE5LiA54K55b+D5oSPXCIpO1xuICAgICAgICBpZihmbGFnID09IDIpe1xuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQubGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LlrozmiJBcIilcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmxhYmVsLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmdldENvbXBvbmVudChjYy5CdXR0b24pLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gdHJ1ZVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmxhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6aKG5Y+W5aWW5YqxXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3Qpe1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLnJld2FyZF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImdvb2RfY29uc1wiKS5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIilcbiAgICAgICAgICAgIGxldCBzcGFjZV94ID0gMTBcbiAgICAgICAgICAgIHRoaXMuYXdhcmRfaXRlbSA9IFtdXG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuYW5zd2VyX3Jld2FyZF9saXN0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCBiaWQgPSB0aGlzLmFuc3dlcl9yZXdhcmRfbGlzdFtpXS5iaWRcbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gdGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3RbaV0ubnVtXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIilcbiAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudChjb250ZW50KTtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IDYwICsgaSoxMjAgKyBpICogc3BhY2VfeFxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oeCwgNjApXG4gICAgICAgICAgICAgICAgaXRlbS5zaG93KClcbiAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoe2JpZDpiaWQsbnVtOm51bX0pXG4gICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRlbnQud2lkdGggPSB0aGlzLmFuc3dlcl9yZXdhcmRfbGlzdC5sZW5ndGggKiAxMjAgKyAodGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3QubGVuZ3RoLTEpICogc3BhY2VfeFxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLmF3YXJkX2l0ZW0pe1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLmF3YXJkX2l0ZW0ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hd2FyZF9pdGVtW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtW2ldLmRlbGV0ZU1lKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtW2ldID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXdhcmRfaXRlbSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN0cmwub3BlblN1cmV2ZXlRdWVzdFZpZXcoZmFsc2UpXG4gICAgfSxcbn0pIl19