749 lines
100 KiB
JavaScript
749 lines
100 KiB
JavaScript
|
|
(function() {
|
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
|
var __module = nodeEnv ? module : {exports:{}};
|
|
var __filename = 'preview-scripts/assets/Script/GameManager.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, 'b26a49RCSFPT4C+F7xAd62t', 'GameManager');
|
|
// Script/GameManager.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 GameTool_1 = require("./tool/GameTool");
|
|
var Notification_1 = require("./tool/Notification");
|
|
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
|
var GameManager = /** @class */ (function (_super) {
|
|
__extends(GameManager, _super);
|
|
function GameManager() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.Camera = null;
|
|
_this.topUI = null;
|
|
_this.Player = null;
|
|
_this.Ground = null;
|
|
_this.Xin = null;
|
|
_this.time = null;
|
|
_this.GameOver = null;
|
|
_this.Tip = null;
|
|
_this.blockPrefab = [];
|
|
return _this;
|
|
}
|
|
GameManager_1 = GameManager;
|
|
// LIFE-CYCLE CALLBACKS:
|
|
GameManager.prototype.onLoad = function () {
|
|
// cc.game.setFrameRate(59.9);
|
|
// 示例使用
|
|
var manager = cc.director.getCollisionManager();
|
|
manager.enabled = true;
|
|
// manager.enabledDebugDraw = true;
|
|
GameManager_1._instance = this;
|
|
// GameData._instance.GM_INFO.probation = false;
|
|
};
|
|
GameManager.prototype.onEnable = function () {
|
|
Notification_1.Notification.on("createBlock", this.createBlock, this);
|
|
Notification_1.Notification.on("addScore", this.addScore, this);
|
|
Notification_1.Notification.on("createCrackBlock", this.createCrackBlock, this);
|
|
Notification_1.Notification.on("showGround", this.showGround, this);
|
|
Notification_1.Notification.on("death", this.getDeath, this);
|
|
Notification_1.Notification.on("jump", this.jump, this);
|
|
Notification_1.Notification.on("setData", this.setData, this);
|
|
};
|
|
GameManager.prototype.onDestroy = function () {
|
|
Notification_1.Notification.off("createBlock", this.createBlock);
|
|
Notification_1.Notification.off("addScore", this.addScore);
|
|
Notification_1.Notification.off("createBlock", this.createCrackBlock);
|
|
Notification_1.Notification.off("death", this.getDeath);
|
|
Notification_1.Notification.off("jump", this.jump);
|
|
Notification_1.Notification.off("showGround", this.showGround);
|
|
Notification_1.Notification.off("setData", this.setData);
|
|
};
|
|
//根据是否全面屏,做独立适配方面
|
|
GameManager.prototype.fit = function () {
|
|
this.node.getChildByName("bg2").y = -2167.675;
|
|
var jg = this.setFit();
|
|
if (!jg) {
|
|
this.node.getChildByName("bg2").y = -2100;
|
|
this.topUI.y = 660;
|
|
}
|
|
};
|
|
//判断全面屏
|
|
GameManager.prototype.getSetScreenResolutionFlag = function () {
|
|
var size = cc.winSize;
|
|
var width = size.width;
|
|
var height = size.height;
|
|
if ((height / width) > (16.2 / 9))
|
|
return false;
|
|
return true;
|
|
};
|
|
//判断全面屏适配
|
|
GameManager.prototype.setFit = function () {
|
|
var flag = this.getSetScreenResolutionFlag();
|
|
if (flag) {
|
|
}
|
|
else {
|
|
}
|
|
return flag;
|
|
};
|
|
GameManager.prototype.init = function () {
|
|
this.drop = this.topUI.y - this.Camera.node.y;
|
|
this.score = 0;
|
|
this.oldSpeed = 10;
|
|
this.guide = -1;
|
|
this.begin = true;
|
|
this.over = false;
|
|
this.interfere = false;
|
|
this.round = 0;
|
|
this.level = 0;
|
|
GameData_1.default._instance.GM_INFO.levelMax = 1;
|
|
GameData_1.default._instance.GM_INFO.difficultyMax = 1;
|
|
GameData_1.default._instance.GM_INFO.life = 3;
|
|
this.blockArray = [];
|
|
this.cameraMove = false;
|
|
this.countTime = 120;
|
|
this.topUI.getChildByName("xin1").active = true;
|
|
this.topUI.getChildByName("xin2").active = true;
|
|
this.topUI.getChildByName("xin3").active = true;
|
|
this.topUI.getChildByName("star1").active = false;
|
|
this.topUI.getChildByName("star2").active = false;
|
|
this.topUI.getChildByName("star3").active = false;
|
|
GameData_1.default._instance.LEVEL_init();
|
|
this.schedule(this.updateCountDownTime, 1);
|
|
};
|
|
GameManager.prototype.start = function () {
|
|
var _this = this;
|
|
// this.node.on(cc.Node.EventType.TOUCH_START, this.jump, this);
|
|
this.fit();
|
|
this.init();
|
|
// GameData._instance.GM_INFO.probation = false;
|
|
if (GameData_1.default._instance.GM_INFO.probation) {
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
cc.tween(this.Tip.getChildByName("left"))
|
|
.to(0.25, { width: 348 })
|
|
.start();
|
|
cc.tween(this.Tip.getChildByName("right"))
|
|
.to(0.25, { width: 348 })
|
|
.start();
|
|
cc.tween(this.Tip.getChildByName("tip"))
|
|
.delay(0.15)
|
|
.to(0.15, { opacity: 255 })
|
|
.start();
|
|
cc.tween(this.Tip.getChildByName("btn_next"))
|
|
.delay(0.5)
|
|
.to(0.2, { opacity: 255 })
|
|
.start();
|
|
cc.tween(this.Tip.getChildByName("btn_jump"))
|
|
.delay(0.5)
|
|
.to(0.2, { opacity: 255 })
|
|
.start();
|
|
}
|
|
else {
|
|
this.node.getChildByName("Begin").opacity = 0;
|
|
this.node.getChildByName("Begin").scale = 2;
|
|
cc.tween(this.node.getChildByName("Begin"))
|
|
.to(0.5, { opacity: 255, scale: 1 })
|
|
.delay(0.5)
|
|
.to(0.5, { opacity: 0, scale: 0 })
|
|
.call(function () {
|
|
_this.startGame();
|
|
})
|
|
.start();
|
|
}
|
|
};
|
|
//开启引导
|
|
GameManager.prototype.startGuide = function (type) {
|
|
var _this = this;
|
|
this.guide = type;
|
|
console.log("startGuide", type);
|
|
if (type == 0) {
|
|
this.careteGuideBlock(1);
|
|
}
|
|
else if (type == 2) {
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
var block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length - 1];
|
|
cc.tween(block)
|
|
.to(0.7, { x: 0 })
|
|
.start();
|
|
this.tipHide("tip2", 3);
|
|
}
|
|
else if (type == 3) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(3);
|
|
}
|
|
else if (type == 4) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(4);
|
|
}
|
|
else if (type == 5) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(5);
|
|
}
|
|
else if (type == 6) {
|
|
var block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length - 1];
|
|
cc.tween(block)
|
|
.to(0.7, { x: 0 })
|
|
.start();
|
|
this.tipHide("tip3", 7);
|
|
}
|
|
else if (type == 7) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(7);
|
|
}
|
|
else if (type == 8) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(8);
|
|
}
|
|
else if (type == 9) {
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
setTimeout(function () {
|
|
GameData_1.default._instance.GM_INFO.probation = false;
|
|
_this.destroyBlock(false);
|
|
cc.director.loadScene("GameScene");
|
|
}, 1000);
|
|
}
|
|
};
|
|
GameManager.prototype.tipHide = function (tipName, num) {
|
|
var _this = this;
|
|
var tip = this.Tip.getChildByName(tipName);
|
|
var left = this.Tip.getChildByName("left");
|
|
var right = this.Tip.getChildByName("right");
|
|
cc.tween(left)
|
|
.delay(0.1)
|
|
.to(0.25, { width: 0 })
|
|
.start();
|
|
cc.tween(right)
|
|
.delay(0.1)
|
|
.to(0.25, { width: 0 })
|
|
.start();
|
|
cc.tween(tip)
|
|
.to(0.12, { opacity: 0 })
|
|
.delay(1.5)
|
|
.call(function () {
|
|
_this.Player.getComponent("Player").jumpPause = true;
|
|
if (num != null)
|
|
_this.startGuide(num);
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.careteGuideBlock = function (type) {
|
|
var _this = this;
|
|
this.Ground.active = false;
|
|
var left = this.Tip.getChildByName("left");
|
|
var right = this.Tip.getChildByName("right");
|
|
var tip = this.Tip.getChildByName("tip2");
|
|
if (type == 5) {
|
|
tip = this.Tip.getChildByName("tip3");
|
|
}
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
var block = cc.instantiate(this.blockPrefab[13]);
|
|
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
|
|
if (type > 4) {
|
|
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
|
|
GameData_1.default._instance.CLICK_DATA.height = true;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("Block");
|
|
var num = 150;
|
|
var time = 3;
|
|
if (type == 1 || type == 5) {
|
|
num = this.round % 2 == 0 ? num : -num;
|
|
}
|
|
else if (type == 3 || type == 4 || type == 7 || type == 8 || type == 9) {
|
|
this.Player.getComponent("Player").jumpPause = false;
|
|
num = -block.x;
|
|
time = 7;
|
|
}
|
|
cc.tween(block)
|
|
.to(time, { x: num })
|
|
.call(function () {
|
|
if (type == 1 || type == 5) {
|
|
left.width = 0;
|
|
right.width = 0;
|
|
tip.opacity = 0;
|
|
cc.tween(left)
|
|
.to(0.25, { width: 348 })
|
|
.start();
|
|
cc.tween(right)
|
|
.to(0.25, { width: 348 })
|
|
.start();
|
|
cc.tween(tip)
|
|
.delay(0.15)
|
|
.to(0.15, { opacity: 255 })
|
|
.call(function () {
|
|
_this.guide = type;
|
|
if (type == 5)
|
|
_this.guide = 6;
|
|
_this.Player.getComponent("Player").jumpPause = false;
|
|
})
|
|
.start();
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.showGround = function (tempY) {
|
|
var _this = this;
|
|
setTimeout(function () {
|
|
_this.Ground.active = true;
|
|
_this.Ground.y = tempY;
|
|
}, 500);
|
|
};
|
|
//下一步
|
|
GameManager.prototype.guideNext = function () {
|
|
if (this.guide == -1) {
|
|
this.tipHide("tip", 0);
|
|
cc.tween(this.Tip.getChildByName("btn_next"))
|
|
.to(0.1, { opacity: 0 })
|
|
.start();
|
|
cc.tween(this.Tip.getChildByName("btn_jump"))
|
|
.to(0.1, { opacity: 0 })
|
|
.start();
|
|
}
|
|
};
|
|
//跳过
|
|
GameManager.prototype.guideJump = function () {
|
|
GameData_1.default._instance.GM_INFO.probation = false;
|
|
this.destroyBlock(false);
|
|
cc.director.loadScene("GameScene");
|
|
};
|
|
GameManager.prototype.jump = function () {
|
|
this.Player.getComponent("Player").jump();
|
|
};
|
|
GameManager.prototype.startGame = function () {
|
|
this.createBlock();
|
|
};
|
|
GameManager.prototype.addScore = function (score) {
|
|
var _this = this;
|
|
GameData_1.default._instance.CLICK_DATA.getScore = parseInt(score);
|
|
GameManager_1._instance.score += parseInt(score);
|
|
GameData_1.default._instance.CLICK_DATA.totalScore = GameManager_1._instance.score;
|
|
this.topUI.getChildByName("nandu").getComponent(cc.Label).string = GameManager_1._instance.score + "";
|
|
var scale = GameManager_1._instance.score / GameData_1.default._instance.LEVEL_INFO.scoreMax;
|
|
cc.tween(this.topUI.getChildByName("progress").getComponent(cc.Sprite))
|
|
.to(0.5, { fillRange: scale })
|
|
.call(function () {
|
|
if (scale >= GameData_1.default._instance.LEVEL_INFO.star1 && !_this.topUI.getChildByName("star1").active) {
|
|
_this.topUI.getChildByName("star1").active = true;
|
|
}
|
|
if (scale >= GameData_1.default._instance.LEVEL_INFO.star2 && !_this.topUI.getChildByName("star2").active) {
|
|
_this.topUI.getChildByName("star2").active = true;
|
|
}
|
|
if (scale >= GameData_1.default._instance.LEVEL_INFO.star3 && !_this.topUI.getChildByName("star3").active) {
|
|
_this.topUI.getChildByName("star3").active = true;
|
|
// GameData._instance.scoreMax = 150000;
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.createBlock = function () {
|
|
if (this.over == false && this.begin == true) {
|
|
this.Ground.active = false;
|
|
this.Player.getComponent("Player").jumpPause = false;
|
|
var num = Math.floor(Math.random() * 12);
|
|
if (this.round <= 10 && num == 5) {
|
|
num = Math.floor(Math.random() * 6 + 6);
|
|
}
|
|
var block = cc.instantiate(this.blockPrefab[num]);
|
|
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
|
|
if (num > GameData_1.default._instance.GM_INFO.blockScale) {
|
|
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
|
|
GameData_1.default._instance.CLICK_DATA.height = true;
|
|
}
|
|
if (height >= 0 && this.cameraMove == false) {
|
|
this.countHeight = this.Player.getComponent("Player").basicHeight - this.Camera.node.y;
|
|
this.cameraMove = true;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("Block");
|
|
block.zIndex = 10;
|
|
this.round += 1;
|
|
this.level += 1;
|
|
if (this.round > GameData_1.default._instance.GM_INFO.levelMax)
|
|
GameData_1.default._instance.GM_INFO.levelMax = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.level = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.round = this.level;
|
|
GameData_1.default._instance.LEVEL_INFO.layer += GameData_1.default._instance.LEVEL_INFO.layerAdd;
|
|
GameData_1.default._instance.LEVEL_INFO.speed += GameData_1.default._instance.LEVEL_INFO.addSpeed;
|
|
if (GameData_1.default._instance.LEVEL_INFO.reduceSpeed <= 100)
|
|
GameData_1.default._instance.LEVEL_INFO.reduceSpeed += GameData_1.default._instance.LEVEL_INFO.jiansu;
|
|
if (this.round == GameData_1.default._instance.LEVEL_INFO.round1)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 2;
|
|
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round2)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 1;
|
|
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round3)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 0.5;
|
|
}
|
|
};
|
|
//虚假碎裂块
|
|
GameManager.prototype.createCrackBlock = function () {
|
|
this.interfere = true;
|
|
GameData_1.default._instance.CLICK_DATA.fake = this.interfere;
|
|
if (this.round > 1)
|
|
this.destroyBlock(true);
|
|
if (this.over == false && this.begin == true) {
|
|
var block = cc.instantiate(this.blockPrefab[12]);
|
|
var height = this.Player.getComponent("Player").basicHeight;
|
|
if (GameData_1.default._instance.CLICK_DATA.height == true) {
|
|
height += block.height / 2;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("CrackBlock");
|
|
block.zIndex = 1;
|
|
}
|
|
};
|
|
GameManager.prototype.destroyBlock = function (type) {
|
|
if (type == true) {
|
|
if (this.node) {
|
|
if (this.node.getChildByName("CrackBlock")) {
|
|
if (this.node.getChildByName("CrackBlock").children) {
|
|
var block2 = this.node.getChildByName("CrackBlock").children;
|
|
for (var i = 0; i < block2.length; i++) {
|
|
if (block2[i]) {
|
|
block2[i].getComponent("Block").hide();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var block = this.node.getChildByName("Block").children;
|
|
for (var i = 0; i < block.length; i++) {
|
|
if (block[i]) {
|
|
block[i].active = false;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
GameManager.prototype.xinAction = function () {
|
|
var xin = this.topUI.getChildByName("xin1");
|
|
if (GameData_1.default._instance.GM_INFO.life == 2)
|
|
xin = this.topUI.getChildByName("xin3");
|
|
else if (GameData_1.default._instance.GM_INFO.life == 1)
|
|
xin = this.topUI.getChildByName("xin2");
|
|
cc.tween(xin)
|
|
.to(0.6, { scale: 1.6, opacity: 0 })
|
|
.call(function () {
|
|
xin.active = false;
|
|
})
|
|
.start();
|
|
};
|
|
//死亡
|
|
GameManager.prototype.getDeath = function (data) {
|
|
var _this = this;
|
|
if (data == true) {
|
|
this.destroyBlock(false);
|
|
cc.tween(this.Player)
|
|
.to(1, { y: -500 }, { easing: 'cubicIn' })
|
|
.call(function () {
|
|
_this.Player.getComponent("Player").init();
|
|
// this.Player.getComponent("Player").jumpPause = true;
|
|
if (_this.guide > 5) {
|
|
if (_this.guide == 6) {
|
|
_this.guide = 5;
|
|
_this.round = 2;
|
|
_this.startGuide(5);
|
|
}
|
|
else {
|
|
_this.round = 1;
|
|
_this.startGuide(6);
|
|
}
|
|
}
|
|
else {
|
|
_this.round = 0;
|
|
_this.startGuide(3);
|
|
}
|
|
})
|
|
.delay(0.5)
|
|
.call(function () {
|
|
})
|
|
.start();
|
|
}
|
|
else {
|
|
if (GameData_1.default._instance.GM_INFO.life > 0) {
|
|
GameData_1.default._instance.GM_INFO.life -= 1;
|
|
this.getDevive(1);
|
|
}
|
|
else {
|
|
GameData_1.default._instance.GM_INFO.life = -1;
|
|
this.getDevive(3);
|
|
}
|
|
}
|
|
};
|
|
//复活
|
|
GameManager.prototype.getDevive = function (time) {
|
|
var _this = this;
|
|
this.round = 0;
|
|
GameData_1.default._instance.LEVEL_init();
|
|
if (this.topUI.getChildByName("star3").active == true) {
|
|
// GameData._instance.LEVEL_INFO.scoreMax = 150000;
|
|
}
|
|
this.interfere = false;
|
|
GameData_1.default._instance.CLICK_DATA.fake = this.interfere;
|
|
this.destroyBlock(false);
|
|
var block2 = this.node.getChildByName("CrackBlock").children;
|
|
for (var i = 0; i < block2.length; i++) {
|
|
if (block2[i]) {
|
|
block2[i].active = false;
|
|
}
|
|
}
|
|
// this.blockArray = [];
|
|
var actionTime = 1;
|
|
if (this.Player.y > 500) {
|
|
actionTime = (this.Player.y + 500) / 1000 * actionTime;
|
|
}
|
|
cc.tween(this.Player)
|
|
.to(actionTime, { y: -500 }, { easing: 'cubicIn' })
|
|
.call(function () {
|
|
_this.Player.getComponent("Player").xinAction();
|
|
})
|
|
.delay(0.5)
|
|
.call(function () {
|
|
_this.xinAction();
|
|
_this.Player.getComponent("Player").init();
|
|
if (time > 1) {
|
|
_this.Xin.parent.active = true;
|
|
_this.Xin.getComponent(cc.Sprite).fillRange = 0;
|
|
cc.tween(_this.Xin.getComponent(cc.Sprite))
|
|
.to(time, { fillRange: 1 })
|
|
.delay(0.3)
|
|
.call(function () {
|
|
_this.Xin.parent.active = false;
|
|
})
|
|
.delay(0)
|
|
.call(function () {
|
|
_this.createBlock();
|
|
})
|
|
.start();
|
|
}
|
|
else {
|
|
setTimeout(function () {
|
|
_this.createBlock();
|
|
}, (time + 0.5) * 1000);
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.setData = function () {
|
|
GameData_1.default._instance.CLICK_DATA.timer = this.countTime;
|
|
GameData_1.default._instance.CLICK_DATA.level = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.round = this.level;
|
|
//CLICK_DATA 数据处理完毕后调用上传接口 上传接口内CLICK_DATA不做改变
|
|
GameTool_1.GameTool.setGameData();
|
|
};
|
|
//获取matchId 用于上传每次点击数据里面记录id方便查询
|
|
GameManager.prototype.getMatchId = function () {
|
|
var matchId = cc.sys.localStorage.getItem("matchId");
|
|
if (matchId == "undifend" || matchId == null) {
|
|
matchId = this.setMatchId();
|
|
}
|
|
else {
|
|
if (this.containsNanana(matchId) == true) {
|
|
matchId = this.setMatchId();
|
|
}
|
|
else {
|
|
var char = parseInt(matchId[10]);
|
|
if (this.level == 1) {
|
|
char += 1;
|
|
}
|
|
matchId = matchId.slice(0, 10) + char + "";
|
|
GameData_1.default._instance.GM_INFO.matchId = matchId;
|
|
cc.sys.localStorage.setItem("matchId", matchId);
|
|
}
|
|
}
|
|
return matchId;
|
|
};
|
|
//检测matchId 如果有缓存以前的nanana数据清除
|
|
GameManager.prototype.containsNanana = function (str) {
|
|
return /na/i.test(str);
|
|
};
|
|
//重新设置MatchId
|
|
GameManager.prototype.setMatchId = function () {
|
|
// 定义包含可用字符的字符集
|
|
var characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
// 创建一个数组以保存随机字符
|
|
var uuidArray = [];
|
|
// 循环10次 生成10位的UUID
|
|
for (var i = 0; i < 10; i++) {
|
|
// 生成随机索引,范围是字符集的长度
|
|
var randomIndex = Math.floor(Math.random() * characters.length);
|
|
// 从字符集中获取随机字符
|
|
var randomChar = characters.charAt(randomIndex);
|
|
// 将字符添加到数组中
|
|
uuidArray.push(randomChar);
|
|
}
|
|
var data = uuidArray.join('') + 1 + "";
|
|
cc.sys.localStorage.setItem("matchNumber", 1);
|
|
cc.sys.localStorage.setItem("matchId", data);
|
|
GameData_1.default._instance.GM_INFO.matchId = data;
|
|
return data;
|
|
};
|
|
GameManager.prototype.updateCountDownTime = function () {
|
|
var _this = this;
|
|
if (this.countTime > 0 && !GameData_1.default._instance.GM_INFO.probation) {
|
|
this.countTime -= 1;
|
|
this.time.string = this.getTimeMargin(this.countTime);
|
|
if (this.countTime < 5) {
|
|
cc.tween(this.time.node)
|
|
.to(0.25, { scale: 1.5, color: cc.color(255, 0, 0) })
|
|
.to(0.25, { scale: 1, color: cc.color(255, 255, 255) })
|
|
.start();
|
|
}
|
|
if (this.countTime <= 0) {
|
|
this.unschedule(this.updateCountDownTime);
|
|
this.begin = false;
|
|
this.over = true;
|
|
this.overStop();
|
|
this.setRank();
|
|
setTimeout(function () {
|
|
_this.overOpen();
|
|
}, 2000);
|
|
}
|
|
}
|
|
};
|
|
//停止所有动画
|
|
GameManager.prototype.overStop = function () {
|
|
if (this.Player.getComponent("Player").jumpAction)
|
|
this.Player.getComponent("Player").jumpAction.stop();
|
|
var block = this.node.getChildByName("Block").children;
|
|
for (var i = 0; i < block.length; i++) {
|
|
if (block[i]) {
|
|
if (block[i].getComponent("Block").tween)
|
|
block[i].getComponent("Block").tween.stop();
|
|
}
|
|
}
|
|
var block2 = this.node.getChildByName("CrackBlock").children;
|
|
for (var i = 0; i < block2.length; i++) {
|
|
if (block2[i]) {
|
|
if (block2[i].getComponent("Block").tween)
|
|
block2[i].getComponent("Block").tween.stop();
|
|
}
|
|
}
|
|
};
|
|
GameManager.prototype.setRank = function () {
|
|
GameData_1.default._instance.GM_INFO.score = this.score;
|
|
GameTool_1.GameTool.setRank();
|
|
};
|
|
GameManager.prototype.overOpen = function () {
|
|
this.Player.active = false;
|
|
this.destroyBlock(false);
|
|
this.destroyBlock(true);
|
|
this.GameOver.active = true;
|
|
this.GameOver.getChildByName("score").getComponent(cc.Label).string = this.score + "";
|
|
this.GameOver.getChildByName("level").getComponent(cc.Label).string =
|
|
GameData_1.default._instance.GM_INFO.levelMax + "";
|
|
this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string =
|
|
GameData_1.default._instance.GM_INFO.difficultyMax + "";
|
|
};
|
|
GameManager.prototype.backLoad = function () {
|
|
cc.director.loadScene("LoadScene");
|
|
};
|
|
GameManager.prototype.again = function () {
|
|
this.destroyBlock(false);
|
|
this.destroyBlock(true);
|
|
cc.director.loadScene("GameScene");
|
|
};
|
|
GameManager.prototype.openRank = function () {
|
|
cc.director.loadScene("RankScene");
|
|
};
|
|
//时间格式转换
|
|
GameManager.prototype.getTimeMargin = function (second) {
|
|
var total = 0;
|
|
total = second;
|
|
var hour = 0;
|
|
hour = parseInt((total / 3600) + ""); //计算整数小时数
|
|
var afterHour = total - hour * 60 * 60; //取得算出小时数后剩余的秒数
|
|
var min = parseInt((afterHour / 60) + ""); //计算整数分
|
|
var m = "" + min;
|
|
if (min < 10)
|
|
m = "0" + min;
|
|
var afterMin = total - hour * 60 * 60 - min * 60; //取得算出分后剩余的秒数
|
|
var miao = afterMin + "";
|
|
if (afterMin < 10)
|
|
miao = "0" + afterMin;
|
|
return m + ':' + miao;
|
|
};
|
|
GameManager.prototype.update = function (dt) {
|
|
if (this.cameraMove == true && this.over == false) {
|
|
this.Camera.node.y = this.Player.y - this.countHeight;
|
|
if (this.Camera.node.y <= 0)
|
|
this.Camera.node.y = 0;
|
|
this.topUI.y = this.Camera.node.y + this.drop;
|
|
}
|
|
};
|
|
var GameManager_1;
|
|
__decorate([
|
|
property(cc.Camera)
|
|
], GameManager.prototype, "Camera", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "topUI", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Player", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Ground", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Xin", void 0);
|
|
__decorate([
|
|
property(cc.Label)
|
|
], GameManager.prototype, "time", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "GameOver", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Tip", void 0);
|
|
__decorate([
|
|
property([cc.Prefab])
|
|
], GameManager.prototype, "blockPrefab", void 0);
|
|
GameManager = GameManager_1 = __decorate([
|
|
ccclass
|
|
], GameManager);
|
|
return GameManager;
|
|
}(cc.Component));
|
|
exports.default = GameManager;
|
|
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRix1Q0FBa0M7QUFFbEMsNENBQTJDO0FBQzNDLG9EQUFtRDtBQUU3QyxJQUFBLEtBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQWxDLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBaUIsQ0FBQztBQUcxQztJQUF5QywrQkFBWTtJQUFyRDtRQUFBLHFFQWtzQkM7UUEvckJHLFlBQU0sR0FBYyxJQUFJLENBQUM7UUFHekIsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixZQUFNLEdBQVksSUFBSSxDQUFDO1FBR3ZCLFlBQU0sR0FBWSxJQUFJLENBQUM7UUFHdkIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixVQUFJLEdBQWEsSUFBSSxDQUFDO1FBR3RCLGNBQVEsR0FBWSxJQUFJLENBQUM7UUFHekIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixpQkFBVyxHQUFzQixFQUFFLENBQUM7O0lBdXFCeEMsQ0FBQztvQkFsc0JvQixXQUFXO0lBOEM1Qix3QkFBd0I7SUFJeEIsNEJBQU0sR0FBTjtRQUNJLDhCQUE4QjtRQUM5QixPQUFPO1FBQ1AsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLG1DQUFtQztRQUNuQyxhQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM3QixnREFBZ0Q7SUFDcEQsQ0FBQztJQUVTLDhCQUFRLEdBQWxCO1FBQ0ksMkJBQVksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsSUFB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QyxJQUFJLENBQUM7OENBQ0k7SUFHdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzsrQ0FDSztJQUd2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOytDQUNLO0lBR3ZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7NENBQ0U7SUFHcEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzs2Q0FDRztJQUd0QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2lEQUNPO0lBR3pCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7NENBQ0U7SUFHcEI7UUFEQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7b0RBQ2M7SUEzQm5CLFdBQVc7UUFEL0IsT0FBTztPQUNhLFdBQVcsQ0Frc0IvQjtJQUFELGtCQUFDO0NBbHNCRCxBQWtzQkMsQ0Fsc0J3QyxFQUFFLENBQUMsU0FBUyxHQWtzQnBEO2tCQWxzQm9CLFdBQVciLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMZWFybiBUeXBlU2NyaXB0OlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy90eXBlc2NyaXB0Lmh0bWxcclxuLy8gTGVhcm4gQXR0cmlidXRlOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9yZWZlcmVuY2UvYXR0cmlidXRlcy5odG1sXHJcbi8vIExlYXJuIGxpZmUtY3ljbGUgY2FsbGJhY2tzOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9saWZlLWN5Y2xlLWNhbGxiYWNrcy5odG1sXHJcblxyXG5pbXBvcnQgR2FtZURhdGEgZnJvbSAnLi9HYW1lRGF0YSc7XHJcbmltcG9ydCBIdHRwVXRpbCBmcm9tICcuL2NyeXB0by9IdHRwVXRpbCc7XHJcbmltcG9ydCB7IEdhbWVUb29sIH0gZnJvbSAnLi90b29sL0dhbWVUb29sJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi90b29sL05vdGlmaWNhdGlvbic7XHJcblxyXG5jb25zdCB7Y2NjbGFzcywgcHJvcGVydHl9ID0gY2MuX2RlY29yYXRvcjtcclxuXHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVNYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuQ2FtZXJhKVxyXG4gICAgQ2FtZXJhOiBjYy5DYW1lcmEgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgdG9wVUk6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgUGxheWVyOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEdyb3VuZDogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBYaW46IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5MYWJlbClcclxuICAgIHRpbWU6IGNjLkxhYmVsID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEdhbWVPdmVyOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIFRpcDogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KFtjYy5QcmVmYWJdKVxyXG4gICAgYmxvY2tQcmVmYWIgOiBBcnJheTxjYy5QcmVmYWI+ID0gW107XHJcblxyXG4gICAgXHJcblxyXG4gICAgcm91bmQ6IG51bWJlcjsgICAgICAvL+WbnuWQiFxyXG4gICAgbGV2ZWw6IG51bWJlcjsgICAgICAvL+WbnuWQiFxyXG4gICAgc3RhdGljIF9pbnN0YW5jZTogYW55O1xyXG4gICAgYmxvY2tBcnJheTogYW55O1xyXG4gICAgY2FtZXJhTW92ZTpib29sZWFuXHJcbiAgICBjb3VudEhlaWdodDpudW1iZXI7XHJcbiAgICBjb3VudFRpbWU6IG51bWJlcjtcclxuICAgIG92ZXI6IGJvb2xlYW47XHJcbiAgICBiZWdpbjogYm9vbGVhbjtcclxuICAgIGludGVyZmVyZTogYm9vbGVhbjtcclxuICAgIG9sZFNwZWVkOiBudW1iZXI7ICAgICAgLy/kuIrkuIDlm57lkIjpgJ/luqZcclxuICAgIHNjb3JlOiBudW1iZXI7ICAgICAgLy/mgLvlvpfliIZcclxuICAgIGRpZmZpY3VsdHlNYXg6bnVtYmVyOyAvL+acgOmrmOmavuW6puezu+aVsFxyXG4gICAgZHJvcDogbnVtYmVyOyAgICAgIC8v5pGE5YOP5py66JC95beuXHJcbiAgICBndWlkZTogbnVtYmVyOyAgICAgLy/orrDlvZXlvJXlr7zmraXpqqRcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG5cclxuXHJcblxyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICAvLyBjYy5nYW1lLnNldEZyYW1lUmF0ZSg1OS45KTtcclxuICAgICAgICAvLyDnpLrkvovkvb/nlKhcclxuICAgICAgICB2YXIgbWFuYWdlciA9IGNjLmRpcmVjdG9yLmdldENvbGxpc2lvbk1hbmFnZXIoKTtcclxuICAgICAgICBtYW5hZ2VyLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIG1hbmFnZXIuZW5hYmxlZERlYnVnRHJhdyA9IHRydWU7XHJcbiAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlID0gdGhpcztcclxuICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25FbmFibGUoKTogdm9pZCB7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwiY3JlYXRlQmxvY2tcIix0aGlzLmNyZWF0ZUJsb2NrLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImFkZFNjb3JlXCIsdGhpcy5hZGRTY29yZSx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJjcmVhdGVDcmFja0Jsb2NrXCIsdGhpcy5jcmVhdGVDcmFja0Jsb2NrLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcInNob3dHcm91bmRcIix0aGlzLnNob3dHcm91bmQsdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwiZGVhdGhcIix0aGlzLmdldERlYXRoLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImp1bXBcIix0aGlzLmp1bXAsdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwic2V0RGF0YVwiLHRoaXMuc2V0RGF0YSx0aGlzKTtcclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiY3JlYXRlQmxvY2tcIix0aGlzLmNyZWF0ZUJsb2NrKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiYWRkU2NvcmVcIix0aGlzLmFkZFNjb3JlKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiY3JlYXRlQmxvY2tcIix0aGlzLmNyZWF0ZUNyYWNrQmxvY2spO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJkZWF0aFwiLHRoaXMuZ2V0RGVhdGgpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJqdW1wXCIsdGhpcy5qdW1wKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwic2hvd0dyb3VuZFwiLHRoaXMuc2hvd0dyb3VuZCk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcInNldERhdGFcIix0aGlzLnNldERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZzJcIikueSA9IC0yMTY3LjY3NTtcclxuICAgICAgICB2YXIgamcgPSB0aGlzLnNldEZpdCgpO1xyXG4gICAgICAgIGlmKCFqZyl7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnMlwiKS55ID0gLTIxMDA7XHJcbiAgICAgICAgICAgIHRoaXMudG9wVUkueSA9IDY2MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLy/liKTmlq3lhajpnaLlsY9cclxuICAgIGdldFNldFNjcmVlblJlc29sdXRpb25GbGFnICgpIHtcclxuICAgICAgICBsZXQgc2l6ZSA9IGNjLndpblNpemU7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKChoZWlnaHQgLyB3aWR0aCkgPiAoMTYuMiAvIDkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvL+WIpOaWreWFqOmdouWxj+mAgumFjVxyXG4gICAgc2V0Rml0ICgpIHtcclxuICAgICAgICBsZXQgZmxhZyA9IHRoaXMuZ2V0U2V0U2NyZWVuUmVzb2x1dGlvbkZsYWcoKTtcclxuICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLmRyb3AgPSB0aGlzLnRvcFVJLnkgLSB0aGlzLkNhbWVyYS5ub2RlLnk7XHJcbiAgICAgICAgdGhpcy5zY29yZSA9IDA7XHJcbiAgICAgICAgdGhpcy5vbGRTcGVlZCA9IDEwO1xyXG4gICAgICAgIHRoaXMuZ3VpZGUgPSAtMTtcclxuICAgICAgICB0aGlzLmJlZ2luID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm92ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmludGVyZmVyZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91bmQgPSAwO1xyXG4gICAgICAgIHRoaXMubGV2ZWwgPSAwO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ID0gMTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5kaWZmaWN1bHR5TWF4ID0gMTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID0gMztcclxuICAgICAgICB0aGlzLmJsb2NrQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmNhbWVyYU1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvdW50VGltZSA9IDEyMDtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4yXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lLDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICAvLyB0aGlzLm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIHRoaXMuanVtcCwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5maXQoKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24gPSBmYWxzZTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24pe1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJsZWZ0XCIpKVxyXG4gICAgICAgICAgICAudG8oMC4yNSx7d2lkdGg6MzQ4fSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwicmlnaHRcIikpXHJcbiAgICAgICAgICAgIC50bygwLjI1LHt3aWR0aDozNDh9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBcIikpXHJcbiAgICAgICAgICAgIC5kZWxheSgwLjE1KVxyXG4gICAgICAgICAgICAudG8oMC4xNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fbmV4dFwiKSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fanVtcFwiKSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJlZ2luXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZWdpblwiKS5zY2FsZSA9IDI7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJlZ2luXCIpKVxyXG4gICAgICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NSxzY2FsZToxfSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowLHNjYWxlOjB9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgXHJcbiAgICAgICAgfSBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy/lvIDlkK/lvJXlr7xcclxuICAgIHN0YXJ0R3VpZGUodHlwZSl7ICAgLy90eXBl5Li656ys5Yeg5q2lXHJcbiAgICAgICAgdGhpcy5ndWlkZSA9IHR5cGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJzdGFydEd1aWRlXCIsdHlwZSk7XHJcbiAgICAgICAgaWYodHlwZSA9PSAwKXtcclxuICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gMil7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlblt0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbi5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKGJsb2NrKVxyXG4gICAgICAgICAgICAudG8oMC43LHt4OjB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcDJcIiwzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDMpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jaygzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDQpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDUpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDYpe1xyXG4gICAgICAgICAgICBsZXQgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlblt0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbi5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKGJsb2NrKVxyXG4gICAgICAgICAgICAudG8oMC43LHt4OjB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcDNcIiw3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDcpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDgpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDkpe1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aXBIaWRlKHRpcE5hbWUsbnVtKXtcclxuICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUodGlwTmFtZSk7XHJcbiAgICAgICAgbGV0IGxlZnQgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImxlZnRcIik7XHJcbiAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJyaWdodFwiKTtcclxuICAgICAgICBjYy50d2VlbihsZWZ0KVxyXG4gICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgLnRvKDAuMjUse3dpZHRoOjB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHJpZ2h0KVxyXG4gICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgLnRvKDAuMjUse3dpZHRoOjB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRpcClcclxuICAgICAgICAudG8oMC4xMix7b3BhY2l0eTowfSlcclxuICAgICAgICAuZGVsYXkoMS41KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYobnVtICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUobnVtKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhcmV0ZUd1aWRlQmxvY2sodHlwZSl7XHJcbiAgICAgICAgdGhpcy5Hcm91bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGxlZnQgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImxlZnRcIik7XHJcbiAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJyaWdodFwiKTtcclxuICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXAyXCIpO1xyXG4gICAgICAgIGlmKHR5cGUgPT0gNSl7XHJcbiAgICAgICAgICAgIHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwM1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYlsxM10pO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuYmFzaWNIZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01pbjtcclxuICAgICAgICBpZih0eXBlID4gNCl7XHJcbiAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01heDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuaGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgIGJsb2NrLnBhcmVudCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpO1xyXG4gICAgICAgIGxldCBudW0gPSAxNTA7XHJcbiAgICAgICAgbGV0IHRpbWUgPTM7XHJcbiAgICAgICAgaWYodHlwZSA9PSAxIHx8IHR5cGUgPT0gNSl7XHJcbiAgICAgICAgICAgIG51bSA9IHRoaXMucm91bmQlMj09MD9udW06LW51bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDMgfHwgdHlwZSA9PSA0IHx8IHR5cGUgPT03IHx8IHR5cGUgPT0gOCB8fCB0eXBlID09IDkpe1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG51bSA9IC1ibG9jay54O1xyXG4gICAgICAgICAgICB0aW1lID0gNztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2MudHdlZW4oYmxvY2spICAgICBcclxuICAgICAgICAudG8odGltZSx7eDpudW19KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZih0eXBlID09IDEgfHwgdHlwZSA9PSA1KXtcclxuICAgICAgICAgICAgICAgIGxlZnQud2lkdGggPSAwOyByaWdodC53aWR0aCA9IDA7dGlwLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4obGVmdClcclxuICAgICAgICAgICAgICAgIC50bygwLjI1LHt3aWR0aDozNDh9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICBjYy50d2VlbihyaWdodClcclxuICAgICAgICAgICAgICAgIC50bygwLjI1LHt3aWR0aDozNDh9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aXApXHJcbiAgICAgICAgICAgICAgICAuZGVsYXkoMC4xNSlcclxuICAgICAgICAgICAgICAgIC50bygwLjE1LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmd1aWRlID0gdHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlID09IDUpIHRoaXMuZ3VpZGUgPSA2O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dHcm91bmQodGVtcFkpe1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkdyb3VuZC55ID0gdGVtcFk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+S4i+S4gOatpVxyXG4gICAgZ3VpZGVOZXh0KCl7XHJcbiAgICAgICAgaWYodGhpcy5ndWlkZSA9PSAtMSl7XHJcbiAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcFwiLDApO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9uZXh0XCIpKVxyXG4gICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fanVtcFwiKSlcclxuICAgICAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/ot7Pov4dcclxuICAgIGd1aWRlSnVtcCgpe1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAganVtcCgpe1xyXG4gICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRHYW1lKCl7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9jaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNjb3JlKHNjb3JlKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5nZXRTY29yZSA9IHBhcnNlSW50KHNjb3JlKTtcclxuICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmUgKz0gcGFyc2VJbnQoc2NvcmUpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnRvdGFsU2NvcmUgPSBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcIm5hbmR1XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nICA9IEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zY29yZSArIFwiXCI7XHJcbiAgICAgICAgdmFyIHNjYWxlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLnNjb3JlL0dhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnNjb3JlTWF4O1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJwcm9ncmVzc1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAudG8oMC41LHtmaWxsUmFuZ2U6c2NhbGV9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMSAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMiAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMyAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5zY29yZU1heCA9IDE1MDAwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQmxvY2soKXtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5iZWdpbiA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdGhpcy5Hcm91bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIG51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPD0gMTAgJiYgbnVtID09IDUpe1xyXG4gICAgICAgICAgICAgICAgbnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjYgKyA2KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYltudW1dKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWluO1xyXG4gICAgICAgICAgICBpZihudW0gPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja1NjYWxlKXtcclxuICAgICAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01heDtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmhlaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZihoZWlnaHQgPj0gMCAmJiB0aGlzLmNhbWVyYU1vdmUgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudEhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCAtIHRoaXMuQ2FtZXJhLm5vZGUueTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhTW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgYmxvY2suekluZGV4ID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5sZXZlbCArPSAxO1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvdW5kID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXgpIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ID0gdGhpcy5yb3VuZDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5yb3VuZCA9IHRoaXMubGV2ZWw7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyQWRkO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zcGVlZCArPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5hZGRTcGVlZDtcclxuXHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkIDw9IDEwMClcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdTtcclxuICAgICAgICAgICAgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDEpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDIpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDE7XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDMpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/omZrlgYfnoo7oo4LlnZdcclxuICAgIGNyZWF0ZUNyYWNrQmxvY2soKXtcclxuICAgICAgICB0aGlzLmludGVyZmVyZSA9IHRydWU7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuZmFrZSA9IHRoaXMuaW50ZXJmZXJlO1xyXG4gICAgICAgIGlmKHRoaXMucm91bmQgPiAxKSB0aGlzLmRlc3Ryb3lCbG9jayh0cnVlKTtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5iZWdpbiA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYlsxMl0pO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmJhc2ljSGVpZ2h0O1xyXG4gICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5oZWlnaHQgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYmxvY2suaGVpZ2h0LzI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpO1xyXG4gICAgICAgICAgICBibG9jay56SW5kZXggPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZGVzdHJveUJsb2NrKHR5cGUpe1xyXG4gICAgICAgIGlmKHR5cGUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZSl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrMiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihibG9jazJbaV0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMltpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKGJsb2NrW2ldKXtcclxuICAgICAgICAgICAgICAgICAgICBibG9ja1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB4aW5BY3Rpb24oKXtcclxuICAgICAgICBsZXQgeGluICA9ICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMVwiKTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID09IDIpIHhpbiA9IHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4zXCIpO1xyXG4gICAgICAgIGVsc2UgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA9PSAxKSAgeGluID0gdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjJcIik7XHJcbiAgICAgICAgY2MudHdlZW4oeGluKVxyXG4gICAgICAgIC50bygwLjYse3NjYWxlOjEuNixvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB4aW4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuICAgIC8v5q275LqhXHJcbiAgICBnZXREZWF0aChkYXRhKXtcclxuICAgICAgICBpZihkYXRhID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxheWVyKVxyXG4gICAgICAgICAgICAudG8oMSx7eTotNTAwfSx7ZWFzaW5nOidjdWJpY0luJ30pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmd1aWRlID4gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5ndWlkZSA9PSA2KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ndWlkZSA9IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUoNik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3VuZCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEd1aWRlKDMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPiAwKXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgLT0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGV2aXZlKDEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGV2aXZlKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8v5aSN5rS7XHJcbiAgICBnZXREZXZpdmUodGltZSl7XHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IDA7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX2luaXQoKTtcclxuICAgICAgICBpZih0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zY29yZU1heCA9IDE1MDAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gdGhpcy5pbnRlcmZlcmU7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHZhciBibG9jazIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGlmKGJsb2NrMltpXSl7XHJcbiAgICAgICAgICAgICAgICBibG9jazJbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5ibG9ja0FycmF5ID0gW107XHJcbiAgICAgICAgbGV0IGFjdGlvblRpbWUgPSAxO1xyXG4gICAgICAgIGlmKHRoaXMuUGxheWVyLnkgPiA1MDApe1xyXG4gICAgICAgICAgICBhY3Rpb25UaW1lID0gKHRoaXMuUGxheWVyLnkgKyA1MDApLzEwMDAqYWN0aW9uVGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5QbGF5ZXIpXHJcbiAgICAgICAgLnRvKGFjdGlvblRpbWUse3k6LTUwMH0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS54aW5BY3Rpb24oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIHRoaXMueGluQWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5pbml0KCk7XHJcbiAgICAgICAgICAgIGlmKHRpbWUgPiAxKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuWGluLnBhcmVudC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5YaW4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuWGluLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgICAgICAgICAgLnRvKHRpbWUse2ZpbGxSYW5nZToxfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjMpXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlhpbi5wYXJlbnQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDApXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2soKTtcclxuICAgICAgICAgICAgICAgIH0sICh0aW1lKzAuNSkqMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGEoKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS50aW1lciA9IHRoaXMuY291bnRUaW1lO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmxldmVsID0gdGhpcy5yb3VuZDtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5yb3VuZCA9IHRoaXMubGV2ZWw7XHJcbiAgICAgICAgLy9DTElDS19EQVRBIOaVsOaNruWkhOeQhuWujOavleWQjuiwg+eUqOS4iuS8oOaOpeWPoyAg5LiK5Lyg5o6l5Y+j5YaFQ0xJQ0tfREFUQeS4jeWBmuaUueWPmFxyXG4gICAgICAgIEdhbWVUb29sLnNldEdhbWVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrflj5ZtYXRjaElkICDnlKjkuo7kuIrkvKDmr4/mrKHngrnlh7vmlbDmja7ph4zpnaLorrDlvZVpZOaWueS+v+afpeivolxyXG4gICAgZ2V0TWF0Y2hJZCAoKXtcclxuICAgICAgICBsZXQgbWF0Y2hJZCA9IGNjLnN5cy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1hdGNoSWRcIik7XHJcbiAgICAgICAgaWYobWF0Y2hJZCA9PSBcInVuZGlmZW5kXCIgfHwgbWF0Y2hJZD09bnVsbCl7XHJcbiAgICAgICAgICAgIG1hdGNoSWQgPSAgdGhpcy5zZXRNYXRjaElkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29udGFpbnNOYW5hbmEobWF0Y2hJZCkgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBtYXRjaElkID0gIHRoaXMuc2V0TWF0Y2hJZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hhciA9IHBhcnNlSW50KG1hdGNoSWRbMTBdKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbWF0Y2hJZCAgPSBtYXRjaElkLnNsaWNlKDAsIDEwKSArIGNoYXIgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubWF0Y2hJZCA9IG1hdGNoSWQ7XHJcbiAgICAgICAgICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJtYXRjaElkXCIsbWF0Y2hJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoSWQ7XHJcbiAgICB9XHJcbiAgICAvL+ajgOa1i21hdGNoSWQg5aaC5p6c5pyJ57yT5a2Y5Lul5YmN55qEbmFuYW5h5pWw5o2u5riF6ZmkXHJcbiAgICBjb250YWluc05hbmFuYShzdHIpIHtcclxuICAgICAgICByZXR1cm4gL25hL2kudGVzdChzdHIpO1xyXG4gICAgfVxyXG4gICAgLy/ph43mlrDorr7nva5NYXRjaElkXHJcbiAgICBzZXRNYXRjaElkICgpe1xyXG4gICAgICAgIC8vIOWumuS5ieWMheWQq+WPr+eUqOWtl+espueahOWtl+espumbhlxyXG4gICAgICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODknO1xyXG4gICAgICAgIC8vIOWIm+W7uuS4gOS4quaVsOe7hOS7peS/neWtmOmaj+acuuWtl+esplxyXG4gICAgICAgIGNvbnN0IHV1aWRBcnJheSA9IFtdO1xyXG4gICAgICAgIC8vIOW+queOrzEw5qyhIOeUn+aIkDEw5L2N55qEVVVJRFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8g55Sf5oiQ6ZqP5py657Si5byV77yM6IyD5Zu05piv5a2X56ym6ZuG55qE6ZW/5bqmXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVycy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAvLyDku47lrZfnrKbpm4bkuK3ojrflj5bpmo/mnLrlrZfnrKZcclxuICAgICAgICAgICAgY29uc3QgcmFuZG9tQ2hhciA9IGNoYXJhY3RlcnMuY2hhckF0KHJhbmRvbUluZGV4KTtcclxuICAgICAgICAgICAgLy8g5bCG5a2X56ym5re75Yqg5Yiw5pWw57uE5LitXHJcbiAgICAgICAgICAgIHV1aWRBcnJheS5wdXNoKHJhbmRvbUNoYXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGF0YSA9ICB1dWlkQXJyYXkuam9pbignJykgKyAxICsgXCJcIjtcclxuICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJtYXRjaE51bWJlclwiLDEpO1xyXG4gICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoSWRcIixkYXRhKTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tYXRjaElkID0gZGF0YTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDb3VudERvd25UaW1lICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3VudFRpbWUgPiAwICYmICFHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jb3VudFRpbWUgLT0gMTtcclxuICAgICAgICAgICAgdGhpcy50aW1lLnN0cmluZyA9IHRoaXMuZ2V0VGltZU1hcmdpbih0aGlzLmNvdW50VGltZSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY291bnRUaW1lIDwgNSl7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aGlzLnRpbWUubm9kZSlcclxuICAgICAgICAgICAgICAgIC50bygwLjI1LHtzY2FsZToxLjUsY29sb3I6Y2MuY29sb3IoMjU1LDAsMCl9KVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMjUse3NjYWxlOjEsY29sb3I6Y2MuY29sb3IoMjU1LDI1NSwyNTUpfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3ZlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJTdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmsoKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Zlck9wZW4oKTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/lgZzmraLmiYDmnInliqjnlLtcclxuICAgIG92ZXJTdG9wKCl7XHJcbiAgICAgICAgaWYodGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBBY3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTxibG9jay5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGlmKGJsb2NrW2ldKXtcclxuICAgICAgICAgICAgICAgIGlmKGJsb2NrW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuKVxyXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuLnN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYmxvY2syID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQ3JhY2tCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTxibG9jazIubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZihibG9jazJbaV0pe1xyXG4gICAgICAgICAgICAgICAgaWYoYmxvY2syW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuKVxyXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrMltpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS50d2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmFuaygpe1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnNjb3JlID0gdGhpcy5zY29yZTtcclxuICAgICAgICBHYW1lVG9vbC5zZXRSYW5rKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Zlck9wZW4oKXtcclxuICAgICAgICB0aGlzLlBsYXllci5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2sodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5HYW1lT3Zlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuR2FtZU92ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzY29yZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IHRoaXMuc2NvcmUgKyBcIlwiO1xyXG4gICAgICAgIHRoaXMuR2FtZU92ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFxyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ICsgXCJcIjtcclxuICAgICAgICB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwiZGlmZmljdWx0eVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFxyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmRpZmZpY3VsdHlNYXggKyBcIlwiO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBiYWNrTG9hZCgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZ2Fpbigpe1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayh0cnVlKTtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblJhbmsoKXtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJSYW5rU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ml7bpl7TmoLzlvI/ovazmjaJcclxuICAgIGdldFRpbWVNYXJnaW4oc2Vjb25kOm51bWJlcikge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgdG90YWwgPSBzZWNvbmQ7XHJcbiAgICAgICAgbGV0IGhvdXIgPSAwO1xyXG4gICAgICAgIGhvdXIgPSBwYXJzZUludCgodG90YWwgLyAzNjAwKSArIFwiXCIpOy8v6K6h566X5pW05pWw5bCP5pe25pWwXHJcbiAgICAgICAgbGV0IGFmdGVySG91ciA9IHRvdGFsIC0gaG91ciAqIDYwICogNjA7Ly/lj5blvpfnrpflh7rlsI/ml7bmlbDlkI7liankvZnnmoTnp5LmlbBcclxuICAgICAgICBsZXQgbWluID0gcGFyc2VJbnQoKGFmdGVySG91ciAvIDYwKStcIlwiKTsvL+iuoeeul+aVtOaVsOWIhlxyXG4gICAgICAgIGxldCBtID0gXCJcIiArIG1pbjsgIFxyXG4gICAgICAgIGlmKG1pbiA8IDEwKSBtID0gXCIwXCIrbWluO1xyXG4gICAgICAgIGxldCBhZnRlck1pbiA9IHRvdGFsIC0gaG91ciAqIDYwICogNjAgLSBtaW4gKiA2MDsvL+WPluW+l+eul+WHuuWIhuWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIGxldCBtaWFvID0gYWZ0ZXJNaW4gKyBcIlwiO1xyXG4gICAgICAgIGlmKGFmdGVyTWluIDwgMTApIG1pYW8gPSBcIjBcIiArIGFmdGVyTWluO1xyXG4gICAgICAgIHJldHVybiBtICsgJzonICsgbWlhb1xyXG4gICAgfVxyXG4gICAgdXBkYXRlIChkdCkge1xyXG4gICAgICAgIGlmKHRoaXMuY2FtZXJhTW92ZSA9PSB0cnVlICYmIHRoaXMub3ZlciA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgIHRoaXMuQ2FtZXJhLm5vZGUueSA9IHRoaXMuUGxheWVyLnkgLSB0aGlzLmNvdW50SGVpZ2h0O1xyXG4gICAgICAgICAgICBpZih0aGlzLkNhbWVyYS5ub2RlLnkgPD0gMCkgdGhpcy5DYW1lcmEubm9kZS55ID0gMDtcclxuICAgICAgICAgICAgdGhpcy50b3BVSS55ID0gdGhpcy5DYW1lcmEubm9kZS55ICsgdGhpcy5kcm9wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|