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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/pokedex/pokedex_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, '0bcfflnB4FJFKqb5h4viHFs', 'pokedex_controller');
// Scripts/mod/pokedex/pokedex_controller.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//      这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: 2019-04-08 10:31:20
// --------------------------------------------------------------------
var RoleController = require("role_controller");
 
var PokedexEvent = require("pokedex_event");
 
var PokedexController = cc.Class({
  "extends": BaseController,
  ctor: function ctor() {},
  // 初始化配置数据
  initConfig: function initConfig() {
    var PokedexModel = require("pokedex_model");
 
    this.model = new PokedexModel();
    this.model.initConfig();
  },
  // 返回当前的model
  getModel: function getModel() {
    return this.model;
  },
  // 注册监听事件
  registerEvents: function registerEvents() {// var self = this
    // if (!self.init_role_event){
    //     self.init_role_event = gcore.GlobalEvent.bind(EventId.ROLE_CREATE_SUCCESS, function(){
    //         gcore.GlobalEvent.unBind(self.init_role_event)
    //         self.role_vo = RoleController.getInstance().getRoleVo()
    //         // self.sender11040() 登录先请求一下当前的图书馆信息
    //     })
    // }
    // if not self.add_goods_event then
    //     self.add_goods_event = GlobalEvent:getInstance():Bind(BackpackEvent.ADD_GOODS, function(bag_code,temp_add)
    //         if bag_code == BackPackConst.Bag_Code.BACKPACK then 
    //             self:checkRedPoint(temp_add)
    //         end
    //     end)
    // end
    // if not self.del_goods_event then
    //     self.del_goods_event = GlobalEvent:getInstance():Bind(BackpackEvent.DELETE_GOODS, function(bag_code,temp_del)
    //         if bag_code == BackPackConst.Bag_Code.BACKPACK then 
    //             self:checkRedPoint(temp_del)
    //         end
    //     end)
    // end
    // if not self.modify_goods_event then
    //     self.modify_goods_event = GlobalEvent:getInstance():Bind(BackpackEvent.MODIFY_GOODS_NUM, function(bag_code,temp_list)
    //         if bag_code == BackPackConst.Bag_Code.BACKPACK then 
    //             self:checkRedPoint(temp_list)
    //         end
    //     end)
    // end
    // if not self.add_partner_event then
    //     self.add_partner_event = GlobalEvent:getInstance():Bind(PartnerEvent.Partner_Data_Update, function(_partner_vo, is_add)
    //         if is_add then 
    //             -- self:checkIsCanCall()
    //         end
    //     end)
    // end
    // if not self.get_all_data then 
    //     self.get_all_data =  GlobalEvent:getInstance():Bind(BackpackEvent.GET_ALL_DATA, function(bag_code)
    //         if bag_code == BackPackConst.Bag_Code.BACKPACK then 
    //             -- self:checkIsCanCall()
    //         end
    //     end)
    // end
  },
  // 注册协议接受事件
  registerProtocals: function registerProtocals() {
    var self = this; // this.RegisterProtocal(1110, this.on1110);
 
    self.RegisterProtocal(11041, this.handle11041.bind(this)); //--请求指定英雄评论信息
 
    self.RegisterProtocal(11042, this.handle11042.bind(this)); //--设置伙伴为喜欢
 
    self.RegisterProtocal(11043, this.handle11043.bind(this)); //--伙伴评论
 
    self.RegisterProtocal(11044, this.handle11044.bind(this)); //--评论点赞    
 
    self.RegisterProtocal(11046, this.handle11046.bind(this)); //--推送伙伴总星数改变    
 
    self.RegisterProtocal(11047, this.handle11047.bind(this)); //--图书馆加成等级升级
  },
  handle11041: function handle11041(data) {
    gcore.GlobalEvent.fire(PokedexEvent.Comment_List_Event, data);
  },
  handle11042: function handle11042(data) {
    message(data.msg);
 
    if (data.result == 1) {
      gcore.GlobalEvent.fire(PokedexEvent.Comment_Like_Event, data);
    }
  },
  handle11043: function handle11043(data) {
    message(data.msg);
 
    if (data.result == 1) {
      gcore.GlobalEvent.fire(PokedexEvent.Comment_Say_Event, data);
    }
  },
  handle11044: function handle11044(data) {
    message(data.msg);
 
    if (data.result == 1) {
      gcore.GlobalEvent.fire(PokedexEvent.Comment_Zan_Event, data);
    }
  },
  // --推送伙伴总星数改变
  handle11046: function handle11046(data) {
    message(data.msg);
 
    if (data) {
      var all_data = this.model.getAllData();
      all_data.all_star = data.new_star; // this.checkIsCanCall()
    }
  },
  handle11047: function handle11047(data) {
    message(data.msg);
    var self = this;
 
    if (data.result == 1) {
      var config = Config.partner_data.data_pokedex_attr;
      var all_data = self.model.getAllData();
      var cur_lev = all_data.lev;
      if (!cur_lev) return;
      all_data.lev = data.lev;
      var next_lev = Math.min(data.lev + 1, tableLen(config));
      var next_config = Config.partner_data.data_pokedex_attr[next_lev];
      self.star_data = {
        old_star: all_data.all_star,
        new_star: next_config.star,
        old_lev: cur_lev,
        cur_lev: data.lev
      };
 
      if (self.star_data) {
        self.openStarUpWindow(true, self.star_data);
      }
 
      gcore.GlobalEvent.fire(PokedexEvent.Up_End_Event, self.star_data);
    }
  },
  // --评论
  openCommentWindow: function openCommentWindow(bool, data, callFunc) {
    var self = this;
 
    if (bool == false) {
      if (self.commentWindow) {
        self.commentWindow.close();
        self.commentWindow = null;
      }
    } else {
      if (!self.commentWindow) {
        var PartnerCommentWindow = require("partner_comment_window");
 
        self.commentWindow = new PartnerCommentWindow();
      }
 
      if (self.commentWindow.isOpen() == false) {
        self.commentWindow.open(data);
 
        if (callFunc) {
          self.commentWindow.addCallBack(callFunc);
        }
      }
    }
  },
  // --总星数提升一级
  openStarUpWindow: function openStarUpWindow(bool, data) {// if bool == false then
    //     if self.star_window ~= nil then
    //         self.star_window:close()
    //         self.star_window = nil
    //         self:checkIsCanCall()
    //     end
    // else
    //     if self.star_window == nil then
    //         self.star_window = PokedexStarWindow.New(data)
    //     end
    //     if self.star_window:isOpen() == false then
    //         self.star_window:open()
    //     end
    // end  
  },
  // --请求指定英雄评论信息
  sender11041: function sender11041(partner_id, start, num) {
    var protocal = {};
    protocal.partner_id = partner_id;
    protocal.start = start;
    protocal.num = num;
    this.SendProtocal(11041, protocal);
  },
  // --伙伴评论
  sender11043: function sender11043(partner_id, msg) {
    var protocal = {};
    protocal.partner_id = partner_id;
    protocal.msg = msg;
    this.SendProtocal(11043, protocal);
  },
  // --设置伙伴为喜欢
  sender11042: function sender11042(partner_id) {
    var protocal = {};
    protocal.partner_id = partner_id;
    this.SendProtocal(11042, protocal);
  },
  // --评论点赞
  sender11044: function sender11044(partner_id, comment_id, type) {
    var protocal = {};
    protocal.partner_id = partner_id;
    protocal.comment_id = comment_id;
    protocal.type = type;
    this.SendProtocal(11044, protocal);
  }
});
module.exports = PokedexController;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwb2tlZGV4XFxwb2tlZGV4X2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUm9sZUNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiUG9rZWRleEV2ZW50IiwiUG9rZWRleENvbnRyb2xsZXIiLCJjYyIsIkNsYXNzIiwiQmFzZUNvbnRyb2xsZXIiLCJjdG9yIiwiaW5pdENvbmZpZyIsIlBva2VkZXhNb2RlbCIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJyZWdpc3RlckV2ZW50cyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwic2VsZiIsIlJlZ2lzdGVyUHJvdG9jYWwiLCJoYW5kbGUxMTA0MSIsImJpbmQiLCJoYW5kbGUxMTA0MiIsImhhbmRsZTExMDQzIiwiaGFuZGxlMTEwNDQiLCJoYW5kbGUxMTA0NiIsImhhbmRsZTExMDQ3IiwiZGF0YSIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJmaXJlIiwiQ29tbWVudF9MaXN0X0V2ZW50IiwibWVzc2FnZSIsIm1zZyIsInJlc3VsdCIsIkNvbW1lbnRfTGlrZV9FdmVudCIsIkNvbW1lbnRfU2F5X0V2ZW50IiwiQ29tbWVudF9aYW5fRXZlbnQiLCJhbGxfZGF0YSIsImdldEFsbERhdGEiLCJhbGxfc3RhciIsIm5ld19zdGFyIiwiY29uZmlnIiwiQ29uZmlnIiwicGFydG5lcl9kYXRhIiwiZGF0YV9wb2tlZGV4X2F0dHIiLCJjdXJfbGV2IiwibGV2IiwibmV4dF9sZXYiLCJNYXRoIiwibWluIiwidGFibGVMZW4iLCJuZXh0X2NvbmZpZyIsInN0YXJfZGF0YSIsIm9sZF9zdGFyIiwic3RhciIsIm9sZF9sZXYiLCJvcGVuU3RhclVwV2luZG93IiwiVXBfRW5kX0V2ZW50Iiwib3BlbkNvbW1lbnRXaW5kb3ciLCJib29sIiwiY2FsbEZ1bmMiLCJjb21tZW50V2luZG93IiwiY2xvc2UiLCJQYXJ0bmVyQ29tbWVudFdpbmRvdyIsImlzT3BlbiIsIm9wZW4iLCJhZGRDYWxsQmFjayIsInNlbmRlcjExMDQxIiwicGFydG5lcl9pZCIsInN0YXJ0IiwibnVtIiwicHJvdG9jYWwiLCJTZW5kUHJvdG9jYWwiLCJzZW5kZXIxMTA0MyIsInNlbmRlcjExMDQyIiwic2VuZGVyMTEwNDQiLCJjb21tZW50X2lkIiwidHlwZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsY0FBYyxHQUFHQyxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUMsWUFBWSxHQUFHRCxPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFDQSxJQUFJRSxpQkFBaUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDN0IsYUFBU0MsY0FEb0I7QUFFN0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWSxDQUNqQixDQUg0QjtBQUs3QjtBQUNBQyxFQUFBQSxVQUFVLEVBQUUsc0JBQVk7QUFDcEIsUUFBSUMsWUFBWSxHQUFHUixPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFFQSxTQUFLUyxLQUFMLEdBQWEsSUFBSUQsWUFBSixFQUFiO0FBQ0EsU0FBS0MsS0FBTCxDQUFXRixVQUFYO0FBQ0gsR0FYNEI7QUFhN0I7QUFDQUcsRUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLFdBQU8sS0FBS0QsS0FBWjtBQUNILEdBaEI0QjtBQWtCN0I7QUFDQUUsRUFBQUEsY0FBYyxFQUFFLDBCQUFZLENBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0gsR0FqRTRCO0FBbUU3QjtBQUNBQyxFQUFBQSxpQkFBaUIsRUFB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QyxPQUFQLEdBQWlCekUsaUJBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTA4IDEwOjMxOjIwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxudmFyIFBva2VkZXhFdmVudCA9IHJlcXVpcmUoXCJwb2tlZGV4X2V2ZW50XCIpXG52YXIgUG9rZWRleENvbnRyb2xsZXIgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZUNvbnRyb2xsZXIsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbphY3nva7mlbDmja5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBQb2tlZGV4TW9kZWwgPSByZXF1aXJlKFwicG9rZWRleF9tb2RlbFwiKTtcblxuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFBva2VkZXhNb2RlbCgpO1xuICAgICAgICB0aGlzLm1vZGVsLmluaXRDb25maWcoKTtcbiAgICB9LFxuXG4gICAgLy8g6L+U5Zue5b2T5YmN55qEbW9kZWxcbiAgICBnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM55uR5ZCs5LqL5Lu2XG4gICAgcmVnaXN0ZXJFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIC8vIGlmICghc2VsZi5pbml0X3JvbGVfZXZlbnQpe1xuICAgICAgICAvLyAgICAgc2VsZi5pbml0X3JvbGVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuUk9MRV9DUkVBVEVfU1VDQ0VTUywgZnVuY3Rpb24oKXtcbiAgICAgICAgLy8gICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bkJpbmQoc2VsZi5pbml0X3JvbGVfZXZlbnQpXG4gICAgICAgIC8vICAgICAgICAgc2VsZi5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKVxuICAgICAgICAvLyAgICAgICAgIC8vIHNlbGYuc2VuZGVyMTEwNDAoKSDnmbvlvZXlhYjor7fmsYLkuIDkuIvlvZPliY3nmoTlm77kuabppobkv6Hmga9cbiAgICAgICAgLy8gICAgIH0pXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgbm90IHNlbGYuYWRkX2dvb2RzX2V2ZW50IHRoZW5cbiAgICAgICAgLy8gICAgIHNlbGYuYWRkX2dvb2RzX2V2ZW50ID0gR2xvYmFsRXZlbnQ6Z2V0SW5zdGFuY2UoKTpCaW5kKEJhY2twYWNrRXZlbnQuQUREX0dPT0RTLCBmdW5jdGlvbihiYWdfY29kZSx0ZW1wX2FkZClcbiAgICAgICAgLy8gICAgICAgICBpZiBiYWdfY29kZSA9PSBCYWNrUGFja0NvbnN0LkJhZ19Db2RlLkJBQ0tQQUNLIHRoZW4gXG4gICAgICAgIC8vICAgICAgICAgICAgIHNlbGY6Y2hlY2tSZWRQb2ludCh0ZW1wX2FkZClcbiAgICAgICAgLy8gICAgICAgICBlbmRcbiAgICAgICAgLy8gICAgIGVuZClcbiAgICAgICAgLy8gZW5kXG5cbiAgICAgICAgLy8gaWYgbm90IHNlbGYuZGVsX2dvb2RzX2V2ZW50IHRoZW5cbiAgICAgICAgLy8gICAgIHNlbGYuZGVsX2dvb2RzX2V2ZW50ID0gR2xvYmFsRXZlbnQ6Z2V0SW5zdGFuY2UoKTpCaW5kKEJhY2twYWNrRXZlbnQuREVMRVRFX0dPT0RTLCBmdW5jdGlvbihiYWdfY29kZSx0ZW1wX2RlbClcbiAgICAgICAgLy8gICAgICAgICBpZiBiYWdfY29kZSA9PSBCYWNrUGFja0NvbnN0LkJhZ19Db2RlLkJBQ0tQQUNLIHRoZW4gXG4gICAgICAgIC8vICAgICAgICAgICAgIHNlbGY6Y2hlY2tSZWRQb2ludCh0ZW1wX2RlbClcbiAgICAgICAgLy8gICAgICAgICBlbmRcbiAgICAgICAgLy8gICAgIGVuZClcbiAgICAgICAgLy8gZW5kXG5cbiAgICAgICAgLy8gaWYgbm90IHNlbGYubW9kaWZ5X2dvb2RzX2V2ZW50IHRoZW5cbiAgICAgICAgLy8gICAgIHNlbGYubW9kaWZ5X2dvb2RzX2V2ZW50ID0gR2xvYmFsRXZlbnQ6Z2V0SW5zdGFuY2UoKTpCaW5kKEJhY2twYWNrRXZlbnQuTU9ESUZZX0dPT0RTX05VTSwgZnVuY3Rpb24oYmFnX2NvZGUsdGVtcF9saXN0KVxuICAgICAgICAvLyAgICAgICAgIGlmIGJhZ19jb2RlID09IEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuQkFDS1BBQ0sgdGhlbiBcbiAgICAgICAgLy8gICAgICAgICAgICAgc2VsZjpjaGVja1JlZFBvaW50KHRlbXBfbGlzdClcbiAgICAgICAgLy8gICAgICAgICBlbmRcbiAgICAgICAgLy8gICAgIGVuZClcbiAgICAgICAgLy8gZW5kXG4gICAgICAgIC8vIGlmIG5vdCBzZWxmLmFkZF9wYXJ0bmVyX2V2ZW50IHRoZW5cbiAgICAgICAgLy8gICAgIHNlbGYuYWRkX3BhcnRuZXJfZXZlbnQgPSBHbG9iYWxFdmVudDpnZXRJbnN0YW5jZSgpOkJpbmQoUGFydG5lckV2ZW50LlBhcnRuZXJfRGF0YV9VcGRhdGUsIGZ1bmN0aW9uKF9wYXJ0bmVyX3ZvLCBpc19hZGQpXG4gICAgICAgIC8vICAgICAgICAgaWYgaXNfYWRkIHRoZW4gXG4gICAgICAgIC8vICAgICAgICAgICAgIC0tIHNlbGY6Y2hlY2tJc0NhbkNhbGwoKVxuICAgICAgICAvLyAgICAgICAgIGVuZFxuICAgICAgICAvLyAgICAgZW5kKVxuICAgICAgICAvLyBlbmRcbiAgICAgICAgLy8gaWYgbm90IHNlbGYuZ2V0X2FsbF9kYXRhIHRoZW4gXG4gICAgICAgIC8vICAgICBzZWxmLmdldF9hbGxfZGF0YSA9ICBHbG9iYWxFdmVudDpnZXRJbnN0YW5jZSgpOkJpbmQoQmFja3BhY2tFdmVudC5HRVRfQUxMX0RBVEEsIGZ1bmN0aW9uKGJhZ19jb2RlKVxuICAgICAgICAvLyAgICAgICAgIGlmIGJhZ19jb2RlID09IEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuQkFDS1BBQ0sgdGhlbiBcbiAgICAgICAgLy8gICAgICAgICAgICAgLS0gc2VsZjpjaGVja0lzQ2FuQ2FsbCgpXG4gICAgICAgIC8vICAgICAgICAgZW5kXG4gICAgICAgIC8vICAgICBlbmQpXG4gICAgICAgIC8vIGVuZFxuICAgIH0sXG5cbiAgICAvLyDms6jlhozljY/orq7mjqXlj5fkuovku7ZcbiAgICByZWdpc3RlclByb3RvY2FsczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgLy8gdGhpcy5SZWdpc3RlclByb3RvY2FsKDExMTAsIHRoaXMub24xMTEwKTtcbiAgICAgICAgc2VsZi5SZWdpc3RlclByb3RvY2FsKDExMDQxLCB0aGlzLmhhbmRsZTExMDQxLmJpbmQodGhpcykpICAgICAvLy0t6K+35rGC5oyH5a6a6Iux6ZuE6K+E6K665L+h5oGvXG4gICAgICAgIHNlbGYuUmVnaXN0ZXJQcm90b2NhbCgxMTA0MiwgdGhpcy5oYW5kbGUxMTA0Mi5iaW5kKHRoaXMpKSAgICAgLy8tLeiuvue9ruS8meS8tOS4uuWWnOasolxuICAgICAgICBzZWxmLlJlZ2lzdGVyUHJvdG9jYWwoMTEwNDMsIHRoaXMuaGFuZGxlMTEwNDMuYmluZCh0aGlzKSkgICAgIC8vLS3kvJnkvLTor4TorrpcbiAgICAgICAgc2VsZi5SZWdpc3RlclByb3RvY2FsKDExMDQ0LCB0aGlzLmhhbmRsZTExMDQ0LmJpbmQodGhpcykpICAgICAvLy0t6K+E6K6654K56LWeICAgIFxuICAgICAgICBzZWxmLlJlZ2lzdGVyUHJvdG9jYWwoMTEwNDYsIHRoaXMuaGFuZGxlMTEwNDYuYmluZCh0aGlzKSkgICAgIC8vLS3mjqjpgIHkvJnkvLTmgLvmmJ/mlbDmlLnlj5ggICAgXG4gICAgICAgIHNlbGYuUmVnaXN0ZXJQcm90b2NhbCgxMTA0NywgdGhpcy5oYW5kbGUxMTA0Ny5iaW5kKHRoaXMpKSAgICAgLy8tLeWbvuS5pummhuWKoOaIkOetiee6p+WNh+e6p1xuICAgIH0sXG4gICAgaGFuZGxlMTEwNDEoIGRhdGEgKXtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShQb2tlZGV4RXZlbnQuQ29tbWVudF9MaXN0X0V2ZW50LGRhdGEpXG4gICAgICAgIFxuICAgIH0sXG4gICAgaGFuZGxlMTEwNDIoIGRhdGEgKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICAgICAgaWYgKGRhdGEucmVzdWx0ID09IDEpe1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShQb2tlZGV4RXZlbnQuQ29tbWVudF9MaWtlX0V2ZW50LGRhdGEpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZTExMDQzKCBkYXRhICl7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgICAgIGlmKGRhdGEucmVzdWx0ID09IDEpe1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShQb2tlZGV4RXZlbnQuQ29tbWVudF9TYXlfRXZlbnQsZGF0YSkgICBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlMTEwNDQoIGRhdGEgKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICAgICAgaWYgKGRhdGEucmVzdWx0ID09IDEpe1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShQb2tlZGV4RXZlbnQuQ29tbWVudF9aYW5fRXZlbnQsZGF0YSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8gLS3mjqjpgIHkvJnkvLTmgLvmmJ/mlbDmlLnlj5hcbiAgICBoYW5kbGUxMTA0NiggZGF0YSApe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKVxuICAgICAgICBpZiAoZGF0YSl7XG4gICAgICAgICAgICBsZXQgYWxsX2RhdGEgPSB0aGlzLm1vZGVsLmdldEFsbERhdGEoKVxuICAgICAgICAgICAgYWxsX2RhdGEuYWxsX3N0YXIgPSBkYXRhLm5ld19zdGFyXG4gICAgICAgICAgICAvLyB0aGlzLmNoZWNrSXNDYW5DYWxsKClcbiAgICAgICAgfSAgICBcbiAgICB9LFxuICAgIGhhbmRsZTExMDQ3KGRhdGEpe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKVxuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKGRhdGEucmVzdWx0ID09IDEpe1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IENvbmZpZy5wYXJ0bmVyX2RhdGEuZGF0YV9wb2tlZGV4X2F0dHJcbiAgICAgICAgICAgIGxldCBhbGxfZGF0YSA9IHNlbGYubW9kZWwuZ2V0QWxsRGF0YSgpXG4gICAgICAgICAgICBsZXQgY3VyX2xldiA9IGFsbF9kYXRhLmxldlxuICAgICAgICAgICAgaWYgKCFjdXJfbGV2KXJldHVyblxuICAgICAgICAgICAgYWxsX2RhdGEubGV2ID0gZGF0YS5sZXZcbiAgICAgICAgICAgIGxldCBuZXh0X2xldiA9IE1hdGgubWluKGRhdGEubGV2ICsgMSwgdGFibGVMZW4oY29uZmlnKSlcbiAgICAgICAgICAgIGxldCBuZXh0X2NvbmZpZyA9IENvbmZpZy5wYXJ0bmVyX2RhdGEuZGF0YV9wb2tlZGV4X2F0dHJbbmV4dF9sZXZdXG4gICAgICAgICAgICBzZWxmLnN0YXJfZGF0YSA9IHtvbGRfc3RhciA6IGFsbF9kYXRhLmFsbF9zdGFyLCBuZXdfc3RhciA6IG5leHRfY29uZmlnLnN0YXIsb2xkX2xldiA6IGN1cl9sZXYsY3VyX2xldiA6IGRhdGEubGV2fVxuICAgICAgICAgICAgaWYgKHNlbGYuc3Rhcl9kYXRhKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5vcGVuU3RhclVwV2luZG93KHRydWUsIHNlbGYuc3Rhcl9kYXRhKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShQb2tlZGV4RXZlbnQuVXBfRW5kX0V2ZW50LHNlbGYuc3Rhcl9kYXRhKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyAtLeivhOiuulxuICAgIG9wZW5Db21tZW50V2luZG93KGJvb2wsZGF0YSxjYWxsRnVuYyl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAoYm9vbCA9PSBmYWxzZSl7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb21tZW50V2luZG93KXtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbW1lbnRXaW5kb3cuY2xvc2UoKVxuICAgICAgICAgICAgICAgIHNlbGYuY29tbWVudFdpbmRvdyA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29tbWVudFdpbmRvdyl7XG4gICAgICAgICAgICAgICAgdmFyIFBhcnRuZXJDb21tZW50V2luZG93ID0gcmVxdWlyZShcInBhcnRuZXJfY29tbWVudF93aW5kb3dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmNvbW1lbnRXaW5kb3cgPSBuZXcgUGFydG5lckNvbW1lbnRXaW5kb3coKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoc2VsZi5jb21tZW50V2luZG93LmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbW1lbnRXaW5kb3cub3BlbihkYXRhKVxuICAgICAgICAgICAgICAgIGlmKGNhbGxGdW5jKXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21tZW50V2luZG93LmFkZENhbGxCYWNrKGNhbGxGdW5jKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9LFxuICAgIC8vIC0t5oC75pif5pWw5o+Q5Y2H5LiA57qnXG4gICAgb3BlblN0YXJVcFdpbmRvdyhib29sLGRhdGEpe1xuICAgICAgICAvLyBpZiBib29sID09IGZhbHNlIHRoZW5cbiAgICAgICAgLy8gICAgIGlmIHNlbGYuc3Rhcl93aW5kb3cgfj0gbmlsIHRoZW5cbiAgICAgICAgLy8gICAgICAgICBzZWxmLnN0YXJfd2luZG93OmNsb3NlKClcbiAgICAgICAgLy8gICAgICAgICBzZWxmLnN0YXJfd2luZG93ID0gbmlsXG4gICAgICAgIC8vICAgICAgICAgc2VsZjpjaGVja0lzQ2FuQ2FsbCgpXG4gICAgICAgIC8vICAgICBlbmRcbiAgICAgICAgLy8gZWxzZVxuICAgICAgICAvLyAgICAgaWYgc2VsZi5zdGFyX3dpbmRvdyA9PSBuaWwgdGhlblxuICAgICAgICAvLyAgICAgICAgIHNlbGYuc3Rhcl93aW5kb3cgPSBQb2tlZGV4U3RhcldpbmRvdy5OZXcoZGF0YSlcbiAgICAgICAgLy8gICAgIGVuZFxuICAgICAgICAvLyAgICAgaWYgc2VsZi5zdGFyX3dpbmRvdzppc09wZW4oKSA9PSBmYWxzZSB0aGVuXG4gICAgICAgIC8vICAgICAgICAgc2VsZi5zdGFyX3dpbmRvdzpvcGVuKClcbiAgICAgICAgLy8gICAgIGVuZFxuICAgICAgICAvLyBlbmQgIFxuICAgIH0sXG4gICAgLy8gLS3or7fmsYLmjIflrproi7Hpm4Tor4Torrrkv6Hmga9cbiAgICBzZW5kZXIxMTA0MShwYXJ0bmVyX2lkLHN0YXJ0LG51bSl7XG4gICAgICAgIGxldCBwcm90b2NhbCA9e31cbiAgICAgICAgcHJvdG9jYWwucGFydG5lcl9pZCA9IHBhcnRuZXJfaWRcbiAgICAgICAgcHJvdG9jYWwuc3RhcnQgPSBzdGFydFxuICAgICAgICBwcm90b2NhbC5udW0gPSBudW1cbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTEwNDEscHJvdG9jYWwpXG4gICAgfSxcbiAgICAvLyAtLeS8meS8tOivhOiuulxuICAgIHNlbmRlcjExMDQzKHBhcnRuZXJfaWQsbXNnKXtcbiAgICAgICAgbGV0IHByb3RvY2FsID17fVxuICAgICAgICBwcm90b2NhbC5wYXJ0bmVyX2lkID0gcGFydG5lcl9pZFxuICAgICAgICBwcm90b2NhbC5tc2cgPSBtc2dcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTEwNDMscHJvdG9jYWwpXG4gICAgfSxcbiAgICAvLyAtLeiuvue9ruS8meS8tOS4uuWWnOasolxuICAgIHNlbmRlcjExMDQyKHBhcnRuZXJfaWQpe1xuICAgICAgICBsZXQgcHJvdG9jYWwgPXt9XG4gICAgICAgIHByb3RvY2FsLnBhcnRuZXJfaWQgPSBwYXJ0bmVyX2lkXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMDQyLHByb3RvY2FsKVxuICAgIH0sXG4gICAgLy8gLS3or4TorrrngrnotZ5cbiAgICBzZW5kZXIxMTA0NChwYXJ0bmVyX2lkLGNvbW1lbnRfaWQsdHlwZSl7XG4gICAgICAgIGxldCBwcm90b2NhbCA9e31cbiAgICAgICAgcHJvdG9jYWwucGFydG5lcl9pZCA9IHBhcnRuZXJfaWRcbiAgICAgICAgcHJvdG9jYWwuY29tbWVudF9pZCA9IGNvbW1lbnRfaWRcbiAgICAgICAgcHJvdG9jYWwudHlwZSA9IHR5cGVcbiAgICAgICAgXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMDQ0LHByb3RvY2FsKVxuICAgIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb2tlZGV4Q29udHJvbGxlcjsiXX0=