123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611 |
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
- var bigItem_1 = require("./view/bigItem");
- var BigItem_1 = require("./view/BigItem");
- /*
- * 游戏初始化配置;
- */
- var GameConfig = /** @class */ (function () {
- function GameConfig() {
- }
- GameConfig.init = function () {
- var reg = Laya.ClassUtils.regClass;
- reg("view/bigItem.ts", bigItem_1.default);
- reg("view/BigItem.ts", BigItem_1.default);
- };
- GameConfig.width = 640;
- GameConfig.height = 1136;
- GameConfig.scaleMode = "fixedwidth";
- GameConfig.screenMode = "none";
- GameConfig.alignV = "top";
- GameConfig.alignH = "left";
- GameConfig.startScene = "test/Big.scene";
- GameConfig.sceneRoot = "";
- GameConfig.debug = false;
- GameConfig.stat = false;
- GameConfig.physicsDebug = false;
- GameConfig.exportSceneToJson = true;
- return GameConfig;
- }());
- exports.default = GameConfig;
- GameConfig.init();
- },{"./view/BigItem":10,"./view/bigItem":13}],2:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var GameConfig_1 = require("./GameConfig");
- var MsgManager_1 = require("./MsgManager");
- var Main = /** @class */ (function () {
- function Main() {
- //设置子域
- Laya.isWXOpenDataContext = true;
- Laya.isWXPosMsg = true;
- //根据IDE设置初始化引擎
- Laya.init(GameConfig_1.default.width, GameConfig_1.default.height, false);
- Laya.stage.scaleMode = GameConfig_1.default.scaleMode;
- Laya.stage.screenMode = GameConfig_1.default.screenMode;
- Laya.stage.alignV = GameConfig_1.default.alignV;
- Laya.stage.alignH = GameConfig_1.default.alignH;
- // 关于透传接口,请参考: https://ldc2.layabox.com/doc/?nav=zh-ts-5-0-7
- MsgManager_1.default.instance.init();
- }
- return Main;
- }());
- //激活启动类
- new Main();
- },{"./GameConfig":1,"./MsgManager":3}],3:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var DomainAction_1 = require("./const/DomainAction");
- var model_1 = require("./model");
- var OpenDataKey_1 = require("./const/OpenDataKey");
- var TTUtil_1 = require("./util/TTUtil");
- var BigRank_1 = require("./view/BigRank");
- var SurpassCanvas_1 = require("./view/SurpassCanvas");
- /*
- * 游戏初始化配置;
- */
- var MsgManager = /** @class */ (function () {
- function MsgManager() {
- }
- Object.defineProperty(MsgManager, "instance", {
- get: function () {
- if (!this._instance)
- this._instance = new MsgManager();
- return this._instance;
- },
- enumerable: true,
- configurable: true
- });
- MsgManager.prototype.init = function () {
- Laya.onMessage = this.onMessage.bind(this);
- };
- MsgManager.prototype.onMessage = function (msg) {
- console.log("onMessage:", msg);
- if (msg.url)
- Laya.loader.load(msg.url);
- if (!msg.action)
- return;
- switch (msg.action) {
- // case DomainAction.OnLoaded://加载资源
- // Laya.loader.load(msg.urls, Laya.Handler.create(this,this.onLoaded));
- // break;
- case DomainAction_1.default.UserInfo: //用户数据
- model_1.default.instance.selfData = msg.data;
- break;
- case DomainAction_1.default.SaveScore: //保存得分
- this.checkAndSaveBestScore(msg.score); //{action,score}
- break;
- case DomainAction_1.default.RankFriend:
- // GameDomainSub.drawType = DrawType.RankView;
- this.view = new BigRank_1.default();
- break;
- // case DomainAction.FetchGroup:
- // if (!msg.data) {
- // return;
- // }
- // GameDomainSub.drawType = DrawType.RankView;
- // this.fetchGroupData(msg.data);
- // break;
- // case DomainAction.Paging://{action,page}
- // GameDomainSub.drawType = DrawType.RankView;
- // this.showPagedRanks(msg.page);
- // break;
- case DomainAction_1.default.Surpass: //{action,page}
- // GameDomainSub.drawType = DrawType.ResultView;
- // ResultCanvas.instance.drawSurpass(msg.score);
- this.view = new SurpassCanvas_1.default(msg.score);
- break;
- case DomainAction_1.default.ClearCanvas:
- this.destroyView();
- // GameDomainSub.drawType = 0;
- // this.ctx.clearRect(0, 0, sharedCanvas.width, sharedCanvas.height);
- break;
- default:
- console.log("\u672A\u77E5\u6D88\u606F\u7C7B\u578B:msg.action=" + msg.action);
- break;
- }
- };
- MsgManager.prototype.destroyView = function () {
- if (this.view) {
- this.view.destroy();
- this.view = null;
- }
- };
- /** 查看并保存最高分 */
- MsgManager.prototype.onLoaded = function () {
- model_1.default.instance.onLoaded = true;
- };
- /** 查看并保存最高分 */
- MsgManager.prototype.checkAndSaveBestScore = function (score) {
- this.getScore(this.saveScore.bind(this, score));
- };
- /** 保存得分 */
- MsgManager.prototype.saveScore = function (score, bestScore) {
- if (bestScore >= score)
- return; //没历史上最高分高
- tt.setUserCloudStorage({
- KVDataList: [{ key: OpenDataKey_1.default.MaxScore, value: String(score) }],
- success: function (res) { console.log("存储得分记录成功:", res); },
- fail: function (res) { console.log("存储得分记录失败:", res); },
- });
- };
- /** 获取得分记录 */
- MsgManager.prototype.getScore = function (callback) {
- tt.getUserCloudStorage({
- keyList: [OpenDataKey_1.default.MaxScore],
- success: function (res) {
- console.log("获取得分记录成功:", res);
- var score = TTUtil_1.default.getKVNum(res.KVDataList, OpenDataKey_1.default.MaxScore);
- callback(score);
- },
- fail: function (res) { console.log("获取得分记录失败:", res); },
- });
- };
- return MsgManager;
- }());
- exports.default = MsgManager;
- },{"./const/DomainAction":4,"./const/OpenDataKey":5,"./model":6,"./util/TTUtil":9,"./view/BigRank":11,"./view/SurpassCanvas":12}],4:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /** 平台类型 */
- var DomainAction = /** @class */ (function () {
- function DomainAction() {
- }
- /** 玩家数据 */
- DomainAction.UserInfo = 1;
- /** 清理sharedCanvas */
- DomainAction.ClearCanvas = 2;
- /** 排行榜-好友榜 */
- DomainAction.RankFriend = 10;
- /** 排行榜-世界榜 */
- DomainAction.RankWorld = 11;
- /** 排行榜-分组榜 */
- DomainAction.RankGroup = 12;
- /** 排行榜-切页 */
- DomainAction.Paging = 15;
- /** 保存分数 */
- DomainAction.SaveScore = 20;
- //---------------------------------------------------------
- /** 登录时检查保存玩家分数 */
- DomainAction.LoginCheck = 103;
- /** 显示即将超越好友 */
- DomainAction.Surpass = 121;
- /** 显示称号 */
- DomainAction.Title = 122;
- /** 显示历史最高分 */
- DomainAction.ShowMaxScore = 123;
- return DomainAction;
- }());
- exports.default = DomainAction;
- },{}],5:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /** 开放数据Key */
- var OpenDataKeys = /** @class */ (function () {
- function OpenDataKeys() {
- }
- /** */
- OpenDataKeys.action = "action";
- /** 最高分 */
- OpenDataKeys.MaxScore = "MaxScore";
- return OpenDataKeys;
- }());
- exports.default = OpenDataKeys;
- },{}],6:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /*
- * 游戏初始化配置;
- */
- var Model = /** @class */ (function () {
- function Model() {
- }
- Object.defineProperty(Model, "instance", {
- get: function () {
- if (!this._instance)
- this._instance = new Model();
- return this._instance;
- },
- enumerable: true,
- configurable: true
- });
- return Model;
- }());
- exports.default = Model;
- },{}],7:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
- var View = Laya.View;
- var Scene = Laya.Scene;
- var REG = Laya.ClassUtils.regClass;
- var ui;
- (function (ui) {
- var SurpassUI = /** @class */ (function (_super) {
- __extends(SurpassUI, _super);
- function SurpassUI() {
- return _super.call(this) || this;
- }
- SurpassUI.prototype.createChildren = function () {
- _super.prototype.createChildren.call(this);
- this.createView(SurpassUI.uiView);
- };
- SurpassUI.uiView = { "type": "Scene", "props": { "width": 329, "height": 134 }, "compId": 2, "child": [{ "type": "Box", "props": { "y": 32, "x": 31, "var": "surpassBox" }, "compId": 15, "child": [{ "type": "Image", "props": { "width": 64, "var": "headImg", "height": 64 }, "compId": 5 }, { "type": "Image", "props": { "y": 57, "skin": "res/imgs/revive/beyondWord.png" }, "compId": 14 }, { "type": "Text", "props": { "y": 4, "x": 69, "width": 144, "var": "nameTxt", "valign": "middle", "text": "名字", "height": 30, "fontSize": 16, "color": "#ffffff", "align": "center", "runtime": "laya.display.Text" }, "compId": 6 }, { "type": "Text", "props": { "y": 34, "x": 69, "width": 144, "var": "scoreTxt", "valign": "middle", "text": "00000", "height": 51, "fontSize": 26, "color": "#FFAF23", "align": "center", "runtime": "laya.display.Text" }, "compId": 12 }] }, { "type": "Text", "props": { "y": 0, "x": 0, "width": 329, "visible": false, "var": "titleTxt", "valign": "middle", "text": "冠军", "height": 134, "fontSize": 74, "color": "#fdfcf9", "bold": true, "align": "center", "runtime": "laya.display.Text" }, "compId": 16 }], "loadList": ["res/imgs/revive/beyondWord.png"], "loadList3D": [] };
- return SurpassUI;
- }(Scene));
- ui.SurpassUI = SurpassUI;
- REG("ui.SurpassUI", SurpassUI);
- })(ui = exports.ui || (exports.ui = {}));
- (function (ui) {
- var test;
- (function (test) {
- var BigUI = /** @class */ (function (_super) {
- __extends(BigUI, _super);
- function BigUI() {
- return _super.call(this) || this;
- }
- BigUI.prototype.createChildren = function () {
- _super.prototype.createChildren.call(this);
- this.createView(BigUI.uiView);
- };
- BigUI.uiView = { "type": "Scene", "props": { "width": 388, "height": 270 }, "compId": 2, "child": [{ "type": "List", "props": { "y": 0, "x": 0, "width": 388, "var": "_list", "vScrollBarSkin": " ", "spaceY": 3, "repeatY": 7, "repeatX": 1, "height": 216, "elasticEnabled": true }, "compId": 3, "child": [{ "type": "bigItem", "props": { "runtime": "view/bigItem.ts", "renderType": "render" }, "compId": 5 }] }, { "type": "Box", "props": { "y": 218, "x": 0, "var": "selfRankBox" }, "compId": 13, "child": [{ "type": "Image", "props": { "y": 0, "x": 0, "width": 385, "var": "itemBg", "skin": "res/imgs/rank/indexBg.png", "sizeGrid": "20,20,20,20", "height": 51 }, "compId": 28 }, { "type": "Image", "props": { "y": 6, "x": 11, "visible": false, "var": "rankIcon", "skin": "res/imgs/rank/paiming1.png" }, "compId": 29 }, { "type": "Image", "props": { "y": 9, "x": 69, "width": 34, "var": "img_head", "height": 34 }, "compId": 30 }, { "type": "Image", "props": { "y": 7, "x": 67, "width": 40, "skin": "res/imgs/rank/txk.png", "height": 40 }, "compId": 31 }, { "type": "Label", "props": { "y": 6, "x": 12, "width": 40, "visible": true, "var": "text_Index", "valign": "middle", "text": "0", "height": 43, "fontSize": 18, "color": "#774709", "align": "center" }, "compId": 32 }, { "type": "Label", "props": { "y": 6, "x": 112, "width": 114, "var": "text_name", "valign": "middle", "text": "名字啊啊啊...", "overflow": "scroll", "height": 42, "fontSize": 18, "font": "Microsoft YaHei", "color": "#774709", "align": "left" }, "compId": 33 }, { "type": "Label", "props": { "y": 5, "x": 278, "width": 93, "var": "text_score", "valign": "middle", "text": "0", "height": 42, "fontSize": 22, "color": "#f9f8f8", "align": "center" }, "compId": 34 }] }], "loadList": ["res/imgs/rank/indexBg.png", "res/imgs/rank/paiming1.png", "res/imgs/rank/txk.png"], "loadList3D": [] };
- return BigUI;
- }(Scene));
- test.BigUI = BigUI;
- REG("ui.test.BigUI", BigUI);
- var BigItemUI = /** @class */ (function (_super) {
- __extends(BigItemUI, _super);
- function BigItemUI() {
- return _super.call(this) || this;
- }
- BigItemUI.prototype.createChildren = function () {
- _super.prototype.createChildren.call(this);
- this.createView(BigItemUI.uiView);
- };
- BigItemUI.uiView = { "type": "View", "props": { "width": 385, "runtime": "view/BigItem.ts", "height": 51 }, "compId": 2, "child": [{ "type": "Image", "props": { "y": 0, "x": 0, "width": 385, "var": "itemBg", "skin": "res/imgs/rank/rankItemBg.png" }, "compId": 20 }, { "type": "Image", "props": { "y": 6, "x": 11, "visible": false, "var": "rankIcon", "skin": "res/imgs/rank/paiming1.png" }, "compId": 7 }, { "type": "Image", "props": { "y": 9, "x": 69, "width": 34, "var": "img_head", "height": 34 }, "compId": 16 }, { "type": "Image", "props": { "y": 7, "x": 67, "width": 40, "skin": "res/imgs/rank/txk.png", "height": 40 }, "compId": 15 }, { "type": "Label", "props": { "y": 6, "x": 12, "width": 40, "visible": true, "var": "text_Index", "valign": "middle", "text": "0", "height": 43, "fontSize": 18, "color": "#5A829F", "align": "center" }, "compId": 19 }, { "type": "Label", "props": { "y": 6, "x": 112, "width": 114, "var": "text_name", "valign": "middle", "text": "名字啊啊啊...", "overflow": "scroll", "height": 42, "fontSize": 18, "font": "Microsoft YaHei", "color": "#6B90AA", "align": "left" }, "compId": 4 }, { "type": "Label", "props": { "y": 7, "x": 262, "width": 123, "var": "text_score", "valign": "middle", "text": "0", "height": 42, "fontSize": 22, "color": "#F4A105", "align": "center" }, "compId": 5 }], "loadList": ["res/imgs/rank/rankItemBg.png", "res/imgs/rank/paiming1.png", "res/imgs/rank/txk.png"], "loadList3D": [] };
- return BigItemUI;
- }(View));
- test.BigItemUI = BigItemUI;
- REG("ui.test.BigItemUI", BigItemUI);
- })(test = ui.test || (ui.test = {}));
- })(ui = exports.ui || (exports.ui = {}));
- },{}],8:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var StringUtil = /** @class */ (function () {
- function StringUtil() {
- }
- /**截取字符串5个字符 */
- StringUtil.formatString = function (str) {
- return str.length > 5 ? str.slice(0, 5) + '...' : str;
- };
- return StringUtil;
- }());
- exports.StringUtil = StringUtil;
- },{}],9:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var TTUtil = /** @class */ (function () {
- function TTUtil() {
- }
- /**
- * 好友列表数据从大到小排序
- * @param gameDatas: { KVDataList, avatarUrl, nickname, openid }[]
- * @param key:string
- */
- TTUtil.dataSorter = function (gameDatas, key) {
- gameDatas.sort(function (a, b) {
- var scoreA = TTUtil.getKVNum(a.KVDataList, key);
- var scoreB = TTUtil.getKVNum(b.KVDataList, key);
- return scoreA > scoreB ? -1 : scoreA < scoreB ? 1 : 0; //从大到小
- });
- };
- /**
- * KV 数据列表中,取key值转成数字,空值为0
- */
- TTUtil.getKVNum = function (kvDataList, key) {
- var kvData = kvDataList.find(function (kvData) { return kvData.key === key; });
- return kvData ? Number(kvData.value || 0) : 0;
- };
- return TTUtil;
- }());
- exports.default = TTUtil;
- },{}],10:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var layaMaxUI_1 = require("../ui/layaMaxUI");
- var TTUtil_1 = require("../util/TTUtil");
- var OpenDataKey_1 = require("../const/OpenDataKey");
- var StringUtil_1 = require("../util/StringUtil");
- var BigItem = /** @class */ (function (_super) {
- __extends(BigItem, _super);
- function BigItem() {
- return _super.call(this) || this;
- }
- Object.defineProperty(BigItem.prototype, "dataSource", {
- set: function (value) {
- if (!value)
- return;
- var maxScore = TTUtil_1.default.getKVNum(value.KVDataList, OpenDataKey_1.default.MaxScore);
- this.img_head.skin = value.avatarUrl;
- this.text_name.text = StringUtil_1.StringUtil.formatString(value.nickname);
- this.text_score.text = maxScore + '';
- if (value.index == 1) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming1.png";
- }
- else if (value.index == 2) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming2.png";
- }
- else if (value.index == 3) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming3.png";
- }
- else {
- this.rankIcon.visible = false;
- }
- this.text_Index.visible = true;
- this.text_Index.text = value.index + '';
- },
- enumerable: true,
- configurable: true
- });
- return BigItem;
- }(layaMaxUI_1.ui.test.BigItemUI));
- exports.default = BigItem;
- },{"../const/OpenDataKey":5,"../ui/layaMaxUI":7,"../util/StringUtil":8,"../util/TTUtil":9}],11:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var layaMaxUI_1 = require("../ui/layaMaxUI");
- var OpenDataKey_1 = require("../const/OpenDataKey");
- var TTUtil_1 = require("../util/TTUtil");
- var StringUtil_1 = require("../util/StringUtil");
- var BigRank = /** @class */ (function (_super) {
- __extends(BigRank, _super);
- function BigRank() {
- var _this = _super.call(this) || this;
- _this.curRankType = 0; //当前排行榜类型 0:好友榜,1:世界榜
- _this.init();
- return _this;
- }
- /**
- * 初始化
- */
- BigRank.prototype.init = function () {
- Laya.stage.addChild(this);
- this.setlist([]);
- this.getFriendData();
- this._list.vScrollBarSkin = null;
- };
- /**
- * 获取好友排行
- */
- BigRank.prototype.getFriendData = function () {
- tt.getFriendCloudStorage({
- keyList: [OpenDataKey_1.default.MaxScore],
- success: this.setData.bind(this),
- fail: function (res) { console.log("获取好友列表失败:", res); }
- });
- };
- BigRank.prototype.setData = function (res) {
- console.log("获取好友列表成功:", res);
- if (res.data) {
- var selfData_1;
- TTUtil_1.default.dataSorter(res.data, OpenDataKey_1.default.MaxScore);
- res.data.forEach(function (data) {
- var index = res.data.indexOf(data);
- if (index != -1)
- data.index = index + 1;
- if (data.isMe)
- selfData_1 = data;
- });
- this.setlist(res.data);
- if (selfData_1) {
- this.selfRankBox.visible = true;
- // this._list.y = 54;
- this._list.height = 216;
- this.setSelfRank(selfData_1);
- }
- else {
- this.selfRankBox.visible = false;
- // this._list.y = 0;
- this._list.height = 269;
- }
- }
- };
- /**
- * 设置list arr
- * @param arr 赋值用的arr
- */
- BigRank.prototype.setlist = function (arr) {
- this._list.array = arr;
- this._list.refresh();
- };
- BigRank.prototype.setSelfRank = function (value) {
- var maxScore = TTUtil_1.default.getKVNum(value.KVDataList, OpenDataKey_1.default.MaxScore);
- this.img_head.skin = value.avatarUrl;
- this.text_name.text = StringUtil_1.StringUtil.formatString(value.nickname);
- this.text_score.text = maxScore + '';
- if (value.index == 1) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming1.png";
- }
- else if (value.index == 2) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming2.png";
- }
- else if (value.index == 3) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming3.png";
- }
- else {
- this.rankIcon.visible = false;
- }
- this.text_Index.visible = true;
- this.text_Index.text = value.index + '';
- };
- return BigRank;
- }(layaMaxUI_1.ui.test.BigUI));
- exports.default = BigRank;
- },{"../const/OpenDataKey":5,"../ui/layaMaxUI":7,"../util/StringUtil":8,"../util/TTUtil":9}],12:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var layaMaxUI_1 = require("../ui/layaMaxUI");
- var TTUtil_1 = require("../util/TTUtil");
- var OpenDataKey_1 = require("../const/OpenDataKey");
- var model_1 = require("../model");
- var StringUtil_1 = require("../util/StringUtil");
- /**结束界面的开放数据 */
- var SurpassCanvas = /** @class */ (function (_super) {
- __extends(SurpassCanvas, _super);
- function SurpassCanvas(score) {
- var _this = _super.call(this) || this;
- _this.selfScore = 0;
- // this.visible = false;
- _this.init(score);
- return _this;
- }
- /**
- * 初始化
- */
- SurpassCanvas.prototype.init = function (score) {
- Laya.stage.addChild(this);
- this.drawSurpass(score);
- };
- SurpassCanvas.prototype.drawSurpass = function (score) {
- if (!model_1.default.instance.selfData)
- return;
- // console.log('绘制超越对手1');
- this.selfScore = score;
- //获取好友数据
- tt.getFriendCloudStorage({
- keyList: [OpenDataKey_1.default.MaxScore],
- success: this.getFriendDatasSucc.bind(this),
- fail: this.failCallback.bind(this)
- });
- };
- /** 获取好友数据成功 */
- SurpassCanvas.prototype.getFriendDatasSucc = function (res) {
- console.log("结束界面开放数据--获取好友数据成功", res);
- var datas = res.data;
- if (res.data && res.data.length > 1)
- TTUtil_1.default.dataSorter(datas, OpenDataKey_1.default.MaxScore);
- var selfMaxScore = 0, kvScore = null, score = null, nick, avatarImg;
- for (var i = datas.length - 1; i >= 0; i--) {
- kvScore = datas[i].KVDataList.find(function (kvData) { return kvData.key === OpenDataKey_1.default.MaxScore; });
- score = kvScore ? parseInt(kvScore.value || 0) : 0;
- if (datas[i].isMe) {
- selfMaxScore = score;
- // console.log('是自己0', datas[i].openid);
- // console.log('是自己1', Model.instance.selfData, Model.instance.selfData.openid);
- if (!model_1.default.instance.selfData.openid)
- model_1.default.instance.selfData.openid = datas[i].openid;
- continue; //是自己就不执行下面判断分数
- }
- // if(score >= this.selfScore && datas[i].openid != Model.instance.selfData.openid)
- // if(score >= this.selfScore && datas[i].nickname != Model.instance.selfData.nickName)
- if (score >= this.selfScore) {
- nick = datas[i].nickname;
- avatarImg = datas[i].avatarUrl;
- break;
- }
- }
- console.log("getFriendDatasSucc1", this.selfScore, selfMaxScore, nick);
- if (nick == null) {
- console.log('getFriendDatasSucc2, nick=null');
- // this.visible = false;
- this.surpassBox.visible = false;
- this.titleTxt.visible = true;
- return;
- }
- this.visible = true;
- this.titleTxt.visible = false;
- this.headImg.skin = avatarImg;
- this.nameTxt.text = StringUtil_1.StringUtil.formatString(nick);
- this.scoreTxt.text = score + '';
- };
- SurpassCanvas.prototype.failCallback = function (res) {
- console.log("结束界面开放数据--获取好友数据失败", res);
- };
- return SurpassCanvas;
- }(layaMaxUI_1.ui.SurpassUI));
- exports.default = SurpassCanvas;
- },{"../const/OpenDataKey":5,"../model":6,"../ui/layaMaxUI":7,"../util/StringUtil":8,"../util/TTUtil":9}],13:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var layaMaxUI_1 = require("../ui/layaMaxUI");
- var TTUtil_1 = require("../util/TTUtil");
- var OpenDataKey_1 = require("../const/OpenDataKey");
- var StringUtil_1 = require("../util/StringUtil");
- var BigItem = /** @class */ (function (_super) {
- __extends(BigItem, _super);
- function BigItem() {
- return _super.call(this) || this;
- }
- Object.defineProperty(BigItem.prototype, "dataSource", {
- set: function (value) {
- if (!value)
- return;
- var maxScore = TTUtil_1.default.getKVNum(value.KVDataList, OpenDataKey_1.default.MaxScore);
- this.img_head.skin = value.avatarUrl;
- this.text_name.text = StringUtil_1.StringUtil.formatString(value.nickname);
- this.text_score.text = maxScore + '';
- if (value.index == 1) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming1.png";
- }
- else if (value.index == 2) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming2.png";
- }
- else if (value.index == 3) {
- this.rankIcon.visible = true;
- this.rankIcon.skin = "res/imgs/rank/paiming3.png";
- }
- else {
- this.rankIcon.visible = false;
- }
- this.text_Index.visible = true;
- this.text_Index.text = value.index + '';
- },
- enumerable: true,
- configurable: true
- });
- return BigItem;
- }(layaMaxUI_1.ui.test.BigItemUI));
- exports.default = BigItem;
- },{"../const/OpenDataKey":5,"../ui/layaMaxUI":7,"../util/StringUtil":8,"../util/TTUtil":9}]},{},[2])
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L0xheWFBaXJJREUvcmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9Nc2dNYW5hZ2VyLnRzIiwic3JjL2NvbnN0L0RvbWFpbkFjdGlvbi50cyIsInNyYy9jb25zdC9PcGVuRGF0YUtleS50cyIsInNyYy9tb2RlbC50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiLCJzcmMvdXRpbC9TdHJpbmdVdGlsLnRzIiwic3JjL3V0aWwvVFRVdGlsLnRzIiwic3JjL3ZpZXcvQmlnSXRlbS50cyIsInNyYy92aWV3L0JpZ1JhbmsudHMiLCJzcmMvdmlldy9TdXJwYXNzQ2FudmFzLnRzIiwic3JjL3ZpZXcvYmlnSXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQSxnR0FBZ0c7QUFDaEcsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQzs7RUFFRTtBQUNGO0lBYUk7SUFBYyxDQUFDO0lBQ1IsZUFBSSxHQUFYO1FBQ0ksSUFBSSxHQUFHLEdBQWEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDN0MsR0FBRyxDQUFDLGlCQUFpQixFQUFDLGlCQUFPLENBQUMsQ0FBQztRQUMvQixHQUFHLENBQUMsaUJBQWlCLEVBQUMsaUJBQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFqQk0sZ0JBQUssR0FBUSxHQUFHLENBQUM7SUFDakIsaUJBQU0sR0FBUSxJQUFJLENBQUM7SUFDbkIsb0JBQVMsR0FBUSxZQUFZLENBQUM7SUFDOUIscUJBQVUsR0FBUSxNQUFNLENBQUM7SUFDekIsaUJBQU0sR0FBUSxLQUFLLENBQUM7SUFDcEIsaUJBQU0sR0FBUSxNQUFNLENBQUM7SUFDckIscUJBQVUsR0FBSyxnQkFBZ0IsQ0FBQztJQUNoQyxvQkFBUyxHQUFR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QUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQywyQkFBMkIsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLDRCQUE0QixFQUFDLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsR0FBRyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMs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QUMsdUJBQXVCLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLEdBQUcsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsaUJBQWlCLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLEdBQUcsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsUUFB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QUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyw0QkFBNEIsQ0FBQzthQUNyRDtpQkFBTSxJQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO2FBQ3JEO2lCQUFNLElBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzVDLENBQUM7OztPQUFBO0lBQ0wsY0FBQztBQUFELENBMUJBLEFBMEJDLENBMUJvQyxjQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0EwQnJEIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgYmlnSXRlbSBmcm9tIFwiLi92aWV3L2JpZ0l0ZW1cIlxuaW1wb3J0IEJpZ0l0ZW0gZnJvbSBcIi4vdmlldy9CaWdJdGVtXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTY0MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTExMzY7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cInRlc3QvQmlnLnNjZW5lXCI7XHJcbiAgICBzdGF0aWMgc2NlbmVSb290OnN0cmluZz1cIlwiO1xyXG4gICAgc3RhdGljIGRlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgc3RhdDpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHBoeXNpY3NEZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIGV4cG9ydFNjZW5lVG9Kc29uOmJvb2xlYW49dHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKCl7fVxyXG4gICAgc3RhdGljIGluaXQoKXtcclxuICAgICAgICB2YXIgcmVnOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcclxuICAgICAgICByZWcoXCJ2aWV3L2JpZ0l0ZW0udHNcIixiaWdJdGVtKTtcbiAgICAgICAgcmVnKFwidmlldy9CaWdJdGVtLnRzXCIsQmlnSXRlbSk7XHJcbiAgICB9XHJcbn1cclxuR2FtZUNvbmZpZy5pbml0KCk7IiwiaW1wb3J0IEdhbWVDb25maWcgZnJvbSBcIi4vR2FtZUNvbmZpZ1wiO1xyXG5pbXBvcnQgQmlnUmFuayBmcm9tIFwiLi92aWV3L0JpZ1JhbmtcIjtcclxuaW1wb3J0IE1zZ01hbmFnZXIgZnJvbSBcIi4vTXNnTWFuYWdlclwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdCAvL+iuvue9ruWtkOWfn1xyXG5cdFx0TGF5YS5pc1dYT3BlbkRhdGFDb250ZXh0ID0gdHJ1ZTtcclxuXHRcdExheWEuaXNXWFBvc01zZyA9IHRydWU7XHJcblx0XHQvL+agueaNrklEReiuvue9ruWIneWni+WMluW8leaTjlx0XHRcclxuXHRcdExheWEuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCxmYWxzZSk7XHJcblx0XHRMYXlhLnN0YWdlLnNjYWxlTW9kZSA9IEdhbWVDb25maWcuc2NhbGVNb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5zY3JlZW5Nb2RlID0gR2FtZUNvbmZpZy5zY3JlZW5Nb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5hbGlnblYgPSBHYW1lQ29uZmlnLmFsaWduVjtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25IID0gR2FtZUNvbmZpZy5hbGlnbkg7XHJcblx0XHQvLyDlhbPkuo7pgI/kvKDmjqXlj6PvvIzor7flj4LogIM6IGh0dHBzOi8vbGRjMi5sYXlhYm94LmNvbS9kb2MvP25hdj16aC10cy01LTAtN1xyXG5cclxuXHRcdE1zZ01hbmFnZXIuaW5zdGFuY2UuaW5pdCgpO1x0XHJcblx0XHRcdFx0XHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBEb21haW5BY3Rpb24gZnJvbSBcIi4vY29uc3QvRG9tYWluQWN0aW9uXCI7XHJcbmltcG9ydCBNb2RlbCBmcm9tIFwiLi9tb2RlbFwiO1xyXG5pbXBvcnQgT3BlbkRhdGFLZXlzIGZyb20gXCIuL2NvbnN0L09wZW5EYXRhS2V5XCI7XHJcbmltcG9ydCBUVFV0aWwgZnJvbSBcIi4vdXRpbC9UVFV0aWxcIjtcclxuaW1wb3J0IEJpZ1JhbmsgZnJvbSBcIi4vdmlldy9CaWdSYW5rXCI7XHJcbmltcG9ydCBTdXJwYXNzQ2FudmFzIGZyb20gXCIuL3ZpZXcvU3VycGFzc0NhbnZhc1wiO1xyXG5cclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1zZ01hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBNc2dNYW5hZ2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UoKTogTXNnTWFuYWdlciB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkgdGhpcy5faW5zdGFuY2UgPSBuZXcgTXNnTWFuYWdlcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcclxuICAgIH1cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcHVibGljIHZpZXc6IExheWEuTm9kZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCk6IHZvaWQge1xyXG4gICAgICAgIExheWEub25NZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTWVzc2FnZShtc2c6IGFueSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwib25NZXNzYWdl77yaXCIsIG1zZyk7XHJcblxyXG4gICAgICAgIGlmIChtc2cudXJsKSBMYXlhLmxvYWRlci5sb2FkKG1zZy51cmwpO1xyXG5cclxuICAgICAgICBpZiAoIW1zZy5hY3Rpb24pIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoIChtc2cuYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vIGNhc2UgRG9tYWluQWN0aW9uLk9uTG9hZGVkOi8v5Yqg6L296LWE5rqQXHJcbiAgICAgICAgICAgIC8vICAgICBMYXlhLmxvYWRlci5sb2FkKG1zZy51cmxzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsdGhpcy5vbkxvYWRlZCkpO1xyXG4gICAgICAgICAgICAvLyAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIERvbWFpbkFjdGlvbi5Vc2VySW5mbzovL+eUqOaIt+aVsOaNrlxyXG4gICAgICAgICAgICAgICAgTW9kZWwuaW5zdGFuY2Uuc2VsZkRhdGEgPSBtc2cuZGF0YTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBEb21haW5BY3Rpb24uU2F2ZVNjb3JlOi8v5L+d5a2Y5b6X5YiGXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2F2ZUJlc3RTY29yZShtc2cuc2NvcmUpOy8ve2FjdGlvbixzY29yZX1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBEb21haW5BY3Rpb24uUmFua0ZyaWVuZDpcclxuICAgICAgICAgICAgICAgIC8vIEdhbWVEb21haW5TdWIuZHJhd1R5cGUgPSBEcmF3VHlwZS5SYW5rVmlldztcclxuICAgICAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBCaWdSYW5rKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIC8vIGNhc2UgRG9tYWluQWN0aW9uLkZldGNoR3JvdXA6XHJcbiAgICAgICAgICAgIC8vICAgICBpZiAoIW1zZy5kYXRhKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgR2FtZURvbWFpblN1Yi5kcmF3VHlwZSA9IERyYXdUeXBlLlJhbmtWaWV3O1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5mZXRjaEdyb3VwRGF0YShtc2cuZGF0YSk7XHJcbiAgICAgICAgICAgIC8vICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIC8vIGNhc2UgRG9tYWluQWN0aW9uLlBhZ2luZzovL3thY3Rpb24scGFnZX1cclxuICAgICAgICAgICAgLy8gICAgIEdhbWVEb21haW5TdWIuZHJhd1R5cGUgPSBEcmF3VHlwZS5SYW5rVmlldztcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2hvd1BhZ2VkUmFua3MobXNnLnBhZ2UpO1xyXG4gICAgICAgICAgICAvLyAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIERvbWFpbkFjdGlvbi5TdXJwYXNzOi8ve2FjdGlvbixwYWdlfVxyXG4gICAgICAgICAgICAvLyAgICAgR2FtZURvbWFpblN1Yi5kcmF3VHlwZSA9IERyYXdUeXBlLlJlc3VsdFZpZXc7XHJcbiAgICAgICAgICAgIC8vICAgICBSZXN1bHRDYW52YXMuaW5zdGFuY2UuZHJhd1N1cnBhc3MobXNnLnNjb3JlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTdXJwYXNzQ2FudmFzKG1zZy5zY29yZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBEb21haW5BY3Rpb24uQ2xlYXJDYW52YXM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lWaWV3KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBHYW1lRG9tYWluU3ViLmRyYXdUeXBlID0gMDtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCBzaGFyZWRDYW52YXMud2lkdGgsIHNoYXJlZENhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOacquefpea2iOaBr+exu+Weizptc2cuYWN0aW9uPSR7bXNnLmFjdGlvbn1gKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlc3Ryb3lWaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3LmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIOafpeeci+W5tuS/neWtmOacgOmrmOWIhiAqL1xyXG4gICAgcHJpdmF0ZSBvbkxvYWRlZCgpIHtcclxuICAgICAgICBNb2RlbC5pbnN0YW5jZS5vbkxvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKiog5p+l55yL5bm25L+d5a2Y5pyA6auY5YiGICovXHJcbiAgICBwcml2YXRlIGNoZWNrQW5kU2F2ZUJlc3RTY29yZShzY29yZTogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0U2NvcmUodGhpcy5zYXZlU2NvcmUuYmluZCh0aGlzLCBzY29yZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiDkv53lrZjlvpfliIYgKi9cclxuICAgIHByaXZhdGUgc2F2ZVNjb3JlKHNjb3JlOiBudW1iZXIsIGJlc3RTY29yZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGJlc3RTY29yZSA+PSBzY29yZSkgcmV0dXJuOy8v5rKh5Y6G5Y+y5LiK5pyA6auY5YiG6auYXHJcblxyXG4gICAgICAgIHR0LnNldFVzZXJDbG91ZFN0b3JhZ2Uoe1xyXG4gICAgICAgICAgICBLVkRhdGFMaXN0OiBbeyBrZXk6IE9wZW5EYXRhS2V5cy5NYXhTY29yZSwgdmFsdWU6IFN0cmluZyhzY29yZSkgfV0sXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChyZXMpID0+IHsgY29uc29sZS5sb2coXCLlrZjlgqjlvpfliIborrDlvZXmiJDlip86XCIsIHJlcykgfSxcclxuICAgICAgICAgICAgZmFpbDogKHJlcykgPT4geyBjb25zb2xlLmxvZyhcIuWtmOWCqOW+l+WIhuiusOW9leWksei0pTpcIiwgcmVzKSB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiDojrflj5blvpfliIborrDlvZUgKi9cclxuICAgIHB1YmxpYyBnZXRTY29yZShjYWxsYmFjazogRnVuY3Rpb24pIHtcclxuICAgICAgICB0dC5nZXRVc2VyQ2xvdWRTdG9yYWdlKHtcclxuICAgICAgICAgICAga2V5TGlzdDogW09wZW5EYXRhS2V5cy5NYXhTY29yZV0sXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6I635Y+W5b6X5YiG6K6w5b2V5oiQ5YqfOlwiLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gVFRVdGlsLmdldEtWTnVtKHJlcy5LVkRhdGFMaXN0LCBPcGVuRGF0YUtleXMuTWF4U2NvcmUpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soc2NvcmUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmYWlsOiAocmVzKSA9PiB7IGNvbnNvbGUubG9nKFwi6I635Y+W5b6X5YiG6K6w5b2V5aSx6LSlOlwiLCByZXMpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLyoqXHJcbiAgICAvLyAgKiDkuIrmiqXoh6rlt7HnmoTmlbDmja5cclxuICAgIC8vICAqIEBwYXJhbSBkYXRhIOS4iuaKpeaVsOaNrlxyXG4gICAgLy8gICovXHJcbiAgICAvLyBwcml2YXRlIHNldFNlbGZEYXRhKGRhdGE6U3RyaW5nKTp2b2lke1xyXG4gICAgLy8gICAgIHZhciBrdkRhdGFMaXN0ID0gW107XHJcbiAgICAvLyAgICAgdmFyIG9iajphbnkgPSB7fTtcclxuICAgIC8vICAgICBvYmoud3hnYW1lID17fTtcclxuICAgIC8vICAgICBvYmoud3hnYW1lLnZhbHVlMSA9IGRhdGE7XHJcbiAgICAvLyAgICAgb2JqLnd4Z2FtZS51cGRhdGVfdGltZSA9IExheWEuQnJvd3Nlci5ub3coKTtcclxuICAgIC8vICAgICBrdkRhdGFMaXN0LnB1c2goe1wia2V5XCI6dGhpcy5fa2V5LFwidmFsdWVcIjpKU09OLnN0cmluZ2lmeShvYmopfSk7XHJcbiAgICAvLyAgICAgd3guc2V0VXNlckNsb3VkU3RvcmFnZSh7XHJcbiAgICAvLyAgICAgICAgIEtWRGF0YUxpc3Q6a3ZEYXRhTGlzdCxcclxuICAgIC8vICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihlKTp2b2lke1xyXG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tc3VjY2VzczonICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xyXG4gICAgLy8gICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICBmYWlsOmZ1bmN0aW9uKGUpOnZvaWR7XHJcbiAgICAvLyAgICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS1mYWlsOicgKyBKU09OLnN0cmluZ2lmeShlKSk7XHJcbiAgICAvLyAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICAgIGNvbXBsZXRlOmZ1bmN0aW9uKGUpOnZvaWR7XHJcbiAgICAvLyAgICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS1jb21wbGV0ZTonICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcbn0iLCIvKiog5bmz5Y+w57G75Z6LICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkFjdGlvbntcclxuICAgIC8qKiDnjqnlrrbmlbDmja4gKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgVXNlckluZm86bnVtYmVyID0gMTtcclxuXHJcbiAgICAvKiog5riF55CGc2hhcmVkQ2FudmFzICovXHJcbiAgICBwdWJsaWMgc3RhdGljIENsZWFyQ2FudmFzOm51bWJlciA9IDI7XHJcblxyXG4gICAgLyoqIOaOkuihjOamnC3lpb3lj4vmppwgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgUmFua0ZyaWVuZDpudW1iZXIgPSAxMDtcclxuICAgIC8qKiDmjpLooYzmppwt5LiW55WM5qacICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFJhbmtXb3JsZDpudW1iZXIgPSAxMTtcclxuICAgIC8qKiDmjpLooYzmppwt5YiG57uE5qacICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFJhbmtHcm91cDpudW1iZXIgPSAxMjtcclxuICAgIC8qKiDmjpLooYzmppwt5YiH6aG1ICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFBhZ2luZzpudW1iZXIgPSAxNTtcclxuICAgIFxyXG5cclxuICAgIC8qKiDkv53lrZjliIbmlbAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgU2F2ZVNjb3JlOm51bWJlciA9IDIwO1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvKiog55m75b2V5pe25qOA5p+l5L+d5a2Y546p5a625YiG5pWwICovXHJcbiAgICBwdWJsaWMgc3RhdGljIExvZ2luQ2hlY2s6bnVtYmVyID0gMTAzO1xyXG4gICAgLyoqIOaYvuekuuWNs+Wwhui2hei2iuWlveWPiyAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBTdXJwYXNzOm51bWJlciA9IDEyMTtcclxuICAgIC8qKiDmmL7npLrnp7Dlj7cgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgVGl0bGU6bnVtYmVyID0gMTIyO1xyXG4gICAgLyoqIOaYvuekuuWOhuWPsuacgOmrmOWIhiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBTaG93TWF4U2NvcmU6bnVtYmVyID0gMTIzO1xyXG59IiwiLyoqIOW8gOaUvuaVsOaNrktleSAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcGVuRGF0YUtleXN7XHJcbiAgICAvKiogICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGFjdGlvbjpzdHJpbmcgPSBcImFjdGlvblwiO1xyXG4gICAgLyoqIOacgOmrmOWIhiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBNYXhTY29yZTpzdHJpbmcgPSBcIk1heFNjb3JlXCI7XHJcbn0iLCIvKlxyXG4qIOa4uOaIj+WIneWni+WMlumFjee9rjtcclxuKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kZWx7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6TW9kZWw7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpOk1vZGVsXHJcbiAgICB7XHJcbiAgICAgICAgaWYoIXRoaXMuX2luc3RhbmNlKSB0aGlzLl9pbnN0YW5jZSA9IG5ldyBNb2RlbCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcclxuICAgIH1cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgLyoqIOi1hOa6kOaYr+WQpuW3suWKoOi9veWujOaIkCAqL1xyXG4gICAgcHVibGljIG9uTG9hZGVkOmFueTtcclxuXHJcbiAgICBwdWJsaWMgc2VsZkRhdGE6YW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbn0iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIFN1cnBhc3NVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBzdXJwYXNzQm94OkxheWEuQm94O1xuXHRcdHB1YmxpYyBoZWFkSW1nOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIG5hbWVUeHQ6bGF5YS5kaXNwbGF5LlRleHQ7XG5cdFx0cHVibGljIHNjb3JlVHh0OmxheWEuZGlzcGxheS5UZXh0O1xuXHRcdHB1YmxpYyB0aXRsZVR4dDpsYXlhLmRpc3BsYXkuVGV4dDtcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiU2NlbmVcIixcInByb3BzXCI6e1wid2lkdGhcIjozMjksXCJoZWlnaHRcIjoxMzR9LFwiY29tcElkXCI6MixcImNoaWxkXCI6W3tcInR5cGVcIjpcIkJveFwiLFwicHJvcHNcIjp7XCJ5XCI6MzIsXCJ4XCI6MzEsXCJ2YXJcIjpcInN1cnBhc3NCb3hcIn0sXCJjb21wSWRcIjoxNSxcImNoaWxkXCI6W3tcInR5cGVcIjpcIkltYWdlXCIsXCJwcm9wc1wiOntcIndpZHRoXCI6NjQsXCJ2YXJcIjpcImhlYWRJbWdcIixcImhlaWdodFwiOjY0fSxcImNvbXBJZFwiOjV9LHtcInR5cGVcIjpcIkltYWdlXCIsXCJwcm9wc1wiOntcInlcIjo1NyxcInNraW5cIjpcInJlcy9pbWdzL3Jldml2ZS9iZXlvbmRXb3JkLnBuZ1wifSxcImNvbXBJZFwiOjE0fSx7XCJ0eXBlXCI6XCJUZXh0XCIsXCJwcm9wc1wiOntcInlcIjo0LFwieFwiOjY5LFwid2lkdGhcIjoxNDQsXCJ2YXJcIjpcIm5hbWVUeHRcIixcInZhbGlnblwiOlwibWlkZGxlXCIsXCJ0ZXh0XCI6XCLlkI3lrZdcIixcImhlaWdodFwiOjMwLFwiZm9udFNpemVcIjoxNixcImNvbG9yXCI6XCIjZmZmZmZmXCIsXCJhbGlnblwiOlwiY2VudGVyXCIsXCJydW50aW1lXCI6XCJsYXlhLmRpc3BsYXkuVGV4dFwifSxcImNvbXBJZFwiOjZ9LHtcInR5cGVcIjpcIlRleHRcIixcInByb3BzXCI6e1wieVwiOjM0LFwieFwiOjY5LFwid2lkdGhcIjoxNDQsXCJ2YXJcIjpcInNjb3JlVHh0XCIsXCJ2YWxpZ25cIjpcIm1pZGRsZVwiLFwidGV4dFwiOlwiMDAwMDBcIixcImhlaWdodFwiOjUxLFwiZm9udFNpemVcIjoyNixcImNvbG9yXCI6XCIjRkZBRjIzXCIsXCJhbGlnblwiOlwiY2VudGVyXCIsXCJydW50aW1lXCI6XCJsYXlhLmRpc3BsYXkuVGV4dFwifSxcImNvbXBJZFwiOjEyfV19LHtcInR5cGVcIjpcIlRleHRcIixcInByb3BzXCI6e1wieVwiOjAsXCJ4XCI6MCxcIndpZHRoXCI6MzI5LFwidmlzaWJsZVwiOmZhbHNlLFwidmFyXCI6XCJ0aXRsZVR4dFwiLFwidmFsaWduXCI6XCJtaWRkbGVcIixcInRleHRcIjpcIuWGoOWGm1wiLFwiaGVpZ2h0XCI6MTM0LFwiZm9udFNpemVcIjo3NCxcImNvbG9yXCI6XCIjZmRmY2Y5XCIsXCJib2xkXCI6dHJ1ZSxcImFsaWduXCI6XCJjZW50ZXJcIixcInJ1bnRpbWVcIjpcImxheWEuZGlzcGxheS5UZXh0XCJ9LFwiY29tcElkXCI6MTZ9XSxcImxvYWRMaXN0XCI6W1wicmVzL2ltZ3MvcmV2aXZlL2JleW9uZFdvcmQucG5nXCJdLFwibG9hZExpc3QzRFwiOltdfTtcclxuICAgICAgICBjb25zdHJ1Y3RvcigpeyBzdXBlcigpfVxyXG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVmlldyhTdXJwYXNzVUkudWlWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5TdXJwYXNzVUlcIixTdXJwYXNzVUkpO1xyXG59XHJcbmV4cG9ydCBtb2R1bGUgdWkudGVzdCB7XHJcbiAgICBleHBvcnQgY2xhc3MgQmlnVUkgZXh0ZW5kcyBTY2VuZSB7XHJcblx0XHRwdWJsaWMgX2xpc3Q6TGF5YS5MaXN0O1xuXHRcdHB1YmxpYyBzZWxmUmFua0JveDpMYXlhLkJveDtcblx0XHRwdWJsaWMgaXRlbUJnOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIHJhbmtJY29uOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIGltZ19oZWFkOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIHRleHRfSW5kZXg6TGF5YS5MYWJlbDtcblx0XHRwdWJsaWMgdGV4dF9uYW1lOkxheWEuTGFiZWw7XG5cdFx0cHVibGljIHRleHRfc2NvcmU6TGF5YS5MYWJlbDtcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiU2NlbmVcIixcInByb3BzXCI6e1wid2lkdGhcIjozODgsXCJoZWlnaHRcIjoyNzB9LFwiY29tcElkXCI6MixcImNoaWxkXCI6W3tcInR5cGVcIjpcIkxpc3RcIixcInByb3BzXCI6e1wieVwiOjAsXCJ4XCI6MCxcIndpZHRoXCI6Mzg4LFwidmFyXCI6XCJfbGlzdFwiLFwidlNjcm9sbEJhclNraW5cIjpcIiBcIixcInNwYWNlWVwiOjMsXCJyZXBlYXRZXCI6NyxcInJlcGVhdFhcIjoxLFwiaGVpZ2h0XCI6MjE2LFwiZWxhc3RpY0VuYWJsZWRcIjp0cnVlfSxcImNvbXBJZFwiOjMsXCJjaGlsZFwiOlt7XCJ0eXBlXCI6XCJiaWdJdGVtXCIsXCJwcm9wc1wiOntcInJ1bnRpbWVcIjpcInZpZXcvYmlnSXRlbS50c1wiLFwicmVuZGVyVHlwZVwiOlwicmVuZGVyXCJ9LFwiY29tcElkXCI6NX1dfSx7XCJ0eXBlXCI6XCJCb3hcIixcInByb3BzXCI6e1wieVwiOjIxOCxcInhcIjowLFwidmFyXCI6XCJzZWxmUmFua0JveFwifSxcImNvbXBJZFwiOjEzLFwiY2hpbGRcIjpbe1widHlwZVwiOlwiSW1hZ2VcIixcInByb3BzXCI6e1wieVwiOjAsXCJ4XCI6MCxcIndpZHRoXCI6Mzg1LFwidmFyXCI6XCJpdGVtQmdcIixcInNraW5cIjpcInJlcy9pbWdzL3JhbmsvaW5kZXhCZy5wbmdcIixcInNpemVHcmlkXCI6XCIyMCwyMCwyMCwyMFwiLFwiaGVpZ2h0XCI6NTF9LFwiY29tcElkXCI6Mjh9LHtcInR5cGVcIjpcIkltYWdlXCIsXCJwcm9wc1wiOntcInlcIjo2LFwieFwiOjExLFwidmlzaWJsZVwiOmZhbHNlLFwidmFyXCI6XCJyYW5rSWNvblwiLFwic2tpblwiOlwicmVzL2ltZ3MvcmFuay9wYWltaW5nMS5wbmdcIn0sXCJjb21wSWRcIjoyOX0se1widHlwZVwiOlwiSW1hZ2VcIixcInByb3BzXCI6e1wieVwiOjksXCJ4XCI6NjksXCJ3aWR0aFwiOjM0LFwidmFyXCI6XCJpbWdfaGVhZFwiLFwiaGVpZ2h0XCI6MzR9LFwiY29tcElkXCI6MzB9LHtcInR5cGVcIjpcIkltYWdlXCIsXCJwcm9wc1wiOntcInlcIjo3LFwieFwiOjY3LFwid2lkdGhcIjo0MCxcInNraW5cIjpcInJlcy9pbWdzL3JhbmsvdHhrLnBuZ1wiLFwiaGVpZ2h0XCI6NDB9LFwiY29tcElkXCI6MzF9LHtcInR5cGVcIjpcIkxhYmVsXCIsXCJwcm9wc1wiOntcInlcIjo2LFwieFwiOjEyLFwid2lkdGhcIjo0MCxcInZpc2libGVcIjp0cnVlLFwidmFyXCI6XCJ0ZXh0X0luZGV4XCIsXCJ2YWxpZ25cIjpcIm1pZGRsZVwiLFwidGV4dFwiOlwiMFwiLFwiaGVpZ2h0XCI6NDMsXCJmb250U2l6ZVwiOjE4LFwiY29sb3JcIjpcIiM3NzQ3MDlcIixcImFsaWduXCI6XCJjZW50ZXJcIn0sXCJjb21wSWRcIjozMn0se1widHlwZVwiOlwiTGFiZWxcIixcInByb3BzXCI6e1wieVwiOjYsXCJ4XCI6MTEyLFwid2lkdGhcIjoxMTQsXCJ2YXJcIjpcInRleHRfbmFtZVwiLFwidmFsaWduXCI6XCJtaWRkbGVcIixcInRleHRcIjpcIuWQjeWtl+WViuWViuWVii4uLlwiLFwib3ZlcmZsb3dcIjpcInNjcm9sbFwiLFwiaGVpZ2h0XCI6NDIsXCJmb250U2l6ZVwiOjE4LFwiZm9udFwiOlwiTWljcm9zb2Z0IFlhSGVpXCIsXCJjb2xvclwiOlwiIzc3NDcwOVwiLFwiYWxpZ25cIjpcImxlZnRcIn0sXCJjb21wSWRcIjozM30se1widHlwZVwiOlwiTGFiZWxcIixcInByb3BzXCI6e1wieVwiOjUsXCJ4XCI6Mjc4LFwid2lkdGhcIjo5MyxcInZhclwiOlwidGV4dF9zY29yZVwiLFwidmFsaWduXCI6XCJtaWRkbGVcIixcInRleHRcIjpcIjBcIixcImhlaWdodFwiOjQyLFwiZm9udFNpemVcIjoyMixcImNvbG9yXCI6XCIjZjlmOGY4XCIsXCJhbGlnblwiOlwiY2VudGVyXCJ9LFwiY29tcElkXCI6MzR9XX1dLFwibG9hZExpc3RcIjpbXCJyZXMvaW1ncy9yYW5rL2luZGV4QmcucG5nXCIsXCJyZXMvaW1ncy9yYW5rL3BhaW1pbmcxLnBuZ1wiLFwicmVzL2ltZ3MvcmFuay90eGsucG5nXCJdLFwibG9hZExpc3QzRFwiOltdfTtcclxuICAgICAgICBjb25zdHJ1Y3RvcigpeyBzdXBlcigpfVxyXG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVmlldyhCaWdVSS51aVZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJFRyhcInVpLnRlc3QuQmlnVUlcIixCaWdVSSk7XHJcbiAgICBleHBvcnQgY2xhc3MgQmlnSXRlbVVJIGV4dGVuZHMgVmlldyB7XHJcblx0XHRwdWJsaWMgaXRlbUJnOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIHJhbmtJY29uOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIGltZ19oZWFkOkxheWEuSW1hZ2U7XG5cdFx0cHVibGljIHRleHRfSW5kZXg6TGF5YS5MYWJlbDtcblx0XHRwdWJsaWMgdGV4dF9uYW1lOkxheWEuTGFiZWw7XG5cdFx0cHVibGljIHRleHRfc2NvcmU6TGF5YS5MYWJlbDtcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiVmlld1wiLFwicHJvcHNcIjp7XCJ3aWR0aFwiOjM4NSxcInJ1bnRpbWVcIjpcInZpZXcvQmlnSXRlbS50c1wiLFwiaGVpZ2h0XCI6NTF9LFwiY29tcElkXCI6MixcImNoaWxkXCI6W3tcInR5cGVcIjpcIkltYWdlXCIsXCJwcm9wc1wiOntcInlcIjowLFwieFwiOjAsXCJ3aWR0aFwiOjM4NSxcInZhclwiOlwiaXRlbUJnXCIsXCJza2luXCI6XCJyZXMvaW1ncy9yYW5rL3JhbmtJdGVtQmcucG5nXCJ9LFwiY29tcElkXCI6MjB9LHtcInR5cGVcIjpcIkltYWdlXCIsXCJwcm9wc1wiOntcInlcIjo2LFwieFwiOjExLFwidmlzaWJsZVwiOmZhbHNlLFwidmFyXCI6XCJyYW5rSWNvblwiLFwic2tpblwiOlwicmVzL2ltZ3MvcmFuay9wYWltaW5nMS5wbmdcIn0sXCJjb21wSWRcIjo3fSx7XCJ0eXBlXCI6XCJJbWFnZVwiLFwicHJvcHNcIjp7XCJ5XCI6OSxcInhcIjo2OSxcIndpZHRoXCI6MzQsXCJ2YXJcIjpcImltZ19oZWFkXCIsXCJoZWlnaHRcIjozNH0sXCJjb21wSWRcIjoxNn0se1widHlwZVwiOlwiSW1hZ2VcIixcInByb3BzXCI6e1wieVwiOjcsXCJ4XCI6NjcsXCJ3aWR0aFwiOjQwLFwic2tpblwiOlwicmVzL2ltZ3MvcmFuay90eGsucG5nXCIsXCJoZWlnaHRcIjo0MH0sXCJjb21wSWRcIjoxNX0se1widHlwZVwiOlwiTGFiZWxcIixcInByb3BzXCI6e1wieVwiOjYsXCJ4XCI6MTIsXCJ3aWR0aFwiOjQwLFwidmlzaWJsZVwiOnRydWUsXCJ2YXJcIjpcInRleHRfSW5kZXhcIixcInZhbGlnblwiOlwibWlkZGxlXCIsXCJ0ZXh0XCI6XCIwXCIsXCJoZWlnaHRcIjo0MyxcImZvbnRTaXplXCI6MTgsXCJjb2xvclwiOlwiIzVBODI5RlwiLFwiYWxpZ25cIjpcImNlbnRlclwifSxcImNvbXBJZFwiOjE5fSx7XCJ0eXBlXCI6XCJMYWJlbFwiLFwicHJvcHNcIjp7XCJ5XCI6NixcInhcIjoxMTIsXCJ3aWR0aFwiOjExNCxcInZhclwiOlwidGV4dF9uYW1lXCIsXCJ2YWxpZ25cIjpcIm1pZGRsZVwiLFwidGV4dFwiOlwi5ZCN5a2X5ZWK5ZWK5ZWKLi4uXCIsXCJvdmVyZmxvd1wiOlwic2Nyb2xsXCIsXCJoZWlnaHRcIjo0MixcImZvbnRTaXplXCI6MTgsXCJmb250XCI6XCJNaWNyb3NvZnQgWWFIZWlcIixcImNvbG9yXCI6XCIjNkI5MEFBXCIsXCJhbGlnblwiOlwibGVmdFwifSxcImNvbXBJZFwiOjR9LHtcInR5cGVcIjpcIkxhYmVsXCIsXCJwcm9wc1wiOntcInlcIjo3LFwieFwiOjI2MixcIndpZHRoXCI6MTIzLFwidmFyXCI6XCJ0ZXh0X3Njb3JlXCIsXCJ2YWxpZ25cIjpcIm1pZGRsZVwiLFwidGV4dFwiOlwiMFwiLFwiaGVpZ2h0XCI6NDIsXCJmb250U2l6ZVwiOjIyLFwiY29sb3JcIjpcIiNGNEExMDVcIixcImFsaWduXCI6XCJjZW50ZXJcIn0sXCJjb21wSWRcIjo1fV0sXCJsb2FkTGlzdFwiOltcInJlcy9pbWdzL3JhbmsvcmFua0l0ZW1CZy5wbmdcIixcInJlcy9pbWdzL3JhbmsvcGFpbWluZzEucG5nXCIsXCJyZXMvaW1ncy9yYW5rL3R4ay5wbmdcIl0sXCJsb2FkTGlzdDNEXCI6W119O1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKCl7IHN1cGVyKCl9XHJcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4oKTp2b2lkIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVWaWV3KEJpZ0l0ZW1VSS51aVZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJFRyhcInVpLnRlc3QuQmlnSXRlbVVJXCIsQmlnSXRlbVVJKTtcclxufVxyIiwiZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWwge1xyXG4gICAgLyoq5oiq5Y+W5a2X56ym5LiyNeS4quWtl+espiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXRTdHJpbmcoc3RyOnN0cmluZyl7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiA1ID8gc3RyLnNsaWNlKDAsNSkgKyAnLi4uJyA6IHN0cjtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFRUVXRpbCB7XHJcbiAgICBcclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiDlpb3lj4vliJfooajmlbDmja7ku47lpKfliLDlsI/mjpLluo9cclxuICAgICAqIEBwYXJhbSBnYW1lRGF0YXM6IHsgS1ZEYXRhTGlzdCwgYXZhdGFyVXJsLCBuaWNrbmFtZSwgb3BlbmlkIH1bXVxyXG4gICAgICogQHBhcmFtIGtleTpzdHJpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBkYXRhU29ydGVyKGdhbWVEYXRhczphbnlbXSwga2V5OnN0cmluZyk6dm9pZCB7XHJcbiAgICAgICAgZ2FtZURhdGFzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgbGV0IHNjb3JlQSA9IFRUVXRpbC5nZXRLVk51bShhLktWRGF0YUxpc3QsIGtleSk7XHJcbiAgICAgICAgICAgIGxldCBzY29yZUIgPSBUVFV0aWwuZ2V0S1ZOdW0oYi5LVkRhdGFMaXN0LCBrZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2NvcmVBID4gc2NvcmVCID8gLTEgOiBzY29yZUEgPCBzY29yZUIgPyAxIDogMDsvL+S7juWkp+WIsOWwj1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEtWIOaVsOaNruWIl+ihqOS4re+8jOWPlmtleeWAvOi9rOaIkOaVsOWtl++8jOepuuWAvOS4ujBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXRLVk51bShrdkRhdGFMaXN0OmFueSwga2V5OnN0cmluZyk6bnVtYmVyXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IGt2RGF0YSA9IGt2RGF0YUxpc3QuZmluZChrdkRhdGEgPT4ga3ZEYXRhLmtleSA9PT0ga2V5KTtcclxuICAgICAgICByZXR1cm4ga3ZEYXRhID8gTnVtYmVyKGt2RGF0YS52YWx1ZSB8fCAwKSA6IDA7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyB1aSB9ICBmcm9tIFwiLi4vdWkvbGF5YU1heFVJXCJcclxuaW1wb3J0IFRUVXRpbCBmcm9tIFwiLi4vdXRpbC9UVFV0aWxcIjtcclxuaW1wb3J0IE9wZW5EYXRhS2V5cyBmcm9tIFwiLi4vY29uc3QvT3BlbkRhdGFLZXlcIjtcclxuaW1wb3J0IHsgU3RyaW5nVXRpbCB9IGZyb20gXCIuLi91dGlsL1N0cmluZ1V0aWxcIjtcclxuICAgIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpZ0l0ZW0gZXh0ZW5kcyB1aS50ZXN0LkJpZ0l0ZW1VSXtcclxuICAgICAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHVibGljIHNldCBkYXRhU291cmNlKHZhbHVlKXtcclxuICAgICAgICAgICAgaWYoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBtYXhTY29yZSA9IFRUVXRpbC5nZXRLVk51bSh2YWx1ZS5LVkRhdGFMaXN0LCBPcGVuRGF0YUtleXMuTWF4U2NvcmUpO1xyXG4gICAgICAgICAgICB0aGlzLmltZ19oZWFkLnNraW4gPSB2YWx1ZS5hdmF0YXJVcmw7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dF9uYW1lLnRleHQgPSBTdHJpbmdVdGlsLmZvcm1hdFN0cmluZyh2YWx1ZS5uaWNrbmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dF9zY29yZS50ZXh0ID0gbWF4U2NvcmUrJyc7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLmluZGV4ID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnNraW4gPSBcInJlcy9pbWdzL3JhbmsvcGFpbWluZzEucG5nXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih2YWx1ZS5pbmRleCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rSWNvbi5za2luID0gXCJyZXMvaW1ncy9yYW5rL3BhaW1pbmcyLnBuZ1wiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodmFsdWUuaW5kZXggPT0gMykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rSWNvbi52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24uc2tpbiA9IFwicmVzL2ltZ3MvcmFuay9wYWltaW5nMy5wbmdcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGV4dF9JbmRleC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0X0luZGV4LnRleHQgPSB2YWx1ZS5pbmRleCArICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuIiwiaW1wb3J0IHsgdWkgfSBmcm9tIFwiLi4vdWkvbGF5YU1heFVJXCJcclxuaW1wb3J0IE9wZW5EYXRhS2V5cyBmcm9tIFwiLi4vY29uc3QvT3BlbkRhdGFLZXlcIjtcclxuaW1wb3J0IFRUVXRpbCBmcm9tIFwiLi4vdXRpbC9UVFV0aWxcIjtcclxuaW1wb3J0IHsgU3RyaW5nVXRpbCB9IGZyb20gXCIuLi91dGlsL1N0cmluZ1V0aWxcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmlnUmFuayBleHRlbmRzIHVpLnRlc3QuQmlnVUl7XHJcbiAgICBcdHByaXZhdGUgY3VyUmFua1R5cGU6bnVtYmVyID0gMDsgLy/lvZPliY3mjpLooYzmppznsbvlnosgMO+8muWlveWPi+amnO+8jDHvvJrkuJbnlYzmppxcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDliJ3lp4vljJZcclxuICAgICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgaW5pdCgpIHtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRsaXN0KFtdKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRGcmllbmREYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QudlNjcm9sbEJhclNraW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOiOt+WPluWlveWPi+aOkuihjFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByaXZhdGUgIGdldEZyaWVuZERhdGEoKTp2b2lke1xyXG4gICAgICAgICAgICB0dC5nZXRGcmllbmRDbG91ZFN0b3JhZ2Uoe1xyXG4gICAgICAgICAgICAgICAga2V5TGlzdDpbT3BlbkRhdGFLZXlzLk1heFNjb3JlXSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6dGhpcy5zZXREYXRhLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBmYWlsOmZ1bmN0aW9uKHJlcyk6dm9pZHsgY29uc29sZS5sb2coXCLojrflj5blpb3lj4vliJfooajlpLHotKU6XCIsIHJlcyk7IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHNldERhdGEocmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLojrflj5blpb3lj4vliJfooajmiJDlip86XCIsIHJlcyk7XHJcbiAgICAgICAgICAgIGlmKHJlcy5kYXRhKXtcclxuICAgICAgICAgICAgICAgIGxldCBzZWxmRGF0YTtcclxuICAgICAgICAgICAgICAgIFRUVXRpbC5kYXRhU29ydGVyKHJlcy5kYXRhLCBPcGVuRGF0YUtleXMuTWF4U2NvcmUpO1xyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSByZXMuZGF0YS5pbmRleE9mKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ICE9IC0xKSBkYXRhLmluZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuaXNNZSkgc2VsZkRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0bGlzdChyZXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoc2VsZkRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGZSYW5rQm94LnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX2xpc3QueSA9IDU0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3QuaGVpZ2h0ID0gMjE2O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZlJhbmsoc2VsZkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGZSYW5rQm94LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9saXN0LnkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3QuaGVpZ2h0ID0gMjY5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOiuvue9rmxpc3QgYXJyXHJcbiAgICAgICAgICogQHBhcmFtIGFyciDotYvlgLznlKjnmoRhcnJcclxuICAgICAgICAgKi9cclxuICAgICAgICBwcml2YXRlIHNldGxpc3QoYXJyOmFueVtdKTp2b2lke1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LmFycmF5ID1hcnI7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBzZXRTZWxmUmFuayh2YWx1ZSkge1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NvcmUgPSBUVFV0aWwuZ2V0S1ZOdW0odmFsdWUuS1ZEYXRhTGlzdCwgT3BlbkRhdGFLZXlzLk1heFNjb3JlKTtcclxuICAgICAgICAgICAgdGhpcy5pbWdfaGVhZC5za2luID0gdmFsdWUuYXZhdGFyVXJsO1xyXG4gICAgICAgICAgICB0aGlzLnRleHRfbmFtZS50ZXh0ID0gU3RyaW5nVXRpbC5mb3JtYXRTdHJpbmcodmFsdWUubmlja25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnRleHRfc2NvcmUudGV4dCA9IG1heFNjb3JlKycnO1xyXG4gICAgICAgICAgICBpZih2YWx1ZS5pbmRleCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rSWNvbi5za2luID0gXCJyZXMvaW1ncy9yYW5rL3BhaW1pbmcxLnBuZ1wiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodmFsdWUuaW5kZXggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rSWNvbi52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24uc2tpbiA9IFwicmVzL2ltZ3MvcmFuay9wYWltaW5nMi5wbmdcIjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlLmluZGV4ID09IDMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnNraW4gPSBcInJlcy9pbWdzL3JhbmsvcGFpbWluZzMucG5nXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRleHRfSW5kZXgudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dF9JbmRleC50ZXh0ID0gdmFsdWUuaW5kZXggKyAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuLi91aS9sYXlhTWF4VUlcIjtcclxuaW1wb3J0IFRUVXRpbCBmcm9tIFwiLi4vdXRpbC9UVFV0aWxcIjtcclxuaW1wb3J0IE9wZW5EYXRhS2V5cyBmcm9tIFwiLi4vY29uc3QvT3BlbkRhdGFLZXlcIjtcclxuaW1wb3J0IE1vZGVsIGZyb20gXCIuLi9tb2RlbFwiO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSBcIi4uL3V0aWwvU3RyaW5nVXRpbFwiO1xyXG5cclxuLyoq57uT5p2f55WM6Z2i55qE5byA5pS+5pWw5o2uICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cnBhc3NDYW52YXMgZXh0ZW5kcyB1aS5TdXJwYXNzVUl7XHJcbiAgICBwcml2YXRlIHNlbGZTY29yZTpudW1iZXIgPSAwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNjb3JlOm51bWJlcil7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluaXQoc2NvcmUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yid5aeL5YyWXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbml0KHNjb3JlOm51bWJlcikge1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kcmF3U3VycGFzcyhzY29yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXdTdXJwYXNzKHNjb3JlOm51bWJlcilcclxuICAgIHtcclxuICAgICAgICBpZighTW9kZWwuaW5zdGFuY2Uuc2VsZkRhdGEpIHJldHVybjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygn57uY5Yi26LaF6LaK5a+55omLMScpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGZTY29yZSA9IHNjb3JlO1xyXG4gICAgICAgIC8v6I635Y+W5aW95Y+L5pWw5o2uXHJcbiAgICAgICAgdHQuZ2V0RnJpZW5kQ2xvdWRTdG9yYWdlKHtcclxuICAgICAgICAgICAga2V5TGlzdDpbT3BlbkRhdGFLZXlzLk1heFNjb3JlXSxcclxuICAgICAgICAgICAgc3VjY2Vzczp0aGlzLmdldEZyaWVuZERhdGFzU3VjYy5iaW5kKHRoaXMpLCBcclxuICAgICAgICAgICAgZmFpbDp0aGlzLmZhaWxDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIOiOt+WPluWlveWPi+aVsOaNruaIkOWKnyAqL1xyXG4gICAgcHJpdmF0ZSBnZXRGcmllbmREYXRhc1N1Y2MocmVzOmFueSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIue7k+adn+eVjOmdouW8gOaUvuaVsOaNri0t6I635Y+W5aW95Y+L5pWw5o2u5oiQ5YqfXCIsIHJlcyk7XHJcblxyXG4gICAgICAgIGxldCBkYXRhczphbnlbXSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmKHJlcy5kYXRhICYmIHJlcy5kYXRhLmxlbmd0aCA+IDEpIFRUVXRpbC5kYXRhU29ydGVyKGRhdGFzLCBPcGVuRGF0YUtleXMuTWF4U2NvcmUpO1xyXG5cclxuICAgICAgICBsZXQgc2VsZk1heFNjb3JlOm51bWJlciA9IDAsIGt2U2NvcmUgPSBudWxsLCBzY29yZSA9IG51bGwsIG5pY2s6c3RyaW5nLCBhdmF0YXJJbWc6c3RyaW5nO1xyXG4gICAgICAgIGZvcihsZXQgaT1kYXRhcy5sZW5ndGgtMTsgaT49MDsgaS0tKVxyXG4gICAgICAgIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAga3ZTY29yZSA9IGRhdGFzW2ldLktWRGF0YUxpc3QuZmluZChrdkRhdGEgPT4ga3ZEYXRhLmtleSA9PT0gT3BlbkRhdGFLZXlzLk1heFNjb3JlKTtcclxuICAgICAgICAgICAgc2NvcmUgPSBrdlNjb3JlID8gcGFyc2VJbnQoa3ZTY29yZS52YWx1ZSB8fCAwKSA6IDA7XHJcbiAgICAgICAgICAgIGlmKGRhdGFzW2ldLmlzTWUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGZNYXhTY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ+aYr+iHquW3sTAnLCBkYXRhc1tpXS5vcGVuaWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ+aYr+iHquW3sTEnLCBNb2RlbC5pbnN0YW5jZS5zZWxmRGF0YSwgTW9kZWwuaW5zdGFuY2Uuc2VsZkRhdGEub3BlbmlkKTtcclxuICAgICAgICAgICAgICAgIGlmKCFNb2RlbC5pbnN0YW5jZS5zZWxmRGF0YS5vcGVuaWQpIE1vZGVsLmluc3RhbmNlLnNlbGZEYXRhLm9wZW5pZCA9IGRhdGFzW2ldLm9wZW5pZDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvL+aYr+iHquW3seWwseS4jeaJp+ihjOS4i+mdouWIpOaWreWIhuaVsFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmKHNjb3JlID49IHRoaXMuc2VsZlNjb3JlICYmIGRhdGFzW2ldLm9wZW5pZCAhPSBNb2RlbC5pbnN0YW5jZS5zZWxmRGF0YS5vcGVuaWQpXHJcbiAgICAgICAgICAgIC8vIGlmKHNjb3JlID49IHRoaXMuc2VsZlNjb3JlICYmIGRhdGFzW2ldLm5pY2tuYW1lICE9IE1vZGVsLmluc3RhbmNlLnNlbGZEYXRhLm5pY2tOYW1lKSBcclxuICAgICAgICAgICAgaWYoc2NvcmUgPj0gdGhpcy5zZWxmU2NvcmUpIFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuaWNrID0gZGF0YXNbaV0ubmlja25hbWU7XHJcbiAgICAgICAgICAgICAgICBhdmF0YXJJbWcgPSBkYXRhc1tpXS5hdmF0YXJVcmxcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0RnJpZW5kRGF0YXNTdWNjMVwiLCB0aGlzLnNlbGZTY29yZSwgc2VsZk1heFNjb3JlLCBuaWNrKTtcclxuXHJcbiAgICAgICAgaWYobmljayA9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldEZyaWVuZERhdGFzU3VjYzIsIG5pY2s9bnVsbCcpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3VycGFzc0JveC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudGl0bGVUeHQudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRpdGxlVHh0LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhlYWRJbWcuc2tpbiA9IGF2YXRhckltZztcclxuICAgICAgICB0aGlzLm5hbWVUeHQudGV4dCA9IFN0cmluZ1V0aWwuZm9ybWF0U3RyaW5nKG5pY2spO1xyXG4gICAgICAgIHRoaXMuc2NvcmVUeHQudGV4dCA9IHNjb3JlICsgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmYWlsQ2FsbGJhY2socmVzOmFueSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIue7k+adn+eVjOmdouW8gOaUvuaVsOaNri0t6I635Y+W5aW95Y+L5pWw5o2u5aSx6LSlXCIsIHJlcyk7XHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgdWkgfSAgZnJvbSBcIi4uL3VpL2xheWFNYXhVSVwiXHJcbmltcG9ydCBUVFV0aWwgZnJvbSBcIi4uL3V0aWwvVFRVdGlsXCI7XHJcbmltcG9ydCBPcGVuRGF0YUtleXMgZnJvbSBcIi4uL2NvbnN0L09wZW5EYXRhS2V5XCI7XHJcbmltcG9ydCB7IFN0cmluZ1V0aWwgfSBmcm9tIFwiLi4vdXRpbC9TdHJpbmdVdGlsXCI7XHJcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBCaWdJdGVtIGV4dGVuZHMgdWkudGVzdC5CaWdJdGVtVUl7XHJcbiAgICAgICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHB1YmxpYyBzZXQgZGF0YVNvdXJjZSh2YWx1ZSl7XHJcbiAgICAgICAgICAgIGlmKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NvcmUgPSBUVFV0aWwuZ2V0S1ZOdW0odmFsdWUuS1ZEYXRhTGlzdCwgT3BlbkRhdGFLZXlzLk1heFNjb3JlKTtcclxuICAgICAgICAgICAgdGhpcy5pbWdfaGVhZC5za2luID0gdmFsdWUuYXZhdGFyVXJsO1xyXG4gICAgICAgICAgICB0aGlzLnRleHRfbmFtZS50ZXh0ID0gU3RyaW5nVXRpbC5mb3JtYXRTdHJpbmcodmFsdWUubmlja25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnRleHRfc2NvcmUudGV4dCA9IG1heFNjb3JlKycnO1xyXG4gICAgICAgICAgICBpZih2YWx1ZS5pbmRleCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rSWNvbi5za2luID0gXCJyZXMvaW1ncy9yYW5rL3BhaW1pbmcxLnBuZ1wiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodmFsdWUuaW5kZXggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rSWNvbi52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24uc2tpbiA9IFwicmVzL2ltZ3MvcmFuay9wYWltaW5nMi5wbmdcIjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlLmluZGV4ID09IDMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFua0ljb24udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnNraW4gPSBcInJlcy9pbWdzL3JhbmsvcGFpbWluZzMucG5nXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtJY29uLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRleHRfSW5kZXgudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dF9JbmRleC50ZXh0ID0gdmFsdWUuaW5kZXggKyAnJztcclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcbiJdfQ==
|