805 lines
124 KiB
JavaScript
805 lines
124 KiB
JavaScript
|
|
(function() {
|
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
|
var __module = nodeEnv ? module : {exports:{}};
|
|
var __filename = 'preview-scripts/assets/Script/Block.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, 'c58deN2u1NGZL8nJwvnu1PR', 'Block');
|
|
// Script/Block.ts
|
|
|
|
"use strict";
|
|
// Learn TypeScript:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
return extendStatics(d, b);
|
|
};
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.PathType = exports.BlockType = void 0;
|
|
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
|
var BlockType;
|
|
(function (BlockType) {
|
|
/*普通地块 */
|
|
BlockType[BlockType["Nomal"] = 0] = "Nomal";
|
|
/*起点地块 */
|
|
BlockType[BlockType["Start"] = 1] = "Start";
|
|
/*湿地 */
|
|
BlockType[BlockType["Nunja"] = 2] = "Nunja";
|
|
/*山峰 */
|
|
BlockType[BlockType["Peak"] = 3] = "Peak";
|
|
/*终点地块 */
|
|
BlockType[BlockType["End"] = 4] = "End";
|
|
/*息壤 */
|
|
BlockType[BlockType["Xi_Soil"] = 5] = "Xi_Soil";
|
|
/*加固 */
|
|
BlockType[BlockType["Reinforce"] = 6] = "Reinforce";
|
|
})(BlockType = exports.BlockType || (exports.BlockType = {}));
|
|
var PathType;
|
|
(function (PathType) {
|
|
PathType["err"] = "err";
|
|
PathType["up"] = "up";
|
|
PathType["down"] = "down";
|
|
PathType["left"] = "left";
|
|
PathType["right"] = "right";
|
|
PathType["up_left"] = "up_left";
|
|
PathType["up_right"] = "up_right";
|
|
PathType["down_left"] = "down_left";
|
|
PathType["down_right"] = "down_right";
|
|
PathType["left_up"] = "left_up";
|
|
PathType["left_down"] = "left_down";
|
|
PathType["right_up"] = "right_up";
|
|
PathType["right_down"] = "right_down";
|
|
})(PathType = exports.PathType || (exports.PathType = {}));
|
|
var NewClass = /** @class */ (function (_super) {
|
|
__extends(NewClass, _super);
|
|
function NewClass() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
// LIFE-CYCLE CALLBACKS:
|
|
_this.UI = null;
|
|
return _this;
|
|
// update (dt) {}
|
|
}
|
|
NewClass.prototype.onLoad = function () {
|
|
this.finishi = false;
|
|
this.pos_Shifting = 0;
|
|
this.pos = cc.v2(0, 0);
|
|
};
|
|
NewClass.prototype.start = function () {
|
|
};
|
|
//初始化地图块数据
|
|
NewClass.prototype.initData = function (type, pos, max) {
|
|
this.block_Type = type;
|
|
this.pos = cc.v2(pos.x, pos.y);
|
|
// if(this.pos.y%2 == 0) this.node.getChildByName("tip").active = true;
|
|
if (type == cc.Enum(BlockType).Start) {
|
|
var bg = this.node.getChildByName("sp");
|
|
// this.node.getComponent(cc.Sprite).spriteFrame = null;
|
|
bg.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start"];
|
|
if (cc.fx.GameConfig.GM_INFO.level > 3) {
|
|
bg.getChildByName("start").y = 20;
|
|
bg.getChildByName("end").y = 20;
|
|
}
|
|
this.rotateTarget(bg, "start", pos, max);
|
|
}
|
|
else if (type == cc.Enum(BlockType).End) {
|
|
var bg = this.node.getChildByName("sp");
|
|
// this.node.getComponent(cc.Sprite).spriteFrame = null;
|
|
bg.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end"];
|
|
if (cc.fx.GameConfig.GM_INFO.level > 3) {
|
|
bg.getChildByName("start").y = 20;
|
|
bg.getChildByName("end").y = 20;
|
|
}
|
|
this.rotateTarget(bg, "end", pos, max);
|
|
}
|
|
else if (type == cc.Enum(BlockType).Nunja) {
|
|
var random = Math.floor(Math.random() * 4);
|
|
var rotationArr = [0, 90, 180, 270];
|
|
var rotation = rotationArr[random];
|
|
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e5"];
|
|
this.node.getChildByName("bg").angle = -rotation;
|
|
this.node.getComponent(cc.Sprite).spriteFrame = null;
|
|
}
|
|
else if (type == cc.Enum(BlockType).Peak) {
|
|
var random = Math.floor(Math.random() * 4 + 1);
|
|
var name = "shan" + random;
|
|
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
this.node.getComponent(cc.Sprite).spriteFrame = null;
|
|
}
|
|
if (cc.fx.GameConfig.GM_INFO.level == 1) {
|
|
this.node.getChildByName("tipWin").opacity = 220;
|
|
this.node.getChildByName("tipLose").opacity = 220;
|
|
}
|
|
else if (cc.fx.GameConfig.GM_INFO.level == 2) {
|
|
this.node.getChildByName("tipWin").opacity = 100;
|
|
this.node.getChildByName("tipLose").opacity = 100;
|
|
}
|
|
else if (cc.fx.GameConfig.GM_INFO.level == 3) {
|
|
this.node.getChildByName("tipWin").opacity = 50;
|
|
this.node.getChildByName("tipLose").opacity = 50;
|
|
}
|
|
else if (cc.fx.GameConfig.GM_INFO.level > 3) {
|
|
this.node.getChildByName("tipWin").opacity = 0;
|
|
this.node.getChildByName("tipLose").opacity = 0;
|
|
}
|
|
};
|
|
//旋转入海口和出海口的 图片以及文字角度
|
|
NewClass.prototype.rotateTarget = function (bg, name, pos, max) {
|
|
var target = bg.getChildByName(name);
|
|
if (pos.y == max.y - 1) {
|
|
bg.angle = 0;
|
|
if (name == "end")
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_x"];
|
|
target.active = true;
|
|
target.angle = 0;
|
|
return;
|
|
}
|
|
else if (pos.y == 0) {
|
|
bg.angle = -180;
|
|
if (name == "end")
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_x"];
|
|
target.active = true;
|
|
target.angle = -180;
|
|
return;
|
|
}
|
|
else if (pos.x == max.x - 1) {
|
|
bg.angle = 90;
|
|
if (name == "start")
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start_y"];
|
|
else
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_y"];
|
|
target.active = true;
|
|
target.angle = -90;
|
|
}
|
|
else if (pos.x == 0) {
|
|
bg.angle = -90;
|
|
if (name == "start")
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start_y"];
|
|
else
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_y"];
|
|
target.active = true;
|
|
target.angle = 90;
|
|
}
|
|
};
|
|
NewClass.prototype.setPath = function (type) {
|
|
this.path_Type = type;
|
|
};
|
|
//设置息壤在起点
|
|
NewClass.prototype.set_Xi_Soil = function (direction, type) {
|
|
var sp = this.node.getChildByName("sp");
|
|
var turn = this.node.getChildByName("turnStart");
|
|
var water = this.node.getChildByName("waterStart");
|
|
if (direction == "left" || direction == "right") {
|
|
if (sp.angle == 0) {
|
|
turn.active = true;
|
|
water.active = true;
|
|
water.opacity = 0;
|
|
if (type) {
|
|
turn.angle = direction == "left" ? 90 : 0;
|
|
water.angle = direction == "left" ? 90 : 0;
|
|
}
|
|
else {
|
|
turn.angle = direction == "left" ? 0 : 90;
|
|
water.angle = direction == "left" ? 0 : 90;
|
|
}
|
|
}
|
|
else if (sp.angle == -180) {
|
|
turn.active = true;
|
|
water.active = true;
|
|
water.opacity = 0;
|
|
if (type) {
|
|
turn.angle = direction == "left" ? -180 : -90;
|
|
water.angle = direction == "left" ? -180 : -90;
|
|
}
|
|
else {
|
|
turn.angle = direction == "left" ? 270 : -180;
|
|
water.angle = direction == "left" ? 270 : -180;
|
|
}
|
|
}
|
|
else if (sp.angle == -90) {
|
|
turn.active = true;
|
|
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
|
turn.angle = 90;
|
|
if (type) {
|
|
water.active = true;
|
|
water.angle = 90;
|
|
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
|
water.opacity = 0;
|
|
}
|
|
}
|
|
else if (sp.angle == 90) {
|
|
turn.active = true;
|
|
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
|
turn.angle = 90;
|
|
if (type) {
|
|
water.active = true;
|
|
water.angle = 90;
|
|
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
|
water.opacity = 0;
|
|
}
|
|
}
|
|
}
|
|
else if (direction == "up" || direction == "down") {
|
|
var sp_1 = this.node.getChildByName("sp");
|
|
if (sp_1.angle == -90) {
|
|
turn.active = true;
|
|
water.active = true;
|
|
water.opacity = 0;
|
|
if (type) {
|
|
turn.angle = direction == "up" ? 0 : -90;
|
|
water.angle = direction == "up" ? 0 : -90;
|
|
}
|
|
else {
|
|
turn.angle = direction == "up" ? -90 : 0;
|
|
water.angle = direction == "up" ? -90 : 0;
|
|
}
|
|
}
|
|
else if (sp_1.angle == 90) {
|
|
turn.active = true;
|
|
water.active = true;
|
|
water.opacity = 0;
|
|
if (type) {
|
|
turn.angle = direction == "up" ? 90 : 180;
|
|
water.angle = direction == "up" ? 90 : 180;
|
|
}
|
|
else {
|
|
turn.angle = direction == "up" ? 180 : 90;
|
|
water.angle = direction == "up" ? 180 : 90;
|
|
}
|
|
}
|
|
else if (sp_1.angle == 0) {
|
|
turn.active = true;
|
|
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
|
turn.angle = 0;
|
|
if (type) {
|
|
water.active = true;
|
|
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
|
water.opacity = 0;
|
|
}
|
|
}
|
|
else if (sp_1.angle == -180) {
|
|
turn.active = true;
|
|
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
|
turn.angle = 0;
|
|
if (type) {
|
|
water.active = true;
|
|
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
|
water.opacity = 0;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
//息壤具体执行方法 外部可调用
|
|
NewClass.prototype.set_Xi_SoilType = function (direction, end, name) {
|
|
var _this = this;
|
|
// console.log("息壤",direction,name,this.block_Type);
|
|
var jg = this.repeatRoad(true, direction);
|
|
console.log("息壤重复判断结果", jg);
|
|
if (jg == true)
|
|
return;
|
|
if (this.block_Type == cc.Enum(BlockType).Start) {
|
|
this.set_Xi_Soil(direction, false);
|
|
return;
|
|
}
|
|
if (this.block_Type == cc.Enum(BlockType).Nunja) {
|
|
this.block_Type = cc.Enum(BlockType).Nomal;
|
|
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = null;
|
|
this.node.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block_Bg"];
|
|
}
|
|
if (end != null) {
|
|
if (this.block_Type == cc.Enum(BlockType).End) {
|
|
this.finishi = true;
|
|
setTimeout(function () {
|
|
_this.set_Xi_Soil(direction, true);
|
|
}, 500);
|
|
}
|
|
setTimeout(function () {
|
|
if (name == "water")
|
|
cc.fx.Notifications.emit(cc.fx.Message.nextWater, (end + 1));
|
|
else
|
|
cc.fx.Notifications.emit(cc.fx.Message.next, (end + 1));
|
|
}, 400);
|
|
}
|
|
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start) {
|
|
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
|
}
|
|
else {
|
|
}
|
|
var target = this.node.getChildByName("Xi_Soil");
|
|
this.path_Type = direction;
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
cc.tween(target)
|
|
.to(0.1, { opacity: 255 })
|
|
.to(0.1, { opacity: 0 })
|
|
.call(function () {
|
|
if (direction != null && end == null) {
|
|
var data = {
|
|
order: 0,
|
|
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[0],
|
|
type: 0,
|
|
circulate: false
|
|
};
|
|
if (name == "water") {
|
|
_this.runWater(data);
|
|
}
|
|
else
|
|
_this.runRoad(data);
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
//判断重复路径
|
|
NewClass.prototype.repeatRoad = function (type, direction) {
|
|
//如果双向都占用了还进来就算死了-
|
|
var jg = false;
|
|
if (this.node.getChildByName("vertical2").active == true && this.node.getChildByName("horizontal2").active == true) {
|
|
// alert("治水失败");
|
|
jg = true;
|
|
if (type) {
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
}
|
|
}
|
|
else if (this.node.getChildByName("turn2").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil) {
|
|
// alert("治水失败");
|
|
jg = true;
|
|
if (type) {
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
}
|
|
}
|
|
if (direction) {
|
|
if (this.node.getChildByName("vertical2").active == true && this.block_Type == cc.Enum(BlockType).Xi_Soil && (direction == "up" || direction == "down")) {
|
|
// alert("治水失败");
|
|
jg = true;
|
|
if (type) {
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
}
|
|
}
|
|
else if (this.node.getChildByName("horizontal2").active == true && this.block_Type == cc.Enum(BlockType).Xi_Soil && (direction == "right" || direction == "left")) {
|
|
// alert("治水失败");
|
|
jg = true;
|
|
if (type) {
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
}
|
|
}
|
|
}
|
|
return jg;
|
|
};
|
|
//修筑路线执行
|
|
NewClass.prototype.runRoad = function (data) {
|
|
if (this.path_Type == "err") {
|
|
setTimeout(function () {
|
|
if (data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
|
}, data.time);
|
|
return;
|
|
}
|
|
var jg = this.repeatRoad(true, null);
|
|
if (jg == true)
|
|
return;
|
|
var target = null;
|
|
var progress = 1;
|
|
var time = data.time;
|
|
var order = data.order + 1;
|
|
var random = Math.floor(Math.random() * 4 + 1);
|
|
target = this.node.getChildByName("vertical2");
|
|
if (target.name == "vertical") {
|
|
var water1_1 = target.getChildByName("wave").getChildByName("water1");
|
|
var water2_1 = target.getChildByName("wave").getChildByName("water2");
|
|
var water3_1 = target.getChildByName("wave").getChildByName("water3");
|
|
var timeDelay = 0.15;
|
|
water1_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water1_1.y = -120;
|
|
})).repeatForever());
|
|
water2_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water2_1.y = -120;
|
|
})).repeatForever());
|
|
water3_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water3_1.y = -120;
|
|
})).repeatForever());
|
|
}
|
|
var name = "a" + random;
|
|
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
if (target.active == true) {
|
|
target = this.node.getChildByName("horizontal2");
|
|
name = "b" + random;
|
|
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
// console.log(this.path_Type,data.order);
|
|
if (this.path_Type == cc.Enum(PathType).up) {
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).down) {
|
|
target.angle = 180;
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).left) {
|
|
target.angle = 90;
|
|
name = "b" + random;
|
|
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).right) {
|
|
target.angle = 270;
|
|
name = "b" + random;
|
|
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
else {
|
|
target = this.node.getChildByName("turn2");
|
|
if (target.name == "turn") {
|
|
var water_1 = target.getChildByName("wave").getChildByName("water");
|
|
water_1.opacity = 0;
|
|
water_1.runAction(cc.sequence(cc.rotateTo(7.2, -1080), cc.delayTime(0)).repeatForever());
|
|
setTimeout(function () {
|
|
water_1.opacity = 255;
|
|
}, 200);
|
|
}
|
|
name = "c" + random;
|
|
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
|
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
progress = 0.25;
|
|
if (this.path_Type == cc.Enum(PathType).up_left) {
|
|
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).up_right) {
|
|
target.scaleX = -1;
|
|
target.setPosition(this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).down_left) {
|
|
target.angle = 180;
|
|
target.scaleX = -1;
|
|
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).down_right) {
|
|
target.angle = 180;
|
|
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).left_up) {
|
|
target.angle = -90;
|
|
target.scaleY = -1;
|
|
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).left_down) {
|
|
target.angle = 90;
|
|
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).right_up) {
|
|
target.angle = -90;
|
|
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).right_down) {
|
|
target.angle = -90;
|
|
target.scaleX = -1;
|
|
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
}
|
|
if (this.path_Type == "Reinforce") {
|
|
target = this.node.getChildByName("Reinforce");
|
|
if (this.block_Type == cc.Enum(BlockType).Peak) {
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
return;
|
|
}
|
|
if (this.block_Type != cc.Enum(BlockType).End)
|
|
this.block_Type = cc.Enum(BlockType).Reinforce;
|
|
this.node.getChildByName("vertical2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e1"];
|
|
this.node.getChildByName("turn2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e3"];
|
|
this.node.getChildByName("horizontal2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e2"];
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
progress = 1;
|
|
cc.tween(target)
|
|
.to(cc.fx.GameConfig.TIME_INFO.ReinforceSpeed, { opacity: 255 })
|
|
.call(function () {
|
|
if (data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.changeMap, order);
|
|
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
|
})
|
|
.start();
|
|
}
|
|
else if (this.path_Type == "Xi_Soil") {
|
|
target.active = false;
|
|
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start)
|
|
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
|
target = this.node.getChildByName("Xi_Soil");
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
cc.tween(target)
|
|
.to(0.01, { opacity: 1 })
|
|
.to(0.01, { opacity: 0 })
|
|
.call(function () {
|
|
if (data.circulate) {
|
|
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
|
}
|
|
})
|
|
.start();
|
|
}
|
|
else if (this.path_Type == "End") {
|
|
target.active = false;
|
|
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start)
|
|
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
|
var posTemp = data.last;
|
|
var direction = "up";
|
|
if (this.pos.x - posTemp.x >= 1) {
|
|
direction = "right";
|
|
}
|
|
else if (this.pos.x - posTemp.x <= -1) {
|
|
direction = "left";
|
|
}
|
|
else if (this.pos.y - posTemp.y >= 1) {
|
|
direction = "down";
|
|
}
|
|
console.log("结束方向:", direction);
|
|
if (!this.finishi) {
|
|
this.finishi = true;
|
|
this.set_Xi_Soil(direction, true);
|
|
}
|
|
}
|
|
else {
|
|
target.active = true;
|
|
if (this.block_Type != cc.Enum(BlockType).Xi_Soil) {
|
|
target.getComponent(cc.Sprite).fillRange = 0;
|
|
cc.tween(target.getComponent(cc.Sprite))
|
|
.to(time, { fillRange: progress })
|
|
.call(function () {
|
|
if (data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
|
})
|
|
.start();
|
|
}
|
|
else {
|
|
target.opacity = 0;
|
|
target.getComponent(cc.Sprite).fillRange = 1;
|
|
cc.tween(target)
|
|
.to(time, { opacity: 255 })
|
|
.call(function () {
|
|
if (data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
|
})
|
|
.start();
|
|
}
|
|
}
|
|
};
|
|
//洪峰执行
|
|
NewClass.prototype.runWater = function (data) {
|
|
if (this.node.getChildByName("waterStart").active == true && this.block_Type == cc.Enum(BlockType).Start) {
|
|
// sp.getChildByName("waterStart").opacity = 255;
|
|
cc.tween(this.node.getChildByName("waterStart"))
|
|
.to(0.2, { opacity: 255 })
|
|
.start();
|
|
}
|
|
if (this.path_Type == "err") {
|
|
setTimeout(function () {
|
|
if (data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.nextWater, order);
|
|
}, data.time);
|
|
return;
|
|
}
|
|
//如果双向都占用了还进来就算死了-
|
|
if (this.node.getChildByName("vertical").active == true && this.node.getChildByName("horizontal").active == true) {
|
|
// alert("治水失败");
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
// cc.director.loadScene("GameScene");
|
|
return;
|
|
}
|
|
else if (this.node.getChildByName("turn").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil) {
|
|
// alert("治水失败");
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
// cc.director.loadScene("GameScene");
|
|
return;
|
|
}
|
|
var target = null;
|
|
var progress = 1;
|
|
var time = data.time;
|
|
var order = data.order + 1;
|
|
var random = Math.floor(Math.random() * 4 + 1);
|
|
target = this.node.getChildByName("vertical");
|
|
if (target.name == "vertical") {
|
|
var water1_2 = target.getChildByName("wave").getChildByName("water1");
|
|
var water2_2 = target.getChildByName("wave").getChildByName("water2");
|
|
var water3_2 = target.getChildByName("wave").getChildByName("water3");
|
|
var timeDelay = 0.15;
|
|
water1_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water1_2.y = -120;
|
|
})).repeatForever());
|
|
water2_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water2_2.y = -120;
|
|
})).repeatForever());
|
|
water3_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water3_2.y = -120;
|
|
})).repeatForever());
|
|
}
|
|
var name = "a" + random;
|
|
// if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
if (target.active == true) {
|
|
target = this.node.getChildByName("horizontal");
|
|
var water1_3 = target.getChildByName("wave").getChildByName("water1");
|
|
var water2_3 = target.getChildByName("wave").getChildByName("water2");
|
|
var water3_3 = target.getChildByName("wave").getChildByName("water3");
|
|
var timeDelay = 0.15;
|
|
water1_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water1_3.y = -120;
|
|
})).repeatForever());
|
|
water2_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water2_3.y = -120;
|
|
})).repeatForever());
|
|
water3_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
|
water3_3.y = -120;
|
|
})).repeatForever());
|
|
name = "b" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
// console.log(this.path_Type,data.order);
|
|
if (this.path_Type == cc.Enum(PathType).up) {
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).down) {
|
|
target.angle = 180;
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).left) {
|
|
target.angle = 90;
|
|
name = "b" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).right) {
|
|
target.angle = 270;
|
|
name = "b" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
else {
|
|
target = this.node.getChildByName("turn");
|
|
if (target.name == "turn") {
|
|
var water_2 = target.getChildByName("wave").getChildByName("water");
|
|
water_2.opacity = 0;
|
|
water_2.runAction(cc.sequence(cc.rotateTo(7.2, -1080), cc.delayTime(0)).repeatForever());
|
|
setTimeout(function () {
|
|
water_2.opacity = 255;
|
|
}, 200);
|
|
}
|
|
name = "c" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
progress = 0.25;
|
|
if (this.path_Type == cc.Enum(PathType).up_left) {
|
|
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).up_right) {
|
|
target.scaleX = -1;
|
|
target.setPosition(this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).down_left) {
|
|
target.angle = 180;
|
|
target.scaleX = -1;
|
|
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).down_right) {
|
|
target.angle = 180;
|
|
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).left_up) {
|
|
target.angle = -90;
|
|
target.scaleY = -1;
|
|
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).left_down) {
|
|
target.angle = 90;
|
|
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).right_up) {
|
|
target.angle = -90;
|
|
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
|
}
|
|
else if (this.path_Type == cc.Enum(PathType).right_down) {
|
|
target.angle = -90;
|
|
target.scaleX = -1;
|
|
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
|
}
|
|
}
|
|
if (this.path_Type == "End") {
|
|
target.active = false;
|
|
if (this.block_Type == cc.Enum(BlockType).End) {
|
|
if (this.node.getChildByName("waterStart").active == true && this.block_Type == cc.Enum(BlockType).End) {
|
|
cc.tween(this.node.getChildByName("waterStart"))
|
|
.to(0.2, { opacity: 255 })
|
|
.call(function () {
|
|
// alert("治水成功");
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "win");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, true);
|
|
if (cc.fx.GameConfig.GM_INFO.level < 7) {
|
|
cc.fx.GameConfig.GM_INFO.level += 1;
|
|
}
|
|
setTimeout(function () {
|
|
// cc.director.loadScene("GameScene");
|
|
}, 500);
|
|
})
|
|
.start();
|
|
}
|
|
}
|
|
else {
|
|
target = this.node.getChildByName("End");
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
var posTemp = data.last;
|
|
if (this.pos.x - posTemp.x >= 1) {
|
|
target.angle = -90;
|
|
}
|
|
else if (this.pos.x - posTemp.x <= -1) {
|
|
target.angle = 90;
|
|
}
|
|
else if (this.pos.y - posTemp.y >= 1) {
|
|
target.angle = 180;
|
|
}
|
|
cc.tween(target)
|
|
.to(0.5, { opacity: 255 })
|
|
.call(function () {
|
|
// alert("治水失败")
|
|
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
|
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
|
// cc.director.loadScene("GameScene");
|
|
})
|
|
.start();
|
|
}
|
|
}
|
|
else {
|
|
target.active = true;
|
|
target.getComponent(cc.Sprite).fillRange = 0;
|
|
cc.tween(target.getComponent(cc.Sprite))
|
|
.to(time, { fillRange: progress })
|
|
.call(function () {
|
|
if (data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.nextWater, order);
|
|
})
|
|
.start();
|
|
}
|
|
};
|
|
__decorate([
|
|
property(cc.SpriteAtlas)
|
|
], NewClass.prototype, "UI", void 0);
|
|
NewClass = __decorate([
|
|
ccclass
|
|
], NewClass);
|
|
return NewClass;
|
|
}(cc.Component));
|
|
exports.default = NewClass;
|
|
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxCbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUUsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUMsSUFBWSxTQWdCWDtBQWhCRCxXQUFZLFNBQVM7SUFDakIsU0FBUztJQUNULDJDQUFTLENBQUE7SUFDVCxTQUFTO0lBQ1QsMkNBQVMsQ0FBQTtJQUNULE9BQU87SUFDUCwyQ0FBUyxDQUFBO0lBQ1QsT0FBTztJQUNQLHlDQUFRLENBQUE7SUFDUixTQUFTO0lBQ1QsdUNBQU8sQ0FBQTtJQUVQLE9BQU87SUFDUCwrQ0FBVyxDQUFBO0lBQ1gsT0FBTztJQUNQLG1EQUFhLENBQUE7QUFDakIsQ0FBQyxFQWhCVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWdCcEI7QUFFRCxJQUFZLFFBY1g7QUFkRCxXQUFZLFFBQVE7SUFDaEIsdUJBQVcsQ0FBQTtJQUNYLHFCQUFTLENBQUE7SUFDVCx5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLDJCQUFlLENBQUE7SUFDZiwrQkFBbUIsQ0FBQTtJQUNuQixpQ0FBcUIsQ0FBQTtJQUNyQixtQ0FBdUIsQ0FBQTtJQUN2QixxQ0FBeUIsQ0FBQTtJQUN6QiwrQkFBbUIsQ0FBQTtJQUNuQixtQ0FBdUIsQ0FBQTtJQUN2QixpQ0FBcUIsQ0FBQTtJQUNyQixxQ0FBeUIsQ0FBQTtBQUM3QixDQUFDLEVBZFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFjbkI7QUFHRDtJQUFzQyw0QkFBWTtJQUFsRDtRQUFBLHFFQW91QkM7UUFudUJHLHdCQUF3QjtRQUV4QixRQUFFLEdBQW1CLElBQUks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N0MsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLElBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUM7WUFDekIsSUFBSSxRQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsSUFBSSxRQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsSUFBSSxRQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLFFBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQU0sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUN2RixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNSLFFBQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLFFBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQU0sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUN2RixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNSLFFBQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7WUFDbkIsQ0FBQyxDQUFD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R0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDeEI7UUFFRCxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLGtJQUFrSTtRQUVsSSxJQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFDO1lBQ3JCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRCxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDcEIsa0lBQWtJO1NBQ3JJO1FBQ0QsMENBQTBDO1FBQzFDLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBQztTQUN6QzthQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBQztZQUM3QyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztTQUN0QjthQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElB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QUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN2QyxFQUFFLENBQUMsSUFBSSxFQUFDLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxDQUFDO2lCQUM3QixJQUFJLENBQUM7Z0JBQ0YsSUFBRyxJQUFJLENBQUMsU0FBUztvQkFDYixFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQztpQkFDRCxLQUFLLEVBQUUsQ0FBQztTQUNaO0lBRUwsQ0FBQztJQTl0QkQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQzt3Q0FDQztJQUhULFFBQVE7UUFENUIsT0FBTztPQUNhLFFBQVEsQ0FvdUI1QjtJQUFELGVBQUM7Q0FwdUJELEFBb3VCQyxDQXB1QnFDLEVBQUUsQ0FBQyxTQUFTLEdBb3VCakQ7a0JBcHVCb0IsUUFBUSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExlYXJuIFR5cGVTY3JpcHQ6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3R5cGVzY3JpcHQuaHRtbFxyXG4vLyBMZWFybiBBdHRyaWJ1dGU6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWxcclxuLy8gTGVhcm4gbGlmZS1jeWNsZSBjYWxsYmFja3M6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL2xpZmUtY3ljbGUtY2FsbGJhY2tzLmh0bWxcclxuXHJcbmNvbnN0IHtjY2NsYXNzLCBwcm9wZXJ0eX0gPSBjYy5fZGVjb3JhdG9yO1xyXG5cclxuZXhwb3J0IGVudW0gQmxvY2tUeXBle1xyXG4gICAgLyrmma7pgJrlnLDlnZcgKi9cclxuICAgIE5vbWFsID0gMCwgIFxyXG4gICAgLyrotbfngrnlnLDlnZcgKi9cclxuICAgIFN0YXJ0ID0gMSwgIFxyXG4gICAgLyrmub/lnLAgKi9cclxuICAgIE51bmphID0gMixcclxuICAgIC8q5bGx5bOwICovXHJcbiAgICBQZWFrID0gMyxcclxuICAgIC8q57uI54K55Zyw5Z2XICovXHJcbiAgICBFbmQgPSA0LFxyXG5cclxuICAgIC8q5oGv5aOkICovXHJcbiAgICBYaV9Tb2lsID0gNSxcclxuICAgIC8q5Yqg5Zu6ICovXHJcbiAgICBSZWluZm9yY2UgPSA2XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFBhdGhUeXBle1xyXG4gICAgZXJyID0gXCJlcnJcIixcclxuICAgIHVwID0gXCJ1cFwiLCAgXHJcbiAgICBkb3duID0gXCJkb3duXCIsICBcclxuICAgIGxlZnQgPSBcImxlZnRcIixcclxuICAgIHJpZ2h0ID0gXCJyaWdodFwiLFxyXG4gICAgdXBfbGVmdCA9IFwidXBfbGVmdFwiLFxyXG4gICAgdXBfcmlnaHQgPSBcInVwX3JpZ2h0XCIsXHJcbiAgICBkb3duX2xlZnQgPSBcImRvd25fbGVmdFwiLFxyXG4gICAgZG93bl9yaWdodCA9IFwiZG93bl9yaWdodFwiLFxyXG4gICAgbGVmdF91cCA9IFwibGVmdF91cFwiLFxyXG4gICAgbGVmdF9kb3duID0gXCJsZWZ0X2Rvd25cIixcclxuICAgIHJpZ2h0X3VwID0gXCJyaWdodF91cFwiLFxyXG4gICAgcmlnaHRfZG93biA9IFwicmlnaHRfZG93blwiLFxyXG59XHJcblxyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXdDbGFzcyBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcbiAgICAvLyBMSUZFLUNZQ0xFIENBTExCQUNLUzpcclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIFVJOiBjYy5TcHJpdGVBdGxhcyA9IG51bGw7XHJcblxyXG4gICAgcG9zX1NoaWZ0aW5nOm51bWJlcjtcclxuICAgIGJsb2NrX1R5cGU6bnVtYmVyO1xyXG4gICAgcGF0aF9UeXBlOnN0cmluZztcclxuICAgIGZpbmlzaGk6Ym9vbGVhbjtcclxuICAgIHBvczogYW55O1xyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICB0aGlzLmZpbmlzaGkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBvc19TaGlmdGluZyA9IDA7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBjYy52MigwLDApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIC8v5Yid5aeL5YyW5Zyw5Zu+5Z2X5pWw5o2uXHJcbiAgICBpbml0RGF0YSh0eXBlLHBvcyxtYXgpe1xyXG4gICAgICAgIHRoaXMuYmxvY2tfVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBjYy52Mihwb3MueCxwb3MueSk7XHJcbiAgICAgICAgLy8gaWYodGhpcy5wb3MueSUyID09IDApIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KXsgXHJcbiAgICAgICAgICAgIHZhciBiZyA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBiZy5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wic3RhcnRcIl07XHJcbiAgICAgICAgICAgIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA+IDMpe1xyXG4gICAgICAgICAgICAgICAgYmcuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFydFwiKS55ID0gMjA7XHJcbiAgICAgICAgICAgICAgICBiZy5nZXRDaGlsZEJ5TmFtZShcImVuZFwiKS55ID0gMjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yb3RhdGVUYXJnZXQoYmcsXCJzdGFydFwiLHBvcyxtYXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCl7XHJcbiAgICAgICAgICAgIHZhciBiZyA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBiZy5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPiAzKXtcclxuICAgICAgICAgICAgICAgIGJnLmdldENoaWxkQnlOYW1lKFwic3RhcnRcIikueSA9IDIwO1xyXG4gICAgICAgICAgICAgICAgYmcuZ2V0Q2hpbGRCeU5hbWUoXCJlbmRcIikueSA9IDIwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucm90YXRlVGFyZ2V0KGJnLFwiZW5kXCIscG9zLG1heCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuTnVuamEpe1xyXG4gICAgICAgICAgICBsZXQgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpO1xyXG4gICAgICAgICAgICBsZXQgcm90YXRpb25BcnIgPSBbMCw5MCwxODAsMjcwXTtcclxuICAgICAgICAgICAgbGV0IHJvdGF0aW9uID0gcm90YXRpb25BcnJbcmFuZG9tXTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImU1XCJdO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5hbmdsZSA9IC1yb3RhdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5QZWFrKXtcclxuICAgICAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KzEpO1xyXG4gICAgICAgICAgICBsZXQgbmFtZSA9IFwic2hhblwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPT0gMSl7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFdpblwiKS5vcGFjaXR5ID0gMjIwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSAyMjA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID09IDIpe1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikub3BhY2l0eSA9IDEwMDtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwTG9zZVwiKS5vcGFjaXR5ID0gMTAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA9PSAzKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLm9wYWNpdHkgPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwTG9zZVwiKS5vcGFjaXR5ID0gNTA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID4gMyl7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFdpblwiKS5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwTG9zZVwiKS5vcGFjaXR5ID0gMDtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICB9XHJcbiAgICAvL+aXi+i9rOWFpea1t+WPo+WSjOWHuua1t+WPo+eahCDlm77niYfku6Xlj4rmloflrZfop5LluqZcclxuICAgIHJvdGF0ZVRhcmdldChiZyxuYW1lLHBvcyxtYXgpe1xyXG4gICAgICAgIGxldCB0YXJnZXQgPSBiZy5nZXRDaGlsZEJ5TmFtZShuYW1lKTtcclxuICAgICAgICBpZihwb3MueSA9PSBtYXgueS0xKXtcclxuICAgICAgICAgICAgYmcuYW5nbGUgPSAwO1xyXG4gICAgICAgICAgICBpZihuYW1lID09IFwiZW5kXCIpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kX3hcIl07XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYocG9zLnkgPT0gMCl7XHJcbiAgICAgICAgICAgIGJnLmFuZ2xlID0gLTE4MDtcclxuICAgICAgICAgICAgaWYobmFtZSA9PSBcImVuZFwiKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kX3hcIl07XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtMTgwO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYocG9zLnggPT0gbWF4LngtMSl7XHJcbiAgICAgICAgICAgIGJnLmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgIGlmKG5hbWUgPT0gXCJzdGFydFwiKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wic3RhcnRfeVwiXTtcclxuICAgICAgICAgICAgZWxzZSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImVuZF95XCJdO1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHBvcy54ID09IDApe1xyXG4gICAgICAgICAgICBiZy5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgaWYobmFtZSA9PSBcInN0YXJ0XCIpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJzdGFydF95XCJdO1xyXG4gICAgICAgICAgICBlbHNlIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kX3lcIl07XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSA5MDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UGF0aCh0eXBlKXtcclxuICAgICAgICB0aGlzLnBhdGhfVHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcbiAgICAvL+iuvue9ruaBr+WjpOWcqOi1t+eCuVxyXG4gICAgc2V0X1hpX1NvaWwoZGlyZWN0aW9uLHR5cGUpe1xyXG4gICAgICAgIGxldCBzcCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpO1xyXG4gICAgICAgIGxldCB0dXJuID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVyblN0YXJ0XCIpO1xyXG4gICAgICAgIGxldCB3YXRlciA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIik7XHJcblxyXG4gICAgICAgIGlmKGRpcmVjdGlvbiA9PSBcImxlZnRcIiB8fCBkaXJlY3Rpb24gPT0gXCJyaWdodFwiKXtcclxuICAgICAgICAgICAgaWYoc3AuYW5nbGUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzkwOjA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzkwOjA7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8wOjkwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8wOjkwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IC0xODApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8tMTgwOi05MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJsZWZ0XCI/LTE4MDotOTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzI3MDotMTgwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8yNzA6LTE4MDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihzcC5hbmdsZSA9PSAtOTApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJhMVwiXTtcclxuICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYmxvY2sxXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IDkwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID10cnVlO1xyXG4gICAgICAgICAgICAgICAgdHVybi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYTFcIl07XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImJsb2NrMVwiXTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGRpcmVjdGlvbiA9PSBcInVwXCIgfHwgZGlyZWN0aW9uID09IFwiZG93blwiKXtcclxuICAgICAgICAgICAgbGV0IHNwID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIik7XHJcbiAgICAgICAgICAgIGlmKHNwLmFuZ2xlID09IC05MCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8wOi05MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPzA6LTkwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/LTkwOjA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8tOTA6MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IDkwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj85MDoxODA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj85MDoxODA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8xODA6OTA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8xODA6OTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihzcC5hbmdsZSA9PSAwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID10cnVlO1xyXG4gICAgICAgICAgICAgICAgdHVybi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYTFcIl07XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImJsb2NrMVwiXTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IC0xODApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJhMVwiXTtcclxuICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYmxvY2sxXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/mga/lo6TlhbfkvZPmiafooYzmlrnms5UgIOWklumDqOWPr+iwg+eUqFxyXG4gICAgc2V0X1hpX1NvaWxUeXBlKGRpcmVjdGlvbixlbmQsbmFtZSl7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLmga/lo6RcIixkaXJlY3Rpb24sbmFtZSx0aGlzLmJsb2NrX1R5cGUpO1xyXG4gICAgICAgIHZhciBqZyA9IHRoaXMucmVwZWF0Um9hZCh0cnVlLGRpcmVjdGlvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLmga/lo6Tph43lpI3liKTmlq3nu5PmnpxcIixqZyk7XHJcbiAgICAgICAgaWYoamcgPT0gdHJ1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KXtcclxuICAgICAgICAgICAgdGhpcy5zZXRfWGlfU29pbChkaXJlY3Rpb24sZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLk51bmphKXtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja19UeXBlID0gY2MuRW51bShCbG9ja1R5cGUpLk5vbWFsO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9ICB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImJsb2NrX0JnXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihlbmQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoaSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldF9YaV9Tb2lsKGRpcmVjdGlvbix0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYobmFtZSA9PSBcIndhdGVyXCIpIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHRXYXRlciwoZW5kKzEpKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCwoZW5kKzEpKTtcclxuICAgICAgICAgICAgfSwgNDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuU3RhcnQpe1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrX1R5cGUgPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbDtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJYaV9Tb2lsXCIpOyBcclxuICAgICAgICB0aGlzLnBhdGhfVHlwZSA9IGRpcmVjdGlvbjtcclxuICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0YXJnZXQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgY2MudHdlZW4odGFyZ2V0KVxyXG4gICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZihkaXJlY3Rpb24gIT0gbnVsbCAmJiBlbmQgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlcjowLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6Y2MuZnguR2FtZUNvbmZpZy5USU1FX0lORk8ud2F0ZXJTcGVlZFswXSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOjAsXHJcbiAgICAgICAgICAgICAgICAgICAgY2lyY3VsYXRlOmZhbHNlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYobmFtZSA9PSBcIndhdGVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuV2F0ZXIoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLnJ1blJvYWQoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG4gICAgLy/liKTmlq3ph43lpI3ot6/lvoQgXHJcbiAgICByZXBlYXRSb2FkKHR5cGUsZGlyZWN0aW9uKXtcclxuICAgICAgICAvL+WmguaenOWPjOWQkemDveWNoOeUqOS6hui/mOi/m+adpeWwseeul+atu+S6hi0gXHJcbiAgICAgICAgdmFyIGpnID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWwyXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWwyXCIpLmFjdGl2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgLy8gYWxlcnQoXCLmsrvmsLTlpLHotKVcIik7XHJcbiAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInR1cm4yXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCl7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBqZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zZXREYXRhLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoZGlyZWN0aW9uKXtcclxuICAgICAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWwyXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCAmJiAoZGlyZWN0aW9uID09IFwidXBcInx8IGRpcmVjdGlvbiA9PVwiZG93blwiKSl7XHJcbiAgICAgICAgICAgICAgICAvLyBhbGVydChcIuayu+awtOWksei0pVwiKTtcclxuICAgICAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNob3dSZXN1bHQsXCJsb3NlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiaG9yaXpvbnRhbDJcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5YaV9Tb2lsICYmIChkaXJlY3Rpb24gPT0gXCJyaWdodFwifHwgZGlyZWN0aW9uID09XCJsZWZ0XCIpKXtcclxuICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqZztcclxuICAgIH1cclxuXHJcbiAgICAvL+S/ruetkei3r+e6v+aJp+ihjFxyXG4gICAgcnVuUm9hZChkYXRhKXtcclxuICAgICAgICBpZih0aGlzLnBhdGhfVHlwZSA9PSBcImVyclwiKXtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LG9yZGVyKTtcclxuICAgICAgICAgICAgfSwgZGF0YS50aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgamcgPSB0aGlzLnJlcGVhdFJvYWQodHJ1ZSxudWxsKTtcclxuICAgICAgICBpZihqZyA9PSB0cnVlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHByb2dyZXNzID0gMTtcclxuICAgICAgICB2YXIgdGltZSA9IGRhdGEudGltZTtcclxuICAgICAgICB2YXIgb3JkZXIgPSBkYXRhLm9yZGVyICsgMTtcclxuICAgICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQgKyAxKTtcclxuICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIik7XHJcbiAgICAgICAgaWYodGFyZ2V0Lm5hbWUgPT0gXCJ2ZXJ0aWNhbFwiKXtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMSA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjFcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjIgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIyXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIzID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyM1wiKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVEZWxheSA9IDAuMTU7XHJcbiAgICAgICAgICAgIHdhdGVyMS5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjEueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMS55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgd2F0ZXIyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMi54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIyLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjMucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIzLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjMueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmFtZSA9IFwiYVwiICsgcmFuZG9tO1xyXG4gICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG5cclxuICAgICAgICBpZih0YXJnZXQuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJob3Jpem9udGFsMlwiKTtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYlwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSkgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgfSBcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnBhdGhfVHlwZSxkYXRhLm9yZGVyKTtcclxuICAgICAgICBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS51cCl7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkuZG93bil7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0KXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImJcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0KXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMjcwO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJiXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVybjJcIik7XHJcbiAgICAgICAgICAgIGlmKHRhcmdldC5uYW1lID09IFwidHVyblwiKXtcclxuICAgICAgICAgICAgICAgIGxldCB3YXRlciA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlclwiKTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwXHJcbiAgICAgICAgICAgICAgICB3YXRlci5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2Mucm90YXRlVG8oNy4yLC0xMDgwKSxjYy5kZWxheVRpbWUoMCkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gXCJjXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IDAuMjU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnVwX2xlZnQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkudXBfcmlnaHQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duX2xlZnQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duX3JpZ2h0KXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0X3VwKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zY2FsZVkgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0X2Rvd24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5yaWdodF91cCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0X2Rvd24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IFwiUmVpbmZvcmNlXCIpe1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJSZWluZm9yY2VcIik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuUGVhayl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kKXRoaXMuYmxvY2tfVHlwZSA9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsMlwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZTFcIl07XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInR1cm4yXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlM1wiXTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiaG9yaXpvbnRhbDJcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImUyXCJdO1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IDE7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAgICAgLnRvKGNjLmZ4LkdhbWVDb25maWcuVElNRV9JTkZPLlJlaW5mb3JjZVNwZWVkLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UuY2hhbmdlTWFwLG9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LG9yZGVyKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gXCJYaV9Tb2lsXCIpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuU3RhcnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrX1R5cGUgPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbDtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiWGlfU29pbFwiKTsgXHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAgICAgLnRvKDAuMDEse29wYWNpdHk6MX0pXHJcbiAgICAgICAgICAgIC50bygwLjAxLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LG9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBcIkVuZFwiKXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCAmJiB0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja19UeXBlID0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWw7XHJcbiAgICAgICAgICAgIGxldCBwb3NUZW1wID0gZGF0YS5sYXN0O1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gXCJ1cFwiO1xyXG4gICAgICAgICAgICBpZih0aGlzLnBvcy54IC0gcG9zVGVtcC54ID49IDEpe1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJyaWdodFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wb3MueCAtIHBvc1RlbXAueCA8PSAtMSl7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImxlZnRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucG9zLnkgLSBwb3NUZW1wLnkgPj0gMSl7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImRvd25cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIue7k+adn+aWueWQkTpcIixkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZighdGhpcy5maW5pc2hpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoaSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldF9YaV9Tb2lsKGRpcmVjdGlvbix0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5YaV9Tb2lsKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAwO1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4odGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgICAgICAgICAgLnRvKHRpbWUse2ZpbGxSYW5nZTpwcm9ncmVzc30pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCxvcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4odGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgLnRvKHRpbWUse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LG9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvL+a0quWzsOaJp+ihjFxyXG4gICAgcnVuV2F0ZXIoZGF0YSl7XHJcbiAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKS5hY3RpdmUgPT0gdHJ1ZSAmJiB0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KXtcclxuICAgICAgICAgICAgLy8gc3AuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlclN0YXJ0XCIpLm9wYWNpdHkgPSAyNTU7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikpXHJcbiAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gXCJlcnJcIil7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dFdhdGVyLG9yZGVyKTtcclxuICAgICAgICAgICAgfSwgZGF0YS50aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+WmguaenOWPjOWQkemDveWNoOeUqOS6hui/mOi/m+adpeWwseeul+atu+S6hi0gXHJcbiAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWxcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiaG9yaXpvbnRhbFwiKS5hY3RpdmUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCl7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAxO1xyXG4gICAgICAgIHZhciB0aW1lID0gZGF0YS50aW1lO1xyXG4gICAgICAgIHZhciBvcmRlciA9IGRhdGEub3JkZXIgKyAxO1xyXG4gICAgICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCArIDEpO1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsXCIpO1xyXG4gICAgICAgIGlmKHRhcmdldC5uYW1lID09IFwidmVydGljYWxcIil7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjEgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIxXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIyID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyMlwiKTtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMyA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjNcIik7XHJcbiAgICAgICAgICAgIGxldCB0aW1lRGVsYXkgPSAwLjE1O1xyXG4gICAgICAgICAgICB3YXRlcjEucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIxLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjEueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgIHdhdGVyMi5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjIueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMi55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgd2F0ZXIzLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMy54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIzLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5hbWUgPSBcImFcIiArIHJhbmRvbTtcclxuICAgICAgICAvLyBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSl0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuXHJcbiAgICAgICAgaWYodGFyZ2V0LmFjdGl2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiaG9yaXpvbnRhbFwiKTtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMSA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjFcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjIgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIyXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIzID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyM1wiKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVEZWxheSA9IDAuMTU7XHJcbiAgICAgICAgICAgIHdhdGVyMS5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjEueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMS55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgd2F0ZXIyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMi54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIyLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjMucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIzLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjMueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImJcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgLy9pZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSkgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgfSBcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnBhdGhfVHlwZSxkYXRhLm9yZGVyKTtcclxuICAgICAgICBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS51cCl7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkuZG93bil7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0KXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImJcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgLy9pZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSkgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkucmlnaHQpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAyNzA7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImJcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgLy9pZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSkgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInR1cm5cIik7XHJcbiAgICAgICAgICAgIGlmKHRhcmdldC5uYW1lID09IFwidHVyblwiKXtcclxuICAgICAgICAgICAgICAgIGxldCB3YXRlciA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlclwiKTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwXHJcbiAgICAgICAgICAgICAgICB3YXRlci5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2Mucm90YXRlVG8oNy4yLC0xMDgwKSxjYy5kZWxheVRpbWUoMCkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gXCJjXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgICAgIHByb2dyZXNzID0gMC4yNTtcclxuICAgICAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkudXBfbGVmdCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS51cF9yaWdodCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVYID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24odGhpcy5wb3NfU2hpZnRpbmcsLXRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmRvd25fbGVmdCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAxODA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVYID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmRvd25fcmlnaHQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmxlZnRfdXApe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmxlZnRfZG93bil7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsLXRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0X3VwKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkucmlnaHRfZG93bil7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVYID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IFwiRW5kXCIpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05oiQ5YqfXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwid2luXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zZXREYXRhLHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsIDwgNyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkVuZFwiKTsgXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5vcGFjaXR5ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zVGVtcCA9IGRhdGEubGFzdDtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucG9zLnggLSBwb3NUZW1wLnggPj0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wb3MueCAtIHBvc1RlbXAueCA8PSAtMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRoaXMucG9zLnkgLSBwb3NUZW1wLnkgPj0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAgICAgICAgIC50bygwLjUse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAwO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkpXHJcbiAgICAgICAgICAgIC50byh0aW1lLHtmaWxsUmFuZ2U6cHJvZ3Jlc3N9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHRXYXRlcixvcmRlcik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRlIChkdCkge31cclxufVxyXG4iXX0=
|