|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/rank/view/rank_item.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, 'c3d6eKseSVOEJk4l3Y/qbbw', 'rank_item');
|
// Scripts/mod/rank/view/rank_item.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: @syg.com(必填, 创建模块的人员)
|
// @description:
|
// 排行榜单元项
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var RankController = require("rank_controller");
|
|
var RankConstant = require("rank_constant");
|
|
var HeroVo = require("hero_vo");
|
|
var RoleController = require("role_controller");
|
|
var PlayerHead = require("playerhead");
|
|
var TimeTool = require("timetool");
|
|
var RankItem = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("rank", "rank_item");
|
this.ctrl = RankController.getInstance();
|
this.data = null;
|
this.width = 600;
|
this.height = 120;
|
this.index = arguments[0] || 1;
|
this.rank_type = RankConstant.RankType.drama;
|
this.rank_num = 0;
|
this.item_list = {};
|
this.node_list = []; //放入的是node
|
},
|
initPanel: function initPanel() {
|
this.background = this.seekChild("bg");
|
this.rank_icon = this.seekChild("rank_icon", cc.Sprite);
|
this.rank_index = this.seekChild("rank_index", cc.Label);
|
this.other_panel = this.seekChild("other_panel");
|
this.select = this.seekChild("select");
|
this.select.active = false;
|
this._btnPraise = this.seekChild("btnPraise");
|
this._btnPraise_btn = this.seekChild("btnPraise", cc.Button);
|
this._praise = this.seekChild(this._btnPraise, "img", cc.Sprite);
|
this._labelPraise = this.seekChild(this._btnPraise, "label", cc.Label);
|
this._btnPraise.active = false;
|
},
|
clickHandler: function clickHandler() {
|
if (this.call_fun) this.call_fun(this.vo);
|
},
|
setTouchFunc: function setTouchFunc(value) {
|
this.call_fun = value;
|
},
|
registerEvent: function registerEvent() {
|
this.background.on(cc.Node.EventType.TOUCH_START, function (event) {
|
var touches = event.getTouches();
|
this.touch_began = touches[0].getLocation();
|
}, this);
|
this.background.on(cc.Node.EventType.TOUCH_END, function (event) {
|
var touches = event.getTouches();
|
this.touch_end = touches[0].getLocation();
|
var is_click = true;
|
|
if (this.touch_began != null) {
|
is_click = Math.abs(this.touch_end.x - this.touch_began.x) <= 20 && Math.abs(this.touch_end.y - this.touch_began.y) <= 20;
|
}
|
|
if (is_click == true) {
|
Utils.playButtonSound(ButtonSound.Normal);
|
|
if (this.rank_type != RankConstant.RankType.union) {
|
this.openChatMessage();
|
}
|
}
|
}, this);
|
},
|
setData: function setData(data) {
|
this.data = data;
|
if (this.root_wnd) this.onShow();
|
},
|
onShow: function onShow() {
|
if (this.data == null) return;
|
this.index = this.data.idx || this.data.rank || 1;
|
this.rank_index.string = this.index;
|
|
if (this.index >= 1 && this.index <= 3) {
|
this.rank_index.node.active = false;
|
this.rank_icon.node.active = true;
|
this.rank_icon.node.setScale(0.7);
|
this.loadRes(PathTool.getCommonIcomPath("common_200" + this.index), function (sf_obj) {
|
this.rank_icon.spriteFrame = sf_obj;
|
}.bind(this));
|
} else {
|
this.rank_index.node.active = true;
|
this.rank_icon.node.active = false;
|
}
|
|
this.updateDataByRankType();
|
},
|
setExtendData: function setExtendData(data) {
|
if (!data) return;
|
this.rank_type = data.rank_type || RankConstant.RankType.drama;
|
this.is_cluster = data.is_cluster || false;
|
},
|
updateDataByRankType: function updateDataByRankType() {
|
if (!this.data) return;
|
|
for (var i in this.item_list) {
|
this.item_list[i].setVisible(false);
|
}
|
|
this.other_panel.removeAllChildren();
|
var role_name = this.data.name;
|
|
if (this.is_cluster == true) {
|
role_name = Utils.transformNameByServ(this.data.name, this.data.srv_id);
|
}
|
|
if (this.rank_type != RankConstant.RankType.union) {
|
this.player_head = this.createPlayerHead(105, 60);
|
var face_id = this.data.face_id || this.data.face;
|
var avatar_bid = this.data.avatar_bid;
|
this.player_head.setFrameRes(avatar_bid);
|
this.player_head.setHeadRes(face_id);
|
this.player_head.setLev(this.data.lev);
|
} //生成的节点之类的都push进 this.node_list这里,统一destroy
|
|
|
if (this.rank_type == RankConstant.RankType.power || this.rank_type == RankConstant.RankType.action_power) {
|
//名字
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 198, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
this.node_list.push(label);
|
label.string = role_name; //战力
|
|
var label = Utils.createRichLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), cc.v2(0.5, 0.5), cc.v2(480, this.height / 2), 0, 500);
|
this.node_list.push(label);
|
this.other_panel.addChild(label.node);
|
var power = this.data.val1 || 0;
|
var res = PathTool.getCommonIcomPath('common_90002');
|
label.string = cc.js.formatStr("<img src='%s' /> %s", "common_90002", power);
|
this.loadRes(res, function (label, resObject) {
|
label.addSpriteFrame(resObject);
|
}.bind(this, label));
|
} else if (this.rank_type == RankConstant.RankType.union) {
|
var step = this.data.step || 0;
|
step = Math.max(step, 1);
|
step = Math.min(step, 11); //名字
|
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 204, 80, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(label);
|
label.string = role_name; //宗主名字
|
|
var label = Utils.createLabel(20, new cc.Color(0xa9, 0x5f, 0x0f, 0xff), null, 204, 40, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(label);
|
label.string = Utils.TI18N("会长:") + (this.data.leader_name || ""); //等级
|
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 342, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(label);
|
label.string = this.data.lev || 313; //人数
|
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 425, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(label);
|
var num1 = this.data.members_num || 0;
|
var num2 = this.data.members_max || 0;
|
label.string = cc.js.formatStr("%s/%s", num1, num2); //战力
|
|
var label = Utils.createRichLabel(24, new cc.Color(0xa9, 0x5f, 0x0f, 0xff), cc.v2(0.5, 0.5), cc.v2(525, this.height / 2), 0, 500);
|
this.node_list.push(label);
|
this.other_panel.addChild(label.node);
|
label.string = String(this.data.power) || 0;
|
} else if (this.rank_type == RankConstant.RankType.union_boss) {
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 210, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
this.node_list.push(label);
|
label.string = role_name; //dps
|
|
var label = Utils.createRichLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), cc.v2(0.5, 0.5), cc.v2(505, this.height / 2 + 25), 0, 500);
|
this.node_list.push(label);
|
this.other_panel.addChild(label.node);
|
var all_dps = this.data.all_dps || 0;
|
label.string = String(all_dps); //增加点赞功能
|
|
this.addPraise(this.data);
|
} else if (this.rank_type == RankConstant.RankType.tower || this.rank_type == RankConstant.RankType.action_tower) {
|
// 名字
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 210, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
this.node_list.push(label);
|
label.string = role_name; // 层数
|
|
var label = Utils.createLabel(24, new cc.Color(0xa9, 0x5f, 0x0f, 0xff), null, 405, 61, "", this.other_panel, 0, cc.v2(0, 0.5));
|
this.node_list.push(label);
|
label.string = this.data.val1 || 0; // 通关时间
|
|
var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 500, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
this.node_list.push(label);
|
var num = this.data.val2 || 0;
|
label.string = TimeTool.getTimeMs(num, true);
|
} else if (this.rank_type == RankConstant.RankType.action_star || this.rank_type == RankConstant.RankType.star_power || this.rank_type == RankConstant.RankType.hallows_power || this.rank_type == RankConstant.RankType.treasure || this.rank_type == RankConstant.RankType.colors_tone || this.rank_type == RankConstant.RankType.gemstone || this.rank_type == RankConstant.RankType.pointglod || this.rank_type == RankConstant.RankType.speed_fight || this.rank_type == RankConstant.RankType.voyage || this.rank_type == RankConstant.RankType.hero_expedit) {
|
// --名字
|
var _name = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 198, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
|
this.node_list.push(_name);
|
_name.string = role_name; // --层数
|
|
var _num = Utils.createLabel(24, new cc.Color(169, 95, 15, 255), null, 455, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
|
this.node_list.push(_num);
|
_num.string = this.data.val1 || 0;
|
} else if (this.rank_type == RankConstant.RankType.guild_war) {
|
// --名字
|
var name = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 198, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
this.node_list.push(name);
|
name.string = role_name; //星数
|
|
var label = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 402, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(label);
|
label.string = this.data.star || 0; //战绩
|
|
var score = Utils.createLabel(24, new cc.Color(169, 95, 15, 255), null, 525, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(score);
|
score.string = this.data.war_score || 0;
|
} else if (this.rank_type == RankConstant.RankType.drama || this.rank_type == RankConstant.RankType.action_drama) {
|
// --名字
|
var _name2 = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 198, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
|
this.node_list.push(_name2);
|
_name2.string = role_name; // --装备评分
|
|
var _label = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 495, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
|
this.node_list.push(_label);
|
var config = gdata("dungeon_data", "data_drama_dungeon_info", this.data.val1);
|
|
if (config) {
|
var str = config.name;
|
_label.string = str;
|
}
|
} else if (this.rank_type == RankConstant.RankType.arena || this.rank_type == RankConstant.RankType.action_arena) {
|
// --名字
|
var _name3 = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 198, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
|
this.node_list.push(_name3);
|
_name3.string = role_name; // 装备评分
|
|
var label = Utils.createRichLabel(24, new cc.Color(0xa9, 0x5f, 0x0f, 0xff), cc.v2(0.5, 0.5), cc.v2(480, this.height / 2), 0, 500);
|
this.node_list.push(label);
|
this.other_panel.addChild(label.node);
|
var score = this.data.score || this.data.val1 || 0;
|
var res = PathTool.getItemRes('8');
|
label.string = cc.js.formatStr("<img src='%s' /> %s", "8", score);
|
this.loadRes(res, function (label, resObject) {
|
label.addSpriteFrame(resObject);
|
}.bind(this, label));
|
} else if (this.rank_type == RankConstant.RankType.endless || this.rank_type == RankConstant.RankType.endless_old || this.rank_type == RankConstant.RankType.adventure || this.rank_type == RankConstant.RankType.adventure_muster) {
|
// --名字
|
var _name4 = Utils.createLabel(24, new cc.Color(104, 69, 42, 255), null, 198, this.height / 2, "", this.other_panel, 0, cc.v2(0, 0.5));
|
|
this.node_list.push(_name4);
|
_name4.string = role_name; // --层数
|
|
var _num2 = Utils.createLabel(24, new cc.Color(0xa9, 0x5f, 0x0f, 0xff), null, 403, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
|
this.node_list.push(_num2);
|
_num2.string = this.data.val1 || 0; //战力
|
|
var label = Utils.createLabel(24, new cc.Color(0xa9, 0x5f, 0x0f, 0xff), null, 535, this.height / 2, "", this.other_panel, 0, cc.v2(0.5, 0.5));
|
this.node_list.push(label);
|
label.string = this.data.val2 || 0;
|
}
|
},
|
//个人伤害排行------------start
|
addCallBack: function addCallBack(call_back) {
|
this.call_back = call_back;
|
},
|
//增加点赞功能
|
addPraise: function addPraise(data) {
|
if (!this._btnPraise.active) this._btnPraise.active = true;
|
Utils.setGreyButton(this._btnPraise_btn, false);
|
|
this._praise.setState(cc.Sprite.State.NORMAL);
|
|
if (this.index <= 3) {
|
this._btnPraise.on(cc.Node.EventType.TOUCH_END, function () {
|
Utils.playButtonSound(1);
|
if (this.index > 3) return;
|
|
if (this.call_back != null) {
|
this.call_back(this);
|
}
|
|
RoleController.getInstance().sender10316(data.r_rid, data.r_srvid, this.index, 2);
|
}, this);
|
} else {
|
this._praise.setState(cc.Sprite.State.GRAY);
|
|
Utils.setGreyButton(this._btnPraise_btn, true);
|
}
|
|
this._labelPraise.string = data.worship; //不可膜拜
|
|
if (data.worship_status == 1) {
|
this._praise.setState(cc.Sprite.State.GRAY);
|
|
Utils.setGreyButton(this._btnPraise_btn, true);
|
}
|
},
|
updateWorshipStatus: function updateWorshipStatus() {
|
if (this.data != null) {
|
this.data.worship = this.data.worship + 1;
|
this.data.worship_status = 1;
|
this._labelPraise.string = this.data.worship;
|
|
this._praise.setState(cc.Sprite.State.GRAY);
|
|
Utils.setGreyButton(this._btnPraise_btn, true);
|
}
|
},
|
//个人伤害排行------------end
|
//打开玩家信息
|
openChatMessage: function openChatMessage() {
|
var roleVo = RoleController.getInstance().getRoleVo();
|
var rid = this.data.rid || this.data.r_rid;
|
var srv_id = this.data.srv_id || this.data.r_srvid;
|
|
if (rid && srv_id && roleVo.rid == rid && roleVo.srv_id == srv_id) {
|
message(Utils.TI18N("你不认识你自己了么?"));
|
return;
|
}
|
|
if (this.data.is_robot && this.data.is_robot == 1) {
|
message(Utils.TI18N("神秘人太高冷,不给查看"));
|
return;
|
}
|
|
if (this.data) {
|
var vo = {
|
rid: rid,
|
srv_id: srv_id
|
};
|
|
require("chat_controller").getInstance().openFriendInfo(vo, cc.v2(0, 0));
|
}
|
},
|
//创建一个英雄数据
|
createPartnerVo: function createPartnerVo() {
|
var vo = new HeroVo();
|
var data = {
|
partner_id: this.data.pid,
|
bid: this.data.pbid,
|
lev: this.data.plev,
|
star: this.data.pstar
|
};
|
vo.updateHeroVo(data);
|
return vo;
|
},
|
//创建玩家头像
|
createPlayerHead: function createPlayerHead(x, y) {
|
x = x + 43;
|
var player_head = new PlayerHead();
|
player_head.setParent(this.other_panel);
|
player_head.show();
|
player_head.setScale(0.8);
|
player_head.setPosition(x, y);
|
return player_head;
|
},
|
setSelected: function setSelected(bool) {
|
this.select.active = bool;
|
|
if (bool == true) {
|
var fadein = cc.fadeIn(0.7);
|
var fadeout = cc.fadeOut(0.7);
|
this.select.runAction(cc.repeatForever(cc.sequence(fadein, fadeout)));
|
} else {
|
this.select.stopAllActions();
|
}
|
},
|
isHaveData: function isHaveData() {
|
if (this.vo) {
|
return true;
|
}
|
|
return false;
|
},
|
reset: function reset() {
|
if (this.num) this.num.setVisible(false);
|
this.vo = null;
|
},
|
getData: function getData() {
|
return this.vo;
|
},
|
onDelete: function onDelete() {
|
if (this.item_list) {
|
for (var i in this.item_list) {
|
var v = this.item_list[i];
|
v.deleteMe();
|
v = null;
|
}
|
|
this.item_list = null;
|
}
|
|
if (this.node_list) {
|
for (var i in this.node_list) {
|
var v = this.node_list[i];
|
|
if (v instanceof cc.Node) {
|
v.destroy();
|
v = null;
|
} else {
|
v.node.destroy();
|
v = null;
|
}
|
}
|
|
this.node_list = null;
|
}
|
|
if (this.player_head) {
|
this.player_head.deleteMe();
|
this.player_head = null;
|
}
|
}
|
});
|
module.exports = RankItem;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyYW5rXFx2aWV3XFxyYW5rX2l0ZW0uanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiUmFua0NvbnRyb2xsZXIiLCJSYW5rQ29uc3RhbnQiLCJIZXJvVm8iLCJSb2xlQ29udHJvbGxlciIsIlBsYXllckhlYWQiLCJUaW1lVG9vbCIsIlJhbmtJdGVtIiwiY2MiLCJDbGFzcyIsIkJhc2VQYW5lbCIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsImN0cmwiLCJnZXRJbnN0YW5jZSIsImRhdGEiLCJ3aWR0aCIsImhlaWdodCIsImluZGV4IiwiYXJndW1lbnRzIiwicmFua190eXBlIiwiUmFua1R5cGUiLCJkcmFtYSIsInJhbmtfbnVtIiwiaXRlbV9saXN0Iiwibm9kZV9saXN0IiwiaW5pdFBhbmVsIiwiYmFja2dyb3VuZCIsInNlZWtDaGlsZCIsInJhbmtfaWNvbiIsIlNwcml0ZSIsInJhbmtfaW5kZXgiLCJMYWJlbCIsIm90aGVyX3BhbmVsIiwic2VsZWN0IiwiYWN0aXZlIiwiX2J0blByYWlzZSIsIl9idG5QcmFpc2VfYnRuIiwiQnV0dG9uIiwiX3ByYWlzZSIsIl9sYWJlbFByYWlzZSIsImNsaWNrSGFuZGxlciIsImNhbGxfZnVuIiwidm8iLCJzZXRUb3VjaEZ1bmMiLCJ2YWx1ZSIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIk5vZGUiLCJFdmVudFR5cGUiLCJUT1VDSF9TVEFSVCIsImV2ZW50IiwidG91Y2hlcyIsImdldFRvdWNoZXMiLCJ0b3VjaF9iZWdhbiIsImdldExvY2F0aW9uIiwiVE9VQ0hfRU5EIiwidG91Y2hfZW5kIiwiaXNfY2xpY2siLCJNYXRoIiwiYWJzIiwieCIsInkiLCJVdGlscyIsInBsYXlCdXR0b25Tb3VuZCIsIkJ1dHRvblNvdW5kIiwiTm9ybWFsIiwidW5pb24iLCJvcGVuQ2hhdE1lc3NhZ2UiLCJzZXREYXRhIiwicm9vdF93bmQiLCJvblNob3ciLCJpZHgiLCJyYW5rIiwic3RyaW5nIiwibm9kZSIsInNldFNjYWxlIiwibG9hZFJlcyIsImdldENvbW1vbkljb21QYXRoIiwic2Zfb2JqIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwidXBkYXRlRGF0YUJ5UmFua1R5cGUiLCJzZXRFeHRlbmREYXRhIiwiaXNfY2x1c3RlciIsImkiLCJzZXRWaXNpYmxlIiwicmVtb3ZlQWxsQ2hpbGRyZW4iLCJyb2xlX25hbWUiLCJuYW1lIiwidHJhbnNmb3JtTmFtZUJ5U2VydiIsInNydl9pZCIsInBsYXllcl9oZWFkIiwiY3JlYXRlUGxheWVySGVhZCIsImZhY2VfaWQiLCJmYWNlIiwiYXZhdGFyX2JpZCIsInNldEZyYW1lUmVzIiwic2V0SGVhZFJlcyIsInNldExldiIsImxldiIsInBvd2VyIiwiYWN0aW9uX3Bvd2VyIiwibGFiZWwiLCJjcmVhdGVMYWJlbCIsIkNvbG9yIiwidjIiLCJwdXNoIiwiY3JlYXRlUmljaExhYmVsIiwiYWRkQ2hpbGQiLCJ2YWwxIiwicmVzIiwianMiLCJmb3JtYXRTdHIiLCJyZXNPYmplY3QiLCJhZGRTcHJpdGVGcmFtZSIsInN0ZXAiLCJtYXgiLCJtaW4iLCJUSTE4TiIsImxlYWRlcl9uYW1lIiwibnVtMSIsIm1lbWJlcnNfbnVtIiwibnVtMiIsIm1lbWJlcnNfbWF4IiwiU3RyaW5nIiwidW5pb25fYm9zcyIsImFsbF9kcHMiLCJhZGRQcmFpc2UiLCJ0b3dlciIsImFjdGlvbl90b3dlciIsIm51bSIsInZhbDIiLCJnZXRUaW1lTXMiLCJhY3Rpb25fc3RhciIsInN0YXJfcG93ZXIiLCJoYWxsb3dzX3Bvd2VyIiwidHJlYXN1cmUiLCJjb2xvcnNfdG9uZSIsImdlbXN0b25lIiwicG9pbnRnbG9kIiwic3BlZWRfZmlnaHQiLCJ2b3lhZ2UiLCJoZXJvX2V4cGVkaXQiLCJndWlsZF93YXIiLCJzdGFyIiwic2NvcmUiLCJ3YXJfc2NvcmUiLCJhY3Rpb25fZHJhbWEiLCJjb25maWciLCJnZGF0YSIsInN0ciIsImFyZW5hIiwiYWN0aW9uX2FyZW5hIiwiZ2V0SXRlbVJlcyIsImVuZGxlc3MiLCJlbmRsZXNzX29sZCIsImFkdmVudHVyZSIsImFkdmVudHVyZV9tdXN0ZXIiLCJhZGRDYWxsQmFjayIsImNhbGxfYmFjayIsInNldEdyZXlCdXR0b24iLCJzZXRTdGF0ZSIsIlN0YXRlIiwiTk9STUFMIiwic2VuZGVyMTAzMTYiLCJyX3JpZCIsInJfc3J2aWQiLCJHUkFZIiwid29yc2hpcCIsIndvcnNoaXBfc3RhdHVzIiwidXBkYXRlV29yc2hpcFN0YXR1cyIsInJvbGVWbyIsImdldFJvbGVWbyIsInJpZCIsIm1lc3NhZ2UiLCJpc19yb2JvdCIsIm9wZW5GcmllbmRJbmZvIiwiY3JlYXRlUGFydG5lclZvIiwicGFydG5lcl9pZCIsInBpZCIsImJpZCIsInBiaWQiLCJwbGV2IiwicHN0YXIiLCJ1cGRhdGVIZXJvVm8iLCJzZXRQYXJlbnQiLCJzaG93Iiwic2V0UG9zaXRpb24iLCJzZXRTZWxlY3RlZCIsImJvb2wiLCJmYWRlaW4iLCJmYWRlSW4iLCJmYWRlb3V0IiwiZmFkZU91dCIsInJ1bkFjdGlvbiIsInJlcGVhdEZvcmV2ZXIiLCJzZXF1ZW5jZSIsInN0b3BBbGxBY3Rpb25zIiwiaXNIYXZlRGF0YSIsInJlc2V0IiwiZ2V0RGF0YSIsIm9uRGVsZXRlIiwidiIsImRlbGV0ZU1lIiwiZGVzdHJveSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxjQUFjLEdBQUdELE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUNBLElBQUlHLE1BQU0sR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBcEI7O0FBQ0EsSUFBSUksY0FBYyxHQUFHSixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUssVUFBVSxHQUFH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QUNsQixXQUFLQSxXQUFMLENBQWlCZ0gsUUFBakI7QUFDQSxXQUFLaEgsV0FBTCxHQUFtQixJQUFuQjtBQUNIO0FBQ0o7QUFqWm1CLENBQVQsQ0FBZjtBQW9aQWtILE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnpNLFFBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBAYXV0aG9yOiBAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOaOkuihjOamnOWNleWFg+mhuVxyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBSYW5rQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyYW5rX2NvbnRyb2xsZXJcIik7XHJcbnZhciBSYW5rQ29uc3RhbnQgPSByZXF1aXJlKFwicmFua19jb25zdGFudFwiKTtcclxudmFyIEhlcm9WbyA9IHJlcXVpcmUoXCJoZXJvX3ZvXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgUGxheWVySGVhZCA9IHJlcXVpcmUoXCJwbGF5ZXJoZWFkXCIpO1xyXG52YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIik7XHJcblxyXG52YXIgUmFua0l0ZW0gPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJhbmtcIiwgXCJyYW5rX2l0ZW1cIik7XHJcbiAgICAgICAgdGhpcy5jdHJsID0gUmFua0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSA2MDA7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAxMjA7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9IGFyZ3VtZW50c1swXSB8fCAxO1xyXG4gICAgICAgIHRoaXMucmFua190eXBlID0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmRyYW1hO1xyXG4gICAgICAgIHRoaXMucmFua19udW0gPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5ub2RlX2xpc3QgPSBbXTsvL+aUvuWFpeeahOaYr25vZGVcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5zZWVrQ2hpbGQoXCJiZ1wiKTtcclxuICAgICAgICB0aGlzLnJhbmtfaWNvbiA9IHRoaXMuc2Vla0NoaWxkKFwicmFua19pY29uXCIsIGNjLlNwcml0ZSk7XHJcbiAgICAgICAgdGhpcy5yYW5rX2luZGV4ID0gdGhpcy5zZWVrQ2hpbGQoXCJyYW5rX2luZGV4XCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLm90aGVyX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJvdGhlcl9wYW5lbFwiKTtcclxuICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuc2Vla0NoaWxkKFwic2VsZWN0XCIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2J0blByYWlzZSA9IHRoaXMuc2Vla0NoaWxkKFwiYnRuUHJhaXNlXCIpO1xyXG4gICAgICAgIHRoaXMuX2J0blByYWlzZV9idG4gPSB0aGlzLnNlZWtDaGlsZChcImJ0blByYWlzZVwiLCBjYy5CdXR0b24pO1xyXG4gICAgICAgIHRoaXMuX3ByYWlzZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuX2J0blByYWlzZSwgXCJpbWdcIiwgY2MuU3ByaXRlKTtcclxuICAgICAgICB0aGlzLl9sYWJlbFByYWlzZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuX2J0blByYWlzZSwgXCJsYWJlbFwiLCBjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5fYnRuUHJhaXNlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsX2Z1bilcclxuICAgICAgICAgICAgdGhpcy5jYWxsX2Z1bih0aGlzLnZvKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VG91Y2hGdW5jOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmNhbGxfZnVuID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmdldFRvdWNoZXMoKTtcclxuICAgICAgICAgICAgdGhpcy50b3VjaF9iZWdhbiA9IHRvdWNoZXNbMF0uZ2V0TG9jYXRpb24oKTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuZ2V0VG91Y2hlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnRvdWNoX2VuZCA9IHRvdWNoZXNbMF0uZ2V0TG9jYXRpb24oKTtcclxuICAgICAgICAgICAgdmFyIGlzX2NsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudG91Y2hfYmVnYW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaXNfY2xpY2sgPSBNYXRoLmFicyh0aGlzLnRvdWNoX2VuZC54IC0gdGhpcy50b3VjaF9iZWdhbi54KSA8PSAyMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKHRoaXMudG91Y2hfZW5kLnkgLSB0aGlzLnRvdWNoX2JlZ2FuLnkpIDw9IDIwXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc19jbGljayA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJhbmtfdHlwZSAhPSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudW5pb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5DaGF0TWVzc2FnZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICBpZiAodGhpcy5yb290X3duZClcclxuICAgICAgICAgICAgdGhpcy5vblNob3coKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25TaG93OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKSByZXR1cm5cclxuICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5kYXRhLmlkeCB8fCB0aGlzLmRhdGEucmFuayB8fCAxO1xyXG4gICAgICAgIHRoaXMucmFua19pbmRleC5zdHJpbmcgPSB0aGlzLmluZGV4O1xyXG4gICAgICAgIGlmICh0aGlzLmluZGV4ID49IDEgJiYgdGhpcy5pbmRleCA8PSAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFua19pbmRleC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJhbmtfaWNvbi5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmFua19pY29uLm5vZGUuc2V0U2NhbGUoMC43KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKFwiY29tbW9uXzIwMFwiICsgdGhpcy5pbmRleCksIGZ1bmN0aW9uIChzZl9vYmopIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua19pY29uLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yYW5rX2luZGV4Lm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yYW5rX2ljb24ubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhQnlSYW5rVHlwZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRFeHRlbmREYXRhOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yYW5rX3R5cGUgPSBkYXRhLnJhbmtfdHlwZSB8fCBSYW5rQ29uc3RhbnQuUmFua1R5cGUuZHJhbWE7XHJcbiAgICAgICAgdGhpcy5pc19jbHVzdGVyID0gZGF0YS5pc19jbHVzdGVyIHx8IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVEYXRhQnlSYW5rVHlwZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm5cclxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuaXRlbV9saXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldLnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm90aGVyX3BhbmVsLnJlbW92ZUFsbENoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIHZhciByb2xlX25hbWUgPSB0aGlzLmRhdGEubmFtZTtcclxuICAgICAgICBpZiAodGhpcy5pc19jbHVzdGVyID09IHRydWUpIHtcclxuICAgICAgICAgICAgcm9sZV9uYW1lID0gVXRpbHMudHJhbnNmb3JtTmFtZUJ5U2Vydih0aGlzLmRhdGEubmFtZSwgdGhpcy5kYXRhLnNydl9pZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yYW5rX3R5cGUgIT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLnVuaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyX2hlYWQgPSB0aGlzLmNyZWF0ZVBsYXllckhlYWQoMTA1LCA2MCk7XHJcbiAgICAgICAgICAgIHZhciBmYWNlX2lkID0gdGhpcy5kYXRhLmZhY2VfaWQgfHwgdGhpcy5kYXRhLmZhY2U7XHJcbiAgICAgICAgICAgIHZhciBhdmF0YXJfYmlkID0gdGhpcy5kYXRhLmF2YXRhcl9iaWQ7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyX2hlYWQuc2V0RnJhbWVSZXMoYXZhdGFyX2JpZCk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyX2hlYWQuc2V0SGVhZFJlcyhmYWNlX2lkKTtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaGVhZC5zZXRMZXYodGhpcy5kYXRhLmxldik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL+eUn+aIkOeahOiKgueCueS5i+exu+eahOmDvXB1c2jov5sgdGhpcy5ub2RlX2xpc3Tov5nph4zvvIznu5/kuIBkZXN0cm95XHJcbiAgICAgICAgaWYgKHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5wb3dlciB8fCB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX3Bvd2VyKSB7XHJcbiAgICAgICAgICAgIC8v5ZCN5a2XXHJcbiAgICAgICAgICAgIHZhciBsYWJlbCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg2OCwgMHg0NSwgMHgyYSwgMHhmZiksIG51bGwsIDE5OCwgdGhpcy5oZWlnaHQgLyAyLCBcIlwiLCB0aGlzLm90aGVyX3BhbmVsLCAwLCBjYy52MigwLCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKGxhYmVsKTtcclxuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gcm9sZV9uYW1lO1xyXG5cclxuICAgICAgICAgICAgLy/miJjliptcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg2OCwgMHg0NSwgMHgyYSwgMHhmZiksIGNjLnYyKDAuNSwgMC41KSwgY2MudjIoNDgwLCB0aGlzLmhlaWdodCAvIDIpLCAwLCA1MDApXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyX3BhbmVsLmFkZENoaWxkKGxhYmVsLm5vZGUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBvd2VyID0gdGhpcy5kYXRhLnZhbDEgfHwgMDtcclxuICAgICAgICAgICAgdmFyIHJlcyA9IFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKCdjb21tb25fOTAwMDInKVxyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCI8aW1nIHNyYz0nJXMnIC8+ICVzXCIsIFwiY29tbW9uXzkwMDAyXCIsIHBvd2VyKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uIChsYWJlbCwgcmVzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbC5hZGRTcHJpdGVGcmFtZShyZXNPYmplY3QpO1xyXG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMsIGxhYmVsKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudW5pb24pIHtcclxuICAgICAgICAgICAgdmFyIHN0ZXAgPSB0aGlzLmRhdGEuc3RlcCB8fCAwO1xyXG4gICAgICAgICAgICBzdGVwID0gTWF0aC5tYXgoc3RlcCwgMSk7XHJcbiAgICAgICAgICAgIHN0ZXAgPSBNYXRoLm1pbihzdGVwLCAxMSk7XHJcbiAgICAgICAgICAgIC8v5ZCN5a2XXHJcbiAgICAgICAgICAgIHZhciBsYWJlbCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg2OCwgMHg0NSwgMHgyYSwgMHhmZiksIG51bGwsIDIwNCwgODAsIFwiXCIsIHRoaXMub3RoZXJfcGFuZWwsIDAsIGNjLnYyKDAuNSwgMC41KSlcclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChsYWJlbCk7XHJcbiAgICAgICAgICAgIGxhYmVsLnN0cmluZyA9IHJvbGVfbmFtZTtcclxuICAgICAgICAgICAgLy/lrpfkuLvlkI3lrZdcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gVXRpbHMuY3JlYXRlTGFiZWwoMjAsIG5ldyBjYy5Db2xvcigweGE5LCAweDVmLCAweDBmLCAweGZmKSwgbnVsbCwgMjA0LCA0MCwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMC41LCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKGxhYmVsKTtcclxuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkvJrplb/vvJpcIikgKyAodGhpcy5kYXRhLmxlYWRlcl9uYW1lIHx8IFwiXCIpO1xyXG4gICAgICAgICAgICAvL+etiee6p1xyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4NjgsIDB4NDUsIDB4MmEsIDB4ZmYpLCBudWxsLCAzNDIsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMC41LCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKGxhYmVsKTtcclxuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gdGhpcy5kYXRhLmxldiB8fCAzMTM7XHJcbiAgICAgICAgICAgIC8v5Lq65pWwXHJcbiAgICAgICAgICAgIHZhciBsYWJlbCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg2OCwgMHg0NSwgMHgyYSwgMHhmZiksIG51bGwsIDQyNSwgdGhpcy5oZWlnaHQgLyAyLCBcIlwiLCB0aGlzLm90aGVyX3BhbmVsLCAwLCBjYy52MigwLjUsIDAuNSkpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICB2YXIgbnVtMSA9IHRoaXMuZGF0YS5tZW1iZXJzX251bSB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgbnVtMiA9IHRoaXMuZGF0YS5tZW1iZXJzX21heCB8fCAwO1xyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCIlcy8lc1wiLCBudW0xLCBudW0yKTtcclxuICAgICAgICAgICAgLy/miJjliptcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHhhOSwgMHg1ZiwgMHgwZiwgMHhmZiksIGNjLnYyKDAuNSwgMC41KSwgY2MudjIoNTI1LCB0aGlzLmhlaWdodCAvIDIpLCAwLCA1MDApXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyX3BhbmVsLmFkZENoaWxkKGxhYmVsLm5vZGUpO1xyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSBTdHJpbmcodGhpcy5kYXRhLnBvd2VyKSB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLnVuaW9uX2Jvc3MpIHtcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gVXRpbHMuY3JlYXRlTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigweDY4LCAweDQ1LCAweDJhLCAweGZmKSwgbnVsbCwgMjEwLCB0aGlzLmhlaWdodCAvIDIsIFwiXCIsIHRoaXMub3RoZXJfcGFuZWwsIDAsIGNjLnYyKDAsIDAuNSkpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSByb2xlX25hbWU7XHJcbiAgICAgICAgICAgIC8vZHBzXHJcbiAgICAgICAgICAgIHZhciBsYWJlbCA9IFV0aWxzLmNyZWF0ZVJpY2hMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4NjgsIDB4NDUsIDB4MmEsIDB4ZmYpLCBjYy52MigwLjUsIDAuNSksIGNjLnYyKDUwNSwgdGhpcy5oZWlnaHQgLyAyICsgMjUpLCAwLCA1MDApXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyX3BhbmVsLmFkZENoaWxkKGxhYmVsLm5vZGUpO1xyXG4gICAgICAgICAgICB2YXIgYWxsX2RwcyA9IHRoaXMuZGF0YS5hbGxfZHBzIHx8IDA7XHJcbiAgICAgICAgICAgIGxhYmVsLnN0cmluZyA9IFN0cmluZyhhbGxfZHBzKTtcclxuICAgICAgICAgICAgLy/lop7liqDngrnotZ7lip/og71cclxuICAgICAgICAgICAgdGhpcy5hZGRQcmFpc2UodGhpcy5kYXRhKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS50b3dlciB8fCB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX3Rvd2VyKSB7XHJcbiAgICAgICAgICAgIC8vIOWQjeWtl1xyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4NjgsIDB4NDUsIDB4MmEsIDB4ZmYpLCBudWxsLCAyMTAsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMCwgMC41KSk7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSByb2xlX25hbWU7XHJcbiAgICAgICAgICAgIC8vIOWxguaVsFxyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4YTksIDB4NWYsIDB4MGYsIDB4ZmYpLCBudWxsLCA0MDUsIDYxLCBcIlwiLCB0aGlzLm90aGVyX3BhbmVsLCAwLCBjYy52MigwLCAwLjUpKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChsYWJlbCk7XHJcbiAgICAgICAgICAgIGxhYmVsLnN0cmluZyA9IHRoaXMuZGF0YS52YWwxIHx8IDA7XHJcbiAgICAgICAgICAgIC8vIOmAmuWFs+aXtumXtFxyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4NjgsIDB4NDUsIDB4MmEsIDB4ZmYpLCBudWxsLCA1MDAsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMCwgMC41KSk7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGFiZWwpO1xyXG4gICAgICAgICAgICB2YXIgbnVtID0gdGhpcy5kYXRhLnZhbDIgfHwgMFxyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSBUaW1lVG9vbC5nZXRUaW1lTXMobnVtLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hY3Rpb25fc3RhciB8fCB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuc3Rhcl9wb3dlciB8fFxyXG4gICAgICAgICAgICB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuaGFsbG93c19wb3dlciB8fCB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudHJlYXN1cmUgfHxcclxuICAgICAgICAgICAgdGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmNvbG9yc190b25lIHx8IHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5nZW1zdG9uZSB8fFxyXG4gICAgICAgICAgICB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUucG9pbnRnbG9kIHx8IHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5zcGVlZF9maWdodCB8fFxyXG4gICAgICAgICAgICB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudm95YWdlIHx8IHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5oZXJvX2V4cGVkaXQpIHtcclxuICAgICAgICAgICAgLy8gLS3lkI3lrZdcclxuICAgICAgICAgICAgbGV0IG5hbWUgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDEwNCwgNjksIDQyLCAyNTUpLCBudWxsLCAxOTgsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMCwgMC41KSlcclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgbmFtZS5zdHJpbmcgPSAocm9sZV9uYW1lKVxyXG4gICAgICAgICAgICAvLyAtLeWxguaVsFxyXG4gICAgICAgICAgICBsZXQgbnVtID0gVXRpbHMuY3JlYXRlTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigxNjksIDk1LCAxNSwgMjU1KSwgbnVsbCwgNDU1LCB0aGlzLmhlaWdodCAvIDIsIFwiXCIsIHRoaXMub3RoZXJfcGFuZWwsIDAsIGNjLnYyKDAsIDAuNSkpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobnVtKTtcclxuICAgICAgICAgICAgbnVtLnN0cmluZyA9ICh0aGlzLmRhdGEudmFsMSB8fCAwKVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmd1aWxkX3dhcikge1xyXG4gICAgICAgICAgICAvLyAtLeWQjeWtl1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMTA0LCA2OSwgNDIsIDI1NSksIG51bGwsIDE5OCwgdGhpcy5oZWlnaHQgLyAyLCBcIlwiLCB0aGlzLm90aGVyX3BhbmVsLCAwLCBjYy52MigwLCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICBuYW1lLnN0cmluZyA9IHJvbGVfbmFtZTtcclxuICAgICAgICAgICAgLy/mmJ/mlbBcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gVXRpbHMuY3JlYXRlTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigxMDQsIDY5LCA0MiwgMjU1KSwgbnVsbCwgNDAyLCB0aGlzLmhlaWdodCAvIDIsIFwiXCIsIHRoaXMub3RoZXJfcGFuZWwsIDAsIGNjLnYyKDAuNSwgMC41KSlcclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChsYWJlbCk7XHJcbiAgICAgICAgICAgIGxhYmVsLnN0cmluZyA9IHRoaXMuZGF0YS5zdGFyIHx8IDA7XHJcbiAgICAgICAgICAgIC8v5oiY57upXHJcbiAgICAgICAgICAgIHZhciBzY29yZSA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMTY5LCA5NSwgMTUsIDI1NSksIG51bGwsIDUyNSwgdGhpcy5oZWlnaHQgLyAyLCBcIlwiLCB0aGlzLm90aGVyX3BhbmVsLCAwLCBjYy52MigwLjUsIDAuNSkpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2goc2NvcmUpO1xyXG4gICAgICAgICAgICBzY29yZS5zdHJpbmcgPSB0aGlzLmRhdGEud2FyX3Njb3JlIHx8IDA7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuZHJhbWEgfHwgdGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFjdGlvbl9kcmFtYSkge1xyXG4gICAgICAgICAgICAvLyAtLeWQjeWtl1xyXG4gICAgICAgICAgICBsZXQgbmFtZSA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMTA0LCA2OSwgNDIsIDI1NSksIG51bGwsIDE5OCwgdGhpcy5oZWlnaHQgLyAyLCBcIlwiLCB0aGlzLm90aGVyX3BhbmVsLCAwLCBjYy52MigwLCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICBuYW1lLnN0cmluZyA9IChyb2xlX25hbWUpXHJcblxyXG4gICAgICAgICAgICAvLyAtLeijheWkh+ivhOWIhlxyXG4gICAgICAgICAgICBsZXQgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDEwNCwgNjksIDQyLCAyNTUpLCBudWxsLCA0OTUsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMC41LCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKGxhYmVsKTtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiZHVuZ2Vvbl9kYXRhXCIsIFwiZGF0YV9kcmFtYV9kdW5nZW9uX2luZm9cIiwgdGhpcy5kYXRhLnZhbDEpO1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RyID0gY29uZmlnLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSBzdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hcmVuYSB8fCB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX2FyZW5hKSB7XHJcbiAgICAgICAgICAgIC8vIC0t5ZCN5a2XXHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gVXRpbHMuY3JlYXRlTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigxMDQsIDY5LCA0MiwgMjU1KSwgbnVsbCwgMTk4LCB0aGlzLmhlaWdodCAvIDIsIFwiXCIsIHRoaXMub3RoZXJfcGFuZWwsIDAsIGNjLnYyKDAsIDAuNSkpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgICAgIG5hbWUuc3RyaW5nID0gKHJvbGVfbmFtZSk7XHJcbiAgICAgICAgICAgIC8vIOijheWkh+ivhOWIhlxyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVSaWNoTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigweGE5LCAweDVmLCAweDBmLCAweGZmKSwgY2MudjIoMC41LCAwLjUpLCBjYy52Mig0ODAsIHRoaXMuaGVpZ2h0IC8gMiksIDAsIDUwMClcclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChsYWJlbCk7XHJcbiAgICAgICAgICAgIHRoaXMub3RoZXJfcGFuZWwuYWRkQ2hpbGQobGFiZWwubm9kZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2NvcmUgPSB0aGlzLmRhdGEuc2NvcmUgfHwgdGhpcy5kYXRhLnZhbDEgfHwgMDtcclxuICAgICAgICAgICAgdmFyIHJlcyA9IFBhdGhUb29sLmdldEl0ZW1SZXMoJzgnKVxyXG4gICAgICAgICAgICBsYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCI8aW1nIHNyYz0nJXMnIC8+ICVzXCIsIFwiOFwiLCBzY29yZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhyZXMsIChmdW5jdGlvbiAobGFiZWwsIHJlc09iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgbGFiZWwuYWRkU3ByaXRlRnJhbWUocmVzT2JqZWN0KTtcclxuICAgICAgICAgICAgfSkuYmluZCh0aGlzLCBsYWJlbCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmVuZGxlc3MgfHwgdGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmVuZGxlc3Nfb2xkXHJcbiAgICAgICAgICAgIHx8IHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hZHZlbnR1cmUgfHwgdGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFkdmVudHVyZV9tdXN0ZXIpIHtcclxuICAgICAgICAgICAgLy8gLS3lkI3lrZdcclxuICAgICAgICAgICAgbGV0IG5hbWUgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDEwNCwgNjksIDQyLCAyNTUpLCBudWxsLCAxOTgsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMCwgMC41KSlcclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgbmFtZS5zdHJpbmcgPSAocm9sZV9uYW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8vIC0t5bGC5pWwXHJcbiAgICAgICAgICAgIGxldCBudW0gPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4YTksIDB4NWYsIDB4MGYsIDB4ZmYpLCBudWxsLCA0MDMsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMC41LCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKG51bSk7XHJcbiAgICAgICAgICAgIG51bS5zdHJpbmcgPSAodGhpcy5kYXRhLnZhbDEgfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAvL+aImOWKm1xyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4YTksIDB4NWYsIDB4MGYsIDB4ZmYpLCBudWxsLCA1MzUsIHRoaXMuaGVpZ2h0IC8gMiwgXCJcIiwgdGhpcy5vdGhlcl9wYW5lbCwgMCwgY2MudjIoMC41LCAwLjUpKVxyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKGxhYmVsKTtcclxuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gKHRoaXMuZGF0YS52YWwyIHx8IDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/kuKrkurrkvKTlrrPmjpLooYwtLS0tLS0tLS0tLS1zdGFydFxyXG4gICAgYWRkQ2FsbEJhY2s6IGZ1bmN0aW9uIChjYWxsX2JhY2spIHtcclxuICAgICAgICB0aGlzLmNhbGxfYmFjayA9IGNhbGxfYmFjaztcclxuICAgIH0sXHJcblxyXG4gICAgLy/lop7liqDngrnotZ7lip/og71cclxuICAgIGFkZFByYWlzZTogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2J0blByYWlzZS5hY3RpdmUpXHJcbiAgICAgICAgICAgIHRoaXMuX2J0blByYWlzZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5fYnRuUHJhaXNlX2J0biwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuX3ByYWlzZS5zZXRTdGF0ZShjYy5TcHJpdGUuU3RhdGUuTk9STUFMKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPD0gMykge1xyXG4gICAgICAgICAgICB0aGlzLl9idG5QcmFpc2Uub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluZGV4ID4gMykgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsX2JhY2sgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbF9iYWNrKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kZXIxMDMxNihkYXRhLnJfcmlkLCBkYXRhLnJfc3J2aWQsIHRoaXMuaW5kZXgsIDIpO1xyXG4gICAgICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByYWlzZS5zZXRTdGF0ZShjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5fYnRuUHJhaXNlX2J0biwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xhYmVsUHJhaXNlLnN0cmluZyA9IGRhdGEud29yc2hpcDtcclxuICAgICAgICAvL+S4jeWPr+iGnOaLnFxyXG4gICAgICAgIGlmIChkYXRhLndvcnNoaXBfc3RhdHVzID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJhaXNlLnNldFN0YXRlKGNjLlNwcml0ZS5TdGF0ZS5HUkFZKTtcclxuICAgICAgICAgICAgVXRpbHMuc2V0R3JleUJ1dHRvbih0aGlzLl9idG5QcmFpc2VfYnRuLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVdvcnNoaXBTdGF0dXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLndvcnNoaXAgPSB0aGlzLmRhdGEud29yc2hpcCArIDE7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS53b3JzaGlwX3N0YXR1cyA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsUHJhaXNlLnN0cmluZyA9IHRoaXMuZGF0YS53b3JzaGlwO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmFpc2Uuc2V0U3RhdGUoY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xyXG4gICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuX2J0blByYWlzZV9idG4sIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/kuKrkurrkvKTlrrPmjpLooYwtLS0tLS0tLS0tLS1lbmRcclxuICAgIC8v5omT5byA546p5a625L+h5oGvXHJcbiAgICBvcGVuQ2hhdE1lc3NhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcm9sZVZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgICAgICB2YXIgcmlkID0gdGhpcy5kYXRhLnJpZCB8fCB0aGlzLmRhdGEucl9yaWQ7XHJcbiAgICAgICAgdmFyIHNydl9pZCA9IHRoaXMuZGF0YS5zcnZfaWQgfHwgdGhpcy5kYXRhLnJfc3J2aWQ7XHJcbiAgICAgICAgaWYgKHJpZCAmJiBzcnZfaWQgJiYgcm9sZVZvLnJpZCA9PSByaWQgJiYgcm9sZVZvLnNydl9pZCA9PSBzcnZfaWQpIHtcclxuICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuS9oOS4jeiupOivhuS9oOiHquW3seS6huS5iO+8n1wiKSk7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kYXRhLmlzX3JvYm90ICYmIHRoaXMuZGF0YS5pc19yb2JvdCA9PSAxKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLnpZ7np5jkurrlpKrpq5jlhrfvvIzkuI3nu5nmn6XnnItcIikpO1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgdm8gPSB7IHJpZDogcmlkLCBzcnZfaWQ6IHNydl9pZCB9O1xyXG4gICAgICAgICAgICByZXF1aXJlKFwiY2hhdF9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkub3BlbkZyaWVuZEluZm8odm8sIGNjLnYyKDAsIDApKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5Yib5bu65LiA5Liq6Iux6ZuE5pWw5o2uXHJcbiAgICBjcmVhdGVQYXJ0bmVyVm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdm8gPSBuZXcgSGVyb1ZvKCk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHBhcnRuZXJfaWQ6IHRoaXMuZGF0YS5waWQsXHJcbiAgICAgICAgICAgIGJpZDogdGhpcy5kYXRhLnBiaWQsXHJcbiAgICAgICAgICAgIGxldjogdGhpcy5kYXRhLnBsZXYsXHJcbiAgICAgICAgICAgIHN0YXI6IHRoaXMuZGF0YS5wc3RhcixcclxuICAgICAgICB9XHJcbiAgICAgICAgdm8udXBkYXRlSGVyb1ZvKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiB2b1xyXG4gICAgfSxcclxuXHJcbiAgICAvL+WIm+W7uueOqeWutuWktOWDj1xyXG4gICAgY3JlYXRlUGxheWVySGVhZDogZnVuY3Rpb24gKHgsIHkpIHtcclxuICAgICAgICB4ID0geCArIDQzO1xyXG4gICAgICAgIHZhciBwbGF5ZXJfaGVhZCA9IG5ldyBQbGF5ZXJIZWFkKCk7XHJcbiAgICAgICAgcGxheWVyX2hlYWQuc2V0UGFyZW50KHRoaXMub3RoZXJfcGFuZWwpO1xyXG4gICAgICAgIHBsYXllcl9oZWFkLnNob3coKTtcclxuICAgICAgICBwbGF5ZXJfaGVhZC5zZXRTY2FsZSgwLjgpO1xyXG4gICAgICAgIHBsYXllcl9oZWFkLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHJldHVybiBwbGF5ZXJfaGVhZFxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTZWxlY3RlZDogZnVuY3Rpb24gKGJvb2wpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdC5hY3RpdmUgPSBib29sO1xyXG4gICAgICAgIGlmIChib29sID09IHRydWUpIHtcclxuICAgICAgICAgICAgdmFyIGZhZGVpbiA9IGNjLmZhZGVJbigwLjcpO1xyXG4gICAgICAgICAgICB2YXIgZmFkZW91dCA9IGNjLmZhZGVPdXQoMC43KTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QucnVuQWN0aW9uKGNjLnJlcGVhdEZvcmV2ZXIoY2Muc2VxdWVuY2UoZmFkZWluLCBmYWRlb3V0KSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Quc3RvcEFsbEFjdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlzSGF2ZURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy52bykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0sXHJcblxyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5udW0pXHJcbiAgICAgICAgICAgIHRoaXMubnVtLnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudm8gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXREYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudm87XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1fbGlzdCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuaXRlbV9saXN0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbV9saXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgdi5kZWxldGVNZSgpO1xyXG4gICAgICAgICAgICAgICAgdiA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ub2RlX2xpc3QpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLm5vZGVfbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0aGlzLm5vZGVfbGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgY2MuTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2Lm5vZGUuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucGxheWVyX2hlYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaGVhZC5kZWxldGVNZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllcl9oZWFkID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmtJdGVtOyJdfQ==
|