|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/partnersummon/view/partnersummon_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, '4b7db4azrtO3qfjh8QFjoB8', 'partnersummon_window');
|
// Scripts/mod/partnersummon/view/partnersummon_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-01-14 09:29:03
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var PartnewSummon = require("partnersummon_item");
|
|
var SummonEvent = require("partnersummon_event");
|
|
var SummonConst = require("partnersummon_const");
|
|
var MainUiController = require("mainui_controller");
|
|
var GuideEvent = require("guide_event");
|
|
var PartnersSummon = cc.Class({
|
"extends": BaseView,
|
properties: {
|
item_list: {
|
"default": {}
|
},
|
recruit_sk: null
|
},
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("partnersummon", "partnersummon_window");
|
this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Full; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.rleasePrefab = false;
|
this.ctrl = arguments[0];
|
this.model = this.ctrl.getModel();
|
|
var RoleController = require("role_controller");
|
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
|
var ActionController = require("action_controller");
|
|
if (ActionController.getInstance().action_operate) {
|
ActionController.getInstance().action_operate.setVisible(false);
|
}
|
},
|
initConfig: function initConfig() {
|
this.partnersummon_config = Config.recruit_data.data_partnersummon_data;
|
},
|
openCallBack: function openCallBack() {
|
if (this.role_vo_attr) {
|
gcore.GlobalEvent.unbind(this.role_vo_attr);
|
}
|
},
|
registerEvent: function registerEvent() {
|
// 召唤信息更新
|
gcore.GlobalEvent.bind(SummonEvent.UpdateSummonDataEvent, function (data) {
|
this.updateSummonGroupData();
|
}.bind(this)); // 召唤成功
|
|
this.addGlobalEvent(SummonEvent.PartnerSummonSuccess, function () {
|
this.playRecruitEffect();
|
}.bind(this)); // 积分更新
|
|
if (this.role_vo && !this.role_vo_attr) {
|
this.role_vo_attr = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
|
if (key === "recruit_hero" && this.root_wnd) this.updateScoreInfo();
|
}.bind(this));
|
}
|
},
|
openRootWnd: function openRootWnd(params) {
|
this.initWidgets();
|
},
|
initWidgets: function initWidgets() {
|
this.close_btn_nd = this.seekChild("close_btn");
|
this.tips_btn_nd = this.seekChild("tips_btn");
|
this.score_btn_nd = this.seekChild("score_btn");
|
this.progress_nd = this.seekChild("progress");
|
this.card_content_nd = this.seekChild("content");
|
this.progress_label_lb = this.seekChild("progress_label", cc.Label);
|
this.top_anima_sk = this.seekChild("top_anima", sp.Skeleton);
|
this.top_anima_nd = this.seekChild("top_anima");
|
this.background_nd = this.seekChild("background");
|
this.background_nd.scale = FIT_SCALE;
|
this.loadRes(PathTool.getBigBg("bigbg_11"), function (res) {
|
this.background_nd.getComponent(cc.Sprite).spriteFrame = res;
|
}.bind(this)); // 召唤动画
|
|
this.recruit_ani_bg_nd = this.seekChild("recruit_ani_bg");
|
this.recruit_ani_sk = this.seekChild("recruit_ani", sp.Skeleton);
|
this.recruit_ani_sk.setCompleteListener(this.animaComplete.bind(this));
|
this.recruit_ani_bg_nd.on(cc.Node.EventType.TOUCH_END, this.animaComplete, this);
|
this.close_btn_nd.on(cc.Node.EventType.TOUCH_END, this.didClickCloseBtn, this);
|
this.tips_btn_nd.on(cc.Node.EventType.TOUCH_END, this.didClickTipsBtn, this);
|
this.score_btn_nd.on(cc.Node.EventType.TOUCH_END, this.didClickScoreBtn, this);
|
var top_anima_path = PathTool.getSpinePath("E50065", "action");
|
this.loadRes(top_anima_path, function (ske_data) {
|
this.top_anima_sk.skeletonData = ske_data;
|
this.top_anima_sk.setAnimation(0, "status_0", true);
|
}.bind(this));
|
this.updageWidget();
|
},
|
updageWidget: function updageWidget() {
|
this.updateSummonGroupData();
|
this.refreshWelfarStatus();
|
this.updateScoreInfo();
|
var cur_score = this.role_vo.recruit_hero; // 积分信息
|
},
|
// 更新卡库列表
|
updateSummonGroupData: function updateSummonGroupData() {
|
var summon_list = this.model.getSummonGroupData();
|
|
for (var summon_i = 0; summon_i < summon_list.length; summon_i++) {
|
if (!this.item_list[summon_i]) {
|
var SummonItem = require("partnersummon_item");
|
|
this.item_list[summon_i] = new SummonItem(this.card_content_nd, summon_i, this.startRecruit.bind(this));
|
}
|
|
this.item_list[summon_i].updateData(summon_list[summon_i]);
|
}
|
},
|
refreshWelfarStatus: function refreshWelfarStatus() {},
|
updateScoreInfo: function updateScoreInfo() {
|
var need_score = this.model.getScoreSummonNeedCount();
|
var have_score = this.role_vo.recruit_hero;
|
var progress_percen = 0;
|
|
if (have_score >= need_score) {
|
progress_percen = 1;
|
this.showScoreFullAction(true);
|
} else {
|
if (have_score >= 0) {
|
progress_percen = have_score / need_score;
|
}
|
|
this.showScoreFullAction(false);
|
}
|
|
var progress_str = have_score + "/" + need_score;
|
this.progress_label_lb.string = progress_str;
|
this.progress_nd.scaleX = progress_percen;
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
gcore.GlobalEvent.fire(GuideEvent.CloseTaskEffect);
|
|
var ActionController = require("action_controller");
|
|
if (ActionController.getInstance().action_operate) {
|
ActionController.getInstance().action_operate.setVisible(true);
|
}
|
|
this.ctrl.openPartnerSummonWindow(false);
|
},
|
didClickCloseBtn: function didClickCloseBtn() {
|
Utils.playButtonSound(ButtonSound.Close);
|
this.ctrl.openPartnerSummonWindow(false);
|
},
|
didClickTipsBtn: function didClickTipsBtn() {
|
Utils.playButtonSound(ButtonSound.Normal);
|
MainUiController.getInstance().openCommonExplainView(true, Config.recruit_data.data_explain, Utils.TI18N("规则说明"));
|
},
|
didClickScoreBtn: function didClickScoreBtn() {
|
// var top_anima_path = PathTool.getSpinePath("E50065", "action");
|
// LoaderManager.getInstance().releaseRes(top_anima_path);
|
Utils.playButtonSound(ButtonSound.Normal);
|
this.ctrl.openScoreTipWindow(true);
|
},
|
// 积分抖动效果
|
showScoreFullAction: function showScoreFullAction(status) {
|
this.score_btn_nd.rotation = 1;
|
this.score_btn_nd.stopAllActions();
|
if (!status) return;
|
var act_1 = cc.rotateBy(0.05, -10);
|
var act_2 = cc.rotateBy(0.1, 20);
|
var act_3 = cc.rotateBy(0.05, -10);
|
var delay = cc.delayTime(0.7);
|
var seq_1 = cc.sequence(act_1, act_2, act_3);
|
var seq_2 = cc.repeat(seq_1, 5);
|
var seq_3 = cc.sequence(seq_2, delay);
|
|
var _final = cc.repeatForever(seq_3);
|
|
this.score_btn_nd.runAction(_final);
|
},
|
startRecruit: function startRecruit(group_id, times, recruit_type) {
|
this.last_recruit = {};
|
this.last_recruit.group_id = group_id;
|
this.last_recruit.times = times;
|
this.last_recruit.recruit_type = recruit_type;
|
this.sendRecruitProtocal(group_id, times, recruit_type);
|
},
|
regainRecruit: function regainRecruit() {
|
if (!this.last_recruit) return;
|
|
if (this.last_recruit.recruit_type == 1) {
|
this.last_recruit.recruit_type = 4; // if (this.last_recruit.group_id == SummonConst.Summon_Type.Advanced) {
|
// this.item_list[2].regainRecruit();
|
// return;
|
// } else if (this.last_recruit.group_id == SummonConst.Summon_Type.Normal) {
|
// this.item_list[0].regainRecruit();
|
// return;
|
// }
|
}
|
|
this.sendRecruitProtocal(this.last_recruit.group_id, this.last_recruit.times, this.last_recruit.recruit_type);
|
},
|
sendRecruitProtocal: function sendRecruitProtocal(group_id, times, recruit_type) {
|
var interval;
|
|
if (times == 1) {
|
interval = 500;
|
} else {
|
interval = 2000;
|
}
|
|
if (this.last_time && Math.abs(new Date().getTime() - this.last_time) < interval) {
|
//点击间隔
|
message(Utils.TI18N("点击过快"));
|
|
if (this.ctrl.getSummonResultRoot()) {
|
this.model.clickIntervalStatus(true);
|
}
|
|
return;
|
}
|
|
this.last_time = new Date().getTime(); //gcore.SmartSocket.getTime()
|
// 在此处进行道具的判断和提示。
|
|
this.ctrl.send23201(group_id, times, recruit_type);
|
},
|
// 播放召唤动画
|
playRecruitEffect: function playRecruitEffect() {
|
var recruit_data = this.model.getRecruitData();
|
if (!recruit_data) return;
|
var recruit_cgf_item = this.partnersummon_config[recruit_data.group_id];
|
var action_name = "action";
|
if (recruit_cgf_item) action_name = recruit_cgf_item.action_name;
|
var effect_res = PathTool.getEffectRes("120");
|
var effect_path = PathTool.getSpinePath(effect_res, "action");
|
this.recruit_ani_bg_nd.active = true;
|
this.loadRes(effect_path, function (recruit_sk) {
|
this.recruit_ani_sk.skeletonData = recruit_sk;
|
this.recruit_ani_sk.setAnimation(0, action_name);
|
}.bind(this)); // 播放音效
|
|
var music_name = "recruit_" + action_name;
|
Utils.playEffectSound(AUDIO_TYPE.Recruit, music_name);
|
MainUiController.getInstance().setMainUIBottomStatus(false);
|
MainUiController.getInstance().setMainUITopStatus(false);
|
},
|
animaComplete: function animaComplete() {
|
MainUiController.getInstance().setMainUIBottomStatus(true);
|
MainUiController.getInstance().setMainUITopStatus(true);
|
this.recruit_ani_sk.clearTrack(0);
|
this.recruit_ani_bg_nd.active = false;
|
this.ctrl.openSummonGainWindow(true);
|
},
|
deleteMe: function deleteMe() {
|
this._super();
|
|
for (var item_i in this.item_list) {
|
this.item_list[item_i].deleteMe();
|
}
|
},
|
getSummonItemRoot: function getSummonItemRoot(name, get_cb) {
|
this.root_item_get_cb = get_cb;
|
this.root_item_get_name = name;
|
|
if (this.item_list[0]) {
|
this.item_list[0].getSummonItemRoot(name, get_cb);
|
}
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwYXJ0bmVyc3VtbW9uXFx2aWV3XFxwYXJ0bmVyc3VtbW9uX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJQYXJ0bmV3U3VtbW9uIiwiU3VtbW9uRXZlbnQiLCJTdW1tb25Db25zdCIsIk1haW5VaUNvbnRyb2xsZXIiLCJHdWlkZUV2ZW50IiwiUGFydG5lcnNTdW1tb24iLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJwcm9wZXJ0aWVzIiwiaXRlbV9saXN0IiwicmVjcnVpdF9zayIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJ1aSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJybGVhc2VQcmVmYWIiLCJjdHJsIiwiYXJndW1lbnRzIiwibW9kZWwiLCJnZXRNb2RlbCIsIlJvbGVDb250cm9sbGVyIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwiQWN0aW9uQ29udHJvbGxlciIsImFjdGlvbl9vcGVyYXRlIiwic2V0VmlzaWJsZSIsImluaXRDb25maWciLCJwYXJ0bmVyc3VtbW9uX2NvbmZpZyIsIkNvbmZpZyIsInJlY3J1aXRfZGF0YSIsImRhdGFfcGFydG5lcnN1bW1vbl9kYXRhIiwib3BlbkNhbGxCYWNrIiwicm9sZV92b19hdHRyIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsInVuYmluZCIsInJlZ2lzdGVyRXZlbnQiLCJiaW5kIiwiVXBkYXRlU3VtbW9uRGF0YUV2ZW50IiwiZGF0YSIsInVwZGF0ZVN1bW1vbkdyb3VwRGF0YSIsImFkZEdsb2JhbEV2ZW50IiwiUGFydG5lclN1bW1vblN1Y2Nlc3MiLCJwbGF5UmVjcnVpdEVmZmVjdCIsIkV2ZW50SWQiLCJVUERBVEVfUk9MRV9BVFRSSUJVVEUiLCJrZXkiLCJ2YWx1ZSIsInJvb3Rfd25kIiwidXBkYXRlU2NvcmVJbmZvIiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJpbml0V2lkZ2V0cyIsImNsb3NlX2J0bl9uZCIsInNlZWtDaGlsZCIsInRpcHNfYnRuX25kIiwic2NvcmVfYnRuX25kIiwicHJvZ3Jlc3NfbmQiLCJjYXJkX2NvbnRlbnRfbmQiLCJwcm9ncmVzc19sYWJlbF9sYiIsIkxhYmVsIiwidG9wX2FuaW1hX3NrIiwic3AiLCJTa2VsZXRvbiIsInRvcF9hbmltYV9uZCIsImJhY2tncm91bmRfbmQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlcyIsImdldENvbXBvbmVudCIsIlNwcml0ZSIsInNwcml0ZUZyYW1lIiwicmVjcnVpdF9hbmlfYmdfbmQiLCJyZWNydWl0X2FuaV9zayIsInNldENvbXBsZXRlTGlzdGVuZXIiLCJhbmltYUNvbXBsZXRlIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwiZGlkQ2xpY2tDbG9zZUJ0biIsImRpZENsaWNrVGlwc0J0biIsImRpZENsaWNrU2NvcmVCdG4iLCJ0b3BfYW5pbWFfcGF0aCIsImdldFNwaW5lUGF0aCIsInNrZV9kYXRhIiwic2tlbGV0b25EYXRhIiwic2V0QW5pbWF0aW9uIiwidXBkYWdlV2lkZ2V0IiwicmVmcmVzaFdlbGZhclN0YXR1cyIsImN1cl9zY29yZSIsInJlY3J1aXRfaGVybyIsInN1bW1vbl9saXN0IiwiZ2V0U3VtbW9uR3JvdXBEYXRhIiwic3VtbW9uX2kiLCJsZW5ndGgiLCJTdW1tb25JdGVtIiwic3RhcnRSZWNydWl0IiwidXBkYXRlRGF0YSIsIm5lZWRfc2NvcmUiLCJnZXRTY29yZVN1bW1vbk5lZWRDb3VudCIsImhhdmVfc2NvcmUiLCJwcm9ncmVzc19wZXJjZW4iLCJzaG93U2NvcmVGdWxsQWN0aW9uIiwicHJvZ3Jlc3Nfc3RyIiwic3RyaW5nIiwic2NhbGVYIiwiY2xvc2VDYWxsQmFjayIsImZpcmUiLCJDbG9zZVRhc2tFZmZlY3QiLCJvcGVuUGFydG5lclN1bW1vbldpbmRvdyIsIlV0aWxzIiwicGxheUJ1dHRvblNvdW5kIiwiQnV0dG9uU291bmQiLCJDbG9zZSIsIk5vcm1hbCIsIm9wZW5Db21tb25FeHBsYWluVmlldyIsImRhdGFfZXhwbGFpbiIsIlRJMThOIiwib3BlblNjb3JlVGlwV2luZG93Iiwic3RhdHVzIiwicm90YXRpb24iLCJzdG9wQWxsQWN0aW9ucyIsImFjdF8xIiwicm90YXRlQnkiLCJhY3RfMiIsImFjdF8zIiwiZGVsYXkiLCJkZWxheVRpbWUiLCJzZXFfMSIsInNlcXVlbmNlIiwic2VxXzIiLCJyZXBlYXQiLCJzZXFfMyIsImZpbmFsIiwicmVwZWF0Rm9yZXZlciIsInJ1bkFjdGlvbiIsImdyb3VwX2lkIiwidGltZXMiLCJyZWNydWl0X3R5cGUiLCJsYXN0X3JlY3J1aXQiLCJzZW5kUmVjcnVpdFByb3RvY2FsIiwicmVnYWluUmVjcnVpdCIsImludGVydmFsIiwibGFzdF90aW1lIiwiTWF0aCIsImFicyIsIkRhdGUiLCJnZXRUaW1lIiwibWVzc2FnZSIsImdldFN1bW1vblJlc3VsdFJvb3QiLCJjbGlja0ludGVydmFsU3RhdHVzIiwic2VuZDIzMjAxIiwiZ2V0UmVjcnVpdERhdGEiLCJyZWNydWl0X2NnZl9pdGVtIiwiYWN0aW9uX25hbWUiLCJlZmZlY3RfcmVzIiwiZ2V0RWZmZWN0UmVzIiwiZWZmZWN0X3BhdGgiLCJhY3RpdmUiLCJtdXNpY19uYW1lIiwicGxheUVmZmVjdFNvdW5kIiwiQVVESU9fVFlQRSIsIlJlY3J1aXQiLCJzZXRNYWluVUlCb3R0b21TdGF0dXMiLCJzZXRNYWluVUlUb3BTdGF0dXMiLCJjbGVhclRyYWNrIiwib3BlblN1bW1vbkdhaW5XaW5kb3ciLCJkZWxldGVNZSIsIl9zdXBlciIsIml0ZW1faSIsImdldFN1bW1vbkl0ZW1Sb290IiwibmFtZSIsImdldF9jYiIsInJvb3RfaXRlbV9nZXRfY2IiLCJyb290X2l0ZW1fZ2V0X25hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxH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Q0EsU0FBSyxJQUFJQyxNQUFULElBQW1CLEtBQUt6SyxTQUF4QixFQUFtQztBQUMvQixXQUFLQSxTQUFMLENBQWV5SyxNQUFmLEVBQXVCRixRQUF2QjtBQUNIO0FBQ0osR0F6UXlCO0FBMlExQkcsRUFBQUEsaUJBQWlCLEVBQUUsMkJBQVNDLElBQVQsRUFBZUMsTUFBZixFQUF1QjtBQUN0QyxTQUFLQyxnQkFBTCxHQUF3QkQsTUFBeEI7QUFDQSxTQUFLRSxrQkFBTCxHQUEwQkgsSUFBMUI7O0FBQ0EsUUFBSSxLQUFLM0ssU0FBTCxDQUFlLENBQWYsQ0FBSixFQUF1QjtBQUNuQixXQUFLQSxTQUFMLENBQWUsQ0FBZixFQUFrQjBLLGlCQUFsQixDQUFvQ0MsSUFBcEMsRUFBMENDLE1BQTFDO0FBQ0g7QUFDSjtBQWpSeUIsQ0FBVCxDQUFyQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDEtMTQgMDk6Mjk6MDNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgUGFydG5ld1N1bW1vbiA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2l0ZW1cIik7XG52YXIgU3VtbW9uRXZlbnQgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl9ldmVudFwiKTtcbnZhciBTdW1tb25Db25zdCA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2NvbnN0XCIpO1xudmFyIE1haW5VaUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG52YXIgR3VpZGVFdmVudCA9IHJlcXVpcmUoXCJndWlkZV9ldmVudFwiKTtcblxudmFyIFBhcnRuZXJzU3VtbW9uID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuXG4gICAgcHJvcGVydGllczoge1xuICAgICAgICBpdGVtX2xpc3QgOiB7XG4gICAgICAgICAgICBkZWZhdWx0OiB7fVxuICAgICAgICB9LFxuICAgICAgICByZWNydWl0X3NrOiBudWxsLFxuICAgIH0sXG5cbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJwYXJ0bmVyc3VtbW9uXCIsIFwicGFydG5lcnN1bW1vbl93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy51aTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMucmxlYXNlUHJlZmFiID0gZmFsc2U7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcblxuICAgICAgICB2YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xuICAgICAgICB0aGlzLnJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICB2YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxuICAgICAgICBpZihBY3Rpb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkuYWN0aW9uX29wZXJhdGUpe1xuICAgICAgICAgICAgQWN0aW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmFjdGlvbl9vcGVyYXRlLnNldFZpc2libGUoZmFsc2UpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLnBhcnRuZXJzdW1tb25fY29uZmlnID0gQ29uZmlnLnJlY3J1aXRfZGF0YS5kYXRhX3BhcnRuZXJzdW1tb25fZGF0YTtcbiAgICB9LFxuXG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0aGlzLnJvbGVfdm9fYXR0cikge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMucm9sZV92b19hdHRyKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIC8vIOWPrOWUpOS/oeaBr+abtOaWsFxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5iaW5kKFN1bW1vbkV2ZW50LlVwZGF0ZVN1bW1vbkRhdGFFdmVudCwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdW1tb25Hcm91cERhdGEoKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyDlj6zllKTmiJDlip9cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChTdW1tb25FdmVudC5QYXJ0bmVyU3VtbW9uU3VjY2VzcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlSZWNydWl0RWZmZWN0KCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8g56ev5YiG5pu05pawXG4gICAgICAgIGlmICh0aGlzLnJvbGVfdm8gJiYgIXRoaXMucm9sZV92b19hdHRyKSB7XG4gICAgICAgICAgICB0aGlzLnJvbGVfdm9fYXR0ciA9IHRoaXMucm9sZV92by5iaW5kKEV2ZW50SWQuVVBEQVRFX1JPTEVfQVRUUklCVVRFLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwicmVjcnVpdF9oZXJvXCIgJiYgdGhpcy5yb290X3duZClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY29yZUluZm8oKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICB0aGlzLmluaXRXaWRnZXRzKCk7XG4gICAgfSxcblxuICAgIGluaXRXaWRnZXRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5jbG9zZV9idG5fbmQgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJjbG9zZV9idG5cIik7XG4gICAgICAgIHRoaXMudGlwc19idG5fbmQgICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwidGlwc19idG5cIik7XG4gICAgICAgIHRoaXMuc2NvcmVfYnRuX25kICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwic2NvcmVfYnRuXCIpO1xuICAgICAgICB0aGlzLnByb2dyZXNzX25kICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcInByb2dyZXNzXCIpO1xuICAgICAgICB0aGlzLmNhcmRfY29udGVudF9uZCAgICAgPSB0aGlzLnNlZWtDaGlsZChcImNvbnRlbnRcIik7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NfbGFiZWxfbGIgICA9IHRoaXMuc2Vla0NoaWxkKFwicHJvZ3Jlc3NfbGFiZWxcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnRvcF9hbmltYV9zayAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcInRvcF9hbmltYVwiLCBzcC5Ta2VsZXRvbik7XG4gICAgICAgIHRoaXMudG9wX2FuaW1hX25kICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwidG9wX2FuaW1hXCIpO1xuICAgICAgICB0aGlzLmJhY2tncm91bmRfbmQgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZF9uZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwiYmlnYmdfMTFcIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZF9uZC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgLy8g5Y+s5ZSk5Yqo55S7XG4gICAgICAgIHRoaXMucmVjcnVpdF9hbmlfYmdfbmQgPSB0aGlzLnNlZWtDaGlsZChcInJlY3J1aXRfYW5pX2JnXCIpO1xuICAgICAgICB0aGlzLnJlY3J1aXRfYW5pX3NrICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJyZWNydWl0X2FuaVwiLCBzcC5Ta2VsZXRvbik7XG5cbiAgICAgICAgdGhpcy5yZWNydWl0X2FuaV9zay5zZXRDb21wbGV0ZUxpc3RlbmVyKHRoaXMuYW5pbWFDb21wbGV0ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWNydWl0X2FuaV9iZ19uZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIHRoaXMuYW5pbWFDb21wbGV0ZSwgdGhpcyk7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuX25kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgdGhpcy5kaWRDbGlja0Nsb3NlQnRuLCB0aGlzKTtcbiAgICAgICAgdGhpcy50aXBzX2J0bl9uZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIHRoaXMuZGlkQ2xpY2tUaXBzQnRuLCB0aGlzKTtcbiAgICAgICAgdGhpcy5zY29yZV9idG5fbmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCB0aGlzLmRpZENsaWNrU2NvcmVCdG4sIHRoaXMpO1xuXG4gICAgICAgIHZhciB0b3BfYW5pbWFfcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChcIkU1MDA2NVwiLCBcImFjdGlvblwiKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKHRvcF9hbmltYV9wYXRoLCBmdW5jdGlvbihza2VfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy50b3BfYW5pbWFfc2suc2tlbGV0b25EYXRhID0gc2tlX2RhdGE7XG4gICAgICAgICAgICB0aGlzLnRvcF9hbmltYV9zay5zZXRBbmltYXRpb24oMCwgXCJzdGF0dXNfMFwiLCB0cnVlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLnVwZGFnZVdpZGdldCgpO1xuICAgIH0sXG5cbiAgICB1cGRhZ2VXaWRnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN1bW1vbkdyb3VwRGF0YSgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hXZWxmYXJTdGF0dXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTY29yZUluZm8oKTtcbiAgICAgICAgdmFyIGN1cl9zY29yZSA9IHRoaXMucm9sZV92by5yZWNydWl0X2hlcm87ICAvLyDnp6/liIbkv6Hmga9cbiAgICB9LFxuXG4gICAgLy8g5pu05paw5Y2h5bqT5YiX6KGoXG4gICAgdXBkYXRlU3VtbW9uR3JvdXBEYXRhOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN1bW1vbl9saXN0ID0gdGhpcy5tb2RlbC5nZXRTdW1tb25Hcm91cERhdGEoKTtcbiAgICAgICAgZm9yICh2YXIgc3VtbW9uX2kgPSAwOyBzdW1tb25faSA8IHN1bW1vbl9saXN0Lmxlbmd0aDsgc3VtbW9uX2krKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1fbGlzdFtzdW1tb25faV0pIHtcbiAgICAgICAgICAgICAgICB2YXIgU3VtbW9uSXRlbSA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2l0ZW1cIik7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3Rbc3VtbW9uX2ldID0gbmV3IFN1bW1vbkl0ZW0odGhpcy5jYXJkX2NvbnRlbnRfbmQsIHN1bW1vbl9pLCB0aGlzLnN0YXJ0UmVjcnVpdC5iaW5kKHRoaXMpKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtzdW1tb25faV0udXBkYXRlRGF0YShzdW1tb25fbGlzdFtzdW1tb25faV0pOyAgICAgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZWZyZXNoV2VsZmFyU3RhdHVzOiBmdW5jdGlvbigpIHtcbiAgICB9LFxuXG4gICAgdXBkYXRlU2NvcmVJbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5lZWRfc2NvcmUgPSB0aGlzLm1vZGVsLmdldFNjb3JlU3VtbW9uTmVlZENvdW50KCk7XG4gICAgICAgIHZhciBoYXZlX3Njb3JlID0gdGhpcy5yb2xlX3ZvLnJlY3J1aXRfaGVybztcbiAgICAgICAgdmFyIHByb2dyZXNzX3BlcmNlbiA9IDA7XG4gICAgICAgIGlmIChoYXZlX3Njb3JlID49IG5lZWRfc2NvcmUpIHtcbiAgICAgICAgICAgIHByb2dyZXNzX3BlcmNlbiA9IDE7XG4gICAgICAgICAgICB0aGlzLnNob3dTY29yZUZ1bGxBY3Rpb24odHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaGF2ZV9zY29yZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NfcGVyY2VuID0gaGF2ZV9zY29yZSAvIG5lZWRfc2NvcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNob3dTY29yZUZ1bGxBY3Rpb24oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByb2dyZXNzX3N0ciA9IGhhdmVfc2NvcmUgKyBcIi9cIiArIG5lZWRfc2NvcmU7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NfbGFiZWxfbGIuc3RyaW5nID0gcHJvZ3Jlc3Nfc3RyO1xuICAgICAgICB0aGlzLnByb2dyZXNzX25kLnNjYWxlWCA9IHByb2dyZXNzX3BlcmNlbjtcbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6ZnVuY3Rpb24oKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoR3VpZGVFdmVudC5DbG9zZVRhc2tFZmZlY3QpO1xuICAgICAgICB2YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxuICAgICAgICBpZihBY3Rpb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkuYWN0aW9uX29wZXJhdGUpe1xuICAgICAgICAgICAgQWN0aW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmFjdGlvbl9vcGVyYXRlLnNldFZpc2libGUodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwub3BlblBhcnRuZXJTdW1tb25XaW5kb3coZmFsc2UpOyAgICAgICAgXG4gICAgfSxcblxuICAgIGRpZENsaWNrQ2xvc2VCdG46IGZ1bmN0aW9uKCkge1xuICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuQ2xvc2UpO1xuICAgICAgICB0aGlzLmN0cmwub3BlblBhcnRuZXJTdW1tb25XaW5kb3coZmFsc2UpO1xuICAgIH0sXG5cbiAgICBkaWRDbGlja1RpcHNCdG46IGZ1bmN0aW9uKCkge1xuICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcbiAgICAgICAgTWFpblVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Db21tb25FeHBsYWluVmlldyh0cnVlLCAgQ29uZmlnLnJlY3J1aXRfZGF0YS5kYXRhX2V4cGxhaW4sIFV0aWxzLlRJMThOKFwi6KeE5YiZ6K+05piOXCIpKTsgICAgICAgIFxuICAgIH0sXG5cbiAgICBkaWRDbGlja1Njb3JlQnRuOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAvLyB2YXIgdG9wX2FuaW1hX3BhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFNTAwNjVcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgIC8vIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZWxlYXNlUmVzKHRvcF9hbmltYV9wYXRoKTtcblxuICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcbiAgICAgICAgdGhpcy5jdHJsLm9wZW5TY29yZVRpcFdpbmRvdyh0cnVlKTtcbiAgICB9LFxuXG4gICAgLy8g56ev5YiG5oqW5Yqo5pWI5p6cXG4gICAgc2hvd1Njb3JlRnVsbEFjdGlvbjogZnVuY3Rpb24oc3RhdHVzKSB7XG4gICAgICAgIHRoaXMuc2NvcmVfYnRuX25kLnJvdGF0aW9uID0gMTtcbiAgICAgICAgdGhpcy5zY29yZV9idG5fbmQuc3RvcEFsbEFjdGlvbnMoKTtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHJldHVybjtcbiAgICAgICAgdmFyIGFjdF8xID0gY2Mucm90YXRlQnkoMC4wNSwgLTEwKTtcbiAgICAgICAgdmFyIGFjdF8yID0gY2Mucm90YXRlQnkoMC4xLCAyMCk7XG4gICAgICAgIHZhciBhY3RfMyA9IGNjLnJvdGF0ZUJ5KDAuMDUsIC0xMCk7XG4gICAgICAgIHZhciBkZWxheSA9IGNjLmRlbGF5VGltZSgwLjcpO1xuICAgICAgICB2YXIgc2VxXzEgPSBjYy5zZXF1ZW5jZShhY3RfMSwgYWN0XzIsIGFjdF8zKTtcbiAgICAgICAgdmFyIHNlcV8yID0gY2MucmVwZWF0KHNlcV8xLCA1KTtcbiAgICAgICAgdmFyIHNlcV8zID0gY2Muc2VxdWVuY2Uoc2VxXzIsIGRlbGF5KTtcbiAgICAgICAgdmFyIGZpbmFsID0gY2MucmVwZWF0Rm9yZXZlcihzZXFfMyk7XG4gICAgICAgIHRoaXMuc2NvcmVfYnRuX25kLnJ1bkFjdGlvbihmaW5hbCk7XG4gICAgfSxcblxuICAgIHN0YXJ0UmVjcnVpdDogZnVuY3Rpb24oZ3JvdXBfaWQsIHRpbWVzLCByZWNydWl0X3R5cGUpIHtcbiAgICAgICAgdGhpcy5sYXN0X3JlY3J1aXQgPSB7fTtcbiAgICAgICAgdGhpcy5sYXN0X3JlY3J1aXQuZ3JvdXBfaWQgPSBncm91cF9pZDtcbiAgICAgICAgdGhpcy5sYXN0X3JlY3J1aXQudGltZXMgPSB0aW1lcztcbiAgICAgICAgdGhpcy5sYXN0X3JlY3J1aXQucmVjcnVpdF90eXBlID0gcmVjcnVpdF90eXBlO1xuICAgICAgICB0aGlzLnNlbmRSZWNydWl0UHJvdG9jYWwoZ3JvdXBfaWQsIHRpbWVzLCByZWNydWl0X3R5cGUpO1xuICAgIH0sXG5cbiAgICByZWdhaW5SZWNydWl0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhc3RfcmVjcnVpdCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLmxhc3RfcmVjcnVpdC5yZWNydWl0X3R5cGUgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0X3JlY3J1aXQucmVjcnVpdF90eXBlID0gNDtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmxhc3RfcmVjcnVpdC5ncm91cF9pZCA9PSBTdW1tb25Db25zdC5TdW1tb25fVHlwZS5BZHZhbmNlZCkge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXRlbV9saXN0WzJdLnJlZ2FpblJlY3J1aXQoKTtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHRoaXMubGFzdF9yZWNydWl0Lmdyb3VwX2lkID09IFN1bW1vbkNvbnN0LlN1bW1vbl9UeXBlLk5vcm1hbCkge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXRlbV9saXN0WzBdLnJlZ2FpblJlY3J1aXQoKTtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VuZFJlY3J1aXRQcm90b2NhbCh0aGlzLmxhc3RfcmVjcnVpdC5ncm91cF9pZCwgdGhpcy5sYXN0X3JlY3J1aXQudGltZXMsIHRoaXMubGFzdF9yZWNydWl0LnJlY3J1aXRfdHlwZSk7XG4gICAgfSxcblxuICAgIHNlbmRSZWNydWl0UHJvdG9jYWw6IGZ1bmN0aW9uKGdyb3VwX2lkLCB0aW1lcywgcmVjcnVpdF90eXBlKSB7XG4gICAgICAgIGxldCAgaW50ZXJ2YWw7XG4gICAgICAgIGlmKHRpbWVzID09IDEpe1xuICAgICAgICAgICAgaW50ZXJ2YWwgPSA1MDA7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaW50ZXJ2YWwgPSAyMDAwO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMubGFzdF90aW1lICYmIE1hdGguYWJzKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhpcy5sYXN0X3RpbWUpIDwgaW50ZXJ2YWwpe1xuICAgICAgICAgICAgLy/ngrnlh7vpl7TpmpRcbiAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLngrnlh7vov4flv6tcIikpXG4gICAgICAgICAgICBpZih0aGlzLmN0cmwuZ2V0U3VtbW9uUmVzdWx0Um9vdCgpKXtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmNsaWNrSW50ZXJ2YWxTdGF0dXModHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdF90aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkvL2djb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKVxuICAgICAgICAvLyDlnKjmraTlpITov5vooYzpgZPlhbfnmoTliKTmlq3lkozmj5DnpLrjgIJcbiAgICAgICAgdGhpcy5jdHJsLnNlbmQyMzIwMShncm91cF9pZCwgdGltZXMsIHJlY3J1aXRfdHlwZSk7XG4gICAgfSxcblxuICAgIC8vIOaSreaUvuWPrOWUpOWKqOeUu1xuICAgIHBsYXlSZWNydWl0RWZmZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlY3J1aXRfZGF0YSA9IHRoaXMubW9kZWwuZ2V0UmVjcnVpdERhdGEoKTtcblxuICAgICAgICBpZiAoIXJlY3J1aXRfZGF0YSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciByZWNydWl0X2NnZl9pdGVtID0gdGhpcy5wYXJ0bmVyc3VtbW9uX2NvbmZpZ1tyZWNydWl0X2RhdGEuZ3JvdXBfaWRdO1xuICAgICAgICB2YXIgYWN0aW9uX25hbWUgPSBcImFjdGlvblwiO1xuICAgICAgICBpZiAocmVjcnVpdF9jZ2ZfaXRlbSlcbiAgICAgICAgICAgIGFjdGlvbl9uYW1lID0gcmVjcnVpdF9jZ2ZfaXRlbS5hY3Rpb25fbmFtZTtcbiAgICAgICAgdmFyIGVmZmVjdF9yZXMgPSBQYXRoVG9vbC5nZXRFZmZlY3RSZXMoXCIxMjBcIik7XG4gICAgICAgIHZhciBlZmZlY3RfcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChlZmZlY3RfcmVzLCBcImFjdGlvblwiKTtcblxuICAgICAgICB0aGlzLnJlY3J1aXRfYW5pX2JnX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZFJlcyhlZmZlY3RfcGF0aCwgZnVuY3Rpb24ocmVjcnVpdF9zaykge1xuICAgICAgICAgICAgdGhpcy5yZWNydWl0X2FuaV9zay5za2VsZXRvbkRhdGEgPSByZWNydWl0X3NrO1xuICAgICAgICAgICAgdGhpcy5yZWNydWl0X2FuaV9zay5zZXRBbmltYXRpb24oMCwgYWN0aW9uX25hbWUpO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgIC8vIOaSreaUvumfs+aViFxuICAgICAgICB2YXIgbXVzaWNfbmFtZSA9IFwicmVjcnVpdF9cIiArIGFjdGlvbl9uYW1lO1xuICAgICAgICBVdGlscy5wbGF5RWZmZWN0U291bmQoQVVESU9fVFlQRS5SZWNydWl0LCBtdXNpY19uYW1lKTtcblxuICAgICAgICBNYWluVWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0TWFpblVJQm90dG9tU3RhdHVzKGZhbHNlKTtcbiAgICAgICAgTWFpblVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNldE1haW5VSVRvcFN0YXR1cyhmYWxzZSk7ICAgICAgICBcbiAgICB9LFxuXG4gICAgYW5pbWFDb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIE1haW5VaUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRNYWluVUlCb3R0b21TdGF0dXModHJ1ZSk7ICAgICAgICBcbiAgICAgICAgTWFpblVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNldE1haW5VSVRvcFN0YXR1cyh0cnVlKTsgICAgICAgIFxuICAgICAgICB0aGlzLnJlY3J1aXRfYW5pX3NrLmNsZWFyVHJhY2soMCk7XG4gICAgICAgIHRoaXMucmVjcnVpdF9hbmlfYmdfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3RybC5vcGVuU3VtbW9uR2FpbldpbmRvdyh0cnVlKTtcbiAgICB9LFxuXG4gICAgZGVsZXRlTWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9zdXBlcigpO1xuICAgICAgICBmb3IgKHZhciBpdGVtX2kgaW4gdGhpcy5pdGVtX2xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2l0ZW1faV0uZGVsZXRlTWUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTdW1tb25JdGVtUm9vdDogZnVuY3Rpb24obmFtZSwgZ2V0X2NiKSB7XG4gICAgICAgIHRoaXMucm9vdF9pdGVtX2dldF9jYiA9IGdldF9jYjtcbiAgICAgICAgdGhpcy5yb290X2l0ZW1fZ2V0X25hbWUgPSBuYW1lO1xuICAgICAgICBpZiAodGhpcy5pdGVtX2xpc3RbMF0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0WzBdLmdldFN1bW1vbkl0ZW1Sb290KG5hbWUsIGdldF9jYik7XG4gICAgICAgIH1cbiAgICB9LFxufSkiXX0=
|