(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/voyage/voyage_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, '168fbzQKWtAJJKuVGIu0CSp', 'voyage_controller'); // Scripts/mod/voyage/voyage_controller.js "use strict"; var _cc$Class; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里填写详细说明,主要填写该模块的功能简要 //
Create: 2019-03-06 20:33:19 // -------------------------------------------------------------------- var RoleController = require("role_controller"); var VoyageEvent = require("voyage_event"); var VoyageController = cc.Class((_cc$Class = { "extends": BaseController, ctor: function ctor() {}, // 初始化配置数据 initConfig: function initConfig() { var VoyageModel = require("voyage_model"); this.model = new VoyageModel(); this.model.initConfig(); }, // 返回当前的model getModel: function getModel() { return this.model; }, // 注册监听事件 registerEvents: function registerEvents() { if (this.init_role_event == null) { this.init_role_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () { gcore.GlobalEvent.unbind(this.init_role_event); this.init_role_event = null; }, this); } //断线重连的时候 if (this.re_link_game_event == null) { this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {}, this); } }, //请求远航数据 requestVoyageInfo: function requestVoyageInfo() { this.SendProtocal(23800, {}); }, //请求接取订单 requestReceiveOrder: function requestReceiveOrder(order_id, assign_ids) { var protocal = {}; protocal.order_id = order_id; protocal.assign_ids = assign_ids; this.SendProtocal(23802, protocal); }, //请求完成订单 requestFinishOrder: function requestFinishOrder(order_id, type) { var protocal = {}; protocal.order_id = order_id; protocal.type = type; this.SendProtocal(23803, protocal); }, //请求刷新 requestRefreshOrder: function requestRefreshOrder() { this.SendProtocal(23804, {}); }, //请求远航活动状态 requestActivityStatus: function requestActivityStatus() { var protocal = {}; this.SendProtocal(23805, protocal); }, // 注册协议接受事件 registerProtocals: function registerProtocals() { this.RegisterProtocal(23800, this.handle23800); // 远航数据(订单、刷新次数等) this.RegisterProtocal(23801, this.handle23801); // 远航订单数据 this.RegisterProtocal(23802, this.handle23802); // 远航接取订单 this.RegisterProtocal(23803, this.handle23803); // 远航完成订单 this.RegisterProtocal(23804, this.handle23804); // 远航刷新订单 this.RegisterProtocal(23805, this.handle23805); // 远航活动状态 this.RegisterProtocal(23820, this.handle23820); // 远航记录返回 this.RegisterProtocal(23821, this.handle23821); // 第一次弹出特权提示 }, //远航数据(订单、刷新次数等) handle23800: function handle23800(data) { if (data.order_list) { this.model.setOrderList(data.order_list); } if (data.free_times) { this.model.setFreeTimes(data.free_times); } if (data.coin_times) { this.model.setCoinTimes(data.coin_times); } gcore.GlobalEvent.fire(VoyageEvent.UpdateVoyageDataEvent); gcore.GlobalEvent.fire(VoyageEvent.UpdateVoyageRedEvent); }, //远航订单数据更新 handle23801: function handle23801(data) { if (data) { this.model.updateOneOrderData(data); gcore.GlobalEvent.fire(VoyageEvent.UpdateVoyageRedEvent); } }, //接取订单返回 handle23802: function handle23802(data) { message(data.msg); if (data.flag == 1) { this.openVoyageDispatchWindow(false); } }, //完成订单返回 handle23803: function handle23803(data) { message(data.msg); if (data.flag == 1 && data.order_id) { this.model.deleteOneOrderData(data.order_id); gcore.GlobalEvent.fire(VoyageEvent.DeleteOrderDataEvent); gcore.GlobalEvent.fire(VoyageEvent.UpdateVoyageRedEvent); } }, //刷新订单返回 handle23804: function handle23804(data) { message(data.msg); }, //远航活动状态 handle23805: function handle23805(data) { if (data.flag) { this.model.setActivityStatus(data.flag); gcore.GlobalEvent.fire(VoyageEvent.UpdateActivityStatusEvent); } }, //远航第一次点击特权记录 send23820: function send23820() { this.SendProtocal(23820, {}); }, handle23820: function handle23820(data) {}, //请求特权记录情况 send23821: function send23821() { this.SendProtocal(23821, {}); }, handle23821: function handle23821(data) { this.model.setFirstFresh(data.flag != 1); }, //--------------------------@ 界面相关 openVoyageMainWindow: function openVoyageMainWindow(status, not_tips) { if (status == true) { if (!this.checkVoyageIsOpen(not_tips)) { return; } if (!this.voyage_main_window) { this.voyage_main_window = Utils.createClass("voyage_main_window"); this.voyage_main_window.open(); } } else { if (this.voyage_main_window) { this.voyage_main_window.close(); this.voyage_main_window = null; } } }, //引导需要 getVoyageMainRoot: function getVoyageMainRoot() { if (this.voyage_main_window) { return this.voyage_main_window.root_wnd; } }, //打开远航派遣界面 openVoyageDispatchWindow: function openVoyageDispatchWindow(status, data) { if (status == true) { if (!this.voyage_dispatch_window) { this.voyage_dispatch_window = Utils.createClass("voyage_dispatch_window"); this.voyage_dispatch_window.open(data); } } else { if (this.voyage_dispatch_window) { this.voyage_dispatch_window.close(); this.voyage_dispatch_window = null; } } }, //远航是否开启 checkVoyageIsOpen: function checkVoyageIsOpen(no_tips) { var is_open = false; var lev_config = Config.shipping_data.data_const["guild_lev"]; var role_vo = RoleController.getInstance().getRoleVo(); if (lev_config && lev_config.val <= role_vo.lev) { is_open = true; } else if (!no_tips) { message(lev_config.desc); } return is_open; } }, _defineProperty(_cc$Class, "getVoyageMainRoot", function getVoyageMainRoot() { if (this.voyage_main_window) return this.voyage_main_window.root_wnd; }), _defineProperty(_cc$Class, "getVoyageDispatchRoot", function getVoyageDispatchRoot() { if (this.voyage_dispatch_window) return this.voyage_dispatch_window.root_wnd; }), _cc$Class)); module.exports = VoyageController; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2b3lhZ2VcXHZveWFnZV9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIlJvbGVDb250cm9sbGVyIiwicmVxdWlyZSIsIlZveWFnZUV2ZW50IiwiVm95YWdlQ29udHJvbGxlciIsImNjIiwiQ2xhc3MiLCJCYXNlQ29udHJvbGxlciIsImN0b3IiLCJpbml0Q29uZmlnIiwiVm95YWdlTW9kZWwiLCJtb2RlbCIsImdldE1vZGVsIiwicmVnaXN0ZXJFdmVudHMiLCJpbml0X3JvbGVfZXZlbnQiLCJnY29yZSIsIkdsb2JhbEV2ZW50IiwiYmluZCIsIkV2ZW50SWQiLCJFVlRfUk9MRV9DUkVBVEVfU1VDQ0VTUyIsInVuYmluZCIsInJlX2xpbmtfZ2FtZV9ldmVudCIsIkVWVF9SRV9MSU5LX0dBTUUiLCJyZXF1ZXN0Vm95YWdlSW5mbyIsIlNlbmRQcm90b2NhbCIsInJlcXVlc3RSZWNlaXZlT3JkZXIiLCJvcmRlcl9pZCIsImFzc2lnbl9pZHMiLCJwcm90b2NhbCIsInJlcXVlc3RGaW5pc2hPcmRlciIsInR5cGUiLCJyZXF1ZXN0UmVmcmVzaE9yZGVyIiwicmVxdWVzdEFjdGl2aXR5U3RhdHVzIiwicmVnaXN0ZXJQcm90b2NhbHMiLCJSZWdpc3RlclByb3RvY2FsIiwiaGFuZGxlMjM4MDAiLCJoYW5kbGUyMzgwMSIsImhhbmRsZTIzODAyIiwiaGFuZGxlMjM4MDMiLCJoYW5kbGUyMzgwNCIsImhhbmRsZTIzODA1IiwiaGFuZGxlMjM4MjAiLCJoYW5kbGUyMzgyMSIsImRhdGEiLCJvcmRlcl9saXN0Iiwic2V0T3JkZXJMaXN0IiwiZnJlZV90aW1lcyIsInNldEZyZWVUaW1lcyIsImNvaW5fdGltZXMiLCJzZXRDb2luVGltZXMiLCJmaXJlIiwiVXBkYXRlVm95YWdlRGF0YUV2ZW50IiwiVXBkYXRlVm95YWdlUmVkRXZlbnQiLCJ1cGRhdGVPbmVPcmRlckRhdGEiLCJtZXNzYWdlIiwibXNnIiwiZmxhZyIsIm9wZW5Wb3lhZ2VEaXNwYXRjaFdpbmRvdyIsImRlbGV0ZU9uZU9yZGVyRGF0YSIsIkRlbGV0ZU9yZGVyRGF0YUV2ZW50Iiwic2V0QWN0aXZpdHlTdGF0dXMiLCJVcGRhdGVBY3Rpdml0eVN0YXR1c0V2ZW50Iiwic2VuZDIzODIwIiwic2VuZDIzODIxIiwic2V0Rmlyc3RGcmVzaCIsIm9wZW5Wb3lhZ2VNYWluV2luZG93Iiwic3RhdHVzIiwibm90X3RpcHMiLCJjaGVja1ZveWFnZUlzT3BlbiIsInZveWFnZV9tYWluX3dpbmRvdyIsIlV0aWxzIiwiY3JlYXRlQ2xhc3MiLCJvcGVuIiwiY2xvc2UiLCJnZXRWb3lhZ2VNYWluUm9vdCIsInJvb3Rfd25kIiwidm95YWdlX2Rpc3BhdGNoX3dpbmRvdyIsIm5vX3RpcHMiLCJpc19vcGVuIiwibGV2X2NvbmZpZyIsIkNvbmZpZyIsInNoaXBwaW5nX2RhdGEiLCJkYXRhX2NvbnN0Iiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwidmFsIiwibGV2IiwiZGVzYyIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLGNBQWMsR0FBR0MsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlDLFdBQVcsR0FBR0QsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBRUEsSUFBSUUsZ0JBQWdCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSDtBQUNuQixhQUFTQyxjQURVO0FBRW5CQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVksQ0FDakIsQ0FIa0I7QUFLbkI7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLHNCQUFZO0FBQ3BCLFFBQUlDLFdBQVcsR0FBR1IsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBRUEsU0FBS1MsS0FBTCxHQUFhLElBQUlELFdBQUosRUFBYjtBQUNBLFNBQUtDLEtBQUwsQ0FBV0YsVUFBWDtBQUNILEdBWGtCO0FBYW5CO0FBQ0FHLEVBQUFBLFFBQVEsRUFBRSxv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TztBQUNILFVBQUksS0FBS2lDLHNCQUFULEVBQWlDO0FBQzdCLGFBQUtBLHNCQUFMLENBQTRCSCxLQUE1QjtBQUNBLGFBQUtHLHNCQUFMLEdBQThCLElBQTlCO0FBQ0g7QUFDSjtBQUNKLEdBM0xrQjtBQTZMbkI7QUFDQVIsRUFBQUEsaUJBQWlCLEVBQUUsMkJBQVVTLE9BQVYsRUFBbUI7QUFDbEMsUUFBSUMsT0FBTyxHQUFHLEtBQWQ7QUFDQSxRQUFJQyxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsYUFBUCxDQUFxQkMsVUFBckIsQ0FBZ0MsV0FBaEMsQ0FBakI7QUFDQSxRQUFJQyxPQUFPLEdBQUdsRixjQUFjLENBQUNtRixXQUFmLEdBQTZCQyxTQUE3QixFQUFkOztBQUNBLFFBQUlOLFVBQVUsSUFBSUEsVUFBVSxDQUFDTyxHQUFYLElBQWtCSCxPQUFPLENBQUNJLEdBQTVDLEVBQWlEO0FBQzdDVCxNQUFBQSxPQUFPLEdBQUcsSUFBVjtBQUNILEtBRkQsTUFFTyxJQUFJLENBQUNELE9BQUwsRUFBYztBQUNqQnZCLE1BQUFBLE9BQU8sQ0FBQ3lCLFVBQVUsQ0FBQ1MsSUFBWixDQUFQO0FBQ0g7O0FBQ0QsV0FBT1YsT0FBUDtBQUNIO0FBeE1rQixtREEwTUEsNkJBQVk7QUFDM0IsTUFBSSxLQUFLVCxrQkFBVCxFQUNJLE9BQU8sS0FBS0Esa0JBQUwsQ0FBd0JNLFFBQS9CO0FBQ1AsQ0E3TWtCLHVEQStNSSxpQ0FBWTtBQUMvQixNQUFJLEtBQUtDLHNCQUFULEVBQ0ksT0FBTyxLQUFLQSxzQkFBTCxDQUE0QkQsUUFBbkM7QUFDUCxDQWxOa0IsY0FBdkI7QUFxTkFjLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnRGLGdCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDov5nph4zloavlhpnor6bnu4bor7TmmI4s5Li76KaB5aGr5YaZ6K+l5qih5Z2X55qE5Yqf6IO9566A6KaBXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0wNiAyMDozMzoxOVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgVm95YWdlRXZlbnQgPSByZXF1aXJlKFwidm95YWdlX2V2ZW50XCIpO1xuXG52YXIgVm95YWdlQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIFZveWFnZU1vZGVsID0gcmVxdWlyZShcInZveWFnZV9tb2RlbFwiKTtcblxuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFZveWFnZU1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbml0X3JvbGVfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0X3JvbGVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy5pbml0X3JvbGVfZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdF9yb2xlX2V2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgIH1cblxuICAgICAgICAvL+aWree6v+mHjei/nueahOaXtuWAmVxuICAgICAgICBpZiAodGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JFX0xJTktfR0FNRSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+ivt+axgui/nOiIquaVsOaNrlxuICAgIHJlcXVlc3RWb3lhZ2VJbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzODAwLCB7fSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC5o6l5Y+W6K6i5Y2VXG4gICAgcmVxdWVzdFJlY2VpdmVPcmRlcjogZnVuY3Rpb24gKG9yZGVyX2lkLCBhc3NpZ25faWRzKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5vcmRlcl9pZCA9IG9yZGVyX2lkO1xuICAgICAgICBwcm90b2NhbC5hc3NpZ25faWRzID0gYXNzaWduX2lkcztcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjM4MDIsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLlrozmiJDorqLljZVcbiAgICByZXF1ZXN0RmluaXNoT3JkZXI6IGZ1bmN0aW9uIChvcmRlcl9pZCwgdHlwZSkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwub3JkZXJfaWQgPSBvcmRlcl9pZDtcbiAgICAgICAgcHJvdG9jYWwudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzODAzLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC5Yi35pawXG4gICAgcmVxdWVzdFJlZnJlc2hPcmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzgwNCwge30pXG4gICAgfSxcblxuICAgIC8v6K+35rGC6L+c6Iiq5rS75Yqo54q25oCBXG4gICAgcmVxdWVzdEFjdGl2aXR5U3RhdHVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzgwNSwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozljY/orq7mjqXlj5fkuovku7ZcbiAgICByZWdpc3RlclByb3RvY2FsczogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjM4MDAsIHRoaXMuaGFuZGxlMjM4MDApICAgICAvLyDov5zoiKrmlbDmja7vvIjorqLljZXjgIHliLfmlrDmrKHmlbDnrYnvvIlcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzODAxLCB0aGlzLmhhbmRsZTIzODAxKSAgICAgLy8g6L+c6Iiq6K6i5Y2V5pWw5o2uXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyMzgwMiwgdGhpcy5oYW5kbGUyMzgwMikgICAgIC8vIOi/nOiIquaOpeWPluiuouWNlVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjM4MDMsIHRoaXMuaGFuZGxlMjM4MDMpICAgICAvLyDov5zoiKrlrozmiJDorqLljZVcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzODA0LCB0aGlzLmhhbmRsZTIzODA0KSAgICAgLy8g6L+c6Iiq5Yi35paw6K6i5Y2VXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyMzgwNSwgdGhpcy5oYW5kbGUyMzgwNSkgICAgIC8vIOi/nOiIqua0u+WKqOeKtuaAgVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjM4MjAsIHRoaXMuaGFuZGxlMjM4MjApICAgICAvLyDov5zoiKrorrDlvZXov5Tlm55cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzODIxLCB0aGlzLmhhbmRsZTIzODIxKSAgICAgLy8g56ys5LiA5qyh5by55Ye654m55p2D5o+Q56S6XG4gICAgfSxcblxuICAgIC8v6L+c6Iiq5pWw5o2u77yI6K6i5Y2V44CB5Yi35paw5qyh5pWw562J77yJXG4gICAgaGFuZGxlMjM4MDA6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLm9yZGVyX2xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0T3JkZXJMaXN0KGRhdGEub3JkZXJfbGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuZnJlZV90aW1lcykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRGcmVlVGltZXMoZGF0YS5mcmVlX3RpbWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5jb2luX3RpbWVzKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldENvaW5UaW1lcyhkYXRhLmNvaW5fdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVm95YWdlRXZlbnQuVXBkYXRlVm95YWdlRGF0YUV2ZW50KVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZveWFnZUV2ZW50LlVwZGF0ZVZveWFnZVJlZEV2ZW50KVxuICAgIH0sXG5cbiAgICAvL+i/nOiIquiuouWNleaVsOaNruabtOaWsFxuICAgIGhhbmRsZTIzODAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVPbmVPcmRlckRhdGEoZGF0YSk7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZveWFnZUV2ZW50LlVwZGF0ZVZveWFnZVJlZEV2ZW50KVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5o6l5Y+W6K6i5Y2V6L+U5ZueXG4gICAgaGFuZGxlMjM4MDI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgICAgIGlmIChkYXRhLmZsYWcgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuVm95YWdlRGlzcGF0Y2hXaW5kb3coZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5a6M5oiQ6K6i5Y2V6L+U5ZueXG4gICAgaGFuZGxlMjM4MDM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5mbGFnID09IDEgJiYgZGF0YS5vcmRlcl9pZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5kZWxldGVPbmVPcmRlckRhdGEoZGF0YS5vcmRlcl9pZCk7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZveWFnZUV2ZW50LkRlbGV0ZU9yZGVyRGF0YUV2ZW50KVxuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWb3lhZ2VFdmVudC5VcGRhdGVWb3lhZ2VSZWRFdmVudClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WIt+aWsOiuouWNlei/lOWbnlxuICAgIGhhbmRsZTIzODA0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICB9LFxuXG4gICAgLy/ov5zoiKrmtLvliqjnirbmgIFcbiAgICBoYW5kbGUyMzgwNTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuZmxhZykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRBY3Rpdml0eVN0YXR1cyhkYXRhLmZsYWcpO1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWb3lhZ2VFdmVudC5VcGRhdGVBY3Rpdml0eVN0YXR1c0V2ZW50KVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6L+c6Iiq56ys5LiA5qyh54K55Ye754m55p2D6K6w5b2VXG4gICAgc2VuZDIzODIwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzODIwLHt9KVxuICAgIH0sXG5cbiAgICBoYW5kbGUyMzgyMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLnibnmnYPorrDlvZXmg4XlhrVcbiAgICBzZW5kMjM4MjE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjM4MjEse30pXG4gICAgfSxcblxuICAgIGhhbmRsZTIzODIxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldEZpcnN0RnJlc2goZGF0YS5mbGFnICE9IDEpO1xuICAgIH0sXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQCDnlYzpnaLnm7jlhbNcbiAgICBvcGVuVm95YWdlTWFpbldpbmRvdzogZnVuY3Rpb24gKHN0YXR1cywgbm90X3RpcHMpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tWb3lhZ2VJc09wZW4obm90X3RpcHMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMudm95YWdlX21haW5fd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52b3lhZ2VfbWFpbl93aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcInZveWFnZV9tYWluX3dpbmRvd1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZveWFnZV9tYWluX3dpbmRvdy5vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy52b3lhZ2VfbWFpbl93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZveWFnZV9tYWluX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudm95YWdlX21haW5fd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+W8leWvvOmcgOimgVxuICAgIGdldFZveWFnZU1haW5Sb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnZveWFnZV9tYWluX3dpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudm95YWdlX21haW5fd2luZG93LnJvb3Rfd25kXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/miZPlvIDov5zoiKrmtL7pgaPnlYzpnaJcbiAgICBvcGVuVm95YWdlRGlzcGF0Y2hXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMsIGRhdGEpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudm95YWdlX2Rpc3BhdGNoX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMudm95YWdlX2Rpc3BhdGNoX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwidm95YWdlX2Rpc3BhdGNoX3dpbmRvd1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZveWFnZV9kaXNwYXRjaF93aW5kb3cub3BlbihkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZveWFnZV9kaXNwYXRjaF93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZveWFnZV9kaXNwYXRjaF93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZveWFnZV9kaXNwYXRjaF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6L+c6Iiq5piv5ZCm5byA5ZCvXG4gICAgY2hlY2tWb3lhZ2VJc09wZW46IGZ1bmN0aW9uIChub190aXBzKSB7XG4gICAgICAgIHZhciBpc19vcGVuID0gZmFsc2U7XG4gICAgICAgIHZhciBsZXZfY29uZmlnID0gQ29uZmlnLnNoaXBwaW5nX2RhdGEuZGF0YV9jb25zdFtcImd1aWxkX2xldlwiXTtcbiAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICBpZiAobGV2X2NvbmZpZyAmJiBsZXZfY29uZmlnLnZhbCA8PSByb2xlX3ZvLmxldikge1xuICAgICAgICAgICAgaXNfb3BlbiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5vX3RpcHMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UobGV2X2NvbmZpZy5kZXNjKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc19vcGVuO1xuICAgIH0sXG5cbiAgICBnZXRWb3lhZ2VNYWluUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy52b3lhZ2VfbWFpbl93aW5kb3cpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52b3lhZ2VfbWFpbl93aW5kb3cucm9vdF93bmQ7XG4gICAgfSxcblxuICAgIGdldFZveWFnZURpc3BhdGNoUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy52b3lhZ2VfZGlzcGF0Y2hfd2luZG93KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudm95YWdlX2Rpc3BhdGNoX3dpbmRvdy5yb290X3duZDtcbiAgICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVm95YWdlQ29udHJvbGxlcjsiXX0=