(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/vedio/vedio_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, 'a44dbAoMmRGnZuWWAfZ2FFg', 'vedio_controller'); // Scripts/mod/vedio/vedio_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-05-16 17:20:08 // -------------------------------------------------------------------- var VedioEvent = require("vedio_event"); var VedioConst = require("vedio_const"); var VedioController = cc.Class((_cc$Class = { "extends": BaseController, ctor: function ctor() {}, // 初始化配置数据 initConfig: function initConfig() { var VedioModel = require("vedio_model"); this.model = new VedioModel(); this.model.initConfig(); }, // 返回当前的model getModel: function getModel() { return this.model; }, // 注册监听事件 registerEvents: function registerEvents() {}, // 注册协议接受事件 registerProtocals: function registerProtocals() { // this.RegisterProtocal(1110, this.on1110); this.RegisterProtocal(19901, this.handle19901.bind(this)); //个人录像数据返回 this.RegisterProtocal(19902, this.handle19902.bind(this)); //录像大厅数据返回 this.RegisterProtocal(19903, this.handle19903.bind(this)); //点赞返回 this.RegisterProtocal(19904, this.handle19904.bind(this)); //收藏返回 this.RegisterProtocal(19905, this.handle19905.bind(this)); //分享返回 this.RegisterProtocal(19906, this.handle19906.bind(this)); //今日点赞数 this.RegisterProtocal(19907, this.handle19907.bind(this)); //伙伴信息数据 this.RegisterProtocal(19908, this.handle19908.bind(this)); //查看分享录像 }, handle19901: function handle19901(data) { if (data) { if (data.type == VedioConst.MyVedio_Type.Myself) { gcore.GlobalEvent.fire(VedioEvent.UpdateMyselfVedioEvent, data.replay_list); } else if (data.type == VedioConst.MyVedio_Type.Collect) { gcore.GlobalEvent.fire(VedioEvent.UpdateCollectVedioEvent, data.replay_list); } } }, handle19902: function handle19902(data) { if (data) { this.model.setPublicVedioData(data); gcore.GlobalEvent.fire(VedioEvent.UpdatePublicVedioEvent, data.type); } }, handle19903: function handle19903(data) { message(data.msg); if (data.code == 1) { gcore.GlobalEvent.fire(VedioEvent.CLICK_Like_Vedio_EVENT); } }, handle19904: function handle19904(data) { message(data.msg); if (data.code == 1 && data.type == 1) { //-- 收藏成功 var new_data = this.model.updateVedioData(this.vedioType_flag, data.id, "is_collect", 1); gcore.GlobalEvent.fire(VedioEvent.UpdateVedioDataEvent, new_data); gcore.GlobalEvent.fire(VedioEvent.CollectSuccessVedioEvent, data.id); } if (data.type == 0) { gcore.GlobalEvent.fire(VedioEvent.CancelCollectVedioEvent, data.id); } }, handle19905: function handle19905(data) { message(data.msg); }, handle19906: function handle19906(data) { if (data.like != null) { this.model.setTodayLikeNum(data.like); gcore.GlobalEvent.fire(VedioEvent.UpdateTodayLikeNum); } }, handle19907: function handle19907(data) { if (data) { var config = Config.partner_data.data_partner_base[data.bid]; var camp_type = 1; if (config) { camp_type = config.camp_type; } data.camp_type = camp_type; data.ext_data = data.ext; data.name = config.name; for (var i = 0; i < data.ext.length; ++i) { var v = data.ext[i]; if (v.key == 111) { //--命中 data.hit_rate = v.val; } else if (v.key == 112) { // --闪避 data.dodge_rate = v.val; } else if (v.key == 117) { //--抗暴 data.tenacity = v.val; } else if (v.key == 121) { //--伤害加成 data.dam = v.val; } else if (v.key == 122) { //--免伤 data.res = v.val; } else if (v.key == 123) { //--被治疗 data.be_cure = v.val; } else if (v.key == 124) { //--治疗 data.cure = v.val; } else if (v.key == 125) { //--物伤 data.dam_p = v.val; } else if (v.key == 126) { //--法伤 data.dam_s = v.val; } else if (v.key == 127) { //--物免 data.res_p = v.val; } else if (v.key == 128) { //--法免 data.res_s = v.val; } } // --后端问题.没法改结构..现在模拟神装数据 从artifacts里面拿数据 // data.holy_eqm = {} // for i,v in ipairs(data.artifacts) do // if v.artifact_pos == BackPackConst.item_type.GOD_EARRING + 100 or // v.artifact_pos == BackPackConst.item_type.GOD_RING + 100 or // v.artifact_pos == BackPackConst.item_type.GOD_NECKLACE + 100 or // v.artifact_pos == BackPackConst.item_type.GOD_BANGLE + 100 then // --说明是神装 // local holy_data = {} // holy_data.id = v.id // holy_data.base_id = v.base_id // holy_data.main_attr = v.attr // holy_data.holy_eqm_attr = v.extra_attr // for i,v in ipairs(holy_data.holy_eqm_attr) do // v.pos = i // end // table.insert(data.holy_eqm, holy_data) // end // end var HeroController = require("hero_controller"); HeroController.getInstance().openHeroTipsPanel(true, data); } }, handle19908: function handle19908() {}, // - 请求录像大厅的数据 requestPublicVedioData: function requestPublicVedioData(type, cond_type, start, num) { var protocal = {}; protocal.type = type; protocal.cond_type = cond_type; protocal.start = start; protocal.num = num; this.SendProtocal(19902, protocal); }, // -- 请求伙伴信息 requestVedioHeroData: function requestVedioHeroData(replay_id, partner_id, type, srv_id, combat_type) { var protocal = {}; protocal.replay_id = replay_id; protocal.partner_id = partner_id; protocal.type = type; protocal.srv_id = srv_id; protocal.combat_type = combat_type; this.SendProtocal(19907, protocal); }, // -- 请求录像分享 requestShareVedio: function requestShareVedio(id, channel, srv_id, combat_type) { var protocal = {}; protocal.id = id; protocal.channel = channel; protocal.srv_id = srv_id; protocal.combat_type = combat_type; this.SendProtocal(19905, protocal); }, // -- 请求录像收藏 requestCollectVedio: function requestCollectVedio(id, type, srv_id, combat_type, vedioType) { this.vedioType_flag = vedioType; //-- 记录一下请求收藏的类型 var protocal = {}; protocal.id = id; protocal.type = type; protocal.srv_id = srv_id; protocal.combat_type = combat_type; this.SendProtocal(19904, protocal); }, // -- 请求录像点赞 requestLikeVedio: function requestLikeVedio(id, srv_id, combat_type) { var protocal = {}; protocal.id = id; protocal.srv_id = srv_id; protocal.combat_type = combat_type; this.SendProtocal(19903, protocal); }, // -- 请求个人录像数据(我的记录、我的收藏) requestMyVedioByType: function requestMyVedioByType(type) { var protocal = {}; protocal.type = type; this.SendProtocal(19901, protocal); }, // -- 录像信息 send19908: function send19908(replay_id, srv_id, type, channel) { var protocal = {}; protocal.replay_id = replay_id; protocal.srv_id = srv_id; protocal.type = type; protocal.channel = channel; this.SendProtocal(19908, protocal); } }, _defineProperty(_cc$Class, "handle19908", function handle19908(data) { this.openVedioLookPanel(true, data); // -- GlobalEvent:getInstance():Fire(VedioEvent.LOOK_VEDIO_EVENT, data) }), _defineProperty(_cc$Class, "openVedioMainWindow", function openVedioMainWindow(status, sub_type) { if (status == true) { if (!this.vedio_main_wnd) { var VedioMainWindow = require("vedio_main_window"); this.vedio_main_wnd = new VedioMainWindow(); } if (this.vedio_main_wnd.isOpen() == false) { this.vedio_main_wnd.open(sub_type); } } else { if (this.vedio_main_wnd) { this.vedio_main_wnd.close(); this.vedio_main_wnd = null; } } }), _defineProperty(_cc$Class, "openVedioCollectWindow", function openVedioCollectWindow(status) { var self = this; if (status == true) { if (self.vedio_collect_win == null) { var VedioCollectWindow = require("vedio_collect_window"); self.vedio_collect_win = new VedioCollectWindow(); } if (self.vedio_collect_win.isOpen() == false) { self.vedio_collect_win.open(); } } else { if (self.vedio_collect_win) { self.vedio_collect_win.close(); self.vedio_collect_win = null; } } }), _defineProperty(_cc$Class, "openVedioMyselfWindow", function openVedioMyselfWindow(status) { var self = this; if (status == true) { if (self.vedio_myself_win == null) { var VedioMyselfWindow = require("vedio_myself_window"); self.vedio_myself_win = new VedioMyselfWindow(); } if (self.vedio_myself_win.isOpen() == false) { self.vedio_myself_win.open(); } } else { if (self.vedio_myself_win) { self.vedio_myself_win.close(); self.vedio_myself_win = null; } } }), _defineProperty(_cc$Class, "openVedioLookPanel", function openVedioLookPanel(status, data) { if (status == true) { if (!this.vedio_look_panel) { var VedioLookPanel = require("vedio_look_window"); this.vedio_look_panel = new VedioLookPanel(); } if (this.vedio_look_panel.isOpen() == false) { this.vedio_look_panel.open(data); } } else { if (this.vedio_look_panel) { this.vedio_look_panel.close(); this.vedio_look_panel = null; } } }), _defineProperty(_cc$Class, "openVedioSharePanel", function openVedioSharePanel(status, vedio_id, world_pos, callback, srv_id, combat_type) { if (status == true) { if (!this.vedio_share_panel) { var VedioSharePanel = require("vedio_share_window"); this.vedio_share_panel = new VedioSharePanel(); } if (this.vedio_share_panel.isOpen() == false) { this.vedio_share_panel.open({ replay_id: vedio_id, world_pos: world_pos, callback: callback, srv_id: srv_id, combat_type: combat_type }); } } else { if (this.vedio_share_panel) { this.vedio_share_panel.close(); this.vedio_share_panel = null; } } }), _cc$Class)); module.exports = VedioController; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2ZWRpb1xcdmVkaW9fY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJWZWRpb0V2ZW50IiwicmVxdWlyZSIsIlZlZGlvQ29uc3QiLCJWZWRpb0NvbnRyb2xsZXIiLCJjYyIsIkNsYXNzIiwiQmFzZUNvbnRyb2xsZXIiLCJjdG9yIiwiaW5pdENvbmZpZyIsIlZlZGlvTW9kZWwiLCJtb2RlbCIsImdldE1vZGVsIiwicmVnaXN0ZXJFdmVudHMiLCJyZWdpc3RlclByb3RvY2FscyIsIlJlZ2lzdGVyUHJvdG9jYWwiLCJoYW5kbGUxOTkwMSIsImJpbmQiLCJoYW5kbGUxOTkwMiIsImhhbmRsZTE5OTAzIiwiaGFuZGxlMTk5MDQiLCJoYW5kbGUxOTkwNSIsImhhbmRsZTE5OTA2IiwiaGFuZGxlMTk5MDciLCJoYW5kbGUxOTkwOCIsImRhdGEiLCJ0eXBlIiwiTXlWZWRpb19UeXBlIiwiTXlzZWxmIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJVcGRhdGVNeXNlbGZWZWRpb0V2ZW50IiwicmVwbGF5X2xpc3QiLCJDb2xsZWN0IiwiVXBkYXRlQ29sbGVjdFZlZGlvRXZlbnQiLCJzZXRQdWJsaWNWZWRpb0RhdGEiLCJVcGRhdGVQdWJsaWNWZWRpb0V2ZW50IiwibWVzc2FnZSIsIm1zZyIsImNvZGUiLCJDTElDS19MaWtlX1ZlZGlvX0VWRU5UIiwibmV3X2RhdGEiLCJ1cGRhdGVWZWRpb0RhdGEiLCJ2ZWRpb1R5cGVfZmxhZyIsImlkIiwiVXBkYXRlVmVkaW9EYXRhRXZlbnQiLCJDb2xsZWN0U3VjY2Vzc1ZlZGlvRXZlbnQiLCJDYW5jZWxDb2xsZWN0VmVkaW9FdmVudCIsImxpa2UiLCJzZXRUb2RheUxpa2VOdW0iLCJVcGRhdGVUb2RheUxpa2VOdW0iLCJjb25maWciLCJDb25maWciLCJwYXJ0bmVyX2RhdGEiLCJkYXRhX3BhcnRuZXJfYmFzZSIsImJpZCIsImNhbXBfdHlwZSIsImV4dF9kYXRhIiwiZXh0IiwibmFtZSIsImkiLCJsZW5ndGgiLCJ2Iiwia2V5IiwiaGl0X3JhdGUiLCJ2YWwiLCJkb2RnZV9yYXRlIiwidGVuYWNpdHkiLCJkYW0iLCJyZXMiLCJiZV9jdXJlIiwiY3VyZSIsImRhbV9wIiwiZGFtX3MiLCJyZXNfcCIsInJlc19zIiwiSGVyb0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZSIsIm9wZW5IZXJvVGlwc1BhbmVsIiwicmVxdWVzdFB1YmxpY1ZlZGlvRGF0YSIsImNvbmRfdHlwZSIsInN0YXJ0IiwibnVtIiwicHJvdG9jYWwiLCJTZW5kUHJvdG9jYWwiLCJyZXF1ZXN0VmVkaW9IZXJvRGF0YSIsInJlcGxheV9pZCIsInBhcnRuZXJfaWQiLCJzcnZfaWQiLCJjb21iYXRfdHlwZSIsInJlcXVlc3RTaGFyZVZlZGlvIiwiY2hhbm5lbCIsInJlcXVlc3RDb2xsZWN0VmVkaW8iLCJ2ZWRpb1R5cGUiLCJyZXF1ZXN0TGlrZVZlZGlvIiwicmVxdWVzdE15VmVkaW9CeVR5cGUiLCJzZW5kMTk5MDgiLCJvcGVuVmVkaW9Mb29rUGFuZWwiLCJzdGF0dXMiLCJzdWJfdHlwZSIsInZlZGlvX21haW5fd25kIiwiVmVkaW9NYWluV2luZG93IiwiaXNPcGVuIiwib3BlbiIsImNsb3NlIiwic2VsZiIsInZlZGlvX2NvbGxlY3Rfd2luIiwiVmVkaW9Db2xsZWN0V2luZG93IiwidmVkaW9fbXlzZWxmX3dpbiIsIlZlZGlvTXlzZWxmV2luZG93IiwidmVkaW9fbG9va19wYW5lbCIsIlZlZGlvTG9va1BhbmVsIiwidmVkaW9faWQiLCJ3b3JsZF9wb3MiLCJjYWxsYmFjayIsInZlZGlvX3NoYXJlX3BhbmVsIiwiVmVkaW9TaGFyZVBhbmVsIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsVUFBVSxHQUFHQyxPQUFPLENBQUMsYUFBRCxDQUF4Qjs7QUFDQSxJQUFJQyxVQUFVLEdBQUdELE9BQU8sQ0FBQyxhQUFE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OlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDov5nph4zloavlhpnor6bnu4bor7TmmI4s5Li76KaB5aGr5YaZ6K+l5qih5Z2X55qE5Yqf6IO9566A6KaBXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNS0xNiAxNzoyMDowOFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBWZWRpb0V2ZW50ID0gcmVxdWlyZShcInZlZGlvX2V2ZW50XCIpXG52YXIgVmVkaW9Db25zdCA9IHJlcXVpcmUoXCJ2ZWRpb19jb25zdFwiKVxudmFyIFZlZGlvQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIFZlZGlvTW9kZWwgPSByZXF1aXJlKFwidmVkaW9fbW9kZWxcIik7XG5cbiAgICAgICAgdGhpcy5tb2RlbCA9IG5ldyBWZWRpb01vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozljY/orq7mjqXlj5fkuovku7ZcbiAgICByZWdpc3RlclByb3RvY2FsczogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTExMCwgdGhpcy5vbjExMTApO1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDEsdGhpcy5oYW5kbGUxOTkwMS5iaW5kKHRoaXMpKSAvL+S4quS6uuW9leWDj+aVsOaNrui/lOWbnlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDIsdGhpcy5oYW5kbGUxOTkwMi5iaW5kKHRoaXMpKSAvL+W9leWDj+Wkp+WOheaVsOaNrui/lOWbnlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDMsdGhpcy5oYW5kbGUxOTkwMy5iaW5kKHRoaXMpKSAvL+eCuei1nui/lOWbnlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDQsdGhpcy5oYW5kbGUxOTkwNC5iaW5kKHRoaXMpKSAvL+aUtuiXj+i/lOWbnlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDUsdGhpcy5oYW5kbGUxOTkwNS5iaW5kKHRoaXMpKSAvL+WIhuS6q+i/lOWbnlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDYsdGhpcy5oYW5kbGUxOTkwNi5iaW5kKHRoaXMpKSAvL+S7iuaXpeeCuei1nuaVsFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTk5MDcsdGhpcy5oYW5kbGUxOTkwNy5iaW5kKHRoaXMpKSAvL+S8meS8tOS/oeaBr+aVsOaNrlxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxOTkwOCx0aGlzLmhhbmRsZTE5OTA4LmJpbmQodGhpcykpIC8v5p+l55yL5YiG5Lqr5b2V5YOPXG4gICAgfSxcbiAgICBoYW5kbGUxOTkwMShkYXRhKXtcbiAgICAgICAgaWYoZGF0YSl7XG5cdFx0ICAgIGlmKGRhdGEudHlwZSA9PSBWZWRpb0NvbnN0Lk15VmVkaW9fVHlwZS5NeXNlbGYpe1xuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5VcGRhdGVNeXNlbGZWZWRpb0V2ZW50LCBkYXRhLnJlcGxheV9saXN0KVxuICAgICAgICAgICAgfWVsc2UgaWYoZGF0YS50eXBlID09IFZlZGlvQ29uc3QuTXlWZWRpb19UeXBlLkNvbGxlY3Qpe1xuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5VcGRhdGVDb2xsZWN0VmVkaW9FdmVudCwgZGF0YS5yZXBsYXlfbGlzdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9LFxuICAgIGhhbmRsZTE5OTAyKGRhdGEpe1xuICAgICAgICBpZihkYXRhKXtcblx0XHQgICAgdGhpcy5tb2RlbC5zZXRQdWJsaWNWZWRpb0RhdGEoZGF0YSlcblx0XHQgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWZWRpb0V2ZW50LlVwZGF0ZVB1YmxpY1ZlZGlvRXZlbnQsIGRhdGEudHlwZSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlMTk5MDMoZGF0YSl7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5DTElDS19MaWtlX1ZlZGlvX0VWRU5UKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGUxOTkwNChkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICAgICAgaWYoZGF0YS5jb2RlID09IDEgJiYgZGF0YS50eXBlID09IDEpeyAgLy8tLSDmlLbol4/miJDlip9cbiAgICAgICAgICAgIGxldCBuZXdfZGF0YSA9IHRoaXMubW9kZWwudXBkYXRlVmVkaW9EYXRhKHRoaXMudmVkaW9UeXBlX2ZsYWcsIGRhdGEuaWQsIFwiaXNfY29sbGVjdFwiLCAxKVxuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWZWRpb0V2ZW50LlVwZGF0ZVZlZGlvRGF0YUV2ZW50LCBuZXdfZGF0YSlcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5Db2xsZWN0U3VjY2Vzc1ZlZGlvRXZlbnQsIGRhdGEuaWQpXG4gICAgICAgIH1cbiAgICAgICAgaWYoZGF0YS50eXBlID09IDApe1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWZWRpb0V2ZW50LkNhbmNlbENvbGxlY3RWZWRpb0V2ZW50LCBkYXRhLmlkKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGUxOTkwNShkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuICAgIGhhbmRsZTE5OTA2KGRhdGEpe1xuICAgICAgICBpZihkYXRhLmxpa2UgIT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldFRvZGF5TGlrZU51bShkYXRhLmxpa2UpXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZlZGlvRXZlbnQuVXBkYXRlVG9kYXlMaWtlTnVtKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGUxOTkwNyhkYXRhKXtcbiAgICAgICAgaWYoZGF0YSl7XG4gICAgICAgICAgICBsZXQgY29uZmlnID0gQ29uZmlnLnBhcnRuZXJfZGF0YS5kYXRhX3BhcnRuZXJfYmFzZVtkYXRhLmJpZF1cbiAgICAgICAgICAgIGxldCBjYW1wX3R5cGUgPSAxXG4gICAgICAgICAgICBpZihjb25maWcpe1xuICAgICAgICAgICAgICAgIGNhbXBfdHlwZSA9IGNvbmZpZy5jYW1wX3R5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuY2FtcF90eXBlID0gY2FtcF90eXBlXG4gICAgICAgICAgICBkYXRhLmV4dF9kYXRhID0gZGF0YS5leHRcbiAgICAgICAgICAgIGRhdGEubmFtZSA9IGNvbmZpZy5uYW1lXG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPGRhdGEuZXh0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCB2ID0gZGF0YS5leHRbaV1cbiAgICAgICAgICAgICAgICBpZih2LmtleSA9PSAxMTEpeyAvLy0t5ZG95LitXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuaGl0X3JhdGUgPSB2LnZhbFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHYua2V5ID09IDExMil7IC8vIC0t6Zeq6YG/XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZG9kZ2VfcmF0ZSA9IHYudmFsXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodi5rZXkgPT0gMTE3KXsgLy8tLeaKl+aatFxuICAgICAgICAgICAgICAgICAgICBkYXRhLnRlbmFjaXR5ID0gdi52YWxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih2LmtleSA9PSAxMjEpeyAgLy8tLeS8pOWus+WKoOaIkFxuICAgICAgICAgICAgICAgICAgICBkYXRhLmRhbSA9IHYudmFsXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodi5rZXkgPT0gMTIyKXsgLy8tLeWFjeS8pFxuICAgICAgICAgICAgICAgICAgICBkYXRhLnJlcyA9IHYudmFsXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodi5rZXkgPT0gMTIzKXsgLy8tLeiiq+ayu+eWl1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmJlX2N1cmUgPSB2LnZhbFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHYua2V5ID09IDEyNCl7IC8vLS3msrvnlpdcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5jdXJlID0gdi52YWxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih2LmtleSA9PSAxMjUpeyAgLy8tLeeJqeS8pFxuICAgICAgICAgICAgICAgICAgICBkYXRhLmRhbV9wID0gdi52YWxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih2LmtleSA9PSAxMjYpeyAgLy8tLeazleS8pFxuICAgICAgICAgICAgICAgICAgICBkYXRhLmRhbV9zID0gdi52YWxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih2LmtleSA9PSAxMjcpeyAgIC8vLS3nianlhY1cbiAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXNfcCA9IHYudmFsXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodi5rZXkgPT0gMTI4KXsgIC8vLS3ms5XlhY1cbiAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXNfcyA9IHYudmFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAtLeWQjuerr+mXrumimC7msqHms5XmlLnnu5PmnoQuLueOsOWcqOaooeaLn+elnuijheaVsOaNriDku45hcnRpZmFjdHPph4zpnaLmi7/mlbDmja5cbiAgICAgICAgICAgIC8vIGRhdGEuaG9seV9lcW0gPSB7fVxuICAgICAgICAgICAgLy8gZm9yIGksdiBpbiBpcGFpcnMoZGF0YS5hcnRpZmFjdHMpIGRvXG4gICAgICAgICAgICAvLyAgICAgaWYgdi5hcnRpZmFjdF9wb3MgPT0gQmFja1BhY2tDb25zdC5pdGVtX3R5cGUuR09EX0VBUlJJTkcgKyAxMDAgb3JcbiAgICAgICAgICAgIC8vICAgICAgICAgdi5hcnRpZmFjdF9wb3MgPT0gQmFja1BhY2tDb25zdC5pdGVtX3R5cGUuR09EX1JJTkcgKyAxMDAgb3JcbiAgICAgICAgICAgIC8vICAgICAgICAgdi5hcnRpZmFjdF9wb3MgPT0gQmFja1BhY2tDb25zdC5pdGVtX3R5cGUuR09EX05FQ0tMQUNFICsgMTAwIG9yXG4gICAgICAgICAgICAvLyAgICAgICAgIHYuYXJ0aWZhY3RfcG9zID09IEJhY2tQYWNrQ29uc3QuaXRlbV90eXBlLkdPRF9CQU5HTEUgKyAxMDAgdGhlblxuICAgICAgICAgICAgLy8gICAgICAgICAtLeivtOaYjuaYr+elnuijhVxuICAgICAgICAgICAgLy8gICAgICAgICBsb2NhbCBob2x5X2RhdGEgPSB7fVxuICAgICAgICAgICAgLy8gICAgICAgICBob2x5X2RhdGEuaWQgPSB2LmlkXG4gICAgICAgICAgICAvLyAgICAgICAgIGhvbHlfZGF0YS5iYXNlX2lkID0gdi5iYXNlX2lkXG4gICAgICAgICAgICAvLyAgICAgICAgIGhvbHlfZGF0YS5tYWluX2F0dHIgPSB2LmF0dHJcbiAgICAgICAgICAgIC8vICAgICAgICAgaG9seV9kYXRhLmhvbHlfZXFtX2F0dHIgPSB2LmV4dHJhX2F0dHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZm9yIGksdiBpbiBpcGFpcnMoaG9seV9kYXRhLmhvbHlfZXFtX2F0dHIpIGRvXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB2LnBvcyA9IGlcbiAgICAgICAgICAgIC8vICAgICAgICAgZW5kXG4gICAgICAgICAgICAvLyAgICAgICAgIHRhYmxlLmluc2VydChkYXRhLmhvbHlfZXFtLCBob2x5X2RhdGEpXG4gICAgICAgICAgICAvLyAgICAgZW5kXG4gICAgICAgICAgICAvLyBlbmRcbiAgICAgICAgICAgIHZhciBIZXJvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJoZXJvX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgIEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbkhlcm9UaXBzUGFuZWwodHJ1ZSwgZGF0YSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlMTk5MDgoKXtcblxuICAgIH0sXG4gICAgLy8gLSDor7fmsYLlvZXlg4/lpKfljoXnmoTmlbDmja5cbiAgICByZXF1ZXN0UHVibGljVmVkaW9EYXRhKCB0eXBlLCBjb25kX3R5cGUsIHN0YXJ0LCBudW0gKXtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwudHlwZSA9IHR5cGVcbiAgICAgICAgcHJvdG9jYWwuY29uZF90eXBlID0gY29uZF90eXBlXG4gICAgICAgIHByb3RvY2FsLnN0YXJ0ID0gc3RhcnRcbiAgICAgICAgcHJvdG9jYWwubnVtID0gbnVtXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE5OTAyLCBwcm90b2NhbClcbiAgICB9LFxuICAgIC8vIC0tIOivt+axguS8meS8tOS/oeaBr1xuICAgIHJlcXVlc3RWZWRpb0hlcm9EYXRhKCByZXBsYXlfaWQsIHBhcnRuZXJfaWQsIHR5cGUsIHNydl9pZCwgY29tYmF0X3R5cGUgKXtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwucmVwbGF5X2lkID0gcmVwbGF5X2lkXG4gICAgICAgIHByb3RvY2FsLnBhcnRuZXJfaWQgPSBwYXJ0bmVyX2lkXG4gICAgICAgIHByb3RvY2FsLnR5cGUgPSB0eXBlXG4gICAgICAgIHByb3RvY2FsLnNydl9pZCA9IHNydl9pZFxuICAgICAgICBwcm90b2NhbC5jb21iYXRfdHlwZSA9IGNvbWJhdF90eXBlXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE5OTA3LCBwcm90b2NhbClcbiAgICB9LFxuICAgIC8vIC0tIOivt+axguW9leWDj+WIhuS6q1xuICAgIHJlcXVlc3RTaGFyZVZlZGlvKCBpZCwgY2hhbm5lbCwgc3J2X2lkLCBjb21iYXRfdHlwZSApe1xuICAgICAgICBsZXQgcHJvdG9jYWwgPSB7fVxuICAgICAgICBwcm90b2NhbC5pZCA9IGlkXG4gICAgICAgIHByb3RvY2FsLmNoYW5uZWwgPSBjaGFubmVsXG4gICAgICAgIHByb3RvY2FsLnNydl9pZCA9IHNydl9pZFxuICAgICAgICBwcm90b2NhbC5jb21iYXRfdHlwZSA9IGNvbWJhdF90eXBlXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE5OTA1LCBwcm90b2NhbClcbiAgICB9LFxuICAgIC8vIC0tIOivt+axguW9leWDj+aUtuiXj1xuICAgIHJlcXVlc3RDb2xsZWN0VmVkaW8oIGlkLCB0eXBlLCBzcnZfaWQsIGNvbWJhdF90eXBlLCB2ZWRpb1R5cGUgKXtcbiAgICAgICAgdGhpcy52ZWRpb1R5cGVfZmxhZyA9IHZlZGlvVHlwZSAgLy8tLSDorrDlvZXkuIDkuIvor7fmsYLmlLbol4/nmoTnsbvlnotcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwuaWQgPSBpZFxuICAgICAgICBwcm90b2NhbC50eXBlID0gdHlwZVxuICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWRcbiAgICAgICAgcHJvdG9jYWwuY29tYmF0X3R5cGUgPSBjb21iYXRfdHlwZVxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxOTkwNCwgcHJvdG9jYWwpXG4gICAgfSwgICAgXG4gICAgLy8gLS0g6K+35rGC5b2V5YOP54K56LWeXG4gICAgcmVxdWVzdExpa2VWZWRpbyggaWQsIHNydl9pZCwgY29tYmF0X3R5cGUgKXtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwuaWQgPSBpZFxuICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWRcbiAgICAgICAgcHJvdG9jYWwuY29tYmF0X3R5cGUgPSBjb21iYXRfdHlwZVxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxOTkwMywgcHJvdG9jYWwpXG4gICAgfSxcbiAgICAvLyAtLSDor7fmsYLkuKrkurrlvZXlg4/mlbDmja4o5oiR55qE6K6w5b2V44CB5oiR55qE5pS26JePKVxuICAgIHJlcXVlc3RNeVZlZGlvQnlUeXBlKCB0eXBlICl7XG4gICAgICAgIGxldCBwcm90b2NhbCA9IHt9XG4gICAgICAgIHByb3RvY2FsLnR5cGUgPSB0eXBlXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE5OTAxLCBwcm90b2NhbClcbiAgICB9LFxuICAgIC8vIC0tIOW9leWDj+S/oeaBr1xuICAgIHNlbmQxOTkwOCggcmVwbGF5X2lkLCBzcnZfaWQsIHR5cGUsIGNoYW5uZWwgKXtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwucmVwbGF5X2lkID0gcmVwbGF5X2lkXG4gICAgICAgIHByb3RvY2FsLnNydl9pZCA9IHNydl9pZFxuICAgICAgICBwcm90b2NhbC50eXBlID0gdHlwZVxuICAgICAgICBwcm90b2NhbC5jaGFubmVsID0gY2hhbm5lbFxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxOTkwOCwgcHJvdG9jYWwpXG4gICAgfSAsXG4gICAgaGFuZGxlMTk5MDgoZGF0YSl7XG4gICAgICAgIHRoaXMub3BlblZlZGlvTG9va1BhbmVsKHRydWUsIGRhdGEpXG4gICAgICAgIC8vIC0tIEdsb2JhbEV2ZW50OmdldEluc3RhbmNlKCk6RmlyZShWZWRpb0V2ZW50LkxPT0tfVkVESU9fRVZFTlQsIGRhdGEpXG4gICAgfSxcblxuICAgIC8vIOaJk+W8gOW9leWDj+mmhlxuICAgIG9wZW5WZWRpb01haW5XaW5kb3coIHN0YXR1cywgc3ViX3R5cGUgKXtcbiAgICAgICAgaWYoc3RhdHVzID09IHRydWUpe1xuICAgICAgICAgICAgaWYoIXRoaXMudmVkaW9fbWFpbl93bmQpe1xuICAgICAgICAgICAgICAgIHZhciBWZWRpb01haW5XaW5kb3cgPSByZXF1aXJlKFwidmVkaW9fbWFpbl93aW5kb3dcIilcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX21haW5fd25kID0gbmV3IFZlZGlvTWFpbldpbmRvdygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnZlZGlvX21haW5fd25kLmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX21haW5fd25kLm9wZW4oc3ViX3R5cGUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy52ZWRpb19tYWluX3duZCl7XG4gICAgICAgICAgICAgICAgdGhpcy52ZWRpb19tYWluX3duZC5jbG9zZSgpXG4gICAgICAgICAgICAgICAgdGhpcy52ZWRpb19tYWluX3duZCA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy/miZPlvIDlvZXlg4/mlLbol4/nlYzpnaJcbiAgICBvcGVuVmVkaW9Db2xsZWN0V2luZG93KHN0YXR1cyl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZihzdGF0dXMgPT0gdHJ1ZSl7XG4gICAgICAgICAgICBpZihzZWxmLnZlZGlvX2NvbGxlY3Rfd2luID09IG51bGwpe1xuICAgICAgICAgICAgICAgIHZhciBWZWRpb0NvbGxlY3RXaW5kb3cgPSByZXF1aXJlKFwidmVkaW9fY29sbGVjdF93aW5kb3dcIilcbiAgICAgICAgICAgICAgICBzZWxmLnZlZGlvX2NvbGxlY3Rfd2luID0gbmV3IFZlZGlvQ29sbGVjdFdpbmRvdygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihzZWxmLnZlZGlvX2NvbGxlY3Rfd2luLmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBzZWxmLnZlZGlvX2NvbGxlY3Rfd2luLm9wZW4oKVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHNlbGYudmVkaW9fY29sbGVjdF93aW4pe1xuICAgICAgICAgICAgICAgIHNlbGYudmVkaW9fY29sbGVjdF93aW4uY2xvc2UoKVxuICAgICAgICAgICAgICAgIHNlbGYudmVkaW9fY29sbGVjdF93aW4gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8v5omT5byA5Liq5Lq66K6w5b2V55WM6Z2iXG4gICAgb3BlblZlZGlvTXlzZWxmV2luZG93KHN0YXR1cyl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZihzdGF0dXMgPT0gdHJ1ZSl7XG4gICAgICAgICAgICBpZihzZWxmLnZlZGlvX215c2VsZl93aW4gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgdmFyIFZlZGlvTXlzZWxmV2luZG93ID0gcmVxdWlyZShcInZlZGlvX215c2VsZl93aW5kb3dcIilcbiAgICAgICAgICAgICAgICBzZWxmLnZlZGlvX215c2VsZl93aW4gPSBuZXcgVmVkaW9NeXNlbGZXaW5kb3coKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoc2VsZi52ZWRpb19teXNlbGZfd2luLmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBzZWxmLnZlZGlvX215c2VsZl93aW4ub3BlbigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYoc2VsZi52ZWRpb19teXNlbGZfd2luKXtcbiAgICAgICAgICAgICAgICBzZWxmLnZlZGlvX215c2VsZl93aW4uY2xvc2UoKVxuICAgICAgICAgICAgICAgIHNlbGYudmVkaW9fbXlzZWxmX3dpbiA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb3BlblZlZGlvTG9va1BhbmVsKHN0YXR1cywgZGF0YSl7XG4gICAgICAgIGlmKHN0YXR1cyA9PSB0cnVlKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLnZlZGlvX2xvb2tfcGFuZWwpe1xuICAgICAgICAgICAgICAgIGxldCBWZWRpb0xvb2tQYW5lbCA9IHJlcXVpcmUoXCJ2ZWRpb19sb29rX3dpbmRvd1wiKVxuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fbG9va19wYW5lbCA9IG5ldyBWZWRpb0xvb2tQYW5lbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnZlZGlvX2xvb2tfcGFuZWwuaXNPcGVuKCkgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fbG9va19wYW5lbC5vcGVuKGRhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy52ZWRpb19sb29rX3BhbmVsKXtcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX2xvb2tfcGFuZWwuY2xvc2UoKVxuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fbG9va19wYW5lbCA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb3BlblZlZGlvU2hhcmVQYW5lbChzdGF0dXMsICB2ZWRpb19pZCwgd29ybGRfcG9zLCBjYWxsYmFjaywgc3J2X2lkLCBjb21iYXRfdHlwZSl7XG4gICAgICAgIGlmKHN0YXR1cyA9PSB0cnVlKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLnZlZGlvX3NoYXJlX3BhbmVsKXtcbiAgICAgICAgICAgICAgICBsZXQgVmVkaW9TaGFyZVBhbmVsID0gcmVxdWlyZShcInZlZGlvX3NoYXJlX3dpbmRvd1wiKVxuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fc2hhcmVfcGFuZWwgPSBuZXcgVmVkaW9TaGFyZVBhbmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMudmVkaW9fc2hhcmVfcGFuZWwuaXNPcGVuKCkgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fc2hhcmVfcGFuZWwub3Blbih7cmVwbGF5X2lkOnZlZGlvX2lkLCB3b3JsZF9wb3M6d29ybGRfcG9zLCBjYWxsYmFjazpjYWxsYmFjaywgc3J2X2lkOnNydl9pZCwgY29tYmF0X3R5cGU6Y29tYmF0X3R5cGV9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMudmVkaW9fc2hhcmVfcGFuZWwpe1xuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fc2hhcmVfcGFuZWwuY2xvc2UoKVxuICAgICAgICAgICAgICAgIHRoaXMudmVkaW9fc2hhcmVfcGFuZWwgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlZGlvQ29udHJvbGxlcjsiXX0=