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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/mail/view/mail_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, 'b221e524RJHIreW/2YcvFU5', 'mail_window');
// Scripts/mod/mail/view/mail_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
//      竖版邮件
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var MailController = require("mail_controller");
 
var CommonScrollView = require("common_scrollview");
 
var MailCell = require("mail_cell");
 
var MailEvent = require("mail_event");
 
var MailWindow = cc.Class({
  "extends": CommonWindowTab,
  ctor: function ctor() {
    this.path = PathTool.getPrefabPath("mail", "mail_window");
    this.model = MailController.getInstance().getModel();
    this.ctrl = MailController.getInstance();
    this.win_type = WinType.Full;
    this.tab_info_list = [{
      label: Utils.TI18N("邮件"),
      index: 1,
      status: true
    } // { label: Utils.TI18N("公告"), index: 2, status: true }
    ];
    this.title_str = Utils.TI18N("邮箱");
    this.scroll_width = 624;
    this.scroll_height = 570;
    this.cur_index = 1;
  },
  initPanel: function initPanel() {
    this.main_container = this.root_wnd.getChildByName("main_container");
 
    if (this.panel == null) {
      this.loadRes(this.path, function (res_object) {
        var panel = res_object;
        this.createPanel(panel);
      }.bind(this));
    }
  },
  createPanel: function createPanel(panel) {
    this.panel = panel;
    this.panel.setParent(this.container);
    this.panel_container = this.panel.getChildByName("main_container");
    this.scrollCon = this.panel_container.getChildByName("scrollCon");
    this.scroll_bg = this.scrollCon.getChildByName("background");
    this.del_btn = this.panel_container.getChildByName("del_btn");
    this.get_btn = this.panel_container.getChildByName("get_btn");
    this.del_btn.active = this.del_btn_bool != null ? this.del_btn_bool : true;
    this.get_btn.active = this.get_btn_bool != null ? this.get_btn_bool : true;
    var scroll_view_size = this.scrollCon.getContentSize();
    this.scroll_con.active = false;
    var scroll_view_size = cc.size(622, 696);
    var setting = {
      item_class: MailCell,
      // 单元类
      start_x: 5.5,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: 0,
      // 第一个单元的Y起点
      space_y: 2,
      // y方向的间隔
      item_width: 610,
      // 单元的尺寸width
      item_height: 124,
      // 单元的尺寸height
      row: 0,
      // 行数,作用于水平滚动类型
      col: 1,
      // 列数,作用于垂直滚动类型
      once_num: 1,
      need_dynamic: true
    };
    this.item_scrollview = new CommonScrollView();
    this.item_scrollview.createScroll(this.scrollCon, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5));
    this.del_btn.on(cc.Node.EventType.TOUCH_END, function (event) {
      var list = this.model.getHasReadNonRewardList();
      MailController.getInstance().deletMailSend(list);
    }, this);
    this.get_btn.on(cc.Node.EventType.TOUCH_END, function (event) {
      MailController.getInstance().getAllGoods();
    }, this);
    this.selectedTabCallBack(this.cur_index);
  },
  registerEvent: function registerEvent() {
    //更新邮件
    if (this.update_list == null) {
      this.update_list = gcore.GlobalEvent.bind(MailEvent.UPDATE_ITEM, function () {
        if (this.cur_index == 1) this.selectedTabCallBack(this.cur_index);
      }.bind(this));
    } //更新公告
    // if (this.update_notice == null) {
    //     this.update_notice = gcore.GlobalEvent.bind(MailEvent.UPDATE_NOTICE, (function (flag, data) {
    //         if (this.cur_index == 2)
    //             this.selectedTabCallBack(this.cur_index);
    //     }).bind(this))
    // }
    //更新红点状态
 
 
    this.addGlobalEvent(MailEvent.UPDATEREDSTATUS, function (bid, num) {
      this.updateRedStatus(bid, num);
    }, this); //读取一封邮件的返回
 
    this.addGlobalEvent(MailEvent.READ_MAIL_INFO, function (key) {
      if (this.select_cellitem) {
        var data = this.select_cellitem.getData();
 
        if (data) {
          var item_key = Utils.getNorKey(data.id || 0, data.srv_id || "");
 
          if (item_key == key) {
            this.select_cellitem.updateIconStatus();
          }
        }
      }
    }, this);
  },
  selectedTabCallBack: function selectedTabCallBack(index) {
    this.cur_index = index;
    if (this.panel_container == null) return;
 
    if (index == 1) {
      if (this.get_btn) {
        this.get_btn.active = true;
      } else {
        this.get_btn_bool = true;
      }
 
      if (this.del_btn) {
        this.del_btn.active = true;
      } else {
        this.del_btn_bool = true;
      }
 
      var list = [];
      var array = this.model.getAllMailArray();
 
      for (var i = 0; i < array.length; i++) {
        list.push(array[i]);
      }
 
      this.scrollCon.setContentSize(cc.size(622, 696));
      this.scroll_bg.setContentSize(cc.size(622, 711));
      this.scrollCon.setPosition(0, 32);
      this.item_scrollview.resetSize(this.scrollCon.getContentSize(), cc.v2(0, 0));
      this.empty_con.active = list.length == 0;
      this.empty_label.string = Utils.TI18N("暂时没有邮件");
      this.item_scrollview.setData(list, function (cell) {
        MailController.getInstance().openMailInfo(true, cell.getData());
        this.select_cellitem = cell;
      }.bind(this));
    } else if (index == 2) {
      if (this.get_btn) {
        this.get_btn.active = false;
      } else {
        this.get_btn_bool = false;
      }
 
      if (this.del_btn) {
        this.del_btn.active = false;
      } else {
        this.del_btn_bool = false;
      }
 
      var list = []; // var array = this.model.getNoticeArray();
      // for (var i = 0; i < array.length; i++) {
      //     list.push(array[i]);
      // }
 
      this.scrollCon.setContentSize(cc.size(622, 775));
      this.scroll_bg.setContentSize(cc.size(622, 775));
      this.scrollCon.setPosition(0, 0);
      this.item_scrollview.resetSize(cc.size(622, 755), cc.v2(0, -28));
      this.empty_con.active = list.length == 0;
      this.empty_label.string = Utils.TI18N("暂时没有公告");
      this.item_scrollview.setData(list, function (cell) {
        MailController.getInstance().openMailInfo(true, cell);
      });
    }
  },
  openRootWnd: function openRootWnd(index) {
    index = index || 1;
    this.setSelecteTab(index, true);
    this.updateRedStatus();
  },
  //更新红点
  updateRedStatus: function updateRedStatus(bid, num) {
    if (bid == null) {
      //邮件,公告
      for (var i = 1; i <= 1; i++) {
        var count = this.model.getRedSum(i);
 
        if (count == null) {
          count = 0;
        }
 
        this.setTabTipsII(count, i);
      }
    } else {
      bid = 1;
      num = num || 0;
      this.setTabTipsII(num, bid);
    }
  },
  closeCallBack: function closeCallBack() {
    if (this.update_list) {
      gcore.GlobalEvent.unbind(this.update_list);
      this.update_list = null;
    }
 
    if (this.update_notice) {
      gcore.GlobalEvent.unbind(this.update_notice);
      this.update_notice = null;
    }
 
    if (this.item_scrollview) {
      this.item_scrollview.DeleteMe();
    }
 
    this.item_scrollview = null;
    this.ctrl.openMailUI(false);
  }
});
module.exports = MailWindow;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxtYWlsXFx2aWV3XFxtYWlsX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJNYWlsQ29udHJvbGxlciIsIkNvbW1vblNjcm9sbFZpZXciLCJNYWlsQ2VsbCIsIk1haWxFdmVudCIsIk1haWxXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQ29tbW9uV2luZG93VGFiIiwiY3RvciIsInBhdGgiLCJnZXRQcmVmYWJQYXRoIiwibW9kZWwiLCJnZXRJbnN0YW5jZSIsImdldE1vZGVsIiwiY3RybCIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJ0YWJfaW5mb19saXN0IiwibGFiZWwiLCJVdGlscyIsIlRJMThOIiwiaW5kZXgiLCJzdGF0dXMiLCJ0aXRsZV9zdHIiLCJzY3JvbGxfd2lkdGgiLCJzY3JvbGxfaGVpZ2h0IiwiY3VyX2luZGV4IiwiaW5pdFBhbmVsIiwibWFpbl9jb250YWluZXIiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwicGFuZWwiLCJsb2FkUmVzIiwicmVzX29iamVjdCIsImNyZWF0ZVBhbmVsIiwiYmluZCIsInNldFBhcmVudCIsImNvbnRhaW5lciIsInBhbmVsX2NvbnRhaW5lciIsInNjcm9sbENvbiIsInNjcm9sbF9iZyIsImRlbF9idG4iLCJnZXRfYnRuIiwiYWN0aXZlIiwiZGVsX2J0bl9ib29sIiwiZ2V0X2J0bl9ib29sIiwic2Nyb2xsX3ZpZXdfc2l6ZSIsImdldENvbnRlbnRTaXplIiwic2Nyb2xsX2NvbiIsInNpemUiLCJzZXR0aW5nIiwiaXRlbV9jbGFzcyIsInN0YXJ0X3giLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiaXRlbV9oZWlnaHQiLCJyb3ciLCJjb2wiLCJvbmNlX251bSIsIm5lZWRfZHluYW1pYyIsIml0ZW1fc2Nyb2xsdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsInZlcnRpY2FsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwiZXZlbnQiLCJsaXN0IiwiZ2V0SGFzUmVhZE5vblJld2FyZExpc3QiLCJkZWxldE1haWxTZW5kIiwiZ2V0QWxsR29vZHMiLCJzZWxlY3RlZFRhYkNhbGxCYWNrIiwicmVnaXN0ZXJFdmVudCIsInVwZGF0ZV9saXN0IiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsIlVQREFURV9JVEVNIiwiYWRkR2xvYmFsRXZlbnQiLCJVUERBVEVSRURTVEFUVVMiLCJiaWQiLCJudW0iLCJ1cGRhdGVSZWRTdGF0dXMiLCJSRUFEX01BSUxfSU5GTyIsImtleSIsInNlbGVjdF9jZWxsaXRlbSIsImRhdGEiLCJnZXREYXRhIiwiaXRlbV9rZXkiLCJnZXROb3JLZXkiLCJpZCIsInNydl9pZCIsInVwZGF0ZUljb25TdGF0dXMiLCJhcnJheSIsImdldEFsbE1haWxBcnJheSIsImkiLCJsZW5ndGgiLCJwdXNoIiwic2V0Q29udGVudFNpemUiLCJzZXRQb3NpdGlvbiIsInJlc2V0U2l6ZSIsImVtcHR5X2NvbiIsImVtcHR5X2xhYmVsIiwic3RyaW5nIiwic2V0RGF0YSIsImNlbGwiLCJvcGVuTWFpbEluZm8iLCJvcGVuUm9vdFduZCIsInNldFNlbGVjdGVUYWIiLCJjb3VudCIsImdldFJlZFN1bSIsInNldFRhYlRpcHNJSSIsImNsb3NlQ2FsbEJhY2siLCJ1bmJpbmQiLCJ1cGRhdGVfbm90aWNlIiwiRGVsZXRlTWUiLCJvcGVuTWFpbFVJIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGNBQWMsR0FBR0QsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlFLGdCQUFnQixHQUFHRixPQUFPLENBQUMsbUJBQUQsQ0FB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LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBAYXV0aG9yOiBzaGlyYWhvQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgICDnq5bniYjpgq7ku7ZcclxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG52YXIgTWFpbENvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbF9jb250cm9sbGVyXCIpO1xyXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcclxudmFyIE1haWxDZWxsID0gcmVxdWlyZShcIm1haWxfY2VsbFwiKTtcclxudmFyIE1haWxFdmVudCA9IHJlcXVpcmUoXCJtYWlsX2V2ZW50XCIpO1xyXG5cclxudmFyIE1haWxXaW5kb3cgPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBDb21tb25XaW5kb3dUYWIsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIm1haWxcIiwgXCJtYWlsX3dpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gTWFpbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xyXG4gICAgICAgIHRoaXMuY3RybCA9IE1haWxDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuRnVsbDtcclxuICAgICAgICB0aGlzLnRhYl9pbmZvX2xpc3QgPSBbXHJcbiAgICAgICAgICAgIHsgbGFiZWw6IFV0aWxzLlRJMThOKFwi6YKu5Lu2XCIpLCBpbmRleDogMSwgc3RhdHVzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgIC8vIHsgbGFiZWw6IFV0aWxzLlRJMThOKFwi5YWs5ZGKXCIpLCBpbmRleDogMiwgc3RhdHVzOiB0cnVlIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudGl0bGVfc3RyID0gVXRpbHMuVEkxOE4oXCLpgq7nrrFcIik7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxfd2lkdGggPSA2MjQ7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxfaGVpZ2h0ID0gNTcwO1xyXG4gICAgICAgIHRoaXMuY3VyX2luZGV4ID0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAodGhpcy5wYW5lbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyh0aGlzLnBhdGgsIChmdW5jdGlvbiAocmVzX29iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhbmVsID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGFuZWwocGFuZWwpXHJcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVQYW5lbDogZnVuY3Rpb24gKHBhbmVsKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbCA9IHBhbmVsO1xyXG4gICAgICAgIHRoaXMucGFuZWwuc2V0UGFyZW50KHRoaXMuY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYW5lbF9jb250YWluZXIgPSB0aGlzLnBhbmVsLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxDb24gPSB0aGlzLnBhbmVsX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInNjcm9sbENvblwiKTtcclxuICAgICAgICB0aGlzLnNjcm9sbF9iZyA9IHRoaXMuc2Nyb2xsQ29uLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcclxuICAgICAgICB0aGlzLmRlbF9idG4gPSB0aGlzLnBhbmVsX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImRlbF9idG5cIik7XHJcbiAgICAgICAgdGhpcy5nZXRfYnRuID0gdGhpcy5wYW5lbF9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJnZXRfYnRuXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmRlbF9idG4uYWN0aXZlID0gdGhpcy5kZWxfYnRuX2Jvb2wgIT0gbnVsbCA/IHRoaXMuZGVsX2J0bl9ib29sIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldF9idG4uYWN0aXZlID0gdGhpcy5nZXRfYnRuX2Jvb2wgIT0gbnVsbCA/IHRoaXMuZ2V0X2J0bl9ib29sIDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSB0aGlzLnNjcm9sbENvbi5nZXRDb250ZW50U2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsX2Nvbi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB2YXIgc2Nyb2xsX3ZpZXdfc2l6ZSA9IGNjLnNpemUoNjIyLCA2OTYpXHJcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1fY2xhc3M6IE1haWxDZWxsLCAgICAgIC8vIOWNleWFg+exu1xyXG4gICAgICAgICAgICBzdGFydF94OiA1LjUsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3k6IDIsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcclxuICAgICAgICAgICAgaXRlbV93aWR0aDogNjEwLCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXHJcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxMjQsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcclxuICAgICAgICAgICAgcm93OiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xyXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIG9uY2VfbnVtOiAxLFxyXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpXHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMuc2Nyb2xsQ29uLCBjYy52MigwLCAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgc2Nyb2xsX3ZpZXdfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKVxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMuZGVsX2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMubW9kZWwuZ2V0SGFzUmVhZE5vblJld2FyZExpc3QoKTtcclxuICAgICAgICAgICAgTWFpbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5kZWxldE1haWxTZW5kKGxpc3QpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZ2V0X2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBNYWlsQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldEFsbEdvb2RzKCk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJDYWxsQmFjayh0aGlzLmN1cl9pbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL+abtOaWsOmCruS7tlxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZV9saXN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVfbGlzdCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoTWFpbEV2ZW50LlVQREFURV9JVEVNLCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX2luZGV4ID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkNhbGxCYWNrKHRoaXMuY3VyX2luZGV4KTtcclxuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/mm7TmlrDlhazlkYpcclxuICAgICAgICAvLyBpZiAodGhpcy51cGRhdGVfbm90aWNlID09IG51bGwpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy51cGRhdGVfbm90aWNlID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChNYWlsRXZlbnQuVVBEQVRFX05PVElDRSwgKGZ1bmN0aW9uIChmbGFnLCBkYXRhKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5jdXJfaW5kZXggPT0gMilcclxuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiQ2FsbEJhY2sodGhpcy5jdXJfaW5kZXgpO1xyXG4gICAgICAgIC8vICAgICB9KS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy/mm7TmlrDnuqLngrnnirbmgIFcclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KE1haWxFdmVudC5VUERBVEVSRURTVEFUVVMsIGZ1bmN0aW9uIChiaWQsIG51bSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZFN0YXR1cyhiaWQsIG51bSlcclxuICAgICAgICB9LCB0aGlzKVxyXG5cclxuICAgICAgICAvL+ivu+WPluS4gOWwgemCruS7tueahOi/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoTWFpbEV2ZW50LlJFQURfTUFJTF9JTkZPLCBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdF9jZWxsaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnNlbGVjdF9jZWxsaXRlbS5nZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtX2tleSA9IFV0aWxzLmdldE5vcktleShkYXRhLmlkIHx8IDAsIGRhdGEuc3J2X2lkIHx8IFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtX2tleSA9PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RfY2VsbGl0ZW0udXBkYXRlSWNvblN0YXR1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpXHJcbiAgICB9LFxyXG5cclxuICAgIHNlbGVjdGVkVGFiQ2FsbEJhY2s6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIHRoaXMuY3VyX2luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgaWYgKHRoaXMucGFuZWxfY29udGFpbmVyID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmIChpbmRleCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldF9idG4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2J0bi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2Jvb2wgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbF9idG4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsX2J0bi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxfYnRuX2Jvb2wgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XHJcbiAgICAgICAgICAgIHZhciBhcnJheSA9IHRoaXMubW9kZWwuZ2V0QWxsTWFpbEFycmF5KCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxpc3QucHVzaChhcnJheVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb24uc2V0Q29udGVudFNpemUoY2Muc2l6ZSg2MjIsIDY5NikpO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbF9iZy5zZXRDb250ZW50U2l6ZShjYy5zaXplKDYyMiwgNzExKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29uLnNldFBvc2l0aW9uKDAsIDMyKVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5yZXNldFNpemUodGhpcy5zY3JvbGxDb24uZ2V0Q29udGVudFNpemUoKSwgY2MudjIoMCwgMCkpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2Nvbi5hY3RpdmUgPSBsaXN0Lmxlbmd0aCA9PSAwO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5pqC5pe25rKh5pyJ6YKu5Lu2XCIpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5zZXREYXRhKGxpc3QsIGZ1bmN0aW9uIChjZWxsKSB7XHJcbiAgICAgICAgICAgICAgICBNYWlsQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWlsSW5mbyh0cnVlLCBjZWxsLmdldERhdGEoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdF9jZWxsaXRlbSA9IGNlbGw7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0X2J0bikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfYnRuLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2Jvb2wgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZWxfYnRuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlbF9idG4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlbF9idG5fYm9vbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XHJcbiAgICAgICAgICAgIC8vIHZhciBhcnJheSA9IHRoaXMubW9kZWwuZ2V0Tm90aWNlQXJyYXkoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gICAgIGxpc3QucHVzaChhcnJheVtpXSk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb24uc2V0Q29udGVudFNpemUoY2Muc2l6ZSg2MjIsIDc3NSkpO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbF9iZy5zZXRDb250ZW50U2l6ZShjYy5zaXplKDYyMiwgNzc1KSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29uLnNldFBvc2l0aW9uKDAsIDApXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnJlc2V0U2l6ZShjYy5zaXplKDYyMiwgNzU1KSwgY2MudjIoMCwgLTI4KSlcclxuICAgICAgICAgICAgdGhpcy5lbXB0eV9jb24uYWN0aXZlID0gbGlzdC5sZW5ndGggPT0gMDtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eV9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaaguaXtuayoeacieWFrOWRilwiKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuc2V0RGF0YShsaXN0LCBmdW5jdGlvbiAoY2VsbCkge1xyXG4gICAgICAgICAgICAgICAgTWFpbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuTWFpbEluZm8odHJ1ZSwgY2VsbCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgaW5kZXggPSBpbmRleCB8fCAxO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZVRhYihpbmRleCwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWRTdGF0dXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy/mm7TmlrDnuqLngrlcclxuICAgIHVwZGF0ZVJlZFN0YXR1czogZnVuY3Rpb24gKGJpZCwgbnVtKSB7XHJcbiAgICAgICAgaWYgKGJpZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8v6YKu5Lu2LOWFrOWRilxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHRoaXMubW9kZWwuZ2V0UmVkU3VtKGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlRpcHNJSShjb3VudCwgaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBiaWQgPSAxO1xyXG4gICAgICAgICAgICBudW0gPSBudW0gfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJUaXBzSUkobnVtLCBiaWQpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlX2xpc3QpIHtcclxuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMudXBkYXRlX2xpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV9saXN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlX25vdGljZSkge1xyXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy51cGRhdGVfbm90aWNlKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVfbm90aWNlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbV9zY3JvbGx2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LkRlbGV0ZU1lKClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBudWxsXHJcbiAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWlsVUkoZmFsc2UpXHJcbiAgICB9XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYWlsV2luZG93OyJdfQ==