StartScene.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/Script/StartScene.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, '9129bZ2zN5I673xCbm79sLC', 'StartScene');
  13. // Script/StartScene.ts
  14. "use strict";
  15. var __extends = (this && this.__extends) || (function () {
  16. var extendStatics = function (d, b) {
  17. extendStatics = Object.setPrototypeOf ||
  18. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  19. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  20. return extendStatics(d, b);
  21. };
  22. return function (d, b) {
  23. extendStatics(d, b);
  24. function __() { this.constructor = d; }
  25. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  26. };
  27. })();
  28. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  29. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  30. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  31. 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;
  32. return c > 3 && r && Object.defineProperty(target, key, r), r;
  33. };
  34. Object.defineProperty(exports, "__esModule", { value: true });
  35. var Global_1 = require("./Global");
  36. var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
  37. var StartScene = /** @class */ (function (_super) {
  38. __extends(StartScene, _super);
  39. function StartScene() {
  40. var _this = _super !== null && _super.apply(this, arguments) || this;
  41. _this.paihangbang = null;
  42. // LIFE-CYCLE CALLBACKS:
  43. _this.mainNode = null;
  44. _this.UpAni = null;
  45. _this.DownAni = null;
  46. /**
  47. * 玩家信息
  48. */
  49. _this.USERINFO = {
  50. userId: '12312313',
  51. score: 0,
  52. };
  53. _this.channel = "test";
  54. return _this;
  55. }
  56. StartScene.prototype.onLoad = function () {
  57. console.log("find --------------------1");
  58. // // this.LifeDing.zIndex = 5;
  59. // cc.sys.localStorage.removeItem("info");
  60. var infostr = cc.sys.localStorage.getItem("info");
  61. if (infostr == null || infostr == undefined || infostr == "") {
  62. infostr = { userId: '', score: 0, };
  63. infostr = JSON.stringify(infostr);
  64. cc.sys.localStorage.setItem("info", infostr);
  65. }
  66. console.log("------------------4 : " + infostr);
  67. this.USERINFO = JSON.parse(infostr);
  68. if (this.USERINFO == null || this.USERINFO == undefined) {
  69. this.USERINFO = {
  70. userId: '',
  71. score: 0,
  72. };
  73. this.LoadData();
  74. console.log("------------------5");
  75. this.USERINFO = JSON.parse(cc.sys.localStorage.getItem("info"));
  76. }
  77. Global_1.default.instance.setSN(this);
  78. Global_1.default.instance.OverFlag = false;
  79. var startNode = this.node.getChildByName("BgNode").getChildByName("kaiji");
  80. var Ani = startNode.getComponent(cc.Animation);
  81. var Anistate = Ani.play("kaiji");
  82. Anistate.wrapMode = cc.WrapMode.Loop;
  83. this.UpAni = startNode.getChildByName("Up").getComponent(cc.Animation);
  84. this.DownAni = startNode.getChildByName("Down").getComponent(cc.Animation);
  85. console.log("find --------------------1#");
  86. };
  87. StartScene.prototype.start = function () {
  88. var self = this;
  89. // self.USERINFO.userId = "playerB10";
  90. // self.USERINFO.score = 0;
  91. self.scheduleOnce(function () {
  92. Global_1.default.instance.SetUser(self.USERINFO);
  93. Global_1.default.instance.Channel = self.channel;
  94. //this.Login();
  95. }, 0.5);
  96. cc.resources.load('BGGGG', cc.AudioClip, function (err, clips) {
  97. if (err) {
  98. cc.error(err);
  99. return;
  100. }
  101. cc.audioEngine.stopMusic();
  102. cc.audioEngine.playMusic(clips, true); // 播放音乐
  103. });
  104. };
  105. StartScene.prototype.update = function (dt) {
  106. // cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.onKeyBackSpace,this);
  107. // cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.onKeyDown,this);
  108. };
  109. /**
  110. * start game
  111. */
  112. StartScene.prototype.StartGame = function () {
  113. var self = this;
  114. var startTime = Date.now();
  115. var endTime;
  116. Global_1.default.instance.OverFlag = false;
  117. Global_1.default.instance.AniFalg = false;
  118. Global_1.default.instance.LorR = 0;
  119. Global_1.default.instance.InitSpeed = Global_1.default.instance.ConstInitSpeed;
  120. Global_1.default.instance.moveSpeed = 1;
  121. Global_1.default.instance.FHFallSpeed = 2;
  122. cc.sys.localStorage.setItem("hfsj", "99");
  123. self.UpAnistate = self.UpAni.play();
  124. self.DownAnistate = self.DownAni.play();
  125. self.scheduleOnce(function () {
  126. self.node.runAction(cc.sequence(cc.fadeOut(0.5), cc.callFunc(function () {
  127. cc.director.loadScene("MainScene");
  128. endTime = Date.now();
  129. if (endTime - startTime > 330) {
  130. self.destroy();
  131. }
  132. console.log("场景跳转成功");
  133. })));
  134. }, 0.33);
  135. };
  136. /**
  137. * use the backSpace start game
  138. * @param event
  139. */
  140. // onKeyBackSpace(event) {
  141. // if (event.keyCode == cc.KEY.space) {
  142. // this.StartGame();
  143. // }
  144. // }
  145. /**
  146. * 登录
  147. */
  148. StartScene.prototype.Login = function () {
  149. var self = this;
  150. var channelStr = Global_1.default.instance.Channel;
  151. var uNam = Global_1.default.instance.GetUSer().userId;
  152. /* Http.sendRequest("/login",{channel:channelStr,userId:uNam},function(msg){
  153. console.log("------------------6");
  154. let code = JSON.parse(msg.code);
  155. console.log(code);
  156. if(code!=0){
  157. Global.instance.NetStatus = false;
  158. }
  159. console.log("------------------7");
  160. let mmsg = JSON.parse(msg.msg);
  161. self.USERINFO.userId = mmsg.userId;
  162. self.USERINFO.score = mmsg.score;
  163. Global.instance.getLocalScore().BestScore = mmsg.score;
  164. Global.instance.SetUser(self.USERINFO);
  165. });*/
  166. var ux = {
  167. userId: '',
  168. };
  169. ux.userId = channelStr + Global_1.default.instance.GetUSer().userId;
  170. /* Http.sendRequest("/rank",ux,function(mmsg){
  171. console.log("------------------8");
  172. let MM = JSON.parse(mmsg.msg);
  173. console.log(MM);
  174. if(Global.instance.GetR()==null||Global.instance.GetR().rank==undefined||Global.instance.GetR().rank<MM.my.rank){
  175. Global.instance.SetR(MM.my.rank);
  176. Global.instance.SetS(MM.other);
  177. }
  178. });*/
  179. };
  180. //需要更多源码联系Q:852183691
  181. //或者
  182. //关注微信公众号“史于二”
  183. StartScene.prototype.CheckRank = function () {
  184. this.destroy();
  185. cc.director.loadScene("EndScene");
  186. };
  187. StartScene.prototype.IdGenerater = function () {
  188. var str = "";
  189. var suffix = "";
  190. var Id;
  191. var Word;
  192. for (var i = 0; i < 2; i++) {
  193. var ranNum = Math.ceil(Math.random() * 25);
  194. Word = String.fromCharCode(65 + ranNum);
  195. str += Word;
  196. }
  197. for (var i = 0; i < 7; i++) {
  198. var suffixNum = Math.ceil(Math.random() * 9);
  199. suffix += suffixNum.toString();
  200. }
  201. Id = str + suffix;
  202. return Id;
  203. };
  204. StartScene.prototype.LoadData = function () {
  205. var self = this;
  206. var id = self.IdGenerater();
  207. self.USERINFO.userId = id;
  208. self.USERINFO.score = 0;
  209. cc.sys.localStorage.setItem("info", JSON.stringify(self.USERINFO));
  210. // cc.sys.localStorage.removeItem("info");
  211. // let url = cc.url.raw("resources/INFO/data.json");
  212. // let infotem;
  213. // cc.loader.load(url,function(err,res){
  214. // if(err){
  215. // console.log("load"+url,err+"err result:"+JSON.stringify(res));
  216. // }
  217. // infotem = res;
  218. // });
  219. };
  220. __decorate([
  221. property(cc.Prefab)
  222. ], StartScene.prototype, "paihangbang", void 0);
  223. StartScene = __decorate([
  224. ccclass
  225. ], StartScene);
  226. return StartScene;
  227. }(cc.Component));
  228. exports.default = StartScene;
  229. /**
  230. * 联网登录放在开始游戏的时候,期间获取一次排行数据
  231. * 这里有一个逻辑上的问题:如果第一次玩的分数是0,就
  232. */
  233. cc._RF.pop();
  234. }
  235. if (nodeEnv) {
  236. __define(__module.exports, __require, __module);
  237. }
  238. else {
  239. __quick_compile_project__.registerModuleFunc(__filename, function () {
  240. __define(__module.exports, __require, __module);
  241. });
  242. }
  243. })();
  244. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxTdGFydFNjZW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUE4QjtBQUd4QixJQUFBLEtBQXdCLEVBQUUsQ0FBQyxVQUFVLEVBQW5DLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBa0IsQ0FBQztBQUc1QztJQUF3Qyw4QkFBWTtJQUFwRDtRQUFBLHFFQThNQztRQTNNRyxpQkFBVyxHQUFjLElBQUksQ0FBQztRQUc5Qix3QkFBd0I7UUFFeEIsY0FBUSxHQUFHLElBQUksQ0FBQztRQUVoQixXQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsYUFBTyxHQUFHLElBQUksQ0FBQztRQUtmOztXQUVHO1FBQ0gsY0FBUSxHQUFHO1lBQ1AsTUFBTSxFQUFFLFVBQVU7WUFDbEIsS0FBSyxFQUFFLENBQUM7U0FDWCxDQUFBO1FBQ08sYUFBTyxHQUFHLE1BQU0sQ0FBQzs7SUF1TDdCLENBQUM7SUFyTEcsMkJBQU0sR0FBTjtRQUNJLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMxQywrQkFBK0I7UUFDL0IsMENBQTBDO1FBQzFDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRCxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksRUFBRSxFQUFFO1lBQzFELE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ3BDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFP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Um9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR2xvYmFsIGZyb20gXCIuL0dsb2JhbFwiO1xyXG5pbXBvcnQgSHR0cCBmcm9tIFwiLi9IdHRwXCI7XHJcblxyXG5jb25zdCB7IGNjY2xhc3MsIHByb3BlcnR5IH0gPSBjYy5fZGVjb3JhdG9yO1xyXG5cclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRTY2VuZSBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIHBhaWhhbmdiYW5nOiBjYy5QcmVmYWIgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvLyBMSUZFLUNZQ0xFIENBTExCQUNLUzpcclxuXHJcbiAgICBtYWluTm9kZSA9IG51bGw7XHJcblxyXG4gICAgVXBBbmkgPSBudWxsO1xyXG4gICAgRG93bkFuaSA9IG51bGw7XHJcbiAgICBVcEFuaXN0YXRlO1xyXG4gICAgRG93bkFuaXN0YXRlO1xyXG5cclxuICAgIENoZWNrQnRuOiBjYy5CdXR0b247XHJcbiAgICAvKipcclxuICAgICAqIOeOqeWutuS/oeaBr1xyXG4gICAgICovXHJcbiAgICBVU0VSSU5GTyA9IHtcclxuICAgICAgICB1c2VySWQ6ICcxMjMxMjMxMycsXHJcbiAgICAgICAgc2NvcmU6IDAsXHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoYW5uZWwgPSBcInRlc3RcIjtcclxuXHJcbiAgICBvbkxvYWQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJmaW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tMVwiKTtcclxuICAgICAgICAvLyAvLyB0aGlzLkxpZmVEaW5nLnpJbmRleCA9IDU7XHJcbiAgICAgICAgLy8gY2Muc3lzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiaW5mb1wiKTtcclxuICAgICAgICBsZXQgaW5mb3N0ciA9IGNjLnN5cy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZm9cIik7XHJcblxyXG4gICAgICAgIGlmIChpbmZvc3RyID09IG51bGwgfHwgaW5mb3N0ciA9PSB1bmRlZmluZWQgfHwgaW5mb3N0ciA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGluZm9zdHIgPSB7IHVzZXJJZDogJycsIHNjb3JlOiAwLCB9O1xyXG4gICAgICAgICAgICBpbmZvc3RyID0gSlNPTi5zdHJpbmdpZnkoaW5mb3N0cik7XHJcbiAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImluZm9cIiwgaW5mb3N0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tNCA6IFwiICsgaW5mb3N0cik7XHJcbiAgICAgICAgdGhpcy5VU0VSSU5GTyA9IEpTT04ucGFyc2UoaW5mb3N0cik7XHJcbiAgICAgICAgaWYgKHRoaXMuVVNFUklORk8gPT0gbnVsbCB8fCB0aGlzLlVTRVJJTkZPID09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5VU0VSSU5GTyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXJJZDogJycsXHJcbiAgICAgICAgICAgICAgICBzY29yZTogMCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLkxvYWREYXRhKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tNVwiKTtcclxuICAgICAgICAgICAgdGhpcy5VU0VSSU5GTyA9IEpTT04ucGFyc2UoY2Muc3lzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5mb1wiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5zZXRTTih0aGlzKTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3RhcnROb2RlID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmdOb2RlXCIpLmdldENoaWxkQnlOYW1lKFwia2FpamlcIik7XHJcbiAgICAgICAgbGV0IEFuaSA9IHN0YXJ0Tm9kZS5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKTtcclxuICAgICAgICBsZXQgQW5pc3RhdGUgPSBBbmkucGxheShcImthaWppXCIpO1xyXG4gICAgICAgIEFuaXN0YXRlLndyYXBNb2RlID0gY2MuV3JhcE1vZGUuTG9vcDtcclxuICAgICAgICB0aGlzLlVwQW5pID0gc3RhcnROb2RlLmdldENoaWxkQnlOYW1lKFwiVXBcIikuZ2V0Q29tcG9uZW50KGNjLkFuaW1hdGlvbik7XHJcbiAgICAgICAgdGhpcy5Eb3duQW5pID0gc3RhcnROb2RlLmdldENoaWxkQnlOYW1lKFwiRG93blwiKS5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImZpbmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0xI1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gc2VsZi5VU0VSSU5GTy51c2VySWQgPSBcInBsYXllckIxMFwiO1xyXG4gICAgICAgIC8vIHNlbGYuVVNFUklORk8uc2NvcmUgPSAwO1xyXG4gICAgICAgIHNlbGYuc2NoZWR1bGVPbmNlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLlNldFVzZXIoc2VsZi5VU0VSSU5GTyk7XHJcbiAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5DaGFubmVsID0gc2VsZi5jaGFubmVsO1xyXG4gICAgICAgICAgICAvL3RoaXMuTG9naW4oKTtcclxuICAgICAgICB9LCAwLjUpO1xyXG5cclxuXHJcbiAgICAgICAgY2MucmVzb3VyY2VzLmxvYWQoJ0JHR0dHJywgY2MuQXVkaW9DbGlwLCAoZXJyLCBjbGlwczogY2MuQXVkaW9DbGlwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNjLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc3RvcE11c2ljKClcclxuICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUucGxheU11c2ljKGNsaXBzLCB0cnVlKTsgLy8g5pKt5pS+6Z+z5LmQXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShkdCkge1xyXG4gICAgICAgIC8vIGNjLnN5c3RlbUV2ZW50Lm9uKGNjLlN5c3RlbUV2ZW50LkV2ZW50VHlwZS5LRVlfRE9XTix0aGlzLm9uS2V5QmFja1NwYWNlLHRoaXMpO1xyXG4gICAgICAgIC8vIGNjLnN5c3RlbUV2ZW50Lm9uKGNjLlN5c3RlbUV2ZW50LkV2ZW50VHlwZS5LRVlfRE9XTix0aGlzLm9uS2V5RG93bix0aGlzKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3RhcnQgZ2FtZVxyXG4gICAgICovXHJcbiAgICBTdGFydEdhbWUoKSB7XHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGxldCBlbmRUaW1lO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5PdmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5BbmlGYWxnID0gZmFsc2U7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkxvclIgPSAwO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgPSBHbG9iYWwuaW5zdGFuY2UuQ29uc3RJbml0U3BlZWRcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkID0gMTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuRkhGYWxsU3BlZWQgPSAyO1xyXG4gICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhmc2pcIiwgXCI5OVwiKTtcclxuICAgICAgICBzZWxmLlVwQW5pc3RhdGUgPSBzZWxmLlVwQW5pLnBsYXkoKTtcclxuICAgICAgICBzZWxmLkRvd25BbmlzdGF0ZSA9IHNlbGYuRG93bkFuaS5wbGF5KCk7XHJcbiAgICAgICAgc2VsZi5zY2hlZHVsZU9uY2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLm5vZGUucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLmZhZGVPdXQoMC41KSwgY2MuY2FsbEZ1bmMoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTWFpblNjZW5lXCIpO1xyXG4gICAgICAgICAgICAgICAgZW5kVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5kVGltZSAtIHN0YXJ0VGltZSA+IDMzMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlnLrmma/ot7PovazmiJDlip9cIik7XHJcbiAgICAgICAgICAgIH0pKSk7XHJcbiAgICAgICAgfSwgMC4zMyk7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVzZSB0aGUgYmFja1NwYWNlIHN0YXJ0IGdhbWVcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqL1xyXG4gICAgLy8gb25LZXlCYWNrU3BhY2UoZXZlbnQpIHtcclxuICAgIC8vICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSBjYy5LRVkuc3BhY2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5TdGFydEdhbWUoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLyoqXHJcbiAqIOeZu+W9lVxyXG4gKi9cclxuICAgIHByb3RlY3RlZCBMb2dpbigpIHtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxTdHIgPSBHbG9iYWwuaW5zdGFuY2UuQ2hhbm5lbDtcclxuICAgICAgICBsZXQgdU5hbSA9IEdsb2JhbC5pbnN0YW5jZS5HZXRVU2VyKCkudXNlcklkO1xyXG4gICAgICAgIC8qIEh0dHAuc2VuZFJlcXVlc3QoXCIvbG9naW5cIix7Y2hhbm5lbDpjaGFubmVsU3RyLHVzZXJJZDp1TmFtfSxmdW5jdGlvbihtc2cpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tNlwiKTtcclxuICAgICAgICAgICAgIGxldCBjb2RlID0gSlNPTi5wYXJzZShtc2cuY29kZSk7XHJcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb2RlKTtcclxuICAgICAgICAgICAgIGlmKGNvZGUhPTApe1xyXG4gICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5OZXRTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tLS0tLS0tLS0tLS0tLTdcIik7XHJcbiAgICAgICAgICAgICBsZXQgbW1zZyA9IEpTT04ucGFyc2UobXNnLm1zZyk7XHJcbiAgICAgICAgICAgICBzZWxmLlVTRVJJTkZPLnVzZXJJZCA9IG1tc2cudXNlcklkO1xyXG4gICAgICAgICAgICAgc2VsZi5VU0VSSU5GTy5zY29yZSA9IG1tc2cuc2NvcmU7XHJcbiAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuZ2V0TG9jYWxTY29yZSgpLkJlc3RTY29yZSA9IG1tc2cuc2NvcmU7XHJcbiAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuU2V0VXNlcihzZWxmLlVTRVJJTkZPKTtcclxuICAgICAgICAgfSk7Ki9cclxuICAgICAgICBsZXQgdXggPSB7XHJcbiAgICAgICAgICAgIHVzZXJJZDogJycsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHV4LnVzZXJJZCA9IGNoYW5uZWxTdHIgKyBHbG9iYWwuaW5zdGFuY2UuR2V0VVNlcigpLnVzZXJJZDtcclxuICAgICAgICAvKiBIdHRwLnNlbmRSZXF1ZXN0KFwiL3JhbmtcIix1eCxmdW5jdGlvbihtbXNnKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tLS0tLS0tLS0tLS0tLThcIik7XHJcbiAgICAgICAgICAgICBsZXQgTU0gPSBKU09OLnBhcnNlKG1tc2cubXNnKTtcclxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKE1NKTtcclxuICAgICAgICAgICAgIGlmKEdsb2JhbC5pbnN0YW5jZS5HZXRSKCk9PW51bGx8fEdsb2JhbC5pbnN0YW5jZS5HZXRSKCkucmFuaz09dW5kZWZpbmVkfHxHbG9iYWwuaW5zdGFuY2UuR2V0UigpLnJhbms8TU0ubXkucmFuayl7XHJcbiAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLlNldFIoTU0ubXkucmFuayk7XHJcbiAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLlNldFMoTU0ub3RoZXIpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9KTsqL1xyXG4gICAgfVxyXG5cclxuICAgIC8v6ZyA6KaB5pu05aSa5rqQ56CB6IGU57O7UTo4NTIxODM2OTFcclxuICAgIC8v5oiW6ICFXHJcbiAgICAvL+WFs+azqOW+ruS/oeWFrOS8l+WPt+KAnOWPsuS6juS6jOKAnVxyXG4gICAgQ2hlY2tSYW5rKCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkVuZFNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIElkR2VuZXJhdGVyKCkge1xyXG4gICAgICAgIGxldCBzdHIgPSBcIlwiXHJcbiAgICAgICAgbGV0IHN1ZmZpeCA9IFwiXCJcclxuICAgICAgICBsZXQgSWQ7XHJcbiAgICAgICAgbGV0IFdvcmQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHJhbk51bSA9IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogMjUpO1xyXG4gICAgICAgICAgICBXb3JkID0gU3RyaW5nLmZyb21DaGFyQ29kZSg2NSArIHJhbk51bSk7XHJcbiAgICAgICAgICAgIHN0ciArPSBXb3JkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgc3VmZml4TnVtID0gTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA5KTtcclxuICAgICAgICAgICAgc3VmZml4ICs9IHN1ZmZpeE51bS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBJZCA9IHN0ciArIHN1ZmZpeDtcclxuICAgICAgICByZXR1cm4gSWRcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIExvYWREYXRhKCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgaWQgPSBzZWxmLklkR2VuZXJhdGVyKCk7XHJcbiAgICAgICAgc2VsZi5VU0VSSU5GTy51c2VySWQgPSBpZDtcclxuICAgICAgICBzZWxmLlVTRVJJTkZPLnNjb3JlID0gMDtcclxuICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJpbmZvXCIsIEpTT04uc3RyaW5naWZ5KHNlbGYuVVNFUklORk8pKTtcclxuICAgICAgICAvLyBjYy5zeXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmZvXCIpO1xyXG4gICAgICAgIC8vIGxldCB1cmwgPSBjYy51cmwucmF3KFwicmVzb3VyY2VzL0lORk8vZGF0YS5qc29uXCIpO1xyXG4gICAgICAgIC8vIGxldCBpbmZvdGVtO1xyXG4gICAgICAgIC8vIGNjLmxvYWRlci5sb2FkKHVybCxmdW5jdGlvbihlcnIscmVzKXtcclxuICAgICAgICAvLyAgICAgaWYoZXJyKXtcclxuICAgICAgICAvLyAgICAgY29uc29sZS5sb2coXCJsb2FkXCIrdXJsLGVycitcImVyciByZXN1bHQ6XCIrSlNPTi5zdHJpbmdpZnkocmVzKSk7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgICAgaW5mb3RlbSA9IHJlcztcclxuICAgICAgICAvLyB9KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICog6IGU572R55m75b2V5pS+5Zyo5byA5aeL5ri45oiP55qE5pe25YCZ77yM5pyf6Ze06I635Y+W5LiA5qyh5o6S6KGM5pWw5o2uXHJcbiAqIOi/memHjOacieS4gOS4qumAu+i+keS4iueahOmXrumimO+8muWmguaenOesrOS4gOasoeeOqeeahOWIhuaVsOaYrzDvvIzlsLFcclxuICovXHJcbiJdfQ==