449 lines
62 KiB
JavaScript
449 lines
62 KiB
JavaScript
|
|
(function() {
|
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
|
var __module = nodeEnv ? module : {exports:{}};
|
|
var __filename = 'preview-scripts/assets/Script/Player.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, '7fd74nqW4BCN6aFalN5nmyL', 'Player');
|
|
// Script/Player.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 });
|
|
var GameData_1 = require("./GameData");
|
|
var GameManager_1 = require("./GameManager");
|
|
var AudioManager_1 = require("./tool/AudioManager");
|
|
var Notification_1 = require("./tool/Notification");
|
|
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
|
0;
|
|
var NewClass = /** @class */ (function (_super) {
|
|
__extends(NewClass, _super);
|
|
function NewClass() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.add = null;
|
|
_this.plist = null;
|
|
return _this;
|
|
}
|
|
// LIFE-CYCLE CALLBACKS:
|
|
// onLoad () {}
|
|
NewClass.prototype.start = function () {
|
|
this.init();
|
|
};
|
|
NewClass.prototype.init = function () {
|
|
this.jumpState = 0;
|
|
this.jumpHeight = this.node.y;
|
|
this.basicHeight = this.node.y;
|
|
this.up = true;
|
|
this.double = false;
|
|
this.death = false;
|
|
this.jumpAction = null;
|
|
this.block = null;
|
|
this.interfere = false;
|
|
this.jumpPause = true;
|
|
};
|
|
//跳动
|
|
NewClass.prototype.jump = function () {
|
|
var _this = this;
|
|
if (this.jumpPause == true)
|
|
return;
|
|
if (this.jumpState < 2) {
|
|
if (this.jumpState == 0) {
|
|
if (this.death == false) {
|
|
this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false);
|
|
}
|
|
}
|
|
else if (this.jumpState == 1 || this.node.y > (this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight - 5)) {
|
|
if (this.death == false) {
|
|
if (GameManager_1.default._instance.guide > 0 && GameManager_1.default._instance.guide < 3) {
|
|
return;
|
|
}
|
|
this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false);
|
|
}
|
|
}
|
|
setTimeout(function () {
|
|
if (_this.jumpState == 0) {
|
|
if (_this.jumpPause == true) {
|
|
return;
|
|
}
|
|
if (_this.block) {
|
|
if (_this.block.name != "block13") {
|
|
_this.block.getComponent("Block").hide();
|
|
}
|
|
else {
|
|
_this.block.active = false;
|
|
_this.block.removeFromParent();
|
|
}
|
|
_this.block = null;
|
|
}
|
|
if (GameManager_1.default._instance.guide == 1) {
|
|
GameManager_1.default._instance.guide = 2;
|
|
GameManager_1.default._instance.startGuide(2, false);
|
|
}
|
|
GameData_1.default._instance.CLICK_DATA.jumps = 1;
|
|
AudioManager_1.default._instance.playJump();
|
|
// this.basicHeight = this.node.y;
|
|
_this.jumpState += 1;
|
|
_this.up = true;
|
|
Notification_1.Notification.emit("showGround", _this.node.y);
|
|
_this.jumpAction = cc.tween(_this.node)
|
|
.to(GameData_1.default._instance.GM_INFO.jumpUpTime, { position: cc.v3(0, _this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight, 0) }, { easing: 'quadOut' })
|
|
.call(function () {
|
|
_this.up = false;
|
|
_this.jumpState = -1;
|
|
var temp = _this.node.y - _this.jumpHeight;
|
|
})
|
|
.to(GameData_1.default._instance.GM_INFO.jumpDownTime, { position: cc.v3(0, _this.jumpHeight, 0) }, { easing: 'cubicIn' })
|
|
.call(function () {
|
|
_this.jumpHeight = _this.node.y;
|
|
_this.jumpState = -1;
|
|
_this.up = true;
|
|
})
|
|
.start();
|
|
}
|
|
else if (_this.jumpState == 1 || _this.node.y > (_this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight - 15)) {
|
|
if (GameManager_1.default._instance.guide > 0 && GameManager_1.default._instance.guide < 3) {
|
|
return;
|
|
}
|
|
if (GameManager_1.default._instance.guide == 6) {
|
|
_this.jumpPause = true;
|
|
GameManager_1.default._instance.startGuide(6, false);
|
|
}
|
|
if (_this.jumpAction)
|
|
_this.jumpAction.stop();
|
|
AudioManager_1.default._instance.playJump();
|
|
GameData_1.default._instance.CLICK_DATA.jumps = 2;
|
|
_this.jumpState = 2;
|
|
_this.up = true;
|
|
_this.jumpAction = cc.tween(_this.node)
|
|
.to(GameData_1.default._instance.GM_INFO.jumpUpTime, { position: cc.v3(0, _this.node.y + GameData_1.default._instance.GM_INFO.jumpHeight, 0) }, { easing: 'quadOut' })
|
|
.call(function () {
|
|
_this.up = false;
|
|
})
|
|
.to(GameData_1.default._instance.GM_INFO.jumpDownTime * 1.5, { position: cc.v3(0, _this.jumpHeight, 0) }, { easing: 'cubicIn' })
|
|
.call(function () {
|
|
_this.jumpState = -1;
|
|
_this.jumpHeight = _this.node.y;
|
|
_this.up = true;
|
|
})
|
|
.start();
|
|
}
|
|
}, 100);
|
|
}
|
|
};
|
|
NewClass.prototype.onCollisionEnter = function (other, self) {
|
|
if (GameManager_1.default._instance) {
|
|
if (GameManager_1.default._instance.over == true) {
|
|
return;
|
|
}
|
|
}
|
|
var max = other.name.length;
|
|
var num = 6;
|
|
if (other.node.name != "Ground") {
|
|
if (GameManager_1.default._instance.guide == -1) {
|
|
if (other.node.getComponent("Block").num > 9)
|
|
num = 7;
|
|
}
|
|
else {
|
|
num = 7;
|
|
}
|
|
}
|
|
var ColliderName = other.name.substring(num, max);
|
|
//获取碰撞体名字
|
|
if (ColliderName == "<PolygonCollider>") {
|
|
if (this.node.y <= other.node.y && this.up == true && this.death == false) {
|
|
if (this.jumpAction)
|
|
this.jumpAction.stop();
|
|
this.jumpState = -1;
|
|
AudioManager_1.default._instance.playGround();
|
|
console.log("死亡1");
|
|
this.gameDeath();
|
|
}
|
|
else if (other.node.name == "Ground" && this.death == false) {
|
|
// if(this.jumpAction)this.jumpAction.stop();
|
|
this.jumpState = -1;
|
|
console.log("死亡2");
|
|
this.gameDeath();
|
|
}
|
|
else {
|
|
// console.log("没碰到边缘",this.up,this.node.y,other.node.y,this.jumpState,this.up);
|
|
}
|
|
}
|
|
if (ColliderName == "<BoxCollider>") {
|
|
if (this.death == true) {
|
|
console.log("已经死亡");
|
|
return;
|
|
}
|
|
//
|
|
var portrait = Math.abs(this.node.y - other.node.y);
|
|
var width = other.node.width / 2;
|
|
var pos = Math.abs(this.node.x - other.node.x);
|
|
var distance = pos / width;
|
|
// console.log("我的位置:",this.node.x,"块的位置:",other.node.x,"块的宽度:",width,"百分比:",distance);
|
|
if (this.up == true) {
|
|
console.log("死亡4");
|
|
AudioManager_1.default._instance.playGround();
|
|
this.gameDeath();
|
|
}
|
|
else {
|
|
if (distance * 100 < GameData_1.default._instance.GM_INFO.distanceMin && this.jumpState != 0) {
|
|
// console.log("成功1");
|
|
// console.log("百分比:",distance*100+"%");
|
|
this.success(other, distance * 100);
|
|
}
|
|
else {
|
|
if (portrait >= 20 || distance * 100 > GameData_1.default._instance.GM_INFO.distanceMax) {
|
|
console.log("死亡3", "落差:", portrait, "状态:", this.up);
|
|
AudioManager_1.default._instance.playGround();
|
|
this.gameDeath();
|
|
}
|
|
else {
|
|
// console.log("成功2");
|
|
console.log("百分比:", distance * 100 + "%");
|
|
this.success(other, distance * 100);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
NewClass.prototype.success = function (other, distance) {
|
|
this.jumpPause = true;
|
|
if (GameManager_1.default._instance.guide != -1) {
|
|
this.basicHeight = this.node.y;
|
|
other.node.stopAllActions();
|
|
if (GameManager_1.default._instance.guide == 3 || GameManager_1.default._instance.guide == 4) {
|
|
GameManager_1.default._instance.startGuide(4, false);
|
|
if (GameManager_1.default._instance.guide == 4) {
|
|
GameManager_1.default._instance.guide = 5;
|
|
}
|
|
}
|
|
else if (GameManager_1.default._instance.guide == 5) {
|
|
this.jumpPause = true;
|
|
var tip = GameManager_1.default._instance.Tip.getChildByName("good");
|
|
cc.tween(tip)
|
|
.to(0.3, { opacity: 255, scale: 1 })
|
|
.delay(0.5)
|
|
.to(0.2, { opacity: 0 })
|
|
.call(function () {
|
|
GameManager_1.default._instance.startGuide(5, false);
|
|
})
|
|
.start();
|
|
}
|
|
else if (GameManager_1.default._instance.guide == 7) {
|
|
GameManager_1.default._instance.startGuide(8, false);
|
|
}
|
|
else if (GameManager_1.default._instance.guide == 8) {
|
|
this.jumpPause = true;
|
|
var tip = GameManager_1.default._instance.Tip.getChildByName("perfet");
|
|
cc.tween(tip)
|
|
.to(0.3, { opacity: 255, scale: 1 })
|
|
.delay(0.5)
|
|
.to(0.2, { opacity: 0 })
|
|
.call(function () {
|
|
GameManager_1.default._instance.startGuide(9, false);
|
|
})
|
|
.start();
|
|
}
|
|
}
|
|
var percent = parseInt(distance * 10 + "") / 10;
|
|
GameData_1.default._instance.CLICK_DATA.percent = percent;
|
|
if (GameManager_1.default._instance)
|
|
GameManager_1.default._instance.destroyBlock(true);
|
|
this.add.active = true;
|
|
this.add.opacity = 0;
|
|
var number = 1;
|
|
if (distance <= 10)
|
|
number = 3;
|
|
else if (distance <= 20)
|
|
number = 2;
|
|
GameData_1.default._instance.CLICK_DATA.accuracy = number;
|
|
this.add.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.plist.getSpriteFrames()[number];
|
|
this.add.getChildByName("jia").getComponent(cc.Sprite).spriteFrame = this.plist.getSpriteFrames()[number + 3];
|
|
this.addAction();
|
|
this.node.getChildByName("guang").active = true;
|
|
this.node.getChildByName("guang").getComponent(sp.Skeleton).setAnimation(0, "double_1", false);
|
|
if (this.jumpAction)
|
|
this.jumpAction.stop();
|
|
if (this.death == false) {
|
|
this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false);
|
|
}
|
|
this.basicHeight = this.node.y;
|
|
if (number > 1) {
|
|
AudioManager_1.default._instance.playPz();
|
|
if (this.double == false) {
|
|
this.double = true;
|
|
GameData_1.default._instance.LEVEL_INFO.doubleHit = 1.05;
|
|
}
|
|
else {
|
|
GameData_1.default._instance.LEVEL_INFO.doubleHit += GameData_1.default._instance.LEVEL_INFO.doubleAdd;
|
|
}
|
|
var combo = (GameData_1.default._instance.LEVEL_INFO.doubleHit - 1) * (1 / 0.05);
|
|
GameData_1.default._instance.CLICK_DATA.combo = parseInt(combo + "");
|
|
}
|
|
else {
|
|
AudioManager_1.default._instance.playLuo();
|
|
this.double = false;
|
|
GameData_1.default._instance.CLICK_DATA.combo = 0;
|
|
}
|
|
this.block = other.node;
|
|
if (this.block.name != "block13") {
|
|
this.block.getComponent("Block").setScore(number);
|
|
GameData_1.default._instance.GM_INFO.afkCount = 0;
|
|
if (GameManager_1.default._instance.countTime > 0) {
|
|
Notification_1.Notification.emit("setData", false);
|
|
}
|
|
}
|
|
setTimeout(function () {
|
|
if (GameManager_1.default._instance.guide == -1) {
|
|
Notification_1.Notification.emit("createBlock", null);
|
|
if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess == 0) {
|
|
setTimeout(function () {
|
|
Notification_1.Notification.emit("createCrackBlock", null);
|
|
}, 100);
|
|
}
|
|
}
|
|
}, 10);
|
|
if (number > 1 && GameData_1.default._instance.LEVEL_INFO.doubleSuccess != 0) {
|
|
GameData_1.default._instance.LEVEL_INFO.doubleSuccess -= 1;
|
|
}
|
|
else {
|
|
if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess != 0 && GameData_1.default._instance.LEVEL_INFO.doubleSuccess < 3) {
|
|
GameData_1.default._instance.LEVEL_INFO.doubleSuccess = 3;
|
|
}
|
|
}
|
|
if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess == 0) {
|
|
}
|
|
else {
|
|
GameManager_1.default._instance.interfere = false;
|
|
GameData_1.default._instance.CLICK_DATA.fake = GameManager_1.default._instance.interfere;
|
|
}
|
|
this.jumpState = 0;
|
|
this.up = true;
|
|
this.node.y = other.node.y - 3 + other.node.height / 2;
|
|
this.jumpHeight = this.node.y;
|
|
};
|
|
NewClass.prototype.gameDeath = function () {
|
|
// console.log("条失败");
|
|
this.jumpPause = true;
|
|
if (!GameData_1.default._instance.GM_INFO.probation) {
|
|
GameData_1.default._instance.CLICK_DATA.combo = 0;
|
|
GameData_1.default._instance.CLICK_DATA.accuracy = 0;
|
|
GameData_1.default._instance.CLICK_DATA.percent = -1;
|
|
if (GameData_1.default._instance.CLICK_DATA.jumps == 0 && GameManager_1.default._instance.round == 1) {
|
|
GameData_1.default._instance.GM_INFO.afkCount += 1;
|
|
if (GameData_1.default._instance.GM_INFO.afkCount == 3) {
|
|
GameData_1.default._instance.GM_INFO.isAFK = true;
|
|
}
|
|
}
|
|
else {
|
|
GameData_1.default._instance.GM_INFO.afkCount = 0;
|
|
}
|
|
if (GameManager_1.default._instance.countTime > 0) {
|
|
Notification_1.Notification.emit("setData", false);
|
|
}
|
|
this.double = false;
|
|
GameData_1.default._instance.LEVEL_INFO.doubleSuccess = 3;
|
|
this.death = true;
|
|
if (this.jumpAction)
|
|
this.jumpAction.stop();
|
|
this.jumpState = -1;
|
|
Notification_1.Notification.emit("death", false);
|
|
}
|
|
else {
|
|
this.death = true;
|
|
if (GameManager_1.default._instance.guide == 6) {
|
|
GameManager_1.default._instance.tipHide("tip4", null, false);
|
|
}
|
|
if (this.jumpAction)
|
|
this.jumpAction.stop();
|
|
this.jumpState = -1;
|
|
Notification_1.Notification.emit("death", true);
|
|
}
|
|
};
|
|
NewClass.prototype.xinAction = function () {
|
|
if (GameData_1.default._instance.GM_INFO.life >= 0) {
|
|
var xin = this.node.getChildByName("xin");
|
|
xin.y = 120;
|
|
cc.tween(xin)
|
|
.to(0.2, { opacity: 255, y: xin.y + 50 })
|
|
.delay(0.5)
|
|
.to(0.3, { opacity: 0, y: xin.y + 100 })
|
|
.call(function () {
|
|
})
|
|
.start();
|
|
}
|
|
};
|
|
NewClass.prototype.addAction = function () {
|
|
var _this = this;
|
|
this.add.y = 120;
|
|
cc.tween(this.add)
|
|
.to(0.2, { opacity: 255, y: this.add.y + 50 })
|
|
.delay(0.5)
|
|
.to(0.3, { opacity: 0, y: this.add.y + 100 })
|
|
.call(function () {
|
|
_this.add.active = false;
|
|
})
|
|
.start();
|
|
};
|
|
NewClass.prototype.update = function (dt) {
|
|
// if(this.death == true && this.node.y > -500 && GameManager._instance.over == false){
|
|
// // this.node.y -= 3;
|
|
// // if(this.node.y <= -500){
|
|
// // this.node.y = -500;
|
|
// // }
|
|
// }
|
|
};
|
|
__decorate([
|
|
property(cc.Node)
|
|
], NewClass.prototype, "add", void 0);
|
|
__decorate([
|
|
property(cc.SpriteAtlas)
|
|
], NewClass.prototype, "plist", 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxQbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQix3RUFBd0U7QUFDeEUsbUJBQW1CO0FBQ25CLGtGQUFrRjtBQUNsRiw4QkFBOEI7QUFDOUIsa0ZBQWtGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEYsdUNBQWtDO0FBQ2xDLDZDQUF3QztBQUN4QyxvREFBK0M7QUFDL0Msb0RBQW1EO0FBQzdDLElBQUEsS0FBc0IsRUFBRSxDQUFDLFVBQVUsRUFBbEMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFpQixDQUFDO0FBQUEsQ0FBQyxDQUFBO0FBRzNDO0lBQXNDLDRCQUFZO0lBQWxEO1FBQUEscUVBaVpDO1FBOVlHLFNBQUcsR0FBWSxJQUFJLENBQUM7UUFFcEIsV0FBSyxHQUFrQixJQUFJLENBQUM7O0lBNFloQyxDQUFDO0lBaFlHLHdCQUF3QjtJQUV4QixlQUFlO0lBRWYsd0JBQUssR0FBTDtRQUNJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FB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QUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNqQixFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUM7YUFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQzthQUNwQyxJQUFJLENBQUM7WUFDSCxLQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQseUJBQU0sR0FBTixVQUFRLEVBQUU7UUFDTix1RkFBdUY7UUFDdkYsMkJBQTJCO1FBQzNCLGtDQUFrQztRQUNsQyxpQ0FBaUM7UUFDakMsWUFBWTtRQUNaLElBQUk7SUFDUixDQUFDO0lBN1lEO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7eUNBQ0U7SUFFcEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQzsyQ0FDRztJQUxYLFFBQVE7UUFENUIsT0FBTztPQUNhLFFBQVEsQ0FpWjVCO0lBQUQsZUFBQztDQWpaRCxBQWlaQyxDQWpacUMsRUFBRSxDQUFDLFNBQVMsR0FpWmpEO2tCQWpab0IsUUFBUSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExlYXJuIFR5cGVTY3JpcHQ6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3R5cGVzY3JpcHQuaHRtbFxyXG4vLyBMZWFybiBBdHRyaWJ1dGU6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWxcclxuLy8gTGVhcm4gbGlmZS1jeWNsZSBjYWxsYmFja3M6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL2xpZmUtY3ljbGUtY2FsbGJhY2tzLmh0bWxcclxuXHJcbmltcG9ydCBHYW1lRGF0YSBmcm9tIFwiLi9HYW1lRGF0YVwiO1xyXG5pbXBvcnQgR2FtZU1hbmFnZXIgZnJvbSBcIi4vR2FtZU1hbmFnZXJcIjtcclxuaW1wb3J0IEF1ZGlvTWFuYWdlciBmcm9tIFwiLi90b29sL0F1ZGlvTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuL3Rvb2wvTm90aWZpY2F0aW9uJztcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7MFxyXG5cclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3Q2xhc3MgZXh0ZW5kcyBjYy5Db21wb25lbnQge1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgYWRkOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIHBsaXN0OiBjYy5TcHJpdGVBdGxhcyA9bnVsbDtcclxuXHJcbiAgICBiYXNpY0hlaWdodDpudW1iZXIgIC8v5q+P5qyh6Lez6LeD5YmN5Z+656GA6auY5bqmXHJcbiAgICBqdW1wU3RhdGU6bnVtYmVyOyAgIC8v6Lez6LeD54q25oCB77yM5o6n5Yi2Meautei3szLmrrXot7NcclxuICAgIGp1bXBIZWlnaHQ6bnVtYmVyOyAgLy/ot7Pot4Ppq5jluqZcclxuICAgIGp1bXBBY3Rpb246IGNjLlR3ZWVuPGNjLk5vZGU+Oy8v6Lez6LeDdHdlZW7liqjnlLvvvIznlKjkuo7lgZzmraLmjqfliLZcclxuICAgIHVwOmJvb2xlYW47ICAgICAgICAgLy/ot7Pot4PkuIrljYfkuIvpmY3nirbmgIHliKTmlq1cclxuICAgIGJsb2NrOiBjYy5Ob2RlO1xyXG4gICAgZGVhdGg6Ym9vbGVhbjtcclxuICAgIGludGVyZmVyZTpib29sZWFuO1xyXG4gICAgZG91YmxlOmJvb2xlYW47XHJcbiAgICBqdW1wUGF1c2U6Ym9vbGVhbjtcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG5cclxuICAgIC8vIG9uTG9hZCAoKSB7fVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCl7XHJcbiAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAwO1xyXG4gICAgICAgIHRoaXMuanVtcEhlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIHRoaXMuYmFzaWNIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICB0aGlzLnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVhdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmp1bXBBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYmxvY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW50ZXJmZXJlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8v6Lez5YqoXHJcbiAgICBqdW1wKCl7XHJcbiAgICAgICAgaWYodGhpcy5qdW1wUGF1c2UgPT0gdHJ1ZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMuanVtcFN0YXRlIDwgMil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuanVtcFN0YXRlID09IDApe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKS5zZXRBbmltYXRpb24oMSxcImp1bXBcIixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmp1bXBTdGF0ZSA9PSAxIHx8IHRoaXMubm9kZS55ID4gKHRoaXMuanVtcEhlaWdodCtHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wSGVpZ2h0LTUpKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVhdGggPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA+MCAmJiBHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPDMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDEsXCJqdW1wXCIsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wU3RhdGUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wUGF1c2UgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYmxvY2spe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmJsb2NrLm5hbWUgIT0gXCJibG9jazEzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9jay5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2suYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrLnJlbW92ZUZyb21QYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9jayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoMixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5qdW1wcyA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5SnVtcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYmFzaWNIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2hvd0dyb3VuZFwiLHRoaXMubm9kZS55KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBBY3Rpb24gPSBjYy50d2Vlbih0aGlzLm5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBVcFRpbWUse3Bvc2l0aW9uOmNjLnYzKDAsdGhpcy5qdW1wSGVpZ2h0K0dhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J3F1YWRPdXQnfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMubm9kZS55IC0gdGhpcy5qdW1wSGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBEb3duVGltZSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J2N1YmljSW4nfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRoaXMuanVtcFN0YXRlID09IDEgfHwgdGhpcy5ub2RlLnkgPiAodGhpcy5qdW1wSGVpZ2h0K0dhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBIZWlnaHQtMTUpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPjAgJiYgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlIDwzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoNixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUp1bXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5qdW1wcyA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcEFjdGlvbiA9IGNjLnR3ZWVuKHRoaXMubm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcFVwVGltZSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLm5vZGUueStHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wSGVpZ2h0LDApfSx7ZWFzaW5nOidxdWFkT3V0J30pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50byhHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wRG93blRpbWUqMS41LHtwb3NpdGlvbjpjYy52MygwLHRoaXMuanVtcEhlaWdodCwwKX0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29sbGlzaW9uRW50ZXIob3RoZXI6IGNjLkNvbGxpZGVyLCBzZWxmOiBjYy5Db2xsaWRlcikge1xyXG4gICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZSl7XHJcbiAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5vdmVyID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWF4ID0gb3RoZXIubmFtZS5sZW5ndGg7XHJcbiAgICAgICAgbGV0IG51bSA9IDY7XHJcbiAgICAgICAgaWYob3RoZXIubm9kZS5uYW1lICE9IFwiR3JvdW5kXCIpe1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gLTEpe1xyXG4gICAgICAgICAgICAgICAgaWYob3RoZXIubm9kZS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5udW0gPiA5KSBudW0gPSA3OyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgbnVtID0gNztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICAgbGV0IENvbGxpZGVyTmFtZSA9IG90aGVyLm5hbWUuc3Vic3RyaW5nKG51bSxtYXgpO1xyXG4gICAgICAgIC8v6I635Y+W56Kw5pKe5L2T5ZCN5a2XXHJcbiAgICAgICAgaWYoQ29sbGlkZXJOYW1lID09IFwiPFBvbHlnb25Db2xsaWRlcj5cIil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZS55IDw9IG90aGVyLm5vZGUueSAmJiB0aGlzLnVwID09IHRydWUgJiYgdGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlHcm91bmQoKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5q275LqhMVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihvdGhlci5ub2RlLm5hbWUgPT0gXCJHcm91bmRcIiAmJiB0aGlzLmRlYXRoID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5q275LqhMlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5rKh56Kw5Yiw6L6557yYXCIsdGhpcy51cCx0aGlzLm5vZGUueSxvdGhlci5ub2RlLnksdGhpcy5qdW1wU3RhdGUsdGhpcy51cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoQ29sbGlkZXJOYW1lID09IFwiPEJveENvbGxpZGVyPlwiICl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGVhdGggPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuW3sue7j+atu+S6oVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICBsZXQgcG9ydHJhaXQgPSBNYXRoLmFicyh0aGlzLm5vZGUueS1vdGhlci5ub2RlLnkpXHJcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IG90aGVyLm5vZGUud2lkdGgvMjtcclxuICAgICAgICAgICAgbGV0IHBvcyA9IE1hdGguYWJzKHRoaXMubm9kZS54IC0gb3RoZXIubm9kZS54KTtcclxuICAgICAgICAgICAgbGV0IGRpc3RhbmNlID1wb3Mvd2lkdGg7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5oiR55qE5L2N572uOlwiLHRoaXMubm9kZS54LFwi5Z2X55qE5L2N572uOlwiLG90aGVyLm5vZGUueCxcIuWdl+eahOWuveW6pjpcIix3aWR0aCxcIueZvuWIhuavlDpcIixkaXN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLnVwID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmrbvkuqE0XCIpO1xyXG4gICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5R3JvdW5kKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVEZWF0aCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSoxMDAgPCBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5kaXN0YW5jZU1pbiAmJiB0aGlzLmp1bXBTdGF0ZSAhPSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaIkOWKnzFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLnmb7liIbmr5Q6XCIsZGlzdGFuY2UqMTAwK1wiJVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3Mob3RoZXIsZGlzdGFuY2UqMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocG9ydHJhaXQgPj0gMjAgfHwgZGlzdGFuY2UqMTAwID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uZGlzdGFuY2VNYXgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuatu+S6oTNcIixcIuiQveW3rjpcIixwb3J0cmFpdCxcIueKtuaAgTpcIix0aGlzLnVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5R3JvdW5kKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5oiQ5YqfMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLnmb7liIbmr5Q6XCIsZGlzdGFuY2UqMTAwK1wiJVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzKG90aGVyLGRpc3RhbmNlKjEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN1Y2Nlc3Mob3RoZXIsZGlzdGFuY2Upe1xyXG4gICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgIT0gLTEpe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2ljSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgIG90aGVyLm5vZGUuc3RvcEFsbEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDMgfHwgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlPT00KXtcclxuICAgICAgICAgICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zdGFydEd1aWRlKDQsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9IDU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlwID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLlRpcC5nZXRDaGlsZEJ5TmFtZShcImdvb2RcIik7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aXApXHJcbiAgICAgICAgICAgICAgICAudG8oMC4zLHtvcGFjaXR5OjI1NSxzY2FsZToxfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoNSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDcpe1xyXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoOCxmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gOCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlwID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLlRpcC5nZXRDaGlsZEJ5TmFtZShcInBlcmZldFwiKTtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRpcClcclxuICAgICAgICAgICAgICAgIC50bygwLjMse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MH0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc3RhcnRHdWlkZSg5LGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcGVyY2VudCA9IHBhcnNlSW50KGRpc3RhbmNlKjEwK1wiXCIpLzEwO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnBlcmNlbnQgPSBwZXJjZW50O1xyXG4gICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZSlHYW1lTWFuYWdlci5faW5zdGFuY2UuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMuYWRkLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IDE7XHJcbiAgICAgICAgaWYoZGlzdGFuY2UgPD0gMTApIG51bWJlciA9IDM7XHJcbiAgICAgICAgZWxzZSBpZihkaXN0YW5jZSA8PSAyMCkgbnVtYmVyID0gMjtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5hY2N1cmFjeSA9IG51bWJlcjtcclxuICAgIFxyXG4gICAgICAgIHRoaXMuYWRkLmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMucGxpc3QuZ2V0U3ByaXRlRnJhbWVzKClbbnVtYmVyXTtcclxuICAgICAgICB0aGlzLmFkZC5nZXRDaGlsZEJ5TmFtZShcImppYVwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMucGxpc3QuZ2V0U3ByaXRlRnJhbWVzKClbbnVtYmVyKzNdO1xyXG4gICAgICAgIHRoaXMuYWRkQWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiZ3VhbmdcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJndWFuZ1wiKS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pLnNldEFuaW1hdGlvbigwLFwiZG91YmxlXzFcIixmYWxzZSk7XHJcbiAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgaWYodGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDEsXCJqdW1wXCIsZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5iYXNpY0hlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIGlmKG51bWJlciA+IDEpe1xyXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlQeigpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmRvdWJsZSA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvdWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQgPSAxLjA1O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlQWRkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb21ibyA9IChHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQtMSkqKDEvMC4wNSk7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gcGFyc2VJbnQoY29tYm8gKyBcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5THVvKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ibG9jayA9IG90aGVyLm5vZGU7XHJcbiAgICAgICAgaWYodGhpcy5ibG9jay5uYW1lICE9IFwiYmxvY2sxM1wiKXtcclxuICAgICAgICAgICAgdGhpcy5ibG9jay5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5zZXRTY29yZShudW1iZXIpO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5hZmtDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5jb3VudFRpbWUgPiAwKXtcclxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2V0RGF0YVwiLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcImNyZWF0ZUJsb2NrXCIsbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcImNyZWF0ZUNyYWNrQmxvY2tcIixudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICB9LCAxMCk7XHJcbiAgXHJcbiAgICAgICAgaWYobnVtYmVyID4gMSAmJiBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzICE9IDAgKXtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyAtPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzICE9IDAgJiYgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzczwzKXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgPSAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgPT0gMCl7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2UuaW50ZXJmZXJlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmZha2UgPSBHYW1lTWFuYWdlci5faW5zdGFuY2UuaW50ZXJmZXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub2RlLnkgPSBvdGhlci5ub2RlLnktMytvdGhlci5ub2RlLmhlaWdodC8yO1xyXG4gICAgICAgIHRoaXMuanVtcEhlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgfVxyXG5cclxuICAgIGdhbWVEZWF0aCgpe1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5p2h5aSx6LSlXCIpO1xyXG4gICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICBpZighR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucHJvYmF0aW9uKXtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuY29tYm8gPSAwO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5hY2N1cmFjeSA9IDA7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnBlcmNlbnQgPSAtMTtcclxuICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuanVtcHMgPT0gMCAmJiBHYW1lTWFuYWdlci5faW5zdGFuY2Uucm91bmQgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5hZmtDb3VudCArPSAxO1xyXG4gICAgICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYWZrQ291bnQgPT0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uaXNBRksgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5hZmtDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmNvdW50VGltZSA+IDApe1xyXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJzZXREYXRhXCIsZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgPSAzO1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwiZGVhdGhcIixmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhdGggPSB0cnVlO1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNil7XHJcbiAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2UudGlwSGlkZShcInRpcDRcIixudWxsLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJkZWF0aFwiLHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB4aW5BY3Rpb24oKXtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID49IDApe1xyXG4gICAgICAgICAgICBsZXQgeGluID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwieGluXCIpO1xyXG4gICAgICAgICAgICB4aW4ueSA9IDEyMDtcclxuICAgICAgICAgICAgY2MudHdlZW4oeGluKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NSx5Onhpbi55KzUwfSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eTowLHk6eGluLnkrMTAwfSlcclxuICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy5hZGQueSA9IDEyMDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLmFkZClcclxuICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NSx5OnRoaXMuYWRkLnkrNTB9KVxyXG4gICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgLnRvKDAuMyx7b3BhY2l0eTowLHk6dGhpcy5hZGQueSsxMDB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgIHRoaXMuYWRkLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlIChkdCkge1xyXG4gICAgICAgIC8vIGlmKHRoaXMuZGVhdGggPT0gdHJ1ZSAmJiB0aGlzLm5vZGUueSA+IC01MDAgJiYgR2FtZU1hbmFnZXIuX2luc3RhbmNlLm92ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAgIC8vICAgICAvLyB0aGlzLm5vZGUueSAtPSAzO1xyXG4gICAgICAgIC8vICAgICAvLyBpZih0aGlzLm5vZGUueSA8PSAtNTAwKXtcclxuICAgICAgICAvLyAgICAgLy8gICAgIHRoaXMubm9kZS55ID0gLTUwMDtcclxuICAgICAgICAvLyAgICAgLy8gfSBcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcbn1cclxuIl19
|