(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/common/globalmessagemgr.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, '9060fLBPhlATpjglAtlk3gA', 'globalmessagemgr'); // Scripts/common/globalmessagemgr.js "use strict"; /*-----------------------------------------------------+ * 消息处理类相关处理 * @author whjing2012@163.com +-----------------------------------------------------*/ window.GlobalMessageMgr = cc.Class({ cotr: function cotr() {}, properties: { vertical_array: [], vertical_array_tmp: [] }, statics: { instance: null }, showMoveVertical: function showMoveVertical(msg, color) { if (msg == "") return; if (this.vertical_array.length >= 3) { this.vertical_array_tmp.push({ msg: msg, color: color }); if (this.vertical_array_tmp.length > 10) { this.vertical_array_tmp.shift(); } return; } var parent_wnd = ViewManager.getInstance().getSceneNode(SCENE_TAG.msg); var container = new cc.Node(); container.setAnchorPoint(0.5, 0.5); container.setPosition(0, 300); parent_wnd.addChild(container); //背景 var image = container.addComponent(cc.Sprite); this.loadRes(PathTool.getUIIconPath("common", "common_90056"), function (sp) { if (container && container.isValid) { image.spriteFrame = sp; } }.bind(this)); image.type = cc.Sprite.Type.SLICED; image.sizeMode = cc.Sprite.SizeMode.CUSTOM; image.node.setContentSize(500, 60); // var richText = container.addComponent(cc.RichText); var richText = Utils.createRichLabel(24, new cc.Color(0xff, 0xda, 0x2f, 0xff), cc.v2(0.5, 0.5), cc.v2(0, 0), 26, 500, container); richText.handleTouchEvent = false; richText.horizontalAlign = cc.macro.TextAlignment.CENTER; // richText.maxWidth = 500; // richText.fontSize = 24; // richText.node.color = new cc.Color(0xff, 0xda, 0x2f, 0xff); richText.string = StringUtil.parseStr(msg).string; var resArr = StringUtil.parseStr(msg).resArr; if (resArr) { for (var i in resArr) { this.loadRes(PathTool.getItemRes(resArr[i]), function (resObject) { if (container && container.isValid) { richText.addSpriteFrame(resObject); } }.bind(this)); } } container.rict_text_nd = richText.node; var seq = cc.sequence( // cc.moveBy(1, 0, 100), cc.delayTime(2), cc.removeSelf(), cc.callFunc(function () { var node = this.vertical_array.shift(); node.destroy(); node = null; if (this.vertical_array_tmp.length > 0) { var o = this.vertical_array_tmp.shift(); this.showMoveVertical(o.msg, o.color); } }, this)); this.vertical_array.push(container); this.sortPosition(); container.rict_text_nd.runAction(seq); }, sortPosition: function sortPosition() { var size = this.vertical_array.length; if (size > 0) { var _y = 230; //起始点 var _x = 0; var last_height = this.vertical_array[size - 1].height; var last_y; for (var i = size; i > 0; i--) { var item = this.vertical_array[i - 1]; if (item == null) return; item.stopAllActions(); if (size == i) { item.setPosition(cc.v2(_x, _y)); last_y = _y + item.height; } else { item.setPosition(cc.v2(_x, last_y)); last_y = last_y + item.height; } item.runAction(cc.moveBy(0.5, 0, last_height)); } } }, loadRes: function loadRes(path, callback) { if (this.res_list == null) { this.res_list = {}; } if (this.res_list[path]) { callback(this.res_list[path]); return; } else { LoaderManager.getInstance().loadRes(path, function (res_object) { if (this.is_close || this["delete"]) { return; } this.res_list[path] = res_object; callback(res_object); }.bind(this)); } }, showPowerMove: function showPowerMove(num, res, old_num) { var MainUIController = require("mainui_controller"); MainUIController.getInstance().showPower(num, old_num); }, showMoveHorizontal: function showMoveHorizontal(msg, color) { var curr_scene = ViewManager.getInstance().getSceneNode(SCENE_TAG.msg); if (!curr_scene) return; var self = this; var size = cc.size(682, 38); if (this.per_bg_icon == null) { var node = new cc.Node(); var widget = node.addComponent(cc.Widget); widget.isAlignTop = true; widget.isAlignHorizontalCenter = true; widget.top = 55; widget.horizontalCenter = 0; var image = node.addComponent(cc.Sprite); this.loadRes(PathTool.getUIIconPath("common", "common_90056"), function (sp) { if (node && node.isValid) { image.spriteFrame = sp; } }.bind(this)); image.type = cc.Sprite.Type.SLICED; image.sizeMode = cc.Sprite.SizeMode.CUSTOM; node.setAnchorPoint(0.5, 1); node.setContentSize(size); curr_scene.addChild(node); widget.updateAlignment(); // node.setPosition(0, SCREEN_HEIGHT*0.5 - 55) this.per_bg_icon = node; } if (this.msg_save_arr == null) { this.msg_save_arr = []; } //创建文本 function createLabel(msg, color) { // msg = "" + msg + "" var temp_msg = self.createhorizontalLabel(msg, color, 0, 20); temp_msg.node.setAnchorPoint(cc.v2(0, 0.5)); temp_msg.node.setPosition(cc.v2(0, -size.height / 2 - size.height)); self.per_bg_icon.addChild(temp_msg.node); return temp_msg; } //只存储5条传闻 if (this.msg_save_arr.length > 5) { this.msg_save_arr.pop(); } this.msg_save_arr.push({ msg: msg, delay_time: 3, color: color }); //如果当前有滚动 if (this.has_msg_moveing == true) return; function deleteMsg() { self.has_msg_moveing = false; if (self.per_move_msg_word) { self.per_move_msg_word.node.destroy(); self.per_move_msg_word = null; } if (self.msg_save_arr.length > 0) { self.has_msg_moveing = true; var temp_tab = self.msg_save_arr.pop(); var msg_word = createLabel(temp_tab.msg, temp_tab.color); var show_time = temp_tab.delay_time || 3; self.per_move_msg_word = msg_word; var sequence_1 = null; var font_size = msg_word.node; if (font_size.width > size.width) { msg_word.node.x = -size.width / 2; var move_to_ = cc.moveTo(0.1, cc.v2(msg_word.node.x, -size.height / 2)); var move_to = cc.moveTo(show_time, cc.v2(msg_word.node.x - (font_size.width - size.width) - 5, -size.height / 2)); var delay_time = cc.delayTime(1); sequence_1 = cc.sequence(move_to_, move_to, delay_time, cc.callFunc(deleteMsg)); } else { msg_word.node.x = -font_size.width / 2; var _delay_time = cc.delayTime(show_time); var _move_to_ = cc.moveTo(0.1, cc.v2(msg_word.node.x, -size.height / 2)); sequence_1 = cc.sequence(_move_to_, _delay_time, cc.callFunc(deleteMsg)); } msg_word.node.runAction(sequence_1); } else { self.msg_save_arr = null; if (self.per_bg_icon) { self.per_bg_icon.destroy(); self.per_bg_icon = null; } } } deleteMsg(); }, createhorizontalLabel: function createhorizontalLabel(msg, color, max_width, fontsize) { var richText = new cc.Node().addComponent(cc.RichText); richText.node.color = color || new cc.Color(25, 30, 40); richText.maxWidth = max_width || 0; richText.fontSize = fontsize; richText.string = msg; return richText; } }); // 实例化单利 GlobalMessageMgr.getInstance = function () { if (!GlobalMessageMgr.instance) { GlobalMessageMgr.instance = new GlobalMessageMgr(); } return GlobalMessageMgr.instance; }; //全局 message 提示方法 window.message = function (msg, color) { if (msg == null || msg == "") { return; } GlobalMessageMgr.getInstance().showMoveVertical(msg, color); }; //资产提示 window.showAssetsMsg = function (msg, color) { message(msg, color); }; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFxnbG9iYWxtZXNzYWdlbWdyLmpzIl0sIm5hbWVzIjpbIndpbmRvdyIsIkdsb2JhbE1lc3NhZ2VNZ3IiLCJjYyIsIkNsYXNzIiwiY290ciIsInByb3BlcnRpZXMiLCJ2ZXJ0aWNhbF9hcnJheSIsInZlcnRpY2FsX2FycmF5X3RtcCIsInN0YXRpY3MiLCJpbnN0YW5jZSIsInNob3dNb3ZlVmVydGljYWwiLCJtc2ciLCJjb2xvciIsImxlbmd0aCIsInB1c2giLCJzaGlmdCIsInBhcmVudF93bmQiLCJWaWV3TWFuYWdlciIsImdldEluc3RhbmNlIiwiZ2V0U2NlbmVOb2RlIiwiU0NFTkVfVEFHIiwiY29udGFpbmVyIiwiTm9kZSIsInNldEFuY2hvclBvaW50Iiwic2V0UG9zaXRpb24iLCJhZGRDaGlsZCIsImltYWdlIiwiYWRkQ29tcG9uZW50IiwiU3ByaXRlIiwibG9hZFJlcyIsIlBhdGhUb29sIiwiZ2V0VUlJY29uUGF0aCIsInNwIiwiaXNWYWxpZCIsInNwcml0ZUZyYW1lIiwiYmluZCIsInR5cGUiLCJUeXBlIiwiU0xJQ0VEIiwic2l6ZU1vZGUiLCJTaXplTW9kZSIsIkNVU1RPTSIsIm5vZGUiLCJzZXRDb250ZW50U2l6ZSIsInJpY2hUZXh0IiwiVXRpbHMiLCJjcmVhdGVSaWNoTGFiZWwiLCJDb2xvciIsInYyIiwiaGFuZGxlVG91Y2hFdmVudCIsImhvcml6b250YWxBbGlnbiIsIm1hY3JvIiwiVGV4dEFsaWdubWVudCIsIkNFTlRFUiIsInN0cmluZyIsIlN0cmluZ1V0aWwiLCJwYXJzZVN0ciIsInJlc0FyciIsImkiLCJnZXRJdGVtUmVzIiwicmVzT2JqZWN0IiwiYWRkU3ByaXRlRnJhbWUiLCJyaWN0X3RleHRfbmQiLCJzZXEiLCJzZXF1ZW5jZSIsImRlbGF5VGltZSIsInJlbW92ZVNlbGYiLCJjYWxsRnVuYyIsImRlc3Ryb3kiLCJvIiwic29ydFBvc2l0aW9uIiwicnVuQWN0aW9uIiwic2l6ZSIsIl95IiwiX3giLCJsYXN0X2hlaWdodCIsImhlaWdodCIsImxhc3RfeSIsIml0ZW0iLCJzdG9wQWxsQWN0aW9ucyIsIm1vdmVCeSIsInBhdGgiLCJjYWxsYmFjayIsInJlc19saXN0IiwiTG9hZGVyTWFuYWdlciIsInJlc19vYmplY3QiLCJpc19jbG9zZSIsInNob3dQb3dlck1vdmUiLCJudW0iLCJyZXMiLCJvbGRfbnVtIiwiTWFpblVJQ29udHJvbGxlciIsInJlcXVpcmUiLCJzaG93UG93ZXIiLCJzaG93TW92ZUhvcml6b250YWwiLCJjdXJyX3NjZW5lIiwic2VsZiIsInBlcl9iZ19pY29uIiwid2lkZ2V0IiwiV2lkZ2V0IiwiaXNBbGlnblRvcCIsImlzQWxpZ25Ib3Jpem9udGFsQ2VudGVyIiwidG9wIiwiaG9yaXpvbnRhbENlbnRlciIsInVwZGF0ZUFsaWdubWVudCIsIm1zZ19zYXZlX2FyciIsImNyZWF0ZUxhYmVsIiwidGVtcF9tc2ciLCJjcmVhdGVob3Jpem9udGFsTGFiZWwiLCJwb3AiLCJkZWxheV90aW1lIiwiaGFzX21zZ19tb3ZlaW5nIiwiZGVsZXRlTXNnIiwicGVyX21vdmVfbXNnX3dvcmQiLCJ0ZW1wX3RhYiIsIm1zZ193b3JkIiwic2hvd190aW1lIiwic2VxdWVuY2VfMSIsImZvbnRfc2l6ZSIsIndpZHRoIiwieCIsIm1vdmVfdG9fIiwibW92ZVRvIiwibW92ZV90byIsIm1heF93aWR0aCIsImZvbnRzaXplIiwiUmljaFRleHQiLCJtYXhXaWR0aCIsImZvbnRTaXplIiwibWVzc2FnZSIsInNob3dBc3NldHNNc2ciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFLQUEsTUFBTSxDQUFDQyxnQkFBUCxHQUEwQkMsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDL0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWSxDQUNqQixDQUY4QjtBQUkvQkMsRUFBQUEsVUFBVSxFQUFFO0FBQ1JDLElBQUFBLGNBQWMsRUFBRSxFQURSO0FBRVJDLElBQUFBLGtCQUFrQixFQUFFO0FBRlosR0FK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LGdCQUFnQixDQUFDaUIsV0FBakIsR0FBK0IsWUFBWTtBQUN2QyxNQUFJLENBQUNqQixnQkFBZ0IsQ0FBQ1EsUUFBdEIsRUFBZ0M7QUFDNUJSLElBQUFBLGdCQUFnQixDQUFDUSxRQUFqQixHQUE0QixJQUFJUixnQkFBSixFQUE1QjtBQUNIOztBQUNELFNBQU9BLGdCQUFnQixDQUFDUSxRQUF4QjtBQUNILENBTEQsRUFPQTs7O0FBQ0FULE1BQU0sQ0FBQ2lJLE9BQVAsR0FBaUIsVUFBVXRILEdBQVYsRUFBZUMsS0FBZixFQUFzQjtBQUNuQyxNQUFJRCxHQUFHLElBQUksSUFBUCxJQUFlQSxHQUFHLElBQUksRUFBMUIsRUFBOEI7QUFDMUI7QUFDSDs7QUFDRFYsRUFBQUEsZ0JBQWdCLENBQUNpQixXQUFqQixHQUErQlIsZ0JBQS9CLENBQWdEQyxHQUFoRCxFQUFxREMsS0FBckQ7QUFDSCxDQUxELEVBT0E7OztBQUNBWixNQUFNLENBQUNrSSxhQUFQLEdBQXVCLFVBQVV2SCxHQUFWLEVBQWVDLEtBQWYsRUFBc0I7QUFDekNxSCxFQUFBQSxPQUFPLENBQUN0SCxHQUFELEVBQU1DLEtBQU4sQ0FBUDtBQUNILENBRkQiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiDmtojmga/lpITnkIbnsbvnm7jlhbPlpITnkIZcbiAqIEBhdXRob3Igd2hqaW5nMjAxMkAxNjMuY29tXG4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxud2luZG93Lkdsb2JhbE1lc3NhZ2VNZ3IgPSBjYy5DbGFzcyh7XG4gICAgY290cjogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZlcnRpY2FsX2FycmF5OiBbXSxcbiAgICAgICAgdmVydGljYWxfYXJyYXlfdG1wOiBbXVxuICAgIH0sXG5cbiAgICBzdGF0aWNzOiB7XG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgIH0sXG5cbiAgICBzaG93TW92ZVZlcnRpY2FsOiBmdW5jdGlvbiAobXNnLCBjb2xvcikge1xuICAgICAgICBpZihtc2cgPT0gXCJcIilyZXR1cm5cbiAgICAgICAgaWYgKHRoaXMudmVydGljYWxfYXJyYXkubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgIHRoaXMudmVydGljYWxfYXJyYXlfdG1wLnB1c2goeyBtc2c6IG1zZywgY29sb3I6IGNvbG9yIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudmVydGljYWxfYXJyYXlfdG1wLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNhbF9hcnJheV90bXAuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50X3duZCA9IFZpZXdNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0U2NlbmVOb2RlKFNDRU5FX1RBRy5tc2cpO1xuICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgY29udGFpbmVyLnNldEFuY2hvclBvaW50KDAuNSwgMC41KTtcbiAgICAgICAgY29udGFpbmVyLnNldFBvc2l0aW9uKDAsIDMwMCk7XG4gICAgICAgIHBhcmVudF93bmQuYWRkQ2hpbGQoY29udGFpbmVyKTtcblxuICAgICAgICAvL+iDjOaZr1xuICAgICAgICB2YXIgaW1hZ2UgPSBjb250YWluZXIuYWRkQ29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsIFwiY29tbW9uXzkwMDU2XCIpLCBmdW5jdGlvbiAoc3ApIHtcbiAgICAgICAgICAgIGlmKGNvbnRhaW5lciAmJiBjb250YWluZXIuaXNWYWxpZCl7XG4gICAgICAgICAgICAgICAgaW1hZ2Uuc3ByaXRlRnJhbWUgPSBzcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgIGltYWdlLnR5cGUgPSBjYy5TcHJpdGUuVHlwZS5TTElDRUQ7XG4gICAgICAgIGltYWdlLnNpemVNb2RlID0gY2MuU3ByaXRlLlNpemVNb2RlLkNVU1RPTTtcbiAgICAgICAgaW1hZ2Uubm9kZS5zZXRDb250ZW50U2l6ZSg1MDAsIDYwKTtcblxuICAgICAgICAvLyB2YXIgcmljaFRleHQgPSBjb250YWluZXIuYWRkQ29tcG9uZW50KGNjLlJpY2hUZXh0KTtcbiAgICAgICAgdmFyIHJpY2hUZXh0ID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHhmZiwgMHhkYSwgMHgyZiwgMHhmZiksIGNjLnYyKDAuNSwwLjUpLCBjYy52MigwLDApLCAyNiwgNTAwLCBjb250YWluZXIpO1xuICAgICAgICByaWNoVGV4dC5oYW5kbGVUb3VjaEV2ZW50ID0gZmFsc2U7XG4gICAgICAgIHJpY2hUZXh0Lmhvcml6b250YWxBbGlnbiA9IGNjLm1hY3JvLlRleHRBbGlnbm1lbnQuQ0VOVEVSO1xuICAgICAgICAvLyByaWNoVGV4dC5tYXhXaWR0aCA9IDUwMDtcbiAgICAgICAgLy8gcmljaFRleHQuZm9udFNpemUgPSAyNDtcbiAgICAgICAgLy8gcmljaFRleHQubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGZmLCAweGRhLCAweDJmLCAweGZmKTtcbiAgICAgICAgcmljaFRleHQuc3RyaW5nID0gU3RyaW5nVXRpbC5wYXJzZVN0cihtc2cpLnN0cmluZztcbiAgICAgICAgdmFyIHJlc0FyciA9IFN0cmluZ1V0aWwucGFyc2VTdHIobXNnKS5yZXNBcnI7XG4gICAgICAgIGlmIChyZXNBcnIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVzQXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEl0ZW1SZXMocmVzQXJyW2ldKSwgKGZ1bmN0aW9uIChyZXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY29udGFpbmVyICYmIGNvbnRhaW5lci5pc1ZhbGlkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpY2hUZXh0LmFkZFNwcml0ZUZyYW1lKHJlc09iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIucmljdF90ZXh0X25kID0gcmljaFRleHQubm9kZTtcblxuICAgICAgICB2YXIgc2VxID0gY2Muc2VxdWVuY2UoXG4gICAgICAgICAgICAvLyBjYy5tb3ZlQnkoMSwgMCwgMTAwKSxcbiAgICAgICAgICAgIGNjLmRlbGF5VGltZSgyKSxcbiAgICAgICAgICAgIGNjLnJlbW92ZVNlbGYoKSxcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMudmVydGljYWxfYXJyYXkuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBub2RlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBub2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbF9hcnJheV90bXAubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHRoaXMudmVydGljYWxfYXJyYXlfdG1wLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01vdmVWZXJ0aWNhbChvLm1zZywgby5jb2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbF9hcnJheS5wdXNoKGNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuc29ydFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnRhaW5lci5yaWN0X3RleHRfbmQucnVuQWN0aW9uKHNlcSk7XG4gICAgfSxcblxuICAgIHNvcnRQb3NpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMudmVydGljYWxfYXJyYXkubGVuZ3RoO1xuICAgICAgICBpZiAoc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHZhciBfeSA9IDIzMDsvL+i1t+Wni+eCuVxuICAgICAgICAgICAgdmFyIF94ID0gMDtcbiAgICAgICAgICAgIHZhciBsYXN0X2hlaWdodCA9IHRoaXMudmVydGljYWxfYXJyYXlbc2l6ZSAtIDFdLmhlaWdodDtcbiAgICAgICAgICAgIHZhciBsYXN0X3k7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2l6ZTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy52ZXJ0aWNhbF9hcnJheVtpIC0xXTtcbiAgICAgICAgICAgICAgICBpZihpdGVtID09IG51bGwpcmV0dXJuXG4gICAgICAgICAgICAgICAgaXRlbS5zdG9wQWxsQWN0aW9ucygpO1xuICAgICAgICAgICAgICAgIGlmKHNpemUgPT0gaSl7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oY2MudjIoX3gsX3kpKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdF95ID0gX3kgKyBpdGVtLmhlaWdodDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbihjYy52MihfeCxsYXN0X3kpKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdF95ID0gbGFzdF95ICsgaXRlbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ucnVuQWN0aW9uKGNjLm1vdmVCeSgwLjUsMCxsYXN0X2hlaWdodCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGxvYWRSZXM6IGZ1bmN0aW9uIChwYXRoLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGhpcy5yZXNfbGlzdCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc19saXN0ID0ge31cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNfbGlzdFtwYXRoXSkge1xuICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5yZXNfbGlzdFtwYXRoXSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXMocGF0aCwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc19jbG9zZSB8fCB0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVzX2xpc3RbcGF0aF0gPSByZXNfb2JqZWN0XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socmVzX29iamVjdClcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93UG93ZXJNb3ZlOiBmdW5jdGlvbiAobnVtLCByZXMsIG9sZF9udW0pIHtcbiAgICAgICAgdmFyIE1haW5VSUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgIE1haW5VSUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zaG93UG93ZXIobnVtLCBvbGRfbnVtKTtcbiAgICB9LFxuICAgIHNob3dNb3ZlSG9yaXpvbnRhbChtc2csIGNvbG9yKXtcbiAgICAgICAgbGV0IGN1cnJfc2NlbmUgPSBWaWV3TWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldFNjZW5lTm9kZShTQ0VORV9UQUcubXNnKVxuICAgICAgICBpZighY3Vycl9zY2VuZSkgcmV0dXJuO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgbGV0IHNpemUgPSBjYy5zaXplKDY4MiwgMzgpXG4gICAgICAgIGlmKHRoaXMucGVyX2JnX2ljb24gPT0gbnVsbCl7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IG5ldyBjYy5Ob2RlKClcbiAgICAgICAgICAgIGxldCB3aWRnZXQgPSBub2RlLmFkZENvbXBvbmVudChjYy5XaWRnZXQpXG4gICAgICAgICAgICB3aWRnZXQuaXNBbGlnblRvcCA9IHRydWU7XG4gICAgICAgICAgICB3aWRnZXQuaXNBbGlnbkhvcml6b250YWxDZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgd2lkZ2V0LnRvcCA9IDU1XG4gICAgICAgICAgICB3aWRnZXQuaG9yaXpvbnRhbENlbnRlciA9IDBcbiAgICAgICAgICAgIGxldCBpbWFnZSA9IG5vZGUuYWRkQ29tcG9uZW50KGNjLlNwcml0ZSlcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsIFwiY29tbW9uXzkwMDU2XCIpLCBmdW5jdGlvbiAoc3ApIHtcbiAgICAgICAgICAgICAgICBpZihub2RlICYmIG5vZGUuaXNWYWxpZCl7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnNwcml0ZUZyYW1lID0gc3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgaW1hZ2UudHlwZSA9IGNjLlNwcml0ZS5UeXBlLlNMSUNFRDtcbiAgICAgICAgICAgIGltYWdlLnNpemVNb2RlID0gY2MuU3ByaXRlLlNpemVNb2RlLkNVU1RPTTtcbiAgICAgICAgICAgIG5vZGUuc2V0QW5jaG9yUG9pbnQoMC41LCAxKVxuICAgICAgICAgICAgbm9kZS5zZXRDb250ZW50U2l6ZShzaXplKVxuICAgICAgICAgICAgY3Vycl9zY2VuZS5hZGRDaGlsZChub2RlKVxuICAgICAgICAgICAgd2lkZ2V0LnVwZGF0ZUFsaWdubWVudCgpXG4gICAgICAgICAgICAvLyBub2RlLnNldFBvc2l0aW9uKDAsIFNDUkVFTl9IRUlHSFQqMC41IC0gNTUpXG4gICAgICAgICAgICB0aGlzLnBlcl9iZ19pY29uID0gbm9kZVxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMubXNnX3NhdmVfYXJyID09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5tc2dfc2F2ZV9hcnIgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8v5Yib5bu65paH5pysXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUxhYmVsKG1zZywgY29sb3Ipe1xuICAgICAgICAgICAgLy8gbXNnID0gXCI8c2l6ZSA9IDE1PlwiICsgbXNnICsgXCI8L3NpemU+XCJcbiAgICAgICAgICAgIGxldCB0ZW1wX21zZyA9IHNlbGYuY3JlYXRlaG9yaXpvbnRhbExhYmVsKG1zZywgY29sb3IsIDAsIDIwKVxuICAgICAgICAgICAgdGVtcF9tc2cubm9kZS5zZXRBbmNob3JQb2ludChjYy52MigwLCAwLjUpKVxuICAgICAgICAgICAgdGVtcF9tc2cubm9kZS5zZXRQb3NpdGlvbihjYy52MigwLCAtc2l6ZS5oZWlnaHQgLyAyIC0gc2l6ZS5oZWlnaHQpKVxuICAgICAgICAgICAgc2VsZi5wZXJfYmdfaWNvbi5hZGRDaGlsZCh0ZW1wX21zZy5ub2RlKVxuICAgICAgICAgICAgcmV0dXJuIHRlbXBfbXNnXG4gICAgICAgIH1cblxuICAgICAgICAvL+WPquWtmOWCqDXmnaHkvKDpl7tcbiAgICAgICAgaWYodGhpcy5tc2dfc2F2ZV9hcnIubGVuZ3RoID4gNSl7XG4gICAgICAgICAgICB0aGlzLm1zZ19zYXZlX2Fyci5wb3AoKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tc2dfc2F2ZV9hcnIucHVzaCh7bXNnIDogbXNnLCBkZWxheV90aW1lIDogMywgY29sb3IgOiBjb2xvcn0pXG5cbiAgICAgICAgLy/lpoLmnpzlvZPliY3mnInmu5rliqhcbiAgICAgICAgaWYodGhpcy5oYXNfbXNnX21vdmVpbmcgPT0gdHJ1ZSkgcmV0dXJuO1xuICAgICAgICBmdW5jdGlvbiBkZWxldGVNc2coKXtcbiAgICAgICAgICAgIHNlbGYuaGFzX21zZ19tb3ZlaW5nID0gZmFsc2VcbiAgICAgICAgICAgIGlmKHNlbGYucGVyX21vdmVfbXNnX3dvcmQpe1xuICAgICAgICAgICAgICAgIHNlbGYucGVyX21vdmVfbXNnX3dvcmQubm9kZS5kZXN0cm95KClcbiAgICAgICAgICAgICAgICBzZWxmLnBlcl9tb3ZlX21zZ193b3JkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHNlbGYubXNnX3NhdmVfYXJyLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIHNlbGYuaGFzX21zZ19tb3ZlaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGxldCB0ZW1wX3RhYiA9IHNlbGYubXNnX3NhdmVfYXJyLnBvcCgpXG4gICAgICAgICAgICAgICAgbGV0IG1zZ193b3JkID0gY3JlYXRlTGFiZWwodGVtcF90YWIubXNnLCB0ZW1wX3RhYi5jb2xvcilcbiAgICAgICAgICAgICAgICBsZXQgc2hvd190aW1lID0gdGVtcF90YWIuZGVsYXlfdGltZSB8fCAzO1xuICAgICAgICAgICAgICAgIHNlbGYucGVyX21vdmVfbXNnX3dvcmQgPSBtc2dfd29yZFxuICAgICAgICAgICAgICAgIGxldCBzZXF1ZW5jZV8xID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgZm9udF9zaXplID0gbXNnX3dvcmQubm9kZVxuICAgICAgICAgICAgICAgIGlmKGZvbnRfc2l6ZS53aWR0aCA+IHNpemUud2lkdGgpe1xuICAgICAgICAgICAgICAgICAgICBtc2dfd29yZC5ub2RlLnggPSAtc2l6ZS53aWR0aC8yO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW92ZV90b18gPSBjYy5tb3ZlVG8oMC4xLGNjLnYyKG1zZ193b3JkLm5vZGUueCwgLXNpemUuaGVpZ2h0IC8gMikpXG4gICAgICAgICAgICAgICAgICAgIGxldCBtb3ZlX3RvID0gY2MubW92ZVRvKHNob3dfdGltZSwgY2MudjIobXNnX3dvcmQubm9kZS54IC0gKGZvbnRfc2l6ZS53aWR0aCAtIHNpemUud2lkdGgpIC0gNSwgLXNpemUuaGVpZ2h0IC8gMikpXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWxheV90aW1lID0gY2MuZGVsYXlUaW1lKDEpXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlXzEgPSBjYy5zZXF1ZW5jZShtb3ZlX3RvXyxtb3ZlX3RvLGRlbGF5X3RpbWUsY2MuY2FsbEZ1bmMoZGVsZXRlTXNnKSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgbXNnX3dvcmQubm9kZS54ID0gLWZvbnRfc2l6ZS53aWR0aCAvIDJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlbGF5X3RpbWUgPSBjYy5kZWxheVRpbWUoc2hvd190aW1lKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbW92ZV90b18gPSBjYy5tb3ZlVG8oMC4xLGNjLnYyKG1zZ193b3JkLm5vZGUueCwgLXNpemUuaGVpZ2h0IC8gMikpXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlXzEgPSBjYy5zZXF1ZW5jZShtb3ZlX3RvXyxkZWxheV90aW1lLGNjLmNhbGxGdW5jKGRlbGV0ZU1zZykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1zZ193b3JkLm5vZGUucnVuQWN0aW9uKHNlcXVlbmNlXzEpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBzZWxmLm1zZ19zYXZlX2FyciA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYoc2VsZi5wZXJfYmdfaWNvbil7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGVyX2JnX2ljb24uZGVzdHJveSgpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGVyX2JnX2ljb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGVNc2coKVxuICAgIH0sXG4gICAgY3JlYXRlaG9yaXpvbnRhbExhYmVsKG1zZywgY29sb3IsIG1heF93aWR0aCwgZm9udHNpemUpe1xuICAgICAgICBsZXQgcmljaFRleHQgPSBuZXcgY2MuTm9kZSgpLmFkZENvbXBvbmVudChjYy5SaWNoVGV4dCk7XG4gICAgICAgIHJpY2hUZXh0Lm5vZGUuY29sb3IgPSBjb2xvciB8fCBuZXcgY2MuQ29sb3IoMjUsMzAsNDApO1xuICAgICAgICByaWNoVGV4dC5tYXhXaWR0aCA9IG1heF93aWR0aCB8fCAwO1xuICAgICAgICByaWNoVGV4dC5mb250U2l6ZSA9IGZvbnRzaXplO1xuICAgICAgICByaWNoVGV4dC5zdHJpbmcgPSBtc2dcbiAgICAgICAgcmV0dXJuIHJpY2hUZXh0XG4gICAgfSxcbn0pO1xuXG4vLyDlrp7kvovljJbljZXliKlcbkdsb2JhbE1lc3NhZ2VNZ3IuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFHbG9iYWxNZXNzYWdlTWdyLmluc3RhbmNlKSB7XG4gICAgICAgIEdsb2JhbE1lc3NhZ2VNZ3IuaW5zdGFuY2UgPSBuZXcgR2xvYmFsTWVzc2FnZU1ncigpO1xuICAgIH1cbiAgICByZXR1cm4gR2xvYmFsTWVzc2FnZU1nci5pbnN0YW5jZTtcbn1cblxuLy/lhajlsYAgbWVzc2FnZSDmj5DnpLrmlrnms5VcbndpbmRvdy5tZXNzYWdlID0gZnVuY3Rpb24gKG1zZywgY29sb3IpIHtcbiAgICBpZiAobXNnID09IG51bGwgfHwgbXNnID09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBHbG9iYWxNZXNzYWdlTWdyLmdldEluc3RhbmNlKCkuc2hvd01vdmVWZXJ0aWNhbChtc2csIGNvbG9yKTtcbn1cblxuLy/otYTkuqfmj5DnpLpcbndpbmRvdy5zaG93QXNzZXRzTXNnID0gZnVuY3Rpb24gKG1zZywgY29sb3IpIHtcbiAgICBtZXNzYWdlKG1zZywgY29sb3IpXG59Il19