(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Scripts/mod/elitesummon/view/elitesummon_panel.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, '5d6b5Pw8BNGuKO7vASj0fv2', 'elitesummon_panel');
// Scripts/mod/elitesummon/view/elitesummon_panel.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里是描述这个窗体的作用的
//
Create: 2019-08-09 15:58:31
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var ActionController = require("action_controller");
var EliteSummonEvent = require("elitesummon_event");
var ElitesummonController = require("elitesummon_controller");
var RoleController = require("role_controller");
var BackpackController = require("backpack_controller");
var BackpackEvent = require("backpack_event");
var BackPackConst = require("backpack_const");
var SummonEvent = require("partnersummon_event");
var MainUiController = require("mainui_controller");
var PartnersummonController = require("partnersummon_controller");
var TimeTool = require("timetool");
var ElitesummonPanel = cc.Class({
"extends": BasePanel,
ctor: function ctor() {
this.prefabPath = PathTool.getPrefabPath("action", "action_time_summon_panel");
this.holiday_bid = arguments[0];
this.ctrl = ElitesummonController.getInstance();
},
// 可以初始化声明一些变量的
initConfig: function initConfig() {
this._summon_type_1 = 1; // 单抽的抽取类型(1免费 3钻石 4道具)
this._summon_type_10 = 3; // 十连抽抽取类型(3钻石 4道具)
this.role_vo = RoleController.getInstance().getRoleVo();
this.arard_data = Config.recruit_holiday_elite_data.data_award;
this.const_data = Config.recruit_holiday_elite_data.data_const;
this.summon_item_bid = this.const_data["common_s"].val;
this.summon_data = Config.recruit_holiday_elite_data.data_summon;
this.action_config = Config.recruit_holiday_elite_data.data_action;
},
// 初始化一些配置数据,可以用于声明一些变量之类的
initPanel: function initPanel() {
this.setPosition(0, -20);
var main_container = this.root_wnd.getChildByName("main_container");
this.progress_txt = main_container.getChildByName("progress_txt").getComponent(cc.Label);
var image_bg_sp = main_container.getChildByName("image_bg").getComponent(cc.Sprite);
this.progress = main_container.getChildByName("progress").getComponent(cc.ProgressBar);
this.baodi_bg = main_container.getChildByName("baodi_bg");
var str_bg = "txt_cn_elitesummon_1";
var tab_vo = ActionController.getInstance().getActionSubTabVo(this.holiday_bid);
if (tab_vo && tab_vo.aim_title != "" && tab_vo.aim_title) {
str_bg = tab_vo.aim_title;
}
var path = PathTool.getBigBg(str_bg, "jpg", "timesummon");
this.loadRes(path, function (res) {
image_bg_sp.spriteFrame = res;
}.bind(this));
this.item_num_txt = main_container.getChildByName("item_num_txt").getComponent(cc.Label);
this.award_btn = main_container.getChildByName("award_btn");
this.award_btn.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("奖励预览");
main_container.getChildByName("preview_btn").active = false;
this.summon_btn_1 = main_container.getChildByName("summon_btn_1");
this.summon_btn_1.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("招募1次");
this.summon_txt_1_rt = this.summon_btn_1.getChildByName("summon_txt_1").getComponent(cc.RichText);
this.summon_prop_1_nd = this.summon_btn_1.getChildByName("summon_prop");
this.summon_prop_num_lb = this.summon_prop_1_nd.getChildByName("summon_prop_num").getComponent(cc.Label);
this.summon_btn_10 = main_container.getChildByName("summon_btn_10");
this.summon_btn_10.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("招募10次");
this.summon_prop_10_nd = this.summon_btn_10.getChildByName("summon_prop");
this.summon_prop_sp = this.summon_prop_10_nd.getChildByName("summon_prop_item").getComponent(cc.Sprite);
this.summon_10_num_lb = this.summon_prop_10_nd.getChildByName("summon_prop_num").getComponent(cc.Label);
this.time_txt = main_container.getChildByName("time_txt").getComponent(cc.Label);
this.time_txt.node.setPosition(414, 283);
this.time_txt.node.color = new cc.Color(255, 252, 187);
var line = this.time_txt.node.addComponent(cc.LabelOutline);
line.color = new cc.Color(112, 18, 18);
line.width = 2;
this.time_txt.lineHeight = 30; // this.time_txt.node.active = false;
this.baodi_text_rt = this.seekChild("baodi_text", cc.RichText);
this.baodi_text_rt.node.setAnchorPoint(1, 0.5);
this.baodi_text_rt.node.x = 75;
this.award_item = ItemsPool.getInstance().getItem("backpack_item");
this.award_item.setParent(main_container);
this.award_item.setPosition(60, 728);
this.award_item.initConfig(false, 0.6, false, false);
this.award_item.show();
this.award_item.addCallBack(this._onClickAwardItem.bind(this));
var item_config = Utils.getItemConfig(this.summon_item_bid);
var path1 = PathTool.getItemRes(item_config.icon);
this.loadRes(path1, function (res) {
this.summon_prop_1_nd.getChildByName("summon_prop_item").getComponent(cc.Sprite).spriteFrame = res;
main_container.getChildByName("item_icon").getComponent(cc.Sprite).spriteFrame = res;
}.bind(this));
this.baodi_bg.getChildByName("tip").active = true;
this.btn_rule = this.baodi_bg.getChildByName("tip");
},
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
registerEvent: function registerEvent() {
this.addGlobalEvent(EliteSummonEvent.EliteSummon_Message, function (data) {
if (!data) return;
var status = this.ctrl.getModel().isHolidayHasID(data.camp_id);
if (status) {
this.setData(data);
}
}.bind(this)); // --物品道具增加
this.addGlobalEvent(BackpackEvent.ADD_GOODS, function (bag_code, data_list) {
this.updateItemNum(bag_code, data_list);
}.bind(this)); //物品道具删除
this.addGlobalEvent(BackpackEvent.DELETE_GOODS, function (bag_code, data_list) {
this.updateItemNum(bag_code, data_list);
}.bind(this)); //物品道具改变
this.addGlobalEvent(BackpackEvent.MODIFY_GOODS_NUM, function (bag_code, data_list) {
this.updateItemNum(bag_code, data_list);
}.bind(this)); // 召唤成功
this.addGlobalEvent(SummonEvent.PartnerSummonSuccess, function () {
this.playRecruitEffect();
}.bind(this));
this.award_btn.on("click", function () {
if (this.data && this.data.camp_id) {
var config = this.action_config[this.data.camp_id];
if (config) {
var TimesummonController = require("timesummon_controller");
TimesummonController.getInstance().openTimeSummonAwardView(true, config.group_id, this.data, true);
}
}
}, this);
this.btn_rule.on('click', function (event) {
if (this.data && this.data.camp_id) {
var config = this.action_config[this.data.camp_id];
if (config) {
var pos = event.node.convertToWorldSpaceAR(cc.v2(0, 0));
require("tips_controller").getInstance().showCommonTips(config.desc, pos, null, null, 500);
}
}
}, this);
this.summon_btn_1.on('click', function () {
Utils.playButtonSound(1);
if (this.checkHeroBagIsFull(1)) return;
if (this.last_time && gcore.SmartSocket.getTime() - this.last_time < 2) {
return;
}
this.last_time = gcore.SmartSocket.getTime();
if (this._summon_type_1 == 3) {
if (this.data && this.data.camp_id) {
var group_id = this.action_config[this.data.camp_id].group_id;
var config = this.summon_data[group_id];
var num = config.loss_gold_once[0][1];
var call_back = function call_back() {
this.ctrl.send23221(1, this._summon_type_1);
};
var item_icon_2 = Utils.getItemConfig(config.loss_gold_once[0][0]).icon;
var val_str = Utils.getItemConfig(config.gain_once[0][0]).name || "";
var val_num = config.gain_once[0][1];
var call_num = 1;
this.showGoldTips(item_icon_2, num, call_num, val_num, val_str, call_back);
}
} else {
this.ctrl.send23221(1, this._summon_type_1);
}
}, this);
this.summon_btn_10.on("click", function () {
Utils.playButtonSound(1);
if (this.checkHeroBagIsFull(10)) return;
if (this.last_time && Math.abs(gcore.SmartSocket.getTime() - this.last_time) < 0.5) {
return;
}
this.last_time = gcore.SmartSocket.getTime();
if (this._summon_type_10 == 3) {
if (this.data && this.data.camp_id) {
var group_id = this.action_config[this.data.camp_id].group_id;
var config = this.summon_data[group_id];
var num = config.loss_gold_ten[0][1];
var call_back = function call_back() {
this.ctrl.send23221(10, this._summon_type_10);
};
var item_icon_2 = Utils.getItemConfig(config.loss_gold_ten[0][0]).icon;
var val_str = Utils.getItemConfig(config.gain_ten[0][0]).name || "";
var val_num = config.gain_ten[0][1];
var call_num = 10;
this.showGoldTips(item_icon_2, num, call_num, val_num, val_str, call_back);
}
} else {
this.ctrl.send23221(10, this._summon_type_10);
}
}, this);
this.ctrl.send23220();
},
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
onShow: function onShow(params) {},
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
onHide: function onHide() {},
setData: function setData(data) {
this.data = data;
this.updateSummonBtnStatus();
this.nextRewardLevel();
this.updateItemNum();
var str_time = cc.js.formatStr("%s-%s", TimeTool.getMD2(data.start_time), TimeTool.getMD2(data.end_time));
this.time_txt.string = str_time;
this.baodi_text_rt.string = Utils.TI18N(cc.js.formatStr(StringUtil.parseStr("
剩余
%d
次招募内必出UP英雄
").string, data.must_count));
},
updateSummonBtnStatus: function updateSummonBtnStatus() {
if (this.data && this.data.camp_id) {
var config = this.action_config[this.data.camp_id];
var data = this.summon_data[config.group_id];
var summon_have_num = BackpackController.getInstance().getModel().getItemNumByBid(this.summon_item_bid); // -- 单抽
var cur_time = gcore.SmartSocket.getTime();
if (this.data.free_time == 0 && this.data.free_time <= cur_time) {
var txt_str_1 = Utils.TI18N(StringUtil.parseStr("免费召唤
").string);
this._summon_type_1 = 1;
this.openSummonFreeTimer(false);
this.summon_txt_1_rt.node.active = true; //免费 或者 倒计时
this.summon_prop_1_nd.active = false; //道具
this.summon_txt_1_rt.string = txt_str_1;
} else if (summon_have_num >= 1) {
this._summon_type_1 = 4;
this.openSummonFreeTimer(false);
this.summon_txt_1_rt.node.active = false; //免费 或者 倒计时
this.summon_prop_1_nd.active = true; //道具
this.summon_prop_num_lb.string = summon_have_num;
} else if (this.data.free_time) {
this.left_time = this.data.free_time - cur_time;
this.summon_txt_1_rt.node.active = true; //免费 或者 倒计时
this.summon_prop_1_nd.active = false; //道具
this._summon_type_1 = 3;
this.openSummonFreeTimer(true);
} // -- 十连抽
if (summon_have_num >= 10) {
var item_config = Utils.getItemConfig(this.summon_item_bid);
if (item_config) {
var path = PathTool.getItemRes(item_config.icon);
this.summon_10_num_lb.string = summon_have_num;
this.summon_prop_sp.node.scale = 0.4;
this.loadRes(path, function (res) {
this.summon_prop_sp.spriteFrame = res;
}.bind(this));
}
this._summon_type_10 = 4;
} else {
var bid = data.loss_gold_ten[0][0];
var num = data.loss_gold_ten[0][1];
var _path = PathTool.getItemRes(bid);
this.summon_prop_sp.node.scale = 0.3;
this.loadRes(_path, function (res) {
this.summon_prop_sp.spriteFrame = res;
}.bind(this));
this.summon_10_num_lb.string = num;
this._summon_type_10 = 3;
}
}
},
openSummonFreeTimer: function openSummonFreeTimer(status) {
if (status) {
if (this.left_time > 0 && this.summon_txt_1_rt) {
if (!this.summon_timer) {
this.setTimeFormatString();
this.summon_timer = gcore.Timer.set(function () {
this.setTimeFormatString();
}.bind(this), 1000, -1);
}
} else {
if (this.summon_timer) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
} else {
if (this.summon_timer != null) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
},
setTimeFormatString: function setTimeFormatString() {
if (this.data && this.data.free_time - gcore.SmartSocket.getTime() > 0) {
this.left_time = this.data.free_time - gcore.SmartSocket.getTime();
this.summon_txt_1_rt.string = cc.js.formatStr(Utils.TI18N(StringUtil.parseStr("%s
后免费
").string), TimeTool.getTimeFormat(this.left_time));
this._summon_type_1 = 3;
} else {
this.summon_txt_1_rt.string = Utils.TI18N(StringUtil.parseStr("免费召唤
").string);
this._summon_type_1 = 1;
if (this.summon_timer) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
},
nextRewardLevel: function nextRewardLevel() {
var count = this.nextCount(this.data.times);
if (this.arard_data[this.data.camp_id] && this.arard_data[this.data.camp_id][count]) {
var data = this.arard_data[this.data.camp_id];
var _award_is_over = false;
if (this.award_item) {
var bid = data[count].reward[0][0];
var num = data[count].reward[0][1];
this.award_item.setData({
bid: bid,
num: num
});
var obj = this.getBaoDIStatus();
this.is_can_award = obj.status;
var can_id = obj.id;
if (this.is_can_award == true) {
if (can_id) {
var _bid = data[can_id].reward[0][0];
var _num = data[can_id].reward[0][1];
this.award_item.setData({
bid: _bid,
num: _num
});
}
this.award_item.showItemEffect(true, 263, PlayerAction.action_1, true, 1.1);
} else {
this.award_item.showItemEffect(false);
} // --全部领取完毕的时候
if (this.is_can_award == false && this.data.times >= data[Utils.getArrLen(data)].times) {
// setChildUnEnabled(true, this.award_item)
this.award_item.setReceivedIcon(true);
_award_is_over = true;
}
}
var num_times = data[count].times;
var label = "";
if (_award_is_over) {
label = Utils.TI18N("招募次数 ") + this.data.times + "/" + num_times;
} else {
label = Utils.TI18N("下一阶段 ") + this.data.times + "/" + num_times;
}
this.progress_txt.string = label;
var cur_num = 0;
var totle_num = num_times;
if (count == 1) {
cur_num = this.data.times;
} else {
cur_num = this.data.times - data[count - 1].times;
totle_num = num_times - data[count - 1].times;
}
var percent = cur_num / totle_num;
if (this.data.times >= data[Utils.getArrLen(data)].times) {
percent = 1;
}
this.progress.progress = percent;
}
},
_onClickAwardItem: function _onClickAwardItem() {
if (this.data) {
if (this.is_can_award) {
this.ctrl.send23222();
} else {
var TimesummonController = require("timesummon_controller");
TimesummonController.getInstance().openTimeSummonProgressView(true, this.data.times, this.data.camp_id);
}
}
},
// --根据当前阶段计算下一次奖励
nextCount: function nextCount(cur_num) {
var count = 1;
var data = this.arard_data[this.data.camp_id];
if (this.arard_data && data) {
var len = Utils.getArrLen(data);
if (cur_num >= data[len].times) {
return data[len].id;
}
for (var i in data) {
var m = i + 1;
if (m >= len) {
m = len;
}
if (data[i].times > cur_num && cur_num <= data[m].times) {
count = data[i].id;
break;
}
}
}
return count;
},
// --领取保底状态
getBaoDIStatus: function getBaoDIStatus() {
var status = false;
var id = null;
if (this.data) {
if (this.arard_data[this.data.camp_id]) {
for (var i in this.arard_data[this.data.camp_id]) {
var v = this.arard_data[this.data.camp_id][i];
var cur_status = false;
var cur_id = null;
if (this.data.times >= v.times) {
cur_status = true;
cur_id = v.id;
}
var true_status = true;
if (cur_status == true) {
for (var j = 0; j < this.data.reward_list.length; ++j) {
var k = this.data.reward_list[j];
if (k.id == cur_id) {
true_status = false;
break;
}
}
}
if (cur_id && true_status == true) {
status = true;
id = cur_id;
}
}
}
}
return {
status: status,
id: id
};
},
updateItemNum: function updateItemNum(bag_code, data_list) {
if (this.summon_item_bid) {
if (bag_code && data_list) {
if (bag_code == BackPackConst.Bag_Code.BACKPACK) {
for (var i in data_list) {
var v = data_list[i];
if (v && v.base_id && this.summon_item_bid == v.base_id) {
var summon_have_num = BackpackController.getInstance().getModel().getItemNumByBid(this.summon_item_bid);
this.item_num_txt.string = summon_have_num;
this.updateSummonBtnStatus();
break;
}
}
}
} else {
var _summon_have_num = BackpackController.getInstance().getModel().getItemNumByBid(this.summon_item_bid);
this.item_num_txt.string = _summon_have_num;
}
}
},
checkHeroBagIsFull: function checkHeroBagIsFull(times) {
// 判断英雄背包空间
var HeroController = require("hero_controller");
var hero_model = HeroController.getInstance().getModel();
var hero_bag_info = hero_model.getHeroMaxCount();
var limit_num = hero_bag_info.max_count - hero_bag_info.have_coutn;
if (times > limit_num) {
var str = Utils.TI18N("英雄列表已满,可通过提升贵族等级或购买增加英雄携带数量,是否前往购买?");
var CommonAlert = require("commonalert");
CommonAlert.show(str, Utils.TI18N("确定"), function () {
var MainuiConst = require("mainui_const");
var ActionController = require("action_controller");
MainUiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.partner);
ActionController.getInstance().openActionMainPanel(false);
}, Utils.TI18N("取消"), function () {});
return true;
}
return false;
},
showGoldTips: function showGoldTips(good_res_path, need_num, call_num, val_num, val_str, call_back) {
//图标 买几次 购买经验 回调函数
if (this.alert) {
this.alert.close();
this.alert = null;
}
var hvae_num = this.role_vo.gold;
var buy_ori = cc.js.formatStr(StringUtil.parseStr(Lang.DIAMOND_CONSUME).string, good_res_path, need_num, hvae_num);
var get_ori = cc.js.formatStr(StringUtil.parseStr(Lang.BUY_DES).string, val_num, val_str, call_num);
var des_str = buy_ori + get_ori;
var frame_arrays = [];
var good_path = PathTool.getIconPath("item", "3");
frame_arrays.push(good_path);
var CommonAlert = require("commonalert");
this.alert = CommonAlert.show(des_str, "确定", call_back.bind(this), "取消", null, null, null, {
resArr: frame_arrays,
maxWidth: 450,
align: cc.macro.TextAlignment.LEFT
});
},
playRecruitEffect: function playRecruitEffect() {
var config_data = this.summon_data;
if (this.summonBg == null) {
this.summonBg = new cc.Node().addComponent(cc.Sprite);
this.summonBg.type = cc.Sprite.Type.SLICED;
this.summonBg.sizeMode = cc.Sprite.SizeMode.CUSTOM;
ViewManager.getInstance().addToSceneNode(this.summonBg.node, SCENE_TAG.dialogue);
this.summonBg.node.setContentSize(720, 1280);
this.summonBg.node.scale = FIT_SCALE;
this.summonBg.node.setPosition(0, 0);
var group_id = this.action_config[this.data.camp_id].group_id;
var path = PathTool.getBigBg("timesummon/" + config_data[group_id].call_bg_card, "jpg");
this.loadRes(path, function (res) {
this.summonBg.spriteFrame = res;
this.summonBg.node.setContentSize(cc.size(720, 1280));
}.bind(this));
this.summonBg.node.on("touchend", function () {
this.summonBg.node.active = !this.summonBg.node.active;
if (this.floor_effect) {
this.floor_effect.paused = true;
}
if (this.book_effect) {
this.book_effect.paused = true;
}
if (this.light_effect) {
this.light_effect.paused = true;
}
this.animaComplete();
}, this);
} else {
this.summonBg.node.active = !this.summonBg.node.active;
}
var data = PartnersummonController.getInstance().getModel().getRecruitData();
var TimesummonController = require("timesummon_controller");
var rewards = TimesummonController.getInstance().getModel().getEffectAction(data.rewards);
this.floor_action = rewards[0];
this.light_action = rewards[1];
var config = config_data[data.group_id];
var action_name = "action";
if (config) {
action_name = config.action_name;
} // 播放音效
var music_name = "recruit_" + action_name;
Utils.playEffectSound(AUDIO_TYPE.Recruit, music_name);
this.handleFloorEffect();
this.handleLightEffect();
this.handleBookEffect();
MainUiController.getInstance().setMainUIBottomStatus(false);
MainUiController.getInstance().setMainUITopStatus(false);
},
handleFloorEffect: function handleFloorEffect() {
var action = this.floor_action || PlayerAction.action_1;
if (this.summonBg && this.floor_effect == null) {
this.floor_effect = new cc.Node().addComponent(sp.Skeleton);
this.summonBg.node.addChild(this.floor_effect.node);
this.floor_effect.node.setPosition(0, -270);
var effect_res = PathTool.getEffectRes("671");
var effect_path = PathTool.getSpinePath(effect_res, "action");
this.loadRes(effect_path, function (recruit_sk) {
this.floor_effect.skeletonData = recruit_sk;
this.floor_effect.setAnimation(0, action);
}.bind(this));
} else if (this.floor_effect) {
this.floor_effect.setToSetupPose();
this.floor_effect.paused = false;
this.floor_effect.setAnimation(0, action);
}
},
handleLightEffect: function handleLightEffect() {
var action = this.light_action || PlayerAction.action_1;
if (this.summonBg && this.light_effect == null) {
this.light_effect = new cc.Node().addComponent(sp.Skeleton);
this.summonBg.node.addChild(this.light_effect.node);
this.light_effect.node.setPosition(0, -240);
var effect_res = PathTool.getEffectRes("670");
var effect_path = PathTool.getSpinePath(effect_res, "action");
this.light_effect.setCompleteListener(this.animaComplete.bind(this));
this.loadRes(effect_path, function (recruit_sk) {
this.light_effect.skeletonData = recruit_sk;
this.light_effect.setAnimation(0, action);
}.bind(this));
} else if (this.light_effect) {
this.light_effect.setToSetupPose();
this.light_effect.paused = false;
this.light_effect.setAnimation(0, action);
}
},
handleBookEffect: function handleBookEffect() {
if (this.summonBg && this.book_effect == null) {
this.book_effect = new cc.Node().addComponent(sp.Skeleton);
this.summonBg.node.addChild(this.book_effect.node);
this.book_effect.node.setPosition(0, -240);
var effect_res = PathTool.getEffectRes("672");
var effect_path = PathTool.getSpinePath(effect_res, "action");
this.loadRes(effect_path, function (recruit_sk) {
this.book_effect.skeletonData = recruit_sk;
this.book_effect.setAnimation(0, PlayerAction.action);
}.bind(this));
} else if (this.book_effect) {
this.book_effect.setToSetupPose();
this.book_effect.paused = false;
this.book_effect.setAnimation(0, PlayerAction.action);
}
},
animaComplete: function animaComplete() {
this.summonBg.node.active = false;
MainUiController.getInstance().setMainUIBottomStatus(true);
MainUiController.getInstance().setMainUITopStatus(true);
var PartnersummonController = require("partnersummon_controller");
PartnersummonController.getInstance().openSummonGainWindow(true);
},
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
onDelete: function onDelete() {
if (this.award_item) {
this.award_item.deleteMe();
this.award_item = null;
}
if (this.summon_timer) {
gcore.Timer.del(this.summon_timer);
this.summon_timer = null;
}
}
});
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxlbGl0ZXN1bW1vblxcdmlld1xcZWxpdGVzdW1tb25fcGFuZWwuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQWN0aW9uQ29udHJvbGxlciIsIkVsaXRlU3VtbW9uRXZlbnQiLCJFbGl0ZXN1bW1vbkNvbnRyb2xsZXIiLCJSb2xlQ29udHJvbGxlciIsIkJhY2twYWNrQ29udHJvbGxlciIsIkJhY2twYWNrRXZlbnQiLCJCYWNrUGFja0NvbnN0IiwiU3VtbW9uRXZlbnQiLCJNYWluVWlDb250cm9sbGVyIiwiUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIiLCJUaW1lVG9vbCIsIkVsaXRlc3VtbW9uUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiaG9saWRheV9iaWQiLCJhcmd1bWVudHMiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpbml0Q29uZmlnIiwiX3N1bW1vbl90eXBlXzEiLCJfc3VtbW9uX3R5cGVfMTAiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwiYXJhcmRfZGF0YSIsIkNvbmZpZyIsInJlY3J1aXRfaG9saWRheV9lbGl0ZV9kYXRhIiwiZGF0YV9hd2FyZCIsImNvbnN0X2RhdGEiLCJkYXRhX2NvbnN0Iiwic3VtbW9uX2l0ZW1fYmlkIiwidmFsIiwic3VtbW9uX2RhdGEiLCJkYXRhX3N1bW1vbiIsImFjdGlvbl9jb25maWciLCJkYXRhX2FjdGlvbiIsImluaXRQYW5lbCIsInNldFBvc2l0aW9uIiwibWFpbl9jb250YWluZXIiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwicHJvZ3Jlc3NfdHh0IiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJpbWFnZV9iZ19zcCIsIlNwcml0ZSIsInByb2dyZXNzIiwiUHJvZ3Jlc3NCYXIiLCJiYW9kaV9iZyIsInN0cl9iZyIsInRhYl92byIsImdldEFjdGlvblN1YlRhYlZvIiwiYWltX3RpdGxlIiwicGF0aCIsImdldEJpZ0JnIiwibG9hZFJlcyIsInJlcyIsInNwcml0ZUZyYW1lIiwiYmluZCIsIml0ZW1fbnVtX3R4dCIsImF3YXJkX2J0biIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJhY3RpdmUiLCJzdW1tb25fYnRuXzEiLCJzdW1tb25fdHh0XzFfcnQiLCJSaWNoVGV4dCIsInN1bW1vbl9wcm9wXzFfbmQiLCJzdW1tb25fcHJvcF9udW1fbGIiLCJzdW1tb25fYnRuXzEwIiwic3VtbW9uX3Byb3BfMTBfbmQiLCJzdW1tb25fcHJvcF9zcCIsInN1bW1vbl8xMF9udW1fbGIiLCJ0aW1lX3R4dCIsIm5vZGUiLCJjb2xvciIsIkNvbG9yIiwibGluZSIsImFkZENvbXBvbmVudCIsIkxhYmVsT3V0bGluZSIsIndpZHRoIiwibGluZUhlaWdodCIsImJhb2RpX3RleHRfcnQiLCJzZWVrQ2hpbGQiLCJzZXRBbmNob3JQb2ludCIsIngiLCJhd2FyZF9pdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNob3ciLCJhZGRDYWxsQmFjayIsIl9vbkNsaWNrQXdhcmRJdGVtIiwiaXRlbV9jb25maWciLCJnZXRJdGVtQ29uZmlnIiwicGF0aDEiLCJnZXRJdGVtUmVzIiwiaWNvbiIsImJ0bl9ydWxlIiwicmVnaXN0ZXJFdmVudCIsImFkZEdsb2JhbEV2ZW50IiwiRWxpdGVTdW1tb25fTWVzc2FnZSIsImRhdGEiLCJzdGF0dXMiLCJnZXRNb2RlbCIsImlzSG9saWRheUhhc0lEIiwiY2FtcF9pZCIsInNldERhdGEiLCJBRERfR09PRFMiLCJiYWdfY29kZSIsImRhdGFfbGlzdCIsInVwZGF0ZUl0ZW1OdW0iLCJERUxFVEVfR09PRFMiLCJNT0RJRllfR09PRFNfTlVNIiwiUGFydG5lclN1bW1vblN1Y2Nlc3MiLCJwbGF5UmVjcnVpdEVmZmVjdCIsIm9uIiwiY29uZmlnIiwiVGltZXN1bW1vbkNvbnRyb2xsZXIiLCJvcGVuVGltZVN1bW1vbkF3YXJkVmlldyIsImdyb3VwX2lkIiwiZXZlbnQiLCJwb3MiLCJjb252ZXJ0VG9Xb3JsZFNwYWNlQVIiLCJ2MiIsInNob3dDb21tb25UaXBzIiwiZGVzYyIsInBsYXlCdXR0b25Tb3VuZCIsImNoZWNrSGVyb0JhZ0lzRnVsbCIsImxhc3RfdGltZSIsImdjb3JlIiwiU21hcnRTb2NrZXQiLCJnZXRUaW1lIiwibnVtIiwibG9zc19nb2xkX29uY2UiLCJjYWxsX2JhY2siLCJzZW5kMjMyMjEiLCJpdGVtX2ljb25fMiIsInZhbF9zdHIiLCJnYWluX29uY2UiLCJuYW1lIiwidmFsX251bSIsImNhbGxfbnVtIiwic2hvd0dvbGRUaXBzIiwiTWF0aCIsImFicyIsImxvc3NfZ29sZF90ZW4iLCJnYWluX3RlbiIsInNlbmQyMzIyMCIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsInVwZGF0ZVN1bW1vbkJ0blN0YXR1cyIsIm5leHRSZXdhcmRMZXZlbCIsInN0cl90aW1lIiwianMiLCJmb3JtYXRTdHIiLCJnZXRNRDIiLCJzdGFydF90aW1lIiwiZW5kX3RpbWUiLCJTdHJpbmdVdGlsIiwicGFyc2VTdHIiLCJtdXN0X2NvdW50Iiwic3VtbW9uX2hhdmVfbnVtIiwiZ2V0SXRlbU51bUJ5QmlkIiwiY3VyX3RpbWUiLCJmcmVlX3RpbWUiLCJ0eHRfc3RyXzEiLCJvcGVuU3VtbW9uRnJlZVRpbWVyIiwibGVmdF90aW1lIiwic2NhbGUiLCJiaWQiLCJzdW1tb25fdGltZXIiLCJzZXRUaW1lRm9ybWF0U3RyaW5nIiwiVGltZXIiLCJzZXQiLCJkZWwiLCJnZXRUaW1lRm9ybWF0IiwiY291bnQiLCJuZXh0Q291bnQiLCJ0aW1lcyIsIl9hd2FyZF9pc19vdmVyIiwicmV3YXJkIiwib2JqIiwiZ2V0QmFvRElTdGF0dXMiLCJpc19jYW5fYXdhcmQiLCJjYW5faWQiLCJpZCIsInNob3dJdGVtRWZmZWN0IiwiUGxheWVyQWN0aW9uIiwiYWN0aW9uXzEiLCJnZXRBcnJMZW4iLCJzZXRSZWNlaXZlZEljb24iLCJudW1fdGltZXMiLCJsYWJlbCIsImN1cl9udW0iLCJ0b3RsZV9udW0iLCJwZXJjZW50Iiwic2VuZDIzMjIyIiwib3BlblRpbWVTdW1tb25Qcm9ncmVzc1ZpZXciLCJsZW4iLCJpIiwibSIsInYiLCJjdXJfc3RhdHVzIiwiY3VyX2lkIiwidHJ1ZV9zdGF0dXMiLCJqIiwicmV3YXJkX2xpc3QiLCJsZW5ndGgiLCJrIiwiQmFnX0NvZGUiLCJCQUNLUEFDSyIsImJhc2VfaWQiLCJIZXJvQ29udHJvbGxlciIsImhlcm9fbW9kZWwiLCJoZXJvX2JhZ19pbmZvIiwiZ2V0SGVyb01heENvdW50IiwibGltaXRfbnVtIiwibWF4X2NvdW50IiwiaGF2ZV9jb3V0biIsInN0ciIsIkNvbW1vbkFsZXJ0IiwiTWFpbnVpQ29uc3QiLCJjaGFuZ2VNYWluVUlTdGF0dXMiLCJidG5faW5kZXgiLCJwYXJ0bmVyIiwib3BlbkFjdGlvbk1haW5QYW5lbCIsImdvb2RfcmVzX3BhdGgiLCJuZWVkX251bSIsImFsZXJ0IiwiY2xvc2UiLCJodmFlX251bSIsImdvbGQiLCJidXlfb3JpIiwiTGFuZyIsIkRJQU1PTkRfQ09OU1VNRSIsImdldF9vcmkiLCJCVVlfREVTIiwiZGVzX3N0ciIsImZyYW1lX2FycmF5cyIsImdvb2RfcGF0aCIsImdldEljb25QYXRoIiwicHVzaCIsInJlc0FyciIsIm1heFdpZHRoIiwiYWxpZ24iLCJtYWNybyIsIlRleHRBbGlnbm1lbnQiLCJMRUZUIiwiY29uZmlnX2RhdGEiLCJzdW1tb25CZyIsIk5vZGUiLCJ0eXBlIiwiVHlwZSIsIlNMSUNFRCIsInNpemVNb2RlIiwiU2l6ZU1vZGUiLCJDVVNUT00iLCJWaWV3TWFuYWdlciIsImFkZFRvU2NlbmVOb2RlIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJzZXRDb250ZW50U2l6ZSIsIkZJVF9TQ0FMRSIsImNhbGxfYmdfY2FyZCIsInNpemUiLCJmbG9vcl9lZmZlY3QiLCJwYXVzZWQiLCJib29rX2VmZmVjdCIsImxpZ2h0X2VmZmVjdCIsImFuaW1hQ29tcGxldGUiLCJnZXRSZWNydWl0RGF0YSIsInJld2FyZHMiLCJnZXRFZmZlY3RBY3Rpb24iLCJmbG9vcl9hY3Rpb24iLCJsaWdodF9hY3Rpb24iLCJhY3Rpb25fbmFtZSIsIm11c2ljX25hbWUiLCJwbGF5RWZmZWN0U291bmQiLCJBVURJT19UWVBFIiwiUmVjcnVpdCIsImhhbmRsZUZsb29yRWZmZWN0IiwiaGFuZGxlTGlnaHRFZmZlY3QiLCJoYW5kbGVCb29rRWZmZWN0Iiwic2V0TWFpblVJQm90dG9tU3RhdHVzIiwic2V0TWFpblVJVG9wU3RhdHVzIiwiYWN0aW9uIiwic3AiLCJTa2VsZXRvbiIsImFkZENoaWxkIiwiZWZmZWN0X3JlcyIsImdldEVmZmVjdFJlcyIsImVmZmVjdF9wYXRoIiwiZ2V0U3BpbmVQYXRoIiwicmVjcnVpdF9zayIsInNrZWxldG9uRGF0YSIsInNldEFuaW1hdGlvbiIsInNldFRvU2V0dXBQb3NlIiwic2V0Q29tcGxldGVMaXN0ZW5lciIsIm9wZW5TdW1tb25HYWluV2luZG93Iiwib25EZWxldGUiLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsZ0JBQWdCLEdBQUdGLE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxJQUFJRyxxQkFBcUIsR0FBR0gsT0FBTyxDQUFDLHdCQUFELENBQW5DOztBQUNBLElBQUlJLGNBQWMsR0FBR0osT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlLLGtCQUFrQixHQUFHTCxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSU0sYUFBYSxHQUFHTixPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSU8sYUFBYSxHQUFHUCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSVEsV0FBVyxHQUFHUixPQUFPLENBQUMscUJBQUQs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QS9CLENBQXFELElBQXJEO0FBQ0F6UixJQUFBQSxnQkFBZ0IsQ0FBQ2EsV0FBakIsR0FBK0I2USxrQkFBL0IsQ0FBa0QsSUFBbEQ7O0FBQ0EsUUFBSXpSLHVCQUF1QixHQUFHVixPQUFPLENBQUMsMEJBQUQsQ0FBckM7O0FBQ0FVLElBQUFBLHVCQUF1QixDQUFDWSxXQUF4QixHQUFzQzJSLG9CQUF0QyxDQUEyRCxJQUEzRDtBQUNILEdBN2pCMkI7QUE4akI1QjtBQUNBQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVU7QUFDZixRQUFHLEtBQUt2TixVQUFSLEVBQW1CO0FBQ2YsV0FBS0EsVUFBTCxDQUFnQndOLFFBQWhCO0FBQ0EsV0FBS3hOLFVBQUwsR0FBa0IsSUFBbEI7QUFDSDs7QUFDRCxRQUFHLEtBQUtzRixZQUFSLEVBQXFCO0FBQ2pCMUMsTUFBQUEsS0FBSyxDQUFDNEMsS0FBTixDQUFZRSxHQUFaLENBQWdCLEtBQUtKLFlBQXJCO0FBQ0EsV0FBS0EsWUFBTCxHQUFvQixJQUFwQjtBQUNIO0FBQ0o7QUF4a0IyQixDQUFULENBQXZCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wOC0wOSAxNTo1ODozMVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBBY3Rpb25Db250cm9sbGVyID0gcmVxdWlyZShcImFjdGlvbl9jb250cm9sbGVyXCIpXG52YXIgRWxpdGVTdW1tb25FdmVudCA9IHJlcXVpcmUoXCJlbGl0ZXN1bW1vbl9ldmVudFwiKVxudmFyIEVsaXRlc3VtbW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJlbGl0ZXN1bW1vbl9jb250cm9sbGVyXCIpXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpXG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIilcbnZhciBCYWNrcGFja0V2ZW50ID0gcmVxdWlyZShcImJhY2twYWNrX2V2ZW50XCIpXG52YXIgQmFja1BhY2tDb25zdCA9IHJlcXVpcmUoXCJiYWNrcGFja19jb25zdFwiKVxudmFyIFN1bW1vbkV2ZW50ID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fZXZlbnRcIik7XG52YXIgTWFpblVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKVxudmFyIFBhcnRuZXJzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fY29udHJvbGxlclwiKVxudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpXG52YXIgRWxpdGVzdW1tb25QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYWN0aW9uXCIsIFwiYWN0aW9uX3RpbWVfc3VtbW9uX3BhbmVsXCIpO1xuICAgICAgICB0aGlzLmhvbGlkYXlfYmlkID0gYXJndW1lbnRzWzBdXG4gICAgICAgIHRoaXMuY3RybCA9IEVsaXRlc3VtbW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpXG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5fc3VtbW9uX3R5cGVfMSA9IDEgXHQgLy8g5Y2V5oq955qE5oq95Y+W57G75Z6LKDHlhY3otLkgM+mSu+efsyA06YGT5YW3KVxuICAgICAgICB0aGlzLl9zdW1tb25fdHlwZV8xMCA9IDMgXHQgLy8g5Y2B6L+e5oq95oq95Y+W57G75Z6LKDPpkrvnn7MgNOmBk+WFtylcbiAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgdGhpcy5hcmFyZF9kYXRhID0gQ29uZmlnLnJlY3J1aXRfaG9saWRheV9lbGl0ZV9kYXRhLmRhdGFfYXdhcmRcbiAgICAgICAgdGhpcy5jb25zdF9kYXRhID0gQ29uZmlnLnJlY3J1aXRfaG9saWRheV9lbGl0ZV9kYXRhLmRhdGFfY29uc3RcbiAgICAgICAgdGhpcy5zdW1tb25faXRlbV9iaWQgPSB0aGlzLmNvbnN0X2RhdGFbXCJjb21tb25fc1wiXS52YWxcbiAgICAgICAgdGhpcy5zdW1tb25fZGF0YSA9IENvbmZpZy5yZWNydWl0X2hvbGlkYXlfZWxpdGVfZGF0YS5kYXRhX3N1bW1vblxuICAgICAgICB0aGlzLmFjdGlvbl9jb25maWcgPSBDb25maWcucmVjcnVpdF9ob2xpZGF5X2VsaXRlX2RhdGEuZGF0YV9hY3Rpb25cbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRQYW5lbDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKDAsLTIwKVxuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcbiAgICAgICAgdGhpcy5wcm9ncmVzc190eHQgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInByb2dyZXNzX3R4dFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIGxldCBpbWFnZV9iZ19zcCA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaW1hZ2VfYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSlcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicHJvZ3Jlc3NcIikuZ2V0Q29tcG9uZW50KGNjLlByb2dyZXNzQmFyKVxuICAgICAgICB0aGlzLmJhb2RpX2JnID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJiYW9kaV9iZ1wiKVxuICAgICAgICBsZXQgc3RyX2JnID0gXCJ0eHRfY25fZWxpdGVzdW1tb25fMVwiO1xuICAgICAgICBsZXQgdGFiX3ZvID0gQWN0aW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldEFjdGlvblN1YlRhYlZvKHRoaXMuaG9saWRheV9iaWQpXG4gICAgICAgIGlmKHRhYl92byAmJiB0YWJfdm8uYWltX3RpdGxlICE9IFwiXCIgJiYgdGFiX3ZvLmFpbV90aXRsZSl7XG4gICAgICAgICAgICBzdHJfYmcgPSB0YWJfdm8uYWltX3RpdGxlXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhdGggPSBQYXRoVG9vbC5nZXRCaWdCZyhzdHJfYmcsXCJqcGdcIixcInRpbWVzdW1tb25cIilcbiAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIGltYWdlX2JnX3NwLnNwcml0ZUZyYW1lID0gcmVzXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5pdGVtX251bV90eHQgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIml0ZW1fbnVtX3R4dFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMuYXdhcmRfYnRuID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhd2FyZF9idG5cIilcbiAgICAgICAgdGhpcy5hd2FyZF9idG4uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5aWW5Yqx6aKE6KeIXCIpXG4gICAgICAgIG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicHJldmlld19idG5cIikuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zdW1tb25fYnRuXzEgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInN1bW1vbl9idG5fMVwiKVxuICAgICAgICB0aGlzLnN1bW1vbl9idG5fMS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmi5vli58x5qyhXCIpXG4gICAgICAgIHRoaXMuc3VtbW9uX3R4dF8xX3J0ID0gdGhpcy5zdW1tb25fYnRuXzEuZ2V0Q2hpbGRCeU5hbWUoXCJzdW1tb25fdHh0XzFcIikuZ2V0Q29tcG9uZW50KGNjLlJpY2hUZXh0KVxuICAgICAgICB0aGlzLnN1bW1vbl9wcm9wXzFfbmQgPSB0aGlzLnN1bW1vbl9idG5fMS5nZXRDaGlsZEJ5TmFtZShcInN1bW1vbl9wcm9wXCIpXG4gICAgICAgIHRoaXMuc3VtbW9uX3Byb3BfbnVtX2xiID0gdGhpcy5zdW1tb25fcHJvcF8xX25kLmdldENoaWxkQnlOYW1lKFwic3VtbW9uX3Byb3BfbnVtXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcblxuICAgICAgICB0aGlzLnN1bW1vbl9idG5fMTAgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInN1bW1vbl9idG5fMTBcIilcbiAgICAgICAgdGhpcy5zdW1tb25fYnRuXzEwLmdldENoaWxkQnlOYW1lKFwibGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaLm+WLnzEw5qyhXCIpXG4gICAgICAgIHRoaXMuc3VtbW9uX3Byb3BfMTBfbmQgPSB0aGlzLnN1bW1vbl9idG5fMTAuZ2V0Q2hpbGRCeU5hbWUoXCJzdW1tb25fcHJvcFwiKTtcbiAgICAgICAgdGhpcy5zdW1tb25fcHJvcF9zcCA9IHRoaXMuc3VtbW9uX3Byb3BfMTBfbmQuZ2V0Q2hpbGRCeU5hbWUoXCJzdW1tb25fcHJvcF9pdGVtXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpXG4gICAgICAgIHRoaXMuc3VtbW9uXzEwX251bV9sYiA9IHRoaXMuc3VtbW9uX3Byb3BfMTBfbmQuZ2V0Q2hpbGRCeU5hbWUoXCJzdW1tb25fcHJvcF9udW1cIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuXG4gICAgICAgIHRoaXMudGltZV90eHQgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpbWVfdHh0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy50aW1lX3R4dC5ub2RlLnNldFBvc2l0aW9uKDQxNCwyODMpXG4gICAgICAgIHRoaXMudGltZV90eHQubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigyNTUsMjUyLDE4Nyk7XG4gICAgICAgIGxldCBsaW5lID0gdGhpcy50aW1lX3R4dC5ub2RlLmFkZENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpO1xuICAgICAgICBsaW5lLmNvbG9yID0gbmV3IGNjLkNvbG9yKDExMiwxOCwxOCk7XG4gICAgICAgIGxpbmUud2lkdGggPSAyO1xuICAgICAgICB0aGlzLnRpbWVfdHh0LmxpbmVIZWlnaHQgPSAzMDtcbiAgICAgICAgLy8gdGhpcy50aW1lX3R4dC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJhb2RpX3RleHRfcnQgPSB0aGlzLnNlZWtDaGlsZChcImJhb2RpX3RleHRcIixjYy5SaWNoVGV4dCk7XG4gICAgICAgIHRoaXMuYmFvZGlfdGV4dF9ydC5ub2RlLnNldEFuY2hvclBvaW50KDEsMC41KVxuICAgICAgICB0aGlzLmJhb2RpX3RleHRfcnQubm9kZS54ID0gNzU7XG4gICAgICAgIHRoaXMuYXdhcmRfaXRlbSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpXG4gICAgICAgIHRoaXMuYXdhcmRfaXRlbS5zZXRQYXJlbnQobWFpbl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLmF3YXJkX2l0ZW0uc2V0UG9zaXRpb24oNjAsIDcyOClcbiAgICAgICAgdGhpcy5hd2FyZF9pdGVtLmluaXRDb25maWcoZmFsc2UsIDAuNiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5hd2FyZF9pdGVtLnNob3coKTtcbiAgICAgICAgdGhpcy5hd2FyZF9pdGVtLmFkZENhbGxCYWNrKHRoaXMuX29uQ2xpY2tBd2FyZEl0ZW0uYmluZCh0aGlzKSlcblxuICAgICAgICBsZXQgaXRlbV9jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKHRoaXMuc3VtbW9uX2l0ZW1fYmlkKVxuICAgICAgICBsZXQgcGF0aDEgPSBQYXRoVG9vbC5nZXRJdGVtUmVzKGl0ZW1fY29uZmlnLmljb24pXG4gICAgICAgIHRoaXMubG9hZFJlcyhwYXRoMSxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGhpcy5zdW1tb25fcHJvcF8xX25kLmdldENoaWxkQnlOYW1lKFwic3VtbW9uX3Byb3BfaXRlbVwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlcztcbiAgICAgICAgICAgIG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9pY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYmFvZGlfYmcuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBcIikuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idG5fcnVsZSA9IHRoaXMuYmFvZGlfYmcuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBcIilcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChFbGl0ZVN1bW1vbkV2ZW50LkVsaXRlU3VtbW9uX01lc3NhZ2UsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBpZighZGF0YSkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmlzSG9saWRheUhhc0lEKGRhdGEuY2FtcF9pZClcbiAgICAgICAgICAgIGlmKHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgLy8gLS3nianlk4HpgZPlhbflop7liqBcblx0XHR0aGlzLmFkZEdsb2JhbEV2ZW50KEJhY2twYWNrRXZlbnQuQUREX0dPT0RTLGZ1bmN0aW9uKGJhZ19jb2RlLGRhdGFfbGlzdCl7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1OdW0oYmFnX2NvZGUsZGF0YV9saXN0KVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIC8v54mp5ZOB6YGT5YW35Yig6ZmkXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoQmFja3BhY2tFdmVudC5ERUxFVEVfR09PRFMsZnVuY3Rpb24oYmFnX2NvZGUsZGF0YV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbU51bShiYWdfY29kZSxkYXRhX2xpc3QpXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgLy/nianlk4HpgZPlhbfmlLnlj5hcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChCYWNrcGFja0V2ZW50Lk1PRElGWV9HT09EU19OVU0sZnVuY3Rpb24oYmFnX2NvZGUsZGF0YV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbU51bShiYWdfY29kZSxkYXRhX2xpc3QpXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgLy8g5Y+s5ZSk5oiQ5YqfXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoU3VtbW9uRXZlbnQuUGFydG5lclN1bW1vblN1Y2Nlc3MsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5wbGF5UmVjcnVpdEVmZmVjdCgpO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmF3YXJkX2J0bi5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuY2FtcF9pZCl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IHRoaXMuYWN0aW9uX2NvbmZpZ1t0aGlzLmRhdGEuY2FtcF9pZF1cbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFRpbWVzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcInRpbWVzdW1tb25fY29udHJvbGxlclwiKVxuICAgICAgICAgICAgICAgICAgICBUaW1lc3VtbW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5UaW1lU3VtbW9uQXdhcmRWaWV3KHRydWUsY29uZmlnLmdyb3VwX2lkLCB0aGlzLmRhdGEsdHJ1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLmJ0bl9ydWxlLm9uKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgaWYodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5jYW1wX2lkKXtcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gdGhpcy5hY3Rpb25fY29uZmlnW3RoaXMuZGF0YS5jYW1wX2lkXVxuICAgICAgICAgICAgICAgIGlmKGNvbmZpZyl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSBldmVudC5ub2RlLmNvbnZlcnRUb1dvcmxkU3BhY2VBUihjYy52MigwLCAwKSlcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZShcInRpcHNfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnNob3dDb21tb25UaXBzKGNvbmZpZy5kZXNjLHBvcyxudWxsLG51bGwsNTAwKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLnN1bW1vbl9idG5fMS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tIZXJvQmFnSXNGdWxsKDEpKSByZXR1cm47XG4gICAgICAgICAgICBpZih0aGlzLmxhc3RfdGltZSAmJiBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCkgLSB0aGlzLmxhc3RfdGltZSA8IDIpe1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sYXN0X3RpbWUgPSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKClcbiAgICAgICAgICAgIGlmKHRoaXMuX3N1bW1vbl90eXBlXzEgPT0gMyl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5jYW1wX2lkKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwX2lkID0gdGhpcy5hY3Rpb25fY29uZmlnW3RoaXMuZGF0YS5jYW1wX2lkXS5ncm91cF9pZFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gdGhpcy5zdW1tb25fZGF0YVtncm91cF9pZF1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bSA9IGNvbmZpZy5sb3NzX2dvbGRfb25jZVswXVsxXVxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbF9iYWNrID0gZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZDIzMjIxKCAxLCB0aGlzLl9zdW1tb25fdHlwZV8xIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbV9pY29uXzIgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGNvbmZpZy5sb3NzX2dvbGRfb25jZVswXVswXSkuaWNvblxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsX3N0ciA9IFV0aWxzLmdldEl0ZW1Db25maWcoY29uZmlnLmdhaW5fb25jZVswXVswXSkubmFtZSB8fCBcIlwiXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWxfbnVtID0gY29uZmlnLmdhaW5fb25jZVswXVsxXVxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbF9udW0gPSAxXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0dvbGRUaXBzKGl0ZW1faWNvbl8yLG51bSxjYWxsX251bSx2YWxfbnVtLHZhbF9zdHIsY2FsbF9iYWNrKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmQyMzIyMSggMSwgdGhpcy5fc3VtbW9uX3R5cGVfMSApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5zdW1tb25fYnRuXzEwLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDEpXG4gICAgICAgICAgICBpZih0aGlzLmNoZWNrSGVyb0JhZ0lzRnVsbCgxMCkpIHJldHVybjtcbiAgICAgICAgICAgIGlmKHRoaXMubGFzdF90aW1lICYmIE1hdGguYWJzKGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKSAtIHRoaXMubGFzdF90aW1lKSA8IDAuNSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhc3RfdGltZSA9IGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKVxuICAgICAgICAgICAgaWYodGhpcy5fc3VtbW9uX3R5cGVfMTAgPT0gMyl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5jYW1wX2lkKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwX2lkID0gdGhpcy5hY3Rpb25fY29uZmlnW3RoaXMuZGF0YS5jYW1wX2lkXS5ncm91cF9pZFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gdGhpcy5zdW1tb25fZGF0YVtncm91cF9pZF1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bSA9IGNvbmZpZy5sb3NzX2dvbGRfdGVuWzBdWzFdXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYWxsX2JhY2sgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kMjMyMjEoIDEwLCB0aGlzLl9zdW1tb25fdHlwZV8xMCApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1faWNvbl8yID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyhjb25maWcubG9zc19nb2xkX3RlblswXVswXSkuaWNvblxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsX3N0ciA9IFV0aWxzLmdldEl0ZW1Db25maWcoY29uZmlnLmdhaW5fdGVuWzBdWzBdKS5uYW1lIHx8IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbF9udW0gPSBjb25maWcuZ2Fpbl90ZW5bMF1bMV1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbGxfbnVtID0gMTBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93R29sZFRpcHMoaXRlbV9pY29uXzIsbnVtLGNhbGxfbnVtLHZhbF9udW0sdmFsX3N0cixjYWxsX2JhY2spXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmQyMzIyMSggMTAsIHRoaXMuX3N1bW1vbl90eXBlXzEwIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLmN0cmwuc2VuZDIzMjIwKClcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzpmdW5jdGlvbihwYXJhbXMpe1xuXG4gICAgfSxcblxuICAgIC8vIOmdouadv+iuvue9ruS4jeWPr+ingeeahOWbnuiwgyzov5nph4zlgZrkuIDkupvkuI3lj6/op4HnmoTlsY/olL3lpITnkIZcbiAgICBvbkhpZGU6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG4gICAgc2V0RGF0YShkYXRhKXtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnVwZGF0ZVN1bW1vbkJ0blN0YXR1cygpXG4gICAgICAgIHRoaXMubmV4dFJld2FyZExldmVsKClcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtTnVtKClcbiAgICAgICAgbGV0IHN0cl90aW1lID0gY2MuanMuZm9ybWF0U3RyKFwiJXMtJXNcIixUaW1lVG9vbC5nZXRNRDIoZGF0YS5zdGFydF90aW1lKSxUaW1lVG9vbC5nZXRNRDIoZGF0YS5lbmRfdGltZSkpXG4gICAgICAgIHRoaXMudGltZV90eHQuc3RyaW5nID0gc3RyX3RpbWU7XG4gICAgICAgIHRoaXMuYmFvZGlfdGV4dF9ydC5zdHJpbmcgPSAgVXRpbHMuVEkxOE4oY2MuanMuZm9ybWF0U3RyKFN0cmluZ1V0aWwucGFyc2VTdHIoXCI8ZGl2IGZvbnRjb2xvcj0jZmZmZmZmIG91dGxpbmU9MiwjMDAwMDAwPuWJqeS9mTwvZGl2PjxkaXYgZm9udGNvbG9yPSM1ZmRlNDYgb3V0bGluZT0yLCMwMDAwMDA+JWQ8L2Rpdj48ZGl2IGZvbnRjb2xvcj0jZmZmZmZmIG91dGxpbmU9MiwjMDAwMDAwPuasoeaLm+WLn+WGheW/heWHulVQ6Iux6ZuEPC9kaXY+XCIpLnN0cmluZywgZGF0YS5tdXN0X2NvdW50KSlcbiAgICB9LFxuICAgIHVwZGF0ZVN1bW1vbkJ0blN0YXR1cygpe1xuICAgICAgICBpZih0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmNhbXBfaWQpe1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IHRoaXMuYWN0aW9uX2NvbmZpZ1t0aGlzLmRhdGEuY2FtcF9pZF1cbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5zdW1tb25fZGF0YVtjb25maWcuZ3JvdXBfaWRdXG4gICAgICAgICAgICBsZXQgc3VtbW9uX2hhdmVfbnVtID0gQmFja3BhY2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRJdGVtTnVtQnlCaWQodGhpcy5zdW1tb25faXRlbV9iaWQpXG4gICAgICAgICAgICAvLyAtLSDljZXmir1cbiAgICAgICAgICAgIGxldCBjdXJfdGltZSA9IGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKVxuICAgICAgICAgICAgaWYodGhpcy5kYXRhLmZyZWVfdGltZSA9PSAwICYmIHRoaXMuZGF0YS5mcmVlX3RpbWUgPD0gY3VyX3RpbWUpe1xuICAgICAgICAgICAgICAgIGxldCB0eHRfc3RyXzEgPSBVdGlscy5USTE4TihTdHJpbmdVdGlsLnBhcnNlU3RyKFwiPGRpdiBmb250Y29sb3I9I2ZmZmZmZj7lhY3otLnlj6zllKQ8L2Rpdj5cIikuc3RyaW5nKVxuICAgICAgICAgICAgICAgIHRoaXMuX3N1bW1vbl90eXBlXzEgPSAxXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuU3VtbW9uRnJlZVRpbWVyKGZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3R4dF8xX3J0Lm5vZGUuYWN0aXZlID0gdHJ1ZTsvL+WFjei0uSDmiJbogIUg5YCS6K6h5pe2XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fcHJvcF8xX25kLmFjdGl2ZSA9IGZhbHNlOy8v6YGT5YW3XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fdHh0XzFfcnQuc3RyaW5nID0gdHh0X3N0cl8xO1xuICAgICAgICAgICAgfWVsc2UgaWYoc3VtbW9uX2hhdmVfbnVtID49IDEpe1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1bW1vbl90eXBlXzEgPSA0XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuU3VtbW9uRnJlZVRpbWVyKGZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3R4dF8xX3J0Lm5vZGUuYWN0aXZlID0gZmFsc2U7Ly/lhY3otLkg5oiW6ICFIOWAkuiuoeaXtlxuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Byb3BfMV9uZC5hY3RpdmUgPSB0cnVlOy8v6YGT5YW3XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fcHJvcF9udW1fbGIuc3RyaW5nID0gc3VtbW9uX2hhdmVfbnVtO1xuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5kYXRhLmZyZWVfdGltZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0X3RpbWUgPSB0aGlzLmRhdGEuZnJlZV90aW1lIC0gY3VyX3RpbWVcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1vbl90eHRfMV9ydC5ub2RlLmFjdGl2ZSA9IHRydWU7Ly/lhY3otLkg5oiW6ICFIOWAkuiuoeaXtlxuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Byb3BfMV9uZC5hY3RpdmUgPSBmYWxzZTsvL+mBk+WFt1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1bW1vbl90eXBlXzEgPSAzXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuU3VtbW9uRnJlZVRpbWVyKHRydWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIC0tIOWNgei/nuaKvVxuICAgICAgICAgICAgaWYoc3VtbW9uX2hhdmVfbnVtID49IDEwKXtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbV9jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKHRoaXMuc3VtbW9uX2l0ZW1fYmlkKTtcbiAgICAgICAgICAgICAgICBpZihpdGVtX2NvbmZpZyl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhpdGVtX2NvbmZpZy5pY29uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fMTBfbnVtX2xiLnN0cmluZyA9IHN1bW1vbl9oYXZlX251bTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fcHJvcF9zcC5ub2RlLnNjYWxlID0gMC40XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhwYXRoLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1vbl9wcm9wX3NwLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3N1bW1vbl90eXBlXzEwID0gNFxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgbGV0IGJpZCA9IGRhdGEubG9zc19nb2xkX3RlblswXVswXVxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBkYXRhLmxvc3NfZ29sZF90ZW5bMF1bMV1cbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFBhdGhUb29sLmdldEl0ZW1SZXMoYmlkKVxuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Byb3Bfc3Aubm9kZS5zY2FsZSA9IDAuM1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhwYXRoLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Byb3Bfc3Auc3ByaXRlRnJhbWUgPSByZXM7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uXzEwX251bV9sYi5zdHJpbmcgPSBudW07XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VtbW9uX3R5cGVfMTAgPSAzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG9wZW5TdW1tb25GcmVlVGltZXIoc3RhdHVzKXtcbiAgICAgICAgaWYoc3RhdHVzKXtcbiAgICAgICAgICAgIGlmKHRoaXMubGVmdF90aW1lID4gMCAmJiB0aGlzLnN1bW1vbl90eHRfMV9ydCl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuc3VtbW9uX3RpbWVyKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lRm9ybWF0U3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fdGltZXIgPSBnY29yZS5UaW1lci5zZXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwxMDAwLC0xKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3VtbW9uX3RpbWVyKXtcbiAgICAgICAgICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMuc3VtbW9uX3RpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fdGltZXIgPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMuc3VtbW9uX3RpbWVyICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnN1bW1vbl90aW1lcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fdGltZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRUaW1lRm9ybWF0U3RyaW5nKCl7XG4gICAgICAgIGlmKHRoaXMuZGF0YSAmJiAodGhpcy5kYXRhLmZyZWVfdGltZSAtIGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKSkgPiAwKXtcbiAgICAgICAgICAgIHRoaXMubGVmdF90aW1lID0gdGhpcy5kYXRhLmZyZWVfdGltZSAtIGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKVxuICAgICAgICAgICAgdGhpcy5zdW1tb25fdHh0XzFfcnQuc3RyaW5nID0gIGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihTdHJpbmdVdGlsLnBhcnNlU3RyKFwiPGRpdiBmb250Y29sb3I9IzM1ZmYxND4lczwvZGl2PjxkaXYgZm9udGNvbG9yPSNmZmZmZmY+5ZCO5YWN6LS5PC9kaXY+XCIpLnN0cmluZyksIFRpbWVUb29sLmdldFRpbWVGb3JtYXQodGhpcy5sZWZ0X3RpbWUpKVxuICAgICAgICAgICAgdGhpcy5fc3VtbW9uX3R5cGVfMSA9IDNcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnN1bW1vbl90eHRfMV9ydC5zdHJpbmcgPSBVdGlscy5USTE4TihTdHJpbmdVdGlsLnBhcnNlU3RyKFwiPGRpdiBmb250Y29sb3I9I2ZmZmZmZj7lhY3otLnlj6zllKQ8L2Rpdj5cIikuc3RyaW5nKVxuICAgICAgICAgICAgdGhpcy5fc3VtbW9uX3R5cGVfMSA9IDFcbiAgICAgICAgICAgIGlmKHRoaXMuc3VtbW9uX3RpbWVyKXtcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy5zdW1tb25fdGltZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3RpbWVyID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBuZXh0UmV3YXJkTGV2ZWwoKXtcbiAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5uZXh0Q291bnQodGhpcy5kYXRhLnRpbWVzKVxuICAgICAgICBpZih0aGlzLmFyYXJkX2RhdGFbdGhpcy5kYXRhLmNhbXBfaWRdICYmIHRoaXMuYXJhcmRfZGF0YVt0aGlzLmRhdGEuY2FtcF9pZF1bY291bnRdKXtcbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5hcmFyZF9kYXRhW3RoaXMuZGF0YS5jYW1wX2lkXVxuICAgICAgICAgICAgbGV0IF9hd2FyZF9pc19vdmVyID0gZmFsc2VcbiAgICAgICAgICAgIGlmKHRoaXMuYXdhcmRfaXRlbSl7XG4gICAgICAgICAgICAgICAgbGV0IGJpZCA9IGRhdGFbY291bnRdLnJld2FyZFswXVswXVxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBkYXRhW2NvdW50XS5yZXdhcmRbMF1bMV1cbiAgICAgICAgICAgICAgICB0aGlzLmF3YXJkX2l0ZW0uc2V0RGF0YSh7YmlkOmJpZCwgbnVtOm51bX0pXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHRoaXMuZ2V0QmFvRElTdGF0dXMoKVxuICAgICAgICAgICAgICAgIHRoaXMuaXNfY2FuX2F3YXJkID0gb2JqLnN0YXR1c1xuICAgICAgICAgICAgICAgIGxldCBjYW5faWQgPSBvYmouaWQgXG4gICAgICAgICAgICAgICAgaWYodGhpcy5pc19jYW5fYXdhcmQgPT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNhbl9pZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYmlkID0gZGF0YVtjYW5faWRdLnJld2FyZFswXVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bSA9IGRhdGFbY2FuX2lkXS5yZXdhcmRbMF1bMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRfaXRlbS5zZXREYXRhKHtiaWQ6YmlkLCBudW06bnVtfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF3YXJkX2l0ZW0uc2hvd0l0ZW1FZmZlY3QodHJ1ZSwgMjYzLCBQbGF5ZXJBY3Rpb24uYWN0aW9uXzEsIHRydWUsIDEuMSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtLnNob3dJdGVtRWZmZWN0KGZhbHNlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAtLeWFqOmDqOmihuWPluWujOavleeahOaXtuWAmVxuICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNfY2FuX2F3YXJkID09IGZhbHNlICYmIHRoaXMuZGF0YS50aW1lcyA+PSBkYXRhW1V0aWxzLmdldEFyckxlbihkYXRhKV0udGltZXMpe1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXRDaGlsZFVuRW5hYmxlZCh0cnVlLCB0aGlzLmF3YXJkX2l0ZW0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRfaXRlbS5zZXRSZWNlaXZlZEljb24odHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgX2F3YXJkX2lzX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBudW1fdGltZXMgPSBkYXRhW2NvdW50XS50aW1lc1xuICAgICAgICAgICAgbGV0IGxhYmVsID0gXCJcIlxuICAgICAgICAgICAgaWYoX2F3YXJkX2lzX292ZXIpe1xuICAgICAgICAgICAgICAgIGxhYmVsID0gVXRpbHMuVEkxOE4oXCLmi5vli5/mrKHmlbAgXCIpICsgdGhpcy5kYXRhLnRpbWVzICsgXCIvXCIgKyBudW1fdGltZXNcbiAgICAgICAgICAgIH1lbHNleyBcbiAgICAgICAgICAgICAgICBsYWJlbCA9IFV0aWxzLlRJMThOKFwi5LiL5LiA6Zi25q61IFwiKSArIHRoaXMuZGF0YS50aW1lcytcIi9cIitudW1fdGltZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NfdHh0LnN0cmluZyA9IGxhYmVsXG4gICAgICAgICAgICBsZXQgY3VyX251bSA9IDBcbiAgICAgICAgICAgIGxldCB0b3RsZV9udW0gPSBudW1fdGltZXNcbiAgICAgICAgICAgIGlmKGNvdW50ID09IDEpe1xuICAgICAgICAgICAgICAgIGN1cl9udW0gPSB0aGlzLmRhdGEudGltZXNcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGN1cl9udW0gPSB0aGlzLmRhdGEudGltZXMgLSBkYXRhW2NvdW50LTFdLnRpbWVzXG4gICAgICAgICAgICAgICAgdG90bGVfbnVtID0gbnVtX3RpbWVzLWRhdGFbY291bnQtMV0udGltZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwZXJjZW50ID0gY3VyX251bSAvIHRvdGxlX251bVxuICAgICAgICAgICAgaWYodGhpcy5kYXRhLnRpbWVzID49IGRhdGFbVXRpbHMuZ2V0QXJyTGVuKGRhdGEpXS50aW1lcyl7XG4gICAgICAgICAgICAgICAgcGVyY2VudCA9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MucHJvZ3Jlc3MgPSBwZXJjZW50XG4gICAgICAgIH1cbiAgICB9LFxuICAgIF9vbkNsaWNrQXdhcmRJdGVtKCl7XG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICAgICAgICBpZih0aGlzLmlzX2Nhbl9hd2FyZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmQyMzIyMigpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB2YXIgVGltZXN1bW1vbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwidGltZXN1bW1vbl9jb250cm9sbGVyXCIpXG4gICAgICAgICAgICAgICAgVGltZXN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVGltZVN1bW1vblByb2dyZXNzVmlldyh0cnVlLCB0aGlzLmRhdGEudGltZXMsIHRoaXMuZGF0YS5jYW1wX2lkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyAtLeagueaNruW9k+WJjemYtuauteiuoeeul+S4i+S4gOasoeWlluWKsVxuICAgIG5leHRDb3VudChjdXJfbnVtKXtcbiAgICAgICAgbGV0IGNvdW50ID0gMVxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYXJhcmRfZGF0YVt0aGlzLmRhdGEuY2FtcF9pZF1cbiAgICAgICAgaWYodGhpcy5hcmFyZF9kYXRhICYmIGRhdGEpe1xuICAgICAgICAgICAgbGV0IGxlbiA9IFV0aWxzLmdldEFyckxlbihkYXRhKVxuICAgICAgICAgICAgaWYoY3VyX251bSA+PSBkYXRhW2xlbl0udGltZXMpe1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW2xlbl0uaWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yKGxldCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGxldCBtID0gaSsxXG4gICAgICAgICAgICAgICAgaWYobSA+PSBsZW4pe1xuICAgICAgICAgICAgICAgICAgICBtID0gbGVuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0udGltZXMgPiBjdXJfbnVtICYmIGN1cl9udW0gPD0gZGF0YVttXS50aW1lcyl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gZGF0YVtpXS5pZFxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnRcbiAgICB9LFxuICAgIC8vIC0t6aKG5Y+W5L+d5bqV54q25oCBXG4gICAgZ2V0QmFvRElTdGF0dXMoKXtcbiAgICAgICAgbGV0IHN0YXR1cyA9IGZhbHNlXG4gICAgICAgIGxldCBpZCA9IG51bGxcbiAgICAgICAgaWYodGhpcy5kYXRhKXtcbiAgICAgICAgICAgIGlmKHRoaXMuYXJhcmRfZGF0YVt0aGlzLmRhdGEuY2FtcF9pZF0pe1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLmFyYXJkX2RhdGFbdGhpcy5kYXRhLmNhbXBfaWRdKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmFyYXJkX2RhdGFbdGhpcy5kYXRhLmNhbXBfaWRdW2ldXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJfc3RhdHVzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cl9pZCA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhLnRpbWVzID49IHYudGltZXMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3N0YXR1cyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9pZCA9IHYuaWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgdHJ1ZV9zdGF0dXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGlmKGN1cl9zdGF0dXMgPT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGo9MDtqPHRoaXMuZGF0YS5yZXdhcmRfbGlzdC5sZW5ndGg7KytqKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgayA9IHRoaXMuZGF0YS5yZXdhcmRfbGlzdFtqXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGsuaWQgPT0gY3VyX2lkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZV9zdGF0dXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZihjdXJfaWQgJiYgdHJ1ZV9zdGF0dXMgPT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGN1cl9pZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7c3RhdHVzOnN0YXR1cyxpZDppZH1cbiAgICB9LFxuICAgIHVwZGF0ZUl0ZW1OdW0oYmFnX2NvZGUsIGRhdGFfbGlzdCl7XG4gICAgICAgIGlmKHRoaXMuc3VtbW9uX2l0ZW1fYmlkKXtcbiAgICAgICAgICAgIGlmKGJhZ19jb2RlICYmIGRhdGFfbGlzdCl7XG4gICAgICAgICAgICAgICAgaWYoYmFnX2NvZGUgPT0gQmFja1BhY2tDb25zdC5CYWdfQ29kZS5CQUNLUEFDSyl7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBkYXRhX2xpc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSBkYXRhX2xpc3RbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYgJiYgdi5iYXNlX2lkICYmIHRoaXMuc3VtbW9uX2l0ZW1fYmlkID09IHYuYmFzZV9pZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1bW1vbl9oYXZlX251bSA9IEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0SXRlbU51bUJ5QmlkKHRoaXMuc3VtbW9uX2l0ZW1fYmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9udW1fdHh0LnN0cmluZyA9IHN1bW1vbl9oYXZlX251bTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN1bW1vbkJ0blN0YXR1cygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGxldCBzdW1tb25faGF2ZV9udW0gPSBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEl0ZW1OdW1CeUJpZCh0aGlzLnN1bW1vbl9pdGVtX2JpZClcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbnVtX3R4dC5zdHJpbmcgPSBzdW1tb25faGF2ZV9udW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrSGVyb0JhZ0lzRnVsbCh0aW1lcyl7XG4gICAgICAgIC8vIOWIpOaWreiLsembhOiDjOWMheepuumXtFxuICAgICAgICB2YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xuICAgICAgICB2YXIgaGVyb19tb2RlbCA9IEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKTtcbiAgICAgICAgdmFyIGhlcm9fYmFnX2luZm8gPSBoZXJvX21vZGVsLmdldEhlcm9NYXhDb3VudCgpO1xuICAgICAgICB2YXIgbGltaXRfbnVtID0gaGVyb19iYWdfaW5mby5tYXhfY291bnQgLSBoZXJvX2JhZ19pbmZvLmhhdmVfY291dG47XG4gICAgICAgIGlmICh0aW1lcyA+IGxpbWl0X251bSkge1xuICAgICAgICAgICAgdmFyIHN0ciA9IFV0aWxzLlRJMThOKFwi6Iux6ZuE5YiX6KGo5bey5ruh77yM5Y+v6YCa6L+H5o+Q5Y2H6LS15peP562J57qn5oiW6LSt5Lmw5aKe5Yqg6Iux6ZuE5pC65bim5pWw6YeP77yM5piv5ZCm5YmN5b6A6LSt5Lmw77yfXCIpXG4gICAgICAgICAgICB2YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIik7XG4gICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHN0ciwgVXRpbHMuVEkxOE4oXCLnoa7lrppcIiksIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIilcbiAgICAgICAgICAgICAgICB2YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxuICAgICAgICAgICAgICAgIE1haW5VaUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4LnBhcnRuZXIpXG4gICAgICAgICAgICAgICAgQWN0aW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5BY3Rpb25NYWluUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICB9LCBVdGlscy5USTE4TihcIuWPlua2iFwiKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSAgICAgXG4gICAgICAgIHJldHVybiBmYWxzZTsgICBcbiAgICB9LFxuICAgIHNob3dHb2xkVGlwcyhnb29kX3Jlc19wYXRoLG5lZWRfbnVtLGNhbGxfbnVtLHZhbF9udW0sdmFsX3N0cixjYWxsX2JhY2spe1xuICAgICAgICAvL+WbvuaghyDkubDlh6DmrKEg6LSt5Lmw57uP6aqMIOWbnuiwg+WHveaVsFxuICAgICAgICBpZih0aGlzLmFsZXJ0KXtcbiAgICAgICAgICAgIHRoaXMuYWxlcnQuY2xvc2UoKVxuICAgICAgICAgICAgdGhpcy5hbGVydCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGh2YWVfbnVtID0gdGhpcy5yb2xlX3ZvLmdvbGQ7XG4gICAgICAgIGxldCBidXlfb3JpID0gY2MuanMuZm9ybWF0U3RyKFN0cmluZ1V0aWwucGFyc2VTdHIoTGFuZy5ESUFNT05EX0NPTlNVTUUpLnN0cmluZywgZ29vZF9yZXNfcGF0aCwgbmVlZF9udW0sIGh2YWVfbnVtKTtcbiAgICAgICAgbGV0IGdldF9vcmkgPSBjYy5qcy5mb3JtYXRTdHIoU3RyaW5nVXRpbC5wYXJzZVN0cihMYW5nLkJVWV9ERVMpLnN0cmluZywgIHZhbF9udW0sIHZhbF9zdHIsY2FsbF9udW0pO1xuICAgICAgICBsZXQgZGVzX3N0ciA9IGJ1eV9vcmkgKyBnZXRfb3JpO1xuICAgICAgICB2YXIgZnJhbWVfYXJyYXlzID0gW107XG4gICAgICAgIHZhciBnb29kX3BhdGggPSBQYXRoVG9vbC5nZXRJY29uUGF0aChcIml0ZW1cIiwgXCIzXCIpO1xuICAgICAgICBmcmFtZV9hcnJheXMucHVzaChnb29kX3BhdGgpO1xuXG4gICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgdGhpcy5hbGVydCA9IENvbW1vbkFsZXJ0LnNob3coZGVzX3N0ciwgXCLnoa7lrppcIiwgY2FsbF9iYWNrLmJpbmQodGhpcyksIFwi5Y+W5raIXCIsIG51bGwsIG51bGwsIG51bGwsIHtyZXNBcnI6IGZyYW1lX2FycmF5cyxtYXhXaWR0aDo0NTAsYWxpZ246Y2MubWFjcm8uVGV4dEFsaWdubWVudC5MRUZUfSk7XG4gICAgfSxcbiAgICBwbGF5UmVjcnVpdEVmZmVjdCgpe1xuICAgICAgICBsZXQgY29uZmlnX2RhdGEgPSB0aGlzLnN1bW1vbl9kYXRhXG4gICAgICAgIGlmKHRoaXMuc3VtbW9uQmcgPT0gbnVsbCl7IFxuICAgICAgICAgICAgdGhpcy5zdW1tb25CZyA9IG5ldyBjYy5Ob2RlKCkuYWRkQ29tcG9uZW50KGNjLlNwcml0ZSlcbiAgICAgICAgICAgIHRoaXMuc3VtbW9uQmcudHlwZSA9IGNjLlNwcml0ZS5UeXBlLlNMSUNFRDtcbiAgICAgICAgICAgIHRoaXMuc3VtbW9uQmcuc2l6ZU1vZGUgPSBjYy5TcHJpdGUuU2l6ZU1vZGUuQ1VTVE9NO1xuICAgICAgICAgICAgVmlld01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5hZGRUb1NjZW5lTm9kZSh0aGlzLnN1bW1vbkJnLm5vZGUsU0NFTkVfVEFHLmRpYWxvZ3VlKVxuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLnNldENvbnRlbnRTaXplKDcyMCwxMjgwKVxuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLnNldFBvc2l0aW9uKDAsIDApXG4gICAgICAgICAgICBsZXQgZ3JvdXBfaWQgPSB0aGlzLmFjdGlvbl9jb25maWdbdGhpcy5kYXRhLmNhbXBfaWRdLmdyb3VwX2lkXG4gICAgICAgICAgICBsZXQgcGF0aCA9IFBhdGhUb29sLmdldEJpZ0JnKFwidGltZXN1bW1vbi9cIisgY29uZmlnX2RhdGFbZ3JvdXBfaWRdLmNhbGxfYmdfY2FyZCxcImpwZ1wiKVxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1vbkJnLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uQmcubm9kZS5zZXRDb250ZW50U2l6ZShjYy5zaXplKDcyMCwxMjgwKSlcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIHRoaXMuc3VtbW9uQmcubm9kZS5vbihcInRvdWNoZW5kXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1vbkJnLm5vZGUuYWN0aXZlID0gIXRoaXMuc3VtbW9uQmcubm9kZS5hY3RpdmU7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5mbG9vcl9lZmZlY3Qpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb29yX2VmZmVjdC5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0aGlzLmJvb2tfZWZmZWN0KXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib29rX2VmZmVjdC5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0aGlzLmxpZ2h0X2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlnaHRfZWZmZWN0LnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWFDb21wbGV0ZSgpXG4gICAgICAgICAgICB9LHRoaXMpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLmFjdGl2ZSA9ICF0aGlzLnN1bW1vbkJnLm5vZGUuYWN0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldFJlY3J1aXREYXRhKClcbiAgICAgICAgdmFyIFRpbWVzdW1tb25Db250cm9sbGVyID1yZXF1aXJlKFwidGltZXN1bW1vbl9jb250cm9sbGVyXCIpXG4gICAgICAgIGxldCByZXdhcmRzID0gVGltZXN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEVmZmVjdEFjdGlvbihkYXRhLnJld2FyZHMpXG4gICAgICAgIHRoaXMuZmxvb3JfYWN0aW9uID0gcmV3YXJkc1swXVxuICAgICAgICB0aGlzLmxpZ2h0X2FjdGlvbiA9IHJld2FyZHNbMV1cbiAgICAgICAgbGV0IGNvbmZpZyA9IGNvbmZpZ19kYXRhW2RhdGEuZ3JvdXBfaWRdXG4gICAgICAgIGxldCBhY3Rpb25fbmFtZSA9IFwiYWN0aW9uXCI7XG4gICAgICAgIGlmIChjb25maWcpe1xuICAgICAgICAgICAgYWN0aW9uX25hbWUgPSBjb25maWcuYWN0aW9uX25hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5pKt5pS+6Z+z5pWIXG4gICAgICAgIGxldCBtdXNpY19uYW1lID0gXCJyZWNydWl0X1wiICsgYWN0aW9uX25hbWU7XG4gICAgICAgIFV0aWxzLnBsYXlFZmZlY3RTb3VuZChBVURJT19UWVBFLlJlY3J1aXQsIG11c2ljX25hbWUpO1xuICAgICAgICB0aGlzLmhhbmRsZUZsb29yRWZmZWN0KClcbiAgICAgICAgdGhpcy5oYW5kbGVMaWdodEVmZmVjdCgpXG4gICAgICAgIHRoaXMuaGFuZGxlQm9va0VmZmVjdCgpXG4gICAgICAgIE1haW5VaUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRNYWluVUlCb3R0b21TdGF0dXMoZmFsc2UpO1xuICAgICAgICBNYWluVWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0TWFpblVJVG9wU3RhdHVzKGZhbHNlKTsgICAgXG4gICAgfSxcbiAgICBoYW5kbGVGbG9vckVmZmVjdCgpe1xuICAgICAgICBsZXQgYWN0aW9uID0gdGhpcy5mbG9vcl9hY3Rpb24gfHwgUGxheWVyQWN0aW9uLmFjdGlvbl8xXG4gICAgICAgIGlmKHRoaXMuc3VtbW9uQmcgJiYgdGhpcy5mbG9vcl9lZmZlY3QgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmZsb29yX2VmZmVjdCA9IG5ldyBjYy5Ob2RlKCkuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKVxuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLmFkZENoaWxkKHRoaXMuZmxvb3JfZWZmZWN0Lm5vZGUpXG4gICAgICAgICAgICB0aGlzLmZsb29yX2VmZmVjdC5ub2RlLnNldFBvc2l0aW9uKDAsLTI3MClcbiAgICAgICAgICAgIGxldCBlZmZlY3RfcmVzID0gUGF0aFRvb2wuZ2V0RWZmZWN0UmVzKFwiNjcxXCIpO1xuICAgICAgICAgICAgbGV0IGVmZmVjdF9wYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKGVmZmVjdF9yZXMsIFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGVmZmVjdF9wYXRoLGZ1bmN0aW9uKHJlY3J1aXRfc2spe1xuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JfZWZmZWN0LnNrZWxldG9uRGF0YSA9IHJlY3J1aXRfc2s7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vcl9lZmZlY3Quc2V0QW5pbWF0aW9uKDAsIGFjdGlvbik7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuZmxvb3JfZWZmZWN0KXtcbiAgICAgICAgICAgIHRoaXMuZmxvb3JfZWZmZWN0LnNldFRvU2V0dXBQb3NlKClcbiAgICAgICAgICAgIHRoaXMuZmxvb3JfZWZmZWN0LnBhdXNlZCA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmZsb29yX2VmZmVjdC5zZXRBbmltYXRpb24oMCwgYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgfSxcbiAgICBoYW5kbGVMaWdodEVmZmVjdCgpe1xuICAgICAgICBsZXQgYWN0aW9uID0gdGhpcy5saWdodF9hY3Rpb24gfHwgUGxheWVyQWN0aW9uLmFjdGlvbl8xXG4gICAgICAgIGlmKHRoaXMuc3VtbW9uQmcgJiYgdGhpcy5saWdodF9lZmZlY3QgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmxpZ2h0X2VmZmVjdCA9IG5ldyBjYy5Ob2RlKCkuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKVxuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLmFkZENoaWxkKHRoaXMubGlnaHRfZWZmZWN0Lm5vZGUpXG4gICAgICAgICAgICB0aGlzLmxpZ2h0X2VmZmVjdC5ub2RlLnNldFBvc2l0aW9uKDAsLTI0MClcbiAgICAgICAgICAgIGxldCBlZmZlY3RfcmVzID0gUGF0aFRvb2wuZ2V0RWZmZWN0UmVzKFwiNjcwXCIpO1xuICAgICAgICAgICAgbGV0IGVmZmVjdF9wYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKGVmZmVjdF9yZXMsIFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgdGhpcy5saWdodF9lZmZlY3Quc2V0Q29tcGxldGVMaXN0ZW5lcih0aGlzLmFuaW1hQ29tcGxldGUuYmluZCh0aGlzKSlcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhlZmZlY3RfcGF0aCxmdW5jdGlvbihyZWNydWl0X3NrKXtcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0X2VmZmVjdC5za2VsZXRvbkRhdGEgPSByZWNydWl0X3NrO1xuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRfZWZmZWN0LnNldEFuaW1hdGlvbigwLCBhY3Rpb24pO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9ZWxzZSBpZih0aGlzLmxpZ2h0X2VmZmVjdCl7XG4gICAgICAgICAgICB0aGlzLmxpZ2h0X2VmZmVjdC5zZXRUb1NldHVwUG9zZSgpXG4gICAgICAgICAgICB0aGlzLmxpZ2h0X2VmZmVjdC5wYXVzZWQgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5saWdodF9lZmZlY3Quc2V0QW5pbWF0aW9uKDAsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUJvb2tFZmZlY3QoKXtcbiAgICAgICAgaWYodGhpcy5zdW1tb25CZyAmJiB0aGlzLmJvb2tfZWZmZWN0ID09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5ib29rX2VmZmVjdCA9IG5ldyBjYy5Ob2RlKCkuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKVxuICAgICAgICAgICAgdGhpcy5zdW1tb25CZy5ub2RlLmFkZENoaWxkKHRoaXMuYm9va19lZmZlY3Qubm9kZSlcbiAgICAgICAgICAgIHRoaXMuYm9va19lZmZlY3Qubm9kZS5zZXRQb3NpdGlvbigwLC0yNDApXG4gICAgICAgICAgICBsZXQgZWZmZWN0X3JlcyA9IFBhdGhUb29sLmdldEVmZmVjdFJlcyhcIjY3MlwiKTtcbiAgICAgICAgICAgIGxldCBlZmZlY3RfcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChlZmZlY3RfcmVzLCBcImFjdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhlZmZlY3RfcGF0aCxmdW5jdGlvbihyZWNydWl0X3NrKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJvb2tfZWZmZWN0LnNrZWxldG9uRGF0YSA9IHJlY3J1aXRfc2s7XG4gICAgICAgICAgICAgICAgdGhpcy5ib29rX2VmZmVjdC5zZXRBbmltYXRpb24oMCwgUGxheWVyQWN0aW9uLmFjdGlvbik7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuYm9va19lZmZlY3Qpe1xuICAgICAgICAgICAgdGhpcy5ib29rX2VmZmVjdC5zZXRUb1NldHVwUG9zZSgpXG4gICAgICAgICAgICB0aGlzLmJvb2tfZWZmZWN0LnBhdXNlZCA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmJvb2tfZWZmZWN0LnNldEFuaW1hdGlvbigwLCBQbGF5ZXJBY3Rpb24uYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYW5pbWFDb21wbGV0ZSgpe1xuICAgICAgICB0aGlzLnN1bW1vbkJnLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIE1haW5VaUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRNYWluVUlCb3R0b21TdGF0dXModHJ1ZSk7ICAgICAgICBcbiAgICAgICAgTWFpblVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNldE1haW5VSVRvcFN0YXR1cyh0cnVlKTsgICBcbiAgICAgICAgdmFyIFBhcnRuZXJzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fY29udHJvbGxlclwiKSAgICAgXG4gICAgICAgIFBhcnRuZXJzdW1tb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlblN1bW1vbkdhaW5XaW5kb3codHJ1ZSk7XG4gICAgfSxcbiAgICAvLyDlvZPpnaLmnb/ku47kuLvoioLngrnph4rmlL7mjonnmoTosIPnlKjmjqXlj6Ms6ZyA6KaB5omL5Yqo6LCD55SoLOiAjOS4lOS5n+S4gOWumuimgeiwg+eUqFxuICAgIG9uRGVsZXRlOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuYXdhcmRfaXRlbSl7XG4gICAgICAgICAgICB0aGlzLmF3YXJkX2l0ZW0uZGVsZXRlTWUoKVxuICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnN1bW1vbl90aW1lcil7XG4gICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy5zdW1tb25fdGltZXIpO1xuICAgICAgICAgICAgdGhpcy5zdW1tb25fdGltZXIgPSBudWxsXG4gICAgICAgIH1cbiAgICB9LFxufSkiXX0=