(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/login/view/login_window.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, '97af1We3T1H0bE3BdiOkKUX', 'login_window'); // Scripts/mod/login/view/login_window.js "use strict"; // -------------------------------------------------------------------- // @author: shiraho@syg.com(必填, 创建模块的人员) // @description: // 用户输入框 //
Create: new Date().toISOString() // -------------------------------------------------------------------- var PathTool = require("pathtool"); var EnterPanel = require("enter_panel"); var UserPanel = require("user_panel"); var LoaderManager = require("loadermanager"); var LoginWindow = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("login", "login_window"); this.viewTag = SCENE_TAG.dialogue; this.panel_list = []; this.win_type = WinType.Full; this.mask_max_height = 260; this.mask_min_height = 160; this.is_move = false; this.is_touch = false; this.change_progress = false; }, openCallBack: function openCallBack() { this.background = this.root_wnd.getChildByName("background"); this.background_component = this.background.getComponent(cc.Sprite); // this.background.scale = 1.25; // 版本信息 this.label_component = this.seekChild("label_version", cc.Label); // this.root_wnd.getChildByName("label_version").getComponent(cc.Label); // 版号信息,原始csb里面没有这个,后面如果需要重新导入的时候,要手动添加,但是不建议手动创建 // this.label_notice = this.root_wnd.getChildByName("label_notice"); // this.label_notice.getComponent(cc.Label).string = Utils.TI18N("新广出审【2017】 368号\nISBN 968 - 5 - 458 - 03215 - 2\n文网游备字 【2017】-RPG 0918号\n出版单位:上海科学技术文献出版社有限公司"); this.progress_bar_nd = this.seekChild("total_progress_bar"); this.progress_bar = this.progress_bar_nd.getComponent(cc.ProgressBar); this.sco_progress_bar = this.seekChild("sco_progress_bar", cc.ProgressBar); this.container = this.root_wnd.getChildByName("container"); // this.spine = this.seekChild("spine", sp.Skeleton); this.mask_bg_nd = this.seekChild("mask_bg"); this.mask_bg_1_nd = this.seekChild("mask_bg_1"); this.progress_con_nd = this.seekChild("progress_con"); this.progress_des_lb = this.seekChild("progress_des", cc.Label); this.progress_num_lb = this.seekChild("progress_num", cc.Label); this.protress_des_lb = this.seekChild("protress_des", cc.Label); // var testBtn = this.root_wnd.getChildByName("actionfund_1002") // testBtn.on(cc.Node.EventType.TOUCH_END, this.onClickRootWnd, this); this.effect_nd = this.seekChild("effect_node"); this.sp_node = this.seekChild("sp_node"); this.target_node = this.seekChild("targe_node"); this.touch_nd = this.seekChild("touch"); this.touch_nd.on(cc.Node.EventType.TOUCH_END, function () { if (this.is_move == false) this.moveEffectNd(); }, this); this.background.scale *= FIT_SCALE; }, registerEvent: function registerEvent() {}, openRootWnd: function openRootWnd() { //加载背景资源 // this.addTicket(function() { // if (!this.background_component.spriteFrame) { // this.loadRes("ui_res/login2/loading_bg_1.jpg", (function (res) { // this.background_component.spriteFrame = res; // }).bind(this)) // } // }.bind(this), 0.1) // 加载背景动画, // this.addTicket(function() { // this.loadRes("spine/E51008/action.atlas", (function (res) { // this.spine.skeletonData = res; // this.spine.setAnimation(0, "action", true); // }).bind(this)) // }.bind(this), 0.3) //这里需要判断一下平台或者包 if (USE_SDK) { // Android原生SDK // 初始化SDK并进行登录 SDK.initSDK(); this.changeSubPanel(2); } else { // 切换面板类型 if (this.open_params) { this.changeSubPanel(this.open_params.index); } } //加载完成才隐藏初始界面和进度条 var splash = document.getElementById('splash'); if (splash) { splash.style.display = 'none'; } }, // 切换面板类型 changeSubPanel: function changeSubPanel(index) { if (this.cur_panel) { this.cur_panel.hide(); this.cur_panel = null; } index = index ? index : 1; var panel = this.panel_list[index]; if (panel == null) { if (index == 1) { panel = new UserPanel(); } else if (index == 2) { panel = this.enter_panel = new EnterPanel(); } this.panel_list[index] = panel; panel.setParent(this.container); } if (panel) { panel.show(); this.cur_panel = panel; } }, closeCallBack: function closeCallBack() { for (var key in this.panel_list) { if (this.panel_list.hasOwnProperty(key)) { var element = this.panel_list[key]; element.deleteMe(); } } this.cur_panel = null; if (this.sp_node) { this.sp_node.destroy(); this.sp_node = null; } if (this.randow_timer) gcore.Timer.del(this.randow_timer); }, showLoading: function showLoading() { this.enter_panel.setVisible(false); this.progress_con_nd.active = true; this.mask_bg_nd.active = true; this.mask_bg_1_nd.active = false; this.mask_bg_nd.height = this.mask_max_height; // this.spine.clearTracks(); this.randowTitle(); //第一次登陆领紫武 this.showFirstRoleEffect(); }, updateLoading: function updateLoading(progress) { this.progress_bar.progress = progress; if (progress > 0.52 && !this.change_progress) { this.progress_des_lb.string = Utils.TI18N("加载资源文件"); this.change_progress = true; } if (progress > 0) { if (USE_SDK == true && PLATFORM_TYPR == "SH_SDK" && !IS_LOADING) { SDK.dataPlacement(90000); } IS_LOADING = true; } else { IS_LOADING = false; } if (progress > 0.7) { this.is_touch = true; } if (progress >= 1) { if (this.is_move == false) this.moveEffectNd(); } }, updateSeconLoading: function updateSeconLoading(progress) { this.sco_progress_bar.progress = progress; var value = Math.ceil(progress * 100); if (value > 100) value = 100; this.progress_num_lb.string = "[" + value + "%" + "]"; }, onClickRootWnd: function onClickRootWnd() { SDK.sdkLogin(); SDK.pay(); }, getTestAccount: function getTestAccount() { if (this.enter_panel) return this.enter_panel.getTestAccount(); }, // 随机提示 randowTitle: function randowTitle() { this.randow_timer = gcore.Timer.set(function () { var loginInfo = require("login_controller").getInstance().getCurRoleInfo(); var login_des = []; var lev = 0; if (loginInfo && loginInfo.lev) lev = loginInfo.lev; for (var des_i = 1; des_i < 14; des_i++) { if (Lang["LOADING_DESC_" + des_i]) { if (LoadingDes[des_i]) { if (lev < LoadingDes[des_i]) { continue; } } login_des.push(Lang["LOADING_DESC_" + des_i]); } } var index = Math.ceil(Math.random() * 10) % login_des.length + 1; if (login_des[index]) { this.protress_des_lb.string = login_des[index]; } }.bind(this), 2000, -1); }, //展示第一次角色领取紫装特效 showFirstRoleEffect: function showFirstRoleEffect() { var LoginController = require("login_controller"); var status = LoginController.getInstance().getModel().getFirstRoleData(); cc.log(status); if (!status) return; if (!this.effect_nd) return; this.effect_sk = this.effect_nd.addComponent(sp.Skeleton); var res = "spine/E99998/action.atlas"; this.loadRes(res, function (res_object) { this.effect_sk.skeletonData = res_object; this.effect_sk.setAnimation(1, PlayerAction.action, true); }.bind(this)); this.get_sp = this.sp_node.addComponent(cc.Sprite); this.target_sp = this.target_node.addComponent(cc.Sprite); this.loadRes(PathTool.getUIIconPath("login2", "login2_1018"), function (sp) { this.get_sp.spriteFrame = sp; }.bind(this)); this.loadRes(PathTool.getUIIconPath("login2", "login2_1019"), function (sp) { this.target_sp.spriteFrame = sp; }.bind(this)); }, moveEffectNd: function moveEffectNd() { if (!this.is_touch) return; this.is_move = true; this.sp_node.active = false; this.target_node.active = false; var move_to = cc.moveTo(0.7, cc.v2(this.effect_nd.x, this.effect_nd.y + 500)); var callback = cc.callFunc(function () { this.effect_nd.active = false; }.bind(this)); this.effect_nd.runAction(cc.sequence(move_to, callback)); } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsb2dpblxcdmlld1xcbG9naW5fd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkVudGVyUGFuZWwiLCJVc2VyUGFuZWwiLCJMb2FkZXJNYW5hZ2VyIiwiTG9naW5XaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJwYW5lbF9saXN0Iiwid2luX3R5cGUiLCJXaW5UeXBlIiwiRnVsbCIsIm1hc2tfbWF4X2hlaWdodCIsIm1hc2tfbWluX2hlaWdodCIsImlzX21vdmUiLCJpc190b3VjaCIsImNoYW5nZV9wcm9ncmVzcyIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwiYmFja2dyb3VuZF9jb21wb25lbnQiLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJsYWJlbF9jb21wb25lbnQiLCJzZWVrQ2hpbGQiLCJMYWJlbCIsInByb2dyZXNzX2Jhcl9uZCIsInByb2dyZXNzX2JhciIsIlByb2dyZXNzQmFyIiwic2NvX3Byb2dyZXNzX2JhciIsImNvbnRhaW5lciIsIm1hc2tfYmdfbmQiLCJtYXNrX2JnXzFfbmQiLCJwcm9ncmVzc19jb25fbmQiLCJwcm9ncmVzc19kZXNfbGIiLCJwcm9ncmVzc19udW1fbGIiLCJwcm90cmVzc19kZXNfbGIiLCJlZmZlY3RfbmQiLCJzcF9ub2RlIiwidGFyZ2V0X25vZGUiLCJ0b3VjaF9uZCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsIm1vdmVFZmZlY3ROZCIsInNjYWxlIiwiRklUX1NDQUxFIiwicmVnaXN0ZXJFdmVudCIsIm9wZW5Sb290V25kIiwiVVNFX1NESyIsIlNESyIsImluaXRTREsiLCJjaGFuZ2VTdWJQYW5lbCIsIm9wZW5fcGFyYW1zIiwiaW5kZXgiLCJzcGxhc2giLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic3R5bGUiLCJkaXNwbGF5IiwiY3VyX3BhbmVsIiwiaGlkZSIsInBhbmVsIiwiZW50ZXJfcGFuZWwiLCJzZXRQYXJlbnQiLCJzaG93IiwiY2xvc2VDYWxsQmFjayIsImtleSIsImhhc093blByb3BlcnR5IiwiZWxlbWVudCIsImRlbGV0ZU1lIiwiZGVzdHJveSIsInJhbmRvd190aW1lciIsImdjb3JlIiwiVGltZXIiLCJkZWwiLCJzaG93TG9hZGluZyIsInNldFZpc2libGUiLCJhY3RpdmUiLCJoZWlnaHQiLCJyYW5kb3dUaXRsZSIsInNob3dGaXJzdFJvbGVFZmZlY3QiLCJ1cGRhdGVMb2FkaW5nIiwicHJvZ3Jlc3MiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwiUExBVEZPUk1fVFlQUiIsIklTX0xPQURJTkciLCJkYXRhUGxhY2VtZW50IiwidXBkYXRlU2Vjb25Mb2FkaW5nIiwidmFsdWUiLCJNYXRoIiwiY2VpbCIsIm9uQ2xpY2tSb290V25kIiwic2RrTG9naW4iLCJwYXkiLCJnZXRUZXN0QWNjb3VudCIsInNldCIsImxvZ2luSW5mbyIsImdldEluc3RhbmNlIiwiZ2V0Q3VyUm9sZUluZm8iLCJsb2dpbl9kZXMiLCJsZXYiLCJkZXNfaSIsIkxhbmciLCJMb2FkaW5nRGVzIiwicHVzaCIsInJhbmRvbSIsImxlbmd0aCIsImJpbmQiLCJMb2dpbkNvbnRyb2xsZXIiLCJzdGF0dXMiLCJnZXRNb2RlbCIsImdldEZpcnN0Um9sZURhdGEiLCJsb2ciLCJlZmZlY3Rfc2siLCJhZGRDb21wb25lbnQiLCJzcCIsIlNrZWxldG9uIiwicmVzIiwibG9hZFJlcyIsInJlc19vYmplY3QiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJQbGF5ZXJBY3Rpb24iLCJhY3Rpb24iLCJnZXRfc3AiLCJ0YXJnZXRfc3AiLCJnZXRVSUljb25QYXRoIiwic3ByaXRlRnJhbWUiLCJtb3ZlX3RvIiwibW92ZVRvIiwidjIiLCJ4IiwieSIsImNh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O0FBQ25CLFNBQUtELE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS3lCLE9BQUwsQ0FBYXlDLE1BQWIsR0FBc0IsS0FBdEI7QUFDQSxTQUFLeEMsV0FBTCxDQUFpQndDLE1BQWpCLEdBQTBCLEtBQTFCO0FBQ0EsUUFBSXFELE9BQU8sR0FBR3RJLEVBQUUsQ0FBQ3VJLE1BQUgsQ0FBVSxHQUFWLEVBQWV2SSxFQUFFLENBQUN3SSxFQUFILENBQU0sS0FBS2pHLFNBQUwsQ0FBZWtHLENBQXJCLEVBQXdCLEtBQUtsRyxTQUFMLENBQWVtRyxDQUFmLEdBQW1CLEdBQTNDLENBQWYsQ0FBZDtBQUNBLFFBQUlDLFFBQVEsR0FBRzNJLEVBQUUsQ0FBQzRJLFFBQUgsQ0FBWSxZQUFZO0FBQ25DLFdBQUtyRyxTQUFMLENBQWUwQyxNQUFmLEdBQXdCLEtBQXhCO0FBQ0gsS0FGMEIsQ0FFekJnQyxJQUZ5QixDQUVwQixJQUZvQixDQUFaLENBQWY7QUFHQSxTQUFLMUUsU0FBTCxDQUFlc0csU0FBZixDQUF5QjdJLEVBQUUsQ0FBQzhJLFFBQUgsQ0FBWVIsT0FBWixFQUFxQkssUUFBckIsQ0FBekI7QUFDSDtBQWhRc0IsQ0FBVCxDQUFsQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHNoaXJhaG9Ac3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICAg55So5oi36L6T5YWl5qGGXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgRW50ZXJQYW5lbCA9IHJlcXVpcmUoXCJlbnRlcl9wYW5lbFwiKTtcbnZhciBVc2VyUGFuZWwgPSByZXF1aXJlKFwidXNlcl9wYW5lbFwiKTtcbnZhciBMb2FkZXJNYW5hZ2VyID0gcmVxdWlyZShcImxvYWRlcm1hbmFnZXJcIilcblxudmFyIExvZ2luV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImxvZ2luXCIsIFwibG9naW5fd2luZG93XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7XG4gICAgICAgIHRoaXMucGFuZWxfbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsO1xuXG4gICAgICAgIHRoaXMubWFza19tYXhfaGVpZ2h0ID0gMjYwO1xuICAgICAgICB0aGlzLm1hc2tfbWluX2hlaWdodCA9IDE2MDtcbiAgICAgICAgdGhpcy5pc19tb3ZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNfdG91Y2ggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VfcHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJiYWNrZ3JvdW5kXCIpO1xuICAgICAgICB0aGlzLmJhY2tncm91bmRfY29tcG9uZW50ID0gdGhpcy5iYWNrZ3JvdW5kLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAvLyB0aGlzLmJhY2tncm91bmQuc2NhbGUgPSAxLjI1O1xuXG4gICAgICAgIC8vIOeJiOacrOS/oeaBr1xuICAgICAgICB0aGlzLmxhYmVsX2NvbXBvbmVudCA9IHRoaXMuc2Vla0NoaWxkKFwibGFiZWxfdmVyc2lvblwiLCBjYy5MYWJlbCk7XG4gICAgICAgIC8vIHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbF92ZXJzaW9uXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG5cbiAgICAgICAgLy8g54mI5Y+35L+h5oGvLOWOn+Wni2NzYumHjOmdouayoeaciei/meS4qizlkI7pnaLlpoLmnpzpnIDopoHph43mlrDlr7zlhaXnmoTml7blgJks6KaB5omL5Yqo5re75YqgLOS9huaYr+S4jeW7uuiuruaJi+WKqOWIm+W7ulxuICAgICAgICAvLyB0aGlzLmxhYmVsX25vdGljZSA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbF9ub3RpY2VcIik7XG4gICAgICAgIC8vIHRoaXMubGFiZWxfbm90aWNlLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmlrDlub/lh7rlrqHjgJAyMDE344CRIDM2OOWPt1xcbklTQk4gOTY4IC0gNSAtIDQ1OCAtIDAzMjE1IC0gMlxcbuaWh+e9kea4uOWkh+WtlyDjgJAyMDE344CRLVJQRyAwOTE45Y+3XFxu5Ye654mI5Y2V5L2N77ya5LiK5rW356eR5a2m5oqA5pyv5paH54yu5Ye654mI56S+5pyJ6ZmQ5YWs5Y+4XCIpO1xuICAgICAgICB0aGlzLnByb2dyZXNzX2Jhcl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwidG90YWxfcHJvZ3Jlc3NfYmFyXCIpO1xuICAgICAgICB0aGlzLnByb2dyZXNzX2JhciA9IHRoaXMucHJvZ3Jlc3NfYmFyX25kLmdldENvbXBvbmVudChjYy5Qcm9ncmVzc0Jhcik7XG4gICAgICAgIHRoaXMuc2NvX3Byb2dyZXNzX2JhciA9IHRoaXMuc2Vla0NoaWxkKFwic2NvX3Byb2dyZXNzX2JhclwiLCBjYy5Qcm9ncmVzc0Jhcik7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKVxuICAgICAgICAvLyB0aGlzLnNwaW5lICAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcInNwaW5lXCIsIHNwLlNrZWxldG9uKTtcbiAgICAgICAgdGhpcy5tYXNrX2JnX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJtYXNrX2JnXCIpO1xuICAgICAgICB0aGlzLm1hc2tfYmdfMV9uZCA9IHRoaXMuc2Vla0NoaWxkKFwibWFza19iZ18xXCIpO1xuICAgICAgICB0aGlzLnByb2dyZXNzX2Nvbl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwicHJvZ3Jlc3NfY29uXCIpO1xuICAgICAgICB0aGlzLnByb2dyZXNzX2Rlc19sYiA9IHRoaXMuc2Vla0NoaWxkKFwicHJvZ3Jlc3NfZGVzXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc19udW1fbGIgPSB0aGlzLnNlZWtDaGlsZChcInByb2dyZXNzX251bVwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMucHJvdHJlc3NfZGVzX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJwcm90cmVzc19kZXNcIiwgY2MuTGFiZWwpO1xuXG4gICAgICAgIC8vIHZhciB0ZXN0QnRuID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImFjdGlvbmZ1bmRfMTAwMlwiKVxuICAgICAgICAvLyB0ZXN0QnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgdGhpcy5vbkNsaWNrUm9vdFduZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5lZmZlY3RfbmQgPSB0aGlzLnNlZWtDaGlsZChcImVmZmVjdF9ub2RlXCIpO1xuICAgICAgICB0aGlzLnNwX25vZGUgPSB0aGlzLnNlZWtDaGlsZChcInNwX25vZGVcIik7XG4gICAgICAgIHRoaXMudGFyZ2V0X25vZGUgPSB0aGlzLnNlZWtDaGlsZChcInRhcmdlX25vZGVcIik7XG4gICAgICAgIHRoaXMudG91Y2hfbmQgPSB0aGlzLnNlZWtDaGlsZChcInRvdWNoXCIpO1xuXG4gICAgICAgIHRoaXMudG91Y2hfbmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZiggdGhpcy5pc19tb3ZlID09IGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5tb3ZlRWZmZWN0TmQoKTtcbiAgICAgICAgfSx0aGlzKVxuXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSAqPSBGSVRfU0NBTEU7XG4gICAgfSxcblxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgb3BlblJvb3RXbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy/liqDovb3og4zmma/otYTmupBcbiAgICAgICAgLy8gdGhpcy5hZGRUaWNrZXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vICAgICBpZiAoIXRoaXMuYmFja2dyb3VuZF9jb21wb25lbnQuc3ByaXRlRnJhbWUpIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmxvYWRSZXMoXCJ1aV9yZXMvbG9naW4yL2xvYWRpbmdfYmdfMS5qcGdcIiwgKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kX2NvbXBvbmVudC5zcHJpdGVGcmFtZSA9IHJlcztcbiAgICAgICAgLy8gICAgICAgICB9KS5iaW5kKHRoaXMpKVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LmJpbmQodGhpcyksIDAuMSlcblxuICAgICAgICAvLyDliqDovb3og4zmma/liqjnlLssXG4gICAgICAgIC8vIHRoaXMuYWRkVGlja2V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyAgICAgdGhpcy5sb2FkUmVzKFwic3BpbmUvRTUxMDA4L2FjdGlvbi5hdGxhc1wiLCAoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc3BpbmUuc2tlbGV0b25EYXRhID0gcmVzO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc3BpbmUuc2V0QW5pbWF0aW9uKDAsIFwiYWN0aW9uXCIsIHRydWUpO1xuICAgICAgICAvLyAgICAgfSkuYmluZCh0aGlzKSlcbiAgICAgICAgLy8gfS5iaW5kKHRoaXMpLCAwLjMpXG5cblxuICAgICAgICAvL+i/memHjOmcgOimgeWIpOaWreS4gOS4i+W5s+WPsOaIluiAheWMhVxuICAgICAgICBpZiAoVVNFX1NESykgeyAgLy8gQW5kcm9pZOWOn+eUn1NES1xuICAgICAgICAgICAgLy8g5Yid5aeL5YyWU0RL5bm26L+b6KGM55m75b2VXG4gICAgICAgICAgICBTREsuaW5pdFNESygpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJQYW5lbCgyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOWIh+aNoumdouadv+exu+Wei1xuICAgICAgICAgICAgaWYgKHRoaXMub3Blbl9wYXJhbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVN1YlBhbmVsKHRoaXMub3Blbl9wYXJhbXMuaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy/liqDovb3lrozmiJDmiY3pmpDol4/liJ3lp4vnlYzpnaLlkozov5vluqbmnaFcbiAgICAgICAgbGV0IHNwbGFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGxhc2gnKTtcbiAgICAgICAgaWYoc3BsYXNoKXtcbiAgICAgICAgICAgIHNwbGFzaC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWIh+aNoumdouadv+exu+Wei1xuICAgIGNoYW5nZVN1YlBhbmVsOiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyX3BhbmVsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cl9wYW5lbC5oaWRlKClcbiAgICAgICAgICAgIHRoaXMuY3VyX3BhbmVsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IGluZGV4ID8gaW5kZXggOiAxO1xuICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsX2xpc3RbaW5kZXhdO1xuICAgICAgICBpZiAocGFuZWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpIHtcbiAgICAgICAgICAgICAgICBwYW5lbCA9IG5ldyBVc2VyUGFuZWwoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gMikge1xuICAgICAgICAgICAgICAgIHBhbmVsID0gdGhpcy5lbnRlcl9wYW5lbCA9IG5ldyBFbnRlclBhbmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3RbaW5kZXhdID0gcGFuZWw7XG4gICAgICAgICAgICBwYW5lbC5zZXRQYXJlbnQodGhpcy5jb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICAgICAgcGFuZWwuc2hvdygpO1xuICAgICAgICAgICAgdGhpcy5jdXJfcGFuZWwgPSBwYW5lbFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wYW5lbF9saXN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lbF9saXN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYW5lbF9saXN0W2tleV07XG4gICAgICAgICAgICAgICAgZWxlbWVudC5kZWxldGVNZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VyX3BhbmVsID0gbnVsbFxuXG4gICAgICAgIGlmKHRoaXMuc3Bfbm9kZSl7XG4gICAgICAgICAgICB0aGlzLnNwX25vZGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5zcF9ub2RlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJhbmRvd190aW1lcilcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnJhbmRvd190aW1lcik7XG4gICAgfSxcblxuICAgIHNob3dMb2FkaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW50ZXJfcGFuZWwuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NfY29uX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMubWFza19iZ19uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm1hc2tfYmdfMV9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXNrX2JnX25kLmhlaWdodCA9IHRoaXMubWFza19tYXhfaGVpZ2h0O1xuICAgICAgICAvLyB0aGlzLnNwaW5lLmNsZWFyVHJhY2tzKCk7XG4gICAgICAgIHRoaXMucmFuZG93VGl0bGUoKTtcblxuICAgICAgICAvL+esrOS4gOasoeeZu+mZhumihue0q+atplxuICAgICAgICB0aGlzLnNob3dGaXJzdFJvbGVFZmZlY3QoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlTG9hZGluZzogZnVuY3Rpb24gKHByb2dyZXNzKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NfYmFyLnByb2dyZXNzID0gcHJvZ3Jlc3M7XG5cbiAgICAgICAgaWYgKHByb2dyZXNzID4gMC41MiAmJiAhdGhpcy5jaGFuZ2VfcHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NfZGVzX2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5Yqg6L296LWE5rqQ5paH5Lu2XCIpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VfcHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2dyZXNzID4gMCkge1xuICAgICAgICAgICAgaWYgKFVTRV9TREsgPT0gdHJ1ZSAmJiBQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIgJiYgIUlTX0xPQURJTkcpIHtcbiAgICAgICAgICAgICAgICBTREsuZGF0YVBsYWNlbWVudCg5MDAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJU19MT0FESU5HID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIElTX0xPQURJTkcgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHByb2dyZXNzID4gMC43KXtcbiAgICAgICAgICAgIHRoaXMuaXNfdG91Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHByb2dyZXNzID49IDEpe1xuICAgICAgICAgICAgaWYodGhpcy5pc19tb3ZlID09IGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5tb3ZlRWZmZWN0TmQoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWNvbkxvYWRpbmc6IGZ1bmN0aW9uIChwcm9ncmVzcykge1xuICAgICAgICB0aGlzLnNjb19wcm9ncmVzc19iYXIucHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICAgICAgdmFyIHZhbHVlID0gTWF0aC5jZWlsKHByb2dyZXNzICogMTAwKVxuICAgICAgICBpZiAodmFsdWUgPiAxMDApIHZhbHVlID0gMTAwO1xuICAgICAgICB0aGlzLnByb2dyZXNzX251bV9sYi5zdHJpbmcgPSBcIltcIiArIHZhbHVlICsgXCIlXCIgKyBcIl1cIjtcbiAgICB9LFxuXG4gICAgb25DbGlja1Jvb3RXbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgU0RLLnNka0xvZ2luKCk7XG4gICAgICAgIFNESy5wYXkoKTtcbiAgICB9LFxuXG4gICAgZ2V0VGVzdEFjY291bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50ZXJfcGFuZWwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRlcl9wYW5lbC5nZXRUZXN0QWNjb3VudCgpO1xuICAgIH0sXG5cbiAgICAvLyDpmo/mnLrmj5DnpLpcbiAgICByYW5kb3dUaXRsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJhbmRvd190aW1lciA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbG9naW5JbmZvID0gcmVxdWlyZShcImxvZ2luX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5nZXRDdXJSb2xlSW5mbygpO1xuICAgICAgICAgICAgdmFyIGxvZ2luX2RlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGxldiA9IDA7XG4gICAgICAgICAgICBpZiAobG9naW5JbmZvICYmIGxvZ2luSW5mby5sZXYpXG4gICAgICAgICAgICAgICAgbGV2ID0gbG9naW5JbmZvLmxldjtcblxuICAgICAgICAgICAgZm9yICh2YXIgZGVzX2kgPSAxOyBkZXNfaSA8IDE0OyBkZXNfaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKExhbmdbXCJMT0FESU5HX0RFU0NfXCIgKyBkZXNfaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKExvYWRpbmdEZXNbZGVzX2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2IDwgTG9hZGluZ0Rlc1tkZXNfaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2dpbl9kZXMucHVzaChMYW5nW1wiTE9BRElOR19ERVNDX1wiICsgZGVzX2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpbmRleCA9IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogMTApICUgbG9naW5fZGVzLmxlbmd0aCArIDE7XG4gICAgICAgICAgICBpZiAobG9naW5fZGVzW2luZGV4XSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvdHJlc3NfZGVzX2xiLnN0cmluZyA9IGxvZ2luX2Rlc1tpbmRleF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyMDAwLCAtMSlcbiAgICB9LFxuXG5cbiAgICAvL+WxleekuuesrOS4gOasoeinkuiJsumihuWPlue0q+ijheeJueaViFxuICAgIHNob3dGaXJzdFJvbGVFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IExvZ2luQ29udHJvbGxlciA9IHJlcXVpcmUoXCJsb2dpbl9jb250cm9sbGVyXCIpO1xuICAgICAgICBsZXQgc3RhdHVzID0gTG9naW5Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRGaXJzdFJvbGVEYXRhKCk7XG4gICAgICAgIGNjLmxvZyhzdGF0dXMpXG4gICAgICAgIGlmICghc3RhdHVzKSByZXR1cm5cbiAgICAgICAgaWYgKCF0aGlzLmVmZmVjdF9uZCkgcmV0dXJuXG4gICAgICAgIHRoaXMuZWZmZWN0X3NrID0gdGhpcy5lZmZlY3RfbmQuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKTtcbiAgICAgICAgbGV0IHJlcyA9IFwic3BpbmUvRTk5OTk4L2FjdGlvbi5hdGxhc1wiO1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5lZmZlY3Rfc2suc2tlbGV0b25EYXRhID0gcmVzX29iamVjdDtcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0X3NrLnNldEFuaW1hdGlvbigxLCBQbGF5ZXJBY3Rpb24uYWN0aW9uLCB0cnVlKVxuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5nZXRfc3AgPSB0aGlzLnNwX25vZGUuYWRkQ29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMudGFyZ2V0X3NwID0gdGhpcy50YXJnZXRfbm9kZS5hZGRDb21wb25lbnQoY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJsb2dpbjJcIiwgXCJsb2dpbjJfMTAxOFwiKSwgZnVuY3Rpb24gKHNwKSB7XG4gICAgICAgICAgICB0aGlzLmdldF9zcC5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibG9naW4yXCIsIFwibG9naW4yXzEwMTlcIiksIGZ1bmN0aW9uIChzcCkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRfc3Auc3ByaXRlRnJhbWUgPSBzcDtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICBtb3ZlRWZmZWN0TmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoIXRoaXMuaXNfdG91Y2gpIHJldHVyblxuICAgICAgICB0aGlzLmlzX21vdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNwX25vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFyZ2V0X25vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGxldCBtb3ZlX3RvID0gY2MubW92ZVRvKDAuNywgY2MudjIodGhpcy5lZmZlY3RfbmQueCwgdGhpcy5lZmZlY3RfbmQueSArIDUwMCkpO1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBjYy5jYWxsRnVuYyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmVmZmVjdF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmVmZmVjdF9uZC5ydW5BY3Rpb24oY2Muc2VxdWVuY2UobW92ZV90bywgY2FsbGJhY2spKTtcbiAgICB9LFxufSk7Il19