|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/primus/view/primus_challenge_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, 'bc034lVSFJIUoazB/hWXMt2', 'primus_challenge_window');
|
// Scripts/mod/primus/view/primus_challenge_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-03-16 10:26:46
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var RoleController = require("role_controller");
|
|
var ArenaController = require("arena_controller");
|
|
var PlayerHead = require("playerhead");
|
|
var FriendController = require("friend_controller");
|
|
var PartnerCalculate = require("partner_calculate");
|
|
var BaseRole = require("baserole");
|
|
var Primus_challengeWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("primus", "primus_challenge_panel");
|
this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Mini; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = arguments[0];
|
this.model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
// 属性列表
|
this.attr_label_list = [];
|
this.attr_icon_list = []; // 复选框
|
|
this.checkbox_list = [];
|
this.checkbox_counts = [1, 5, 10]; // boss 主动技能
|
|
this.act_skill_item_list = []; // boss 被动技能
|
|
this.passive_skill_item_list = []; // 技能宽高
|
|
this.skill_width = 88;
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.background = this.root_wnd.getChildByName("background");
|
this.background.scale = FIT_SCALE;
|
this.main_container = this.root_wnd.getChildByName("main_container");
|
this.main_panel = this.main_container.getChildByName("main_panel");
|
this.close_btn = this.main_panel.getChildByName("close_btn");
|
this.win_title = this.main_panel.getChildByName("win_title").getComponent(cc.Label);
|
this.win_title.string = Utils.TI18N("神殿挑战");
|
this.primus_bigbg_3_node = this.main_panel.getChildByName("primus_bigbg_3");
|
this.primus_bigbg_3_node.scale = 2;
|
this.primus_bigbg_3 = this.primus_bigbg_3_node.getComponent(cc.Sprite);
|
this.loadRes(PathTool.getBigBg("primus_bigbg_3", null, "primus"), function (resObject) {
|
if (this.primus_bigbg_3) {
|
this.primus_bigbg_3.spriteFrame = resObject;
|
}
|
}.bind(this));
|
this.record_btn = this.main_panel.getChildByName("record_btn"); // 站台
|
|
var station_lay = this.main_panel.getChildByName("station_lay");
|
this.mode_node = station_lay.getChildByName("mode_node");
|
this.occupant_tips = station_lay.getChildByName("occupant_tips").getComponent(cc.Label);
|
this.tips_node = station_lay.getChildByName("tips_node");
|
this.head_node = station_lay.getChildByName("head_node");
|
this.title_img = station_lay.getChildByName("title_img").getComponent(cc.Sprite);
|
this.name = station_lay.getChildByName("name").getComponent(cc.Label);
|
this.name_bg = station_lay.getChildByName("name_bg"); // boss技能
|
|
var boss_panel = this.main_panel.getChildByName("boss_panel");
|
var desc_label = boss_panel.getChildByName("desc_label").getComponent(cc.Label);
|
var desc_label_1 = boss_panel.getChildByName("desc_label_1").getComponent(cc.Label);
|
var desc_label_2 = boss_panel.getChildByName("desc_label_2").getComponent(cc.Label);
|
desc_label.string = Utils.TI18N("Boss技能");
|
desc_label_1.string = Utils.TI18N("主动技能");
|
desc_label_2.string = Utils.TI18N("被动技能"); // 主动技能scrollview
|
|
this.item_container_1 = boss_panel.getChildByName("item_container_1").getChildByName("content"); // 被动技能scrollview
|
|
this.item_container_2 = boss_panel.getChildByName("item_container_2").getChildByName("content"); // 属性
|
|
this.attr_panel = this.main_panel.getChildByName("attr_panel");
|
this.arrt_title = this.attr_panel.getChildByName("title").getComponent(cc.Label);
|
|
for (var i = 0; i < 4; i++) {
|
this.attr_label_list[i] = this.attr_panel.getChildByName("attr_label" + (i + 1)).getComponent(cc.Label);
|
this.attr_icon_list[i] = this.attr_panel.getChildByName("attr_icon" + (i + 1)).getComponent(cc.Sprite);
|
}
|
|
this.arrt_title.string = Utils.TI18N("神位称号属性加成"); // 复选框
|
|
var box_panel = this.main_panel.getChildByName("box_panel");
|
this.checkbox_list[0] = box_panel.getChildByName("checkbox1");
|
this.checkbox_list[1] = box_panel.getChildByName("checkbox5");
|
this.checkbox_list[2] = box_panel.getChildByName("checkbox10");
|
var name = this.checkbox_list[0].getChildByName("name").getComponent(cc.Label);
|
name.string = cc.js.formatStr(Utils.TI18N("进化%s次"), this.checkbox_counts[0]);
|
name = this.checkbox_list[1].getChildByName("name").getComponent(cc.Label);
|
name.string = cc.js.formatStr(Utils.TI18N("进化%s次"), this.checkbox_counts[1]);
|
name = this.checkbox_list[2].getChildByName("name").getComponent(cc.Label);
|
name.string = cc.js.formatStr(Utils.TI18N("进化%s次"), this.checkbox_counts[2]);
|
this.select_checkbox = 0;
|
this.warning_tips = box_panel.getChildByName("warning_tips").getComponent(cc.Label);
|
this.warning_tips.string = Utils.TI18N("(难度大请谨慎)");
|
this.tips_name = this.main_panel.getChildByName("tips_name").getComponent(cc.Label);
|
this.challenge_btn = this.main_panel.getChildByName("challenge_btn");
|
var goto_node = this.main_panel.getChildByName("goto_node");
|
this.gotoe_label = Utils.createRichLabel(24, new cc.Color(36, 144, 3, 255), cc.v2(0, 0.5), cc.v2(0, 0), 30, 125);
|
this.gotoe_label.horizontalAlign = cc.macro.TextAlignment.LEFT;
|
this.gotoe_label.string = cc.js.formatStr("<u>%s</u>", Utils.TI18N("前往竞技场"));
|
goto_node.addChild(this.gotoe_label.node);
|
var tips_node = this.main_panel.getChildByName("tips_node");
|
this.tips_label = Utils.createRichLabel(22, new cc.Color(169, 95, 16, 255), cc.v2(0.5, 0.5), cc.v2(0, 0), 30, 1280);
|
tips_node.addChild(this.tips_label.node);
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.gotoe_label.node, function () {
|
var ArenaController = require("arena_controller");
|
|
ArenaController.getInstance().requestOpenArenWindow();
|
this.ctrl.openPrimusChallengePanel(false);
|
}.bind(this), 1);
|
Utils.onTouchEnd(this.close_btn, function () {
|
this.ctrl.openPrimusChallengePanel(false);
|
}.bind(this), 2);
|
Utils.onTouchEnd(this.record_btn, function () {
|
this._onClickChallengeRecordBtn();
|
}.bind(this), 2);
|
Utils.onTouchEnd(this.challenge_btn, function () {
|
this._onClickChallengeBtn();
|
}.bind(this), 2);
|
|
for (var i in this.checkbox_list) {
|
Utils.onTouchEnd(this.checkbox_list[i], function (i) {
|
if (this.sever_data) {
|
this.select_checkbox = i;
|
this.setSelectCheckBox();
|
var num = this.sever_data.num + this.checkbox_counts[i];
|
this.initBossSkill(num);
|
}
|
}.bind(this, i), 1);
|
} // -- this:addGlobalEvent(TaskEvent.UpdateUIRedStatus, function(key, value)
|
// -- this:updateUIRedStatus(key)
|
// -- end)
|
|
},
|
// 去挑战去
|
_onClickChallengeBtn: function _onClickChallengeBtn() {
|
if (!this.sever_data) return;
|
|
var _send20702 = function () {
|
var num = this.checkbox_counts[this.select_checkbox];
|
this.ctrl.sender20702(this.sever_data.pos, num);
|
}.bind(this);
|
|
if (this.is_have_title) {
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(Utils.TI18N("您当前已占有一个神位,若挑战其他神位成功,将失去原有神位,是否继续挑战?"), Utils.TI18N("确定"), _send20702, Utils.TI18N("取消"));
|
} else {
|
_send20702();
|
}
|
},
|
// 查看挑战记录
|
_onClickChallengeRecordBtn: function _onClickChallengeRecordBtn() {
|
if (!this.sever_data) return;
|
this.ctrl.sender20703(this.sever_data.pos);
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(data) {
|
if (!data) return;
|
if (data.length < 2) return;
|
this.is_have_title = data[1];
|
this.sever_data = data[0];
|
this.var_data = Config.primus_data.data_upgrade[this.sever_data.pos];
|
var honor_data = Config.honor_data.data_title[this.var_data.honor_id];
|
|
if (honor_data && this.title_img) {
|
var res = PathTool.getHonorRes(honor_data.res_id);
|
this.loadRes(res, function (resObject) {
|
if (this.title_img) {
|
this.title_img.spriteFrame = resObject;
|
}
|
}.bind(this));
|
}
|
|
if (this.tips_node && this.var_data) {
|
var str = cc.js.formatStr(Utils.TI18N("<color=#ffffff>已进化<color=#14ff32>%s</color>次</color>"), this.sever_data.num);
|
var label = Utils.createRichLabel(24, new cc.Color(0xff, 0xff, 0xff, 0xff), cc.v2(0.5, 0.5), cc.v2(0, 0), 30);
|
label.string = str;
|
this.tips_node.addChild(label.node);
|
}
|
|
if (this.sever_data.name != null || this.sever_data.name != "") {
|
var roleVo = RoleController.getInstance().getRoleVo();
|
|
if (roleVo && this.sever_data.rid == roleVo.rid && this.sever_data.srv_id == roleVo.srv_id) {
|
// 是自己
|
this.tips_name.string = Utils.TI18N("已占领神位");
|
this.challenge_btn.active = false;
|
this.gotoe_label.node.active = false;
|
}
|
} // 更新模型
|
|
|
if (this.var_data) {
|
this.updateSpine(this.var_data.look_id);
|
} // 头像
|
|
|
this.initHeadUi(); // boss技能
|
|
this.initBossSkill(this.sever_data.num); // 称号属性
|
|
this.initHonorAttribute();
|
this.setSelectCheckBox();
|
this.updateTipsLabel();
|
},
|
updateTipsLabel: function updateTipsLabel() {
|
var my_data = ArenaController.getInstance().getModel().getMyLoopData();
|
|
if (this.tips_label && this.var_data) {
|
if (my_data && my_data.rank && my_data.rank > 0) {
|
this.tips_label.string = cc.js.formatStr(Utils.TI18N("挑战条件:当前竞技场处于前%s名(我的排名:<color=#249003>%s</color>)"), this.var_data.arena_rank, my_data.rank);
|
} else {
|
this.tips_label.string = cc.js.formatStr(Utils.TI18N("挑战条件:当前竞技场处于前%s名(我的排名:<color=#249003>无</color>)"), this.var_data.arena_rank);
|
}
|
}
|
},
|
// 初始化头像ui
|
initHeadUi: function initHeadUi() {
|
if (!this.sever_data) return;
|
|
if (this.sever_data.name == null || this.sever_data.name == "") {
|
this.occupant_tips.string = Utils.TI18N("虚位以待");
|
this.name_bg.active = false;
|
this.name.node.active = false;
|
return;
|
} // 头像
|
|
|
this.play_head = new PlayerHead(); //cc.size(96,96)
|
|
this.play_head.setPosition(0, 0); // this.play_head.setScale(0.95);
|
|
if (this.sever_data.lev) {
|
this.play_head.setLev(this.sever_data.lev);
|
}
|
|
this.play_head.setParent(this.head_node);
|
this.play_head.show();
|
this.play_head.setHeadRes(this.sever_data.face_id);
|
this.name.string = this.sever_data.name;
|
this.play_head.addCallBack(function () {
|
FriendController.getInstance().openFriendCheckPanel(true, {
|
srv_id: this.sever_data.srv_id,
|
rid: this.sever_data.rid
|
});
|
}.bind(this));
|
},
|
initHonorAttribute: function initHonorAttribute() {
|
if (!this.var_data) return;
|
if (!this.attr_label_list) return;
|
if (!this.attr_icon_list) return;
|
var honor_data = Config.honor_data.data_title[this.var_data.honor_id];
|
|
if (honor_data) {
|
for (var i in this.attr_label_list) {
|
var icon = this.attr_icon_list[i];
|
|
if (honor_data.attr[i]) {
|
this.attr_label_list[i].node.active = true;
|
var atrr_name = Config.attr_data.data_key_to_name[honor_data.attr[i][0]];
|
|
if (PartnerCalculate.isShowPerByStr(honor_data.attr[i][0])) {
|
var value = honor_data.attr[i][1] / 10;
|
this.attr_label_list[i].string = cc.js.formatStr("%s + %s%", Utils.TI18N(atrr_name), value);
|
} else {
|
this.attr_label_list[i].string = cc.js.formatStr("%s + %s ", Utils.TI18N(atrr_name), honor_data.attr[i][1]);
|
}
|
|
if (icon) {
|
icon.node.active = true;
|
var res_id = PathTool.getAttrIconByStr(honor_data.attr[i][0]);
|
var res = PathTool.getCommonIcomPath(res_id);
|
this.loadRes(res, function (icon, resObject) {
|
if (icon) {
|
icon.spriteFrame = resObject;
|
}
|
}.bind(this, icon));
|
}
|
} else {
|
this.attr_label_list[i].node.active = false;
|
|
if (icon) {
|
icon.node.active = false;
|
}
|
}
|
}
|
}
|
},
|
initBossSkill: function initBossSkill(num) {
|
if (this.unit_data_list == null) {
|
this.unit_data_list = [];
|
|
for (var i in Config.primus_data.data_unitdata) {
|
if (this.sever_data.pos == Config.primus_data.data_unitdata[i].pos) {
|
this.unit_data_list.push(Config.primus_data.data_unitdata[i]);
|
}
|
}
|
}
|
|
var cur_data = null;
|
var length = this.unit_data_list.length;
|
|
for (var j in this.unit_data_list) {
|
if (num >= this.unit_data_list[j].min && num <= this.unit_data_list[j].max) {
|
cur_data = this.unit_data_list[j];
|
break;
|
}
|
|
if (j + 1 == length) {
|
cur_data = this.unit_data_list[j];
|
}
|
}
|
|
if (cur_data == null) {
|
return;
|
}
|
|
if (this.cur_unit_data && this.cur_unit_data.min == cur_data.min) {
|
// 同一个对象.不用初始化
|
return;
|
}
|
|
this.cur_unit_data = cur_data;
|
var act_skill = cur_data.act_skill;
|
var passive_skill = cur_data.passive_skill; // 主动技能
|
|
var item_width = this.skill_width * act_skill.length;
|
var max_width = Math.max(this.item_container_1.getContentSize().width, item_width);
|
this.item_container_1.setContentSize(cc.size(max_width, this.item_container_1.getContentSize().height));
|
|
for (var i in act_skill) {
|
var vo = gdata("skill_data", "data_get_skill", act_skill[i]);
|
|
if (vo) {
|
if (this.act_skill_item_list[i] == null) {
|
this.act_skill_item_list[i] = {};
|
this.act_skill_item_list[i] = this.updateSkillItem(vo, this.act_skill_item_list[i], true);
|
this.item_container_1.addChild(this.act_skill_item_list[i].con);
|
} else {
|
this.updateSkillItem(vo, this.act_skill_item_list[i]);
|
}
|
|
this.act_skill_item_list[i].con.setPosition((this.skill_width + 5) * i + this.skill_width / 2, this.skill_width / 2);
|
} else {
|
console.log(cc.js.formatStr("技能表id: %s 没发现", act_skill[i].toString()));
|
}
|
} // 被动技能
|
|
|
var item_width = this.skill_width * passive_skill.length;
|
var max_width = Math.max(this.item_container_2.getContentSize().width, item_width);
|
this.item_container_2.setContentSize(cc.size(max_width, this.item_container_2.getContentSize().height));
|
|
for (var i in passive_skill) {
|
var vo = gdata("skill_data", "data_get_skill", passive_skill[i]);
|
|
if (vo) {
|
if (this.passive_skill_item_list[i] == null) {
|
this.passive_skill_item_list[i] = {};
|
this.passive_skill_item_list[i] = this.updateSkillItem(vo, this.passive_skill_item_list[i], false);
|
this.item_container_2.addChild(this.passive_skill_item_list[i].con);
|
} else {
|
this.updateSkillItem(vo, this.passive_skill_item_list[i]);
|
}
|
|
this.passive_skill_item_list[i].con.setPosition((this.skill_width + 5) * i + this.skill_width / 2, this.skill_width / 2);
|
} else {
|
console.log(cc.js.formatStr("技能表id: %s 没发现", passive_skill[i].toString()));
|
}
|
}
|
},
|
updateSpine: function updateSpine(look_id) {
|
if (!look_id) return;
|
|
var fun = function () {
|
if (!this.spine) {
|
this.spine = new BaseRole(); // this.spine:setCascade(true)
|
|
this.spine.setParent(this.mode_node);
|
this.spine.node.setPosition(0, 76);
|
this.spine.node.setAnchorPoint(cc.v2(0.5, 0.5)); // this.spine:setOpacity(0)
|
// var action = cc.fadeIn(0.2);
|
// this.spine.runAction(action);
|
|
this.spine.setData(BaseRole.type.role, look_id, PlayerAction.show, true, 0.75);
|
}
|
}.bind(this);
|
|
if (this.spine) {
|
// this.spine:setCascade(true)
|
var action = cc.fadeOut(0.2);
|
this.spine.node.runAction(cc.sequence(action, cc.CallFunc(function () {
|
this.spine.node.stopAllActions();
|
this.spine.deleteMe();
|
this.spine = null;
|
fun();
|
})));
|
} else {
|
fun();
|
}
|
},
|
// @is_act 是否主动技能
|
updateSkillItem: function updateSkillItem(config, skill_item, is_act) {
|
var size = cc.size(this.skill_width, this.skill_width);
|
var skill_size = cc.size(this.skill_width - 4, this.skill_width - 4);
|
skill_item.config = config;
|
|
if (skill_item.con == null) {
|
var con = new cc.Node();
|
con.setContentSize(size);
|
con.scale = 0.75;
|
Utils.onTouchEnd(con, function () {
|
if (skill_item.config) {
|
var TipsController = require("tips_controller");
|
|
TipsController.getInstance().showSkillTips(skill_item.config);
|
}
|
}.bind(this), 1);
|
skill_item.con = con; // 背景
|
|
var res = PathTool.getCommonIcomPath("common_1005");
|
var bg = Utils.createImage(con, null, 0, 0, cc.v2(0.5, 0.5), true, 0);
|
this.loadRes(res, function (bg, resObject) {
|
if (bg) {
|
bg.spriteFrame = resObject;
|
}
|
}.bind(this, bg));
|
} // 技能icon
|
|
|
var res = PathTool.getIconPath("skillicon", config.icon);
|
|
if (skill_item.icon == null) {
|
skill_item.icon = Utils.createImage(skill_item.con, null, 0, 0, cc.v2(0.5, 0.5), false, 0, false);
|
this.loadRes(res, function (resObject) {
|
if (skill_item && skill_item.icon) {
|
skill_item.icon.spriteFrame = resObject;
|
}
|
}.bind(this));
|
} else {
|
this.loadRes(res, function (resObject) {
|
if (skill_item && skill_item.icon) {
|
skill_item.icon.spriteFrame = resObject;
|
}
|
}.bind(this));
|
} // 技能等级
|
|
|
if (skill_item.lev_label == null) {
|
skill_item.lev_label = Utils.createLabel(26, new cc.Color(0xff, 0xff, 0xff, 0xff), new cc.Color(0x00, 0x00, 0x00, 0xff), this.skill_width / 2 + 10, -this.skill_width / 2 - 20, config.level.toString(), skill_item.con, 2, cc.v2(1, 0));
|
} else {
|
skill_item.lev_label.string = config.level.toString();
|
}
|
|
return skill_item;
|
},
|
// 设置选择框
|
setSelectCheckBox: function setSelectCheckBox() {
|
if (!this.select_checkbox) return;
|
if (!this.checkbox_list) return;
|
|
for (var i in this.checkbox_list) {
|
if (this.select_checkbox == i) {
|
this.checkbox_list[i].getComponent(cc.Toggle).check();
|
} else {
|
this.checkbox_list[i].getComponent(cc.Toggle).uncheck();
|
}
|
}
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.spine) {
|
this.spine.deleteMe();
|
this.spine = null;
|
}
|
|
if (this.play_head) {
|
this.play_head.deleteMe();
|
this.play_head = null;
|
}
|
|
this.ctrl.openPrimusChallengePanel(false);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwcmltdXNcXHZpZXdcXHByaW11c19jaGFsbGVuZ2Vfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlJvbGVDb250cm9sbGVyIiwiQXJlbmFDb250cm9sbGVyIiwiUGxheWVySGVhZCIsIkZyaWVuZENvbnRyb2xsZXIiLCJQYXJ0bmVyQ2FsY3VsYXRlIiwiQmFzZVJvbGUiLCJQcmltdXNfY2hhbGxlbmdlV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsInVpIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiTWluaSIsImN0cmwiLCJhcmd1bWVudHMiLCJtb2RlbCIsImdldE1vZGVsIiwiaW5pdENvbmZpZyIsImF0dHJfbGFiZWxfbGlzdCIsImF0dHJfaWNvbl9saXN0IiwiY2hlY2tib3hfbGlzdCIsImNoZWNrYm94X2NvdW50cyIsImFjdF9za2lsbF9pdGVtX2xpc3QiLCJwYXNzaXZlX3NraWxsX2l0ZW1fbGlzdCIsInNraWxsX3dpZHRoIiwib3BlbkNhbGxCYWNrIiwiYmFja2dyb3VuZCIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsIm1haW5fY29udGFpbmVyIiwibWFpbl9wYW5lbCIsImNsb3NlX2J0biIsIndpbl90aXRsZSIsImdldENvbXBvbmVudCIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsInByaW11c19iaWdiZ18zX25vZGUiLCJwcmltdXNfYmlnYmdfMyIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlc09iamVjdCIsInNwcml0ZUZyYW1lIiwiYmluZCIsInJlY29yZF9idG4iLCJzdGF0aW9uX2xheSIsIm1vZGVfbm9kZSIsIm9jY3VwYW50X3RpcHMiLCJ0aXBzX25vZGUiLCJoZWFkX25vZGUiLCJ0aXRsZV9pbWciLCJuYW1lIiwibmFtZV9iZyIsImJvc3NfcGFuZWwiLCJkZXNjX2xhYmVsIiwiZGVzY19sYWJlbF8xIiwiZGVzY19sYWJlbF8yIiwiaXRlbV9jb250YWluZXJfMSIsIml0ZW1fY29udGFpbmVyXzIiLCJhdHRyX3BhbmVsIiwiYXJydF90aXRsZSIsImkiLCJib3hfcGFuZWwiLCJqcyIsImZvcm1hdFN0ciIsInNlbGVjdF9jaGVja2JveCIsIndhcm5pbmdfdGlwcyIsInRpcHNfbmFtZSIsImNoYWxsZW5nZV9idG4iLCJnb3RvX25vZGUiLCJnb3RvZV9sYWJlbCIsImNyZWF0ZVJpY2hMYWJlbCIsIkNvbG9yIiwidjIiLCJob3Jpem9udGFsQWxpZ24iLCJtYWNybyIsIlRleHRBbGlnbm1lbnQiLCJMRUZUIiwiYWRkQ2hpbGQiLCJub2RlIiwidGlwc19sYWJlbCIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwiZ2V0SW5zdGFuY2UiLCJyZXF1ZXN0T3BlbkFyZW5XaW5kb3ciLCJvcGVuUHJpbXVzQ2hhbGxlbmdlUGFuZWwiLCJfb25DbGlja0NoYWxsZW5nZVJlY29yZEJ0biIsIl9vbkNsaWNrQ2hhbGxlbmdlQnRuIiwic2V2ZXJfZGF0YSIsInNldFNlbGVjdENoZWNrQm94IiwibnVtIiwiaW5pdEJvc3NTa2lsbCIsIl9zZW5kMjA3MDIiLCJzZW5kZXIyMDcwMiIsInBvcyIsImlzX2hhdmVfdGl0bGUiLCJDb21tb25BbGVydCIsInNob3ciLCJzZW5kZXIyMDcwMyIsIm9wZW5Sb290V25kIiwiZGF0YSIsImxlbmd0aCIsInZhcl9kYXRhIiwiQ29uZmlnIiwicHJpbXVzX2RhdGEiLCJkYXRhX3VwZ3JhZGUiLCJob25vcl9kYXRhIiwiZGF0YV90aXRsZSIsImhvbm9yX2lkIiwicmVzIiwiZ2V0SG9ub3JSZXMiLCJyZXNfaWQiLCJzdHIiLCJsYWJlbCIsInJvbGVWbyIsImdldFJvbGVWbyIsInJpZCIsInNydl9pZCIsImFjdGl2ZSIsInVwZGF0ZVNwaW5lIiwibG9va19pZCIsImluaXRIZWFkVWkiLCJpbml0SG9ub3JBdHRyaWJ1dGUiLCJ1cGRhdGVUaXBzTGFiZWwiLCJteV9kYXRhIiwiZ2V0TXlMb29wRGF0YSIsInJhbmsiLCJhcmVuYV9yYW5rIiwicGxheV9oZWFkIiwic2V0UG9zaXRpb24iLCJsZXYiLCJzZXRMZXYiLCJzZXRQYXJlbnQiLCJzZXRIZWFkUmVzIiwiZmFjZV9pZCIsImFkZENhbGxCYWNrIiwib3BlbkZyaWVuZENoZWNrUGFuZWwiLCJpY29uIiwiYXR0ciIsImF0cnJfbmFtZSIsImF0dHJfZGF0YSIsImRhdGFfa2V5X3RvX25hbWUiLCJpc1Nob3dQZXJCeVN0ciIsInZhbHVlIiwiZ2V0QXR0ckljb25CeVN0ciIsImdldENvbW1vbkljb21QYXRoIiwidW5pdF9kYXRhX2xpc3QiLCJkYXRhX3VuaXRkYXRhIiwicHVzaCIsImN1cl9kYXRhIiwiaiIsIm1pbiIsIm1heCIsImN1cl91bml0X2RhdGEiLCJhY3Rfc2tpbGwiLCJwYXNzaXZlX3NraWxsIiwiaXRlbV93aWR0aCIsIm1heF93aWR0aCIsIk1hdGgiLCJnZXRDb250ZW50U2l6ZSIsIndpZHRoIiwic2V0Q29udGVudFNpemUiLCJzaXplIiwiaGVpZ2h0Iiwidm8iLCJnZGF0YSIsInVwZGF0ZVNraWxsSXRlbSIsImNvbiIsImNvbnNvbGUiLCJsb2ciLCJ0b1N0cmluZyIsImZ1biIsInNwaW5lIiwic2V0QW5jaG9yUG9pbnQiLCJzZXREYXRhIiwidHlwZSIsInJvbGUiLCJQbGF5ZXJBY3Rpb24iLCJhY3Rpb24iLCJmYWRlT3V0IiwicnVuQWN0aW9uIiwic2VxdWVuY2UiLCJDYWxsRnVuYyIsInN0b3BBbGxBY3Rpb25zIiwiZGVsZXRlTWUiLCJjb25maWciLCJza2lsbF9pdGVtIiwiaXNfYWN0Iiwic2tpbGxfc2l6ZSIsIk5vZGUiLCJUaXBzQ29udHJvbGxlciIsInNob3dTa2lsbFRpcHMiLCJiZyIsImNyZWF0ZUltYWdlIiwiZ2V0SWNvblBhdGgiLCJsZXZfbGFiZWwiLCJjcmVhdGVMYWJlbCIsImxldmVsIiwiVG9nZ2xlIiwi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QUNIOztBQUNELFdBQU9nQixVQUFQO0FBQ0gsR0EzY2lDO0FBNmNsQztBQUNBakcsRUFBQUEsaUJBQWlCLEVBQUMsNkJBQVU7QUFDeEIsUUFBRyxDQUFDLEtBQUt4QixlQUFULEVBQXlCO0FBQ3pCLFFBQUcsQ0FBQyxLQUFLakQsYUFBVCxFQUF1Qjs7QUFDdkIsU0FBSSxJQUFJNkMsQ0FBUixJQUFhLEtBQUs3QyxhQUFsQixFQUFnQztBQUM1QixVQUFHLEtBQUtpRCxlQUFMLElBQXdCSixDQUEzQixFQUE2QjtBQUN6QixhQUFLN0MsYUFBTCxDQUFtQjZDLENBQW5CLEVBQXNCOUIsWUFBdEIsQ0FBbUNsQyxFQUFFLENBQUN5TSxNQUF0QyxFQUE4Q0MsS0FBOUM7QUFDSCxPQUZELE1BRUs7QUFDRCxhQUFLdkwsYUFBTCxDQUFtQjZDLENBQW5CLEVBQXNCOUIsWUFBdEIsQ0FBbUNsQyxFQUFFLENBQUN5TSxNQUF0QyxFQUE4Q0UsT0FBOUM7QUFDSDtBQUNKO0FBQ0osR0F4ZGlDO0FBMmRsQztBQUNBQyxFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFDcEIsUUFBRyxLQUFLN0IsS0FBUixFQUFjO0FBQ1YsV0FBS0EsS0FBTCxDQUFXWSxRQUFYO0FBQ0EsV0FBS1osS0FBTCxHQUFhLElBQWI7QUFDSDs7QUFFRCxRQUFHLEtBQUs1QyxTQUFSLEVBQWtCO0FBQ2QsV0FBS0EsU0FBTCxDQUFld0QsUUFBZjtBQUNBLFdBQUt4RCxTQUFMLEdBQWlCLElBQWpCO0FBQ0g7O0FBQ0QsU0FBS3ZILElBQUwsQ0FBVTRFLHdCQUFWLENBQW1DLEtBQW5DO0FBQ0g7QUF2ZWlDLENBQVQsQ0FBN0IiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAzLTE2IDEwOjI2OjQ2XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBBcmVuYUNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYXJlbmFfY29udHJvbGxlclwiKTtcbnZhciBQbGF5ZXJIZWFkID0gcmVxdWlyZShcInBsYXllcmhlYWRcIik7XG52YXIgRnJpZW5kQ29udHJvbGxlciA9IHJlcXVpcmUoXCJmcmllbmRfY29udHJvbGxlclwiKTtcbnZhciBQYXJ0bmVyQ2FsY3VsYXRlID0gcmVxdWlyZShcInBhcnRuZXJfY2FsY3VsYXRlXCIpO1xudmFyIEJhc2VSb2xlID0gcmVxdWlyZShcImJhc2Vyb2xlXCIpO1xuXG52YXIgUHJpbXVzX2NoYWxsZW5nZVdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJwcmltdXNcIiwgXCJwcmltdXNfY2hhbGxlbmdlX3BhbmVsXCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcudWk7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5NaW5pOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcbiAgICAgICAgLy8g5bGe5oCn5YiX6KGoXG4gICAgICAgIHRoaXMuYXR0cl9sYWJlbF9saXN0ID0gW107XG4gICAgICAgIHRoaXMuYXR0cl9pY29uX2xpc3QgPSBbXTtcbiAgICAgICAgLy8g5aSN6YCJ5qGGXG4gICAgICAgIHRoaXMuY2hlY2tib3hfbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLmNoZWNrYm94X2NvdW50cyA9IFsxLDUsMTBdO1xuICAgICAgICAvLyBib3NzIOS4u+WKqOaKgOiDvVxuICAgICAgICB0aGlzLmFjdF9za2lsbF9pdGVtX2xpc3QgPSBbXTtcbiAgICAgICAgLy8gYm9zcyDooqvliqjmioDog71cbiAgICAgICAgdGhpcy5wYXNzaXZlX3NraWxsX2l0ZW1fbGlzdCA9IFtdO1xuICAgIFxuICAgICAgICAvLyDmioDog73lrr3pq5hcbiAgICAgICAgdGhpcy5za2lsbF93aWR0aCA9IDg4XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm1haW5fcGFuZWxcIik7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiY2xvc2VfYnRuXCIpO1xuICAgICAgICB0aGlzLndpbl90aXRsZSA9IHRoaXMubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcIndpbl90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLndpbl90aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuelnuauv+aMkeaImFwiKTtcbiAgICAgICAgdGhpcy5wcmltdXNfYmlnYmdfM19ub2RlID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwicHJpbXVzX2JpZ2JnXzNcIik7XG4gICAgICAgIHRoaXMucHJpbXVzX2JpZ2JnXzNfbm9kZS5zY2FsZSA9IDI7XG4gICAgICAgIHRoaXMucHJpbXVzX2JpZ2JnXzMgPSB0aGlzLnByaW11c19iaWdiZ18zX25vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG5cbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwicHJpbXVzX2JpZ2JnXzNcIixudWxsLFwicHJpbXVzXCIpLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgIGlmKHRoaXMucHJpbXVzX2JpZ2JnXzMpe1xuICAgICAgICAgICAgICAgIHRoaXMucHJpbXVzX2JpZ2JnXzMuc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMucmVjb3JkX2J0biAgICAgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJyZWNvcmRfYnRuXCIpO1xuICAgICAgICAvLyDnq5nlj7BcbiAgICAgICAgdmFyIHN0YXRpb25fbGF5ICAgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJzdGF0aW9uX2xheVwiKTtcbiAgICAgICAgdGhpcy5tb2RlX25vZGUgICAgICA9IHN0YXRpb25fbGF5LmdldENoaWxkQnlOYW1lKFwibW9kZV9ub2RlXCIpXG4gICAgICAgIHRoaXMub2NjdXBhbnRfdGlwcyAgPSBzdGF0aW9uX2xheS5nZXRDaGlsZEJ5TmFtZShcIm9jY3VwYW50X3RpcHNcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy50aXBzX25vZGUgICAgPSBzdGF0aW9uX2xheS5nZXRDaGlsZEJ5TmFtZShcInRpcHNfbm9kZVwiKVxuICAgICAgICB0aGlzLmhlYWRfbm9kZSAgICAgID0gc3RhdGlvbl9sYXkuZ2V0Q2hpbGRCeU5hbWUoXCJoZWFkX25vZGVcIikgXG4gICAgICAgIHRoaXMudGl0bGVfaW1nICAgICAgPSBzdGF0aW9uX2xheS5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2ltZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKTtcbiAgICBcbiAgICAgICAgdGhpcy5uYW1lICAgICAgICAgICA9IHN0YXRpb25fbGF5LmdldENoaWxkQnlOYW1lKFwibmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLm5hbWVfYmcgICAgICAgID0gc3RhdGlvbl9sYXkuZ2V0Q2hpbGRCeU5hbWUoXCJuYW1lX2JnXCIpO1xuICAgICAgICAvLyBib3Nz5oqA6IO9XG4gICAgICAgIHZhciBib3NzX3BhbmVsICAgID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiYm9zc19wYW5lbFwiKTtcbiAgICAgICAgdmFyIGRlc2NfbGFiZWwgICAgID0gYm9zc19wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImRlc2NfbGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdmFyIGRlc2NfbGFiZWxfMSAgID0gYm9zc19wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImRlc2NfbGFiZWxfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB2YXIgZGVzY19sYWJlbF8yICAgPSBib3NzX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiZGVzY19sYWJlbF8yXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIGRlc2NfbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCJCb3Nz5oqA6IO9XCIpO1xuICAgICAgICBkZXNjX2xhYmVsXzEuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkuLvliqjmioDog71cIik7XG4gICAgICAgIGRlc2NfbGFiZWxfMi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuiiq+WKqOaKgOiDvVwiKTtcblxuICAgICAgICAvLyDkuLvliqjmioDog71zY3JvbGx2aWV3XG4gICAgICAgIHRoaXMuaXRlbV9jb250YWluZXJfMSA9IGJvc3NfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJpdGVtX2NvbnRhaW5lcl8xXCIpLmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKTtcbiAgICAgICAgXG4gICAgICAgIC8vIOiiq+WKqOaKgOiDvXNjcm9sbHZpZXdcbiAgICAgICAgdGhpcy5pdGVtX2NvbnRhaW5lcl8yID0gYm9zc19wYW5lbC5nZXRDaGlsZEJ5TmFtZShcIml0ZW1fY29udGFpbmVyXzJcIikuZ2V0Q2hpbGRCeU5hbWUoXCJjb250ZW50XCIpO1xuXG4gICAgICAgIC8vIOWxnuaAp1xuICAgICAgICB0aGlzLmF0dHJfcGFuZWwgICAgID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiYXR0cl9wYW5lbFwiKVxuICAgICAgICB0aGlzLmFycnRfdGl0bGUgICAgID0gdGhpcy5hdHRyX3BhbmVsLmdldENoaWxkQnlOYW1lKFwidGl0bGVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwO2k8NDtpKyspe1xuICAgICAgICAgICAgdGhpcy5hdHRyX2xhYmVsX2xpc3RbaV0gPSB0aGlzLmF0dHJfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJhdHRyX2xhYmVsXCIrKGkrMSkpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICB0aGlzLmF0dHJfaWNvbl9saXN0W2ldID0gdGhpcy5hdHRyX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiYXR0cl9pY29uXCIrKGkrMSkpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXJydF90aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuelnuS9jeensOWPt+WxnuaAp+WKoOaIkFwiKTtcblxuICAgICAgICAvLyDlpI3pgInmoYZcbiAgICAgICAgdmFyIGJveF9wYW5lbCAgICAgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJib3hfcGFuZWxcIilcbiAgICAgICAgdGhpcy5jaGVja2JveF9saXN0WzBdID0gYm94X3BhbmVsLmdldENoaWxkQnlOYW1lKFwiY2hlY2tib3gxXCIpXG4gICAgICAgIHRoaXMuY2hlY2tib3hfbGlzdFsxXSA9IGJveF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImNoZWNrYm94NVwiKVxuICAgICAgICB0aGlzLmNoZWNrYm94X2xpc3RbMl0gPSBib3hfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja2JveDEwXCIpXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5jaGVja2JveF9saXN0WzBdLmdldENoaWxkQnlOYW1lKFwibmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICBuYW1lLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIui/m+WMliVz5qyhXCIpLHRoaXMuY2hlY2tib3hfY291bnRzWzBdKTtcbiAgICAgICAgbmFtZSA9IHRoaXMuY2hlY2tib3hfbGlzdFsxXS5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgbmFtZS5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLov5vljJYlc+asoVwiKSx0aGlzLmNoZWNrYm94X2NvdW50c1sxXSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLmNoZWNrYm94X2xpc3RbMl0uZ2V0Q2hpbGRCeU5hbWUoXCJuYW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIG5hbWUuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi6L+b5YyWJXPmrKFcIiksdGhpcy5jaGVja2JveF9jb3VudHNbMl0pO1xuICAgICAgICB0aGlzLnNlbGVjdF9jaGVja2JveCA9IDA7XG5cbiAgICAgICAgdGhpcy53YXJuaW5nX3RpcHMgPSBib3hfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXJuaW5nX3RpcHNcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy53YXJuaW5nX3RpcHMuc3RyaW5nICA9IFV0aWxzLlRJMThOKFwiKOmavuW6puWkp+ivt+iwqOaFjilcIik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnRpcHNfbmFtZSA9IHRoaXMubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInRpcHNfbmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmNoYWxsZW5nZV9idG4gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjaGFsbGVuZ2VfYnRuXCIpO1xuXG4gICAgICAgIHZhciBnb3RvX25vZGUgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJnb3RvX25vZGVcIik7XG4gICAgICAgIHRoaXMuZ290b2VfbGFiZWwgPSBVdGlscy5jcmVhdGVSaWNoTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigzNiwgMTQ0LCAzLCAyNTUpLCBjYy52MigwLCAwLjUpLCBjYy52MigwLCAwKSwzMCwxMjUpO1xuICAgICAgICB0aGlzLmdvdG9lX2xhYmVsLmhvcml6b250YWxBbGlnbiA9IGNjLm1hY3JvLlRleHRBbGlnbm1lbnQuTEVGVDtcbiAgICAgICAgdGhpcy5nb3RvZV9sYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCI8dT4lczwvdT5cIiwgVXRpbHMuVEkxOE4oXCLliY3lvoDnq57mioDlnLpcIikpO1xuICAgICAgICBcbiAgICAgICAgZ290b19ub2RlLmFkZENoaWxkKHRoaXMuZ290b2VfbGFiZWwubm9kZSk7XG5cbiAgICAgICAgdmFyIHRpcHNfbm9kZSA9IHRoaXMubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInRpcHNfbm9kZVwiKTtcbiAgICAgICAgdGhpcy50aXBzX2xhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDIyLCBuZXcgY2MuQ29sb3IoMTY5LCA5NSwgMTYsIDI1NSksIGNjLnYyKDAuNSwgMC41KSwgY2MudjIoMCwgMCksMzAsMTI4MCk7XG4gICAgICAgIHRpcHNfbm9kZS5hZGRDaGlsZCh0aGlzLnRpcHNfbGFiZWwubm9kZSk7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5nb3RvZV9sYWJlbC5ub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgQXJlbmFDb250cm9sbGVyID0gcmVxdWlyZShcImFyZW5hX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBBcmVuYUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5yZXF1ZXN0T3BlbkFyZW5XaW5kb3coKSAgIFxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5QcmltdXNDaGFsbGVuZ2VQYW5lbChmYWxzZSk7ICAgICBcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlblByaW11c0NoYWxsZW5nZVBhbmVsKGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMucmVjb3JkX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5fb25DbGlja0NoYWxsZW5nZVJlY29yZEJ0bigpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpO1xuICAgICAgICBcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNoYWxsZW5nZV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2xpY2tDaGFsbGVuZ2VCdG4oKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5jaGVja2JveF9saXN0KXtcbiAgICAgICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5jaGVja2JveF9saXN0W2ldLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2V2ZXJfZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0X2NoZWNrYm94ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RDaGVja0JveCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gdGhpcy5zZXZlcl9kYXRhLm51bSArIHRoaXMuY2hlY2tib3hfY291bnRzW2ldXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEJvc3NTa2lsbChudW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzLGkpLCAxKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvLyAtLSB0aGlzOmFkZEdsb2JhbEV2ZW50KFRhc2tFdmVudC5VcGRhdGVVSVJlZFN0YXR1cywgZnVuY3Rpb24oa2V5LCB2YWx1ZSlcbiAgICAgICAgLy8gLS0gICAgIHRoaXM6dXBkYXRlVUlSZWRTdGF0dXMoa2V5KVxuICAgICAgICAvLyAtLSBlbmQpXG4gICAgfSxcblxuICAgIC8vIOWOu+aMkeaImOWOu1xuICAgIF9vbkNsaWNrQ2hhbGxlbmdlQnRuOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKCF0aGlzLnNldmVyX2RhdGEpcmV0dXJuO1xuICAgICAgICB2YXIgX3NlbmQyMDcwMiA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgbnVtID0gdGhpcy5jaGVja2JveF9jb3VudHNbdGhpcy5zZWxlY3RfY2hlY2tib3hdO1xuICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjIwNzAyKHRoaXMuc2V2ZXJfZGF0YS5wb3MgLG51bSk7XG4gICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgaWYodGhpcy5pc19oYXZlX3RpdGxlKXtcbiAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3coVXRpbHMuVEkxOE4oXCLmgqjlvZPliY3lt7LljaDmnInkuIDkuKrnpZ7kvY3vvIzoi6XmjJHmiJjlhbbku5bnpZ7kvY3miJDlip/vvIzlsIblpLHljrvljp/mnInnpZ7kvY3vvIzmmK/lkKbnu6fnu63mjJHmiJjvvJ9cIiksVXRpbHMuVEkxOE4oXCLnoa7lrppcIiksIF9zZW5kMjA3MDIsVXRpbHMuVEkxOE4oXCLlj5bmtohcIikpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIF9zZW5kMjA3MDIoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmn6XnnIvmjJHmiJjorrDlvZVcbiAgICBfb25DbGlja0NoYWxsZW5nZVJlY29yZEJ0bjpmdW5jdGlvbigpe1xuICAgICAgICBpZighdGhpcy5zZXZlcl9kYXRhKXJldHVybjtcbiAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjIwNzAzKHRoaXMuc2V2ZXJfZGF0YS5wb3MpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoIWRhdGEpcmV0dXJuO1xuICAgICAgICBpZihkYXRhLmxlbmd0aDwyKXJldHVybjtcbiAgICAgICAgdGhpcy5pc19oYXZlX3RpdGxlID0gZGF0YVsxXTtcbiAgICAgICAgdGhpcy5zZXZlcl9kYXRhID0gZGF0YVswXTtcbiAgICAgICAgdGhpcy52YXJfZGF0YSA9IENvbmZpZy5wcmltdXNfZGF0YS5kYXRhX3VwZ3JhZGVbdGhpcy5zZXZlcl9kYXRhLnBvc107XG5cbiAgICAgICAgdmFyIGhvbm9yX2RhdGEgPSBDb25maWcuaG9ub3JfZGF0YS5kYXRhX3RpdGxlW3RoaXMudmFyX2RhdGEuaG9ub3JfaWRdO1xuICAgICAgICBpZihob25vcl9kYXRhICYmIHRoaXMudGl0bGVfaW1nKXtcbiAgICAgICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRIb25vclJlcyhob25vcl9kYXRhLnJlc19pZCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRpdGxlX2ltZyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGl0bGVfaW1nLnNwcml0ZUZyYW1lID0gcmVzT2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy50aXBzX25vZGUgJiYgdGhpcy52YXJfZGF0YSl7XG4gICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSNmZmZmZmY+5bey6L+b5YyWPGNvbG9yPSMxNGZmMzI+JXM8L2NvbG9yPuasoTwvY29sb3I+XCIpLCB0aGlzLnNldmVyX2RhdGEubnVtKVxuICAgICAgICAgICAgdmFyIGxhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiksIGNjLnYyKDAuNSwgMC41KSwgY2MudjIoMCwgMCksMzApO1xuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gc3RyO1xuICAgICAgICAgICAgdGhpcy50aXBzX25vZGUuYWRkQ2hpbGQobGFiZWwubm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnNldmVyX2RhdGEubmFtZSAhPSBudWxsIHx8IHRoaXMuc2V2ZXJfZGF0YS5uYW1lICE9IFwiXCIpe1xuICAgICAgICAgICAgdmFyIHJvbGVWbyA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgICAgICBpZihyb2xlVm8gJiYgdGhpcy5zZXZlcl9kYXRhLnJpZCA9PSByb2xlVm8ucmlkICYmIHRoaXMuc2V2ZXJfZGF0YS5zcnZfaWQgPT0gcm9sZVZvLnNydl9pZCl7XG4gICAgICAgICAgICAgICAgLy8g5piv6Ieq5bexXG4gICAgICAgICAgICAgICAgdGhpcy50aXBzX25hbWUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LljaDpoobnpZ7kvY1cIik7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFsbGVuZ2VfYnRuLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZ290b2VfbGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOabtOaWsOaooeWei1xuICAgICAgICBpZih0aGlzLnZhcl9kYXRhKXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3BpbmUodGhpcy52YXJfZGF0YS5sb29rX2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWktOWDj1xuICAgICAgICB0aGlzLmluaXRIZWFkVWkoKTtcblxuICAgICAgICAvLyBib3Nz5oqA6IO9XG4gICAgICAgIHRoaXMuaW5pdEJvc3NTa2lsbCh0aGlzLnNldmVyX2RhdGEubnVtKTtcbiAgICAgICAgLy8g56ew5Y+35bGe5oCnXG4gICAgICAgIHRoaXMuaW5pdEhvbm9yQXR0cmlidXRlKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RDaGVja0JveCgpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGlwc0xhYmVsKCk7XG4gICAgfSxcblxuICAgIHVwZGF0ZVRpcHNMYWJlbDpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgbXlfZGF0YSA9IEFyZW5hQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0TXlMb29wRGF0YSgpO1xuICAgICAgICBpZih0aGlzLnRpcHNfbGFiZWwgJiYgdGhpcy52YXJfZGF0YSl7XG4gICAgICAgICAgICBpZihteV9kYXRhICYmIG15X2RhdGEucmFuayAmJiBteV9kYXRhLnJhbmsgPiAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRpcHNfbGFiZWwuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5oyR5oiY5p2h5Lu2OuW9k+WJjeernuaKgOWcuuWkhOS6juWJjSVz5ZCNKOaIkeeahOaOkuWQjTo8Y29sb3I9IzI0OTAwMz4lczwvY29sb3I+KVwiKSwgdGhpcy52YXJfZGF0YS5hcmVuYV9yYW5rLCBteV9kYXRhLnJhbmspO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy50aXBzX2xhYmVsLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuaMkeaImOadoeS7tjrlvZPliY3nq57mioDlnLrlpITkuo7liY0lc+WQjSjmiJHnmoTmjpLlkI06PGNvbG9yPSMyNDkwMDM+5pegPC9jb2xvcj4pXCIpLCB0aGlzLnZhcl9kYXRhLmFyZW5hX3JhbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluWktOWDj3VpXG4gICAgaW5pdEhlYWRVaTpmdW5jdGlvbigpe1xuICAgICAgICBpZighdGhpcy5zZXZlcl9kYXRhKXJldHVybjtcbiAgICAgICAgaWYodGhpcy5zZXZlcl9kYXRhLm5hbWUgPT0gbnVsbCB8fCB0aGlzLnNldmVyX2RhdGEubmFtZSA9PSBcIlwiKXtcbiAgICAgICAgICAgIHRoaXMub2NjdXBhbnRfdGlwcy5zdHJpbmcgPSBVdGlscy5USTE4TihcIuiZmuS9jeS7peW+hVwiKTtcbiAgICAgICAgICAgIHRoaXMubmFtZV9iZy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubmFtZS5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8g5aS05YOPXG4gICAgICAgIHRoaXMucGxheV9oZWFkID0gbmV3IFBsYXllckhlYWQoKTsvL2NjLnNpemUoOTYsOTYpXG4gICAgICAgIHRoaXMucGxheV9oZWFkLnNldFBvc2l0aW9uKDAsIDApO1xuICAgICAgICAvLyB0aGlzLnBsYXlfaGVhZC5zZXRTY2FsZSgwLjk1KTtcbiAgICAgICAgaWYodGhpcy5zZXZlcl9kYXRhLmxldil7XG4gICAgICAgICAgICB0aGlzLnBsYXlfaGVhZC5zZXRMZXYodGhpcy5zZXZlcl9kYXRhLmxldik7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMucGxheV9oZWFkLnNldFBhcmVudCh0aGlzLmhlYWRfbm9kZSk7XG4gICAgICAgIHRoaXMucGxheV9oZWFkLnNob3coKTtcbiAgICAgICAgdGhpcy5wbGF5X2hlYWQuc2V0SGVhZFJlcyh0aGlzLnNldmVyX2RhdGEuZmFjZV9pZCk7XG4gICAgICAgIHRoaXMubmFtZS5zdHJpbmcgPSB0aGlzLnNldmVyX2RhdGEubmFtZTtcbiAgICAgICAgdGhpcy5wbGF5X2hlYWQuYWRkQ2FsbEJhY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIEZyaWVuZENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuRnJpZW5kQ2hlY2tQYW5lbCh0cnVlLCB7c3J2X2lkOiB0aGlzLnNldmVyX2RhdGEuc3J2X2lkLCByaWQ6IHRoaXMuc2V2ZXJfZGF0YS5yaWR9KVxuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0sXG5cbiAgICBpbml0SG9ub3JBdHRyaWJ1dGU6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoIXRoaXMudmFyX2RhdGEpcmV0dXJuO1xuICAgICAgICBpZighdGhpcy5hdHRyX2xhYmVsX2xpc3QpcmV0dXJuO1xuICAgICAgICBpZighdGhpcy5hdHRyX2ljb25fbGlzdClyZXR1cm47XG4gICAgICAgIHZhciBob25vcl9kYXRhID0gQ29uZmlnLmhvbm9yX2RhdGEuZGF0YV90aXRsZVt0aGlzLnZhcl9kYXRhLmhvbm9yX2lkXTtcbiAgICAgICAgaWYoaG9ub3JfZGF0YSl7XG4gICAgICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5hdHRyX2xhYmVsX2xpc3Qpe1xuICAgICAgICAgICAgICAgIHZhciBpY29uID0gdGhpcy5hdHRyX2ljb25fbGlzdFtpXTtcbiAgICAgICAgICAgICAgICBpZihob25vcl9kYXRhLmF0dHJbaV0pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJfbGFiZWxfbGlzdFtpXS5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHJyX25hbWUgPSBDb25maWcuYXR0cl9kYXRhLmRhdGFfa2V5X3RvX25hbWVbaG9ub3JfZGF0YS5hdHRyW2ldWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgaWYoUGFydG5lckNhbGN1bGF0ZS5pc1Nob3dQZXJCeVN0cihob25vcl9kYXRhLmF0dHJbaV1bMF0pKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGhvbm9yX2RhdGEuYXR0cltpXVsxXS8xMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cl9sYWJlbF9saXN0W2ldLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIiVzICsgJXMlXCIsIFV0aWxzLlRJMThOKGF0cnJfbmFtZSksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJfbGFiZWxfbGlzdFtpXS5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCIlcyArICVzIFwiLCBVdGlscy5USTE4TihhdHJyX25hbWUpLCBob25vcl9kYXRhLmF0dHJbaV1bMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGljb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbi5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0QXR0ckljb25CeVN0cihob25vcl9kYXRhLmF0dHJbaV1bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKHJlc19pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24oaWNvbixyZXNPYmplY3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGljb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uLnNwcml0ZUZyYW1lID0gcmVzT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmJpbmQodGhpcyxpY29uKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyX2xhYmVsX2xpc3RbaV0ubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYoaWNvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5pdEJvc3NTa2lsbDpmdW5jdGlvbihudW0pe1xuICAgICAgICBpZih0aGlzLnVuaXRfZGF0YV9saXN0ID09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy51bml0X2RhdGFfbGlzdCA9IFtdO1xuICAgICAgICAgICAgZm9yKHZhciBpIGluIENvbmZpZy5wcmltdXNfZGF0YS5kYXRhX3VuaXRkYXRhKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNldmVyX2RhdGEucG9zID09IENvbmZpZy5wcmltdXNfZGF0YS5kYXRhX3VuaXRkYXRhW2ldLnBvcyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pdF9kYXRhX2xpc3QucHVzaChDb25maWcucHJpbXVzX2RhdGEuZGF0YV91bml0ZGF0YVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBjdXJfZGF0YSA9IG51bGw7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLnVuaXRfZGF0YV9saXN0Lmxlbmd0aDtcbiAgICAgICAgZm9yKHZhciBqIGluIHRoaXMudW5pdF9kYXRhX2xpc3Qpe1xuICAgICAgICAgICAgaWYobnVtID49IHRoaXMudW5pdF9kYXRhX2xpc3Rbal0ubWluICYmIG51bSA8PSB0aGlzLnVuaXRfZGF0YV9saXN0W2pdLm1heCl7XG4gICAgICAgICAgICAgICAgY3VyX2RhdGEgPSB0aGlzLnVuaXRfZGF0YV9saXN0W2pdO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihqKzEgPT0gbGVuZ3RoKXtcbiAgICAgICAgICAgICAgICBjdXJfZGF0YSA9IHRoaXMudW5pdF9kYXRhX2xpc3Rbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihjdXJfZGF0YSA9PSBudWxsKXtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuY3VyX3VuaXRfZGF0YSAmJiB0aGlzLmN1cl91bml0X2RhdGEubWluID09IGN1cl9kYXRhLm1pbil7XG4gICAgICAgICAgICAvLyDlkIzkuIDkuKrlr7nosaEu5LiN55So5Yid5aeL5YyWXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cl91bml0X2RhdGEgPSBjdXJfZGF0YTtcbiAgICAgICAgdmFyIGFjdF9za2lsbCA9IGN1cl9kYXRhLmFjdF9za2lsbDtcbiAgICAgICAgdmFyIHBhc3NpdmVfc2tpbGwgPSBjdXJfZGF0YS5wYXNzaXZlX3NraWxsO1xuXG4gICAgICAgIC8vIOS4u+WKqOaKgOiDvVxuICAgICAgICB2YXIgaXRlbV93aWR0aCA9IHRoaXMuc2tpbGxfd2lkdGggKiBhY3Rfc2tpbGwubGVuZ3RoO1xuICAgICAgICB2YXIgbWF4X3dpZHRoID0gTWF0aC5tYXgodGhpcy5pdGVtX2NvbnRhaW5lcl8xLmdldENvbnRlbnRTaXplKCkud2lkdGgsIGl0ZW1fd2lkdGgpXG4gICAgICAgIHRoaXMuaXRlbV9jb250YWluZXJfMS5zZXRDb250ZW50U2l6ZShjYy5zaXplKG1heF93aWR0aCwgdGhpcy5pdGVtX2NvbnRhaW5lcl8xLmdldENvbnRlbnRTaXplKCkuaGVpZ2h0KSk7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIGFjdF9za2lsbCl7XG4gICAgICAgICAgICB2YXIgdm8gPSBnZGF0YShcInNraWxsX2RhdGFcIixcImRhdGFfZ2V0X3NraWxsXCIsYWN0X3NraWxsW2ldKTtcbiAgICAgICAgICAgIGlmKHZvKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmFjdF9za2lsbF9pdGVtX2xpc3RbaV0gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0X3NraWxsX2l0ZW1fbGlzdFtpXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdF9za2lsbF9pdGVtX2xpc3RbaV0gPSB0aGlzLnVwZGF0ZVNraWxsSXRlbSh2bywgdGhpcy5hY3Rfc2tpbGxfaXRlbV9saXN0W2ldLCB0cnVlKSBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX2NvbnRhaW5lcl8xLmFkZENoaWxkKHRoaXMuYWN0X3NraWxsX2l0ZW1fbGlzdFtpXS5jb24pO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNraWxsSXRlbSh2bywgdGhpcy5hY3Rfc2tpbGxfaXRlbV9saXN0W2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rfc2tpbGxfaXRlbV9saXN0W2ldLmNvbi5zZXRQb3NpdGlvbigodGhpcy5za2lsbF93aWR0aCArIDUpICogaSt0aGlzLnNraWxsX3dpZHRoLzIsIHRoaXMuc2tpbGxfd2lkdGgvMik7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjYy5qcy5mb3JtYXRTdHIoXCLmioDog73ooahpZDogJXMg5rKh5Y+R546wXCIsYWN0X3NraWxsW2ldLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOiiq+WKqOaKgOiDvVxuICAgICAgICB2YXIgaXRlbV93aWR0aCA9IHRoaXMuc2tpbGxfd2lkdGggKiBwYXNzaXZlX3NraWxsLmxlbmd0aDtcbiAgICAgICAgdmFyIG1heF93aWR0aCA9IE1hdGgubWF4KHRoaXMuaXRlbV9jb250YWluZXJfMi5nZXRDb250ZW50U2l6ZSgpLndpZHRoLCBpdGVtX3dpZHRoKTtcbiAgICAgICAgdGhpcy5pdGVtX2NvbnRhaW5lcl8yLnNldENvbnRlbnRTaXplKGNjLnNpemUobWF4X3dpZHRoLCB0aGlzLml0ZW1fY29udGFpbmVyXzIuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQpKTtcblxuICAgICAgICBmb3IodmFyIGkgaW4gcGFzc2l2ZV9za2lsbCl7XG4gICAgICAgICAgICB2YXIgdm8gPSBnZGF0YShcInNraWxsX2RhdGFcIixcImRhdGFfZ2V0X3NraWxsXCIscGFzc2l2ZV9za2lsbFtpXSk7XG4gICAgICAgICAgICBpZih2byl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5wYXNzaXZlX3NraWxsX2l0ZW1fbGlzdFtpXSA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzaXZlX3NraWxsX2l0ZW1fbGlzdFtpXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3NpdmVfc2tpbGxfaXRlbV9saXN0W2ldID0gdGhpcy51cGRhdGVTa2lsbEl0ZW0odm8sIHRoaXMucGFzc2l2ZV9za2lsbF9pdGVtX2xpc3RbaV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX2NvbnRhaW5lcl8yLmFkZENoaWxkKHRoaXMucGFzc2l2ZV9za2lsbF9pdGVtX2xpc3RbaV0uY29uKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTa2lsbEl0ZW0odm8sIHRoaXMucGFzc2l2ZV9za2lsbF9pdGVtX2xpc3RbaV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFzc2l2ZV9za2lsbF9pdGVtX2xpc3RbaV0uY29uLnNldFBvc2l0aW9uKCh0aGlzLnNraWxsX3dpZHRoICsgNSkgKiBpK3RoaXMuc2tpbGxfd2lkdGgvMix0aGlzLnNraWxsX3dpZHRoLzIpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2MuanMuZm9ybWF0U3RyKFwi5oqA6IO96KGoaWQ6ICVzIOayoeWPkeeOsFwiLHBhc3NpdmVfc2tpbGxbaV0udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZVNwaW5lOmZ1bmN0aW9uKGxvb2tfaWQpe1xuICAgICAgICBpZighbG9va19pZClyZXR1cm47XG4gICAgICAgIHZhciBmdW4gPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYoIXRoaXMuc3BpbmUpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3BpbmUgPSBuZXcgQmFzZVJvbGUoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNwaW5lOnNldENhc2NhZGUodHJ1ZSlcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5lLnNldFBhcmVudCh0aGlzLm1vZGVfbm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGluZS5ub2RlLnNldFBvc2l0aW9uKDAsNzYpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BpbmUubm9kZS5zZXRBbmNob3JQb2ludChjYy52MigwLjUsMC41KSk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zcGluZTpzZXRPcGFjaXR5KDApXG4gICAgICAgICAgICAgICAgLy8gdmFyIGFjdGlvbiA9IGNjLmZhZGVJbigwLjIpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc3BpbmUucnVuQWN0aW9uKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGluZS5zZXREYXRhKEJhc2VSb2xlLnR5cGUucm9sZSwgbG9va19pZCwgUGxheWVyQWN0aW9uLnNob3csIHRydWUsMC43NSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIGlmKHRoaXMuc3BpbmUpe1xuICAgICAgICAgICAgLy8gdGhpcy5zcGluZTpzZXRDYXNjYWRlKHRydWUpXG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gY2MuZmFkZU91dCgwLjIpO1xuICAgICAgICAgICAgdGhpcy5zcGluZS5ub2RlLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShhY3Rpb24sIGNjLkNhbGxGdW5jKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGluZS5ub2RlLnN0b3BBbGxBY3Rpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGluZS5kZWxldGVNZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BpbmUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZ1bigpO1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KSkpXG4gICAgICAgICAgICBcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmdW4oKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBpc19hY3Qg5piv5ZCm5Li75Yqo5oqA6IO9XG4gICAgdXBkYXRlU2tpbGxJdGVtOmZ1bmN0aW9uKGNvbmZpZywgc2tpbGxfaXRlbSwgaXNfYWN0KXtcbiAgICAgICAgdmFyIHNpemUgPSBjYy5zaXplKHRoaXMuc2tpbGxfd2lkdGgsdGhpcy5za2lsbF93aWR0aCk7XG4gICAgICAgIHZhciBza2lsbF9zaXplID0gY2Muc2l6ZSh0aGlzLnNraWxsX3dpZHRoIC0gNCAsdGhpcy5za2lsbF93aWR0aCAtIDQpO1xuICAgIFxuICAgICAgICBza2lsbF9pdGVtLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgaWYoc2tpbGxfaXRlbS5jb24gPT0gbnVsbCl7XG4gICAgICAgICAgICB2YXIgY29uID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgICAgIGNvbi5zZXRDb250ZW50U2l6ZShzaXplKTtcbiAgICAgICAgICAgIGNvbi5zY2FsZSA9IDAuNzU7XG5cbiAgICAgICAgICAgIFV0aWxzLm9uVG91Y2hFbmQoY29uLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYoc2tpbGxfaXRlbS5jb25maWcpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgVGlwc0NvbnRyb2xsZXIgPSByZXF1aXJlKFwidGlwc19jb250cm9sbGVyXCIpXG4gICAgICAgICAgICAgICAgICAgIFRpcHNDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2hvd1NraWxsVGlwcyhza2lsbF9pdGVtLmNvbmZpZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksIDEpO1xuICAgICAgICAgICAgc2tpbGxfaXRlbS5jb24gPSBjb247XG4gICAgICAgICAgICAvLyDog4zmma9cbiAgICAgICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRDb21tb25JY29tUGF0aChcImNvbW1vbl8xMDA1XCIpO1xuICAgICAgICAgICAgdmFyIGJnID0gVXRpbHMuY3JlYXRlSW1hZ2UoY29uLG51bGwsMCwwLGNjLnYyKDAuNSwgMC41KSx0cnVlLCAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uKGJnLHJlc09iamVjdCl7XG4gICAgICAgICAgICAgICAgaWYoYmcpe1xuICAgICAgICAgICAgICAgICAgICBiZy5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMsYmcpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDmioDog71pY29uIFxuICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJza2lsbGljb25cIiwgY29uZmlnLmljb24pO1xuICAgICAgICBpZihza2lsbF9pdGVtLmljb24gPT0gbnVsbCl7XG4gICAgICAgICAgICBza2lsbF9pdGVtLmljb24gPSBVdGlscy5jcmVhdGVJbWFnZShza2lsbF9pdGVtLmNvbixudWxsLDAsMCxjYy52MigwLjUsIDAuNSksZmFsc2UsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uKHJlc09iamVjdCl7XG4gICAgICAgICAgICAgICAgaWYoc2tpbGxfaXRlbSAmJiBza2lsbF9pdGVtLmljb24pe1xuICAgICAgICAgICAgICAgICAgICBza2lsbF9pdGVtLmljb24uc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uKHJlc09iamVjdCl7XG4gICAgICAgICAgICAgICAgaWYoc2tpbGxfaXRlbSAmJiBza2lsbF9pdGVtLmljb24pe1xuICAgICAgICAgICAgICAgICAgICBza2lsbF9pdGVtLmljb24uc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICAvLyDmioDog73nrYnnuqdcbiAgICAgICAgaWYoc2tpbGxfaXRlbS5sZXZfbGFiZWwgPT0gbnVsbCl7XG4gICAgICAgICAgICBza2lsbF9pdGVtLmxldl9sYWJlbCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI2LG5ldyBjYy5Db2xvcigweGZmLDB4ZmYsMHhmZiwweGZmKSxuZXcgY2MuQ29sb3IoMHgwMCwweDAwLDB4MDAsMHhmZiksdGhpcy5za2lsbF93aWR0aC8yKzEwLC10aGlzLnNraWxsX3dpZHRoLzItMjAsY29uZmlnLmxldmVsLnRvU3RyaW5nKCksc2tpbGxfaXRlbS5jb24sMixjYy52MigxLCAwKSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2tpbGxfaXRlbS5sZXZfbGFiZWwuc3RyaW5nID0gY29uZmlnLmxldmVsLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNraWxsX2l0ZW07XG4gICAgfSxcblxuICAgIC8vIOiuvue9rumAieaLqeahhlxuICAgIHNldFNlbGVjdENoZWNrQm94OmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKCF0aGlzLnNlbGVjdF9jaGVja2JveClyZXR1cm47XG4gICAgICAgIGlmKCF0aGlzLmNoZWNrYm94X2xpc3QpcmV0dXJuO1xuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5jaGVja2JveF9saXN0KXtcbiAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0X2NoZWNrYm94ID09IGkpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3hfbGlzdFtpXS5nZXRDb21wb25lbnQoY2MuVG9nZ2xlKS5jaGVjaygpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveF9saXN0W2ldLmdldENvbXBvbmVudChjYy5Ub2dnbGUpLnVuY2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuc3BpbmUpe1xuICAgICAgICAgICAgdGhpcy5zcGluZS5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5zcGluZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnBsYXlfaGVhZCl7XG4gICAgICAgICAgICB0aGlzLnBsYXlfaGVhZC5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5wbGF5X2hlYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5vcGVuUHJpbXVzQ2hhbGxlbmdlUGFuZWwoZmFsc2UpO1xuICAgIH0sXG59KSJdfQ==
|