|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/seerpalace/view/seerpalace_change_panel.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, '8aa66VG6x9NoZYTXDQlxD8U', 'seerpalace_change_panel');
|
// Scripts/mod/seerpalace/view/seerpalace_change_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的 (英雄转换)
|
// <br/>Create: 2019-03-22 14:37:35
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var SeerpalaceController = require("seerpalace_controller");
|
|
var HeroConst = require("hero_const");
|
|
var SeerpalaceConst = require("seerpalace_const");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var SeerpalaceEvent = require("seerpalace_event");
|
|
var HeroController = require("hero_controller");
|
|
var BaseRole = require("baserole");
|
|
var Seerpalace_change_Panel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
var self = this;
|
this.prefabPath = PathTool.getPrefabPath("seerpalace", "seerpalace_change_panel");
|
this.ctrl = SeerpalaceController.getInstance();
|
this.model = SeerpalaceController.getInstance().getModel();
|
self.camp_list = {};
|
self.cur_role_vo = {};
|
self.cur_role_item = null;
|
self.cur_camp_type = HeroConst.CampType.eNone;
|
self.left_stars_1 = {};
|
self.left_stars_2 = {};
|
self.right_stars_1 = {};
|
self.right_stars_2 = {};
|
self.is_first_open = true; // 首次打开界面标识
|
|
self.change_partner_id = 0; // 有置换结果但未保存的英雄,0为没有
|
|
self.change_new_partner_bid = 0; // 有置换结果但未保存的新英雄,0为没有
|
|
self.lock_partner_ids = {}; // 锁住不能置换的英雄
|
|
self.cancel_partner_id = 0; // 缓存取消保存的英雄id,取消之后要依然选中它
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
var self = this;
|
var main_container = self.root_wnd.getChildByName("main_container");
|
self.change_btn = main_container.getChildByName("change_btn");
|
self.change_btn.active = false;
|
self.cancel_btn = main_container.getChildByName("cancel_btn");
|
self.cancel_btn.active = false;
|
self.save_btn = main_container.getChildByName("save_btn");
|
self.save_btn.active = false;
|
self.left_panel = main_container.getChildByName("left_panel");
|
self.left_panel.active = false;
|
self.left_lv_label = this.seekChild("left_lv_label", cc.Label);
|
self.right_panel = main_container.getChildByName("right_panel");
|
self.right_panel.active = false;
|
self.right_lv_label = this.seekChild("right_lv_label", cc.Label);
|
self.change_lb = this.seekChild("change_label", cc.Label);
|
self.left_effect_node = main_container.getChildByName("left_effect_node");
|
self.right_effect_node = main_container.getChildByName("right_effect_node");
|
self.role_layout = main_container.getChildByName("role_layout");
|
self.toggle_nd = this.seekChild("toogle");
|
this.left_name_label = this.seekChild("left_name_label", cc.Label);
|
this.right_name_label = this.seekChild("right_name_label", cc.Label);
|
this.left_item_sp = this.seekChild("left_item", cc.Sprite);
|
this.right_item_sp = this.seekChild("right_item", cc.Sprite);
|
this.right_name_label_sp = this.seekChild("right_name_label", cc.Sprite);
|
var bgSize = self.role_layout.getContentSize();
|
self.btn_summon_sp = this.seekChild("item", cc.Sprite);
|
var scale = 0.9;
|
var scroll_view_size = cc.size(bgSize.width - 80, 108);
|
var setting = {
|
item_class: "hero_exhibition_item",
|
//-- 单元类
|
start_x: 0,
|
//-- 第一个单元的X起点
|
space_x: 15,
|
//-- x方向的间隔
|
start_y: 0,
|
//-- 第一个单元的Y起点
|
space_y: 0,
|
//-- y方向的间隔
|
item_width: 119 * scale,
|
//-- 单元的尺寸width
|
item_height: 119 * scale,
|
//-- 单元的尺寸height
|
row: 1,
|
//-- 行数,作用于水平滚动类型
|
col: 0,
|
//-- 列数,作用于垂直滚动类型
|
scale: scale
|
};
|
this.role_scrollview = new CommonScrollView();
|
this.role_scrollview.createScroll(self.role_layout, cc.v2(40, 128), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0, 0)); // this.role_scrollview.setSwallowTouches(false)
|
|
var path = PathTool.getIconPath("item", SeerpalaceConst.Good_XianZhi);
|
this.loadRes(path, function (SpriteFrame) {
|
this.btn_summon_sp.spriteFrame = SpriteFrame;
|
}.bind(this)); // if(this.model.change_info){
|
// self.setData(this.model.change_info)
|
// }
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
var _this = this;
|
|
var self = this;
|
this.change_btn.on("touchend", this._onClickChangeBtn, this);
|
this.cancel_btn.on("touchend", this._onClickCancelBtn, this);
|
this.save_btn.on("touchend", this._onClickSaveBtn, this);
|
this.addGlobalEvent(SeerpalaceEvent.Change_Role_Info_Event, function (data) {
|
self.setData(data);
|
}.bind(this));
|
this.addGlobalEvent(SeerpalaceEvent.Change_Role_Success, function () {
|
self.handleRightChangeEffect(true);
|
}.bind(this));
|
|
var _loop = function _loop(i) {
|
var camp_btn = self.toggle_nd.getChildByName("camp_btn_" + i);
|
|
if (camp_btn) {
|
self.camp_list[i] = camp_btn;
|
camp_btn.on("touchend", function () {
|
this._onClickCampBtn(i);
|
|
Utils.playButtonSound(3);
|
}, _this);
|
}
|
};
|
|
for (var i = 1; i <= 4; ++i) {
|
_loop(i);
|
}
|
|
this.ctrl.requestSeerpalaceChangeInfo();
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
addToParent: function addToParent(status) {
|
status = status || false;
|
|
if (status) {
|
this.show();
|
} else {
|
this.hide();
|
} // if (this.is_first_open) {
|
// // -- 初次打开界面时请求置换相关数据
|
// this.ctrl.requestSeerpalaceChangeInfo( )
|
// this.is_first_open = false
|
// }
|
|
},
|
// -- 置换
|
_onClickChangeBtn: function _onClickChangeBtn() {
|
Utils.playButtonSound(1);
|
var self = this;
|
|
if (self.cur_role_vo && self.cur_role_vo.id) {
|
this.ctrl.requestSeerpalaceChangeRole(self.cur_role_vo.id, 1);
|
} else {
|
message("请先选择一位英雄");
|
}
|
},
|
// -- 取消
|
_onClickCancelBtn: function _onClickCancelBtn() {
|
Utils.playButtonSound(1);
|
var self = this;
|
|
if (self.change_partner_id && self.change_partner_id != 0) {
|
self.cancel_partner_id = self.change_partner_id;
|
this.ctrl.requestSeerpalaceChangeRole(self.change_partner_id, 0);
|
}
|
},
|
// -- 保存
|
_onClickSaveBtn: function _onClickSaveBtn() {
|
Utils.playButtonSound(1);
|
var self = this;
|
|
if (self.change_partner_id && self.change_partner_id != 0) {
|
this.ctrl.requestSeerpalaceChangeRole(self.change_partner_id, 2);
|
}
|
},
|
setData: function setData(data) {
|
var self = this;
|
self.data = data || {};
|
self.change_partner_id = data.partner_id || 0;
|
self.change_new_partner_bid = data.new_partner_bid || 0;
|
self.lock_partner_ids = data.partner_ids || {};
|
self.role_layout.active = self.change_partner_id == 0;
|
self.cancel_btn.active = self.change_partner_id != 0;
|
self.save_btn.active = self.change_partner_id != 0;
|
|
if (self.change_partner_id == 0) {
|
if (!self.cur_index) {
|
self.toggle_nd.getChildByName("camp_btn_1").getComponent(cc.Toggle).isChecked = true;
|
|
self._onClickCampBtn(1);
|
} else {
|
self.refreshRoleList();
|
}
|
} else {
|
self.cur_index = null;
|
self.cur_role_vo = {};
|
self.cur_camp_type = HeroConst.CampType.eNone;
|
|
if (self.cur_role_item) {
|
self.cur_role_item.setSelected(false);
|
self.cur_role_item = null;
|
}
|
}
|
|
self.refreshRoleSpine();
|
},
|
// -- 刷新英雄头像列表
|
refreshRoleList: function refreshRoleList() {
|
var self = this;
|
self.cur_role_data = [];
|
var all_role_list = HeroController.getInstance().getModel().getAllHeroArray();
|
var camp_type = HeroConst.CampType.eNone;
|
|
if (self.cur_index == SeerpalaceConst.Change_Index_Camp.All) {
|
camp_type = HeroConst.CampType.eNone;
|
} else if (self.cur_index == SeerpalaceConst.Change_Index_Camp.Water) {
|
camp_type = HeroConst.CampType.eWater;
|
} else if (self.cur_index == SeerpalaceConst.Change_Index_Camp.Fire) {
|
camp_type = HeroConst.CampType.eFire;
|
} else if (self.cur_index == SeerpalaceConst.Change_Index_Camp.Wind) {
|
camp_type = HeroConst.CampType.eWind;
|
}
|
|
self.cur_camp_type = camp_type;
|
|
for (var k in all_role_list || {}) {
|
// k,role_vo in pairs(all_role_list.items or {}) do
|
var role_vo = all_role_list[k];
|
|
if (role_vo.star == 4 || role_vo.star == 5) {
|
var is_lock = self.checkIsLockedRole(role_vo.id);
|
|
if (camp_type == HeroConst.CampType.eNone) {
|
if (role_vo.camp_type == HeroConst.CampType.eWater || role_vo.camp_type == HeroConst.CampType.eFire || role_vo.camp_type == HeroConst.CampType.eWind) {
|
var role_data = Utils.deepCopy(role_vo);
|
role_data.is_locked = is_lock;
|
self.cur_role_data.push(role_data); // table_insert(self.cur_role_data, role_data)
|
}
|
} else if (role_vo.camp_type == camp_type) {
|
var _role_data = Utils.deepCopy(role_vo);
|
|
_role_data.is_locked = is_lock;
|
self.cur_role_data.push(_role_data); // table_insert(self.cur_role_data, role_data)
|
}
|
}
|
}
|
|
this.cur_role_data.sort(function (objA, objB) {
|
var is_lock_a = self.checkIsLockedRole(objA.id);
|
var is_lock_b = self.checkIsLockedRole(objB.id);
|
|
if (is_lock_a && !is_lock_b) {
|
return 1;
|
} else if (!is_lock_a && is_lock_b) {
|
return -1;
|
} else if (objA.star == objB.star) {
|
if (objA.camp_type == objB.camp_type) {
|
return objB.lev - objA.lev;
|
} else {
|
return objB.camp_type - objA.camp_type;
|
}
|
} else {
|
return objB.star - objA.star;
|
}
|
});
|
|
if (self.cur_role_item) {
|
self.cur_role_item.setSelected(false);
|
}
|
|
var extendData = {
|
scale: 0.85,
|
can_click: true,
|
from_type: HeroConst.ExhibitionItemType.eHeroChange
|
};
|
self.role_scrollview.setData(self.cur_role_data, function (cell) {
|
this._onClickPartner(cell);
|
}.bind(this), extendData);
|
self.role_scrollview.addEndCallBack(function () {
|
if (self.cur_role_vo && Utils.next(self.cur_role_vo) && self.cur_camp_type != null) {
|
// -- 记录了上一次选中英雄的数据,切换到全部或该英雄阵营时,该英雄继续为选中状态
|
if (self.cur_role_vo.camp_type == self.cur_camp_type || self.cur_camp_type == HeroConst.CampType.eNone) {
|
var list = self.role_scrollview.getItemList();
|
|
for (var _k = 0; _k < list.length; ++_k) {
|
var v = list[_k];
|
var data = v.getData();
|
|
if (data.id == self.cur_role_vo.id) {
|
self._onClickPartner(v);
|
|
break;
|
}
|
}
|
}
|
} else if (self.cancel_partner_id && self.cancel_partner_id != 0) {
|
//--选中取消置换的英雄
|
var _list = self.role_scrollview.getItemList();
|
|
for (var _k2 = 0; _k2 < _list.length; ++_k2) {
|
var _v = _list[_k2];
|
|
var _data = _v.getData();
|
|
if (_data.id == self.cancel_partner_id) {
|
self._onClickPartner(_v);
|
|
self.role_scrollview.jumpToMove(cc.v2(-(_k2 - 3) * (0.85 * 119 + 15), 0), 0.01);
|
break;
|
}
|
}
|
|
self.cancel_partner_id = 0;
|
}
|
}.bind(this));
|
},
|
_onClickPartner: function _onClickPartner(item) {
|
var self = this;
|
var vo = item.getData();
|
|
if (vo.checkHeroLockTips(true)) {
|
return;
|
}
|
|
if (self.cur_role_item) {
|
self.cur_role_item.setSelected(false);
|
}
|
|
item.setSelected(true);
|
self.cur_role_item = item;
|
self.cur_role_vo = vo;
|
var role_star = vo.star;
|
var label_str = "";
|
var cost_config = Config.recruit_high_data.data_seerpalace_const["hero_change" + role_star];
|
|
if (cost_config && cost_config.val) {
|
var bid = cost_config.val[0][0];
|
var num = cost_config.val[0][1];
|
var item_config = Utils.getItemConfig(bid);
|
|
if (item_config) {
|
label_str = num + " 置换";
|
}
|
}
|
|
self.change_lb.string = label_str;
|
self.refreshRoleSpine();
|
},
|
// -- 刷新英雄模型显示
|
refreshRoleSpine: function refreshRoleSpine() {
|
var self = this; // if (self.left_role){
|
// self.left_role.deleteMe()
|
// self.left_role = null
|
// }
|
// if (self.right_role) {
|
// self.right_role.deleteMe()
|
// self.right_role = null
|
// }
|
// -- 选中了某一个英雄或者有未保存的重置英雄
|
|
if (self.cur_role_vo && Utils.next(self.cur_role_vo) || self.change_partner_id != 0) {
|
var left_role_vo = {}; //-- 左侧英雄的数据
|
|
if (self.change_partner_id == 0) {
|
left_role_vo = self.cur_role_vo;
|
self.change_btn.active = true;
|
self.handleRightRandomEffect(true);
|
} else {
|
left_role_vo = HeroController.getInstance().getModel().getHeroById(self.change_partner_id);
|
self.change_btn.active = false;
|
self.handleRightRandomEffect(false);
|
}
|
|
if (left_role_vo && (Utils.next(left_role_vo) || Utils.next(left_role_vo) == 0)) {
|
if (self.left_role == null) {
|
self.left_role = new BaseRole();
|
self.left_role.setParent(self.left_panel);
|
self.left_role.node.setPosition(cc.v2(100, 180));
|
}
|
|
self.left_role.setData(BaseRole.type.partner, left_role_vo, PlayerAction.show, true, 0.72);
|
var type_res = PathTool.getHeroCampRes(left_role_vo.camp_type);
|
var path = PathTool.getUIIconPath("common", type_res);
|
self.right_item_sp.spriteFrame = null;
|
this.loadRes(path, function (SpriteFrame) {
|
self.left_item_sp.spriteFrame = SpriteFrame;
|
self.right_item_sp.spriteFrame = SpriteFrame;
|
}.bind(this));
|
self.left_name_label.string = left_role_vo.name;
|
self.left_lv_label.string = left_role_vo.lev;
|
self.right_lv_label.string = left_role_vo.lev;
|
var right_name = "????";
|
|
if (self.change_new_partner_bid != 0) {
|
var base_config = Config.partner_data.data_partner_base[self.change_new_partner_bid];
|
var right_role_data = {
|
bid: self.change_new_partner_bid,
|
star: left_role_vo.star
|
};
|
|
if (self.right_role == null) {
|
self.right_role = new BaseRole();
|
self.right_role.setParent(self.right_panel);
|
self.right_role.node.setPosition(cc.v2(100, 180));
|
}
|
|
self.right_role.node.active = true;
|
self.right_role.setData(BaseRole.type.partner, right_role_data, PlayerAction.show, true, 0.72);
|
|
if (base_config && base_config.name) {
|
right_name = base_config.name;
|
}
|
} else {
|
right_name = "????";
|
|
if (self.right_role) {
|
self.right_role.node.active = false;
|
}
|
}
|
|
self.right_name_label.string = right_name;
|
|
for (var i in self.left_stars_1) {
|
var star = self.left_stars_1[i].node;
|
star.active = false;
|
}
|
|
for (var _i in self.left_stars_2) {
|
var _star = self.left_stars_2[_i].node;
|
_star.active = false;
|
}
|
|
for (var _i2 in self.right_stars_1) {
|
var _star2 = self.right_stars_1[_i2].node;
|
_star2.active = false;
|
}
|
|
for (var _i3 in self.right_stars_2) {
|
var _star3 = self.right_stars_2[_i3].node;
|
_star3.active = false;
|
}
|
|
if (self.left_star10) {
|
self.left_star10.node.active = false;
|
}
|
|
if (self.right_star10) {
|
self.right_star10.node.active = false;
|
}
|
|
var role_star = left_role_vo.star;
|
|
var _cStar = function _cStar(star_count, res, star_list, parent_node) {
|
var _this2 = this;
|
|
var star_pos = SeerpalaceConst.Change_Pos_X[star_count] || {};
|
|
for (var _i4 = 0; _i4 < star_count; ++_i4) {
|
if (!star_list[_i4]) {
|
(function () {
|
var star = Utils.createImage(parent_node, res, 0, 338, cc.v2(0.5, 0.5), true);
|
self.loadRes(res, function (SpriteFrame) {
|
star.spriteFrame = SpriteFrame;
|
}.bind(_this2));
|
star_list[_i4] = star;
|
})();
|
}
|
|
star_list[_i4].node.active = true;
|
var pos_x = star_pos[_i4];
|
|
if (pos_x) {
|
star_list[_i4].node.x = pos_x;
|
}
|
}
|
};
|
|
if (role_star > 0 && role_star <= 5) {
|
var res = PathTool.getUIIconPath("common", "common_90074");
|
|
_cStar(role_star, res, self.left_stars_1, self.left_panel);
|
|
_cStar(role_star, res, self.right_stars_1, self.right_panel);
|
} else if (role_star >= 6 && role_star <= 9) {
|
var _res = PathTool.getUIIconPath("common", "common_90075");
|
|
var count = role_star - 5;
|
|
_cStar(count, _res, self.left_stars_2, self.left_panel);
|
|
_cStar(count, _res, self.right_stars_2, self.right_panel);
|
} else if (role_star >= 10) {
|
var _res2 = PathTool.getUIIconPath("common", "common_90073");
|
|
if (!self.left_star10) {
|
self.left_star10 = Utils.createImage(self.left_panel, _res2, 100, 338, cc.v2(0.5, 0.5), true, 0, false);
|
self.left_star10.setScale(1.2);
|
} else {
|
self.left_star10.node.active = true;
|
}
|
|
if (!self.right_star10) {
|
self.right_star10 = Utils.createImage(self.right_panel, _res2, 100, 338, cc.v2(0.5, 0.5), true, 0, false);
|
self.right_star10.setScale(1.2);
|
} else {
|
self.right_star10.node.active = true;
|
}
|
}
|
}
|
|
self.left_panel.active = true;
|
self.right_panel.active = true;
|
self.handleLeftEmptyEffect(false);
|
} else {
|
self.left_panel.active = false;
|
self.right_panel.active = false;
|
self.change_btn.active = false;
|
self.handleLeftEmptyEffect(true);
|
self.handleRightRandomEffect(false);
|
}
|
},
|
_onClickCampBtn: function _onClickCampBtn(index) {
|
var self = this;
|
if (self.cur_index == index) return;
|
|
if (self.cur_index) {
|
var old_camp_data = self.camp_list[self.cur_index];
|
|
if (old_camp_data && old_camp_data.select_image) {
|
old_camp_data.select_image.active = false;
|
}
|
}
|
|
var cur_camp_data = self.camp_list[index];
|
|
if (cur_camp_data && cur_camp_data.select_image) {
|
cur_camp_data.select_image.active = true;
|
}
|
|
self.cur_index = index;
|
self.refreshRoleList();
|
},
|
// -- 判断是否为锁住的英雄
|
checkIsLockedRole: function checkIsLockedRole(id) {
|
var self = this;
|
var is_locked = false;
|
|
for (var i in self.lock_partner_ids) {
|
// k,v in pairs(self.lock_partner_ids) do
|
var v = self.lock_partner_ids[i];
|
|
if (v.id && v.id == id) {
|
is_locked = true;
|
break;
|
}
|
}
|
|
return is_locked;
|
},
|
// -- 左边为空时播放的特效
|
handleLeftEmptyEffect: function handleLeftEmptyEffect(status) {
|
var self = this;
|
|
if (status == false) {
|
if (self.left_empty_effect) {
|
self.left_empty_effect.skeletonData = null;
|
this.left_empty_effect.setToSetupPose();
|
this.left_empty_effect.clearTracks();
|
self.left_empty_effect = null;
|
}
|
} else {
|
if (this.left_effect_node && !this.left_empty_effect) {
|
var path = PathTool.getSpinePath("E24001", "action");
|
this.loadRes(path, function (skeleton_data) {
|
this.left_empty_effect = self.left_effect_node.getChildByName("action").getComponent(sp.Skeleton);
|
this.left_empty_effect.skeletonData = skeleton_data;
|
this.left_empty_effect.setAnimation(0, "action", true);
|
}.bind(this));
|
}
|
}
|
},
|
// -- 右边为随机时的特效
|
handleRightRandomEffect: function handleRightRandomEffect(status) {
|
var self = this;
|
|
if (status == false) {
|
if (self.right_random_effect) {
|
this.right_random_effect.setToSetupPose();
|
this.right_random_effect.clearTracks();
|
this.right_random_effect.skeletonData = null;
|
self.right_random_effect = null;
|
}
|
} else {
|
if (self.right_effect_node && !self.right_random_effect) {
|
var path = PathTool.getSpinePath("E24002", "action");
|
this.loadRes(path, function (skeleton_data) {
|
this.right_random_effect = self.right_effect_node.getChildByName("action").getComponent(sp.Skeleton);
|
this.right_random_effect.skeletonData = skeleton_data;
|
this.right_random_effect.setAnimation(0, "action", true);
|
}.bind(this));
|
}
|
}
|
},
|
//-- 右边置换成功的特效
|
handleRightChangeEffect: function handleRightChangeEffect(status) {
|
var self = this;
|
|
if (status == false) {
|
if (self.right_change_effect) {
|
self.right_change_effect.skeletonData = null;
|
this.right_change_effect.setToSetupPose();
|
this.right_change_effect.clearTracks();
|
self.right_change_effect = null;
|
}
|
} else {
|
if (self.right_effect_node && !self.right_change_effect) {
|
var path = PathTool.getSpinePath("E24003", "action");
|
this.loadRes(path, function (skeleton_data) {
|
self.right_change_effect = self.right_effect_node.getChildByName("action1").getComponent(sp.Skeleton);
|
self.right_change_effect.skeletonData = skeleton_data;
|
self.right_change_effect.setAnimation(0, "action", false);
|
}.bind(this));
|
} else if (self.right_change_effect) {
|
self.right_change_effect.setAnimation(0, "action", false);
|
}
|
}
|
},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
var self = this;
|
|
if (self.role_change_info_event) {
|
gcore.GlobalEvent.unbind(self.role_change_info_event);
|
self.role_change_info_event = null;
|
}
|
|
if (self.change_success_event) {
|
gcore.GlobalEvent.unbind(self.change_success_event);
|
self.change_success_event = null;
|
}
|
|
if (self.left_role) {
|
self.left_role.deleteMe();
|
self.left_role = null;
|
}
|
|
if (self.right_role) {
|
self.right_role.deleteMe();
|
self.right_role = null;
|
}
|
|
this.handleRightRandomEffect(false);
|
this.handleLeftEmptyEffect(false);
|
this.handleRightChangeEffect(false);
|
}
|
});
|
module.exports = Seerpalace_change_Panel;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxzZWVycGFsYWNlXFx2aWV3XFxzZWVycGFsYWNlX2NoYW5nZV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJTZWVycGFsYWNlQ29udHJvbGxlciIsIkhlcm9Db25zdCIsIlNlZXJwYWxhY2VDb25zdCIsIkNvbW1vblNjcm9sbFZpZXciLCJTZWVycGFsYWNlRXZlbnQiLCJIZXJvQ29udHJvbGxlciIsIkJhc2VSb2xlIiwiU2VlcnBhbGFjZV9jaGFuZ2VfUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInNlbGYiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsImN0cmwiLCJnZXRJbnN0YW5jZSIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJjYW1wX2xpc3QiLCJjdXJfcm9sZV92byIsImN1cl9yb2xlX2l0ZW0iLCJjdXJfY2FtcF90eXBlIiwiQ2FtcFR5cGUiLCJlTm9uZSIsImxlZnRfc3RhcnNfMSIsImxlZnRfc3RhcnNfMiIsInJpZ2h0X3N0YXJzXzEiLCJyaWdodF9zdGFyc18yIiwiaXNfZmlyc3Rfb3BlbiIsImNoYW5nZV9wYXJ0bmVyX2lkIiwiY2hhbmdlX25ld19wYXJ0bmVyX2JpZCIsImxvY2tfcGFydG5lcl9pZHMiLCJjYW5jZWxfcGFydG5lcl9pZCIsImluaXRDb25maWciLCJpbml0UGFuZWwiLCJtYWluX2NvbnRhaW5lciIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJjaGFuZ2VfYnRuIiwiYWN0aXZlIiwiY2FuY2VsX2J0biIsInNhdmVfYnRuIiwibGVmdF9wYW5lbCIsImxlZnRfbHZfbGFiZWwiLCJzZWVrQ2hpbGQiLCJMYWJlbCIsInJpZ2h0X3BhbmVsIiwicmlnaHRfbHZfbGFiZWwiLCJjaGFuZ2VfbGIiLCJsZWZ0X2VmZmVjdF9ub2RlIiwicmlnaHRfZWZmZWN0X25vZGUiLCJyb2xlX2xheW91dCIsInRvZ2dsZV9uZCIsImxlZnRfbmFtZV9sYWJlbCIsInJpZ2h0X25hbWVfbGFiZWwiLCJsZWZ0X2l0ZW1fc3AiLCJTcHJpdGUiLCJyaWdodF9pdGVtX3NwIiwicmlnaHRfbmFtZV9sYWJlbF9zcCIsImJnU2l6ZSIsImdldENvbnRlbnRTaXplIiwiYnRuX3N1bW1vbl9zcCIsInNjYWxlIiwic2Nyb2xsX3ZpZXdfc2l6ZSIsInNpemUiLCJ3aWR0aCIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsInJvbGVfc2Nyb2xsdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsImhvcml6b250YWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJwYXRoIiwiZ2V0SWNvblBhdGgiLCJHb29kX1hpYW5aaGkiLCJsb2FkUmVzIiwiU3ByaXRlRnJhbWUiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJyZWdpc3RlckV2ZW50Iiwib24iLCJfb25DbGlja0NoYW5nZUJ0biIsIl9vbkNsaWNrQ2FuY2VsQnRuIiwiX29uQ2xpY2tTYXZlQnRuIiwiYWRkR2xvYmFsRXZlbnQiLCJDaGFuZ2VfUm9sZV9JbmZvX0V2ZW50IiwiZGF0YSIsInNldERhdGEiLCJDaGFuZ2VfUm9sZV9TdWNjZXNzIiwiaGFuZGxlUmlnaHRDaGFuZ2VFZmZlY3QiLCJpIiwiY2FtcF9idG4iLCJfb25DbGlja0NhbXBCdG4iLCJVdGlscyIsInBsYXlCdXR0b25Tb3VuZCIsInJlcXVlc3RTZWVycGFsYWNlQ2hhbmdlSW5mbyIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsImFkZFRvUGFyZW50Iiwic3RhdHVzIiwic2hvdyIsImhpZGUiLCJpZCIsInJlcXVlc3RTZWVycGFsYWNlQ2hhbmdlUm9sZSIsIm1lc3NhZ2UiLCJwYXJ0bmVyX2lkIiwibmV3X3BhcnRuZXJfYmlkIiwicGFydG5lcl9pZHMiLCJjdXJfaW5kZXgiLCJnZXRDb21wb25lbnQiLCJUb2dnbGUiLCJpc0NoZWNrZWQiLCJyZWZyZXNoUm9sZUxpc3QiLCJzZXRTZWxlY3RlZCIsInJlZnJlc2hSb2xlU3BpbmUiLCJjdXJfcm9sZV9kYXRhIiwiYWxsX3JvbGVfbGlzdCIsImdldEFsbEhlcm9BcnJheSIsImNhbXBfdHlwZSIsIkNoYW5nZV9JbmRleF9DYW1wIiwiQWxsIiwiV2F0ZXIiLCJlV2F0ZXIiLCJGaXJlIiwiZUZpcmUiLCJXaW5kIiwiZVdpbmQiLCJrIiwicm9sZV92byIsInN0YXIiLCJpc19sb2NrIiwiY2hlY2tJc0xvY2tlZFJvbGUiLCJyb2xlX2RhdGEiLCJkZWVwQ29weSIsImlzX2xvY2tlZCIsInB1c2giLCJzb3J0Iiwib2JqQSIsIm9iakIiLCJpc19sb2NrX2EiLCJpc19sb2NrX2IiLCJsZXYiLCJleHRlbmREYXRhIiwiY2FuX2NsaWNrIiwiZnJvbV90eXBlIiwiRXhoaWJpdGlvbkl0ZW1UeXBlIiwiZUhlcm9DaGFuZ2UiLCJjZWxsIiwiX29uQ2xpY2tQYXJ0bmVyIiwiYWRkRW5kQ2FsbEJhY2siLCJuZXh0IiwibGlzdCIsImdldEl0ZW1MaXN0IiwibGVuZ3RoIiwidiIsImdldERhdGEiLCJqdW1wVG9Nb3ZlIiwiaXRlbSIsInZvIiwiY2hlY2tIZXJvTG9ja1RpcHMiLCJyb2xlX3N0YXIiLCJsYWJlbF9zdHIiLCJjb3N0X2NvbmZpZyIsIkNvbmZpZyIsInJlY3J1aXRfaGlnaF9kYXRhIiwiZGF0YV9zZWVycGFsYWNlX2NvbnN0IiwidmFsIiwiYmlkIiwibnVtIiwiaXRlbV9jb25maWciLCJnZXRJdGVtQ29uZmlnIiwic3RyaW5nIiwibGVmdF9yb2xlX3ZvIiwiaGFuZGxlUmlnaHRSYW5kb21FZmZlY3QiLCJnZXRIZXJvQnlJZCIsImxlZnRfcm9sZSIsInNldFBhcmVudCIsIm5vZGUiLCJzZXRQb3NpdGlvbiIsInR5cGUiLCJwYXJ0bmVyIiwiUGxheWVyQWN0aW9uIiwidHlwZV9yZXMiLCJnZXRIZXJvQ2FtcFJlcyIsImdldFVJSWNvblBhdGgiLCJuYW1lIiwicmlnaHRfbmFtZSIsImJhc2VfY29uZmlnIiwicGFydG5lcl9kYXRhIiwiZGF0YV9wYXJ0bmVyX2Jhc2UiLCJyaWdodF9yb2xlX2RhdGEiLCJyaWdodF9yb2xlIiwibGVmdF9zdGFyMTAiLCJyaWdodF9zdGFyMTAiLCJfY1N0YXIiLCJzdGFyX2NvdW50IiwicmVzIiwic3Rhcl9saXN0IiwicGFyZW50X25vZGUiLCJzdGFyX3BvcyIsIkNoYW5nZV9Qb3NfWCIsImNyZWF0ZUltYWdlIiwicG9zX3giLCJ4IiwiY291bnQiLCJzZXRTY2FsZSIsImhhbmRsZUxlZnRFbXB0eUVmZmVjdCIsImluZGV4Iiwib2xkX2NhbXBfZGF0YSIsInNlbGVjdF9pbWFnZSIsImN1cl9jYW1wX2RhdGEiLCJsZWZ0X2VtcHR5X2VmZmVjdCIsInNrZWxldG9uRGF0YSIsInNldFRvU2V0dXBQb3NlIiwiY2xlYXJUcmFja3MiLCJnZXRTcGluZVBhdGgiLCJza2VsZXRvbl9kYXRhIiwic3AiLCJTa2VsZXRvbiIsInNldEFuaW1hdGlvbiIsInJpZ2h0X3JhbmRvbV9lZmZlY3QiLCJyaWdodF9jaGFuZ2VfZWZmZWN0Iiwib25EZWxldGUiLCJyb2xlX2NoYW5nZV9pbmZvX2V2ZW50IiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsInVuYmluZCIsImNoYW5nZV9zdWNjZXNzX2V2ZW50IiwiZGVsZXRlTWUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsb0JBQW9CLEdBQUdELE9BQU8sQ0FBQyx1QkFBRCxDQUFsQzs7QUFDQSxJQUFJRSxTQUFTLEdBQUdGLE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBLElBQUlHLGVBQWUsR0FBR0gsT0FBTyxDQUFDLGtCQUFELENBQTdCOztBQUNBLElBQUlJLGdCQUFnQixHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUssZUFBZSxHQUFHTCxPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBQ0EsSUFBSU0sY0FBYyxHQUFHTixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSU8sUUFBUSxHQUFHUCxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJUSx1QkFBdUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDbkMsYUFBU0MsU0FEMEI7QUFFbkNDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFFBQUlDLElBQUksR0FBRyxJQUFYO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQmYsUUFBUSxDQUFDZ0IsYUFBVCxDQUF1QixZQUF2QixFQUFxQyx5QkFBckMsQ0FBbEI7QUFDQSxTQUFLQyxJQUFMLEdBQVlmLG9CQUFvQixDQUFDZ0IsV0FBckIsRUFBWjtBQUNBLFNBQUtDLEtBQUwsR0FBYWpCLG9CQUFvQixDQUFDZ0IsV0FBckIsR0FBbUNFLFFBQW5DLEVBQWI7QUFDQU4sSUFBQUEsSUFBSSxDQUFDTyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0FQLElBQUFBLElBQUksQ0FBQ1EsV0FBTCxHQUFtQixFQUFuQjtBQUNBUixJQUFBQSxJQUFJLENBQUNTLGFBQUwsR0FBcUIsSUFBckI7QUFDQVQsSUFBQUEsSUFBSSxDQUFDVSxhQUFMLEdBQXFCckIsU0FBUyxDQUFDc0IsUUFBVixDQUFtQkMsS0FBeEM7QUFDQVosSUFBQUEsSUFBSSxDQUFDYSxZQUFMLEdBQW9CLEVBQXBCO0FBQ0FiLElBQUFBLElBQUksQ0FBQ2MsWUFBTCxHQUFvQixFQUFwQjtBQUNBZCxJQUFBQSxJQUFJLENBQUNlLGFBQUwsR0FBcUIsRUFBckI7QUFDQWYsSUFBQUEsSUFBSSxDQUFDZ0IsYUFBTCxHQUFxQixFQUFyQjtBQUNBaEIsSUFBQUEsSUFBSSxDQUFDaUIsYUFBTCxHQUFxQixJQUFyQixDQWJjLENBYWE7O0FBQzNCakIsSUFBQUEsSUFBSSxDQUFDa0IsaUJBQUwsR0FBeUIsQ0FBekIsQ0FkYyxDQWNhOztBQUMzQmxCLElBQUFBLElBQUksQ0FBQ21CLHNCQUFMLEdBQThCLENBQTlCLENBZmMsQ0Fla0I7O0FBQ2hDbkIsSUFBQUEsSUFBSSxDQUFDb0IsZ0JBQUwsR0FBd0IsRUFBeEIsQ0FoQmMsQ0FnQmE7O0FBQzNCcEIsSUFBQUEsSUFBSSxDQUFDcUIsaUJBQUwsR0FBeUIsQ0FBekIsQ0FqQmMsQ0FpQmE7QUFDOUIsR0FwQmtDO0FBc0JuQztBQUNBQyxFQUFBQSxVQUFVLEVBQUMsc0JBQVUsQ0FFcEIsQ0F6QmtDO0FBMkJuQztBQUNBQyxFQUFBQSxTQUFTLEVBQUMscUJBQVU7QUFDaEIsUUFBSXZCLElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSXdCLGNBQWMsR0FBR3hCLElBQUksQ0FBQ3lCLFFBQUwsQ0FBY0MsY0FBZCxDQUE2QixnQkFBN0IsQ0FBckI7QUFDQTFCLElBQUFBLElBQUksQ0FBQzJCLFVBQUwsR0FBa0JILGNBQWMsQ0FBQ0UsY0FBZixDQUE4QixZQUE5QixDQUFsQjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDMkIsVUFBTCxDQUFnQkMsTUFBaEIsR0FBeUIsS0FBekI7QUFFQTVCLElBQUFBLElBQUksQ0FBQzZCLFVBQUwsR0FBa0JMLGNBQWMsQ0FBQ0UsY0FBZixDQUE4QixZQUE5QixDQUFsQjtBQUVBMUIsSUFBQUEsSUFBSSxDQUFDNkIsVUFBTCxDQUFnQkQsTUFBaEIsR0FBeUIsS0FBekI7QUFFQTVCLElBQUFBLElBQUksQ0FBQzhCLFFBQUwsR0FBZ0JOLGNBQWMsQ0FBQ0UsY0FBZixDQUE4QixVQUE5QixDQUFoQjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDOEIsUUFBTCxDQUFjRixNQUFkLEdBQXVCLEtBQXZCO0FBRUE1QixJQUFBQSxJQUFJLENBQUMrQixVQUFMLEdBQWtCUCxjQUFjLENBQUNFLGNBQWYsQ0FBOEIsWUFBOUIsQ0FBbEI7QUFDQTFCLElBQUFBLElBQUksQ0FBQytCLFVBQUwsQ0FBZ0JILE1BQWhCLEdBQTBCLEtBQTFCO0FBQ0E1QixJQUFBQSxJQUFJLENBQUNnQyxhQUFMLEdBQXFCLEtBQUtDLFNBQUwsQ0FBZSxlQUFmLEVBQStCckMsRUFBRSxDQUFDc0MsS0FBbEMsQ0FBckI7QUFFQWxDLElBQUFBLElBQUksQ0FBQ21DLFdBQUwsR0FBbUJYLGNBQWMsQ0FBQ0UsY0FBZixDQUE4QixhQUE5QixDQUFuQjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDbUMsV0FBTCxDQUFpQlAsTUFBakIsR0FBMEIsS0FBMUI7QUFDQTVCLElBQUFBLElBQUksQ0FBQ29DLGNBQUwsR0FBc0IsS0FBS0gsU0FBTCxDQUFlLGdCQUFmLEVBQWdDckMsRUFBRSxDQUFDc0MsS0FBbkMsQ0FBdEI7QUFFQWxDLElBQUFBLElBQUksQ0FBQ3FDLFNBQUwsR0FBaUIsS0FBS0osU0FBTCxDQUFlLGNBQWYsRUFBOEJyQyxFQUFFLENBQUNzQyxLQUFqQyxDQUFqQjtBQUNBbEMsSUFBQUEsSUFBSSxDQUFDc0MsZ0JBQUwsR0FBd0JkLGNBQWMsQ0FBQ0UsY0FBZixDQUE4QixrQkFBOUIsQ0FBeEI7QUFDQTFCLElBQUFBLElBQUksQ0FBQ3VDLGlCQUFMLEdBQXlCZixjQUFjLENBQUNFLGNBQWYsQ0FBOEIsbUJBQTlCLENBQXpCO0FBQ0ExQixJQUFBQSxJQUFJLENBQUN3QyxXQUFMLEdBQW1CaEIsY0FBYyxDQUFDRSxjQUFmLENBQThCLGFBQTlCLENBQW5CO0FBQ0ExQixJQUFBQSxJQUFJLENBQUN5QyxTQUFMLEdBQWlCLEtBQUtSLFNBQUwsQ0FBZSxRQUFmLENBQWpCO0FBQ0EsU0FBS1MsZUFBTCxHQUF1QixLQUFLVCxTQUFMLENBQWUsaUJBQWYsRUFBaUNyQyxFQUFFLENBQUNzQyxLQUFwQyxDQUF2QjtBQUNBLFNBQUtTLGdCQUFMLEdBQXdCLEtBQUtWLFNBQUwsQ0FBZSxrQkFBZixFQUFrQ3JDLEVBQUUsQ0FBQ3NDLEtBQXJDLENBQXhCO0FBQ0EsU0FBS1UsWUFBTCxHQUFvQixLQUFLWCxTQUFMLENBQWUsV0FBZixFQUEyQnJDLEVBQUUsQ0FBQ2lELE1BQTlCLENBQXBCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixLQUFLYixTQUFMLENBQWUsWUFBZixFQUE0QnJDLEVBQUUsQ0FBQ2lELE1BQS9CLENBQXJCO0FBQ0EsU0FBS0UsbUJBQUwsR0FBMkIsS0FBS2QsU0FBTCxDQUFlLGtCQUFmLEVBQWtDckMsRUFBRSxDQUFDaUQsTUFBckMsQ0FBM0I7QUFDQSxRQUFJRyxNQUFNLEdBQUdoRCxJQUFJLENBQUN3QyxXQUFMLENBQWlCUyxjQUFqQixFQUFiO0FBQ0FqRCxJQUFBQSxJQUFJLENBQUNrRCxhQUFMLEdBQXFCLEtBQUtqQixTQUFMLENBQWUsTUFBZixFQUFzQnJDLEVBQUUsQ0FBQ2lELE1BQXpCLENBQXJCO0FBQ0EsUUFBSU0sS0FBSyxHQUFHLEdBQVo7QUFDQSxRQUFJQyxnQkFBZ0IsR0FBR3hELEVBQUUsQ0FBQ3lELElBQUgsQ0FBUUwsTUFBTSxDQUFDTSxLQUFQLEdBQWUsRUFBdkIsRUFBMkIsR0FBM0IsQ0FBdkI7QUFDQSxRQUFJQyxPQUFPLEdBQUc7QUFDVkMsTUFBQUEsVUFBVSxFQUFHLHNCQURIO0FBQ2dDO0FBQzFDQyxNQUFBQSxPQUFPLEVBQUcsQ0FGQTtBQUU0QjtBQUN0Q0MsTUFBQUEsT0FBTyxFQUFHLEVBSEE7QUFHNEI7QUFDdENDLE1BQUFBLE9BQU8sRUFBRyxDQUpBO0FBSTRCO0FBQ3RDQyxNQUFBQSxPQUFPLEVBQUcsQ0FMQTtBQUs0QjtBQUN0Q0MsTUFBQUEsVUFBVSxFQUFHLE1BQUlWLEtBTlA7QUFNNEI7QUFDdENXLE1BQUFBLFdBQVcsRUFBRyxNQUFJWCxLQVBSO0FBTzRCO0FBQ3RDWSxNQUFBQSxHQUFHLEVBQUcsQ0FSSTtBQVE0QjtBQUN0Q0MsTUFBQUEsR0FBRyxFQUFHLENBVEk7QUFTNEI7QUFDdENiLE1BQUFBLEtBQUssRUFBR0E7QUFWRSxLQUFkO0FBWUEsU0FBS2MsZUFBTCxHQUF1QixJQUFJMUUsZ0JBQUosRUFBdkI7QUFDQSxTQUFLMEUsZUFBTCxDQUFxQkMsWUFBckIsQ0FBa0NsRSxJQUFJLENBQUN3QyxXQUF2QyxFQUFtRDVDLEVBQUUsQ0FBQ3VFLEVBQUgsQ0FBTSxFQUFOLEVBQVMsR0FBVCxDQUFuRCxFQUFpRUMsYUFBYSxDQUFDQyxVQUEvRSxFQUEwRkMsa0JBQWtCLENBQUNDLEdBQTdHLEVBQWlIbkIsZ0JBQWpILEVBQWtJRyxPQUFsSSxFQUEwSTNELEVBQUUsQ0FBQ3VFLEVBQUgsQ0FBTSxDQUFOLEVBQVMsQ0FBVCxDQUExSSxFQWhEZ0IsQ0FpRGhCOztBQUNBLFFBQUlLLElBQUksR0FBR3RGLFFBQVEsQ0FBQ3VGLFdBQVQsQ0FBcUIsTUFBckIsRUFBNEJuRixlQUFlLENBQUNvRixZQUE1QyxDQUFYO0FBQ0EsU0FBS0MsT0FBTCxDQUFhSCxJQUFiLEVBQWtCLFVBQVNJLFdBQVQsRUFBcUI7QUFDbkMsV0FBSzFCLGFBQUwsQ0FBbUIyQixXQUFuQixHQUFrQ0QsV0FBbEM7QUFDSCxLQUZpQixDQUVoQkUsSUFGZ0IsQ0FFWCxJQUZXLENBQWxCLEVBbkRnQixDQXNEaEI7QUFDQTtBQUNBO0FBRUgsR0F0RmtDO0FBd0ZuQztBQUNBQyxFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFBQTs7QUFDcEIsUUFBSS9FLElBQUksR0FBRyxJQUFYO0FBQ0EsU0FBSzJCLFVBQUwsQ0FBZ0JxRCxFQUFoQixDQUFtQixVQUFuQixFQUE4QixLQUFLQyxpQkFBbkMsRUFBcUQsSUFBckQ7QUFDQSxTQUFLcEQsVUFBTCxDQUFnQm1ELEVBQWhCLENBQW1CLFVBQW5CLEVBQThCLEtBQUtFLGlCQUFuQyxFQUFxRCxJQUFyRDtBQUNBLFNBQUtwRCxRQUFMLENBQWNrRCxFQUFkLENBQWlCLFVBQWpCLEVBQTRCLEtBQUtHLGVBQWpDLEVBQWlELElBQWpEO0FBQ0EsU0FBS0MsY0FBTCxDQUFvQjVGLGVBQWUsQ0FBQzZGLHNCQUFwQyxFQUEyRCxVQUFVQyxJQUFWLEVBQWU7QUFDdEV0RixNQUFBQSxJQUFJLENBQUN1RixPQUFMLENBQWFELElBQWI7QUFDSCxLQUYwRCxDQUV6RFIsSUFGeUQsQ0FFcEQsSUFGb0QsQ0FBM0Q7QUFHQSxTQUFLTSxjQUFMLENBQW9CNUYsZUFBZSxDQUFDZ0csbUJBQXBDLEVBQXdELFlBQVc7QUFDL0R4RixNQUFBQSxJQUFJLENBQUN5Rix1QkFBTCxDQUE2QixJQUE3QjtBQUNILEtBRnVELENBRXREWCxJQUZzRCxDQUVqRCxJQUZpRCxDQUF4RDs7QUFSb0IsK0JBV1hZLENBWFc7QUFZaEIsVUFBSUMsUUFBUSxHQUFHM0YsSUFBSSxDQUFDeUMsU0FBTCxDQUFlZixjQUFmLENBQThCLGNBQWNnRSxDQUE1QyxDQUFmOztBQUNBLFVBQUlDLFFBQUosRUFBYTtBQUNUM0YsUUFBQUEsSUFBSSxDQUFDTyxTQUFMLENBQWVtRixDQUFmLElBQW9CQyxRQUFwQjtBQUNBQSxRQUFBQSxRQUFRLENBQUNYLEVBQVQsQ0FBWSxVQUFaLEVBQXVCLFlBQVU7QUFDN0IsZUFBS1ksZUFBTCxDQUFxQkYsQ0FBckI7O0FBQ0FHLFVBQUFBLEtBQUssQ0FBQ0MsZUFBTixDQUFzQixDQUF0QjtBQUNILFNBSEQsRUFHRSxLQUhGO0FBSUg7QUFuQmU7O0FBV3BCLFNBQUssSUFBSUosQ0FBQyxHQUFDLENBQVgsRUFBYUEsQ0FBQyxJQUFFLENBQWhCLEVBQWtCLEVBQUVBLENBQXBCLEVBQXNCO0FBQUEsWUFBYkEsQ0FBYTtBQVNyQjs7QUFDRCxTQUFLdkYsSUFBTCxDQUFVNEYsMkJBQVY7QUFDSCxHQS9Ha0M7QUFpSG5DO0FBQ0FDLEVBQUFBLE1BQU0sRUFBQyxnQkFBU0MsTUFBVCxFQUFnQixDQUV0QixDQXBIa0M7QUFzSG5DO0FBQ0FDLEVBQUFBLE1BQU0sRUFBQyxrQkFBVSxDQUVoQixDQXpIa0M7QUEwSG5DQyxFQUFBQSxXQTFIbUMsdUJBMEh0QkMsTUExSHNCLEVBMEhkO0FBQ2pCQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxLQUFuQjs7QUFDQSxRQUFHQSxNQUFILEVBQVU7QUFDTixXQUFLQyxJQUFMO0FBQ0gsS0FGRCxNQUVLO0FBQ0QsV0FBS0MsSUFBTDtBQUNILEtBTmdCLENBT2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0gsR0F0SWtDO0FBdUluQztBQUNBckIsRUFBQUEsaUJBeEltQywrQkF3SWhCO0FBQ2ZZLElBQUFBLEtBQUssQ0FBQ0MsZUFBTixDQUFzQixDQUF0QjtBQUNBLFFBQUk5RixJQUFJLEdBQUcsSUFBWDs7QUFDQSxRQUFJQSxJQUFJLENBQUNRLFdBQUwsSUFBb0JSLElBQUksQ0FBQ1EsV0FBTCxDQUFpQitGLEVBQXpDLEVBQTRDO0FBQ3hDLFdBQUtwRyxJQUFMLENBQVVxRywyQkFBVixDQUFzQ3hHLElBQUksQ0FBQ1EsV0FBTCxDQUFpQitGLEVBQXZELEVBQTJELENBQTNEO0FBQ0gsS0FGRCxNQUVLO0FBQ0RFLE1BQUFBLE9BQU8sQ0FBQyxVQUFELENBQVA7QUFDSDtBQUNKLEdBaEprQztBQWlKbkM7QUFDQXZCLEVBQUFBLGlCQWxKbUMsK0JBa0pkO0FBQ2pCVyxJQUFBQSxLQUFLLENBQUNDLGVBQU4sQ0FBc0IsQ0FBdEI7QUFDQSxRQUFJOUYsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSUEsSUFBSSxDQUFDa0IsaUJBQUwsSUFBMEJsQixJQUFJLENBQUNrQixpQkFBTCxJQUEwQixDQUF4RCxFQUEwRDtBQUN0RGxCLE1BQUFBLElBQUksQ0FBQ3FCLGlCQUFMLEdBQXlCckIsSUFBSSxDQUFDa0IsaUJBQTlCO0FBQ0EsV0FBS2YsSUFBTCxDQUFVcUcsMkJBQVYsQ0FBc0N4RyxJQUFJLENBQUNrQixpQkFBM0MsRUFBOEQsQ0FBOUQ7QUFDSDtBQUNKLEdBekprQztBQTBKbkM7QUFDQWlFLEVBQUFBLGVBM0ptQyw2QkEySmxCO0FBQ2JVLElBQUFBLEtBQUssQ0FBQ0MsZUFBTixDQUFzQixDQUF0QjtBQUNBLFFBQUk5RixJQUFJLEdBQUcsSUFBWDs7QUFDQSxRQUFJQSxJQUFJLENBQUNrQixpQkFBTCxJQUEwQmxCLElBQUksQ0FBQ2tCLGlCQUFMLElBQTBCLENBQXhELEVBQTJEO0FBQ3ZELFdBQUtmLElBQUwsQ0FBVXFHLDJCQUFWLENBQXNDeEcsSUFBSSxDQUFDa0IsaUJBQTNDLEVBQThELENBQTlEO0FBQ0g7QUFDSixHQWpLa0M7QUFrS25DcUUsRUFBQUEsT0FsS21DLG1CQWtLM0JELElBbEsyQixFQWtLdEI7QUFDVCxRQUFJdEYsSUFBSSxHQUFHLElBQVg7QUFDQUEsSUFBQUEsSUFBSSxDQUFDc0YsSUFBTCxHQUFZQSxJQUFJLElBQUksRUFBcEI7QUFDQXRGLElBQUFBLElBQUksQ0FBQ2tCLGlCQUFMLEdBQXlCb0UsSUFBSSxDQUFDb0IsVUFBTCxJQUFtQixDQUE1QztBQUNBMUcsSUFBQUEsSUFBSSxDQUFDbUIsc0JBQUwsR0FBOEJtRSxJQUFJLENBQUNxQixlQUFMLElBQXdCLENBQXREO0FBQ0EzRyxJQUFBQSxJQUFJLENBQUNvQixnQkFBTCxHQUF3QmtFLElBQUksQ0FBQ3NCLFdBQUwsSUFBb0IsRUFBNUM7QUFFQTVHLElBQUFBLElBQUksQ0FBQ3dDLFdBQUwsQ0FBaUJaLE1BQWpCLEdBQTJCNUIsSUFBSSxDQUFDa0IsaUJBQUwsSUFBMEIsQ0FBckQ7QUFDQWxCLElBQUFBLElBQUksQ0FBQzZCLFVBQUwsQ0FBZ0JELE1BQWhCLEdBQTBCNUIsSUFBSSxDQUFDa0IsaUJBQUwsSUFBMEIsQ0FBcEQ7QUFDQWxCLElBQUFBLElBQUksQ0FBQzhCLFFBQUwsQ0FBY0YsTUFBZCxHQUF3QjVCLElBQUksQ0FBQ2tCLGlCQUFMLElBQTBCLENBQWxEOztBQUNBLFFBQUlsQixJQUFJLENBQUNrQixpQkFBTCxJQUEwQixDQUE5QixFQUFpQztBQUM3QixVQUFJLENBQUNsQixJQUFJLENBQUM2RyxTQUFWLEVBQW9CO0FBQ2hCN0csUUFBQUEsSUFBSSxDQUFDeUMsU0FBTCxDQUFlZixjQUFmLENBQThCLFlBQTlCLEVBQTRDb0YsWUFBNUMsQ0FBeURsSCxFQUFFLENBQUNtSCxNQUE1RCxFQUFvRUMsU0FBcEUsR0FBZ0YsSUFBaEY7O0FBQ0FoSCxRQUFBQSxJQUFJLENBQUM0RixlQUFMLENBQXFCLENBQXJCO0FBQ0gsT0FIRCxNQUdLO0FBQ0Q1RixRQUFBQSxJQUFJLENBQUNpSCxlQUFMO0FBQ0g7QUFDSixLQVBELE1BT0s7QUFDRGpILE1BQUFBLElBQUksQ0FBQzZHLFNBQUwsR0FBaUIsSUFBakI7QUFDQTdHLE1BQUFBLElBQUksQ0FBQ1EsV0FBTCxHQUFtQixFQUFuQjtBQUNBUixNQUFBQSxJQUFJLENBQUNVLGFBQUwsR0FBcUJyQixTQUFTLENBQUNzQixRQUFWLENBQW1CQyxLQUF4Qzs7QUFDQSxVQUFJWixJQUFJLENBQUNTLGFBQVQsRUFBdUI7QUFDbkJULFFBQUFBLElBQUksQ0FBQ1MsYUFBTCxDQUFtQnlHLFdBQW5CLENBQStCLEtBQS9CO0FBQ0FsSCxRQUFBQSxJQUFJLENBQUNTLGFBQUwsR0FBcUIsSUFBckI7QUFDSDtBQUNKOztBQUNEVCxJQUFBQSxJQUFJLENBQUNtSCxnQkFBTDtBQUNILEdBN0xrQztBQThMbkM7QUFDQUYsRUFBQUEsZUEvTG1DLDZCQStMbEI7QUFDYixRQUFJakgsSUFBSSxHQUFHLElBQVg7QUFDQUEsSUFBQUEsSUFBSSxDQUFDb0gsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFFBQUlDLGFBQWEsR0FBRzVILGNBQWMsQ0FBQ1csV0FBZixHQUE2QkUsUUFBN0IsR0FBd0NnSCxlQUF4QyxFQUFwQjtBQUNBLFFBQUlDLFNBQVMsR0FBR2xJLFNBQVMsQ0FBQ3NCLFFBQVYsQ0FBbUJDLEtBQW5DOztBQUNBLFFBQUlaLElBQUksQ0FBQzZHLFNBQUwsSUFBa0J2SCxlQUFlLENBQUNrSSxpQkFBaEIsQ0FBa0NDLEdBQXhELEVBQTREO0FBQ3hERixNQUFBQSxTQUFTLEdBQUdsSSxTQUFTLENBQUNzQixRQUFWLENBQW1CQyxLQUEvQjtBQUNILEtBRkQsTUFFTSxJQUFJWixJQUFJLENBQUM2RyxTQUFMLElBQWtCdkgsZUFBZSxDQUFDa0ksaUJBQWhCLENBQWtDRSxLQUF4RCxFQUE4RDtBQUNoRUgsTUFBQUEsU0FBUyxHQUFHbEksU0FBUyxDQUFDc0IsUUFBVixDQUFtQmdILE1BQS9CO0FBQ0gsS0FGSyxNQUVBLElBQUkzSCxJQUFJLENBQUM2RyxTQUFMLElBQWtCdkgsZUFBZSxDQUFDa0ksaUJBQWhCLENBQWtDSSxJQUF4RCxFQUE2RDtBQUMvREwsTUFBQUEsU0FBUyxHQUFHbEksU0FBUyxDQUFDc0IsUUFBVixDQUFtQmtILEtBQS9CO0FBQ0gsS0FGSyxNQUVBLElBQUk3SCxJQUFJLENBQUM2RyxTQUFMLElBQWtCdkgsZUFBZSxDQUFDa0ksaUJBQWhCLENBQWtDTSxJQUF4RCxFQUE2RDtBQUMvRFAsTUFBQUEsU0FBUyxHQUFHbEksU0FBUyxDQUFDc0IsUUFBVixDQUFtQm9ILEtBQS9CO0FBQ0g7O0FBQ0QvSCxJQUFBQSxJQUFJLENBQUNVLGFBQUwsR0FBcUI2RyxTQUFyQjs7QUFFQSxTQUFLLElBQUlTLENBQVQsSUFBY1gsYUFBYSxJQUFJLEVBQS9CLEVBQWtDO0FBQUM7QUFDL0IsVUFBSVksT0FBTyxHQUFHWixhQUFhLENBQUNXLENBQUQsQ0FBM0I7O0FBQ0EsVUFBSUMsT0FBTyxDQUFDQyxJQUFSLElBQWdCLENBQWhCLElBQXFCRCxPQUFPLENBQUNDLElBQVIsSUFBZ0IsQ0FBekMsRUFBMkM7QUFDdkMsWUFBSUMsT0FBTyxHQUFHbkksSUFBSSxDQUFDb0ksaUJBQUwsQ0FBdUJILE9BQU8sQ0FBQzFCLEVBQS9CLENBQWQ7O0FBQ0EsWUFBSWdCLFNBQVMsSUFBSWxJLFNBQVMsQ0FBQ3NCLFFBQVYsQ0FBbUJDLEtBQXBDLEVBQTBDO0FBQ3RDLGNBQUlxSCxPQUFPLENBQUNWLFNBQVIsSUFBcUJsSSxTQUFTLENBQUNzQixRQUFWLENBQW1CZ0gsTUFBeEMsSUFDSk0sT0FBTyxDQUFDVixTQUFSLElBQXFCbEksU0FBUyxDQUFDc0IsUUFBVixDQUFtQmtILEtBRHBDLElBRUpJLE9BQU8sQ0FBQ1YsU0FBUixJQUFxQmxJLFNBQVMsQ0FBQ3NCLFFBQVYsQ0FBbUJvSCxLQUZ4QyxFQUU4QztBQUMxQyxnQkFBSU0sU0FBUyxHQUFHeEMsS0FBSyxDQUFDeUMsUUFBTixDQUFlTCxPQUFmLENBQWhCO0FBQ0FJLFlBQUFBLFNBQVMsQ0FBQ0UsU0FBVixHQUFzQkosT0FBdEI7QUFDQW5JLFlBQUFBLElBQUksQ0FBQ29ILGFBQUwsQ0FBbUJvQixJQUFuQixDQUF3QkgsU0FBeEIsRUFIMEMsQ0FJMUM7QUFDSDtBQUNKLFNBVEQsTUFTTSxJQUFJSixPQUFPLENBQUNWLFNBQVIsSUFBcUJBLFNBQXpCLEVBQW9DO0FBQ3RDLGNBQUljLFVBQVMsR0FBR3hDLEtBQUssQ0FBQ3lDLFFBQU4sQ0FBZUwsT0FBZixDQUFoQjs7QUFDQUksVUFBQUEsVUFBUyxDQUFDRSxTQUFWLEdBQXNCSixPQUF0QjtBQUNBbkksVUFBQUEsSUFBSSxDQUFDb0gsYUFBTCxDQUFtQm9CLElBQW5CLENBQXdCSCxVQUF4QixFQUhzQyxDQUl0QztBQUNIO0FBRUo7QUFDSjs7QUFDRCxTQUFLakIsYUFBTCxDQUFtQnFCLElBQW5CLENBQXdCLFVBQVVDLElBQVYsRUFBZ0JDLElBQWhCLEVBQXNCO0FBQzFDLFVBQUlDLFNBQVMsR0FBRzVJLElBQUksQ0FBQ29JLGlCQUFMLENBQXVCTSxJQUFJLENBQUNuQyxFQUE1QixDQUFoQjtBQUNBLFVBQUlzQyxTQUFTLEdBQUc3SSxJQUFJLENBQUNvSSxpQkFBTCxDQUF1Qk8sSUFBSSxDQUFDcEMsRUFBNUIsQ0FBaEI7O0FBQ0EsVUFBSXFDLFNBQVMsSUFBSSxDQUFDQyxTQUFsQixFQUE2QjtBQUN6QixlQUFRLENBQVI7QUFDSCxPQUZELE1BRU0sSUFBSSxDQUFDRCxTQUFELElBQWNDLFNBQWxCLEVBQTRCO0FBQzlCLGVBQVEsQ0FBQyxDQUFUO0FBQ0gsT0FGSyxNQUVBLElBQUlILElBQUksQ0FBQ1IsSUFBTCxJQUFhUyxJQUFJLENBQUNULElBQXRCLEVBQTRCO0FBQzlCLFlBQUlRLElBQUksQ0FBQ25CLFNBQUwsSUFBa0JvQixJQUFJLENBQUNwQixTQUEzQixFQUFxQztBQUNqQyxpQkFBT29CLElBQUksQ0FBQ0csR0FBTCxHQUFXSixJQUFJLENBQUNJLEdBQXZCO0FBQ0gsU0FGRCxNQUVLO0FBQ0QsaUJBQU9ILElBQUksQ0FBQ3BCLFNBQUwsR0FBaUJtQixJQUFJLENBQUNuQixTQUE3QjtBQUNIO0FBQ0osT0FOSyxNQU9GO0FBQ0EsZUFBT29CLElBQUksQ0FBQ1QsSUFBTCxHQUFZUSxJQUFJLENBQUNSLElBQXhCO0FBQ0g7QUFDSixLQWpCRDs7QUFtQkEsUUFBSWxJLElBQUksQ0FBQ1MsYUFBVCxFQUF1QjtBQUNuQlQsTUFBQUEsSUFBSSxDQUFDUyxhQUFMLENBQW1CeUcsV0FBbkIsQ0FBK0IsS0FBL0I7QUFDSDs7QUFDRCxRQUFJNkIsVUFBVSxHQUFHO0FBQUM1RixNQUFBQSxLQUFLLEVBQUcsSUFBVDtBQUFlNkYsTUFBQUEsU0FBUyxFQUFHLElBQTNCO0FBQWlDQyxNQUFBQSxTQUFTLEVBQUc1SixTQUFTLENBQUM2SixrQkFBVixDQUE2QkM7QUFBMUUsS0FBakI7QUFDQW5KLElBQUFBLElBQUksQ0FBQ2lFLGVBQUwsQ0FBcUJzQixPQUFyQixDQUE2QnZGLElBQUksQ0FBQ29ILGFBQWxDLEVBQWdELFVBQVNnQyxJQUFULEVBQWM7QUFDMUQsV0FBS0MsZUFBTCxDQUFxQkQsSUFBckI7QUFDSCxLQUYrQyxDQUU5Q3RFLElBRjhDLENBRXpDLElBRnlDLENBQWhELEVBRWFpRSxVQUZiO0FBR0EvSSxJQUFBQSxJQUFJLENBQUNpRSxlQUFMLENBQXFCcUYsY0FBckIsQ0FBb0MsWUFBVztBQUMzQyxVQUFJdEosSUFBSSxDQUFDUSxXQUFMLElBQW9CcUYsS0FBSyxDQUFDMEQsSUFBTixDQUFXdkosSUFBSSxDQUFDUSxXQUFoQixDQUFwQixJQUFvRFIsSUFBSSxDQUFDVSxhQUFMLElBQW9CLElBQTVFLEVBQWtGO0FBQzlFO0FBQ0EsWUFBSVYsSUFBSSxDQUFDUSxXQUFMLENBQWlCK0csU0FBakIsSUFBOEJ2SCxJQUFJLENBQUNVLGFBQW5DLElBQW9EVixJQUFJLENBQUNVLGFBQUwsSUFBc0JyQixTQUFTLENBQUNzQixRQUFWLENBQW1CQyxLQUFqRyxFQUF3RztBQUNwRyxjQUFJNEksSUFBSSxHQUFHeEosSUFBSSxDQUFDaUUsZUFBTCxDQUFxQndGLFdBQXJCLEVBQVg7O0FBQ0EsZUFBSSxJQUFJekIsRUFBQyxHQUFDLENBQVYsRUFBWUEsRUFBQyxHQUFDd0IsSUFBSSxDQUFDRSxNQUFuQixFQUEwQixFQUFFMUIsRUFBNUIsRUFBOEI7QUFDMUIsZ0JBQUkyQixDQUFDLEdBQUdILElBQUksQ0FBQ3hCLEVBQUQsQ0FBWjtBQUNBLGdCQUFJMUMsSUFBSSxHQUFHcUUsQ0FBQyxDQUFDQyxPQUFGLEVBQVg7O0FBQ0EsZ0JBQUl0RSxJQUFJLENBQUNpQixFQUFMLElBQVd2RyxJQUFJLENBQUNRLFdBQUwsQ0FBaUIrRixFQUFoQyxFQUFtQztBQUMvQnZHLGNBQUFBLElBQUksQ0FBQ3FKLGVBQUwsQ0FBcUJNLENBQXJCOztBQUNBO0FBQ0g7QUFDSjtBQUNKO0FBQ0osT0FiRCxNQWFNLElBQUczSixJQUFJLENBQUNxQixpQkFBTCxJQUEwQnJCLElBQUksQ0FBQ3FCLGlCQUFMLElBQTBCLENBQXZELEVBQTBEO0FBQUU7QUFDOUQsWUFBSW1JLEtBQUksR0FBR3hKLElBQUksQ0FBQ2lFLGVBQUwsQ0FBcUJ3RixXQUFyQixFQUFYOztBQUNBLGFBQUksSUFBSXpCLEdBQUMsR0FBQyxDQUFWLEVBQVlBLEdBQUMsR0FBQ3dCLEtBQUksQ0FBQ0UsTUFBbkIsRUFBMEIsRUFBRTFCLEdBQTVCLEVBQThCO0FBQzFCLGNBQUkyQixFQUFDLEdBQUdILEtBQUksQ0FBQ3hCLEdBQUQsQ0FBWjs7QUFDQSxjQUFJMUMsS0FBSSxHQUFHcUUsRUFBQyxDQUFDQyxPQUFGLEVBQVg7O0FBQ0EsY0FBSXRFLEtBQUksQ0FBQ2lCLEVBQUwsSUFBV3ZHLElBQUksQ0FBQ3FCLGlCQUFwQixFQUFzQztBQUNsQ3JCLFlBQUFBLElBQUksQ0FBQ3FKLGVBQUwsQ0FBcUJNLEVBQXJCOztBQUNBM0osWUFBQUEsSUFBSSxDQUFDaUUsZUFBTCxDQUFxQjRGLFVBQXJCLENBQWdDakssRUFBRSxDQUFDdUUsRUFBSCxDQUFNLEVBQUU2RCxHQUFDLEdBQUMsQ0FBSixLQUFRLE9BQUssR0FBTCxHQUFTLEVBQWpCLENBQU4sRUFBNEIsQ0FBNUIsQ0FBaEMsRUFBZ0UsSUFBaEU7QUFDQTtBQUNIO0FBQ0o7O0FBQ0RoSSxRQUFBQSxJQUFJLENBQUNxQixpQkFBTCxHQUF5QixDQUF6QjtBQUNIO0FBQ0osS0EzQm1DLENBMkJsQ3lELElBM0JrQyxDQTJCN0IsSUEzQjZCLENBQXBDO0FBNEJILEdBM1JrQztBQTRSbkN1RSxFQUFBQSxlQTVSbUMsMkJBNFJuQlMsSUE1Um1CLEVBNFJkO0FBQ2pCLFFBQUk5SixJQUFJLEdBQUcsSUFBWDtBQUNBLFFBQUkrSixFQUFFLEdBQUdELElBQUksQ0FBQ0YsT0FBTCxFQUFUOztBQUNBLFFBQUlHLEVBQUUsQ0FBQ0MsaUJBQUgsQ0FBcUIsSUFBckIsQ0FBSixFQUErQjtBQUMzQjtBQUNIOztBQUNELFFBQUloSyxJQUFJLENBQUNTLGFBQVQsRUFBd0I7QUFDcEJULE1BQUFBLElBQUksQ0FBQ1MsYUFBTCxDQUFtQnlHLFdBQW5CLENBQStCLEtBQS9CO0FBQ0g7O0FBQ0Q0QyxJQUFBQSxJQUFJLENBQUM1QyxXQUFMLENBQWlCLElBQWpCO0FBQ0FsSCxJQUFBQSxJQUFJLENBQUNTLGFBQUwsR0FBcUJxSixJQUFyQjtBQUNBOUosSUFBQUEsSUFBSSxDQUFDUSxXQUFMLEdBQW1CdUosRUFBbkI7QUFFQSxRQUFJRSxTQUFTLEdBQUdGLEVBQUUsQ0FBQzdCLElBQW5CO0FBQ0EsUUFBSWdDLFNBQVMsR0FBRyxFQUFoQjtBQUNBLFFBQUlDLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxpQkFBUCxDQUF5QkMscUJBQXpCLENBQStDLGdCQUFnQkwsU0FBL0QsQ0FBbEI7O0FBQ0EsUUFBSUUsV0FBVyxJQUFJQSxXQUFXLENBQUNJLEdBQS9CLEVBQW9DO0FBQ2hDLFVBQUlDLEdBQUcsR0FBR0wsV0FBVyxDQUFDSSxHQUFaLENBQWdCLENBQWhCLEVBQW1CLENBQW5CLENBQVY7QUFDQSxVQUFJRSxHQUFHLEdBQUdOLFdBQVcsQ0FBQ0ksR0FBWixDQUFnQixDQUFoQixFQUFtQixDQUFuQixDQUFWO0FBQ0EsVUFBSUcsV0FBVyxHQUFHN0UsS0FBSyxDQUFDOEUsYUFBTixDQUFvQkgsR0FBcEIsQ0FBbEI7O0FBQ0EsVUFBR0UsV0FBSCxFQUFpQjtBQUNiUixRQUFBQSxTQUFTLEdBQUdPLEdBQUcsR0FBRSxLQUFqQjtBQUNIO0FBQ0o7O0FBQ0R6SyxJQUFBQSxJQUFJLENBQUNxQyxTQUFMLENBQWV1SSxNQUFmLEdBQXdCVixTQUF4QjtBQUNBbEssSUFBQUEsSUFBSSxDQUFDbUgsZ0JBQUw7QUFDSCxHQXRUa0M7QUF1VG5DO0FBQ0FBLEVBQUFBLGdCQXhUbUMsOEJBd1RqQjtBQUNkLFFBQUluSCxJQUFJLEdBQUcsSUFBWCxDQURjLENBRWQ7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBLFFBQUlBLElBQUksQ0FBQ1EsV0FBTCxJQUFvQnFGLEtBQUssQ0FBQzBELElBQU4sQ0FBV3ZKLElBQUksQ0FBQ1EsV0FBaEIsQ0FBcEIsSUFBb0RSLElBQUksQ0FBQ2tCLGlCQUFMLElBQTBCLENBQWxGLEVBQXFGO0FBQ2pGLFVBQUkySixZQUFZLEdBQUcsRUFBbkIsQ0FEaUYsQ0FDM0Q7O0FBQ3RCLFVBQUk3SyxJQUFJLENBQUNrQixpQkFBTCxJQUEwQixDQUE5QixFQUFpQztBQUM3QjJKLFFBQUFBLFlBQVksR0FBRzdLLElBQUksQ0FBQ1EsV0FBcEI7QUFDQVIsUUFBQUEsSUFBSSxDQUFDMkIsVUFBTCxDQUFnQkMsTUFBaEIsR0FBeUIsSUFBekI7QUFDQTVCLFFBQUFBLElBQUksQ0FBQzhLLHVCQUFMLENBQTZCLElBQTdCO0FBQ0gsT0FKRCxNQUlLO0FBQ0RELFFBQUFBLFlBQVksR0FBR3BMLGNBQWMsQ0FBQ1csV0FBZixHQUE2QkUsUUFBN0IsR0FBd0N5SyxXQUF4QyxDQUFvRC9LLElBQUksQ0FBQ2tCLGlCQUF6RCxDQUFmO0FBQ0FsQixRQUFBQSxJQUFJLENBQUMyQixVQUFMLENBQWdCQyxNQUFoQixHQUF5QixLQUF6QjtBQUNBNUIsUUFBQUEsSUFBSSxDQUFDOEssdUJBQUwsQ0FBNkIsS0FBN0I7QUFDSDs7QUFDRCxVQUFJRCxZQUFZLEtBQUtoRixLQUFLLENBQUMwRCxJQUFOLENBQVdzQixZQUFYLEtBQTRCaEYsS0FBSyxDQUFDMEQsSUFBTixDQUFXc0IsWUFBWCxLQUE0QixDQUE3RCxDQUFoQixFQUFnRjtBQUM1RSxZQUFHN0ssSUFBSSxDQUFDZ0wsU0FBTCxJQUFrQixJQUFyQixFQUEwQjtBQUN0QmhMLFVBQUFBLElBQUksQ0FBQ2dMLFNBQUwsR0FBaUIsSUFBSXRMLFFBQUosRUFBakI7QUFDQU0sVUFBQUEsSUFBSSxDQUFDZ0wsU0FBTCxDQUFlQyxTQUFmLENBQXlCakwsSUFBSSxDQUFDK0IsVUFBOUI7QUFDQS9CLFVBQUFBLElBQUksQ0FBQ2dMLFNBQUwsQ0FBZUUsSUFBZixDQUFvQkMsV0FBcEIsQ0FBZ0N2TCxFQUFFLENBQUN1RSxFQUFILENBQU0sR0FBTixFQUFXLEdBQVgsQ0FBaEM7QUFDSDs7QUFDRG5FLFFBQUFBLElBQUksQ0FBQ2dMLFNBQUwsQ0FBZXpGLE9BQWYsQ0FBdUI3RixRQUFRLENBQUMwTCxJQUFULENBQWNDLE9BQXJDLEVBQThDUixZQUE5QyxFQUE0RFMsWUFBWSxDQUFDakYsSUFBekUsRUFBK0UsSUFBL0UsRUFBb0YsSUFBcEY7QUFFQSxZQUFJa0YsUUFBUSxHQUFHck0sUUFBUSxDQUFDc00sY0FBVCxDQUF3QlgsWUFBWSxDQUFDdEQsU0FBckMsQ0FBZjtBQUNBLFlBQUkvQyxJQUFJLEdBQUd0RixRQUFRLENBQUN1TSxhQUFULENBQXVCLFFBQXZCLEVBQWdDRixRQUFoQyxDQUFYO0FBQ0F2TCxRQUFBQSxJQUFJLENBQUM4QyxhQUFMLENBQW1CK0IsV0FBbkIsR0FBaUMsSUFBakM7QUFDQSxhQUFLRixPQUFMLENBQWFILElBQWIsRUFBa0IsVUFBU0ksV0FBVCxFQUFxQjtBQUNuQzVFLFVBQUFBLElBQUksQ0FBQzRDLFlBQUwsQ0FBa0JpQyxXQUFsQixHQUFnQ0QsV0FBaEM7QUFDQTVFLFVBQUFBLElBQUksQ0FBQzhDLGFBQUwsQ0FBbUIrQixXQUFuQixHQUFpQ0QsV0FBakM7QUFDSCxTQUhpQixDQUdoQkUsSUFIZ0IsQ0FHWCxJQUhXLENBQWxCO0FBSUE5RSxRQUFBQSxJQUFJLENBQUMwQyxlQUFMLENBQXFCa0ksTUFBckIsR0FBOEJDLFlBQVksQ0FBQ2EsSUFBM0M7QUFDQTFMLFFBQUFBLElBQUksQ0FBQ2dDLGFBQUwsQ0FBbUI0SSxNQUFuQixHQUE0QkMsWUFBWSxDQUFDL0IsR0FBekM7QUFDQTlJLFFBQUFBLElBQUksQ0FBQ29DLGNBQUwsQ0FBb0J3SSxNQUFwQixHQUE2QkMsWUFBWSxDQUFDL0IsR0FBMUM7QUFDQSxZQUFJNkMsVUFBVSxHQUFHLE1BQWpCOztBQUNBLFlBQUkzTCxJQUFJLENBQUNtQixzQkFBTCxJQUErQixDQUFuQyxFQUFzQztBQUNsQyxjQUFJeUssV0FBVyxHQUFHeEIsTUFBTSxDQUFDeUIsWUFBUCxDQUFvQkMsaUJBQXBCLENBQXNDOUwsSUFBSSxDQUFDbUIsc0JBQTNDLENBQWxCO0FBQ0EsY0FBSTRLLGVBQWUsR0FBRztBQUFDdkIsWUFBQUEsR0FBRyxFQUFHeEssSUFBSSxDQUFDbUIsc0JBQVo7QUFBb0MrRyxZQUFBQSxJQUFJLEVBQUcyQyxZQUFZLENBQUMzQztBQUF4RCxXQUF0Qjs7QUFDQSxjQUFHbEksSUFBSSxDQUFDZ00sVUFBTCxJQUFtQixJQUF0QixFQUEyQjtBQUN2QmhNLFlBQUFBLElBQUksQ0FBQ2dNLFVBQUwsR0FBa0IsSUFBSXRNLFFBQUosRUFBbEI7QUFDQU0sWUFBQUEsSUFBSSxDQUFDZ00sVUFBTCxDQUFnQmYsU0FBaEIsQ0FBMEJqTCxJQUFJLENBQUNtQyxXQUEvQjtBQUNBbkMsWUFBQUEsSUFBSSxDQUFDZ00sVUFBTCxDQUFnQmQsSUFBaEIsQ0FBcUJDLFdBQXJCLENBQWlDdkwsRUFBRSxDQUFDdUUsRUFBSCxDQUFNLEdBQU4sRUFBVyxHQUFYLENBQWpDO0FBQ0g7O0FBQ0RuRSxVQUFBQSxJQUFJLENBQUNnTSxVQUFMLENBQWdCZCxJQUFoQixDQUFxQnRKLE1BQXJCLEdBQThCLElBQTlCO0FBQ0E1QixVQUFBQSxJQUFJLENBQUNnTSxVQUFMLENBQWdCekcsT0FBaEIsQ0FBd0I3RixRQUFRLENBQUMwTCxJQUFULENBQWNDLE9BQXRDLEVBQThDVSxlQUE5QyxFQUE4RFQsWUFBWSxDQUFDakYsSUFBM0UsRUFBaUYsSUFBakYsRUFBc0YsSUFBdEY7O0FBQ0EsY0FBSXVGLFdBQVcsSUFBSUEsV0FBVyxDQUFDRixJQUEvQixFQUFvQztBQUNoQ0MsWUFBQUEsVUFBVSxHQUFHQyxXQUFXLENBQUNGLElBQXpCO0FBQ0g7QUFDSixTQWJELE1BYUs7QUFDREMsVUFBQUEsVUFBVSxHQUFHLE1BQWI7O0FBQ0EsY0FBRzNMLElBQUksQ0FBQ2dNLFVBQVIsRUFBbUI7QUFDZmhNLFlBQUFBLElBQUksQ0FBQ2dNLFVBQUwsQ0FBZ0JkLElBQWhCLENBQXFCdEosTUFBckIsR0FBOEIsS0FBOUI7QUFDSDtBQUNKOztBQUNENUIsUUFBQUEsSUFBSSxDQUFDMkMsZ0JBQUwsQ0FBc0JpSSxNQUF0QixHQUErQmUsVUFBL0I7O0FBRUEsYUFBSyxJQUFJakcsQ0FBVCxJQUFjMUYsSUFBSSxDQUFDYSxZQUFuQixFQUFnQztBQUM1QixjQUFJcUgsSUFBSSxHQUFHbEksSUFBSSxDQUFDYSxZQUFMLENBQWtCNkUsQ0FBbEIsRUFBcUJ3RixJQUFoQztBQUNBaEQsVUFBQUEsSUFBSSxDQUFDdEcsTUFBTCxHQUFjLEtBQWQ7QUFDSDs7QUFDRCxhQUFLLElBQUk4RCxFQUFULElBQWMxRixJQUFJLENBQUNjLFlBQW5CLEVBQWdDO0FBQzVCLGNBQUlvSCxLQUFJLEdBQUdsSSxJQUFJLENBQUNjLFlBQUwsQ0FBa0I0RSxFQUFsQixFQUFxQndGLElBQWhDO0FBQ0FoRCxVQUFBQSxLQUFJLENBQUN0RyxNQUFMLEdBQWMsS0FBZDtBQUNIOztBQUNELGFBQUssSUFBSThELEdBQVQsSUFBYzFGLElBQUksQ0FBQ2UsYUFBbkIsRUFBaUM7QUFDN0IsY0FBSW1ILE1BQUksR0FBR2xJLElBQUksQ0FBQ2UsYUFBTCxDQUFtQjJFLEdBQW5CLEVBQXNCd0YsSUFBakM7QUFDQWhELFVBQUFBLE1BQUksQ0FBQ3RHLE1BQUwsR0FBYyxLQUFkO0FBQ0g7O0FBQ0QsYUFBSyxJQUFJOEQsR0FBVCxJQUFjMUYsSUFBSSxDQUFDZ0IsYUFBbkIsRUFBaUM7QUFDN0IsY0FBSWtILE1BQUksR0FBR2xJLElBQUksQ0FBQ2dCLGFBQUwsQ0FBbUIwRSxHQUFuQixFQUFzQndGLElBQWpDO0FBQ0FoRCxVQUFBQSxNQUFJLENBQUN0RyxNQUFMLEdBQWMsS0FBZDtBQUNIOztBQUNELFlBQUk1QixJQUFJLENBQUNpTSxXQUFULEVBQXNCO0FBQ2xCak0sVUFBQUEsSUFBSSxDQUFDaU0sV0FBTCxDQUFpQmYsSUFBakIsQ0FBc0J0SixNQUF0QixHQUErQixLQUEvQjtBQUNIOztBQUNELFlBQUk1QixJQUFJLENBQUNrTSxZQUFULEVBQXNCO0FBQ2xCbE0sVUFBQUEsSUFBSSxDQUFDa00sWUFBTCxDQUFrQmhCLElBQWxCLENBQXVCdEosTUFBdkIsR0FBZ0MsS0FBaEM7QUFDSDs7QUFFRCxZQUFJcUksU0FBUyxHQUFHWSxZQUFZLENBQUMzQyxJQUE3Qjs7QUFDQSxZQUFJaUUsTUFBTSxHQUFHLFNBQVRBLE1BQVMsQ0FBU0MsVUFBVCxFQUFxQkMsR0FBckIsRUFBMEJDLFNBQTFCLEVBQXFDQyxXQUFyQyxFQUFpRDtBQUFBOztBQUMxRCxjQUFJQyxRQUFRLEdBQUdsTixlQUFlLENBQUNtTixZQUFoQixDQUE2QkwsVUFBN0IsS0FBNEMsRUFBM0Q7O0FBQ0EsZUFBSyxJQUFJMUcsR0FBQyxHQUFDLENBQVgsRUFBYUEsR0FBQyxHQUFDMEcsVUFBZixFQUEwQixFQUFFMUcsR0FBNUIsRUFBOEI7QUFDMUIsZ0JBQUksQ0FBQzRHLFNBQVMsQ0FBQzVHLEdBQUQsQ0FBZCxFQUFtQjtBQUFBO0FBQ2Ysb0JBQUl3QyxJQUFJLEdBQUdyQyxLQUFLLENBQUM2RyxXQUFOLENBQWtCSCxXQUFsQixFQUErQkYsR0FBL0IsRUFBb0MsQ0FBcEMsRUFBdUMsR0FBdkMsRUFBNEN6TSxFQUFFLENBQUN1RSxFQUFILENBQU0sR0FBTixFQUFXLEdBQVgsQ0FBNUMsRUFBNkQsSUFBN0QsQ0FBWDtBQUNBbkUsZ0JBQUFBLElBQUksQ0FBQzJFLE9BQUwsQ0FBYTBILEdBQWIsRUFBaUIsVUFBU3pILFdBQVQsRUFBcUI7QUFDbENzRCxrQkFBQUEsSUFBSSxDQUFDckQsV0FBTCxHQUFvQkQsV0FBcEI7QUFDSCxpQkFGZ0IsQ0FFZkUsSUFGZSxDQUVWLE1BRlUsQ0FBakI7QUFHQXdILGdCQUFBQSxTQUFTLENBQUM1RyxHQUFELENBQVQsR0FBZXdDLElBQWY7QUFMZTtBQU1sQjs7QUFDRG9FLFlBQUFBLFNBQVMsQ0FBQzVHLEdBQUQsQ0FBVCxDQUFhd0YsSUFBYixDQUFrQnRKLE1BQWxCLEdBQTJCLElBQTNCO0FBQ0EsZ0JBQUkrSyxLQUFLLEdBQUdILFFBQVEsQ0FBQzlHLEdBQUQsQ0FBcEI7O0FBQ0EsZ0JBQUlpSCxLQUFKLEVBQVU7QUFDTkwsY0FBQUEsU0FBUyxDQUFDNUcsR0FBRCxDQUFULENBQWF3RixJQUFiLENBQWtCMEIsQ0FBbEIsR0FBc0JELEtBQXRCO0FBQ0g7QUFDSjtBQUNKLFNBaEJEOztBQWtCQSxZQUFJMUMsU0FBUyxHQUFHLENBQVosSUFBaUJBLFNBQVMsSUFBSSxDQUFsQyxFQUFxQztBQUNqQyxjQUFJb0MsR0FBRyxHQUFHbk4sUUFBUSxDQUFDdU0sYUFBVCxDQUF1QixRQUF2QixFQUFnQyxjQUFoQyxDQUFWOztBQUNBVSxVQUFBQSxNQUFNLENBQUNsQyxTQUFELEVBQVlvQyxHQUFaLEVBQWlCck0sSUFBSSxDQUFDYSxZQUF0QixFQUFvQ2IsSUFBSSxDQUFDK0IsVUFBekMsQ0FBTjs7QUFDQW9LLFVBQUFBLE1BQU0sQ0FBQ2xDLFNBQUQsRUFBWW9DLEdBQVosRUFBaUJyTSxJQUFJLENBQUNlLGFBQXRCLEVBQXFDZixJQUFJLENBQUNtQyxXQUExQyxDQUFOO0FBQ0gsU0FKRCxNQUlNLElBQUk4SCxTQUFTLElBQUksQ0FBYixJQUFrQkEsU0FBUyxJQUFJLENBQW5DLEVBQXNDO0FBQ3hDLGNBQUlvQyxJQUFHLEdBQUduTixRQUFRLENBQUN1TSxhQUFULENBQXVCLFFBQXZCLEVBQWdDLGNBQWhDLENBQVY7O0FBQ0EsY0FBSW9CLEtBQUssR0FBRzVDLFNBQVMsR0FBRyxDQUF4Qjs7QUFDQWtDLFVBQUFBLE1BQU0sQ0FBQ1UsS0FBRCxFQUFRUixJQUFSLEVBQWFyTSxJQUFJLENBQUNjLFlBQWxCLEVBQWdDZCxJQUFJLENBQUMrQixVQUFyQyxDQUFOOztBQUNBb0ssVUFBQUEsTUFBTSxDQUFDVSxLQUFELEVBQVFSLElBQVIsRUFBYXJNLElBQUksQ0FBQ2dCLGFBQWxCLEVBQWlDaEIsSUFBSSxDQUFDbUMsV0FBdEMsQ0FBTjtBQUNILFNBTEssTUFLQSxJQUFJOEgsU0FBUyxJQUFJLEVBQWpCLEVBQW9CO0FBQ3RCLGNBQUlvQyxLQUFHLEdBQUduTixRQUFRLENBQUN1TSxhQUFULENBQXVCLFFBQXZCLEVBQWdDLGNBQWhDLENBQVY7O0FBQ0EsY0FBSSxDQUFDekwsSUFBSSxDQUFDaU0sV0FBVixFQUF1QjtBQUNuQmpNLFlBQUFBLElBQUksQ0FBQ2lNLFdBQUwsR0FBbUJwRyxLQUFLLENBQUM2RyxXQUFOLENBQWtCMU0sSUFBSSxDQUFDK0IsVUFBdkIsRUFBbUNzSyxLQUFuQyxFQUF3QyxHQUF4QyxFQUE2QyxHQUE3QyxFQUFpRHpNLEVBQUUsQ0FBQ3VFLEVBQUgsQ0FBTSxHQUFOLEVBQVUsR0FBVixDQUFqRCxFQUFnRSxJQUFoRSxFQUFxRSxDQUFyRSxFQUF1RSxLQUF2RSxDQUFuQjtBQUNBbkUsWUFBQUEsSUFBSSxDQUFDaU0sV0FBTCxDQUFpQmEsUUFBakIsQ0FBMEIsR0FBMUI7QUFDSCxXQUhELE1BR0s7QUFDRDlNLFlBQUFBLElBQUksQ0FBQ2lNLFdBQUwsQ0FBaUJmLElBQWpCLENBQXNCdEosTUFBdEIsR0FBK0IsSUFBL0I7QUFDSDs7QUFFRCxjQUFJLENBQUM1QixJQUFJLENBQUNrTSxZQUFWLEVBQXdCO0FBQ3BCbE0sWUFBQUEsSUFBSSxDQUFDa00sWUFBTCxHQUFvQnJHLEtBQUssQ0FBQzZHLFdBQU4sQ0FBa0IxTSxJQUFJLENBQUNtQyxXQUF2QixFQUFvQ2tLLEtBQXBDLEVBQXlDLEdBQXpDLEVBQThDLEdBQTlDLEVBQWtEek0sRUFBRSxDQUFDdUUsRUFBSCxDQUFNLEdBQU4sRUFBVSxHQUFWLENBQWxELEVBQWlFLElBQWpFLEVBQXNFLENBQXRFLEVBQXdFLEtBQXhFLENBQXBCO0FBQ0FuRSxZQUFBQSxJQUFJLENBQUNrTSxZQUFMLENBQWtCWSxRQUFsQixDQUEyQixHQUEzQjtBQUNILFdBSEQsTUFHSztBQUNEOU0sWUFBQUEsSUFBSSxDQUFDa00sWUFBTCxDQUFrQmhCLElBQWxCLENBQXVCdEosTUFBdkIsR0FBZ0MsSUFBaEM7QUFDSDtBQUNKO0FBQ0o7O0FBRUQ1QixNQUFBQSxJQUFJLENBQUMrQixVQUFMLENBQWdCSCxNQUFoQixHQUF5QixJQUF6QjtBQUNBNUIsTUFBQUEsSUFBSSxDQUFDbUMsV0FBTCxDQUFpQlAsTUFBakIsR0FBMEIsSUFBMUI7QUFDQTVCLE1BQUFBLElBQUksQ0FBQytNLHFCQUFMLENBQTJCLEtBQTNCO0FBQ0gsS0EzSEQsTUEySEs7QUFDRC9NLE1BQUFBLElBQUksQ0FBQytCLFVBQUwsQ0FBZ0JILE1BQWhCLEdBQXlCLEtBQXpCO0FBQ0E1QixNQUFBQSxJQUFJLENBQUNtQyxXQUFMLENBQWlCUCxNQUFqQixHQUEwQixLQUExQjtBQUNBNUIsTUFBQUEsSUFBSSxDQUFDMkIsVUFBTCxDQUFnQkMsTUFBaEIsR0FBeUIsS0FBekI7QUFDQTVCLE1BQUFBLElBQUksQ0FBQytNLHFCQUFMLENBQTJCLElBQTNCO0FBQ0EvTSxNQUFBQSxJQUFJLENBQUM4Syx1QkFBTCxDQUE2QixLQUE3QjtBQUNIO0FBQ0osR0F2Y2tDO0FBd2NuQ2xGLEVBQUFBLGVBeGNtQywyQkF3Y2xCb0gsS0F4Y2tCLEVBd2NYO0FBQ3BCLFFBQUloTixJQUFJLEdBQUcsSUFBWDtBQUNBLFFBQUlBLElBQUksQ0FBQzZHLFNBQUwsSUFBa0JtRyxLQUF0QixFQUE4Qjs7QUFFOUIsUUFBSWhOLElBQUksQ0FBQzZHLFNBQVQsRUFBb0I7QUFDaEIsVUFBSW9HLGFBQWEsR0FBR2pOLElBQUksQ0FBQ08sU0FBTCxDQUFlUCxJQUFJLENBQUM2RyxTQUFwQixDQUFwQjs7QUFDQSxVQUFJb0csYUFBYSxJQUFJQSxhQUFhLENBQUNDLFlBQW5DLEVBQWlEO0FBQzdDRCxRQUFBQSxhQUFhLENBQUNDLFlBQWQsQ0FBMkJ0TCxNQUEzQixHQUFvQyxLQUFwQztBQUNIO0FBQ0o7O0FBRUQsUUFBSXVMLGFBQWEsR0FBR25OLElBQUksQ0FBQ08sU0FBTCxDQUFleU0sS0FBZixDQUFwQjs7QUFDQSxRQUFJRyxhQUFhLElBQUlBLGFBQWEsQ0FBQ0QsWUFBbkMsRUFBZ0Q7QUFDNUNDLE1BQUFBLGFBQWEsQ0FBQ0QsWUFBZCxDQUEyQnRMLE1BQTNCLEdBQW9DLElBQXBDO0FBQ0g7O0FBRUQ1QixJQUFBQSxJQUFJLENBQUM2RyxTQUFMLEdBQWlCbUcsS0FBakI7QUFDQWhOLElBQUFBLElBQUksQ0FBQ2lILGVBQUw7QUFDSCxHQTFka0M7QUEyZG5DO0FBQ0FtQixFQUFBQSxpQkE1ZG1DLDZCQTRkaEI3QixFQTVkZ0IsRUE0ZFo7QUFDbkIsUUFBSXZHLElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSXVJLFNBQVMsR0FBRyxLQUFoQjs7QUFDQSxTQUFJLElBQUk3QyxDQUFSLElBQWExRixJQUFJLENBQUNvQixnQkFBbEIsRUFBbUM7QUFBRTtBQUNqQyxVQUFJdUksQ0FBQyxHQUFHM0osSUFBSSxDQUFDb0IsZ0JBQUwsQ0FBc0JzRSxDQUF0QixDQUFSOztBQUNBLFVBQUlpRSxDQUFDLENBQUNwRCxFQUFGLElBQVFvRCxDQUFDLENBQUNwRCxFQUFGLElBQVFBLEVBQXBCLEVBQXdCO0FBQ3BCZ0MsUUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDQTtBQUNIO0FBQ0o7O0FBQ0QsV0FBT0EsU0FBUDtBQUNILEdBdmVrQztBQXdlbkM7QUFDQXdFLEVBQUFBLHFCQXplbUMsaUNBeWVaM0csTUF6ZVksRUF5ZUo7QUFDM0IsUUFBSXBHLElBQUksR0FBRyxJQUFYOztBQUNBLFFBQUlvRyxNQUFNLElBQUksS0FBZCxFQUFvQjtBQUNoQixVQUFJcEcsSUFBSSxDQUFDb04saUJBQVQsRUFBNEI7QUFDeEJwTixRQUFBQSxJQUFJLENBQUNvTixpQkFBTCxDQUF1QkMsWUFBdkIsR0FBc0MsSUFBdEM7QUFDQSxhQUFLRCxpQkFBTCxDQUF1QkUsY0FBdkI7QUFDQSxhQUFLRixpQkFBTCxDQUF1QkcsV0FBdkI7QUFDQXZOLFFBQUFBLElBQUksQ0FBQ29OLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0g7QUFDSixLQVBELE1BT0s7QUFDRCxVQUFHLEtBQUs5SyxnQkFBTCxJQUF5QixDQUFDLEtBQUs4SyxpQkFBbEMsRUFBb0Q7QUFDaEQsWUFBSTVJLElBQUksR0FBR3RGLFFBQVEsQ0FBQ3NPLFlBQVQsQ0FBc0IsUUFBdEIsRUFBZ0MsUUFBaEMsQ0FBWDtBQUNBLGFBQUs3SSxPQUFMLENBQWFILElBQWIsRUFBbUIsVUFBU2lKLGFBQVQsRUFBdUI7QUFDdEMsZUFBS0wsaUJBQUwsR0FBeUJwTixJQUFJLENBQUNzQyxnQkFBTCxDQUFzQlosY0FBdEIsQ0FBcUMsUUFBckMsRUFBK0NvRixZQUEvQyxDQUE0RDRHLEVBQUUsQ0FBQ0MsUUFBL0QsQ0FBekI7QUFDQSxlQUFLUCxpQkFBTCxDQUF1QkMsWUFBdkIsR0FBc0NJLGFBQXRDO0FBQ0EsZUFBS0wsaUJBQUwsQ0FBdUJRLFlBQXZCLENBQW9DLENBQXBDLEVBQXVDLFFBQXZDLEVBQWlELElBQWpEO0FBQ0gsU0FKa0IsQ0FJakI5SSxJQUppQixDQUlaLElBSlksQ0FBbkI7QUFLSDtBQUNKO0FBQ0osR0E1ZmtDO0FBNmZuQztBQUNBZ0csRUFBQUEsdUJBOWZtQyxtQ0E4ZlYxRSxNQTlmVSxFQThmRjtBQUM3QixRQUFJcEcsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSW9HLE1BQU0sSUFBSSxLQUFkLEVBQXFCO0FBQ2pCLFVBQUlwRyxJQUFJLENBQUM2TixtQkFBVCxFQUE2QjtBQUN6QixhQUFLQSxtQkFBTCxDQUF5QlAsY0FBekI7QUFDQSxhQUFLTyxtQkFBTCxDQUF5Qk4sV0FBekI7QUFDQSxhQUFLTSxtQkFBTCxDQUF5QlIsWUFBekIsR0FBd0MsSUFBeEM7QUFDQXJOLFFBQUFBLElBQUksQ0FBQzZOLG1CQUFMLEdBQTJCLElBQTNCO0FBQ0g7QUFDSixLQVBELE1BT0s7QUFDRCxVQUFJN04sSUFBSSxDQUFDdUMsaUJBQUwsSUFBMEIsQ0FBQ3ZDLElBQUksQ0FBQzZOLG1CQUFwQyxFQUF3RDtBQUNwRCxZQUFJckosSUFBSSxHQUFHdEYsUUFBUSxDQUFDc08sWUFBVCxDQUFzQixRQUF0QixFQUFnQyxRQUFoQyxDQUFYO0FBQ0EsYUFBSzdJLE9BQUwsQ0FBYUgsSUFBYixFQUFtQixVQUFTaUosYUFBVCxFQUF1QjtBQUN0QyxlQUFLSSxtQkFBTCxHQUEyQjdOLElBQUksQ0FBQ3VDLGlCQUFMLENBQXVCYixjQUF2QixDQUFzQyxRQUF0QyxFQUFnRG9GLFlBQWhELENBQTZENEcsRUFBRSxDQUFDQyxRQUFoRSxDQUEzQjtBQUNBLGVBQUtFLG1CQUFMLENBQXlCUixZQUF6QixHQUF3Q0ksYUFBeEM7QUFDQSxlQUFLSSxtQkFBTCxDQUF5QkQsWUFBekIsQ0FBc0MsQ0FBdEMsRUFBeUMsUUFBekMsRUFBbUQsSUFBbkQ7QUFDSCxTQUprQixDQUlqQjlJLElBSmlCLENBSVosSUFKWSxDQUFuQjtBQUtIO0FBQ0o7QUFDSixHQWpoQmtDO0FBa2hCbkM7QUFDQVcsRUFBQUEsdUJBbmhCbUMsbUNBbWhCVlcsTUFuaEJVLEVBbWhCRjtBQUM3QixRQUFJcEcsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSW9HLE1BQU0sSUFBSSxLQUFkLEVBQW9CO0FBQ2hCLFVBQUlwRyxJQUFJLENBQUM4TixtQkFBVCxFQUE2QjtBQUN6QjlOLFFBQUFBLElBQUksQ0FBQzhOLG1CQUFMLENBQXlCVCxZQUF6QixHQUF3QyxJQUF4QztBQUNBLGFBQUtTLG1CQUFMLENBQXlCUixjQUF6QjtBQUNBLGFBQUtRLG1CQUFMLENBQXlCUCxXQUF6QjtBQUNBdk4sUUFBQUEsSUFBSSxDQUFDOE4sbUJBQUwsR0FBMkIsSUFBM0I7QUFDSDtBQUNKLEtBUEQsTUFPSztBQUNELFVBQUc5TixJQUFJLENBQUN1QyxpQkFBTCxJQUEwQixDQUFDdkMsSUFBSSxDQUFDOE4sbUJBQW5DLEVBQXVEO0FBQ25ELFlBQUl0SixJQUFJLEdBQUd0RixRQUFRLENBQUNzTyxZQUFULENBQXNCLFFBQXRCLEVBQWdDLFFBQWhDLENBQVg7QUFDQSxhQUFLN0ksT0FBTCxDQUFhSCxJQUFiLEVBQW1CLFVBQVNpSixhQUFULEVBQXVCO0FBQ3RDek4sVUFBQUEsSUFBSSxDQUFDOE4sbUJBQUwsR0FBMkI5TixJQUFJLENBQUN1QyxpQkFBTCxDQUF1QmIsY0FBdkIsQ0FBc0MsU0FBdEMsRUFBaURvRixZQUFqRCxDQUE4RDRHLEVBQUUsQ0FBQ0MsUUFBakUsQ0FBM0I7QUFDQTNOLFVBQUFBLElBQUksQ0FBQzhOLG1CQUFMLENBQXlCVCxZQUF6QixHQUF3Q0ksYUFBeEM7QUFDQXpOLFVBQUFBLElBQUksQ0FBQzhOLG1CQUFMLENBQXlCRixZQUF6QixDQUFzQyxDQUF0QyxFQUF5QyxRQUF6QyxFQUFvRCxLQUFwRDtBQUNILFNBSmtCLENBSWpCOUksSUFKaUIsQ0FJWixJQUpZLENBQW5CO0FBS0gsT0FQRCxNQU9NLElBQUc5RSxJQUFJLENBQUM4TixtQkFBUixFQUE2QjtBQUMvQjlOLFFBQUFBLElBQUksQ0FBQzhOLG1CQUFMLENBQXlCRixZQUF6QixDQUFzQyxDQUF0QyxFQUF5QyxRQUF6QyxFQUFvRCxLQUFwRDtBQUNIO0FBQ0o7QUFFSixHQXppQmtDO0FBMGlCbkM7QUFDQUcsRUFBQUEsUUFBUSxFQUFDLG9CQUFVO0FBQ2YsUUFBSS9OLElBQUksR0FBRyxJQUFYOztBQUNBLFFBQUdBLElBQUksQ0FBQ2dPLHNCQUFSLEVBQStCO0FBQzNCQyxNQUFBQSxLQUFLLENBQUNDLFdBQU4sQ0FBa0JDLE1BQWxCLENBQXlCbk8sSUFBSSxDQUFDZ08sc0JBQTlCO0FBQ0FoTyxNQUFBQSxJQUFJLENBQUNnTyxzQkFBTCxHQUE4QixJQUE5QjtBQUNIOztBQUNELFFBQUdoTyxJQUFJLENBQUNvTyxvQkFBUixFQUE2QjtBQUN6QkgsTUFBQUEsS0FBSyxDQUFDQyxXQUFOLENBQWtCQyxNQUFsQixDQUF5Qm5PLElBQUksQ0FBQ29PLG9CQUE5QjtBQUNBcE8sTUFBQUEsSUFBSSxDQUFDb08sb0JBQUwsR0FBNEIsSUFBNUI7QUFDSDs7QUFDRCxRQUFJcE8sSUFBSSxDQUFDZ0wsU0FBVCxFQUFtQjtBQUNmaEwsTUFBQUEsSUFBSSxDQUFDZ0wsU0FBTCxDQUFlcUQsUUFBZjtBQUNBck8sTUFBQUEsSUFBSSxDQUFDZ0wsU0FBTCxHQUFpQixJQUFqQjtBQUNIOztBQUVELFFBQUloTCxJQUFJLENBQUNnTSxVQUFULEVBQXFCO0FBQ2pCaE0sTUFBQUEsSUFBSSxDQUFDZ00sVUFBTCxDQUFnQnFDLFFBQWhCO0FBQ0FyTyxNQUFBQSxJQUFJLENBQUNnTSxVQUFMLEdBQWtCLElBQWxCO0FBQ0g7O0FBRUQsU0FBS2xCLHVCQUFMLENBQTZCLEtBQTdCO0FBQ0EsU0FBS2lDLHFCQUFMLENBQTJCLEtBQTNCO0FBQ0EsU0FBS3RILHVCQUFMLENBQTZCLEtBQTdCO0FBQ0g7QUFsa0JrQyxDQUFULENBQTlCO0FBb2tCQTZJLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVPLHVCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahCAo6Iux6ZuE6L2s5o2i77yJXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0yMiAxNDozNzozNVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBTZWVycGFsYWNlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJzZWVycGFsYWNlX2NvbnRyb2xsZXJcIilcbnZhciBIZXJvQ29uc3QgPSByZXF1aXJlKFwiaGVyb19jb25zdFwiKVxudmFyIFNlZXJwYWxhY2VDb25zdCA9IHJlcXVpcmUoXCJzZWVycGFsYWNlX2NvbnN0XCIpXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBTZWVycGFsYWNlRXZlbnQgPSByZXF1aXJlKFwic2VlcnBhbGFjZV9ldmVudFwiKVxudmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKVxudmFyIEJhc2VSb2xlID0gcmVxdWlyZShcImJhc2Vyb2xlXCIpXG52YXIgU2VlcnBhbGFjZV9jaGFuZ2VfUGFuZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJzZWVycGFsYWNlXCIsIFwic2VlcnBhbGFjZV9jaGFuZ2VfcGFuZWxcIik7XG4gICAgICAgIHRoaXMuY3RybCA9IFNlZXJwYWxhY2VDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMubW9kZWwgPSBTZWVycGFsYWNlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKClcbiAgICAgICAgc2VsZi5jYW1wX2xpc3QgPSB7fVxuICAgICAgICBzZWxmLmN1cl9yb2xlX3ZvID0ge31cbiAgICAgICAgc2VsZi5jdXJfcm9sZV9pdGVtID0gbnVsbFxuICAgICAgICBzZWxmLmN1cl9jYW1wX3R5cGUgPSBIZXJvQ29uc3QuQ2FtcFR5cGUuZU5vbmVcbiAgICAgICAgc2VsZi5sZWZ0X3N0YXJzXzEgPSB7fVxuICAgICAgICBzZWxmLmxlZnRfc3RhcnNfMiA9IHt9XG4gICAgICAgIHNlbGYucmlnaHRfc3RhcnNfMSA9IHt9XG4gICAgICAgIHNlbGYucmlnaHRfc3RhcnNfMiA9IHt9XG4gICAgICAgIHNlbGYuaXNfZmlyc3Rfb3BlbiA9IHRydWUgIC8vIOmmluasoeaJk+W8gOeVjOmdouagh+ivhlxuICAgICAgICBzZWxmLmNoYW5nZV9wYXJ0bmVyX2lkID0gMCAvLyDmnInnva7mjaLnu5PmnpzkvYbmnKrkv53lrZjnmoToi7Hpm4TvvIww5Li65rKh5pyJXG4gICAgICAgIHNlbGYuY2hhbmdlX25ld19wYXJ0bmVyX2JpZCA9IDAgLy8g5pyJ572u5o2i57uT5p6c5L2G5pyq5L+d5a2Y55qE5paw6Iux6ZuE77yMMOS4uuayoeaciVxuICAgICAgICBzZWxmLmxvY2tfcGFydG5lcl9pZHMgPSB7fSAvLyDplIHkvY/kuI3og73nva7mjaLnmoToi7Hpm4RcbiAgICAgICAgc2VsZi5jYW5jZWxfcGFydG5lcl9pZCA9IDAgLy8g57yT5a2Y5Y+W5raI5L+d5a2Y55qE6Iux6ZuEaWTvvIzlj5bmtojkuYvlkI7opoHkvp3nhLbpgInkuK3lroNcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGxldCBtYWluX2NvbnRhaW5lciA9IHNlbGYucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKVxuICAgICAgICBzZWxmLmNoYW5nZV9idG4gPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNoYW5nZV9idG5cIilcbiAgICAgICAgc2VsZi5jaGFuZ2VfYnRuLmFjdGl2ZSA9IGZhbHNlXG5cbiAgICAgICAgc2VsZi5jYW5jZWxfYnRuID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjYW5jZWxfYnRuXCIpXG5cbiAgICAgICAgc2VsZi5jYW5jZWxfYnRuLmFjdGl2ZSA9IGZhbHNlXG5cbiAgICAgICAgc2VsZi5zYXZlX2J0biA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic2F2ZV9idG5cIilcbiAgICAgICAgc2VsZi5zYXZlX2J0bi5hY3RpdmUgPSBmYWxzZVxuXG4gICAgICAgIHNlbGYubGVmdF9wYW5lbCA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibGVmdF9wYW5lbFwiKVxuICAgICAgICBzZWxmLmxlZnRfcGFuZWwuYWN0aXZlID0gIGZhbHNlXG4gICAgICAgIHNlbGYubGVmdF9sdl9sYWJlbCA9IHRoaXMuc2Vla0NoaWxkKFwibGVmdF9sdl9sYWJlbFwiLGNjLkxhYmVsKVxuXG4gICAgICAgIHNlbGYucmlnaHRfcGFuZWwgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInJpZ2h0X3BhbmVsXCIpXG4gICAgICAgIHNlbGYucmlnaHRfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgc2VsZi5yaWdodF9sdl9sYWJlbCA9IHRoaXMuc2Vla0NoaWxkKFwicmlnaHRfbHZfbGFiZWxcIixjYy5MYWJlbClcblxuICAgICAgICBzZWxmLmNoYW5nZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwiY2hhbmdlX2xhYmVsXCIsY2MuTGFiZWwpXG4gICAgICAgIHNlbGYubGVmdF9lZmZlY3Rfbm9kZSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibGVmdF9lZmZlY3Rfbm9kZVwiKVxuICAgICAgICBzZWxmLnJpZ2h0X2VmZmVjdF9ub2RlID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyaWdodF9lZmZlY3Rfbm9kZVwiKVxuICAgICAgICBzZWxmLnJvbGVfbGF5b3V0ID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyb2xlX2xheW91dFwiKVxuICAgICAgICBzZWxmLnRvZ2dsZV9uZCA9IHRoaXMuc2Vla0NoaWxkKFwidG9vZ2xlXCIpXG4gICAgICAgIHRoaXMubGVmdF9uYW1lX2xhYmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJsZWZ0X25hbWVfbGFiZWxcIixjYy5MYWJlbClcbiAgICAgICAgdGhpcy5yaWdodF9uYW1lX2xhYmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJyaWdodF9uYW1lX2xhYmVsXCIsY2MuTGFiZWwpXG4gICAgICAgIHRoaXMubGVmdF9pdGVtX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJsZWZ0X2l0ZW1cIixjYy5TcHJpdGUpXG4gICAgICAgIHRoaXMucmlnaHRfaXRlbV9zcCA9IHRoaXMuc2Vla0NoaWxkKFwicmlnaHRfaXRlbVwiLGNjLlNwcml0ZSlcbiAgICAgICAgdGhpcy5yaWdodF9uYW1lX2xhYmVsX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJyaWdodF9uYW1lX2xhYmVsXCIsY2MuU3ByaXRlKVxuICAgICAgICBsZXQgYmdTaXplID0gc2VsZi5yb2xlX2xheW91dC5nZXRDb250ZW50U2l6ZSgpXG4gICAgICAgIHNlbGYuYnRuX3N1bW1vbl9zcCA9IHRoaXMuc2Vla0NoaWxkKFwiaXRlbVwiLGNjLlNwcml0ZSlcbiAgICAgICAgbGV0IHNjYWxlID0gMC45XG4gICAgICAgIGxldCBzY3JvbGxfdmlld19zaXplID0gY2Muc2l6ZShiZ1NpemUud2lkdGggLSA4MCwgMTA4KVxuICAgICAgICBsZXQgc2V0dGluZyA9IHtcbiAgICAgICAgICAgIGl0ZW1fY2xhc3MgOiBcImhlcm9fZXhoaWJpdGlvbl9pdGVtXCIsICAgICAgLy8tLSDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3ggOiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94IDogMTUsICAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeSA6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3kgOiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoIDogMTE5KnNjYWxlLCAgICAgICAgICAgICAgIC8vLS0g5Y2V5YWD55qE5bC65a+4d2lkdGhcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0IDogMTE5KnNjYWxlLCAgICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdyA6IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcbiAgICAgICAgICAgIGNvbCA6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIHNjYWxlIDogc2NhbGUsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb2xlX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLnJvbGVfc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwoc2VsZi5yb2xlX2xheW91dCxjYy52Mig0MCwxMjgpLFNjcm9sbFZpZXdEaXIuaG9yaXpvbnRhbCxTY3JvbGxWaWV3U3RhcnRQb3MudG9wLHNjcm9sbF92aWV3X3NpemUsc2V0dGluZyxjYy52MigwLCAwKSlcbiAgICAgICAgLy8gdGhpcy5yb2xlX3Njcm9sbHZpZXcuc2V0U3dhbGxvd1RvdWNoZXMoZmFsc2UpXG4gICAgICAgIGxldCBwYXRoID0gUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJpdGVtXCIsU2VlcnBhbGFjZUNvbnN0Lkdvb2RfWGlhblpoaSlcbiAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsZnVuY3Rpb24oU3ByaXRlRnJhbWUpe1xuICAgICAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLnNwcml0ZUZyYW1lICA9IFNwcml0ZUZyYW1lXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgLy8gaWYodGhpcy5tb2RlbC5jaGFuZ2VfaW5mbyl7XG4gICAgICAgIC8vICAgICBzZWxmLnNldERhdGEodGhpcy5tb2RlbC5jaGFuZ2VfaW5mbylcbiAgICAgICAgLy8gfVxuICAgICAgIFxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgdGhpcy5jaGFuZ2VfYnRuLm9uKFwidG91Y2hlbmRcIix0aGlzLl9vbkNsaWNrQ2hhbmdlQnRuLHRoaXMpXG4gICAgICAgIHRoaXMuY2FuY2VsX2J0bi5vbihcInRvdWNoZW5kXCIsdGhpcy5fb25DbGlja0NhbmNlbEJ0bix0aGlzKVxuICAgICAgICB0aGlzLnNhdmVfYnRuLm9uKFwidG91Y2hlbmRcIix0aGlzLl9vbkNsaWNrU2F2ZUJ0bix0aGlzKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFNlZXJwYWxhY2VFdmVudC5DaGFuZ2VfUm9sZV9JbmZvX0V2ZW50LGZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgICAgIHNlbGYuc2V0RGF0YShkYXRhKVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoU2VlcnBhbGFjZUV2ZW50LkNoYW5nZV9Sb2xlX1N1Y2Nlc3MsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBzZWxmLmhhbmRsZVJpZ2h0Q2hhbmdlRWZmZWN0KHRydWUpXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgZm9yIChsZXQgaT0xO2k8PTQ7KytpKXtcbiAgICAgICAgICAgIGxldCBjYW1wX2J0biA9IHNlbGYudG9nZ2xlX25kLmdldENoaWxkQnlOYW1lKFwiY2FtcF9idG5fXCIgKyBpKVxuICAgICAgICAgICAgaWYgKGNhbXBfYnRuKXtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbXBfbGlzdFtpXSA9IGNhbXBfYnRuXG4gICAgICAgICAgICAgICAgY2FtcF9idG4ub24oXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQ2xpY2tDYW1wQnRuKGkpXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgzKVxuICAgICAgICAgICAgICAgIH0sdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwucmVxdWVzdFNlZXJwYWxhY2VDaGFuZ2VJbmZvKCAgKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OmZ1bmN0aW9uKHBhcmFtcyl7XG5cbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTpmdW5jdGlvbigpe1xuXG4gICAgfSxcbiAgICBhZGRUb1BhcmVudCggc3RhdHVzICl7XG4gICAgICAgIHN0YXR1cyA9IHN0YXR1cyB8fCBmYWxzZVxuICAgICAgICBpZihzdGF0dXMpe1xuICAgICAgICAgICAgdGhpcy5zaG93KClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmICh0aGlzLmlzX2ZpcnN0X29wZW4pIHtcbiAgICAgICAgLy8gICAgIC8vIC0tIOWIneasoeaJk+W8gOeVjOmdouaXtuivt+axgue9ruaNouebuOWFs+aVsOaNrlxuICAgICAgICAvLyAgICAgdGhpcy5jdHJsLnJlcXVlc3RTZWVycGFsYWNlQ2hhbmdlSW5mbyggIClcbiAgICAgICAgLy8gICAgIHRoaXMuaXNfZmlyc3Rfb3BlbiA9IGZhbHNlXG4gICAgICAgIC8vIH1cbiAgICB9LFxuICAgIC8vIC0tIOe9ruaNolxuICAgIF9vbkNsaWNrQ2hhbmdlQnRuKCl7XG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKHNlbGYuY3VyX3JvbGVfdm8gJiYgc2VsZi5jdXJfcm9sZV92by5pZCl7XG4gICAgICAgICAgICB0aGlzLmN0cmwucmVxdWVzdFNlZXJwYWxhY2VDaGFuZ2VSb2xlKHNlbGYuY3VyX3JvbGVfdm8uaWQsIDEpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbWVzc2FnZShcIuivt+WFiOmAieaLqeS4gOS9jeiLsembhFwiKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyAtLSDlj5bmtohcbiAgICBfb25DbGlja0NhbmNlbEJ0biggICl7XG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKHNlbGYuY2hhbmdlX3BhcnRuZXJfaWQgJiYgc2VsZi5jaGFuZ2VfcGFydG5lcl9pZCAhPSAwKXtcbiAgICAgICAgICAgIHNlbGYuY2FuY2VsX3BhcnRuZXJfaWQgPSBzZWxmLmNoYW5nZV9wYXJ0bmVyX2lkXG4gICAgICAgICAgICB0aGlzLmN0cmwucmVxdWVzdFNlZXJwYWxhY2VDaGFuZ2VSb2xlKHNlbGYuY2hhbmdlX3BhcnRuZXJfaWQsIDApXG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIC0tIOS/neWtmFxuICAgIF9vbkNsaWNrU2F2ZUJ0bigpe1xuICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmIChzZWxmLmNoYW5nZV9wYXJ0bmVyX2lkICYmIHNlbGYuY2hhbmdlX3BhcnRuZXJfaWQgIT0gMCApe1xuICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RTZWVycGFsYWNlQ2hhbmdlUm9sZShzZWxmLmNoYW5nZV9wYXJ0bmVyX2lkLCAyKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXREYXRhKGRhdGEpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgc2VsZi5kYXRhID0gZGF0YSB8fCB7fVxuICAgICAgICBzZWxmLmNoYW5nZV9wYXJ0bmVyX2lkID0gZGF0YS5wYXJ0bmVyX2lkIHx8IDBcbiAgICAgICAgc2VsZi5jaGFuZ2VfbmV3X3BhcnRuZXJfYmlkID0gZGF0YS5uZXdfcGFydG5lcl9iaWQgfHwgMFxuICAgICAgICBzZWxmLmxvY2tfcGFydG5lcl9pZHMgPSBkYXRhLnBhcnRuZXJfaWRzIHx8IHt9XG5cbiAgICAgICAgc2VsZi5yb2xlX2xheW91dC5hY3RpdmUgPSAoc2VsZi5jaGFuZ2VfcGFydG5lcl9pZCA9PSAwKVxuICAgICAgICBzZWxmLmNhbmNlbF9idG4uYWN0aXZlID0gKHNlbGYuY2hhbmdlX3BhcnRuZXJfaWQgIT0gMClcbiAgICAgICAgc2VsZi5zYXZlX2J0bi5hY3RpdmUgPSAoc2VsZi5jaGFuZ2VfcGFydG5lcl9pZCAhPSAwKVxuICAgICAgICBpZiAoc2VsZi5jaGFuZ2VfcGFydG5lcl9pZCA9PSAwKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY3VyX2luZGV4KXtcbiAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9uZC5nZXRDaGlsZEJ5TmFtZShcImNhbXBfYnRuXzFcIikuZ2V0Q29tcG9uZW50KGNjLlRvZ2dsZSkuaXNDaGVja2VkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHNlbGYuX29uQ2xpY2tDYW1wQnRuKDEpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZnJlc2hSb2xlTGlzdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2VsZi5jdXJfaW5kZXggPSBudWxsXG4gICAgICAgICAgICBzZWxmLmN1cl9yb2xlX3ZvID0ge31cbiAgICAgICAgICAgIHNlbGYuY3VyX2NhbXBfdHlwZSA9IEhlcm9Db25zdC5DYW1wVHlwZS5lTm9uZVxuICAgICAgICAgICAgaWYgKHNlbGYuY3VyX3JvbGVfaXRlbSl7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJfcm9sZV9pdGVtLnNldFNlbGVjdGVkKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNlbGYuY3VyX3JvbGVfaXRlbSA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZWxmLnJlZnJlc2hSb2xlU3BpbmUoKVxuICAgIH0sXG4gICAgLy8gLS0g5Yi35paw6Iux6ZuE5aS05YOP5YiX6KGoXG4gICAgcmVmcmVzaFJvbGVMaXN0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmN1cl9yb2xlX2RhdGEgPSBbXVxuICAgICAgICBsZXQgYWxsX3JvbGVfbGlzdCA9IEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRBbGxIZXJvQXJyYXkoKVxuICAgICAgICBsZXQgY2FtcF90eXBlID0gSGVyb0NvbnN0LkNhbXBUeXBlLmVOb25lXG4gICAgICAgIGlmIChzZWxmLmN1cl9pbmRleCA9PSBTZWVycGFsYWNlQ29uc3QuQ2hhbmdlX0luZGV4X0NhbXAuQWxsKXtcbiAgICAgICAgICAgIGNhbXBfdHlwZSA9IEhlcm9Db25zdC5DYW1wVHlwZS5lTm9uZVxuICAgICAgICB9ZWxzZSBpZiAoc2VsZi5jdXJfaW5kZXggPT0gU2VlcnBhbGFjZUNvbnN0LkNoYW5nZV9JbmRleF9DYW1wLldhdGVyKXtcbiAgICAgICAgICAgIGNhbXBfdHlwZSA9IEhlcm9Db25zdC5DYW1wVHlwZS5lV2F0ZXJcbiAgICAgICAgfWVsc2UgaWYgKHNlbGYuY3VyX2luZGV4ID09IFNlZXJwYWxhY2VDb25zdC5DaGFuZ2VfSW5kZXhfQ2FtcC5GaXJlKXtcbiAgICAgICAgICAgIGNhbXBfdHlwZSA9IEhlcm9Db25zdC5DYW1wVHlwZS5lRmlyZVxuICAgICAgICB9ZWxzZSBpZiAoc2VsZi5jdXJfaW5kZXggPT0gU2VlcnBhbGFjZUNvbnN0LkNoYW5nZV9JbmRleF9DYW1wLldpbmQpe1xuICAgICAgICAgICAgY2FtcF90eXBlID0gSGVyb0NvbnN0LkNhbXBUeXBlLmVXaW5kXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5jdXJfY2FtcF90eXBlID0gY2FtcF90eXBlXG5cbiAgICAgICAgZm9yIChsZXQgayBpbiBhbGxfcm9sZV9saXN0IHx8IHt9KXsvLyBrLHJvbGVfdm8gaW4gcGFpcnMoYWxsX3JvbGVfbGlzdC5pdGVtcyBvciB7fSkgZG9cbiAgICAgICAgICAgIGxldCByb2xlX3ZvID0gYWxsX3JvbGVfbGlzdFtrXVxuICAgICAgICAgICAgaWYgKHJvbGVfdm8uc3RhciA9PSA0IHx8IHJvbGVfdm8uc3RhciA9PSA1KXtcbiAgICAgICAgICAgICAgICBsZXQgaXNfbG9jayA9IHNlbGYuY2hlY2tJc0xvY2tlZFJvbGUocm9sZV92by5pZClcbiAgICAgICAgICAgICAgICBpZiAoY2FtcF90eXBlID09IEhlcm9Db25zdC5DYW1wVHlwZS5lTm9uZSl7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb2xlX3ZvLmNhbXBfdHlwZSA9PSBIZXJvQ29uc3QuQ2FtcFR5cGUuZVdhdGVyIHx8XG4gICAgICAgICAgICAgICAgICAgIHJvbGVfdm8uY2FtcF90eXBlID09IEhlcm9Db25zdC5DYW1wVHlwZS5lRmlyZSB8fFxuICAgICAgICAgICAgICAgICAgICByb2xlX3ZvLmNhbXBfdHlwZSA9PSBIZXJvQ29uc3QuQ2FtcFR5cGUuZVdpbmQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvbGVfZGF0YSA9IFV0aWxzLmRlZXBDb3B5KHJvbGVfdm8pXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlX2RhdGEuaXNfbG9ja2VkID0gaXNfbG9ja1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJfcm9sZV9kYXRhLnB1c2gocm9sZV9kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFibGVfaW5zZXJ0KHNlbGYuY3VyX3JvbGVfZGF0YSwgcm9sZV9kYXRhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYgKHJvbGVfdm8uY2FtcF90eXBlID09IGNhbXBfdHlwZSApe1xuICAgICAgICAgICAgICAgICAgICBsZXQgcm9sZV9kYXRhID0gVXRpbHMuZGVlcENvcHkocm9sZV92bylcbiAgICAgICAgICAgICAgICAgICAgcm9sZV9kYXRhLmlzX2xvY2tlZCA9IGlzX2xvY2tcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJfcm9sZV9kYXRhLnB1c2gocm9sZV9kYXRhKVxuICAgICAgICAgICAgICAgICAgICAvLyB0YWJsZV9pbnNlcnQoc2VsZi5jdXJfcm9sZV9kYXRhLCByb2xlX2RhdGEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VyX3JvbGVfZGF0YS5zb3J0KGZ1bmN0aW9uKCBvYmpBLCBvYmpCICl7XG4gICAgICAgICAgICBsZXQgaXNfbG9ja19hID0gc2VsZi5jaGVja0lzTG9ja2VkUm9sZShvYmpBLmlkKVxuICAgICAgICAgICAgbGV0IGlzX2xvY2tfYiA9IHNlbGYuY2hlY2tJc0xvY2tlZFJvbGUob2JqQi5pZClcbiAgICAgICAgICAgIGlmIChpc19sb2NrX2EgJiYgIWlzX2xvY2tfYiApeyBcbiAgICAgICAgICAgICAgICByZXR1cm4gIDFcbiAgICAgICAgICAgIH1lbHNlIGlmICghaXNfbG9ja19hICYmIGlzX2xvY2tfYil7XG4gICAgICAgICAgICAgICAgcmV0dXJuICAtMVxuICAgICAgICAgICAgfWVsc2UgaWYgKG9iakEuc3RhciA9PSBvYmpCLnN0YXIgKXtcbiAgICAgICAgICAgICAgICBpZiAob2JqQS5jYW1wX3R5cGUgPT0gb2JqQi5jYW1wX3R5cGUpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqQi5sZXYgLSBvYmpBLmxldiBcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iakIuY2FtcF90eXBlIC0gb2JqQS5jYW1wX3R5cGUgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqQi5zdGFyIC0gb2JqQS5zdGFyIFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChzZWxmLmN1cl9yb2xlX2l0ZW0pe1xuICAgICAgICAgICAgc2VsZi5jdXJfcm9sZV9pdGVtLnNldFNlbGVjdGVkKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIGxldCBleHRlbmREYXRhID0ge3NjYWxlIDogMC44NSwgY2FuX2NsaWNrIDogdHJ1ZSwgZnJvbV90eXBlIDogSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lSGVyb0NoYW5nZX1cbiAgICAgICAgc2VsZi5yb2xlX3Njcm9sbHZpZXcuc2V0RGF0YShzZWxmLmN1cl9yb2xlX2RhdGEsZnVuY3Rpb24oY2VsbCl7XG4gICAgICAgICAgICB0aGlzLl9vbkNsaWNrUGFydG5lcihjZWxsKVxuICAgICAgICB9LmJpbmQodGhpcyksZXh0ZW5kRGF0YSlcbiAgICAgICAgc2VsZi5yb2xlX3Njcm9sbHZpZXcuYWRkRW5kQ2FsbEJhY2soZnVuY3Rpb24oICl7XG4gICAgICAgICAgICBpZiAoc2VsZi5jdXJfcm9sZV92byAmJiBVdGlscy5uZXh0KHNlbGYuY3VyX3JvbGVfdm8pICYmIHNlbGYuY3VyX2NhbXBfdHlwZSE9bnVsbCApe1xuICAgICAgICAgICAgICAgIC8vIC0tIOiusOW9leS6huS4iuS4gOasoemAieS4reiLsembhOeahOaVsOaNru+8jOWIh+aNouWIsOWFqOmDqOaIluivpeiLsembhOmYteiQpeaXtu+8jOivpeiLsembhOe7p+e7reS4uumAieS4reeKtuaAgVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmN1cl9yb2xlX3ZvLmNhbXBfdHlwZSA9PSBzZWxmLmN1cl9jYW1wX3R5cGUgfHwgc2VsZi5jdXJfY2FtcF90eXBlID09IEhlcm9Db25zdC5DYW1wVHlwZS5lTm9uZSApe1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IHNlbGYucm9sZV9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrPTA7azxsaXN0Lmxlbmd0aDsrK2spe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSBsaXN0W2tdXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHYuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pZCA9PSBzZWxmLmN1cl9yb2xlX3ZvLmlkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbkNsaWNrUGFydG5lcih2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZihzZWxmLmNhbmNlbF9wYXJ0bmVyX2lkICYmIHNlbGYuY2FuY2VsX3BhcnRuZXJfaWQgIT0gMCApeyAvLy0t6YCJ5Lit5Y+W5raI572u5o2i55qE6Iux6ZuEXG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBzZWxmLnJvbGVfc2Nyb2xsdmlldy5nZXRJdGVtTGlzdCgpXG4gICAgICAgICAgICAgICAgZm9yKGxldCBrPTA7azxsaXN0Lmxlbmd0aDsrK2spe1xuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IGxpc3Rba11cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB2LmdldERhdGEoKVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pZCA9PSBzZWxmLmNhbmNlbF9wYXJ0bmVyX2lkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29uQ2xpY2tQYXJ0bmVyKHYpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJvbGVfc2Nyb2xsdmlldy5qdW1wVG9Nb3ZlKGNjLnYyKC0oay0zKSooMC44NSoxMTkrMTUpLCAwKSwgMC4wMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5jYW5jZWxfcGFydG5lcl9pZCA9IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG4gICAgX29uQ2xpY2tQYXJ0bmVyKGl0ZW0pe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgbGV0IHZvID0gaXRlbS5nZXREYXRhKClcbiAgICAgICAgaWYgKHZvLmNoZWNrSGVyb0xvY2tUaXBzKHRydWUpKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmN1cl9yb2xlX2l0ZW0gKXtcbiAgICAgICAgICAgIHNlbGYuY3VyX3JvbGVfaXRlbS5zZXRTZWxlY3RlZChmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpdGVtLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgIHNlbGYuY3VyX3JvbGVfaXRlbSA9IGl0ZW1cbiAgICAgICAgc2VsZi5jdXJfcm9sZV92byA9IHZvXG5cbiAgICAgICAgbGV0IHJvbGVfc3RhciA9IHZvLnN0YXJcbiAgICAgICAgbGV0IGxhYmVsX3N0ciA9IFwiXCJcbiAgICAgICAgbGV0IGNvc3RfY29uZmlnID0gQ29uZmlnLnJlY3J1aXRfaGlnaF9kYXRhLmRhdGFfc2VlcnBhbGFjZV9jb25zdFtcImhlcm9fY2hhbmdlXCIgKyByb2xlX3N0YXJdXG4gICAgICAgIGlmIChjb3N0X2NvbmZpZyAmJiBjb3N0X2NvbmZpZy52YWwgKXtcbiAgICAgICAgICAgIGxldCBiaWQgPSBjb3N0X2NvbmZpZy52YWxbMF1bMF1cbiAgICAgICAgICAgIGxldCBudW0gPSBjb3N0X2NvbmZpZy52YWxbMF1bMV1cbiAgICAgICAgICAgIGxldCBpdGVtX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoYmlkKVxuICAgICAgICAgICAgaWYoaXRlbV9jb25maWcpICB7XG4gICAgICAgICAgICAgICAgbGFiZWxfc3RyID0gbnVtICtcIiDnva7mjaJcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuY2hhbmdlX2xiLnN0cmluZyA9IGxhYmVsX3N0clxuICAgICAgICBzZWxmLnJlZnJlc2hSb2xlU3BpbmUoKVxuICAgIH0sICAgXG4gICAgLy8gLS0g5Yi35paw6Iux6ZuE5qih5Z6L5pi+56S6XG4gICAgcmVmcmVzaFJvbGVTcGluZSgpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgLy8gaWYgKHNlbGYubGVmdF9yb2xlKXtcbiAgICAgICAgLy8gICAgIHNlbGYubGVmdF9yb2xlLmRlbGV0ZU1lKClcbiAgICAgICAgLy8gICAgIHNlbGYubGVmdF9yb2xlID0gbnVsbFxuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gaWYgKHNlbGYucmlnaHRfcm9sZSkge1xuICAgICAgICAvLyAgICAgc2VsZi5yaWdodF9yb2xlLmRlbGV0ZU1lKClcbiAgICAgICAgLy8gICAgIHNlbGYucmlnaHRfcm9sZSA9IG51bGxcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIC0tIOmAieS4reS6huafkOS4gOS4quiLsembhOaIluiAheacieacquS/neWtmOeahOmHjee9ruiLsembhFxuICAgICAgICBpZiAoc2VsZi5jdXJfcm9sZV92byAmJiBVdGlscy5uZXh0KHNlbGYuY3VyX3JvbGVfdm8pIHx8IHNlbGYuY2hhbmdlX3BhcnRuZXJfaWQgIT0gMCApe1xuICAgICAgICAgICAgbGV0IGxlZnRfcm9sZV92byA9IHt9IC8vLS0g5bem5L6n6Iux6ZuE55qE5pWw5o2uXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGFuZ2VfcGFydG5lcl9pZCA9PSAwICl7XG4gICAgICAgICAgICAgICAgbGVmdF9yb2xlX3ZvID0gc2VsZi5jdXJfcm9sZV92b1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlX2J0bi5hY3RpdmUgPSB0cnVlXG4gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVSaWdodFJhbmRvbUVmZmVjdCh0cnVlKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgbGVmdF9yb2xlX3ZvID0gSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEhlcm9CeUlkKHNlbGYuY2hhbmdlX3BhcnRuZXJfaWQpXG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VfYnRuLmFjdGl2ZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVSaWdodFJhbmRvbUVmZmVjdChmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZWZ0X3JvbGVfdm8gJiYgKFV0aWxzLm5leHQobGVmdF9yb2xlX3ZvKSB8fCBVdGlscy5uZXh0KGxlZnRfcm9sZV92bykgPT0gMCkpe1xuICAgICAgICAgICAgICAgIGlmKHNlbGYubGVmdF9yb2xlID09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxlZnRfcm9sZSA9IG5ldyBCYXNlUm9sZSgpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGVmdF9yb2xlLnNldFBhcmVudChzZWxmLmxlZnRfcGFuZWwpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGVmdF9yb2xlLm5vZGUuc2V0UG9zaXRpb24oY2MudjIoMTAwLCAxODApKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmxlZnRfcm9sZS5zZXREYXRhKEJhc2VSb2xlLnR5cGUucGFydG5lciwgbGVmdF9yb2xlX3ZvLCBQbGF5ZXJBY3Rpb24uc2hvdywgdHJ1ZSwwLjcyKTtcblxuICAgICAgICAgICAgICAgIGxldCB0eXBlX3JlcyA9IFBhdGhUb29sLmdldEhlcm9DYW1wUmVzKGxlZnRfcm9sZV92by5jYW1wX3R5cGUpXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsdHlwZV9yZXMpXG4gICAgICAgICAgICAgICAgc2VsZi5yaWdodF9pdGVtX3NwLnNwcml0ZUZyYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMocGF0aCxmdW5jdGlvbihTcHJpdGVGcmFtZSl7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGVmdF9pdGVtX3NwLnNwcml0ZUZyYW1lID0gU3ByaXRlRnJhbWVcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9pdGVtX3NwLnNwcml0ZUZyYW1lID0gU3ByaXRlRnJhbWVcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgc2VsZi5sZWZ0X25hbWVfbGFiZWwuc3RyaW5nID0gbGVmdF9yb2xlX3ZvLm5hbWUgXG4gICAgICAgICAgICAgICAgc2VsZi5sZWZ0X2x2X2xhYmVsLnN0cmluZyA9IGxlZnRfcm9sZV92by5sZXZcbiAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0X2x2X2xhYmVsLnN0cmluZyA9IGxlZnRfcm9sZV92by5sZXZcbiAgICAgICAgICAgICAgICBsZXQgcmlnaHRfbmFtZSA9IFwiPz8/P1wiXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhbmdlX25ld19wYXJ0bmVyX2JpZCAhPSAwICl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBiYXNlX2NvbmZpZyA9IENvbmZpZy5wYXJ0bmVyX2RhdGEuZGF0YV9wYXJ0bmVyX2Jhc2Vbc2VsZi5jaGFuZ2VfbmV3X3BhcnRuZXJfYmlkXVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmlnaHRfcm9sZV9kYXRhID0ge2JpZCA6IHNlbGYuY2hhbmdlX25ld19wYXJ0bmVyX2JpZCwgc3RhciA6IGxlZnRfcm9sZV92by5zdGFyfVxuICAgICAgICAgICAgICAgICAgICBpZihzZWxmLnJpZ2h0X3JvbGUgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0X3JvbGUgPSBuZXcgQmFzZVJvbGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9yb2xlLnNldFBhcmVudChzZWxmLnJpZ2h0X3BhbmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9yb2xlLm5vZGUuc2V0UG9zaXRpb24oY2MudjIoMTAwLCAxODApKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfcm9sZS5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfcm9sZS5zZXREYXRhKEJhc2VSb2xlLnR5cGUucGFydG5lcixyaWdodF9yb2xlX2RhdGEsUGxheWVyQWN0aW9uLnNob3csIHRydWUsMC43MilcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VfY29uZmlnICYmIGJhc2VfY29uZmlnLm5hbWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfbmFtZSA9IGJhc2VfY29uZmlnLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByaWdodF9uYW1lID0gXCI/Pz8/XCJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5yaWdodF9yb2xlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfcm9sZS5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfbmFtZV9sYWJlbC5zdHJpbmcgPSByaWdodF9uYW1lXG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIHNlbGYubGVmdF9zdGFyc18xKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXIgPSBzZWxmLmxlZnRfc3RhcnNfMVtpXS5ub2RlXG4gICAgICAgICAgICAgICAgICAgIHN0YXIuYWN0aXZlID0gZmFsc2VcdFx0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2VsZi5sZWZ0X3N0YXJzXzIpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhciA9IHNlbGYubGVmdF9zdGFyc18yW2ldLm5vZGVcbiAgICAgICAgICAgICAgICAgICAgc3Rhci5hY3RpdmUgPSBmYWxzZVx0XHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBzZWxmLnJpZ2h0X3N0YXJzXzEpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhciA9IHNlbGYucmlnaHRfc3RhcnNfMVtpXS5ub2RlXG4gICAgICAgICAgICAgICAgICAgIHN0YXIuYWN0aXZlID0gZmFsc2VcdFx0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2VsZi5yaWdodF9zdGFyc18yKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXIgPSBzZWxmLnJpZ2h0X3N0YXJzXzJbaV0ubm9kZSAgIFxuICAgICAgICAgICAgICAgICAgICBzdGFyLmFjdGl2ZSA9IGZhbHNlXHRcdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5sZWZ0X3N0YXIxMCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxlZnRfc3RhcjEwLm5vZGUuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYucmlnaHRfc3RhcjEwKXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9zdGFyMTAubm9kZS5hY3RpdmUgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCByb2xlX3N0YXIgPSBsZWZ0X3JvbGVfdm8uc3RhclxuICAgICAgICAgICAgICAgIGxldCBfY1N0YXIgPSBmdW5jdGlvbihzdGFyX2NvdW50LCByZXMsIHN0YXJfbGlzdCwgcGFyZW50X25vZGUpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3Rhcl9wb3MgPSBTZWVycGFsYWNlQ29uc3QuQ2hhbmdlX1Bvc19YW3N0YXJfY291bnRdIHx8IHt9XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDtpPHN0YXJfY291bnQ7KytpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Rhcl9saXN0W2ldKSB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFyID0gVXRpbHMuY3JlYXRlSW1hZ2UocGFyZW50X25vZGUsIHJlcywgMCwgMzM4LCBjYy52MigwLjUsIDAuNSksIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkUmVzKHJlcyxmdW5jdGlvbihTcHJpdGVGcmFtZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXIuc3ByaXRlRnJhbWUgID0gU3ByaXRlRnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhcl9saXN0W2ldID0gc3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3Rhcl9saXN0W2ldLm5vZGUuYWN0aXZlID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc194ID0gc3Rhcl9wb3NbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NfeCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhcl9saXN0W2ldLm5vZGUueCA9IHBvc194XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocm9sZV9zdGFyID4gMCAmJiByb2xlX3N0YXIgPD0gNSApe1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzkwMDc0XCIpXG4gICAgICAgICAgICAgICAgICAgIF9jU3Rhcihyb2xlX3N0YXIsIHJlcywgc2VsZi5sZWZ0X3N0YXJzXzEsIHNlbGYubGVmdF9wYW5lbClcbiAgICAgICAgICAgICAgICAgICAgX2NTdGFyKHJvbGVfc3RhciwgcmVzLCBzZWxmLnJpZ2h0X3N0YXJzXzEsIHNlbGYucmlnaHRfcGFuZWwpXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYgKHJvbGVfc3RhciA+PSA2ICYmIHJvbGVfc3RhciA8PSA5ICl7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsXCJjb21tb25fOTAwNzVcIilcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gcm9sZV9zdGFyIC0gNVxuICAgICAgICAgICAgICAgICAgICBfY1N0YXIoY291bnQsIHJlcywgc2VsZi5sZWZ0X3N0YXJzXzIsIHNlbGYubGVmdF9wYW5lbClcbiAgICAgICAgICAgICAgICAgICAgX2NTdGFyKGNvdW50LCByZXMsIHNlbGYucmlnaHRfc3RhcnNfMiwgc2VsZi5yaWdodF9wYW5lbClcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAocm9sZV9zdGFyID49IDEwKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIixcImNvbW1vbl85MDA3M1wiKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYubGVmdF9zdGFyMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGVmdF9zdGFyMTAgPSBVdGlscy5jcmVhdGVJbWFnZShzZWxmLmxlZnRfcGFuZWwsIHJlcywgMTAwLCAzMzgsY2MudjIoMC41LDAuNSksdHJ1ZSwwLGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sZWZ0X3N0YXIxMC5zZXRTY2FsZSgxLjIpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sZWZ0X3N0YXIxMC5ub2RlLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5yaWdodF9zdGFyMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfc3RhcjEwID0gVXRpbHMuY3JlYXRlSW1hZ2Uoc2VsZi5yaWdodF9wYW5lbCwgcmVzLCAxMDAsIDMzOCxjYy52MigwLjUsMC41KSx0cnVlLDAsZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0X3N0YXIxMC5zZXRTY2FsZSgxLjIpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9zdGFyMTAubm9kZS5hY3RpdmUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYubGVmdF9wYW5lbC5hY3RpdmUgPSB0cnVlXG4gICAgICAgICAgICBzZWxmLnJpZ2h0X3BhbmVsLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlTGVmdEVtcHR5RWZmZWN0KGZhbHNlKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHNlbGYubGVmdF9wYW5lbC5hY3RpdmUgPSBmYWxzZVxuICAgICAgICAgICAgc2VsZi5yaWdodF9wYW5lbC5hY3RpdmUgPSBmYWxzZVxuICAgICAgICAgICAgc2VsZi5jaGFuZ2VfYnRuLmFjdGl2ZSA9IGZhbHNlXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUxlZnRFbXB0eUVmZmVjdCh0cnVlKVxuICAgICAgICAgICAgc2VsZi5oYW5kbGVSaWdodFJhbmRvbUVmZmVjdChmYWxzZSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX29uQ2xpY2tDYW1wQnRuKCBpbmRleCApe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKHNlbGYuY3VyX2luZGV4ID09IGluZGV4KSAgcmV0dXJuIFxuXG4gICAgICAgIGlmIChzZWxmLmN1cl9pbmRleCkge1xuICAgICAgICAgICAgbGV0IG9sZF9jYW1wX2RhdGEgPSBzZWxmLmNhbXBfbGlzdFtzZWxmLmN1cl9pbmRleF1cbiAgICAgICAgICAgIGlmIChvbGRfY2FtcF9kYXRhICYmIG9sZF9jYW1wX2RhdGEuc2VsZWN0X2ltYWdlICl7XG4gICAgICAgICAgICAgICAgb2xkX2NhbXBfZGF0YS5zZWxlY3RfaW1hZ2UuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJfY2FtcF9kYXRhID0gc2VsZi5jYW1wX2xpc3RbaW5kZXhdXG4gICAgICAgIGlmIChjdXJfY2FtcF9kYXRhICYmIGN1cl9jYW1wX2RhdGEuc2VsZWN0X2ltYWdlKXtcbiAgICAgICAgICAgIGN1cl9jYW1wX2RhdGEuc2VsZWN0X2ltYWdlLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuY3VyX2luZGV4ID0gaW5kZXhcbiAgICAgICAgc2VsZi5yZWZyZXNoUm9sZUxpc3QoKVxuICAgIH0sXG4gICAgLy8gLS0g5Yik5pat5piv5ZCm5Li66ZSB5L2P55qE6Iux6ZuEXG4gICAgY2hlY2tJc0xvY2tlZFJvbGUoIGlkICl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBsZXQgaXNfbG9ja2VkID0gZmFsc2VcbiAgICAgICAgZm9yKGxldCBpIGluIHNlbGYubG9ja19wYXJ0bmVyX2lkcyl7IC8vIGssdiBpbiBwYWlycyhzZWxmLmxvY2tfcGFydG5lcl9pZHMpIGRvXG4gICAgICAgICAgICBsZXQgdiA9IHNlbGYubG9ja19wYXJ0bmVyX2lkc1tpXVxuICAgICAgICAgICAgaWYgKHYuaWQgJiYgdi5pZCA9PSBpZCApe1xuICAgICAgICAgICAgICAgIGlzX2xvY2tlZCA9IHRydWVcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc19sb2NrZWRcbiAgICB9LFxuICAgIC8vIC0tIOW3pui+ueS4uuepuuaXtuaSreaUvueahOeJueaViFxuICAgIGhhbmRsZUxlZnRFbXB0eUVmZmVjdCggc3RhdHVzICl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAoc3RhdHVzID09IGZhbHNlKXsgXG4gICAgICAgICAgICBpZiAoc2VsZi5sZWZ0X2VtcHR5X2VmZmVjdCkge1xuICAgICAgICAgICAgICAgIHNlbGYubGVmdF9lbXB0eV9lZmZlY3Quc2tlbGV0b25EYXRhID0gbnVsbFxuICAgICAgICAgICAgICAgIHRoaXMubGVmdF9lbXB0eV9lZmZlY3Quc2V0VG9TZXR1cFBvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRfZW1wdHlfZWZmZWN0LmNsZWFyVHJhY2tzKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5sZWZ0X2VtcHR5X2VmZmVjdCA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZih0aGlzLmxlZnRfZWZmZWN0X25vZGUgJiYgIXRoaXMubGVmdF9lbXB0eV9lZmZlY3Qpe1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKFwiRTI0MDAxXCIsIFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhwYXRoLCBmdW5jdGlvbihza2VsZXRvbl9kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0X2VtcHR5X2VmZmVjdCA9IHNlbGYubGVmdF9lZmZlY3Rfbm9kZS5nZXRDaGlsZEJ5TmFtZShcImFjdGlvblwiKS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdF9lbXB0eV9lZmZlY3Quc2tlbGV0b25EYXRhID0gc2tlbGV0b25fZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0X2VtcHR5X2VmZmVjdC5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiwgdHJ1ZSk7ICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpOyAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyAtLSDlj7PovrnkuLrpmo/mnLrml7bnmoTnibnmlYhcbiAgICBoYW5kbGVSaWdodFJhbmRvbUVmZmVjdCggc3RhdHVzICl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAoc3RhdHVzID09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5yaWdodF9yYW5kb21fZWZmZWN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0X3JhbmRvbV9lZmZlY3Quc2V0VG9TZXR1cFBvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0X3JhbmRvbV9lZmZlY3QuY2xlYXJUcmFja3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0X3JhbmRvbV9lZmZlY3Quc2tlbGV0b25EYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0X3JhbmRvbV9lZmZlY3QgPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYgKHNlbGYucmlnaHRfZWZmZWN0X25vZGUgJiYgIXNlbGYucmlnaHRfcmFuZG9tX2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFMjQwMDJcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsIGZ1bmN0aW9uKHNrZWxldG9uX2RhdGEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0X3JhbmRvbV9lZmZlY3QgPSBzZWxmLnJpZ2h0X2VmZmVjdF9ub2RlLmdldENoaWxkQnlOYW1lKFwiYWN0aW9uXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodF9yYW5kb21fZWZmZWN0LnNrZWxldG9uRGF0YSA9IHNrZWxldG9uX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRfcmFuZG9tX2VmZmVjdC5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiwgdHJ1ZSk7ICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLy0tIOWPs+i+uee9ruaNouaIkOWKn+eahOeJueaViFxuICAgIGhhbmRsZVJpZ2h0Q2hhbmdlRWZmZWN0KCBzdGF0dXMgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmIChzdGF0dXMgPT0gZmFsc2Upe1xuICAgICAgICAgICAgaWYgKHNlbGYucmlnaHRfY2hhbmdlX2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgc2VsZi5yaWdodF9jaGFuZ2VfZWZmZWN0LnNrZWxldG9uRGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodF9jaGFuZ2VfZWZmZWN0LnNldFRvU2V0dXBQb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodF9jaGFuZ2VfZWZmZWN0LmNsZWFyVHJhY2tzKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5yaWdodF9jaGFuZ2VfZWZmZWN0ID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHNlbGYucmlnaHRfZWZmZWN0X25vZGUgJiYgIXNlbGYucmlnaHRfY2hhbmdlX2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFMjQwMDNcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsIGZ1bmN0aW9uKHNrZWxldG9uX2RhdGEpe1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0X2NoYW5nZV9lZmZlY3QgPSBzZWxmLnJpZ2h0X2VmZmVjdF9ub2RlLmdldENoaWxkQnlOYW1lKFwiYWN0aW9uMVwiKS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfY2hhbmdlX2VmZmVjdC5za2VsZXRvbkRhdGEgPSBza2VsZXRvbl9kYXRhXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfY2hhbmdlX2VmZmVjdC5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiAsIGZhbHNlKVxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIH1lbHNlIGlmKHNlbGYucmlnaHRfY2hhbmdlX2VmZmVjdCkge1xuICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfY2hhbmdlX2VmZmVjdC5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiAsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH0sXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYoc2VsZi5yb2xlX2NoYW5nZV9pbmZvX2V2ZW50KXtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LnVuYmluZChzZWxmLnJvbGVfY2hhbmdlX2luZm9fZXZlbnQpXG4gICAgICAgICAgICBzZWxmLnJvbGVfY2hhbmdlX2luZm9fZXZlbnQgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYoc2VsZi5jaGFuZ2Vfc3VjY2Vzc19ldmVudCl7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQoc2VsZi5jaGFuZ2Vfc3VjY2Vzc19ldmVudClcbiAgICAgICAgICAgIHNlbGYuY2hhbmdlX3N1Y2Nlc3NfZXZlbnQgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYubGVmdF9yb2xlKXtcbiAgICAgICAgICAgIHNlbGYubGVmdF9yb2xlLmRlbGV0ZU1lKClcbiAgICAgICAgICAgIHNlbGYubGVmdF9yb2xlID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGYucmlnaHRfcm9sZSkge1xuICAgICAgICAgICAgc2VsZi5yaWdodF9yb2xlLmRlbGV0ZU1lKClcbiAgICAgICAgICAgIHNlbGYucmlnaHRfcm9sZSA9IG51bGxcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlUmlnaHRSYW5kb21FZmZlY3QoZmFsc2UpXG4gICAgICAgIHRoaXMuaGFuZGxlTGVmdEVtcHR5RWZmZWN0KGZhbHNlKVxuICAgICAgICB0aGlzLmhhbmRsZVJpZ2h0Q2hhbmdlRWZmZWN0KGZhbHNlKVxuICAgIH0sXG59KVxubW9kdWxlLmV4cG9ydHMgPSBTZWVycGFsYWNlX2NoYW5nZV9QYW5lbDsiXX0=
|