(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(60); // 示例使用 var manager = cc.director.getCollisionManager(); manager.enabled = true; // manager.enabledDebugDraw = true; GameManager_1._instance = this; // GameData._instance.GM_INFO.probation = false; this.Air = []; this.Air2 = []; }; 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("createCrackBlock", 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.difficultyArray = 0; this.cameraMove = false; this.countTime = 180; 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; var tip = this.Tip.getChildByName("tip"); this.tipShow(tip, -1, true); } else { this.node.getChildByName("Begin").opacity = 0; this.node.getChildByName("Begin").scale = 2; if (this.node.getChildByName("Begin")) { 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(); } else { setTimeout(function () { _this.startGame(); }, 1000); } } }; //开启引导 GameManager.prototype.startGuide = function (type, revive) { var _this = this; this.guide = type; console.log("startGuide", type); if (type == 0) { this.careteGuideBlock(1); } else if (type == 2) { 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, false); } else if (type == 3) { if (revive == true) { this.round += 1; this.careteGuideBlock(3); } else { var tip = this.Tip.getChildByName("tip3"); this.tipShow(tip, type, false); setTimeout(function () { _this.tipHide("tip3", null, false); _this.round += 1; _this.careteGuideBlock(3); }, 3000); } } 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("tip4", 7, revive); } else if (type == 7) { if (revive == true) { this.round += 1; this.careteGuideBlock(7); } else { var tip = this.Tip.getChildByName("tip5"); this.tipShow(tip, type, false); setTimeout(function () { _this.tipHide("tip5", null, revive); _this.round += 1; _this.careteGuideBlock(7); }, 2000); } } else if (type == 8) { this.round += 1; this.careteGuideBlock(8); } else if (type == 9) { this.Player.getComponent("Player").jumpPause = true; var tip_1 = this.Tip.getChildByName("tip6"); setTimeout(function () { _this.tipShow(tip_1, type, false); }, 1000); } }; GameManager.prototype.tipShow = function (tipName, type, showNext) { var _this = this; var tip = tipName; var left = this.Tip.getChildByName("left"); var right = this.Tip.getChildByName("right"); 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; if (type == 5 || type == 1) _this.Player.getComponent("Player").jumpPause = false; }) .start(); if (showNext == true) { this.Tip.getChildByName("btn_next").active = true; this.Tip.getChildByName("btn_jump").active = true; 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(); } if (tip.name == "tip6") { this.Tip.getChildByName("btn_start").active = true; cc.tween(this.Tip.getChildByName("btn_start")) .delay(1) .to(0.2, { opacity: 255 }) .start(); } }; //隐藏 GameManager.prototype.tipHide = function (tipName, num, revive) { 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 () { if (tip.name != "tip3" && tipName != "tip5") { _this.Player.getComponent("Player").jumpPause = true; } if (num != null) { _this.startGuide(num, revive); } }) .start(); }; GameManager.prototype.careteGuideBlock = function (type) { var _this = this; console.log("产生方块时长度:", this.node.getChildByName("Block").children.length); if (this.node.getChildByName("Block").children.length > 2) { return; } this.Ground.active = false; var tip = this.Tip.getChildByName("tip2"); if (type == 5) { tip = this.Tip.getChildByName("tip4"); } this.Player.getComponent("Player").jumpPause = true; var block = cc.instantiate(this.blockPrefab[13]); this.Player.getComponent("Player").basicHeight = this.Player.y; 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) { if (type == 1) _this.Player.getComponent("Player").jumpPause = true; _this.tipShow(tip, type, false); } }) .start(); }; GameManager.prototype.showGround = function (tempY) { var _this = this; setTimeout(function () { _this.Ground.active = true; _this.Ground.y = tempY; }, 500); }; GameManager.prototype.guideStart = function () { this.tipHide("tip6", null, false); this.Tip.getChildByName("btn_next").active = false; this.Tip.getChildByName("btn_jump").active = false; this.Tip.getChildByName("btn_start").active = false; GameData_1.default._instance.GM_INFO.probation = false; this.destroyBlock(false); this.onDestroy(); cc.director.loadScene("GameScene"); }; //下一步 GameManager.prototype.guideNext = function () { if (this.guide == -1) { this.tipHide("tip", 0, false); this.Tip.getChildByName("btn_next").active = false; this.Tip.getChildByName("btn_jump").active = false; this.Tip.getChildByName("btn_start").active = false; } }; //跳过 GameManager.prototype.guideJump = function () { this.Tip.getChildByName("btn_next").active = false; this.Tip.getChildByName("btn_jump").active = false; this.Tip.getChildByName("btn_start").active = false; GameData_1.default._instance.GM_INFO.probation = false; this.destroyBlock(false); this.onDestroy(); cc.director.loadScene("GameScene"); }; GameManager.prototype.jump = function () { this.Player.getComponent("Player").jump(); }; GameManager.prototype.startGame = function () { this.createBlock(); // this.createAir(); }; 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.block = null; this.block = block; 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; if (GameData_1.default._instance.LEVEL_INFO.speed < 2) 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.createAir = function () { for (var i = 0; i < 100; i++) { this.Ground.active = 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; } 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 <= 80) 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.clearAir = function () { cc.director.loadScene("GameScene"); }; //虚假碎裂块 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) { while (this.node.getChildByName("CrackBlock").childrenCount > 0) { var child = this.node.getChildByName("CrackBlock").children[0]; child.removeFromParent(); child.destroy(); // 销毁节点资源 } // if(this.node.getChildByName("CrackBlock")){ // if(this.node.getChildByName("CrackBlock").children){ // var block2 = this.node.getChildByName("CrackBlock").children; // for(let i=0; i 0) { var child = this.node.getChildByName("Block").children[0]; child.removeFromParent(); child.destroy(); // 销毁节点资源 } // for(let i=0; i 5) { if (_this.guide == 6) { _this.guide = 5; _this.round = 2; _this.startGuide(5, true); } else { _this.round = 1; _this.startGuide(6, true); } } else { _this.round = 0; _this.startGuide(3, true); } }) .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); this.destroyBlock(true); 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 (result) { if (result == true || this.countTime > 0) { GameData_1.default._instance.CLICK_DATA.totalScore = GameManager_1._instance.score; 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; GameData_1.default._instance.CLICK_DATA.isAFK = GameData_1.default._instance.GM_INFO.isAFK; //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); Notification_1.Notification.emit("setData", true); 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._instance.GM_INFO.difficultyMax + ""; var difficulty = parseInt(this.difficultyArray / this.level * 10 + ""); // console.log("难度总数",this.difficultyArray,"次数",this.level,"最终",difficulty); this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string = difficulty / 10 + ""; var urlNow = window.location.href; if (this.containsTrain(urlNow)) { this.GameOver.getChildByName("yes").active = false; this.GameOver.getChildByName("no").active = false; this.GameOver.getChildByName("finishi").active = true; GameTool_1.GameTool.setLocalStorage(); } else { this.GameOver.getChildByName("yes").active = true; this.GameOver.getChildByName("no").active = true; this.GameOver.getChildByName("finishi").active = false; } }; GameManager.prototype.containsTrain = function (str) { return /from=train/i.test(str); }; GameManager.prototype.jumpFinishi = function () { var url = "https://train.sparkus.cn/poster/game/training/" + GameData_1.default._instance.GM_INFO.scode + "?suc=1"; window.location.href = url; }; GameManager.prototype.backLoad = function () { this.destroyBlock(false); this.destroyBlock(true); this.onDestroy(); cc.director.loadScene("LoadScene"); }; GameManager.prototype.again = function () { this.destroyBlock(false); this.destroyBlock(true); this.onDestroy(); 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) { var frame = cc.game.getFrameRate(); if (frame > 110) cc.game.setFrameRate(120); else if (frame > 80) cc.game.setFrameRate(90); else cc.game.setFrameRate(60); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRix1Q0FBa0M7QUFDbEMsNENBQTJDO0FBQzNDLG9EQUFtRDtBQUU3QyxJQUFBLEtBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQWxDLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBaUIsQ0FBQztBQUcxQztJQUF5QywrQkFBWTtJQUFyRDtRQUFBLHFFQW8yQkM7UUFqMkJHLFlBQU0sR0FBYyxJQUFJLENBQUM7UUFHekIsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixZQUFNLEdBQVksSUFBSSxDQUFDO1FBR3ZCLFlBQU0sR0FBWSxJQUFJLENBQUM7UUFHdkIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixVQUFJLEdBQWEsSUFBSSxDQUFDO1FBR3RCLGNBQVEsR0FBWSxJQUFJLENBQUM7UUFHekIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixpQkFBVyxHQUFzQixFQUFFLENBQUM7O0lBeTBCeEMsQ0FBQztvQkFwMkJvQixXQUFXO0lBa0Q1Qix3QkFBd0I7SUFHeEIsNEJBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpCLE9BQU87UUFDUCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdkIsbUNBQW1DO1FBQ25DLGFBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFUyw4QkFBUSxHQUFsQjtRQUNJLDJCQUFZLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELDJCQUFZLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLDJCQUFZLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCwyQkFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCwyQkFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUM1QywyQkFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN2QywyQkFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQztJQUdqRCxDQUFDO0lBRVMsK0JBQVMsR0FBbkI7UUFDSSwyQkFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELDJCQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsMkJBQVksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsMkJBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QywyQkFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLDJCQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsMkJBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLHlCQUFHLEdBQUg7UUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDOUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUcsQ0FBQyxFQUFFLEVBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ3RCO0lBRUwsQ0FBQztJQUNELE9BQU87SUFDUCxnREFBMEIsR0FBMUI7UUFDSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxTQUFTO0lBQ1QsNEJBQU0sR0FBTjtRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxFQUFFO1NBQ1Q7YUFBTTtTQUNOO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELDBCQUFJLEdBQUo7UUFDSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2xELGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCwyQkFBSyxHQUFMO1FBQUEsaUJBK0JDO1FBOUJHLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixnREFBZ0Q7UUFDaEQsSUFBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDcEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7U0FFN0I7YUFDRztZQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFDO2dCQUNqQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMxQyxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLENBQUM7cUJBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1YsRUFBRSxDQUFDLEdBQUcsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxDQUFDO3FCQUMzQixJQUFJLENBQUM7b0JBQ0YsS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyQixDQUFDLENBQUM7cUJBQ0QsS0FBSyxFQUFFLENBQUM7YUFDWjtpQkFDRztnQkFDQSxVQUFVLENBQUM7b0JBQ1AsS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtTQUVKO0lBQ0wsQ0FBQztJQUVELE1BQU07SUFDTixnQ0FBVSxHQUFWLFVBQVcsSUFBSSxFQUFDLE1BQU07UUFBdEIsaUJBeUVDO1FBeEVHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUcsSUFBSSxJQUFJLENBQUMsRUFBQztZQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjthQUNJLElBQUcsSUFBSSxJQUFJLENBQUMsRUFBQztZQUNkLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUNkLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7aUJBQ2IsS0FBSyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEM7YUFDSSxJQUFHLElBQUksSUFBSSxDQUFDLEVBQUM7WUFDZCxJQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUM7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtpQkFDRztnQkFDQSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixVQUFVLENBQUM7b0JBQ1AsS0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxLQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztvQkFDZixLQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1NBR0o7YUFDSSxJQUFHLElBQUksSUFBSSxDQUFDLEVBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7YUFDSSxJQUFHLElBQUksSUFBSSxDQUFDLEVBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7YUFDSSxJQUFHLElBQUksSUFBSSxDQUFDLEVBQUM7WUFDZCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztpQkFDZCxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO2lCQUNiLEtBQUssRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO2FBQ0ksSUFBRyxJQUFJLElBQUksQ0FBQyxFQUFDO1lBQ2QsSUFBRyxNQUFNLElBQUksSUFBSSxFQUFDO2dCQUNkLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUI7aUJBQ0c7Z0JBQ0EsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsVUFBVSxDQUFDO29CQUNQLEtBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxNQUFNLENBQUMsQ0FBQztvQkFDakMsS0FBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7b0JBQ2YsS0FBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtTQUVKO2FBQ0ksSUFBRyxJQUFJLElBQUksQ0FBQyxFQUFDO1lBQ2QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO2FBQ0ksSUFBRyxJQUFJLElBQUksQ0FBQyxFQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNwRCxJQUFJLEtBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxVQUFVLENBQUM7Z0JBQ1AsS0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFHLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUVaO0lBQ0wsQ0FBQztJQUNELDZCQUFPLEdBQVAsVUFBUSxPQUFPLEVBQUMsSUFBSSxFQUFDLFFBQVE7UUFBN0IsaUJBdUNDO1FBdENHLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQUEsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEQsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDYixFQUFFLENBQUMsSUFBSSxFQUFDLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDO2FBQ3BCLEtBQUssRUFBRSxDQUFDO1FBQ1QsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDZCxFQUFFLENBQUMsSUFBSSxFQUFDLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDO2FBQ3BCLEtBQUssRUFBRSxDQUFDO1FBQ1QsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDWixLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ1gsRUFBRSxDQUFDLElBQUksRUFBQyxFQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsQ0FBQzthQUN0QixJQUFJLENBQUM7WUFDRixLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFHLElBQUksSUFBSSxDQUFDO2dCQUFFLEtBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLElBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztnQkFBRyxLQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3JGLENBQUMsQ0FBQzthQUNELEtBQUssRUFBRSxDQUFDO1FBQ1QsSUFBRyxRQUFRLElBQUksSUFBSSxFQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUM1QyxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLENBQUM7aUJBQ3JCLEtBQUssRUFBRSxDQUFDO1lBQ1QsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDNUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxDQUFDO2lCQUNyQixLQUFLLEVBQUUsQ0FBQztTQUNaO1FBQ0QsSUFBRyxHQUFHLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBQztZQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25ELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzdDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ1IsRUFBRSxDQUFDLEdBQUcsRUFBQyxFQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsQ0FBQztpQkFDckIsS0FBSyxFQUFFLENBQUM7U0FDWjtJQUNMLENBQUM7SUFDRCxJQUFJO0lBQ0osNkJBQU8sR0FBUCxVQUFRLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTTtRQUExQixpQkF5QkM7UUF4QkcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDYixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsRUFBRSxDQUFDLElBQUksRUFBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsQ0FBQzthQUNsQixLQUFLLEVBQUUsQ0FBQztRQUNULEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ2QsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLENBQUM7YUFDbEIsS0FBSyxFQUFFLENBQUM7UUFDVCxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNaLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUM7YUFDcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLElBQUksQ0FBQztZQUNGLElBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBQztnQkFDdkMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUN2RDtZQUNELElBQUcsR0FBRyxJQUFJLElBQUksRUFBQztnQkFDWCxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxNQUFNLENBQUMsQ0FBQzthQUMvQjtRQUVMLENBQUMsQ0FBQzthQUNELEtBQUssRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVELHNDQUFnQixHQUFoQixVQUFpQixJQUFJO1FBQXJCLGlCQXdDQztRQXZDRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUNyRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBRyxJQUFJLElBQUksQ0FBQyxFQUFDO1lBQ1QsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNwRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxHQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbEcsSUFBRyxJQUFJLEdBQUcsQ0FBQyxFQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUM3RCxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUMvQztRQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFHLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRCxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksSUFBSSxHQUFFLENBQUMsQ0FBQztRQUNaLElBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO1lBQ3RCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFHLENBQUM7U0FDbEM7YUFDSSxJQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztZQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3JELEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7UUFDRCxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNkLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUM7YUFDaEIsSUFBSSxDQUFDO1lBQ0YsSUFBRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Z0JBQ3RCLElBQUcsSUFBSSxJQUFJLENBQUM7b0JBQUUsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDbEUsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hDO1FBRUwsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsZ0NBQVUsR0FBVixVQUFXLEtBQUs7UUFBaEIsaUJBS0M7UUFKRyxVQUFVLENBQUM7WUFDUCxLQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDMUIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFDRCxnQ0FBVSxHQUFWO1FBQ0ksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BELGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWpCLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxLQUFLO0lBQ0wsK0JBQVMsR0FBVDtRQUNJLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBQztZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkQ7SUFDTCxDQUFDO0lBQ0QsSUFBSTtJQUNKLCtCQUFTLEdBQVQ7UUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwRCxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsMEJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCwrQkFBUyxHQUFUO1FBQ0ksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLG9CQUFvQjtJQUN4QixDQUFDO0lBRUQsOEJBQVEsR0FBUixVQUFTLEtBQUs7UUFBZCxpQkFxQkM7UUFwQkcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsYUFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsYUFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUksYUFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3JHLElBQUksS0FBSyxHQUFHLGFBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFDLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDL0UsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RFLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFDLENBQUM7YUFDekIsSUFBSSxDQUFDO1lBQ0YsSUFBRyxLQUFLLElBQUksa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQztnQkFDMUYsS0FBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUNwRDtZQUNELElBQUcsS0FBSyxJQUFJLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUM7Z0JBQzFGLEtBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDcEQ7WUFDRCxJQUFHLEtBQUssSUFBSSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFDO2dCQUMxRixLQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNqRCx3Q0FBd0M7YUFDM0M7UUFDTCxDQUFDLENBQUM7YUFDRCxLQUFLLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxpQ0FBVyxHQUFYO1FBQ0ksSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNyRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QyxJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7Z0JBQzVCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDekM7WUFFRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNsRyxJQUFHLEdBQUcsR0FBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFDO2dCQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUM3RCxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUMvQztZQUVELElBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssRUFBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUMxQjtZQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFHLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMxRCxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFBRSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdEcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pELGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNqRCxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUUsSUFBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFDLENBQUM7Z0JBQUMsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBRXZILElBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxHQUFHO2dCQUMvQyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxJQUFJLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEYsSUFBRyxJQUFJLENBQUMsS0FBSyxJQUFJLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUFFLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUMzRixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU07Z0JBQUUsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ2hHLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTTtnQkFBRSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUMxRztJQUNMLENBQUM7SUFFRyxNQUFNO0lBQ04sK0JBQVMsR0FBVDtRQUNJLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFFLEVBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsRUFBQztnQkFDNUIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN6QztZQUNELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsR0FBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2xHLElBQUcsR0FBRyxHQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUM7Z0JBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQzdELGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQy9DO1lBR0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUcsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFELEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFFbEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDaEIsSUFBRyxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUFFLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN0RyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDakQsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pELGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5RSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFFOUUsSUFBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUU7Z0JBQzlDLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLElBQUksa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0RixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU07Z0JBQUUsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQzNGLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTTtnQkFBRSxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDaEcsSUFBRyxJQUFJLENBQUMsS0FBSyxJQUFJLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUFFLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1NBQzFHO0lBRUwsQ0FBQztJQUVELDhCQUFRLEdBQVI7UUFDSSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUwsT0FBTztJQUNQLHNDQUFnQixHQUFoQjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNwRCxJQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBQztZQUN4QyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDNUQsSUFBRyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksRUFBQztnQkFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUcsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFELEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEQsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FFcEI7SUFDTCxDQUFDO0lBRUQsa0NBQVksR0FBWixVQUFhLElBQUk7UUFDYixJQUFHLElBQUksSUFBSSxJQUFJLEVBQUM7WUFDWixJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7Z0JBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFO29CQUM3RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN6QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBRSxTQUFTO2lCQUM5QjtnQkFDRCw4Q0FBOEM7Z0JBQzlDLDJEQUEyRDtnQkFDM0Qsd0VBQXdFO2dCQUN4RSw4Q0FBOEM7Z0JBQzlDLDZCQUE2QjtnQkFDN0IsMERBQTBEO2dCQUMxRCxnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixJQUFJO2FBQ1A7U0FDSjthQUNHO1lBQ0EsMERBQTBEO1lBQzFELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDeEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUUsU0FBUzthQUM5QjtZQUNELDBFQUEwRTtZQUMxRSx5REFBeUQ7WUFDekQsd0VBQXdFO1lBQ3hFLGtFQUFrRTtZQUVsRSxRQUFRO1lBQ1IsSUFBSTtTQUNQO0lBQ0wsQ0FBQztJQUVELCtCQUFTLEdBQVQ7UUFDSSxJQUFJLEdBQUcsR0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztZQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1RSxJQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztZQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNaLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsQ0FBQzthQUM3QixJQUFJLENBQUM7WUFDRixHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUM7YUFDRCxLQUFLLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJO0lBQ0osOEJBQVEsR0FBUixVQUFTLElBQUk7UUFBYixpQkEwQ0M7UUF6Q0csSUFBRyxJQUFJLElBQUksSUFBSSxFQUFDO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDcEIsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxDQUFDO2lCQUNqQyxJQUFJLENBQUM7Z0JBQ0YsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFDLHVEQUF1RDtnQkFDdkQsSUFBRyxLQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBQztvQkFDZCxJQUFHLEtBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFDO3dCQUNmLEtBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLEtBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLEtBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDO3FCQUMzQjt5QkFDRzt3QkFDQSxLQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzt3QkFDZixLQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztxQkFDM0I7aUJBR0o7cUJBQ0c7b0JBQ0EsS0FBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ2YsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzNCO1lBQ0wsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsSUFBSSxDQUFDO1lBQ04sQ0FBQyxDQUFDO2lCQUNELEtBQUssRUFBRSxDQUFDO1NBQ1o7YUFDRztZQUNBLElBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUM7Z0JBQ25DLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JCO2lCQUFJO2dCQUNELGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckI7U0FDSjtJQUVMLENBQUM7SUFDRCxJQUFJO0lBQ0osK0JBQVMsR0FBVCxVQUFVLElBQUk7UUFBZCxpQkFvREM7UUFuREcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUM7WUFDakQsbURBQW1EO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDN0QsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDOUIsSUFBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDNUI7U0FDSjtRQUNELHdCQUF3QjtRQUN4QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUM7WUFDbkIsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUMsSUFBSSxHQUFDLFVBQVUsQ0FBQztTQUN0RDtRQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNwQixFQUFFLENBQUMsVUFBVSxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLENBQUM7YUFDMUMsSUFBSSxDQUFDO1lBQ0YsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkQsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLElBQUksQ0FBQztZQUNGLEtBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixLQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFHLElBQUksR0FBRyxDQUFDLEVBQUM7Z0JBQ1IsS0FBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDOUIsS0FBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN6QyxFQUFFLENBQUMsSUFBSSxFQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxDQUFDO3FCQUN0QixLQUFLLENBQUMsR0FBRyxDQUFDO3FCQUNWLElBQUksQ0FBQztvQkFDRixLQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDUixJQUFJLENBQUM7b0JBQ0YsS0FBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QixDQUFDLENBQUM7cUJBQ0QsS0FBSyxFQUFFLENBQUM7YUFDWjtpQkFDRztnQkFDQSxVQUFVLENBQUM7b0JBQ1AsS0FBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QixDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7UUFDTCxDQUFDLENBQUM7YUFDRCxLQUFLLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCw2QkFBTyxHQUFQLFVBQVEsTUFBTTtRQUNWLElBQUcsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBQztZQUNwQyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLGFBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3ZFLGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNyRCxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDakQsa0JBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pELGtCQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUV2RSwrQ0FBK0M7WUFDL0MsbUJBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsZ0NBQVUsR0FBVjtRQUNJLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFHLE9BQU8sSUFBSSxVQUFVLElBQUksT0FBTyxJQUFFLElBQUksRUFBQztZQUN0QyxPQUFPLEdBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ2hDO2FBQ0c7WUFDQSxJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFDO2dCQUNwQyxPQUFPLEdBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ2hDO2lCQUNHO2dCQUNBLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakMsSUFBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBQztvQkFDZixJQUFJLElBQUksQ0FBQyxDQUFDO2lCQUNiO2dCQUNELE9BQU8sR0FBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUM1QyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDN0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBQyxPQUFPLENBQUMsQ0FBQzthQUNsRDtTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNELDhCQUE4QjtJQUM5QixvQ0FBYyxHQUFkLFVBQWUsR0FBRztRQUNkLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsYUFBYTtJQUNiLGdDQUFVLEdBQVY7UUFDSSxlQUFlO1FBQ2YsSUFBTSxVQUFVLEdBQUcsZ0VBQWdFLENBQUM7UUFDcEYsZ0JBQWdCO1FBQ2hCLElBQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixtQkFBbUI7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQixtQkFBbUI7WUFDdkIsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLGNBQWM7WUFDZCxJQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xELFlBQVk7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxJQUFJLEdBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQseUNBQW1CLEdBQW5CO1FBQUEsaUJBc0JDO1FBckJHLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzdELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7cUJBQ3ZCLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEtBQUssRUFBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztxQkFDNUMsRUFBRSxDQUFDLElBQUksRUFBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsRUFBQyxDQUFDO3FCQUM5QyxLQUFLLEVBQUUsQ0FBQTthQUNYO1lBQ0QsSUFBRyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBQztnQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDMUMsMkJBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNmLFVBQVUsQ0FBQztvQkFDUCxLQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsUUFBUTtJQUNSLDhCQUFRLEdBQVI7UUFDSSxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVU7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN2RCxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUM3QixJQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDUixJQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztvQkFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbkQ7U0FDSjtRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM3RCxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUM5QixJQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDVCxJQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztvQkFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDcEQ7U0FDSjtJQUNMLENBQUM7SUFFRCw2QkFBTyxHQUFQO1FBQ0ksa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzlDLG1CQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELDhCQUFRLEdBQVI7UUFDSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU07WUFDbkUsa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDekMsOEVBQThFO1FBQzlFLGlEQUFpRDtRQUVqRCxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLEVBQUUsR0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSw0RUFBNEU7UUFDNUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNO1lBQ3hFLFVBQVUsR0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRW5CLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2xDLElBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN0RCxtQkFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzlCO2FBQ0c7WUFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUMxRDtJQUNMLENBQUM7SUFFRCxtQ0FBYSxHQUFiLFVBQWMsR0FBRztRQUNiLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUNBQVcsR0FBWDtRQUNJLElBQUksR0FBRyxHQUFHLGdEQUFnRCxHQUFHLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3pHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsOEJBQVEsR0FBUjtRQUNJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDJCQUFLLEdBQUw7UUFDSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw4QkFBUSxHQUFSO1FBQ0ksRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFFBQVE7SUFDUixtQ0FBYSxHQUFiLFVBQWMsTUFBYTtRQUN2QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2YsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBLFNBQVM7UUFDOUMsSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUEsZUFBZTtRQUN0RCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQSxPQUFPO1FBQy9DLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBRyxHQUFHLEdBQUcsRUFBRTtZQUFFLENBQUMsR0FBRyxHQUFHLEdBQUMsR0FBRyxDQUFDO1FBQ3pCLElBQUksUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUEsYUFBYTtRQUM5RCxJQUFJLElBQUksR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUcsUUFBUSxHQUFHLEVBQUU7WUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFBO0lBQ3pCLENBQUM7SUFDRCw0QkFBTSxHQUFOLFVBQVEsRUFBRTtRQUNOLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBRyxLQUFLLEdBQUcsR0FBRztZQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3JDLElBQUcsS0FBSyxHQUFHLEVBQUU7WUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFDeEMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBQztZQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN0RCxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDakQ7SUFDTCxDQUFDOztJQWgyQkQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsrQ0FDSztJQUd6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzhDQUNJO0lBR3RCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7K0NBQ0s7SUFHdkI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzsrQ0FDSztJQUd2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBR3BCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7NkNBQ0c7SUFHdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztpREFDTztJQUd6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBR3BCO1FBREMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29EQUNjO0lBM0JuQixXQUFXO1FBRC9CLE9BQU87T0FDYSxXQUFXLENBbzJCL0I7SUFBRCxrQkFBQztDQXAyQkQsQUFvMkJDLENBcDJCd0MsRUFBRSxDQUFDLFNBQVMsR0FvMkJwRDtrQkFwMkJvQixXQUFXIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGVhcm4gVHlwZVNjcmlwdDpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvdHlwZXNjcmlwdC5odG1sXHJcbi8vIExlYXJuIEF0dHJpYnV0ZTpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMuaHRtbFxyXG4vLyBMZWFybiBsaWZlLWN5Y2xlIGNhbGxiYWNrczpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvbGlmZS1jeWNsZS1jYWxsYmFja3MuaHRtbFxyXG5cclxuaW1wb3J0IEdhbWVEYXRhIGZyb20gJy4vR2FtZURhdGEnO1xyXG5pbXBvcnQgeyBHYW1lVG9vbCB9IGZyb20gJy4vdG9vbC9HYW1lVG9vbCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4vdG9vbC9Ob3RpZmljYXRpb24nO1xyXG5cclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcblxyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lTWFuYWdlciBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLkNhbWVyYSlcclxuICAgIENhbWVyYTogY2MuQ2FtZXJhID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIHRvcFVJOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIFBsYXllcjogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBHcm91bmQ6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgWGluOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTGFiZWwpXHJcbiAgICB0aW1lOiBjYy5MYWJlbCA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBHYW1lT3ZlcjogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBUaXA6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShbY2MuUHJlZmFiXSlcclxuICAgIGJsb2NrUHJlZmFiIDogQXJyYXk8Y2MuUHJlZmFiPiA9IFtdO1xyXG5cclxuICAgIFxyXG5cclxuICAgIHJvdW5kOiBudW1iZXI7ICAgICAgLy/lm57lkIhcclxuICAgIGxldmVsOiBudW1iZXI7ICAgICAgLy/lm57lkIhcclxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IGFueTtcclxuICAgIGJsb2NrQXJyYXk6IGFueTtcclxuICAgIGNhbWVyYU1vdmU6Ym9vbGVhblxyXG4gICAgY291bnRIZWlnaHQ6bnVtYmVyO1xyXG4gICAgY291bnRUaW1lOiBudW1iZXI7XHJcbiAgICBvdmVyOiBib29sZWFuO1xyXG4gICAgYmVnaW46IGJvb2xlYW47XHJcbiAgICBpbnRlcmZlcmU6IGJvb2xlYW47XHJcbiAgICBvbGRTcGVlZDogbnVtYmVyOyAgICAgIC8v5LiK5LiA5Zue5ZCI6YCf5bqmXHJcbiAgICBzY29yZTogbnVtYmVyOyAgICAgIC8v5oC75b6X5YiGXHJcbiAgICBkaWZmaWN1bHR5TWF4Om51bWJlcjsgLy/mnIDpq5jpmr7luqbns7vmlbBcclxuICAgIGRpZmZpY3VsdHlBcnJheTpudW1iZXI7XHJcbiAgICBkcm9wOiBudW1iZXI7ICAgICAgLy/mkYTlg4/mnLrokL3lt65cclxuICAgIGd1aWRlOiBudW1iZXI7ICAgICAvL+iusOW9leW8leWvvOatpemqpFxyXG4gICAgQWlyOiBhbnk7XHJcbiAgICBBaXIyOiBhbnk7XHJcbiAgICBibG9jazogY2MuTm9kZTtcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG5cclxuXHJcbiAgICBvbkxvYWQgKCkge1xyXG4gICAgICAgIGNjLmdhbWUuc2V0RnJhbWVSYXRlKDYwKTtcclxuICAgICBcclxuICAgICAgICAvLyDnpLrkvovkvb/nlKhcclxuICAgICAgICB2YXIgbWFuYWdlciA9IGNjLmRpcmVjdG9yLmdldENvbGxpc2lvbk1hbmFnZXIoKTtcclxuICAgICAgICBtYW5hZ2VyLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIG1hbmFnZXIuZW5hYmxlZERlYnVnRHJhdyA9IHRydWU7XHJcbiAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlID0gdGhpcztcclxuICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkFpciA9IFtdO1xyXG4gICAgICAgIHRoaXMuQWlyMiA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvbkVuYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJjcmVhdGVCbG9ja1wiLHRoaXMuY3JlYXRlQmxvY2ssdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwiYWRkU2NvcmVcIix0aGlzLmFkZFNjb3JlLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImNyZWF0ZUNyYWNrQmxvY2tcIix0aGlzLmNyZWF0ZUNyYWNrQmxvY2ssdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwic2hvd0dyb3VuZFwiLHRoaXMuc2hvd0dyb3VuZCx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJkZWF0aFwiLHRoaXMuZ2V0RGVhdGgsdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwianVtcFwiLHRoaXMuanVtcCx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJzZXREYXRhXCIsdGhpcy5zZXREYXRhLHRoaXMpO1xyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJjcmVhdGVCbG9ja1wiLHRoaXMuY3JlYXRlQmxvY2spO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJhZGRTY29yZVwiLHRoaXMuYWRkU2NvcmUpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJjcmVhdGVDcmFja0Jsb2NrXCIsdGhpcy5jcmVhdGVDcmFja0Jsb2NrKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiZGVhdGhcIix0aGlzLmdldERlYXRoKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwianVtcFwiLHRoaXMuanVtcCk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcInNob3dHcm91bmRcIix0aGlzLnNob3dHcm91bmQpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJzZXREYXRhXCIsdGhpcy5zZXREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+agueaNruaYr+WQpuWFqOmdouWxj++8jOWBmueLrOeri+mAgumFjeaWuemdolxyXG4gICAgZml0KCl7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmcyXCIpLnkgPSAtMjE2Ny42NzU7XHJcbiAgICAgICAgdmFyIGpnID0gdGhpcy5zZXRGaXQoKTtcclxuICAgICAgICBpZighamcpe1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZzJcIikueSA9IC0yMTAwO1xyXG4gICAgICAgICAgICB0aGlzLnRvcFVJLnkgPSA2NjA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8v5Yik5pat5YWo6Z2i5bGPXHJcbiAgICBnZXRTZXRTY3JlZW5SZXNvbHV0aW9uRmxhZyAoKSB7XHJcbiAgICAgICAgbGV0IHNpemUgPSBjYy53aW5TaXplO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgIGlmICgoaGVpZ2h0IC8gd2lkdGgpID4gKDE2LjIgLyA5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy/liKTmlq3lhajpnaLlsY/pgILphY1cclxuICAgIHNldEZpdCAoKSB7XHJcbiAgICAgICAgbGV0IGZsYWcgPSB0aGlzLmdldFNldFNjcmVlblJlc29sdXRpb25GbGFnKCk7XHJcbiAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmxhZztcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCl7XHJcbiAgICAgICAgdGhpcy5kcm9wID0gdGhpcy50b3BVSS55IC0gdGhpcy5DYW1lcmEubm9kZS55O1xyXG4gICAgICAgIHRoaXMuc2NvcmUgPSAwO1xyXG4gICAgICAgIHRoaXMub2xkU3BlZWQgPSAxMDtcclxuICAgICAgICB0aGlzLmd1aWRlID0gLTE7XHJcbiAgICAgICAgdGhpcy5iZWdpbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vdmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdW5kID0gMDtcclxuICAgICAgICB0aGlzLmxldmVsID0gMDtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5sZXZlbE1heCA9IDE7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uZGlmZmljdWx0eU1heCA9IDE7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA9IDM7XHJcbiAgICAgICAgdGhpcy5ibG9ja0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5kaWZmaWN1bHR5QXJyYXkgPSAwO1xyXG4gICAgICAgIHRoaXMuY2FtZXJhTW92ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291bnRUaW1lID0gMTgwO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4xXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluM1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMVwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9pbml0KCk7XHJcbiAgICAgICAgdGhpcy5zY2hlZHVsZSh0aGlzLnVwZGF0ZUNvdW50RG93blRpbWUsMSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQgKCkge1xyXG4gICAgICAgIC8vIHRoaXMubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgdGhpcy5qdW1wLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmZpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbil7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMudGlwU2hvdyh0aXAsLTEsdHJ1ZSk7XHJcblxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJlZ2luXCIpLnNjYWxlID0gMjtcclxuICAgICAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikpe1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikpXHJcbiAgICAgICAgICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NSxzY2FsZToxfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudG8oMC41LHtvcGFjaXR5OjAsc2NhbGU6MH0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R2FtZSgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R2FtZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgIH0gXHJcbiAgICB9XHJcblxyXG4gICAgLy/lvIDlkK/lvJXlr7xcclxuICAgIHN0YXJ0R3VpZGUodHlwZSxyZXZpdmUpeyAgIC8vdHlwZeS4uuesrOWHoOatpVxyXG4gICAgICAgIHRoaXMuZ3VpZGUgPSB0eXBlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwic3RhcnRHdWlkZVwiLHR5cGUpO1xyXG4gICAgICAgIGlmKHR5cGUgPT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jaygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDIpe1xyXG4gICAgICAgICAgICBsZXQgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlblt0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbi5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKGJsb2NrKVxyXG4gICAgICAgICAgICAudG8oMC43LHt4OjB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwMlwiLDMsZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gMyl7XHJcbiAgICAgICAgICAgIGlmKHJldml2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jaygzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwM1wiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwU2hvdyh0aXAsdHlwZSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpcEhpZGUoXCJ0aXAzXCIsbnVsbCxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soMyk7XHJcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDQpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDUpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDYpe1xyXG4gICAgICAgICAgICBsZXQgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlblt0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbi5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKGJsb2NrKVxyXG4gICAgICAgICAgICAudG8oMC43LHt4OjB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwNFwiLDcscmV2aXZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDcpe1xyXG4gICAgICAgICAgICBpZihyZXZpdmUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soNyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGxldCB0aXAgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInRpcDVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpcFNob3codGlwLHR5cGUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwNVwiLG51bGwscmV2aXZlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg3KTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gOCl7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gOSl7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXA2XCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwU2hvdyh0aXAsdHlwZSxmYWxzZSk7XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRpcFNob3codGlwTmFtZSx0eXBlLHNob3dOZXh0KXtcclxuICAgICAgICBsZXQgdGlwID0gdGlwTmFtZTtcclxuICAgICAgICBsZXQgbGVmdCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwibGVmdFwiKTtcclxuICAgICAgICBsZXQgcmlnaHQgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInJpZ2h0XCIpO1xyXG4gICAgICAgIGxlZnQud2lkdGggPSAwOyByaWdodC53aWR0aCA9IDA7dGlwLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIGNjLnR3ZWVuKGxlZnQpXHJcbiAgICAgICAgLnRvKDAuMjUse3dpZHRoOjM0OH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgY2MudHdlZW4ocmlnaHQpXHJcbiAgICAgICAgLnRvKDAuMjUse3dpZHRoOjM0OH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgY2MudHdlZW4odGlwKVxyXG4gICAgICAgIC5kZWxheSgwLjE1KVxyXG4gICAgICAgIC50bygwLjE1LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIHRoaXMuZ3VpZGUgPSB0eXBlO1xyXG4gICAgICAgICAgICBpZih0eXBlID09IDUpIHRoaXMuZ3VpZGUgPSA2O1xyXG4gICAgICAgICAgICBpZih0eXBlID09IDUgfHwgdHlwZSA9PSAxICkgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYoc2hvd05leHQgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX25leHRcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fanVtcFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9uZXh0XCIpKVxyXG4gICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9qdW1wXCIpKVxyXG4gICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aXAubmFtZSA9PSBcInRpcDZcIil7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpKVxyXG4gICAgICAgICAgICAuZGVsYXkoMSlcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+makOiXj1xyXG4gICAgdGlwSGlkZSh0aXBOYW1lLG51bSxyZXZpdmUpe1xyXG4gICAgICAgIGxldCB0aXAgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZSh0aXBOYW1lKTtcclxuICAgICAgICBsZXQgbGVmdCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwibGVmdFwiKTtcclxuICAgICAgICBsZXQgcmlnaHQgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInJpZ2h0XCIpO1xyXG4gICAgICAgIGNjLnR3ZWVuKGxlZnQpXHJcbiAgICAgICAgLmRlbGF5KDAuMSlcclxuICAgICAgICAudG8oMC4yNSx7d2lkdGg6MH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgY2MudHdlZW4ocmlnaHQpXHJcbiAgICAgICAgLmRlbGF5KDAuMSlcclxuICAgICAgICAudG8oMC4yNSx7d2lkdGg6MH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgY2MudHdlZW4odGlwKVxyXG4gICAgICAgIC50bygwLjEyLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5kZWxheSgxLjUpXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGlmKHRpcC5uYW1lICE9IFwidGlwM1wiICYmIHRpcE5hbWUgIT0gXCJ0aXA1XCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVtICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEd1aWRlKG51bSxyZXZpdmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhcmV0ZUd1aWRlQmxvY2sodHlwZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLkuqfnlJ/mlrnlnZfml7bplb/luqY6XCIsdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW4ubGVuZ3RoKTtcclxuICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbi5sZW5ndGggPiAyKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXAyXCIpO1xyXG4gICAgICAgIGlmKHR5cGUgPT0gNSl7XHJcbiAgICAgICAgICAgIHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwNFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYlsxM10pO1xyXG4gICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCA9IHRoaXMuUGxheWVyLnk7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWluO1xyXG4gICAgICAgIGlmKHR5cGUgPiA0KXtcclxuICAgICAgICAgICAgaGVpZ2h0ICs9IGJsb2NrLmhlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWF4O1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5oZWlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBibG9jay5zZXRQb3NpdGlvbihjYy52Mih0aGlzLnJvdW5kJTI9PTA/NDgwOi00ODAsaGVpZ2h0KSk7XHJcbiAgICAgICAgYmxvY2sucGFyZW50ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIik7XHJcbiAgICAgICAgbGV0IG51bSA9IDE1MDtcclxuICAgICAgICBsZXQgdGltZSA9MztcclxuICAgICAgICBpZih0eXBlID09IDEgfHwgdHlwZSA9PSA1KXtcclxuICAgICAgICAgICAgbnVtID0gdGhpcy5yb3VuZCUyPT0wP251bTotbnVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gMyB8fCB0eXBlID09IDQgfHwgdHlwZSA9PTcgfHwgdHlwZSA9PSA4IHx8IHR5cGUgPT0gOSl7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgbnVtID0gLWJsb2NrLng7XHJcbiAgICAgICAgICAgIHRpbWUgPSA3O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYy50d2VlbihibG9jaykgICAgIFxyXG4gICAgICAgIC50byh0aW1lLHt4Om51bX0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGlmKHR5cGUgPT0gMSB8fCB0eXBlID09IDUpe1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSA9PSAxKSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwU2hvdyh0aXAsdHlwZSxmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93R3JvdW5kKHRlbXBZKXtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5Hcm91bmQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5Hcm91bmQueSA9IHRlbXBZO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgICBndWlkZVN0YXJ0KCl7XHJcbiAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwNlwiLG51bGwsZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX25leHRcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fanVtcFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9zdGFydFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcclxuICAgICAgICBcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICB9XHJcbiAgICAvL+S4i+S4gOatpVxyXG4gICAgZ3VpZGVOZXh0KCl7XHJcbiAgICAgICAgaWYodGhpcy5ndWlkZSA9PSAtMSl7XHJcbiAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcFwiLDAsZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9uZXh0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9qdW1wXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9zdGFydFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+i3s+i/h1xyXG4gICAgZ3VpZGVKdW1wKCl7XHJcbiAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fbmV4dFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9qdW1wXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm9uRGVzdHJveSgpO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBqdW1wKCl7XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEdhbWUoKXtcclxuICAgICAgICB0aGlzLmNyZWF0ZUJsb2NrKCk7XHJcbiAgICAgICAgLy8gdGhpcy5jcmVhdGVBaXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTY29yZShzY29yZSl7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuZ2V0U2NvcmUgPSBwYXJzZUludChzY29yZSk7XHJcbiAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnNjb3JlICs9IHBhcnNlSW50KHNjb3JlKTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS50b3RhbFNjb3JlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLnNjb3JlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJuYW5kdVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyAgPSBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmUgKyBcIlwiO1xyXG4gICAgICAgIHZhciBzY2FsZSA9IEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zY29yZS9HYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zY29yZU1heDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwicHJvZ3Jlc3NcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkpXHJcbiAgICAgICAgLnRvKDAuNSx7ZmlsbFJhbmdlOnNjYWxlfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgaWYoc2NhbGUgPj0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uc3RhcjEgJiYgIXRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMVwiKS5hY3RpdmUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoc2NhbGUgPj0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uc3RhcjIgJiYgIXRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMlwiKS5hY3RpdmUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoc2NhbGUgPj0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uc3RhcjMgJiYgIXRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2Uuc2NvcmVNYXggPSAxNTAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUJsb2NrKCl7XHJcbiAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlICYmIHRoaXMuYmVnaW4gPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuR3JvdW5kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBudW0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTIpO1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvdW5kIDw9IDEwICYmIG51bSA9PSA1KXtcclxuICAgICAgICAgICAgICAgIG51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo2ICsgNik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBibG9jayA9IGNjLmluc3RhbnRpYXRlKHRoaXMuYmxvY2tQcmVmYWJbbnVtXSk7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuYmFzaWNIZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01pbjtcclxuICAgICAgICAgICAgaWYobnVtID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tTY2FsZSl7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYmxvY2suaGVpZ2h0ICsgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tNYXg7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5oZWlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYoaGVpZ2h0ID49IDAgJiYgdGhpcy5jYW1lcmFNb3ZlID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRIZWlnaHQgPSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuYmFzaWNIZWlnaHQgLSB0aGlzLkNhbWVyYS5ub2RlLnk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYU1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJsb2NrLnNldFBvc2l0aW9uKGNjLnYyKHRoaXMucm91bmQlMj09MD80ODA6LTQ4MCxoZWlnaHQpKTtcclxuICAgICAgICAgICAgYmxvY2sucGFyZW50ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgIGJsb2NrLnpJbmRleCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrO1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMubGV2ZWwgKz0gMTtcclxuICAgICAgICAgICAgaWYodGhpcy5yb3VuZCA+IEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4KSBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5sZXZlbE1heCA9IHRoaXMucm91bmQ7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmxldmVsID0gdGhpcy5yb3VuZDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEucm91bmQgPSB0aGlzLmxldmVsO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5sYXllciArPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5sYXllckFkZDtcclxuICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uc3BlZWQ8MilHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zcGVlZCArPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5hZGRTcGVlZDtcclxuXHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkIDw9IDEwMClcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdTtcclxuICAgICAgICAgICAgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDEpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDIpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDE7XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDMpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC8v5Lqn55Sf56m65rCUXHJcbiAgICAgICAgY3JlYXRlQWlyKCl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPDEwMDtpKyspe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Hcm91bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEyKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPD0gMTAgJiYgbnVtID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIG51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo2ICsgNik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmJsb2NrUHJlZmFiW251bV0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWluO1xyXG4gICAgICAgICAgICAgICAgaWYobnVtID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tTY2FsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICs9IGJsb2NrLmhlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWF4O1xyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmhlaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgYmxvY2sucGFyZW50ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgICAgICBibG9jay56SW5kZXggPSAxMDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsICs9IDE7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnJvdW5kID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXgpIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ID0gdGhpcy5yb3VuZDtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmxldmVsID0gdGhpcy5yb3VuZDtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnJvdW5kID0gdGhpcy5sZXZlbDtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyQWRkO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uc3BlZWQgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uYWRkU3BlZWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yZWR1Y2VTcGVlZCA8PSA4MClcclxuICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yZWR1Y2VTcGVlZCArPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5qaWFuc3U7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMSkgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDIpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDE7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRoaXMucm91bmQgPT0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucm91bmQzKSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5qaWFuc3UgPSAwLjU7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGNsZWFyQWlyKCl7XHJcbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgLy/omZrlgYfnoo7oo4LlnZdcclxuICAgIGNyZWF0ZUNyYWNrQmxvY2soKXtcclxuICAgICAgICB0aGlzLmludGVyZmVyZSA9IHRydWU7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuZmFrZSA9IHRoaXMuaW50ZXJmZXJlO1xyXG4gICAgICAgIGlmKHRoaXMucm91bmQgPiAxKSB0aGlzLmRlc3Ryb3lCbG9jayh0cnVlKTtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5iZWdpbiA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYlsxMl0pO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmJhc2ljSGVpZ2h0O1xyXG4gICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5oZWlnaHQgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYmxvY2suaGVpZ2h0LzI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpO1xyXG4gICAgICAgICAgICBibG9jay56SW5kZXggPSAxO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGRlc3Ryb3lCbG9jayh0eXBlKXtcclxuICAgICAgICBpZih0eXBlID09IHRydWUpe1xyXG4gICAgICAgICAgICBpZih0aGlzLm5vZGUpe1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikuY2hpbGRyZW5Db3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZUZyb21QYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7ICAvLyDplIDmr4HoioLngrnotYTmupBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikuY2hpbGRyZW4pe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB2YXIgYmxvY2syID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQ3JhY2tCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZm9yKGxldCBpPTA7IGk8YmxvY2syLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGlmKGJsb2NrMltpXSl7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgYmxvY2syW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAvLyB2YXIgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZUZyb21QYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLmRlc3Ryb3koKTsgIC8vIOmUgOavgeiKgueCuei1hOa6kFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGZvcihsZXQgaT0wOyBpPHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgLy8gICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuW2ldKXtcclxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbltpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbi5zcGxpY2UoaSwxKTtcclxuICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB4aW5BY3Rpb24oKXtcclxuICAgICAgICBsZXQgeGluICA9ICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMVwiKTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID09IDIpIHhpbiA9IHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4zXCIpO1xyXG4gICAgICAgIGVsc2UgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA9PSAxKSAgeGluID0gdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjJcIik7XHJcbiAgICAgICAgY2MudHdlZW4oeGluKVxyXG4gICAgICAgIC50bygwLjYse3NjYWxlOjEuNixvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB4aW4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuICAgIC8v5q275LqhXHJcbiAgICBnZXREZWF0aChkYXRhKXtcclxuICAgICAgICBpZihkYXRhID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLlBsYXllcilcclxuICAgICAgICAgICAgLnRvKDEse3k6LTUwMH0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmluaXQoKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5ndWlkZSA+IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZ3VpZGUgPT0gNil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3VpZGUgPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdW5kID0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEd1aWRlKDUsdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUoNix0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdW5kID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUoMyx0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID4gMCl7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlIC09IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldERldml2ZSgxKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldERldml2ZSgzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvL+Wkjea0u1xyXG4gICAgZ2V0RGV2aXZlKHRpbWUpe1xyXG4gICAgICAgIHRoaXMucm91bmQgPSAwO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9pbml0KCk7XHJcbiAgICAgICAgaWYodGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLmFjdGl2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgLy8gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uc2NvcmVNYXggPSAxNTAwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW50ZXJmZXJlID0gZmFsc2U7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuZmFrZSA9IHRoaXMuaW50ZXJmZXJlO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayh0cnVlKTtcclxuICAgICAgICB2YXIgYmxvY2syID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQ3JhY2tCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTxibG9jazIubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZihibG9jazJbaV0pe1xyXG4gICAgICAgICAgICAgICAgYmxvY2syW2ldLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMuYmxvY2tBcnJheSA9IFtdO1xyXG4gICAgICAgIGxldCBhY3Rpb25UaW1lID0gMTtcclxuICAgICAgICBpZih0aGlzLlBsYXllci55ID4gNTAwKXtcclxuICAgICAgICAgICAgYWN0aW9uVGltZSA9ICh0aGlzLlBsYXllci55ICsgNTAwKS8xMDAwKmFjdGlvblRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxheWVyKVxyXG4gICAgICAgIC50byhhY3Rpb25UaW1lLHt5Oi01MDB9LHtlYXNpbmc6J2N1YmljSW4nfSlcclxuICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikueGluQWN0aW9uKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB0aGlzLnhpbkFjdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZih0aW1lID4gMSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlhpbi5wYXJlbnQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuWGluLmdldENvbXBvbmVudChjYy5TcHJpdGUpLmZpbGxSYW5nZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aGlzLlhpbi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAgICAgICAgIC50byh0aW1lLHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgICAgICAgICAuZGVsYXkoMC4zKVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5YaW4ucGFyZW50LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwKVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVCbG9jaygpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAodGltZSswLjUpKjEwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhKHJlc3VsdCl7XHJcbiAgICAgICAgaWYocmVzdWx0ID09IHRydWUgfHwgdGhpcy5jb3VudFRpbWUgPiAwKXtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEudG90YWxTY29yZSA9IEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zY29yZTtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEudGltZXIgPSB0aGlzLmNvdW50VGltZTtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5yb3VuZCA9IHRoaXMubGV2ZWw7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmlzQUZLID0gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uaXNBRks7XHJcbiAgICBcclxuICAgICAgICAgICAgLy9DTElDS19EQVRBIOaVsOaNruWkhOeQhuWujOavleWQjuiwg+eUqOS4iuS8oOaOpeWPoyAg5LiK5Lyg5o6l5Y+j5YaFQ0xJQ0tfREFUQeS4jeWBmuaUueWPmFxyXG4gICAgICAgICAgICBHYW1lVG9vbC5zZXRHYW1lRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPlm1hdGNoSWQgIOeUqOS6juS4iuS8oOavj+asoeeCueWHu+aVsOaNrumHjOmdouiusOW9lWlk5pa55L6/5p+l6K+iXHJcbiAgICBnZXRNYXRjaElkICgpe1xyXG4gICAgICAgIGxldCBtYXRjaElkID0gY2Muc3lzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibWF0Y2hJZFwiKTtcclxuICAgICAgICBpZihtYXRjaElkID09IFwidW5kaWZlbmRcIiB8fCBtYXRjaElkPT1udWxsKXtcclxuICAgICAgICAgICAgbWF0Y2hJZCA9ICB0aGlzLnNldE1hdGNoSWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy5jb250YWluc05hbmFuYShtYXRjaElkKSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIG1hdGNoSWQgPSAgdGhpcy5zZXRNYXRjaElkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGxldCBjaGFyID0gcGFyc2VJbnQobWF0Y2hJZFsxMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5sZXZlbCA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtYXRjaElkICA9IG1hdGNoSWQuc2xpY2UoMCwgMTApICsgY2hhciArIFwiXCI7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tYXRjaElkID0gbWF0Y2hJZDtcclxuICAgICAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoSWRcIixtYXRjaElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0Y2hJZDtcclxuICAgIH1cclxuICAgIC8v5qOA5rWLbWF0Y2hJZCDlpoLmnpzmnInnvJPlrZjku6XliY3nmoRuYW5hbmHmlbDmja7muIXpmaRcclxuICAgIGNvbnRhaW5zTmFuYW5hKHN0cikge1xyXG4gICAgICAgIHJldHVybiAvbmEvaS50ZXN0KHN0cik7XHJcbiAgICB9XHJcbiAgICAvL+mHjeaWsOiuvue9rk1hdGNoSWRcclxuICAgIHNldE1hdGNoSWQgKCl7XHJcbiAgICAgICAgLy8g5a6a5LmJ5YyF5ZCr5Y+v55So5a2X56ym55qE5a2X56ym6ZuGXHJcbiAgICAgICAgY29uc3QgY2hhcmFjdGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSc7XHJcbiAgICAgICAgLy8g5Yib5bu65LiA5Liq5pWw57uE5Lul5L+d5a2Y6ZqP5py65a2X56ymXHJcbiAgICAgICAgY29uc3QgdXVpZEFycmF5ID0gW107XHJcbiAgICAgICAgLy8g5b6q546vMTDmrKEg55Sf5oiQMTDkvY3nmoRVVUlEXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyDnlJ/miJDpmo/mnLrntKLlvJXvvIzojIPlm7TmmK/lrZfnrKbpm4bnmoTplb/luqZcclxuICAgICAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIOS7juWtl+espumbhuS4reiOt+WPlumaj+acuuWtl+esplxyXG4gICAgICAgICAgICBjb25zdCByYW5kb21DaGFyID0gY2hhcmFjdGVycy5jaGFyQXQocmFuZG9tSW5kZXgpO1xyXG4gICAgICAgICAgICAvLyDlsIblrZfnrKbmt7vliqDliLDmlbDnu4TkuK1cclxuICAgICAgICAgICAgdXVpZEFycmF5LnB1c2gocmFuZG9tQ2hhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhID0gIHV1aWRBcnJheS5qb2luKCcnKSArIDEgKyBcIlwiO1xyXG4gICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoTnVtYmVyXCIsMSk7XHJcbiAgICAgICAgY2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibWF0Y2hJZFwiLGRhdGEpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1hdGNoSWQgPSBkYXRhO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNvdW50RG93blRpbWUgKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdW50VGltZSA+IDAgJiYgIUdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50VGltZSAtPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUuc3RyaW5nID0gdGhpcy5nZXRUaW1lTWFyZ2luKHRoaXMuY291bnRUaW1lKTtcclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPCA1KXtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZS5ub2RlKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMjUse3NjYWxlOjEuNSxjb2xvcjpjYy5jb2xvcigyNTUsMCwwKX0pXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yNSx7c2NhbGU6MSxjb2xvcjpjYy5jb2xvcigyNTUsMjU1LDI1NSl9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmNvdW50VGltZSA8PSAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5zY2hlZHVsZSh0aGlzLnVwZGF0ZUNvdW50RG93blRpbWUpO1xyXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJzZXREYXRhXCIsdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJlZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVyU3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5rKCk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJPcGVuKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5YGc5q2i5omA5pyJ5Yqo55S7XHJcbiAgICBvdmVyU3RvcCgpe1xyXG4gICAgICAgIGlmKHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wQWN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKGxldCBpPTA7IGk8YmxvY2subGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZihibG9ja1tpXSl7XHJcbiAgICAgICAgICAgICAgICBpZihibG9ja1tpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS50d2VlbilcclxuICAgICAgICAgICAgICAgICAgICBibG9ja1tpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS50d2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGJsb2NrMiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKGxldCBpPTA7IGk8YmxvY2syLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgaWYoYmxvY2syW2ldKXtcclxuICAgICAgICAgICAgICAgIGlmKGJsb2NrMltpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS50d2VlbilcclxuICAgICAgICAgICAgICAgICAgICBibG9jazJbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikudHdlZW4uc3RvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFJhbmsoKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5zY29yZSA9IHRoaXMuc2NvcmU7XHJcbiAgICAgICAgR2FtZVRvb2wuc2V0UmFuaygpO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJPcGVuKCl7XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMuR2FtZU92ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwic2NvcmVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSB0aGlzLnNjb3JlICsgXCJcIjtcclxuICAgICAgICB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwibGV2ZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5sZXZlbE1heCArIFwiXCI7XHJcbiAgICAgICAgLy8gdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcImRpZmZpY3VsdHlcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcclxuICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5kaWZmaWN1bHR5TWF4ICsgXCJcIjtcclxuXHJcbiAgICAgICAgbGV0IGRpZmZpY3VsdHkgPSBwYXJzZUludCh0aGlzLmRpZmZpY3VsdHlBcnJheS90aGlzLmxldmVsKjEwK1wiXCIpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwi6Zq+5bqm5oC75pWwXCIsdGhpcy5kaWZmaWN1bHR5QXJyYXksXCLmrKHmlbBcIix0aGlzLmxldmVsLFwi5pyA57uIXCIsZGlmZmljdWx0eSk7XHJcbiAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcImRpZmZpY3VsdHlcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcclxuICAgICAgICBkaWZmaWN1bHR5LzEwICsgXCJcIjtcclxuXHJcbiAgICAgICAgdmFyIHVybE5vdyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgIGlmKHRoaXMuY29udGFpbnNUcmFpbih1cmxOb3cpKXtcclxuICAgICAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcInllc1wiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcIm5vXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwiZmluaXNoaVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBHYW1lVG9vbC5zZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcInllc1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwibm9cIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcImZpbmlzaGlcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnRhaW5zVHJhaW4oc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIC9mcm9tPXRyYWluL2kudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGp1bXBGaW5pc2hpKCl7XHJcbiAgICAgICAgbGV0IHVybCA9IFwiaHR0cHM6Ly90cmFpbi5zcGFya3VzLmNuL3Bvc3Rlci9nYW1lL3RyYWluaW5nL1wiICsgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uc2NvZGUgKyBcIj9zdWM9MVwiO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGJhY2tMb2FkKCl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMub25EZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTG9hZFNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFnYWluKCl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMub25EZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5SYW5rKCl7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiUmFua1NjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5pe26Ze05qC85byP6L2s5o2iXHJcbiAgICBnZXRUaW1lTWFyZ2luKHNlY29uZDpudW1iZXIpIHtcclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIHRvdGFsID0gc2Vjb25kO1xyXG4gICAgICAgIGxldCBob3VyID0gMDtcclxuICAgICAgICBob3VyID0gcGFyc2VJbnQoKHRvdGFsIC8gMzYwMCkgKyBcIlwiKTsvL+iuoeeul+aVtOaVsOWwj+aXtuaVsFxyXG4gICAgICAgIGxldCBhZnRlckhvdXIgPSB0b3RhbCAtIGhvdXIgKiA2MCAqIDYwOy8v5Y+W5b6X566X5Ye65bCP5pe25pWw5ZCO5Ymp5L2Z55qE56eS5pWwXHJcbiAgICAgICAgbGV0IG1pbiA9IHBhcnNlSW50KChhZnRlckhvdXIgLyA2MCkrXCJcIik7Ly/orqHnrpfmlbTmlbDliIZcclxuICAgICAgICBsZXQgbSA9IFwiXCIgKyBtaW47ICBcclxuICAgICAgICBpZihtaW4gPCAxMCkgbSA9IFwiMFwiK21pbjtcclxuICAgICAgICBsZXQgYWZ0ZXJNaW4gPSB0b3RhbCAtIGhvdXIgKiA2MCAqIDYwIC0gbWluICogNjA7Ly/lj5blvpfnrpflh7rliIblkI7liankvZnnmoTnp5LmlbBcclxuICAgICAgICBsZXQgbWlhbyA9IGFmdGVyTWluICsgXCJcIjtcclxuICAgICAgICBpZihhZnRlck1pbiA8IDEwKSBtaWFvID0gXCIwXCIgKyBhZnRlck1pbjtcclxuICAgICAgICByZXR1cm4gbSArICc6JyArIG1pYW9cclxuICAgIH1cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgICAgICB2YXIgZnJhbWUgPSBjYy5nYW1lLmdldEZyYW1lUmF0ZSgpO1xyXG4gICAgICAgIGlmKGZyYW1lID4gMTEwKSBjYy5nYW1lLnNldEZyYW1lUmF0ZSgxMjApO1xyXG4gICAgICAgIGVsc2UgaWYoZnJhbWUgPiA4MCkgY2MuZ2FtZS5zZXRGcmFtZVJhdGUoOTApO1xyXG4gICAgICAgIGVsc2UgY2MuZ2FtZS5zZXRGcmFtZVJhdGUoNjApO1xyXG4gICAgICAgIGlmKHRoaXMuY2FtZXJhTW92ZSA9PSB0cnVlICYmIHRoaXMub3ZlciA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgIHRoaXMuQ2FtZXJhLm5vZGUueSA9IHRoaXMuUGxheWVyLnkgLSB0aGlzLmNvdW50SGVpZ2h0O1xyXG4gICAgICAgICAgICBpZih0aGlzLkNhbWVyYS5ub2RlLnkgPD0gMCkgdGhpcy5DYW1lcmEubm9kZS55ID0gMDtcclxuICAgICAgICAgICAgdGhpcy50b3BVSS55ID0gdGhpcy5DYW1lcmEubm9kZS55ICsgdGhpcy5kcm9wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=