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
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/backpack/backpack_controller.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, '454feBZaSJINIbY0IysJHCJ', 'backpack_controller');
// Scripts/mod/backpack/backpack_controller.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//      背包内出售物品的面板
// <br/>Create: 2018-12-24 16:50:14
// --------------------------------------------------------------------
var BackPackConst = require("backpack_const");
 
var MainuiController = require("mainui_controller");
 
var MainuiConst = require("mainui_const");
 
var BackpackEvent = require("backpack_event");
 
var JumpController = require("jump_controller");
 
var TipsController = require("tips_controller");
 
var GuideController = require("guide_controller");
 
var BackpackController = cc.Class({
  "extends": BaseController,
  ctor: function ctor() {},
  // 初始化配置数据
  initConfig: function initConfig() {
    var BackpackModel = require("backpack_model");
 
    this.model = new BackpackModel();
    this.model.initConfig();
  },
  // 返回当前的model
  getModel: function getModel() {
    return this.model;
  },
  // 注册监听事件
  registerEvents: function registerEvents() {
    if (this.login_event_success == null) {
      this.login_event_success = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
        this.requestInitProto();
      }.bind(this));
    }
 
    if (this.re_link_game == null) {
      this.re_link_game = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {
        var GuideController = require("guide_controller");
 
        if (!GuideController.getInstance().isInGuide()) this.openMainWindow(false); // 断线重连先关掉背包窗体
        // this.requestInitProto()
      }.bind(this));
    }
  },
  // 注册协议接受事件
  registerProtocals: function registerProtocals() {
    this.RegisterProtocal(10500, this.on10500);
    this.RegisterProtocal(10501, this.on10501);
    this.RegisterProtocal(10510, this.on10510); //增加物品通知
 
    this.RegisterProtocal(10511, this.on10511); //删除物品通知
 
    this.RegisterProtocal(10512, this.on10512); //刷新物品通知
 
    this.RegisterProtocal(10515, this.handle10515); //使用物品
 
    this.RegisterProtocal(10522, this.handle10522); //出售背包物品
 
    this.RegisterProtocal(10523, this.handle10523);
    this.RegisterProtocal(11008, this.handle11008);
  },
  // 请求角色道具初始数据
  requestInitProto: function requestInitProto() {// this.sender10500()
    // this.sender10501()
  },
  sender10500: function sender10500() {
    this.SendProtocal(10500, {});
  },
  sender10501: function sender10501() {
    this.SendProtocal(10501, {});
  },
  // 初始化道具背包
  on10500: function on10500(data) {
    data.bag_code = BackPackConst.Bag_Code.BACKPACK;
    this.model.initItemList(data);
  },
  // 初始化装备被曝
  on10501: function on10501(data) {
    data.bag_code = BackPackConst.Bag_Code.EQUIPS;
    this.model.initItemList(data);
  },
  // 增加一个物品
  on10510: function on10510(data) {
    cc.log("增加一个物品", data);
    this.model.updateBagItemsNum(data);
  },
  // 删除一个物品
  on10511: function on10511(data) {
    cc.log("删除一个物品", data);
    this.model.deleteBagItems(data);
  },
  // 刷新一个物品
  on10512: function on10512(data) {
    this.model.updateBagItemsNum(data, true);
  },
  // ==============================
  // desc:出售物品
  // @storage:
  // @args:
  // @return 
  // ==============================
  sender10522: function sender10522(storage, args) {
    var protocal = {};
    protocal.storage = storage;
    protocal.args = args;
    this.SendProtocal(10522, protocal);
  },
  handle10522: function handle10522(data) {
    message(data.msg);
 
    if (this.batch_use) {
      this.openBatchUseItemView(false);
    }
 
    if (this.sell_window) {
      //出售成功之后关闭出售面板
      this.openSellWindow(false);
    }
 
    this.closeGiftSelectPanel();
    gcore.GlobalEvent.fire(BackpackEvent.Sell_Goods_Success);
  },
  // ==============================
  // desc:使用物品
  // @id:
  // @quantity:
  // @args:
  // @return 
  // ==============================
  sender10515: function sender10515(id, quantity, args) {
    var protocal = {};
    protocal.id = id;
    protocal.quantity = quantity;
    protocal.args = args || {};
    this.SendProtocal(10515, protocal);
  },
  handle10515: function handle10515(data) {
    message(data.msg);
 
    if (data.flag == 1) {
      this.openBatchUseItemView(false);
      this.closeGiftSelectPanel();
    }
  },
  sender10523: function sender10523(id, num) {
    var protocal = {};
    protocal.id = id;
    protocal.num = num;
    this.SendProtocal(10523, protocal);
  },
  handle10523: function handle10523(data) {
    message(data.msg);
 
    if (data.flag == 1) {
      gcore.GlobalEvent.fire(BackpackEvent.Compose_Goods_Success);
      TipsController.getInstance().showBackPackCompTips(false);
    }
  },
  //背包碎片合成
  sender11008: function sender11008(bid, num) {
    var proto = {};
    proto.bid = bid;
    proto.num = num;
    this.SendProtocal(11008, proto);
  },
  handle11008: function handle11008(data) {
    gcore.GlobalEvent.fire(BackpackEvent.Compose_BackPack_Success);
    message(data.msg);
    TipsController.getInstance().showBackPackCompTips(false);
    TipsController.getInstance().showCompChooseTips(false);
 
    if (data.result == 1) {
      var items = [];
 
      for (var i in data.partners) {
        var v = data.partners[i];
        var info = Config.partner_data.data_partner_base[v.partner_bid];
        items[parseInt(i)] = {};
        items[parseInt(i)].bid = v.partner_bid;
        items[parseInt(i)].star = info.init_star;
        items[parseInt(i)].camp_type = info.camp_type;
        items[parseInt(i)].show_type = MainuiConst.item_exhibition_type.partner_type;
      }
 
      MainuiController.getInstance().openGetItemView(true, items, 0);
    }
  },
 
  /**
   * 打开背包主入口
   * @param {*} status 
   * @param {*} params 
   */
  openMainWindow: function openMainWindow(status, params) {
    if (!status) {
      if (this.backpack_win) {
        this.backpack_win.close();
        this.backpack_win = null;
      }
    } else {
      if (this.backpack_win == null) {
        this.backpack_win = Utils.createClass("backpack_window");
      }
 
      this.backpack_win.open(params);
    }
  },
 
  /**
   * 显示道具提示信息
   * @author zhanghuxing 2019-01-21
   * @param  {[type]} status      [description]
   * @param  {[type]} data        可以是bid, 或者配置表条目
   * @param  {[type]} extend_data [description]
   * @param  {[type]} item_list   需要的物品列表
   * @return {[type]}             [description]
   */
  openTipsSource: function openTipsSource(status, data, extend_data, item_list) {
    if (status) {
      if (GuideController.getInstance().isInGuide()) return;
 
      if (typeof data == "number") {
        data = Utils.getItemConfig(data);
      }
 
      if (data == null) return;
 
      if (!this.tips_source) {
        var TipsSource = require("tips_source_window");
 
        this.tips_source = new TipsSource(this);
      } // if (typeof data == "number") {
      //     data = Utils.getItemConfig(data);
      // }
 
 
      var open_params = {};
      open_params.data = data;
      open_params.extend_data = extend_data;
      open_params.item_list = item_list;
      this.tips_source.open(open_params);
    } else {
      if (this.tips_source) {
        this.tips_source.close();
        this.tips_source = null;
      }
    }
  },
 
  /**
   * desc:出售物品  
   */
  openItemSellPanel: function openItemSellPanel(status, goods_vo, bag_code) {
    if (status == false) {
      if (this.item_sell_panel != null) {
        this.item_sell_panel.close();
        this.item_sell_panel = null;
      }
    } else {
      var bag_code = bag_code || BackPackConst.Bag_Code.BACKPACK;
 
      if (this.item_sell_panel == null) {
        this.item_sell_panel = Utils.createClass("item_sell_panel_window", this);
      }
 
      if (this.item_sell_panel.isOpen() == false) {
        this.item_sell_panel.open([goods_vo, bag_code]);
      }
    }
  },
  // --==============================--
  // --desc:打开批量使用物品窗口
  // --@item:必须是物品真是数据
  // --@type:出售或者使用
  // --@select_vo :自选礼包点击批量使用要传选中的物品id列表过来
  // --@return 
  // --==============================--
  openBatchUseItemView: function openBatchUseItemView(status, item, type, select_vo) {
    if (status == false) {
      if (this.batch_use != null) {
        this.batch_use.close();
        this.batch_use = null;
      }
    } else {
      if (item == null || item.config == null) return;
 
      if (this.batch_use == null) {
        this.batch_use = Utils.createClass("backpack_batchuse_window", this);
      }
 
      if (this.batch_use && this.batch_use.isOpen() == false) {
        this.batch_use.open([item, type, select_vo]);
      }
    }
  },
 
  /**
   * 打开出售物品界面展示
   * author:{author}
   * @status:
   * @list: 
   * return
   */
  openSellWindow: function openSellWindow(status, bag_code, list) {
    if (status == false) {
      if (this.sell_window != null) {
        this.sell_window.close();
        this.sell_window = null;
      }
    } else {
      bag_code = bag_code || BackPackConst.Bag_Code.BACKPACK;
      if (list == null || Utils.next(list) == null) return;
 
      if (this.sell_window == null) {
        this.sell_window = Utils.createClass("backpack_sell_window", this);
      }
 
      if (this.sell_window.isOpen() == false) {
        this.sell_window.open(bag_code, list);
      }
    }
  },
  openGiftSelectPanel: function openGiftSelectPanel(gift_vo) {
    if (this.gift_panel == null) {
      this.gift_panel = Utils.createClass("gift_select_window", this);
    }
 
    if (this.gift_panel && this.gift_panel.isOpen() == false) {
      this.gift_panel.open(gift_vo);
    }
  },
  closeGiftSelectPanel: function closeGiftSelectPanel() {
    if (this.gift_panel != null) {
      this.gift_panel.close();
      this.gift_panel = null;
    }
  },
  //跳转物品来源的
  gotoItemSources: function gotoItemSources(evt_type, extend, bid, need_item_list) {
    if (evt_type == null || extend == null) return;
 
    if (evt_type == "evt_partner_call") {
      //召唤
      JumpController.getInstance().jumpViewByEvtData([1]);
    } else if (evt_type == "evt_mall_buy") {
      //商城
      if (extend[0]) {
        JumpController.getInstance().jumpViewByEvtData([15, extend[0], bid]);
      }
    } else if (evt_type == "evt_vip") {
      //vip
      JumpController.getInstance().jumpViewByEvtData([7, VIPTABCONST.VIP, extend[0]]);
    } else if (evt_type == "evt_boss") {//个人BOSS挑战
    } else if (evt_type == "evt_world_boss") {//世界boss
    } else if (evt_type == "evt_tower") {
      //星命塔
      JumpController.getInstance().jumpViewByEvtData([12]);
    } else if (evt_type == "evt_divination") {//占卜
      // AuguryController:getInstance():openMainView(true)
    } else if (evt_type == "evt_dun_chapter") {
      //剧情副本
      JumpController.getInstance().jumpViewByEvtData([5]);
    } else if (evt_type == "evt_gold_market") {//金币市场
    } else if (evt_type == "evt_silver_market") {//银币市场
    } else if (evt_type == "evt_arena") {
      //竞技场挑战
      JumpController.getInstance().jumpViewByEvtData([3]);
    } else if (evt_type == "evt_arena_box") {
      //竞技场宝箱
      JumpController.getInstance().jumpViewByEvtData([3]);
    } else if (evt_type == "evt_bag_eqm") {
      //装备背包
      JumpController.getInstance().jumpViewByEvtData([8, BackPackConst.item_tab_type.EQUIPS]);
    } else if (evt_type == "evt_bag_partner") {
      //英雄背包
      JumpController.getInstance().jumpViewByEvtData([8, BackPackConst.item_tab_type.HERO]);
    } else if (evt_type == "evt_dun_stone") {
      //宝石副本
      JumpController.getInstance().jumpViewByEvtData([17]);
    } else if (evt_type == "evt_bag_star_life") {
      //特殊背包
      JumpController.getInstance().jumpViewByEvtData([8, BackPackConst.item_tab_type.SPECIAL]);
    } else if (evt_type == "evt_friend") {
      //好友
      JumpController.getInstance().jumpViewByEvtData([4]);
    } else if (evt_type == "evt_league") {
      JumpController.getInstance().jumpViewByEvtData([14]);
    } else if (evt_type == "evt_league_dungeon") {
      //公会副本
      JumpController.getInstance().jumpViewByEvtData([31]);
    } else if (evt_type == "evt_league_donate") {
      //公会捐献
      JumpController.getInstance().jumpViewByEvtData([13]);
    } else if (evt_type == "evt_league_sail") {
      //公会远航
      JumpController.getInstance().jumpViewByEvtData([18]);
    } else if (evt_type == "evt_league_skill") {
      //公会技能
      JumpController.getInstance().jumpViewByEvtData([32]);
    } else if (evt_type == "evt_league_shop") {
      //公会商店
      var MallConst = require("mall_const");
 
      JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.UnionShop]);
    } else if (evt_type == "evt_league_redpacket") {
      //公会红包
      JumpController.getInstance().jumpViewByEvtData([33]);
    } else if (evt_type == "evt_league_war") {
      //公会战
      JumpController.getInstance().jumpViewByEvtData([21]);
    } else if (evt_type == "evt_god_world") {
      //神界冒险
      JumpController.getInstance().jumpViewByEvtData([34]);
    } else if (evt_type == "evt_league_help") {//帮内求助
    } else if (evt_type == "evt_exchange") {
      //兑换
      JumpController.getInstance().jumpViewByEvtData([35]);
    } else if (evt_type == "evt_arena_champion") {
      //冠军赛
      JumpController.getInstance().jumpViewByEvtData([36]);
    } else if (evt_type == "evt_endless") {
      //无尽试炼
      JumpController.getInstance().jumpViewByEvtData([43]);
    } else if (evt_type == "evt_partner_power") {//神将召唤
      // var PartnersummonController = require("partnersummon_controller");
      // PartnersummonController.getInstance().openGodPartnerSummonView(true)
    } else if (evt_type == "evt_hero") {//神将召唤
    } else if (evt_type == "evt_pet") {
      //萌宠
      var MainuiController = require("mainui_controller");
 
      var BattleConst = require("battle_const");
 
      MainuiController.getInstance().requestOpenBattleRelevanceWindow(BattleConst.Fight_Type.Escort);
    } else if (evt_type == "evt_shengqi") {
      //圣器
      JumpController.getInstance().jumpViewByEvtData([20]);
    } else if (evt_type == "evt_xingming") {
      //星命
      JumpController.getInstance().jumpViewByEvtData([12]);
    } else if (evt_type == "evt_primus") {
      // var PrimusController = require("primus_controller");
      // PrimusController.getInstance().openPrimusMainWindow(true);
      JumpController.getInstance().jumpViewByEvtData([27]);
    } else if (evt_type == "evt_skyladder") {
      JumpController.getInstance().jumpViewByEvtData([29]);
    } else if (evt_type == "evt_skyshop") {
      JumpController.getInstance().jumpViewByEvtData([37]);
    } else if (evt_type == "evt_change") {
      //充值
      JumpController.getInstance().jumpViewByEvtData([7]);
    } else if (evt_type == "evt_yueke") {//月卡
    } else if (evt_type == "evt_invest") {
      //投资计划
      JumpController.getInstance().jumpViewByEvtData([38]);
    } else if (evt_type == "evt_growfund") {
      //成长资金
      JumpController.getInstance().jumpViewByEvtData([39]);
    } else if (evt_type == "evt_partner") {
      //打开英雄界面
      JumpController.getInstance().jumpViewByEvtData([19]);
    } else if (evt_type == "evt_partner_gemstone") {//打开宝石界面
    } else if (evt_type == "evt_lucky_treasure" || evt_type == "evt_treasure") {
      //打开幸运探宝
      JumpController.getInstance().jumpViewByEvtData([40]);
    } else if (evt_type == "evt_recruit_high") {
      //先知召唤 先知殿
      var SeerpalaceConst = require("seerpalace_const");
 
      JumpController.getInstance().jumpViewByEvtData([24, SeerpalaceConst.Tab_Index.Summon]);
    } else if (evt_type == "evt_hero_conversion") {
      //先知召唤 英雄转换
      var SeerpalaceConst = require("seerpalace_const");
 
      JumpController.getInstance().jumpViewByEvtData([24, SeerpalaceConst.Tab_Index.Change]);
    } else if (evt_type == "evt_partner_synthesis") {
      //融合祭坛
      JumpController.getInstance().jumpViewByEvtData([23]);
    } else if (evt_type == "evt_partner_decompose") {
      //祭祀小屋
      JumpController.getInstance().jumpViewByEvtData([22]);
    } else if (evt_type == "evt_partner_eqm_synthesis") {
      //锻造屋
      JumpController.getInstance().jumpViewByEvtData([26]);
    } else if (evt_type == "evt_expedition") {
      //英雄远征
      JumpController.getInstance().jumpViewByEvtData([25]);
    } else if (evt_type == "evt_grocery_store") {
      //杂货店
      JumpController.getInstance().jumpViewByEvtData([6]);
    } else if (evt_type == "evt_daily_quest") {
      //日常任务进度宝箱获得!
      JumpController.getInstance().jumpViewByEvtData([41]);
    } else if (evt_type == "evt_achievement") {
      //完成成就任务获得!
      var TaskConst = require("task_const");
 
      JumpController.getInstance().jumpViewByEvtData([41, TaskConst.type.feat]);
    } else if (evt_type == "evt_rune_synthesis") {
      var ForgeHouseConst = require("forgehouse_const");
 
      JumpController.getInstance().jumpViewByEvtData([26, ForgeHouseConst.Tab_Index.Artifact]);
    } else if (evt_type == "evt_skillshop") {
      var MallConst = require("mall_const");
 
      JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.SkillShop]);
    } else if (evt_type == "evt_eliteshop") {
      var MallConst = require("mall_const");
 
      JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.EliteShop]);
    } else if (evt_type == "evt_elitematch") {
      //精英赛
      JumpController.getInstance().jumpViewByEvtData([28]);
    } else if (evt_type == "evt_element_temple") {
      //元素圣殿
      JumpController.getInstance().jumpViewByEvtData([42]);
    } else {
      message("暂无跳转,或者还没添加!");
    }
  },
  getBackpackRoot: function getBackpackRoot() {
    if (this.backpack_win) return this.backpack_win.root_wnd;
  }
});
module.exports = BackpackController;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcYmFja3BhY2tfY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJCYWNrUGFja0NvbnN0IiwicmVxdWlyZSIsIk1haW51aUNvbnRyb2xsZXIiLCJNYWludWlDb25zdCIsIkJhY2twYWNrRXZlbnQiLCJKdW1wQ29udHJvbGxlciIsIlRpcHNDb250cm9sbGVyIiwiR3VpZGVDb250cm9sbGVyIiwiQmFja3BhY2tDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJCYWNrcGFja01vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwibG9naW5fZXZlbnRfc3VjY2VzcyIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwicmVxdWVzdEluaXRQcm90byIsInJlX2xpbmtfZ2FtZSIsIkVWVF9SRV9MSU5LX0dBTUUiLCJnZXRJbnN0YW5jZSIsImlzSW5HdWlkZSIsIm9wZW5NYWluV2luZG93IiwicmVnaXN0ZXJQcm90b2NhbHMiLCJSZWdpc3RlclByb3RvY2FsIiwib24xMDUwMCIsIm9uMTA1MDEiLCJvbjEwNTEwIiwib24xMDUxMSIsIm9uMTA1MTIiLCJoYW5kbGUxMDUxNSIsImhhbmRsZTEwNTIyIiwiaGFuZGxlMTA1MjMiLCJoYW5kbGUxMTAwOCIsInNlbmRlcjEwNTAwIiwiU2VuZFByb3RvY2FsIiwic2VuZGVyMTA1MDEiLCJkYXRhIiwiYmFnX2NvZGUiLCJCYWdfQ29kZSIsIkJBQ0tQQUNLIiwiaW5pdEl0ZW1MaXN0IiwiRVFVSVBTIiwibG9nIiwidXBkYXRlQmFnSXRlbXNOdW0iLCJkZWxldGVCYWdJdGVtcyIsInNlbmRlcjEwNTIyIiwic3RvcmFnZSIsImFyZ3MiLCJwcm90b2NhbCIsIm1lc3NhZ2UiLCJtc2ciLCJiYXRjaF91c2UiLCJvcGVuQmF0Y2hVc2VJdGVtVmlldyIsInNlbGxfd2luZG93Iiwib3BlblNlbGxXaW5kb3ciLCJjbG9zZUdpZnRTZWxlY3RQYW5lbCIsImZpcmUiLCJTZWxsX0dvb2RzX1N1Y2Nlc3MiLCJzZW5kZXIxMDUxNSIsImlkIiwicXVhbnRpdHkiLCJmbGFnIiwic2VuZGVyMTA1MjMiLCJudW0iLCJDb21wb3NlX0dvb2RzX1N1Y2Nlc3MiLCJzaG93QmFja1BhY2tDb21wVGlwcyIsInNlbmRlcjExMDA4IiwiYmlkIiwicHJvdG8iLCJDb21wb3NlX0JhY2tQYWNrX1N1Y2Nlc3MiLCJzaG93Q29tcENob29zZVRpcHMiLCJyZXN1bHQiLCJpdGVtcyIsImkiLCJwYXJ0bmVycyIsInYiLCJpbmZvIiwiQ29uZmlnIiwicGFydG5lcl9kYXRhIiwiZGF0YV9wYXJ0bmVyX2Jhc2UiLCJwYXJ0bmVyX2JpZCIsInBhcnNlSW50Iiwic3RhciIsImluaXRfc3RhciIsImNhbXBfdHlwZSIsInNob3dfdHlwZSIsIml0ZW1fZXhoaWJpdGlvbl90eXBlIiwicGFydG5lcl90eXBlIiwib3BlbkdldEl0ZW1WaWV3Iiwic3RhdHVzIiwicGFyYW1zIiwiYmFja3BhY2tfd2luIiwiY2xvc2UiLCJVdGlscyIsImNyZWF0ZUNsYXNzIiwib3BlbiIsIm9wZW5UaXBzU291cmNlIiwiZXh0ZW5kX2RhdGEiLCJpdGVtX2xpc3QiLCJnZXRJdGVtQ29uZmlnIiwidGlwc19zb3VyY2UiLCJUaXBzU291cmNlIiwib3Blbl9wYXJhbXMiLCJvcGVuSXRlbVNlbGxQYW5lbCIsImdvb2RzX3ZvIiwiaXRlbV9zZWxsX3BhbmVsIiwiaXNPcGVuIiwiaXRlbSIsInR5cGUiLCJzZWxlY3Rfdm8iLCJjb25maWciLCJsaXN0IiwibmV4dCIsIm9wZW5HaWZ0U2VsZWN0UGFuZWwiLCJnaWZ0X3ZvIiwiZ2lmdF9wYW5lbCIsImdvdG9JdGVtU291cmNlcyIsImV2dF90eXBlIiwiZXh0ZW5kIiwibmVlZF9pdGVtX2xpc3QiLCJqdW1wVmlld0J5RXZ0RGF0YSIsIlZJUFRBQkNPTlNUIiwiVklQIiwiaXRlbV90YWJfdHlwZSIsIkhFUk8iLCJTUEVDSUFMIiwiTWFsbENvbnN0IiwiTWFsbFR5cGUiLCJVbmlvblNob3AiLCJCYXR0bGVDb25zdCIsInJlcXVlc3RPcGVuQmF0dGxlUmVsZXZhbmNlV2luZG93IiwiRmlnaHRfVHlwZSIsIkVzY29ydCIsIlNlZXJwYWxhY2VDb25zdCIsIlRhYl9JbmRleCIsIlN1bW1vbiIsIkNoYW5nZSIsIlRhc2tDb25zdCIsImZlYXQiLCJGb3JnZUhvdXNlQ29uc3QiLCJBcnRpZmFjdCIsIlNraWxsU2hvcCIsIkVsaXRlU2hvcCIsImdldEJhY2twYWNrUm9vdCIsInJvb3Rfd25kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQyxnQkFBRCxDQUEzQjs7QUFDQSxJQUFJQyxnQkFBZ0IsR0FBR0QsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlFLFdBQVcsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUcsYUFBYSxHQUFHSCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSUksY0FBYyxHQUFHSixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUssY0FBYyxHQUFHTCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSU0sZUFBZSxHQUFHTixPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBRUEsSUFBSU8sa0JBQWtCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzlCLGFBQVNDLGNBRHFCO0FBRTlCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVksQ0FDakIsQ0FINkI7QUFLOUI7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLHNCQUFZO0FBQ3BCLFFBQUlDLGFBQWEsR0FBR2IsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLFNBQUtjLEtBQUwsR0FBYSxJQUFJRCxhQUFKLEVBQWI7QUFDQSxTQUFLQyxLQUFMLENBQVdGLFVBQVg7QUFDSCxHQVY2QjtBQVk5QjtBQUNBRyxFQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDbEIsV0FBTyxLQUFLRCxLQUFaO0FBQ0gsR0FmNkI7QUFpQjlCO0FBQ0FFLEVBQUFBLGNBQWMsRUFBRSwwQkFBWTtBQUN4QixRQUFJLEtBQUtDLG1CQUFMLElBQTRCLElBQWhDLEVBQXNDO0FBQ2xDLFdBQUtBLG1CQUFMLEdBQTJCQyxLQUFLLENBQUNDLFdBQU4sQ0FBa0JDLElBQWxCLENBQXVCQyxPQUFPLENBQUNDLHVCQUEvQixFQUF5RCxZQUFZO0FBQzVGLGFBQUtDLGdCQUFMO0FBQ0gsT0FGa0YsQ0FFaEZILElBRmdGLENBRTNFLElBRjJFLENBQXhELENBQTNCO0FBR0g7O0FBRUQsUUFBSSxLQUFLSSxZQUFMLElBQXFCLElBQXpCLEVBQStCO0FBQzNCLFdBQUtBLFlBQUwsR0FBb0JOLEtBQUssQ0FBQ0MsV0FBTixDQUFrQkMsSUFBbEIsQ0FBdUJDLE9BQU8sQ0FBQ0ksZ0JBQS9CLEVBQWtELFlBQVk7QUFDOUUsWUFBSW5CLGVBQWUsR0FBR04sT0FBTyxDQUFDLGtCQUFELENBQTdCOztBQUNBLFlBQUksQ0FBQ00sZUFBZSxDQUFDb0IsV0FBaEIsR0FBOEJDLFNBQTlCLEVBQUwsRUFDSSxLQUFLQyxjQUFMLENBQW9CLEtBQXBCLEVBSDBFLENBRzlDO0FBRWhDO0FBQ0gsT0FOb0UsQ0FNbEVSLElBTmtFLENBTTdELElBTjZELENBQWpELENBQXBCO0FBT0g7QUFDSixHQWxDNkI7QUFvQzlCO0FBQ0FTLEVBQUFBLGlCQUFpQixFQUFFLDZCQUFZO0FBQzNCLFNBQUtDLGdCQUFMLENBQXNCLEtBQXRCLEVBQTZCLEtBQUtDLE9BQWxDO0FBQ0EsU0FBS0QsZ0JBQUwsQ0FBc0IsS0FBdEIsRUFBNkIsS0FBS0UsT0FBbEM7QUFDQSxTQUFLRixnQkFBTCxDQUFzQixLQUF0QixFQUE2QixLQUFLRyxPQUFsQyxFQUgyQixDQUdvQjs7QUFDL0MsU0FBS0gsZ0JBQUwsQ0FBc0IsS0FBdEIsRUFBNkIsS0FBS0ksT0FBbEMsRUFKMkIsQ0FJb0I7O0FBQy9DLFNBQUtKLGdCQUFMLENBQXNCLEtBQXRCLEVBQTZCLEtBQUtLLE9BQWxDLEVBTDJCLENBS29COztBQUMvQyxTQUFLTCxnQkFBTCxDQUFzQixLQUF0QixFQUE2QixLQUFLTSxXQUFsQyxFQU4yQixDQU1vQjs7QUFDL0MsU0FBS04sZ0JBQUwsQ0FBc0IsS0FBdEIsRUFBNkIsS0FBS08sV0FBbEMsRUFQMkIsQ0FPb0I7O0FBQy9DLFNBQUtQLGdCQUFMLENBQXNCLEtBQXRCLEVBQTZCLEtBQUtRLFdBQWxDO0FBQ0EsU0FBS1IsZ0JBQUwsQ0FBc0IsS0FBdEIsRUFBNkIsS0FBS1MsV0FBbEM7QUFHSCxHQWpENkI7QUFtRDlCO0FBQ0FoQixFQUFBQSxnQkFBZ0IsRUFBRSw0QkFBWSxDQUMxQjtBQUNBO0FBQ0gsR0F2RDZCO0FBeUQ5QmlCLEVBQUFBLFdBQVcsRUFBRSx1QkFBWTtBQUNyQixTQUFLQyxZQUFMLENBQWtCLEtBQWxCLEVBQXlCLEVBQXpCO0FBQ0gsR0EzRDZCO0FBNkQ5QkMsRUFBQUEsV0FBVyxFQUFFLHVCQUFZO0FBQ3JCLFNBQUtELFlBQUwsQ0FBa0IsS0FBbEIsRUFBeUIsRUFBekI7QUFDSCxHQS9ENkI7QUFpRTlCO0FBQ0FWLEVBQUFBLE9BQU8sRUFBRSxpQkFBVVksSUFBVixFQUFnQjtBQUNyQkEsSUFBQUEsSUFBSSxDQUFDQyxRQUFMLEdBQWdCN0MsYUFBYSxDQUFDOEMsUUFBZCxDQUF1QkMsUUFBdkM7QUFDQSxTQUFLaEMsS0FBTCxDQUFXaUMsWUFBWCxDQUF3QkosSUFBeEI7QUFDSCxHQXJFNkI7QUF1RTlCO0FBQ0FYLEVBQUFBLE9BQU8sRUFBRSxpQkFBVVcsSUFBVixFQUFnQjtBQUNyQkEsSUFBQUEsSUFBSSxDQUFDQyxRQUFMLEdBQWdCN0MsYUFBYSxDQUFDOEMsUUFBZCxDQUF1QkcsTUFBdkM7QUFDQSxTQUFLbEMsS0FBTCxDQUFXaUMsWUFBWCxDQUF3QkosSUFBeEI7QUFDSCxHQTNFNkI7QUE2RTlCO0FBQ0FWLEVBQUFBLE9BQU8sRUFBRSxpQkFBVVUsSUFBVixFQUFnQjtBQUNyQm5DLElBQUFBLEVBQUUsQ0FBQ3lDLEdBQUgsQ0FBTyxRQUFQLEVBQWdCTixJQUFoQjtBQUNBLFNBQUs3QixLQUFMLENBQVdvQyxpQkFBWCxDQUE2QlAsSUFBN0I7QUFDSCxHQWpGNkI7QUFtRjlCO0FBQ0FULEVBQUFBLE9BQU8sRUFBRSxpQkFBVVMsSUFBVixFQUFnQjtBQUNyQm5DLElBQUFBLEVBQUUsQ0FBQ3lDLEdBQUgsQ0FBTyxRQUFQLEVBQWdCTixJQUFoQjtBQUNBLFNBQUs3QixLQUFMLENBQVdxQyxjQUFYLENBQTBCUixJQUExQjtBQUNILEdBdkY2QjtBQXlGOUI7QUFDQVIsRUFBQUEsT0FBTyxFQUFFLGlCQUFVUSxJQUFWLEVBQWdCO0FBQ3JCLFNBQUs3QixLQUFMLENBQVdvQyxpQkFBWCxDQUE2QlAsSUFBN0IsRUFBbUMsSUFBbkM7QUFDSCxHQTVGNkI7QUE4RjlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBUyxFQUFBQSxXQUFXLEVBQUMscUJBQVNDLE9BQVQsRUFBaUJDLElBQWpCLEVBQXNCO0FBQzlCLFFBQUlDLFFBQVEsR0FBRSxFQUFkO0FBQ0FBLElBQUFBLFFBQVEsQ0FBQ0YsT0FBVCxHQUFtQkEsT0FBbkI7QUFDQUUsSUFBQUEsUUFBUSxDQUFDRCxJQUFULEdBQWdCQSxJQUFoQjtBQUNBLFNBQUtiLFlBQUwsQ0FBa0IsS0FBbEIsRUFBd0JjLFFBQXhCO0FBQ0gsR0F6RzZCO0FBMkc5QmxCLEVBQUFBLFdBQVcsRUFBQyxxQkFBU00sSUFBVCxFQUFjO0FBQ3RCYSxJQUFBQSxPQUFPLENBQUNiLElBQUksQ0FBQ2MsR0FBTixDQUFQOztBQUNBLFFBQUcsS0FBS0MsU0FBUixFQUFtQjtBQUNmLFdBQUtDLG9CQUFMLENBQTBCLEtBQTFCO0FBQ0g7O0FBQ0QsUUFBRyxLQUFLQyxXQUFSLEVBQW9CO0FBQUM7QUFDakIsV0FBS0MsY0FBTCxDQUFvQixLQUFwQjtBQUNIOztBQUNELFNBQUtDLG9CQUFMO0FBQ0E1QyxJQUFBQSxLQUFLLENBQUNDLFdBQU4sQ0FBa0I0QyxJQUFsQixDQUF1QjVELGFBQWEsQ0FBQzZELGtCQUFyQztBQUNILEdBckg2QjtBQXVIOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsRUFBQUEsV0FBVyxFQUFDLHFCQUFTQyxFQUFULEVBQVlDLFFBQVosRUFBcUJiLElBQXJCLEVBQTBCO0FBQ2xDLFFBQUlDLFFBQVEsR0FBRSxFQUFkO0FBQ0FBLElBQUFBLFFBQVEsQ0FBQ1csRUFBVCxHQUFjQSxFQUFkO0FBQ0FYLElBQUFBLFFBQVEsQ0FBQ1ksUUFBVCxHQUFvQkEsUUFBcEI7QUFDQVosSUFBQUEsUUFBUSxDQUFDRCxJQUFULEdBQWdCQSxJQUFJLElBQUksRUFBeEI7QUFDQSxTQUFLYixZQUFMLENBQWtCLEtBQWxCLEVBQXdCYyxRQUF4QjtBQUNILEdBcEk2QjtBQXNJOUJuQixFQUFBQSxXQUFXLEVBQUMscUJBQVNPLElBQVQsRUFBYztBQUN0QmEsSUFBQUEsT0FBTyxDQUFDYixJQUFJLENBQUNjLEdBQU4sQ0FBUDs7QUFDQSxRQUFHZCxJQUFJLENBQUN5QixJQUFMLElBQWEsQ0FBaEIsRUFBa0I7QUFDZCxXQUFLVCxvQkFBTCxDQUEwQixLQUExQjtBQUNBLFdBQUtHLG9CQUFMO0FBQ0g7QUFDSixHQTVJNkI7QUE4STlCTyxFQUFBQSxXQUFXLEVBQUMscUJBQVNILEVBQVQsRUFBWUksR0FBWixFQUFnQjtBQUN4QixRQUFJZixRQUFRLEdBQUUsRUFBZDtBQUNBQSxJQUFBQSxRQUFRLENBQUNXLEVBQVQsR0FBY0EsRUFBZDtBQUNBWCxJQUFBQSxRQUFRLENBQUNlLEdBQVQsR0FBZUEsR0FBZjtBQUNBLFNBQUs3QixZQUFMLENBQWtCLEtBQWxCLEVBQXdCYyxRQUF4QjtBQUNILEdBbko2QjtBQXFKOUJqQixFQUFBQSxXQUFXLEVBQUMscUJBQVNLLElBQVQsRUFBYztBQUN0QmEsSUFBQUEsT0FBTyxDQUFDYixJQUFJLENBQUNjLEdBQU4sQ0FBUDs7QUFDQSxRQUFHZCxJQUFJLENBQUN5QixJQUFMLElBQWEsQ0FBaEIsRUFBa0I7QUFDZGxELE1BQUFBLEtBQUssQ0FBQ0MsV0FBTixDQUFrQjRDLElBQWxCLENBQXVCNUQsYUFBYSxDQUFDb0UscUJBQXJDO0FBQ0FsRSxNQUFBQSxjQUFjLENBQUNxQixXQUFmLEdBQTZCOEMsb0JBQTdCLENBQWtELEtBQWxEO0FBQ0g7QUFDSixHQTNKNkI7QUE2SjlCO0FBQ0FDLEVBQUFBLFdBQVcsRUFBQyxxQkFBU0MsR0FBVCxFQUFhSixHQUFiLEVBQWlCO0FBQ3pCLFFBQUlLLEtBQUssR0FBRyxFQUFaO0FBQ0FBLElBQUFBLEtBQUssQ0FBQ0QsR0FBTixHQUFZQSxHQUFaO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0wsR0FBTixHQUFZQSxHQUFaO0FBQ0EsU0FBSzdCLFlBQUwsQ0FBa0IsS0FBbEIsRUFBeUJrQyxLQUF6QjtBQUNILEdBbks2QjtBQXFLOUJwQyxFQUFBQSxXQUFXLEVBQUMscUJBQVNJLElBQVQsRUFBYztBQUN0QnpCLElBQUFBLEtBQUssQ0FBQ0MsV0FBTixDQUFrQjRDLElBQWxCLENBQXVCNUQsYUFBYSxDQUFDeUUsd0JBQXJDO0FBQ0FwQixJQUFBQSxPQUFPLENBQUNiLElBQUksQ0FBQ2MsR0FBTixDQUFQO0FBQ0FwRCxJQUFBQSxjQUFjLENBQUNxQixXQUFmLEdBQTZCOEMsb0JBQTdCLENBQWtELEtBQWxEO0FBQ0FuRSxJQUFBQSxjQUFjLENBQUNxQixXQUFmLEdBQTZCbUQsa0JBQTdCLENBQWdELEtBQWhEOztBQUNBLFFBQUdsQyxJQUFJLENBQUNtQyxNQUFMLElBQWUsQ0FBbEIsRUFBb0I7QUFDaEIsVUFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsV0FBSSxJQUFJQyxDQUFSLElBQWFyQyxJQUFJLENBQUNzQyxRQUFsQixFQUEyQjtBQUN2QixZQUFJQyxDQUFDLEdBQUd2QyxJQUFJLENBQUNzQyxRQUFMLENBQWNELENBQWQsQ0FBUjtBQUNBLFlBQUlHLElBQUksR0FBR0MsTUFBTSxDQUFDQyxZQUFQLENBQW9CQyxpQkFBcEIsQ0FBc0NKLENBQUMsQ0FBQ0ssV0FBeEMsQ0FBWDtBQUNBUixRQUFBQSxLQUFLLENBQUNTLFFBQVEsQ0FBQ1IsQ0FBRCxDQUFULENBQUwsR0FBcUIsRUFBckI7QUFDQUQsUUFBQUEsS0FBSyxDQUFDUyxRQUFRLENBQUNSLENBQUQsQ0FBVCxDQUFMLENBQW1CTixHQUFuQixHQUF5QlEsQ0FBQyxDQUFDSyxXQUEzQjtBQUNBUixRQUFBQSxLQUFLLENBQUNTLFFBQVEsQ0FBQ1IsQ0FBRCxDQUFULENBQUwsQ0FBbUJTLElBQW5CLEdBQTBCTixJQUFJLENBQUNPLFNBQS9CO0FBQ0FYLFFBQUFBLEtBQUssQ0FBQ1MsUUFBUSxDQUFDUixDQUFELENBQVQsQ0FBTCxDQUFtQlcsU0FBbkIsR0FBK0JSLElBQUksQ0FBQ1EsU0FBcEM7QUFDQVosUUFBQUEsS0FBSyxDQUFDUyxRQUFRLENBQUNSLENBQUQsQ0FBVCxDQUFMLENBQW1CWSxTQUFuQixHQUErQjFGLFdBQVcsQ0FBQzJGLG9CQUFaLENBQWlDQyxZQUFoRTtBQUNIOztBQUNEN0YsTUFBQUEsZ0JBQWdCLENBQUN5QixXQUFqQixHQUErQnFFLGVBQS9CLENBQStDLElBQS9DLEVBQXFEaEIsS0FBckQsRUFBNEQsQ0FBNUQ7QUFDSDtBQUNKLEdBdkw2Qjs7QUF5TDlCOzs7OztBQUtBbkQsRUFBQUEsY0FBYyxFQUFFLHdCQUFVb0UsTUFBVixFQUFrQkMsTUFBbEIsRUFBMEI7QUFDdEMsUUFBSSxDQUFDRCxNQUFMLEVBQWE7QUFDVCxVQUFJLEtBQUtFLFlBQVQsRUFBdUI7QUFDbkIsYUFBS0EsWUFBTCxDQUFrQkMsS0FBbEI7QUFDQSxhQUFLRCxZQUFMLEdBQW9CLElBQXBCO0FBQ0g7QUFDSixLQUxELE1BS087QUFDSCxVQUFJLEtBQUtBLFlBQUwsSUFBcUIsSUFBekIsRUFBK0I7QUFDM0IsYUFBS0EsWUFBTCxHQUFvQkUsS0FBSyxDQUFDQyxXQUFOLENBQWtCLGlCQUFsQixDQUFwQjtBQUNIOztBQUNELFdBQUtILFlBQUwsQ0FBa0JJLElBQWxCLENBQXVCTCxNQUF2QjtBQUNIO0FBQ0osR0ExTTZCOztBQTRNOUI7Ozs7Ozs7OztBQVNBTSxFQUFBQSxjQUFjLEVBQUUsd0JBQVVQLE1BQVYsRUFBa0JyRCxJQUFsQixFQUF3QjZELFdBQXhCLEVBQXFDQyxTQUFyQyxFQUFnRDtBQUM1RCxRQUFJVCxNQUFKLEVBQVk7QUFDUixVQUFHMUYsZUFBZSxDQUFDb0IsV0FBaEIsR0FBOEJDLFNBQTlCLEVBQUgsRUFBNkM7O0FBRTdDLFVBQUcsT0FBT2dCLElBQVAsSUFBZ0IsUUFBbkIsRUFBNEI7QUFDeEJBLFFBQUFBLElBQUksR0FBR3lELEtBQUssQ0FBQ00sYUFBTixDQUFvQi9ELElBQXBCLENBQVA7QUFDSDs7QUFDRCxVQUFHQSxJQUFJLElBQUksSUFBWCxFQUFpQjs7QUFDakIsVUFBSSxDQUFDLEtBQUtnRSxXQUFWLEVBQXVCO0FBQ25CLFlBQUlDLFVBQVUsR0FBRzVHLE9BQU8sQ0FBQyxvQkFBRCxDQUF4Qjs7QUFDQSxhQUFLMkcsV0FBTCxHQUFtQixJQUFJQyxVQUFKLENBQWUsSUFBZixDQUFuQjtBQUNILE9BVk8sQ0FXUjtBQUNBO0FBQ0E7OztBQUNBLFVBQUlDLFdBQVcsR0FBRyxFQUFsQjtBQUNBQSxNQUFBQSxXQUFXLENBQUNsRSxJQUFaLEdBQW1CQSxJQUFuQjtBQUNBa0UsTUFBQUEsV0FBVyxDQUFDTCxXQUFaLEdBQTBCQSxXQUExQjtBQUNBSyxNQUFBQSxXQUFXLENBQUNKLFNBQVosR0FBd0JBLFNBQXhCO0FBQ0EsV0FBS0UsV0FBTCxDQUFpQkwsSUFBakIsQ0FBc0JPLFdBQXRCO0FBQ0gsS0FuQkQsTUFtQk87QUFDSCxVQUFJLEtBQUtGLFdBQVQsRUFBc0I7QUFDbEIsYUFBS0EsV0FBTCxDQUFpQlIsS0FBakI7QUFDQSxhQUFLUSxXQUFMLEdBQW1CLElBQW5CO0FBQ0g7QUFDSjtBQUNKLEdBL082Qjs7QUFpUDlCOzs7QUFHQUcsRUFBQUEsaUJBQWlCLEVBQUMsMkJBQVNkLE1BQVQsRUFBaUJlLFFBQWpCLEVBQTJCbkUsUUFBM0IsRUFBb0M7QUFDbEQsUUFBR29ELE1BQU0sSUFBSSxLQUFiLEVBQW1CO0FBQ2YsVUFBRyxLQUFLZ0IsZUFBTCxJQUF3QixJQUEzQixFQUFnQztBQUM1QixhQUFLQSxlQUFMLENBQXFCYixLQUFyQjtBQUNBLGFBQUthLGVBQUwsR0FBdUIsSUFBdkI7QUFDSDtBQUNKLEtBTEQsTUFLSztBQUNELFVBQUlwRSxRQUFRLEdBQUdBLFFBQVEsSUFBSTdDLGFBQWEsQ0FBQzhDLFFBQWQsQ0FBdUJDLFFBQWxEOztBQUNBLFVBQUcsS0FBS2tFLGVBQUwsSUFBd0IsSUFBM0IsRUFBZ0M7QUFDNUIsYUFBS0EsZUFBTCxHQUF1QlosS0FBSyxDQUFDQyxXQUFOLENBQWtCLHdCQUFsQixFQUEyQyxJQUEzQyxDQUF2QjtBQUNIOztBQUNELFVBQUcsS0FBS1csZUFBTCxDQUFxQkMsTUFBckIsTUFBaUMsS0FBcEMsRUFBMEM7QUFDdEMsYUFBS0QsZUFBTCxDQUFxQlYsSUFBckIsQ0FBMEIsQ0FBQ1MsUUFBRCxFQUFXbkUsUUFBWCxDQUExQjtBQUNIO0FBQ0o7QUFDSixHQW5RNkI7QUFxUTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FlLEVBQUFBLG9CQUFvQixFQUFDLDhCQUFTcUMsTUFBVCxFQUFpQmtCLElBQWpCLEVBQXVCQyxJQUF2QixFQUE0QkMsU0FBNUIsRUFBc0M7QUFDdkQsUUFBR3BCLE1BQU0sSUFBSSxLQUFiLEVBQW1CO0FBQ2YsVUFBRyxLQUFLdEMsU0FBTCxJQUFrQixJQUFyQixFQUEwQjtBQUN0QixhQUFLQSxTQUFMLENBQWV5QyxLQUFmO0FBQ0EsYUFBS3pDLFNBQUwsR0FBaUIsSUFBakI7QUFDSDtBQUNKLEtBTEQsTUFLSztBQUNELFVBQUd3RCxJQUFJLElBQUksSUFBUixJQUFnQkEsSUFBSSxDQUFDRyxNQUFMLElBQWUsSUFBbEMsRUFBdUM7O0FBQ3ZDLFVBQUcsS0FBSzNELFNBQUwsSUFBa0IsSUFBckIsRUFBMEI7QUFDdEIsYUFBS0EsU0FBTCxHQUFpQjBDLEtBQUssQ0FBQ0MsV0FBTixDQUFrQiwwQkFBbEIsRUFBNkMsSUFBN0MsQ0FBakI7QUFDSDs7QUFDRCxVQUFHLEtBQUszQyxTQUFMLElBQWtCLEtBQUtBLFNBQUwsQ0FBZXVELE1BQWYsTUFBMkIsS0FBaEQsRUFBc0Q7QUFDbEQsYUFBS3ZELFNBQUwsQ0FBZTRDLElBQWYsQ0FBb0IsQ0FBQ1ksSUFBRCxFQUFPQyxJQUFQLEVBQVlDLFNBQVosQ0FBcEI7QUFDSDtBQUNKO0FBQ0osR0EzUjZCOztBQTZSOUI7Ozs7Ozs7QUFPQXZELEVBQUFBLGNBQWMsRUFBQyx3QkFBU21DLE1BQVQsRUFBaUJwRCxRQUFqQixFQUEyQjBFLElBQTNCLEVBQWdDO0FBQzNDLFFBQUd0QixNQUFNLElBQUksS0FBYixFQUFtQjtBQUNmLFVBQUcsS0FBS3BDLFdBQUwsSUFBb0IsSUFBdkIsRUFBNEI7QUFDeEIsYUFBS0EsV0FBTCxDQUFpQnVDLEtBQWpCO0FBQ0EsYUFBS3ZDLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDtBQUNKLEtBTEQsTUFLSztBQUNEaEIsTUFBQUEsUUFBUSxHQUFHQSxRQUFRLElBQUk3QyxhQUFhLENBQUM4QyxRQUFkLENBQXVCQyxRQUE5QztBQUNBLFVBQUd3RSxJQUFJLElBQUksSUFBUixJQUFnQmxCLEtBQUssQ0FBQ21CLElBQU4sQ0FBV0QsSUFBWCxLQUFvQixJQUF2QyxFQUE0Qzs7QUFDNUMsVUFBRyxLQUFLMUQsV0FBTCxJQUFvQixJQUF2QixFQUE0QjtBQUN4QixhQUFLQSxXQUFMLEdBQW1Cd0MsS0FBSyxDQUFDQyxXQUFOLENBQWtCLHNCQUFsQixFQUF5QyxJQUF6QyxDQUFuQjtBQUNIOztBQUNELFVBQUcsS0FBS3pDLFdBQUwsQ0FBaUJxRCxNQUFqQixNQUE2QixLQUFoQyxFQUFzQztBQUNsQyxhQUFLckQsV0FBTCxDQUFpQjBDLElBQWpCLENBQXNCMUQsUUFBdEIsRUFBZ0MwRSxJQUFoQztBQUNIO0FBQ0o7QUFDSixHQXBUNkI7QUFzVDlCRSxFQUFBQSxtQkFBbUIsRUFBQyw2QkFBU0MsT0FBVCxFQUFpQjtBQUNqQyxRQUFHLEtBQUtDLFVBQUwsSUFBbUIsSUFBdEIsRUFBMkI7QUFDdkIsV0FBS0EsVUFBTCxHQUFrQnRCLEtBQUssQ0FBQ0MsV0FBTixDQUFrQixvQkFBbEIsRUFBdUMsSUFBdkMsQ0FBbEI7QUFDSDs7QUFDRCxRQUFHLEtBQUtxQixVQUFMLElBQW1CLEtBQUtBLFVBQUwsQ0FBZ0JULE1BQWhCLE1BQTRCLEtBQWxELEVBQXdEO0FBQ3BELFdBQUtTLFVBQUwsQ0FBZ0JwQixJQUFoQixDQUFxQm1CLE9BQXJCO0FBQ0g7QUFDSixHQTdUNkI7QUErVDlCM0QsRUFBQUEsb0JBQW9CLEVBQUMsZ0NBQVU7QUFDM0IsUUFBRyxLQUFLNEQsVUFBTCxJQUFtQixJQUF0QixFQUEyQjtBQUN2QixXQUFLQSxVQUFMLENBQWdCdkIsS0FBaEI7QUFDQSxXQUFLdUIsVUFBTCxHQUFrQixJQUFsQjtBQUNIO0FBQ0osR0FwVTZCO0FBc1U5QjtBQUNBQyxFQUFBQSxlQUFlLEVBQUUseUJBQVVDLFFBQVYsRUFBb0JDLE1BQXBCLEVBQTRCbkQsR0FBNUIsRUFBaUNvRCxjQUFqQyxFQUFpRDtBQUM5RCxRQUFJRixRQUFRLElBQUksSUFBWixJQUFvQkMsTUFBTSxJQUFJLElBQWxDLEVBQXdDOztBQUN4QyxRQUFJRCxRQUFRLElBQUksa0JBQWhCLEVBQW9DO0FBQUk7QUFDcEN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsQ0FBRCxDQUEvQztBQUNILEtBRkQsTUFFTSxJQUFHSCxRQUFRLElBQUksY0FBZixFQUE4QjtBQUFDO0FBQ2pDLFVBQUdDLE1BQU0sQ0FBQyxDQUFELENBQVQsRUFBYTtBQUNUekgsUUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsRUFBS0YsTUFBTSxDQUFDLENBQUQsQ0FBWCxFQUFnQm5ELEdBQWhCLENBQS9DO0FBQ0g7QUFDSixLQUpLLE1BSUEsSUFBR2tELFFBQVEsSUFBSSxTQUFmLEVBQXlCO0FBQUM7QUFDNUJ4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsQ0FBRCxFQUFJQyxXQUFXLENBQUNDLEdBQWhCLEVBQXFCSixNQUFNLENBQUMsQ0FBRCxDQUEzQixDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHRCxRQUFRLElBQUksVUFBZixFQUEwQixDQUFDO0FBRWhDLEtBRkssTUFFQSxJQUFHQSxRQUFRLElBQUksZ0JBQWYsRUFBZ0MsQ0FBQztBQUV0QyxLQUZLLE1BRUEsSUFBR0EsUUFBUSxJQUFJLFdBQWYsRUFBMkI7QUFBQztBQUM5QnhILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxnQkFBZixFQUFnQyxDQUFDO0FBQ25DO0FBQ0gsS0FGSyxNQUVBLElBQUdBLFFBQVEsSUFBSSxpQkFBZixFQUFpQztBQUFDO0FBQ3BDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLENBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLGlCQUFmLEVBQWlDLENBQUM7QUFFdkMsS0FGSyxNQUVBLElBQUdBLFFBQVEsSUFBSSxtQkFBZixFQUFtQyxDQUFDO0FBRXpDLEtBRkssTUFFQSxJQUFHQSxRQUFRLElBQUksV0FBZixFQUEyQjtBQUFDO0FBQzlCeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLENBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLGVBQWYsRUFBK0I7QUFBQztBQUNsQ3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxDQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxhQUFmLEVBQTZCO0FBQUM7QUFDaEN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsQ0FBRCxFQUFJaEksYUFBYSxDQUFDbUksYUFBZCxDQUE0QmxGLE1BQWhDLENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUc0RSxRQUFRLElBQUksaUJBQWYsRUFBaUM7QUFBQztBQUNwQ3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxDQUFELEVBQUloSSxhQUFhLENBQUNtSSxhQUFkLENBQTRCQyxJQUFoQyxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHUCxRQUFRLElBQUksZUFBZixFQUErQjtBQUFDO0FBQ2xDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLG1CQUFmLEVBQW1DO0FBQUM7QUFDdEN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsQ0FBRCxFQUFJaEksYUFBYSxDQUFDbUksYUFBZCxDQUE0QkUsT0FBaEMsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR1IsUUFBUSxJQUFJLFlBQWYsRUFBNEI7QUFBQztBQUMvQnhILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxDQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUlILFFBQVEsSUFBSSxZQUFoQixFQUE4QjtBQUNoQ3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVDLElBQUlILFFBQVEsSUFBSSxvQkFBaEIsRUFBc0M7QUFBSztBQUM5Q3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGTSxNQUVBLElBQUlILFFBQVEsSUFBSSxtQkFBaEIsRUFBcUM7QUFBTTtBQUM5Q3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGTSxNQUVELElBQUdILFFBQVEsSUFBSSxpQkFBZixFQUFpQztBQUFDO0FBQ3BDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBSUgsUUFBUSxJQUFJLGtCQUFoQixFQUFvQztBQUFNO0FBQzVDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUMsSUFBSUgsUUFBUSxJQUFJLGlCQUFoQixFQUFtQztBQUFNO0FBQzVDLFVBQUlTLFNBQVMsR0FBR3JJLE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBSSxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxFQUFLTSxTQUFTLENBQUNDLFFBQVYsQ0FBbUJDLFNBQXhCLENBQS9DO0FBQ0gsS0FITSxNQUdBLElBQUlYLFFBQVEsSUFBSSxzQkFBaEIsRUFBd0M7QUFBTTtBQUNqRHhILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGTSxNQUVELElBQUdILFFBQVEsSUFBSSxnQkFBZixFQUFnQztBQUFDO0FBQ25DeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLGVBQWYsRUFBK0I7QUFBQztBQUNsQ3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxpQkFBZixFQUFpQyxDQUFDO0FBRXZDLEtBRkssTUFFQSxJQUFHQSxRQUFRLElBQUksY0FBZixFQUE4QjtBQUFDO0FBQ2pDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLG9CQUFmLEVBQW9DO0FBQUM7QUFDdkN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHSCxRQUFRLElBQUksYUFBZixFQUE2QjtBQUFDO0FBQ2hDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLG1CQUFmLEVBQW1DLENBQUM7QUFDdEM7QUFDQTtBQUNILEtBSEssTUFHQSxJQUFHQSxRQUFRLElBQUksVUFBZixFQUEwQixDQUFDO0FBRWhDLEtBRkssTUFFQSxJQUFHQSxRQUFRLElBQUksU0FBZixFQUF5QjtBQUFDO0FBQzVCLFVBQUkzSCxnQkFBZ0IsR0FBTUQsT0FBTyxDQUFDLG1CQUFELENBQWpDOztBQUNBLFVBQUl3SSxXQUFXLEdBQVd4SSxPQUFPLENBQUMsY0FBRCxDQUFqQzs7QUFDQUMsTUFBQUEsZ0JBQWdCLENBQUN5QixXQUFqQixHQUErQitHLGdDQUEvQixDQUFnRUQsV0FBVyxDQUFDRSxVQUFaLENBQXVCQyxNQUF2RjtBQUNILEtBSkssTUFJQSxJQUFHZixRQUFRLElBQUksYUFBZixFQUE2QjtBQUFDO0FBQ2hDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLGNBQWYsRUFBOEI7QUFBQztBQUNqQ3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxZQUFmLEVBQTRCO0FBQzlCO0FBQ0E7QUFDQXhILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FKSyxNQUlBLElBQUdILFFBQVEsSUFBSSxlQUFmLEVBQStCO0FBQ2pDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLGFBQWYsRUFBNkI7QUFDL0J4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHSCxRQUFRLElBQUksWUFBZixFQUE0QjtBQUFDO0FBQy9CeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLENBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLFdBQWYsRUFBMkIsQ0FBQztBQUVqQyxLQUZLLE1BRUEsSUFBR0EsUUFBUSxJQUFJLFlBQWYsRUFBNEI7QUFBQztBQUMvQnhILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxjQUFmLEVBQThCO0FBQUM7QUFDakN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHSCxRQUFRLElBQUksYUFBZixFQUE2QjtBQUFDO0FBQ2hDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLHNCQUFmLEVBQXNDLENBQUM7QUFFNUMsS0FGSyxNQUVBLElBQUdBLFFBQVEsSUFBSSxvQkFBWixJQUFvQ0EsUUFBUSxJQUFJLGNBQW5ELEVBQWtFO0FBQUM7QUFDckV4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHSCxRQUFRLElBQUksa0JBQWYsRUFBa0M7QUFBQztBQUNyQyxVQUFJZ0IsZUFBZSxHQUFHNUksT0FBTyxDQUFDLGtCQUFELENBQTdCOztBQUNBSSxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxFQUFLYSxlQUFlLENBQUNDLFNBQWhCLENBQTBCQyxNQUEvQixDQUEvQztBQUNILEtBSEssTUFHQSxJQUFHbEIsUUFBUSxJQUFJLHFCQUFmLEVBQXFDO0FBQUM7QUFDeEMsVUFBSWdCLGVBQWUsR0FBRzVJLE9BQU8sQ0FBQyxrQkFBRCxDQUE3Qjs7QUFDQUksTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsRUFBS2EsZUFBZSxDQUFDQyxTQUFoQixDQUEwQkUsTUFBL0IsQ0FBL0M7QUFDSCxLQUhLLE1BR0EsSUFBR25CLFFBQVEsSUFBSSx1QkFBZixFQUF1QztBQUFDO0FBQzFDeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLHVCQUFmLEVBQXVDO0FBQUM7QUFDMUN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHSCxRQUFRLElBQUksMkJBQWYsRUFBMkM7QUFBQztBQUM5Q3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxnQkFBZixFQUFnQztBQUFDO0FBQ25DeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLG1CQUFmLEVBQW1DO0FBQUM7QUFDdEN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsQ0FBRCxDQUEvQztBQUNILEtBRkssTUFFQSxJQUFHSCxRQUFRLElBQUksaUJBQWYsRUFBaUM7QUFBQztBQUNwQ3hILE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELENBQS9DO0FBQ0gsS0FGSyxNQUVBLElBQUdILFFBQVEsSUFBSSxpQkFBZixFQUFpQztBQUFDO0FBQ3BDLFVBQUlvQixTQUFTLEdBQUdoSixPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQUksTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsRUFBS2lCLFNBQVMsQ0FBQzdCLElBQVYsQ0FBZThCLElBQXBCLENBQS9DO0FBQ0gsS0FISyxNQUdBLElBQUdyQixRQUFRLElBQUksb0JBQWYsRUFBb0M7QUFDdEMsVUFBSXNCLGVBQWUsR0FBR2xKLE9BQU8sQ0FBQyxrQkFBRCxDQUE3Qjs7QUFDQUksTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsRUFBS21CLGVBQWUsQ0FBQ0wsU0FBaEIsQ0FBMEJNLFFBQS9CLENBQS9DO0FBQ0gsS0FISyxNQUdBLElBQUd2QixRQUFRLElBQUksZUFBZixFQUErQjtBQUNqQyxVQUFJUyxTQUFTLEdBQUdySSxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQUksTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsRUFBS00sU0FBUyxDQUFDQyxRQUFWLENBQW1CYyxTQUF4QixDQUEvQztBQUNILEtBSEssTUFHQSxJQUFHeEIsUUFBUSxJQUFJLGVBQWYsRUFBK0I7QUFDakMsVUFBSVMsU0FBUyxHQUFHckksT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0FJLE1BQUFBLGNBQWMsQ0FBQ3NCLFdBQWYsR0FBNkJxRyxpQkFBN0IsQ0FBK0MsQ0FBQyxFQUFELEVBQUtNLFNBQVMsQ0FBQ0MsUUFBVixDQUFtQmUsU0FBeEIsQ0FBL0M7QUFDSCxLQUhLLE1BR0EsSUFBR3pCLFFBQVEsSUFBSSxnQkFBZixFQUFnQztBQUFDO0FBQ25DeEgsTUFBQUEsY0FBYyxDQUFDc0IsV0FBZixHQUE2QnFHLGlCQUE3QixDQUErQyxDQUFDLEVBQUQsQ0FBL0M7QUFDSCxLQUZLLE1BRUEsSUFBR0gsUUFBUSxJQUFJLG9CQUFmLEVBQW9DO0FBQUM7QUFDdkN4SCxNQUFBQSxjQUFjLENBQUNzQixXQUFmLEdBQTZCcUcsaUJBQTdCLENBQStDLENBQUMsRUFBRCxDQUEvQztBQUNILEtBRkssTUFFQTtBQUNGdkUsTUFBQUEsT0FBTyxDQUFDLGNBQUQsQ0FBUDtBQUNIO0FBQ0osR0FoZDZCO0FBa2Q5QjhGLEVBQUFBLGVBQWUsRUFBRSwyQkFBVztBQUN4QixRQUFJLEtBQUtwRCxZQUFULEVBQ0ksT0FBTyxLQUFLQSxZQUFMLENBQWtCcUQsUUFBekI7QUFDUDtBQXJkNkIsQ0FBVCxDQUF6QjtBQXdkQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCbEosa0JBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOiDjOWMheWGheWHuuWUrueJqeWTgeeahOmdouadv1xuLy8gPGJyLz5DcmVhdGU6IDIwMTgtMTItMjQgMTY6NTA6MTRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgQmFja1BhY2tDb25zdCA9IHJlcXVpcmUoXCJiYWNrcGFja19jb25zdFwiKTtcbnZhciBNYWludWlDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xudmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbnZhciBCYWNrcGFja0V2ZW50ID0gcmVxdWlyZShcImJhY2twYWNrX2V2ZW50XCIpO1xudmFyIEp1bXBDb250cm9sbGVyID0gcmVxdWlyZShcImp1bXBfY29udHJvbGxlclwiKTtcbnZhciBUaXBzQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ0aXBzX2NvbnRyb2xsZXJcIilcbnZhciBHdWlkZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwiZ3VpZGVfY29udHJvbGxlclwiKTtcblxudmFyIEJhY2twYWNrQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIEJhY2twYWNrTW9kZWwgPSByZXF1aXJlKFwiYmFja3BhY2tfbW9kZWxcIik7XG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgQmFja3BhY2tNb2RlbCgpO1xuICAgICAgICB0aGlzLm1vZGVsLmluaXRDb25maWcoKTtcbiAgICB9LFxuXG4gICAgLy8g6L+U5Zue5b2T5YmN55qEbW9kZWxcbiAgICBnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM55uR5ZCs5LqL5Lu2XG4gICAgcmVnaXN0ZXJFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9naW5fZXZlbnRfc3VjY2VzcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luX2V2ZW50X3N1Y2Nlc3MgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MsIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SW5pdFByb3RvKClcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZV9saW5rX2dhbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZV9saW5rX2dhbWUgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JFX0xJTktfR0FNRSwgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgR3VpZGVDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWRlX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCFHdWlkZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5pc0luR3VpZGUoKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuTWFpbldpbmRvdyhmYWxzZSkgIC8vIOaWree6v+mHjei/nuWFiOWFs+aOieiDjOWMheeql+S9k1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5yZXF1ZXN0SW5pdFByb3RvKClcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNTAwLCB0aGlzLm9uMTA1MDApO1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTA1MDEsIHRoaXMub24xMDUwMSk7XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDUxMCwgdGhpcy5vbjEwNTEwKTsgICAgLy/lop7liqDnianlk4HpgJrnn6VcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNTExLCB0aGlzLm9uMTA1MTEpOyAgICAvL+WIoOmZpOeJqeWTgemAmuefpVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTA1MTIsIHRoaXMub24xMDUxMik7ICAgIC8v5Yi35paw54mp5ZOB6YCa55+lXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDUxNSwgdGhpcy5oYW5kbGUxMDUxNSk7Ly/kvb/nlKjnianlk4FcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNTIyLCB0aGlzLmhhbmRsZTEwNTIyKTsvL+WHuuWUruiDjOWMheeJqeWTgVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTA1MjMsIHRoaXMuaGFuZGxlMTA1MjMpO1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTEwMDgsIHRoaXMuaGFuZGxlMTEwMDgpO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgfSxcblxuICAgIC8vIOivt+axguinkuiJsumBk+WFt+WIneWni+aVsOaNrlxuICAgIHJlcXVlc3RJbml0UHJvdG86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gdGhpcy5zZW5kZXIxMDUwMCgpXG4gICAgICAgIC8vIHRoaXMuc2VuZGVyMTA1MDEoKVxuICAgIH0sXG5cbiAgICBzZW5kZXIxMDUwMDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDUwMCwge30pO1xuICAgIH0sXG5cbiAgICBzZW5kZXIxMDUwMTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDUwMSwge30pO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbpgZPlhbfog4zljIVcbiAgICBvbjEwNTAwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBkYXRhLmJhZ19jb2RlID0gQmFja1BhY2tDb25zdC5CYWdfQ29kZS5CQUNLUEFDS1xuICAgICAgICB0aGlzLm1vZGVsLmluaXRJdGVtTGlzdChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJboo4XlpIfooqvmm51cbiAgICBvbjEwNTAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBkYXRhLmJhZ19jb2RlID0gQmFja1BhY2tDb25zdC5CYWdfQ29kZS5FUVVJUFNcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0SXRlbUxpc3QoZGF0YSlcbiAgICB9LFxuXG4gICAgLy8g5aKe5Yqg5LiA5Liq54mp5ZOBXG4gICAgb24xMDUxMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgY2MubG9nKFwi5aKe5Yqg5LiA5Liq54mp5ZOBXCIsZGF0YSlcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVCYWdJdGVtc051bShkYXRhKVxuICAgIH0sXG5cbiAgICAvLyDliKDpmaTkuIDkuKrnianlk4FcbiAgICBvbjEwNTExOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBjYy5sb2coXCLliKDpmaTkuIDkuKrnianlk4FcIixkYXRhKVxuICAgICAgICB0aGlzLm1vZGVsLmRlbGV0ZUJhZ0l0ZW1zKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIOWIt+aWsOS4gOS4queJqeWTgVxuICAgIG9uMTA1MTI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlQmFnSXRlbXNOdW0oZGF0YSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gZGVzYzrlh7rllK7nianlk4FcbiAgICAvLyBAc3RvcmFnZTpcbiAgICAvLyBAYXJnczpcbiAgICAvLyBAcmV0dXJuIFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHNlbmRlcjEwNTIyOmZ1bmN0aW9uKHN0b3JhZ2UsYXJncyl7XG4gICAgICAgIHZhciBwcm90b2NhbCA9e307XG4gICAgICAgIHByb3RvY2FsLnN0b3JhZ2UgPSBzdG9yYWdlO1xuICAgICAgICBwcm90b2NhbC5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTA1MjIscHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxMDUyMjpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZykgICBcbiAgICAgICAgaWYodGhpcy5iYXRjaF91c2UpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkJhdGNoVXNlSXRlbVZpZXcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuc2VsbF93aW5kb3cpey8v5Ye65ZSu5oiQ5Yqf5LmL5ZCO5YWz6Zet5Ye65ZSu6Z2i5p2/XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWxsV2luZG93KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlR2lmdFNlbGVjdFBhbmVsKCk7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoQmFja3BhY2tFdmVudC5TZWxsX0dvb2RzX1N1Y2Nlc3MpO1xuICAgIH0sXG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBkZXNjOuS9v+eUqOeJqeWTgVxuICAgIC8vIEBpZDpcbiAgICAvLyBAcXVhbnRpdHk6XG4gICAgLy8gQGFyZ3M6XG4gICAgLy8gQHJldHVybiBcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBzZW5kZXIxMDUxNTpmdW5jdGlvbihpZCxxdWFudGl0eSxhcmdzKXtcbiAgICAgICAgdmFyIHByb3RvY2FsID17fVxuICAgICAgICBwcm90b2NhbC5pZCA9IGlkXG4gICAgICAgIHByb3RvY2FsLnF1YW50aXR5ID0gcXVhbnRpdHlcbiAgICAgICAgcHJvdG9jYWwuYXJncyA9IGFyZ3MgfHwge307XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEwNTE1LHByb3RvY2FsKVxuICAgIH0sXG5cbiAgICBoYW5kbGUxMDUxNTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmKGRhdGEuZmxhZyA9PSAxKXtcbiAgICAgICAgICAgIHRoaXMub3BlbkJhdGNoVXNlSXRlbVZpZXcoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUdpZnRTZWxlY3RQYW5lbCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNlbmRlcjEwNTIzOmZ1bmN0aW9uKGlkLG51bSl7XG4gICAgICAgIHZhciBwcm90b2NhbCA9e307XG4gICAgICAgIHByb3RvY2FsLmlkID0gaWQ7XG4gICAgICAgIHByb3RvY2FsLm51bSA9IG51bTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTA1MjMscHJvdG9jYWwpO1xuICAgIH0sXG4gICAgIFxuICAgIGhhbmRsZTEwNTIzOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYoZGF0YS5mbGFnID09IDEpe1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShCYWNrcGFja0V2ZW50LkNvbXBvc2VfR29vZHNfU3VjY2Vzcyk7XG4gICAgICAgICAgICBUaXBzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNob3dCYWNrUGFja0NvbXBUaXBzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+iDjOWMheeijueJh+WQiOaIkFxuICAgIHNlbmRlcjExMDA4OmZ1bmN0aW9uKGJpZCxudW0pe1xuICAgICAgICB2YXIgcHJvdG8gPSB7fTtcbiAgICAgICAgcHJvdG8uYmlkID0gYmlkO1xuICAgICAgICBwcm90by5udW0gPSBudW07XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMDA4LCBwcm90byk7XG4gICAgfSxcblxuICAgIGhhbmRsZTExMDA4OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEJhY2twYWNrRXZlbnQuQ29tcG9zZV9CYWNrUGFja19TdWNjZXNzKTtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIFRpcHNDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2hvd0JhY2tQYWNrQ29tcFRpcHMoZmFsc2UpO1xuICAgICAgICBUaXBzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNob3dDb21wQ2hvb3NlVGlwcyhmYWxzZSk7XG4gICAgICAgIGlmKGRhdGEucmVzdWx0ID09IDEpe1xuICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICAgICAgICBmb3IodmFyIGkgaW4gZGF0YS5wYXJ0bmVycyl7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSBkYXRhLnBhcnRuZXJzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBpbmZvID0gQ29uZmlnLnBhcnRuZXJfZGF0YS5kYXRhX3BhcnRuZXJfYmFzZVt2LnBhcnRuZXJfYmlkXTtcbiAgICAgICAgICAgICAgICBpdGVtc1twYXJzZUludChpKV0gPSB7fTtcbiAgICAgICAgICAgICAgICBpdGVtc1twYXJzZUludChpKV0uYmlkID0gdi5wYXJ0bmVyX2JpZDtcbiAgICAgICAgICAgICAgICBpdGVtc1twYXJzZUludChpKV0uc3RhciA9IGluZm8uaW5pdF9zdGFyO1xuICAgICAgICAgICAgICAgIGl0ZW1zW3BhcnNlSW50KGkpXS5jYW1wX3R5cGUgPSBpbmZvLmNhbXBfdHlwZTtcbiAgICAgICAgICAgICAgICBpdGVtc1twYXJzZUludChpKV0uc2hvd190eXBlID0gTWFpbnVpQ29uc3QuaXRlbV9leGhpYml0aW9uX3R5cGUucGFydG5lcl90eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5HZXRJdGVtVmlldyh0cnVlLCBpdGVtcywgMClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiDmiZPlvIDog4zljIXkuLvlhaXlj6NcbiAgICAgKiBAcGFyYW0geyp9IHN0YXR1cyBcbiAgICAgKiBAcGFyYW0geyp9IHBhcmFtcyBcbiAgICAgKi9cbiAgICBvcGVuTWFpbldpbmRvdzogZnVuY3Rpb24gKHN0YXR1cywgcGFyYW1zKSB7XG4gICAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYWNrcGFja193aW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2twYWNrX3dpbi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFja3BhY2tfd2luID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJhY2twYWNrX3dpbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrcGFja193aW4gPSBVdGlscy5jcmVhdGVDbGFzcyhcImJhY2twYWNrX3dpbmRvd1wiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iYWNrcGFja193aW4ub3BlbihwYXJhbXMpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICog5pi+56S66YGT5YW35o+Q56S65L+h5oGvXG4gICAgICogQGF1dGhvciB6aGFuZ2h1eGluZyAyMDE5LTAxLTIxXG4gICAgICogQHBhcmFtICB7W3R5cGVdfSBzdGF0dXMgICAgICBbZGVzY3JpcHRpb25dXG4gICAgICogQHBhcmFtICB7W3R5cGVdfSBkYXRhICAgICAgICDlj6/ku6XmmK9iaWQsIOaIluiAhemFjee9ruihqOadoeebrlxuICAgICAqIEBwYXJhbSAge1t0eXBlXX0gZXh0ZW5kX2RhdGEgW2Rlc2NyaXB0aW9uXVxuICAgICAqIEBwYXJhbSAge1t0eXBlXX0gaXRlbV9saXN0ICAg6ZyA6KaB55qE54mp5ZOB5YiX6KGoXG4gICAgICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAgICovXG4gICAgb3BlblRpcHNTb3VyY2U6IGZ1bmN0aW9uIChzdGF0dXMsIGRhdGEsIGV4dGVuZF9kYXRhLCBpdGVtX2xpc3QpIHtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgaWYoR3VpZGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuaXNJbkd1aWRlKCkpcmV0dXJuO1xuXG4gICAgICAgICAgICBpZih0eXBlb2YoZGF0YSkgPT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICAgICAgZGF0YSA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGRhdGEgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRpcHNfc291cmNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIFRpcHNTb3VyY2UgPSByZXF1aXJlKFwidGlwc19zb3VyY2Vfd2luZG93XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMudGlwc19zb3VyY2UgPSBuZXcgVGlwc1NvdXJjZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmICh0eXBlb2YgZGF0YSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyAgICAgZGF0YSA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB2YXIgb3Blbl9wYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIG9wZW5fcGFyYW1zLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgb3Blbl9wYXJhbXMuZXh0ZW5kX2RhdGEgPSBleHRlbmRfZGF0YTtcbiAgICAgICAgICAgIG9wZW5fcGFyYW1zLml0ZW1fbGlzdCA9IGl0ZW1fbGlzdDtcbiAgICAgICAgICAgIHRoaXMudGlwc19zb3VyY2Uub3BlbihvcGVuX3BhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aXBzX3NvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGlwc19zb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpcHNfc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXNjOuWHuuWUrueJqeWTgSAgXG4gICAgICovXG4gICAgb3Blbkl0ZW1TZWxsUGFuZWw6ZnVuY3Rpb24oc3RhdHVzLCBnb29kc192bywgYmFnX2NvZGUpe1xuICAgICAgICBpZihzdGF0dXMgPT0gZmFsc2Upe1xuICAgICAgICAgICAgaWYodGhpcy5pdGVtX3NlbGxfcGFuZWwgIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX3NlbGxfcGFuZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fc2VsbF9wYW5lbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdmFyIGJhZ19jb2RlID0gYmFnX2NvZGUgfHwgQmFja1BhY2tDb25zdC5CYWdfQ29kZS5CQUNLUEFDSztcbiAgICAgICAgICAgIGlmKHRoaXMuaXRlbV9zZWxsX3BhbmVsID09IG51bGwpe1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9zZWxsX3BhbmVsID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJpdGVtX3NlbGxfcGFuZWxfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLml0ZW1fc2VsbF9wYW5lbC5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX3NlbGxfcGFuZWwub3BlbihbZ29vZHNfdm8sIGJhZ19jb2RlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLVxuICAgIC8vIC0tZGVzYzrmiZPlvIDmibnph4/kvb/nlKjnianlk4Hnqpflj6NcbiAgICAvLyAtLUBpdGVtOuW/hemhu+aYr+eJqeWTgeecn+aYr+aVsOaNrlxuICAgIC8vIC0tQHR5cGU65Ye65ZSu5oiW6ICF5L2/55SoXG4gICAgLy8gLS1Ac2VsZWN0X3ZvIDroh6rpgInnpLzljIXngrnlh7vmibnph4/kvb/nlKjopoHkvKDpgInkuK3nmoTnianlk4FpZOWIl+ihqOi/h+adpVxuICAgIC8vIC0tQHJldHVybiBcbiAgICAvLyAtLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tXG4gICAgb3BlbkJhdGNoVXNlSXRlbVZpZXc6ZnVuY3Rpb24oc3RhdHVzLCBpdGVtLCB0eXBlLHNlbGVjdF92byl7XG4gICAgICAgIGlmKHN0YXR1cyA9PSBmYWxzZSl7XG4gICAgICAgICAgICBpZih0aGlzLmJhdGNoX3VzZSAhPSBudWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJhdGNoX3VzZS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hfdXNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZihpdGVtID09IG51bGwgfHwgaXRlbS5jb25maWcgPT0gbnVsbClyZXR1cm47XG4gICAgICAgICAgICBpZih0aGlzLmJhdGNoX3VzZSA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJhdGNoX3VzZSA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiYmFja3BhY2tfYmF0Y2h1c2Vfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmJhdGNoX3VzZSAmJiB0aGlzLmJhdGNoX3VzZS5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXRjaF91c2Uub3BlbihbaXRlbSwgdHlwZSxzZWxlY3Rfdm9dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiDmiZPlvIDlh7rllK7nianlk4HnlYzpnaLlsZXnpLpcbiAgICAgKiBhdXRob3I6e2F1dGhvcn1cbiAgICAgKiBAc3RhdHVzOlxuICAgICAqIEBsaXN0OiBcbiAgICAgKiByZXR1cm5cbiAgICAgKi9cbiAgICBvcGVuU2VsbFdpbmRvdzpmdW5jdGlvbihzdGF0dXMsIGJhZ19jb2RlLCBsaXN0KXtcbiAgICAgICAgaWYoc3RhdHVzID09IGZhbHNlKXtcbiAgICAgICAgICAgIGlmKHRoaXMuc2VsbF93aW5kb3cgIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxsX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsbF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGJhZ19jb2RlID0gYmFnX2NvZGUgfHwgQmFja1BhY2tDb25zdC5CYWdfQ29kZS5CQUNLUEFDSztcbiAgICAgICAgICAgIGlmKGxpc3QgPT0gbnVsbCB8fCBVdGlscy5uZXh0KGxpc3QpID09IG51bGwpcmV0dXJuO1xuICAgICAgICAgICAgaWYodGhpcy5zZWxsX3dpbmRvdyA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGxfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJiYWNrcGFja19zZWxsX3dpbmRvd1wiLHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5zZWxsX3dpbmRvdy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxsX3dpbmRvdy5vcGVuKGJhZ19jb2RlLCBsaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBvcGVuR2lmdFNlbGVjdFBhbmVsOmZ1bmN0aW9uKGdpZnRfdm8pe1xuICAgICAgICBpZih0aGlzLmdpZnRfcGFuZWwgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmdpZnRfcGFuZWwgPSBVdGlscy5jcmVhdGVDbGFzcyhcImdpZnRfc2VsZWN0X3dpbmRvd1wiLHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuZ2lmdF9wYW5lbCAmJiB0aGlzLmdpZnRfcGFuZWwuaXNPcGVuKCkgPT0gZmFsc2Upe1xuICAgICAgICAgICAgdGhpcy5naWZ0X3BhbmVsLm9wZW4oZ2lmdF92byk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VHaWZ0U2VsZWN0UGFuZWw6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5naWZ0X3BhbmVsICE9IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5naWZ0X3BhbmVsLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmdpZnRfcGFuZWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6Lez6L2s54mp5ZOB5p2l5rqQ55qEXG4gICAgZ290b0l0ZW1Tb3VyY2VzOiBmdW5jdGlvbiAoZXZ0X3R5cGUsIGV4dGVuZCwgYmlkLCBuZWVkX2l0ZW1fbGlzdCkge1xuICAgICAgICBpZiAoZXZ0X3R5cGUgPT0gbnVsbCB8fCBleHRlbmQgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIGlmIChldnRfdHlwZSA9PSBcImV2dF9wYXJ0bmVyX2NhbGxcIikgeyAgIC8v5Y+s5ZSkXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxXSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X21hbGxfYnV5XCIpey8v5ZWG5Z+OXG4gICAgICAgICAgICBpZihleHRlbmRbMF0pe1xuICAgICAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE1LCBleHRlbmRbMF0sIGJpZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF92aXBcIil7Ly92aXBcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzcsIFZJUFRBQkNPTlNULlZJUCwgZXh0ZW5kWzBdXSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X2Jvc3NcIil7Ly/kuKrkurpCT1NT5oyR5oiYXG5cbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfd29ybGRfYm9zc1wiKXsvL+S4lueVjGJvc3NcblxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF90b3dlclwiKXsvL+aYn+WRveWhlFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTJdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZGl2aW5hdGlvblwiKXsvL+WNoOWNnFxuICAgICAgICAgICAgLy8gQXVndXJ5Q29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOm9wZW5NYWluVmlldyh0cnVlKVxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9kdW5fY2hhcHRlclwiKXsvL+WJp+aDheWJr+acrFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNV0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9nb2xkX21hcmtldFwiKXsvL+mHkeW4geW4guWculxuXG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X3NpbHZlcl9tYXJrZXRcIil7Ly/pk7bluIHluILlnLpcblxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9hcmVuYVwiKXsvL+ernuaKgOWcuuaMkeaImFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbM10pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9hcmVuYV9ib3hcIil7Ly/nq57mioDlnLrlrp3nrrFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzNdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfYmFnX2VxbVwiKXsvL+ijheWkh+iDjOWMhVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbOCwgQmFja1BhY2tDb25zdC5pdGVtX3RhYl90eXBlLkVRVUlQU10pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9iYWdfcGFydG5lclwiKXsvL+iLsembhOiDjOWMhVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbOCwgQmFja1BhY2tDb25zdC5pdGVtX3RhYl90eXBlLkhFUk9dKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZHVuX3N0b25lXCIpey8v5a6d55+z5Ymv5pysXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxN10pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9iYWdfc3Rhcl9saWZlXCIpey8v54m55q6K6IOM5YyFXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs4LCBCYWNrUGFja0NvbnN0Lml0ZW1fdGFiX3R5cGUuU1BFQ0lBTF0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9mcmllbmRcIil7Ly/lpb3lj4tcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzRdKTtcbiAgICAgICAgfWVsc2UgaWYgKGV2dF90eXBlID09IFwiZXZ0X2xlYWd1ZVwiKSB7XG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2dF90eXBlID09IFwiZXZ0X2xlYWd1ZV9kdW5nZW9uXCIpIHsgICAgLy/lhazkvJrlia/mnKxcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzMxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZ0X3R5cGUgPT0gXCJldnRfbGVhZ3VlX2RvbmF0ZVwiKSB7ICAgICAvL+WFrOS8muaNkOeMrlxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTNdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfbGVhZ3VlX3NhaWxcIil7Ly/lhazkvJrov5zoiKpcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE4XSk7XG4gICAgICAgIH1lbHNlIGlmIChldnRfdHlwZSA9PSBcImV2dF9sZWFndWVfc2tpbGxcIikgeyAgICAgLy/lhazkvJrmioDog71cbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzMyXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZ0X3R5cGUgPT0gXCJldnRfbGVhZ3VlX3Nob3BcIikgeyAgICAgLy/lhazkvJrllYblupdcbiAgICAgICAgICAgIHZhciBNYWxsQ29uc3QgPSByZXF1aXJlKFwibWFsbF9jb25zdFwiKTtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE1LCBNYWxsQ29uc3QuTWFsbFR5cGUuVW5pb25TaG9wXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZ0X3R5cGUgPT0gXCJldnRfbGVhZ3VlX3JlZHBhY2tldFwiKSB7ICAgICAvL+WFrOS8mue6ouWMhVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMzNdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfbGVhZ3VlX3dhclwiKXsvL+WFrOS8muaImFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjFdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZ29kX3dvcmxkXCIpey8v56We55WM5YaS6ZmpXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFszNF0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9sZWFndWVfaGVscFwiKXsvL+W4ruWGheaxguWKqVxuXG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X2V4Y2hhbmdlXCIpey8v5YWR5o2iXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFszNV0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9hcmVuYV9jaGFtcGlvblwiKXsvL+WGoOWGm+i1m1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMzZdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZW5kbGVzc1wiKXsvL+aXoOWwveivleeCvFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDNdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfcGFydG5lcl9wb3dlclwiKXsvL+elnuWwhuWPrOWUpFxuICAgICAgICAgICAgLy8gdmFyIFBhcnRuZXJzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIC8vIFBhcnRuZXJzdW1tb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkdvZFBhcnRuZXJTdW1tb25WaWV3KHRydWUpXG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X2hlcm9cIil7Ly/npZ7lsIblj6zllKRcblxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9wZXRcIil7Ly/okIzlrqBcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIEJhdHRsZUNvbnN0ICAgICAgICAgPSByZXF1aXJlKFwiYmF0dGxlX2NvbnN0XCIpO1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnJlcXVlc3RPcGVuQmF0dGxlUmVsZXZhbmNlV2luZG93KEJhdHRsZUNvbnN0LkZpZ2h0X1R5cGUuRXNjb3J0KTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfc2hlbmdxaVwiKXsvL+Wco+WZqFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjBdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfeGluZ21pbmdcIil7Ly/mmJ/lkb1cbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzEyXSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X3ByaW11c1wiKXtcbiAgICAgICAgICAgIC8vIHZhciBQcmltdXNDb250cm9sbGVyID0gcmVxdWlyZShcInByaW11c19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgLy8gUHJpbXVzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5QcmltdXNNYWluV2luZG93KHRydWUpO1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjddKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfc2t5bGFkZGVyXCIpe1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjldKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfc2t5c2hvcFwiKXtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzM3XSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X2NoYW5nZVwiKXsvL+WFheWAvFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbN10pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF95dWVrZVwiKXsvL+aciOWNoVxuXG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X2ludmVzdFwiKXsvL+aKlei1hOiuoeWIklxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMzhdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZ3Jvd2Z1bmRcIil7Ly/miJDplb/otYTph5FcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzM5XSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X3BhcnRuZXJcIil7Ly/miZPlvIDoi7Hpm4TnlYzpnaJcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE5XSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X3BhcnRuZXJfZ2Vtc3RvbmVcIil7Ly/miZPlvIDlrp3nn7PnlYzpnaJcblxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9sdWNreV90cmVhc3VyZVwiIHx8IGV2dF90eXBlID09IFwiZXZ0X3RyZWFzdXJlXCIpey8v5omT5byA5bm46L+Q5o6i5a6dXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs0MF0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9yZWNydWl0X2hpZ2hcIil7Ly/lhYjnn6Xlj6zllKQg5YWI55+l5q6/XG4gICAgICAgICAgICB2YXIgU2VlcnBhbGFjZUNvbnN0ID0gcmVxdWlyZShcInNlZXJwYWxhY2VfY29uc3RcIilcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI0LCBTZWVycGFsYWNlQ29uc3QuVGFiX0luZGV4LlN1bW1vbl0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9oZXJvX2NvbnZlcnNpb25cIil7Ly/lhYjnn6Xlj6zllKQg6Iux6ZuE6L2s5o2iXG4gICAgICAgICAgICB2YXIgU2VlcnBhbGFjZUNvbnN0ID0gcmVxdWlyZShcInNlZXJwYWxhY2VfY29uc3RcIilcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI0LCBTZWVycGFsYWNlQ29uc3QuVGFiX0luZGV4LkNoYW5nZV0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9wYXJ0bmVyX3N5bnRoZXNpc1wiKXsvL+iejeWQiOelreWdm1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjNdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfcGFydG5lcl9kZWNvbXBvc2VcIil7Ly/npa3npYDlsI/lsYtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzIyXSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X3BhcnRuZXJfZXFtX3N5bnRoZXNpc1wiKXsvL+mUu+mAoOWxi1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjZdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZXhwZWRpdGlvblwiKXsvL+iLsembhOi/nOW+gVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjVdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfZ3JvY2VyeV9zdG9yZVwiKXsvL+adgui0p+W6l1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNl0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9kYWlseV9xdWVzdFwiKXsvL+aXpeW4uOS7u+WKoei/m+W6puWuneeuseiOt+W+l++8gVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDFdKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X3R5cGUgPT0gXCJldnRfYWNoaWV2ZW1lbnRcIil7Ly/lrozmiJDmiJDlsLHku7vliqHojrflvpfvvIFcbiAgICAgICAgICAgIHZhciBUYXNrQ29uc3QgPSByZXF1aXJlKFwidGFza19jb25zdFwiKTtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzQxLCBUYXNrQ29uc3QudHlwZS5mZWF0XSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF90eXBlID09IFwiZXZ0X3J1bmVfc3ludGhlc2lzXCIpe1xuICAgICAgICAgICAgdmFyIEZvcmdlSG91c2VDb25zdCA9IHJlcXVpcmUoXCJmb3JnZWhvdXNlX2NvbnN0XCIpO1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjYsIEZvcmdlSG91c2VDb25zdC5UYWJfSW5kZXguQXJ0aWZhY3RdKVxuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9za2lsbHNob3BcIil7XG4gICAgICAgICAgICB2YXIgTWFsbENvbnN0ID0gcmVxdWlyZShcIm1hbGxfY29uc3RcIik7XG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLlNraWxsU2hvcF0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9lbGl0ZXNob3BcIil7XG4gICAgICAgICAgICB2YXIgTWFsbENvbnN0ID0gcmVxdWlyZShcIm1hbGxfY29uc3RcIik7XG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLkVsaXRlU2hvcF0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9lbGl0ZW1hdGNoXCIpey8v57K+6Iux6LWbXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyOF0pO1xuICAgICAgICB9ZWxzZSBpZihldnRfdHlwZSA9PSBcImV2dF9lbGVtZW50X3RlbXBsZVwiKXsvL+WFg+e0oOWco+auv1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDJdKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZShcIuaaguaXoOi3s+i9rO+8jOaIluiAhei/mOayoea3u+WKoO+8gVwiKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldEJhY2twYWNrUm9vdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmJhY2twYWNrX3dpbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhY2twYWNrX3dpbi5yb290X3duZDtcbiAgICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQmFja3BhY2tDb250cm9sbGVyO1xuIl19