(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, 'b0432BA295DjIOcuitdGKO1', 'GameManager'); // Script/GameManager.ts "use strict"; 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 _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.Btn_New = null; _this.Btn_Hear = null; _this.Btn_See = null; _this.Btn_Firewood = null; _this.Plant = null; _this.timeNode = null; _this.FoodPlist = null; return _this; } GameManager.prototype.onLoad = function () { }; GameManager.prototype.start = function () { this.fit(); this.init(); this.startGame(); }; //初始化数据 GameManager.prototype.init = function () { this.touchable = false; this.result = false; this.foodAudioArray = []; this.foodPicArray = []; this.timeTween = null; this.voiceSpriteFrame = this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame; this.btnReset(); }; //开始游戏 GameManager.prototype.startGame = function () { var _this = this; cc.tween(this.node.getChildByName("Begin")) .to(0.1, { opacity: 0 }) .to(0.5, { opacity: 255 }) .delay(1) .to(0.5, { opacity: 0 }) .call(function () { _this.createCustom(); }) .start(); }; //根据是否全面屏,做独立适配方面 GameManager.prototype.fit = function () { var jg = cc.fx.GameTool.setFit(); if (!jg) { this.Btn_Hear.y = -330; this.Btn_See.y = -460; this.Btn_Firewood.y = -600; } }; //创建关卡 GameManager.prototype.createCustom = function () { var _this = this; this.Plant.opacity = 0; this.timeNode.getComponent(cc.Sprite).fillRange = 0; var customData = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.custom].custom[cc.fx.GameConfig.GM_INFO.level]; var name = customData.item; if (customData.type == 1) { this.Plant.getChildByName("name").getComponent(cc.Label).string = cc.fx.GameTool.getFoodName(name); name = "prop_" + name; this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.FoodPlist["_spriteFrames"][name]; this.now_Food = name; } else { this.Plant.getChildByName("name").getComponent(cc.Label).string = ""; this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.voiceSpriteFrame; this.now_Food = name; } //关卡+1 cc.fx.GameConfig.GM_INFO.level += 1; cc.tween(this.Plant) .to(0.2, { opacity: 255 }) .call(function () { _this.startTime = cc.fx.GameTool.getTime(); _this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = true; _this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = true; _this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = true; _this.timeTween = cc.tween(_this.timeNode.getComponent(cc.Sprite)) .to(2.5, { fillRange: 1 }) .call(function () { _this.timeTween = null; _this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; _this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; _this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; _this.nextLevel(); }) .start(); }) .start(); }; //新植物按钮 GameManager.prototype.click_Choice = function (customData, data) { //关掉计时器 this.timeTween.stop(); this.timeTween = null; //判断是否正确,并把出现的物品存入数组 this.result = this.judgingResult(); if (data == "Btn_New") this.result = !this.result; //设置按钮状态 this.setBtnState(this[data]); //获取反应时间 this.setTimeData(); //进行下一关 this.nextLevel(); }; //判断是否有过的结果 type只为new hear see 三选一 GameManager.prototype.judgingResult = function () { var result = false; var arrayTemp = this.foodPicArray; if (this.now_Food.substring(0, 4) != "prop") { arrayTemp = []; arrayTemp = this.foodAudioArray; } if (arrayTemp.length > 0) { for (var i = 0; i < arrayTemp.length; i++) { if (this.now_Food == arrayTemp[i]) { result = true; break; } } } //判断后放进数组 arrayTemp.push(this.now_Food); return result; }; //计算反应时间 GameManager.prototype.setTimeData = function () { this.overTime = cc.fx.GameTool.getTime(); var time = this.overTime - this.startTime; cc.fx.GameConfig.CLICK_DATA.stepTimeList.push(time); }; //设置按钮状态 GameManager.prototype.setBtnState = function (node) { if (this.result == false) { node.getChildByName("err").active = true; node.getChildByName("correct").active = false; } else { node.getChildByName("err").active = false; node.getChildByName("correct").active = true; } node.getChildByName("nomal").active = false; this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; }; //下一轮 首先重置按钮状态 GameManager.prototype.nextLevel = function () { var _this = this; cc.tween(this.Plant) .delay(1) .call(function () { _this.btnReset(); }) .to(0.5, { opacity: 0 }) .call(function () { _this.createCustom(); }) .start(); }; GameManager.prototype.btnReset = function () { this.Btn_New.getChildByName("nomal").active = true; this.Btn_New.getChildByName("err").active = false; this.Btn_New.getChildByName("correct").active = false; this.Btn_Hear.getChildByName("nomal").active = true; this.Btn_Hear.getChildByName("err").active = false; this.Btn_Hear.getChildByName("correct").active = false; this.Btn_See.getChildByName("nomal").active = true; this.Btn_See.getChildByName("err").active = false; this.Btn_See.getChildByName("correct").active = false; this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; }; //返回首页 GameManager.prototype.backScene = function () { cc.director.loadScene("LoadScene"); }; //下一关,或者重新开始,或者返回上一关,根据level决定 GameManager.prototype.reStart = function (type) { }; //获取时间戳 GameManager.prototype.getTime = function () { var timestamp = new Date().getTime(); return timestamp; }; //获胜 GameManager.prototype.passLevel = function () { }; //失败 GameManager.prototype.loseLevel = function (type) { }; //如果是倒计时 调用此方法 GameManager.prototype.startCountDownTime = function () { this.timeNode.getComponent(cc.Sprite).fillRange = 0; cc.tween(this.timeNode.getComponent(cc.Sprite)) .to(2, { fillRange: 1 }) .start(); }; //上传每次操作数据 GameManager.prototype.setData = function () { cc.fx.GameTool.setGameData(); }; //上传排行榜数据 GameManager.prototype.gameOver = function (time) { cc.fx.GameTool.setRank(time); this.node.getChildByName("GameOver").active = true; this.node.getChildByName("GameOver").opacity = 0; cc.tween(this.node.getChildByName("GameOver")) .to(0.4, { opacity: 255 }) .delay(2) .to(0.4, { opacity: 50 }) .call(function () { cc.director.loadScene("OverScene"); }) .start(); }; GameManager.prototype.onEnable = function () { // cc.fx.Notifications.on("clickSun", this.clickSun, this); }; GameManager.prototype.onDisable = function () { // cc.fx.Notifications.off("clickSun", this.clickSun); }; GameManager.prototype.update = function (dt) { }; __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_New", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_Hear", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_See", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_Firewood", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Plant", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "timeNode", void 0); __decorate([ property(cc.SpriteAtlas) ], GameManager.prototype, "FoodPlist", void 0); GameManager = __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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUFpUUM7UUE5UEcsYUFBTyxHQUFZLElBQUksQ0FBQztRQUV4QixjQUFRLEdBQVksSUFBSSxDQUFDO1FBRXpCLGFBQU8sR0FBWSxJQUFJLENBQUM7UUFFeEIsa0JBQVksR0FBWSxJQUFJLENBQUM7UUFFN0IsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixjQUFRLEdBQVksSUFBSSxDQUFDO1FBR3pCLGVBQVMsR0FBbUIsSUFBSSxDQUFDOztJQWdQckMsQ0FBQztJQW5PRyw0QkFBTSxHQUFOLGNBQVcsQ0FBQztJQUVaLDJCQUFLLEdBQUw7UUFDSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU87SUFDUCwwQkFBSSxHQUFKO1FBQ0ksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDO1FBRTlG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Iiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDkuLvmuLjmiI/mjqfliLbnsbtcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVNYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9OZXc6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBCdG5fSGVhcjogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9TZWU6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBCdG5fRmlyZXdvb2Q6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBQbGFudDogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgdGltZU5vZGU6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIEZvb2RQbGlzdDogY2MuU3ByaXRlQXRsYXMgPSBudWxsO1xyXG5cclxuICAgIHZvaWNlU3ByaXRlRnJhbWU6IGNjLlNwcml0ZUZyYW1lOyAgICAgLy/mmK/lkKblj6/ngrnlh7tcclxuICAgIHRpbWVUd2VlbjogY2MuVHdlZW47XHJcbiAgICB0b3VjaGFibGU6IGJvb2xlYW47ICAgICAvL+aYr+WQpuWPr+eCueWHu1xyXG4gICAgY291bnRUaW1lOiBudW1iZXI7ICAgICAgLy/mr4/mrKHmuLjmiI/lgJLorqHml7ZcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5byA5aeL6K6h5pe2XHJcbiAgICBvdmVyVGltZTogbnVtYmVyOyAgICAgICAvL+a4uOaIj+e7k+adn+iuoeaXtlxyXG4gICAgbm93X0Zvb2Q6IHN0cmluZzsgICAgICAgLy/lvZPliY3lhbPljaHlkI3lrZfkv6Hmga9cclxuICAgIHJlc3VsdDogYm9vbGVhbjsgICAgICAgIC8v5b2T5YmN5YWz5Y2h5ZCN5a2X5L+h5oGvXHJcbiAgICBmb29kUGljQXJyYXk6IGFueTsgICAgICAvL+WtmOaUvuW9k+WJjeavj+S4gOWkp+WxgOa4uOaIj+aJgOacieakjeeJqeWbvueJh1xyXG4gICAgZm9vZEF1ZGlvQXJyYXk6IGFueTsgICAgLy/lrZjmlL7lvZPliY3mr4/kuIDlpKflsYDmuLjmiI/miYDmnInmpI3nianlo7Dpn7NcclxuXHJcbiAgICBvbkxvYWQgKCkge31cclxuXHJcbiAgICBzdGFydCAoKSB7XHJcbiAgICAgICAgdGhpcy5maXQoKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLnN0YXJ0R2FtZSgpO1xyXG4gICAgfVxyXG4gICAgLy/liJ3lp4vljJbmlbDmja5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLnRvdWNoYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mb29kQXVkaW9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZm9vZFBpY0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy50aW1lVHdlZW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMudm9pY2VTcHJpdGVGcmFtZSA9IHRoaXMuUGxhbnQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lO1xyXG5cclxuICAgICAgICB0aGlzLmJ0blJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICAvL+W8gOWni+a4uOaIj1xyXG4gICAgc3RhcnRHYW1lKCl7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDEpXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b20oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB2YXIgamcgPSBjYy5meC5HYW1lVG9vbC5zZXRGaXQoKTtcclxuICAgICAgICBpZighamcpe1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9IZWFyLnkgPSAtMzMwO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9TZWUueSAgPSAtNDYwO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9GaXJld29vZC55ID0gLTYwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+WIm+W7uuWFs+WNoVxyXG4gICAgY3JlYXRlQ3VzdG9tKCl7XHJcbiAgICAgICAgdGhpcy5QbGFudC5vcGFjaXR5ID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpLmZpbGxSYW5nZSA9IDA7XHJcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmN1c3RvbV0uY3VzdG9tW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbF07XHJcbiAgICAgICAgbGV0IG5hbWUgPSBjdXN0b21EYXRhLml0ZW07XHJcbiAgXHJcbiAgICAgICAgaWYoY3VzdG9tRGF0YS50eXBlID09IDEpe1xyXG4gICAgICAgICAgICB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwibmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IGNjLmZ4LkdhbWVUb29sLmdldEZvb2ROYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJwcm9wX1wiK25hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuUGxhbnQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5Gb29kUGxpc3RbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLm5vd19Gb29kID0gbmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5QbGFudC5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIlwiXHJcbiAgICAgICAgICAgIHRoaXMuUGxhbnQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy52b2ljZVNwcml0ZUZyYW1lO1xyXG4gICAgICAgICAgICB0aGlzLm5vd19Gb29kID0gbmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/lhbPljaErMVxyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCArPSAxO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxhbnQpXHJcbiAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9IZWFyLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fU2VlLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50aW1lVHdlZW4gPSBcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy50aW1lTm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAgICAgLnRvKDIuNSx7ZmlsbFJhbmdlOjF9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lVHdlZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dExldmVsKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/mlrDmpI3nianmjInpkq5cclxuICAgIGNsaWNrX0Nob2ljZShjdXN0b21EYXRhLGRhdGEpe1xyXG4gICAgICAgIC8v5YWz5o6J6K6h5pe25ZmoXHJcbiAgICAgICAgdGhpcy50aW1lVHdlZW4uc3RvcCgpO1xyXG4gICAgICAgIHRoaXMudGltZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICAvL+WIpOaWreaYr+WQpuato+ehru+8jOW5tuaKiuWHuueOsOeahOeJqeWTgeWtmOWFpeaVsOe7hFxyXG4gICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5qdWRnaW5nUmVzdWx0KCk7XHJcbiAgICAgICAgaWYoZGF0YSA9PSBcIkJ0bl9OZXdcIikgdGhpcy5yZXN1bHQgPSAhdGhpcy5yZXN1bHQ7XHJcbiAgICAgICAgLy/orr7nva7mjInpkq7nirbmgIFcclxuICAgICAgICB0aGlzLnNldEJ0blN0YXRlKHRoaXNbZGF0YV0pO1xyXG4gICAgICAgIC8v6I635Y+W5Y+N5bqU5pe26Ze0XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lRGF0YSgpO1xyXG4gICAgICAgIC8v6L+b6KGM5LiL5LiA5YWzXHJcbiAgICAgICAgdGhpcy5uZXh0TGV2ZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WIpOaWreaYr+WQpuaciei/h+eahOe7k+aenCB0eXBl5Y+q5Li6bmV3IGhlYXIgc2VlIOS4iemAieS4gFxyXG4gICAganVkZ2luZ1Jlc3VsdCgpe1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgYXJyYXlUZW1wID0gdGhpcy5mb29kUGljQXJyYXk7XHJcbiAgICAgICAgaWYodGhpcy5ub3dfRm9vZC5zdWJzdHJpbmcoMCw0KSAhPSBcInByb3BcIil7XHJcbiAgICAgICAgICAgIGFycmF5VGVtcCA9IFtdO1xyXG4gICAgICAgICAgICBhcnJheVRlbXAgPSB0aGlzLmZvb2RBdWRpb0FycmF5OyBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoYXJyYXlUZW1wLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBmb3IobGV0IGk9MDsgaTxhcnJheVRlbXAubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vd19Gb29kID09IGFycmF5VGVtcFtpXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+WIpOaWreWQjuaUvui/m+aVsOe7hFxyXG4gICAgICAgIGFycmF5VGVtcC5wdXNoKHRoaXMubm93X0Zvb2QpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy/orqHnrpflj43lupTml7bpl7RcclxuICAgIHNldFRpbWVEYXRhKCl7XHJcbiAgICAgICAgdGhpcy5vdmVyVGltZSA9IGNjLmZ4LkdhbWVUb29sLmdldFRpbWUoKTtcclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMub3ZlclRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEuc3RlcFRpbWVMaXN0LnB1c2godGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/orr7nva7mjInpkq7nirbmgIFcclxuICAgIHNldEJ0blN0YXRlKG5vZGUpe1xyXG4gICAgICAgIGlmKHRoaXMucmVzdWx0ID09IGZhbHNlKXtcclxuICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBub2RlLmdldENoaWxkQnlOYW1lKFwiY29ycmVjdFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJlcnJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfSAgXHJcbiAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX0hlYXIuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+S4i+S4gOi9riDpppblhYjph43nva7mjInpkq7nirbmgIFcclxuICAgIG5leHRMZXZlbCgpe1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxhbnQpXHJcbiAgICAgICAgLmRlbGF5KDEpXHJcbiAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5idG5SZXNldCgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYnRuUmVzZXQoKXtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX0hlYXIuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQnRuX0hlYXIuZ2V0Q2hpbGRCeU5hbWUoXCJlcnJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcImNvcnJlY3RcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fU2VlLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJlcnJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fU2VlLmdldENoaWxkQnlOYW1lKFwiY29ycmVjdFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9IZWFyLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fU2VlLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ov5Tlm57pppbpobVcclxuICAgIGJhY2tTY2VuZSgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v5LiL5LiA5YWz77yM5oiW6ICF6YeN5paw5byA5aeL77yM5oiW6ICF6L+U5Zue5LiK5LiA5YWz77yM5qC55o2ubGV2ZWzlhrPlrppcclxuICAgIHJlU3RhcnQodHlwZSl7XHJcblxyXG4gICAgfVxyXG4gICAgLy/ojrflj5bml7bpl7TmiLNcclxuICAgIGdldFRpbWUoKXtcclxuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gdGltZXN0YW1wO1xyXG4gICAgfVxyXG4gICAgLy/ojrfog5xcclxuICAgIHBhc3NMZXZlbCgpe1xyXG5cclxuICAgIH1cclxuICAgIC8v5aSx6LSlXHJcbiAgICBsb3NlTGV2ZWwodHlwZSl7XHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgLy/lpoLmnpzmmK/lgJLorqHml7Yg6LCD55So5q2k5pa55rOVXHJcbiAgICBzdGFydENvdW50RG93blRpbWUgKCkge1xyXG4gICAgICAgIHRoaXMudGltZU5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLnRpbWVOb2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgIC50bygyLHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgICAvL+S4iuS8oOavj+asoeaTjeS9nOaVsOaNrlxyXG4gICAgc2V0RGF0YSgpe1xyXG4gICAgICAgICBjYy5meC5HYW1lVG9vbC5zZXRHYW1lRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgLy/kuIrkvKDmjpLooYzmppzmlbDmja5cclxuICAgIGdhbWVPdmVyKHRpbWUpe1xyXG4gICAgICAgICBjYy5meC5HYW1lVG9vbC5zZXRSYW5rKHRpbWUpO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikpXHJcbiAgICAgICAgLnRvKDAuNCx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5kZWxheSgyKVxyXG4gICAgICAgIC50bygwLjQse29wYWNpdHk6NTB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJPdmVyU2NlbmVcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKVxyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlICgpIHtcclxuICAgICAgICAvLyBjYy5meC5Ob3RpZmljYXRpb25zLm9uKFwiY2xpY2tTdW5cIiwgdGhpcy5jbGlja1N1biwgdGhpcyk7XHJcbiAgICB9XHJcbiAgICBvbkRpc2FibGUgKCkge1xyXG4gICAgICAgIC8vIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub2ZmKFwiY2xpY2tTdW5cIiwgdGhpcy5jbGlja1N1bik7XHJcbiAgICB9XHJcbiAgICB1cGRhdGUgKGR0KSB7XHJcbiAgICB9XHJcbn1cclxuIl19