(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/hero/skill/skill_item.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, '3c83dYQ0qxEqaYP0hNsEWJ0', 'skill_item'); // Scripts/mod/hero/skill/skill_item.js "use strict"; var TipsController = require("tips_controller"); var SkillItem = cc.Class({ "extends": ViewClass, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("hero", "skill_item"); this.initRootWnd(); this.data = null; this.position = null; this.sp_state = null; this.visible = true; this.is_show_tips = null; this.bg_status = true; this.btn_status = true; }, initRootWnd: function initRootWnd() { if (!this.prefabPath) return; LoaderManager.getInstance().loadRes(this.prefabPath, function (root_prefab) { this.root_wnd = root_prefab; if (this.scale) this.setScale(this.scale); if (this.parent) this.parent.addChild(this.root_wnd); if (this.position) this.root_wnd.position = this.position; this.initWidget(); this.root_wnd.active = this.visible; if (this.data) this.setData(this.data); if (this.lev_status != null) { this.setLeveStatus(this.lev_status); } if (this.recommondStatus != null) { this.showRecommondIcon(this.recommondStatus.bool, this.recommondStatus.qian_type); } if (this.bottomName != null) { this.showName(this.bottomName.bool, this.bottomName.name, this.bottomName.pos, this.bottomName.fontSize, this.bottomName.is_bg); } this.showBG(this.bg_status); }.bind(this)); }, initWidget: function initWidget() { this.background_sp = this.seekChild("background", cc.Sprite); this.skill_icon_sp = this.seekChild("skill_icon", cc.Sprite); this.level_bg_sp = this.seekChild("level_bg", cc.Sprite); this.level_lb = this.seekChild("level", cc.Label); this.btn = this.root_wnd.getComponent(cc.Button); this.registerEvent(); }, setData: function setData(skill_data) { if (!skill_data) { if (this.root_wnd) { // this.root_wnd.active = false; this.skill_icon_sp.node.active = false; } } this.data = skill_data; if (this.root_wnd) { this.updateWidget(); this.spriteUnabled(); this.buttonEnabled(); } }, setPosition: function setPosition(newPosOrX, y) { var x; if (y === undefined) { x = newPosOrX.x; y = newPosOrX.y; } else { x = newPosOrX; } var pos = cc.v2(x, y); this.position = pos; if (this.root_wnd) this.root_wnd.position = pos; }, setScale: function setScale(scale) { this.scale = scale; if (this.root_wnd) { this.root_wnd.scale = scale; } }, setShowTips: function setShowTips(bool) { this.is_show_tips = bool || false; }, updateWidget: function updateWidget() { this.skill_config = gdata("skill_data", "data_get_skill", this.data); if (!this.skill_config) return; var skill_icon_path = PathTool.getIconPath("skillicon", this.skill_config.icon); this.loadRes(skill_icon_path, function (icon_sf) { if (!this.root_wnd || !this.root_wnd.isValid) return; this.skill_icon_sp.spriteFrame = icon_sf; }.bind(this)); this.skill_icon_sp.node.active = true; this.level_lb.string = this.skill_config.level; this.upateStatu(); }, addCallBack: function addCallBack(callback) { this.callback = callback; }, setVisible: function setVisible(visible) { this.visible = visible; if (this.root_wnd) this.root_wnd.active = visible; }, // setSpStatus: function (state) { // this.sp_state = cc.Sprite.State.NORMAL; // if (!state) // this.sp_state = cc.Sprite.State.GRAY // if (this.root_wnd) { // this.upateStatu(); // } // }, upateStatu: function upateStatu() { if (this.sp_state === null) return; this.background_sp.setState(this.sp_state); this.skill_icon_sp.setState(this.sp_state); this.level_bg_sp.setState(this.sp_state); this.sp_state = null; }, setLeveStatus: function setLeveStatus(status) { this.lev_status = status; if (this.root_wnd) { this.level_lb.node.active = status; this.level_bg_sp.node.active = status; } }, //变灰 showUnEnabled: function showUnEnabled(bool) { this.is_unabled = bool; }, spriteUnabled: function spriteUnabled() { if (this.is_unabled) { this.background_sp.setState(cc.Sprite.State.GRAY); this.skill_icon_sp.setState(cc.Sprite.State.GRAY); this.level_bg_sp.setState(cc.Sprite.State.GRAY); } else { this.background_sp.setState(cc.Sprite.State.NORMAL); this.skill_icon_sp.setState(cc.Sprite.State.NORMAL); this.level_bg_sp.setState(cc.Sprite.State.NORMAL); } }, registerEvent: function registerEvent() { if (this.root_wnd) { this.root_wnd.on("click", function (event) { if (this.is_show_tips) { // if (event.type === cc.Node.EventType.TOUCH_END) { // this.root_wnd.scale = this.scale || 1; if (this.skill_config) { TipsController.getInstance().showSkillTips(this.skill_config, this.is_unabled || false, false, self.tips_hide_flag); } // } } if (this.callback) { this.callback(); } }, this); } }, showBG: function showBG(status) { this.bg_status = status; if (this.root_wnd) { if (this.bg_status) { this.background_sp.node.active = true; } else { this.background_sp.node.active = false; } } }, buttonEnabled: function buttonEnabled() { this.btn.enabled = this.btn_status; }, // --推荐标签 showRecommondIcon: function showRecommondIcon(bool, qian_type) { var self = this; this.recommondStatus = { bool: bool, qian_type: qian_type }; if (this.root_wnd == null) return; if (bool == false && self.recommond_icon_sp == null) return; if (!self.recommond_icon_sp) { self.recommond_icon_sp = Utils.createImage(self.root_wnd, null, -30, 27.5, cc.v2(0.5, 0.5), true, 10, true); self.recommond_lb = Utils.createLabel(18, new cc.Color(255, 255, 255), new cc.Color(10, 15, 15), -11.1, 12.8, "", self.recommond_icon_sp.node, 2, cc.v2(0.5, 0.5)); self.recommond_lb.node.setRotation(-45); this.recommond_icon_sp.node.setContentSize(74, 72); } if (bool == true) { self.recommond_icon_sp.node.active = true; qian_type = qian_type || 1; var str; var res; if (qian_type == 1) { str = Utils.TI18N("推荐"); res = PathTool.getUIIconPath("common", "common_30016"); //--紫色 self.recommond_lb.node.getComponent(cc.LabelOutline).color.fromHEX("#5C1B77"); //= new cc.Color(0x5c,0x1b,0x77) } else if (qian_type == 2) { str = Utils.TI18N("已领悟"); res = PathTool.getUIIconPath("common", "common_30013"); //--红色 self.recommond_lb.node.getComponent(cc.LabelOutline).color.fromHEX("#8E2B00"); // }elseif qian_type ==3 then // str = Utils.TI18N("神器") // res = PathTool.getUIIconPath("common","common_90015") --位置不同的红色 // self.recommond_icon:setPosition(34,89) // self.recommond_label:setPosition(29,25) // self.recommond_label:enableOutline(cc.c4b(0x95,0x0f,0x00,0xff), 2) // elseif qian_type == 4 then // str = Utils.TI18N("觉") // res = PathTool.getUIIconPath("common","common_90015")--位置不同的红色 // self.recommond_icon:setPosition(34,89) // self.recommond_label:setPosition(29,25) // self.recommond_label:enableOutline(cc.c4b(0x95,0x0f,0x00,0xff), 2) } else if (qian_type == 5) { str = Utils.TI18N("可领悟"); res = PathTool.getUIIconPath("common", "common_30015"); //--蓝色 self.recommond_lb.node.getComponent(cc.LabelOutline).color.fromHEX("#0055A6"); } else { // --无效类型 自行打印 self.recommond_icon.active = false; } this.loadRes(res, function (SpriteFrame) { this.recommond_icon_sp.spriteFrame = SpriteFrame; }.bind(this)); self.recommond_lb.string = str; } else { self.recommond_icon_sp.node.active = false; } }, //显示下方的名字 showName: function showName(bool, name, pos, fontSize, is_bg) { this.bottomName = { bool: bool, name: name, pos: pos, fontSize: fontSize, is_bg: is_bg }; if (this.root_wnd == null) return; var self = this; if (bool == false && !self.name) return; if (!self.name) { if (is_bg && self.name_bg == null) { var res = PathTool.getUIIconPath("common", "common_2028"); self.name_bg = Utils.createImage(self.root_wnd, null, 0, -75, cc.v2(0.5, 0.5), true, 0, true); self.name_bg.node.setContentSize(108, 30); this.loadRes(res, function (SpriteFrame) { this.name_bg.spriteFrame = SpriteFrame; }.bind(this)); } fontSize = fontSize || 24; self.name = Utils.createLabel(fontSize, new cc.Color(118, 69, 25), null, 0, -75, "", self.root_wnd, 1, cc.v2(0.5, 0.5)); } name = name || ""; self.name.string = name; self.name.node.active = bool; if (pos) { self.name.node.setPosition(pos); } }, // --desc:设置选中状态 setSelected: function setSelected(status) { var self = this; if (self.root_wnd == null || !self.select_bg && status == false) return; if (!self.select_bg) { var res = PathTool.getSelectBg(); self.select_bg = Utils.createImage(self.root_wnd, null, 0, 0, cc.v2(0.5, 0.5), true, null, true); this.loadRes(res, function (SpriteFrame) { self.select_bg.spriteFrame = SpriteFrame; }.bind(this)); self.select_bg.node.setContentSize(self.root_wnd.getContentSize()); } self.select_bg.node.active = status; } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvXFxza2lsbFxcc2tpbGxfaXRlbS5qcyJdLCJuYW1lcyI6WyJUaXBzQ29udHJvbGxlciIsInJlcXVpcmUiLCJTa2lsbEl0ZW0iLCJjYyIsIkNsYXNzIiwiVmlld0NsYXNzIiwiY3RvciIsInByZWZhYlBhdGgiLCJQYXRoVG9vbCIsImdldFByZWZhYlBhdGgiLCJpbml0Um9vdFduZCIsImRhdGEiLCJwb3NpdGlvbiIsInNwX3N0YXRlIiwidmlzaWJsZSIsImlzX3Nob3dfdGlwcyIsImJnX3N0YXR1cyIsImJ0bl9zdGF0dXMiLCJMb2FkZXJNYW5hZ2VyIiwiZ2V0SW5zdGFuY2UiLCJsb2FkUmVzIiwicm9vdF9wcmVmYWIiLCJyb290X3duZCIsInNjYWxlIiwic2V0U2NhbGUiLCJwYXJlbnQiLCJhZGRDaGlsZCIsImluaXRXaWRnZXQiLCJhY3RpdmUiLCJzZXREYXRhIiwibGV2X3N0YXR1cyIsInNldExldmVTdGF0dXMiLCJyZWNvbW1vbmRTdGF0dXMiLCJzaG93UmVjb21tb25kSWNvbiIsImJvb2wiLCJxaWFuX3R5cGUiLCJib3R0b21OYW1lIiwic2hvd05hbWUiLCJuYW1lIiwicG9zIiwiZm9udFNpemUiLCJpc19iZyIsInNob3dCRyIsImJpbmQiLCJiYWNrZ3JvdW5kX3NwIiwic2Vla0NoaWxkIiwiU3ByaXRlIiwic2tpbGxfaWNvbl9zcCIsImxldmVsX2JnX3NwIiwibGV2ZWxfbGIiLCJMYWJlbCIsImJ0biIsImdldENvbXBvbmVudCIsIkJ1dHRvbiIsInJlZ2lzdGVyRXZlbnQiLCJza2lsbF9kYXRhIiwibm9kZSIsInVwZGF0ZVdpZGdldCIsInNwcml0ZVVuYWJsZWQiLCJidXR0b25FbmFibGVkIiwic2V0UG9zaXRpb24iLCJuZXdQb3NPclgiLCJ5IiwieCIsInVuZGVmaW5lZCIsInYyIiwic2V0U2hvd1RpcHMiLCJza2lsbF9jb25maWciLCJnZGF0YSIsInNraWxsX2ljb25fcGF0aCIsImdldEljb25QYXRoIiwiaWNvbiIsImljb25fc2YiLCJpc1ZhbGlkIiwic3ByaXRlRnJhbWUiLCJzdHJpbmciLCJsZXZlbCIsInVwYXRlU3RhdHUiLCJhZGRDYWxsQmFjayIsImNhbGxiYWNrIiwic2V0VmlzaWJsZSIsInNldFN0YXRlIiwic3RhdHVzIiwic2hvd1VuRW5hYmxlZCIsImlzX3VuYWJsZWQiLCJTdGF0ZSIsIkdSQVkiLCJOT1JNQUwiLCJvbiIsImV2ZW50Iiwic2hvd1NraWxsVGlwcyIsInNlbGYiLCJ0aXBzX2hpZGVfZmxhZyIsImVuYWJsZWQiLCJyZWNvbW1vbmRfaWNvbl9zcCIsIlV0aWxzIiwiY3JlYXRlSW1hZ2UiLCJyZWNvbW1vbmRfbGIiLCJjcmVhdGVMYWJlbCIsIkNvbG9yIiwic2V0Um90YXRpb24iLCJzZXRDb250ZW50U2l6ZSIsInN0ciIsInJlcyIsIlRJMThOIiwiZ2V0VUlJY29uUGF0aCIsIkxhYmVsT3V0bGluZSIsImNvbG9yIiwiZnJvbUhFWCIsInJlY29tbW9uZF9pY29uIiwiU3ByaXRlRnJhbWUiLCJuYW1lX2JnIiwic2V0U2VsZWN0ZWQiLCJzZWxlY3RfYmciLCJnZXRTZWxlY3RCZyIsImdldENvbnRlbnRTaXplIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUlBLGNBQWMsR0FBR0MsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlDLFNBQVMsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDeEIsYUFBU0MsU0FEZTtBQUd4QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2pCLFNBQUtDLFVBQUwsR0FBa0JDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixNQUF2QixFQUErQixZQUEvQixDQUFsQjtBQUNBLFNBQUtDLFdBQUw7QUFDQSxTQUFLQyxJQUFMLEdBQVksSUFBWjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLQyxZQUFMLEdB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bEUsRUFBdUUsSUFBdkUsQ0FBakI7QUFDQSxXQUFLN0MsT0FBTCxDQUFhbUYsR0FBYixFQUFpQixVQUFTTyxXQUFULEVBQXFCO0FBQ3JDbkIsUUFBQUEsSUFBSSxDQUFDc0IsU0FBTCxDQUFldkMsV0FBZixHQUE2Qm9DLFdBQTdCO0FBQ0EsT0FGZ0IsQ0FFZm5FLElBRmUsQ0FFVixJQUZVLENBQWpCO0FBR0FnRCxNQUFBQSxJQUFJLENBQUNzQixTQUFMLENBQWV6RCxJQUFmLENBQW9CNkMsY0FBcEIsQ0FBbUNWLElBQUksQ0FBQ3JFLFFBQUwsQ0FBYzZGLGNBQWQsRUFBbkM7QUFDQTs7QUFDRHhCLElBQUFBLElBQUksQ0FBQ3NCLFNBQUwsQ0FBZXpELElBQWYsQ0FBb0I1QixNQUFwQixHQUE2QnNELE1BQTdCO0FBQ0E7QUFoU3VCLENBQVQsQ0FBaEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbInZhciBUaXBzQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ0aXBzX2NvbnRyb2xsZXJcIilcclxudmFyIFNraWxsSXRlbSA9IGNjLkNsYXNzKHtcclxuXHRleHRlbmRzOiBWaWV3Q2xhc3MsXHJcblxyXG5cdGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJoZXJvXCIsIFwic2tpbGxfaXRlbVwiKTtcclxuXHRcdHRoaXMuaW5pdFJvb3RXbmQoKVxyXG5cdFx0dGhpcy5kYXRhID0gbnVsbDtcclxuXHRcdHRoaXMucG9zaXRpb24gPSBudWxsO1xyXG5cdFx0dGhpcy5zcF9zdGF0ZSA9IG51bGw7XHJcblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xyXG5cdFx0dGhpcy5pc19zaG93X3RpcHMgPSBudWxsXHJcblx0XHR0aGlzLmJnX3N0YXR1cyA9IHRydWU7XHJcblx0XHR0aGlzLmJ0bl9zdGF0dXMgID0gdHJ1ZTtcclxuXHR9LFxyXG5cclxuXHRpbml0Um9vdFduZDogZnVuY3Rpb24gKCkge1xyXG5cdFx0aWYgKCF0aGlzLnByZWZhYlBhdGgpIHJldHVybjtcclxuXHRcdExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkUmVzKHRoaXMucHJlZmFiUGF0aCwgZnVuY3Rpb24gKHJvb3RfcHJlZmFiKSB7XHJcblx0XHRcdHRoaXMucm9vdF93bmQgPSByb290X3ByZWZhYjtcclxuXHRcdFx0aWYgKHRoaXMuc2NhbGUpXHJcblx0XHRcdFx0dGhpcy5zZXRTY2FsZSh0aGlzLnNjYWxlKVxyXG5cdFx0XHRpZiAodGhpcy5wYXJlbnQpXHJcblx0XHRcdFx0dGhpcy5wYXJlbnQuYWRkQ2hpbGQodGhpcy5yb290X3duZCk7XHJcblx0XHRcdGlmICh0aGlzLnBvc2l0aW9uKVxyXG5cdFx0XHRcdHRoaXMucm9vdF93bmQucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xyXG5cdFx0XHR0aGlzLmluaXRXaWRnZXQoKTtcclxuXHRcdFx0dGhpcy5yb290X3duZC5hY3RpdmUgPSB0aGlzLnZpc2libGU7XHJcblx0XHRcdGlmICh0aGlzLmRhdGEpXHJcblx0XHRcdFx0dGhpcy5zZXREYXRhKHRoaXMuZGF0YSk7XHJcblx0XHRcdGlmICh0aGlzLmxldl9zdGF0dXMgIT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMuc2V0TGV2ZVN0YXR1cyh0aGlzLmxldl9zdGF0dXMpXHJcblx0XHRcdH1cclxuXHRcdFx0aWYodGhpcy5yZWNvbW1vbmRTdGF0dXMgIT0gbnVsbCl7XHJcblx0XHRcdFx0dGhpcy5zaG93UmVjb21tb25kSWNvbih0aGlzLnJlY29tbW9uZFN0YXR1cy5ib29sLHRoaXMucmVjb21tb25kU3RhdHVzLnFpYW5fdHlwZSlcclxuXHRcdFx0fVxyXG5cdFx0XHRpZih0aGlzLmJvdHRvbU5hbWUgIT0gbnVsbCl7XHJcblx0XHRcdFx0dGhpcy5zaG93TmFtZSh0aGlzLmJvdHRvbU5hbWUuYm9vbCx0aGlzLmJvdHRvbU5hbWUubmFtZSx0aGlzLmJvdHRvbU5hbWUucG9zLHRoaXMuYm90dG9tTmFtZS5mb250U2l6ZSx0aGlzLmJvdHRvbU5hbWUuaXNfYmcpXHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5zaG93QkcodGhpcy5iZ19zdGF0dXMpO1xyXG5cdFx0fS5iaW5kKHRoaXMpKVxyXG5cdH0sXHJcblxyXG5cdGluaXRXaWRnZXQ6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHRoaXMuYmFja2dyb3VuZF9zcCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiLCBjYy5TcHJpdGUpO1xyXG5cdFx0dGhpcy5za2lsbF9pY29uX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJza2lsbF9pY29uXCIsIGNjLlNwcml0ZSk7XHJcblx0XHR0aGlzLmxldmVsX2JnX3NwICAgPSB0aGlzLnNlZWtDaGlsZChcImxldmVsX2JnXCIsIGNjLlNwcml0ZSk7XHJcblx0XHR0aGlzLmxldmVsX2xiICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImxldmVsXCIsIGNjLkxhYmVsKTtcclxuXHRcdHRoaXMuYnRuID0gdGhpcy5yb290X3duZC5nZXRDb21wb25lbnQoY2MuQnV0dG9uKVxyXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KClcclxuXHR9LFxyXG5cclxuXHRzZXREYXRhOiBmdW5jdGlvbiAoc2tpbGxfZGF0YSkge1xyXG5cdFx0aWYgKCFza2lsbF9kYXRhKSB7XHJcblx0XHRcdGlmICh0aGlzLnJvb3Rfd25kKXtcclxuXHRcdFx0XHQvLyB0aGlzLnJvb3Rfd25kLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2tpbGxfaWNvbl9zcC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLmRhdGEgPSBza2lsbF9kYXRhO1xyXG5cdFx0aWYgKHRoaXMucm9vdF93bmQpe1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVdpZGdldCgpO1xyXG5cdFx0XHR0aGlzLnNwcml0ZVVuYWJsZWQoKVxyXG5cdFx0XHR0aGlzLmJ1dHRvbkVuYWJsZWQoKVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbiAobmV3UG9zT3JYLHkpIHtcclxuXHRcdGxldCB4O1xyXG5cdFx0aWYgKHkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB4ID0gbmV3UG9zT3JYLng7XHJcbiAgICAgICAgICAgIHkgPSBuZXdQb3NPclgueTtcclxuICAgICAgICB9ZWxzZXtcclxuXHRcdFx0eCA9IG5ld1Bvc09yWDtcclxuXHRcdH1cclxuXHRcdGxldCBwb3MgPSBjYy52Mih4LHkpXHJcblx0XHR0aGlzLnBvc2l0aW9uID0gcG9zO1xyXG5cdFx0aWYgKHRoaXMucm9vdF93bmQpXHJcblx0XHRcdHRoaXMucm9vdF93bmQucG9zaXRpb24gPSBwb3M7XHJcblx0fSxcclxuXHJcblx0c2V0U2NhbGU6IGZ1bmN0aW9uIChzY2FsZSkge1xyXG5cdFx0dGhpcy5zY2FsZSA9IHNjYWxlO1xyXG5cdFx0aWYgKHRoaXMucm9vdF93bmQpe1xyXG5cdFx0XHR0aGlzLnJvb3Rfd25kLnNjYWxlID0gc2NhbGU7XHJcblx0XHR9XHJcblxyXG5cdH0sXHJcblx0c2V0U2hvd1RpcHMoYm9vbCl7XHJcblx0XHR0aGlzLmlzX3Nob3dfdGlwcyA9IGJvb2x8fCBmYWxzZVxyXG5cdH0sXHJcblxyXG5cdHVwZGF0ZVdpZGdldDogZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdHRoaXMuc2tpbGxfY29uZmlnID0gZ2RhdGEoXCJza2lsbF9kYXRhXCIsIFwiZGF0YV9nZXRfc2tpbGxcIiwgIHRoaXMuZGF0YSlcclxuXHRcdGlmICghdGhpcy5za2lsbF9jb25maWcpIHJldHVybjtcclxuXHJcblx0XHR2YXIgc2tpbGxfaWNvbl9wYXRoID0gUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJza2lsbGljb25cIiwgdGhpcy5za2lsbF9jb25maWcuaWNvbik7XHJcblx0XHR0aGlzLmxvYWRSZXMoc2tpbGxfaWNvbl9wYXRoLCBmdW5jdGlvbiAoaWNvbl9zZikge1xyXG5cdFx0XHRpZighdGhpcy5yb290X3duZCB8fCAhdGhpcy5yb290X3duZC5pc1ZhbGlkKXJldHVyblxyXG5cdFx0XHR0aGlzLnNraWxsX2ljb25fc3Auc3ByaXRlRnJhbWUgPSBpY29uX3NmO1xyXG5cdFx0fS5iaW5kKHRoaXMpKTtcclxuXHRcdHRoaXMuc2tpbGxfaWNvbl9zcC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcblx0XHR0aGlzLmxldmVsX2xiLnN0cmluZyA9IHRoaXMuc2tpbGxfY29uZmlnLmxldmVsO1xyXG5cclxuXHRcdHRoaXMudXBhdGVTdGF0dSgpO1xyXG5cdH0sXHJcblx0YWRkQ2FsbEJhY2soY2FsbGJhY2spe1xyXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXHJcblx0fSxcclxuXHRzZXRWaXNpYmxlOiBmdW5jdGlvbiAodmlzaWJsZSkge1xyXG5cdFx0dGhpcy52aXNpYmxlID0gdmlzaWJsZTtcclxuXHRcdGlmICh0aGlzLnJvb3Rfd25kKVxyXG5cdFx0XHR0aGlzLnJvb3Rfd25kLmFjdGl2ZSA9IHZpc2libGU7XHJcblx0fSxcclxuXHJcblx0Ly8gc2V0U3BTdGF0dXM6IGZ1bmN0aW9uIChzdGF0ZSkge1xyXG5cdC8vIFx0dGhpcy5zcF9zdGF0ZSA9IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUw7XHJcblx0Ly8gXHRpZiAoIXN0YXRlKVxyXG5cdC8vIFx0XHR0aGlzLnNwX3N0YXRlID0gY2MuU3ByaXRlLlN0YXRlLkdSQVlcclxuXHQvLyBcdGlmICh0aGlzLnJvb3Rfd25kKSB7XHJcblx0Ly8gXHRcdHRoaXMudXBhdGVTdGF0dSgpO1xyXG5cdC8vIFx0fVxyXG5cdC8vIH0sXHJcblxyXG5cclxuXHR1cGF0ZVN0YXR1OiBmdW5jdGlvbiAoKSB7XHJcblx0XHRpZiAodGhpcy5zcF9zdGF0ZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cdFx0dGhpcy5iYWNrZ3JvdW5kX3NwLnNldFN0YXRlKHRoaXMuc3Bfc3RhdGUpO1xyXG5cdFx0dGhpcy5za2lsbF9pY29uX3NwLnNldFN0YXRlKHRoaXMuc3Bfc3RhdGUpO1xyXG5cdFx0dGhpcy5sZXZlbF9iZ19zcC5zZXRTdGF0ZSh0aGlzLnNwX3N0YXRlKTtcclxuXHRcdHRoaXMuc3Bfc3RhdGUgPSBudWxsO1xyXG5cdH0sXHJcblxyXG5cdHNldExldmVTdGF0dXM6IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuXHRcdHRoaXMubGV2X3N0YXR1cyA9IHN0YXR1cztcclxuXHRcdGlmICh0aGlzLnJvb3Rfd25kKSB7XHJcblx0XHRcdHRoaXMubGV2ZWxfbGIubm9kZS5hY3RpdmUgPSBzdGF0dXM7XHJcblx0XHRcdHRoaXMubGV2ZWxfYmdfc3Aubm9kZS5hY3RpdmUgPSBzdGF0dXM7XHJcblx0XHR9XHJcblx0fSxcclxuXHQvL+WPmOeBsFxyXG5cdHNob3dVbkVuYWJsZWQoYm9vbCl7XHJcblx0XHR0aGlzLmlzX3VuYWJsZWQgPSBib29sXHJcblx0fSxcclxuXHRzcHJpdGVVbmFibGVkKCl7XHJcblx0XHRpZih0aGlzLmlzX3VuYWJsZWQpe1xyXG5cdFx0XHR0aGlzLmJhY2tncm91bmRfc3Auc2V0U3RhdGUoY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xyXG5cdFx0XHR0aGlzLnNraWxsX2ljb25fc3Auc2V0U3RhdGUoY2MuU3ByaXRlLlN0YXRlLkdSQVkpOyAgXHJcblx0XHRcdHRoaXMubGV2ZWxfYmdfc3Auc2V0U3RhdGUoY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdHRoaXMuYmFja2dyb3VuZF9zcC5zZXRTdGF0ZShjYy5TcHJpdGUuU3RhdGUuTk9STUFMKTtcclxuXHRcdFx0dGhpcy5za2lsbF9pY29uX3NwLnNldFN0YXRlKGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwpOyAgXHJcblx0XHRcdHRoaXMubGV2ZWxfYmdfc3Auc2V0U3RhdGUoY2MuU3ByaXRlLlN0YXRlLk5PUk1BTCk7XHJcblx0XHR9XHJcblxyXG5cdH0sXHJcblx0cmVnaXN0ZXJFdmVudCgpe1xyXG5cdFx0aWYodGhpcy5yb290X3duZCl7XHJcblx0XHRcdHRoaXMucm9vdF93bmQub24oXCJjbGlja1wiLGZ1bmN0aW9uKGV2ZW50KXtcclxuXHRcdFx0XHRpZih0aGlzLmlzX3Nob3dfdGlwcyl7XHJcblx0XHRcdFx0XHQvLyBpZiAoZXZlbnQudHlwZSA9PT0gY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5EKSB7XHJcblx0XHRcdFx0XHQvLyBcdHRoaXMucm9vdF93bmQuc2NhbGUgPSB0aGlzLnNjYWxlIHx8IDE7ICAgICBcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuc2tpbGxfY29uZmlnKXtcclxuXHRcdFx0XHRcdFx0XHRUaXBzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNob3dTa2lsbFRpcHModGhpcy5za2lsbF9jb25maWcsIHRoaXMuaXNfdW5hYmxlZCB8fCBmYWxzZSwgZmFsc2UsIHNlbGYudGlwc19oaWRlX2ZsYWcpXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYodGhpcy5jYWxsYmFjayl7XHJcblx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrKClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sdGhpcylcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRzaG93Qkc6IGZ1bmN0aW9uKHN0YXR1cykge1xyXG5cdFx0dGhpcy5iZ19zdGF0dXMgPSBzdGF0dXM7XHJcblx0XHRpZiAodGhpcy5yb290X3duZCkge1xyXG5cdFx0XHRpZiAodGhpcy5iZ19zdGF0dXMpICB7XHJcblx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kX3NwLm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmJhY2tncm91bmRfc3Aubm9kZS5hY3RpdmUgPSBmYWxzZTtcdFx0XHRcdFxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHRidXR0b25FbmFibGVkOmZ1bmN0aW9uKCkge1xyXG5cdFx0dGhpcy5idG4uZW5hYmxlZCA9IHRoaXMuYnRuX3N0YXR1cyBcclxuXHR9LFxyXG5cdC8vIC0t5o6o6I2Q5qCH562+XHJcblx0c2hvd1JlY29tbW9uZEljb24oYm9vbCxxaWFuX3R5cGUpe1xyXG5cdFx0dmFyIHNlbGYgPSB0aGlzXHJcblx0XHR0aGlzLnJlY29tbW9uZFN0YXR1cyA9IHtcclxuXHRcdFx0Ym9vbCA6IGJvb2wsXHJcblx0XHRcdHFpYW5fdHlwZSA6IHFpYW5fdHlwZSxcclxuXHRcdH1cclxuXHRcdGlmKHRoaXMucm9vdF93bmQgPT0gbnVsbCkgcmV0dXJuO1xyXG5cdFx0aWYoYm9vbCA9PSBmYWxzZSAmJiBzZWxmLnJlY29tbW9uZF9pY29uX3NwID09IG51bGwpICByZXR1cm47XHJcblx0XHRpZighc2VsZi5yZWNvbW1vbmRfaWNvbl9zcCl7XHJcblx0XHRcdHNlbGYucmVjb21tb25kX2ljb25fc3AgPSBVdGlscy5jcmVhdGVJbWFnZShzZWxmLnJvb3Rfd25kLG51bGwsLTMwLDI3LjUsY2MudjIoMC41LDAuNSksdHJ1ZSwxMCx0cnVlKVxyXG5cdFx0XHRzZWxmLnJlY29tbW9uZF9sYiA9IFV0aWxzLmNyZWF0ZUxhYmVsKDE4LG5ldyBjYy5Db2xvcigyNTUsMjU1LDI1NSksbmV3IGNjLkNvbG9yKDEwLDE1LDE1KSwtMTEuMSwxMi44LFwiXCIsc2VsZi5yZWNvbW1vbmRfaWNvbl9zcC5ub2RlLDIsIGNjLnYyKDAuNSwwLjUpKVxyXG5cdFx0XHRzZWxmLnJlY29tbW9uZF9sYi5ub2RlLnNldFJvdGF0aW9uKC00NSlcclxuXHRcdFx0dGhpcy5yZWNvbW1vbmRfaWNvbl9zcC5ub2RlLnNldENvbnRlbnRTaXplKDc0LDcyKVxyXG5cdFx0fVxyXG5cdFx0aWYoYm9vbCA9PSB0cnVlKXtcclxuXHRcdFx0c2VsZi5yZWNvbW1vbmRfaWNvbl9zcC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcblx0XHRcdHFpYW5fdHlwZSA9IHFpYW5fdHlwZSB8fCAxXHJcblx0XHRcdGxldCBzdHIgXHJcblx0XHRcdGxldCByZXMgXHJcblx0XHRcdGlmKHFpYW5fdHlwZSA9PSAxKXtcclxuXHRcdFx0XHRzdHIgPSBVdGlscy5USTE4TihcIuaOqOiNkFwiKVxyXG5cdFx0XHRcdHJlcyA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIixcImNvbW1vbl8zMDAxNlwiKSAvLy0t57Sr6ImyXHJcblx0XHRcdFx0c2VsZi5yZWNvbW1vbmRfbGIubm9kZS5nZXRDb21wb25lbnQoY2MuTGFiZWxPdXRsaW5lKS5jb2xvci5mcm9tSEVYKFwiIzVDMUI3N1wiKSAgLy89IG5ldyBjYy5Db2xvcigweDVjLDB4MWIsMHg3NylcclxuXHRcdFx0fWVsc2UgaWYocWlhbl90eXBlID09IDIpe1xyXG5cdFx0XHRcdHN0ciA9IFV0aWxzLlRJMThOKFwi5bey6aKG5oKfXCIpXHJcblx0XHRcdFx0cmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzMwMDEzXCIpIC8vLS3nuqLoibJcclxuXHRcdFx0XHRzZWxmLnJlY29tbW9uZF9sYi5ub2RlLmdldENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpLmNvbG9yLmZyb21IRVgoXCIjOEUyQjAwXCIpXHJcblx0XHQvLyBcdH1lbHNlaWYgcWlhbl90eXBlID09MyB0aGVuXHJcblx0XHQvLyBcdFx0c3RyID0gVXRpbHMuVEkxOE4oXCLnpZ7lmahcIilcclxuXHRcdC8vIFx0XHRyZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsXCJjb21tb25fOTAwMTVcIikgLS3kvY3nva7kuI3lkIznmoTnuqLoibJcclxuXHRcdC8vIFx0XHRzZWxmLnJlY29tbW9uZF9pY29uOnNldFBvc2l0aW9uKDM0LDg5KVxyXG5cdFx0Ly8gXHRcdHNlbGYucmVjb21tb25kX2xhYmVsOnNldFBvc2l0aW9uKDI5LDI1KVxyXG5cdFx0Ly8gXHRcdHNlbGYucmVjb21tb25kX2xhYmVsOmVuYWJsZU91dGxpbmUoY2MuYzRiKDB4OTUsMHgwZiwweDAwLDB4ZmYpLCAyKVxyXG5cdFx0Ly8gXHRlbHNlaWYgcWlhbl90eXBlID09IDQgdGhlblxyXG5cdFx0Ly8gXHRcdHN0ciA9IFV0aWxzLlRJMThOKFwi6KeJXCIpXHJcblx0XHQvLyBcdFx0cmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzkwMDE1XCIpLS3kvY3nva7kuI3lkIznmoTnuqLoibJcclxuXHRcdC8vIFx0XHRzZWxmLnJlY29tbW9uZF9pY29uOnNldFBvc2l0aW9uKDM0LDg5KVxyXG5cdFx0Ly8gXHRcdHNlbGYucmVjb21tb25kX2xhYmVsOnNldFBvc2l0aW9uKDI5LDI1KVxyXG5cdFx0Ly8gXHRcdHNlbGYucmVjb21tb25kX2xhYmVsOmVuYWJsZU91dGxpbmUoY2MuYzRiKDB4OTUsMHgwZiwweDAwLDB4ZmYpLCAyKVxyXG5cdFx0XHR9ZWxzZSBpZihxaWFuX3R5cGUgPT0gNSl7XHJcblx0XHRcdFx0c3RyID0gVXRpbHMuVEkxOE4oXCLlj6/poobmgp9cIilcclxuXHRcdFx0XHRyZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsXCJjb21tb25fMzAwMTVcIikgLy8tLeiTneiJslxyXG5cdFx0XHRcdHNlbGYucmVjb21tb25kX2xiLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuY29sb3IuZnJvbUhFWChcIiMwMDU1QTZcIilcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0Ly8gLS3ml6DmlYjnsbvlnosg6Ieq6KGM5omT5Y2wXHJcblx0XHRcdFx0c2VsZi5yZWNvbW1vbmRfaWNvbi5hY3RpdmUgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmxvYWRSZXMocmVzLGZ1bmN0aW9uKFNwcml0ZUZyYW1lKXtcclxuXHRcdFx0XHR0aGlzLnJlY29tbW9uZF9pY29uX3NwLnNwcml0ZUZyYW1lID0gU3ByaXRlRnJhbWVcclxuXHRcdFx0fS5iaW5kKHRoaXMpKVxyXG5cdFx0XHRzZWxmLnJlY29tbW9uZF9sYi5zdHJpbmcgPSBzdHI7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0c2VsZi5yZWNvbW1vbmRfaWNvbl9zcC5ub2RlLmFjdGl2ZSA9IGZhbHNlOyAgICAgXHJcblx0XHR9XHJcblx0fSxcclxuXHQvL+aYvuekuuS4i+aWueeahOWQjeWtl1xyXG5cdHNob3dOYW1lKGJvb2wsbmFtZSxwb3MsZm9udFNpemUsIGlzX2JnKXtcclxuXHRcdHRoaXMuYm90dG9tTmFtZSA9IHtcclxuXHRcdFx0Ym9vbDpib29sLFxyXG5cdFx0XHRuYW1lOm5hbWUsXHJcblx0XHRcdHBvczpwb3MsXHJcblx0XHRcdGZvbnRTaXplOmZvbnRTaXplLCBcclxuXHRcdFx0aXNfYmc6aXNfYmdcclxuXHRcdH1cclxuXHRcdGlmKHRoaXMucm9vdF93bmQgPT0gbnVsbClyZXR1cm5cclxuXHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdGlmKGJvb2wgPT0gZmFsc2UgJiYgIXNlbGYubmFtZSkgcmV0dXJuO1xyXG5cdFx0aWYoIXNlbGYubmFtZSl7IFxyXG5cdFx0XHRpZihpc19iZyAmJiBzZWxmLm5hbWVfYmcgPT0gbnVsbCl7XHJcblx0XHRcdFx0bGV0IHJlcyA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIixcImNvbW1vbl8yMDI4XCIpXHJcblx0XHRcdFx0c2VsZi5uYW1lX2JnID0gVXRpbHMuY3JlYXRlSW1hZ2Uoc2VsZi5yb290X3duZCwgbnVsbCAsIDAsLTc1LCBjYy52MigwLjUsMC41KSwgdHJ1ZSwgMCwgdHJ1ZSlcclxuXHRcdFx0XHRzZWxmLm5hbWVfYmcubm9kZS5zZXRDb250ZW50U2l6ZSgxMDgsMzApXHJcblx0XHRcdFx0dGhpcy5sb2FkUmVzKHJlcyxmdW5jdGlvbihTcHJpdGVGcmFtZSl7XHJcblx0XHRcdFx0XHR0aGlzLm5hbWVfYmcuc3ByaXRlRnJhbWUgPSBTcHJpdGVGcmFtZVxyXG5cdFx0XHRcdH0uYmluZCh0aGlzKSlcclxuXHRcdFx0fVxyXG5cdFx0XHRmb250U2l6ZSA9IGZvbnRTaXplIHx8IDI0XHJcblx0XHRcdHNlbGYubmFtZSA9IFV0aWxzLmNyZWF0ZUxhYmVsKGZvbnRTaXplLG5ldyBjYy5Db2xvcigxMTgsNjksMjUpLG51bGwsMCwtNzUsXCJcIixzZWxmLnJvb3Rfd25kLDEsIGNjLnYyKDAuNSwwLjUpKVxyXG5cdFx0fVxyXG5cdFx0bmFtZSA9IG5hbWUgfHwgXCJcIlxyXG5cdFx0c2VsZi5uYW1lLnN0cmluZyA9IG5hbWU7XHJcblx0XHRzZWxmLm5hbWUubm9kZS5hY3RpdmUgPSBib29sO1xyXG5cdFx0aWYocG9zKXsgXHJcblx0XHRcdHNlbGYubmFtZS5ub2RlLnNldFBvc2l0aW9uKHBvcylcclxuXHRcdH1cclxuXHR9LFxyXG5cdC8vIC0tZGVzYzrorr7nva7pgInkuK3nirbmgIFcclxuXHRzZXRTZWxlY3RlZChzdGF0dXMpe1xyXG5cdFx0dmFyICBzZWxmID0gdGhpc1xyXG5cdFx0aWYoc2VsZi5yb290X3duZCA9PSBudWxsIHx8ICFzZWxmLnNlbGVjdF9iZyAmJiBzdGF0dXMgPT0gZmFsc2UpIHJldHVybiBcclxuXHJcblx0XHRpZighc2VsZi5zZWxlY3RfYmcpeyBcclxuXHRcdFx0bGV0IHJlcz0gUGF0aFRvb2wuZ2V0U2VsZWN0QmcoKVxyXG5cdFx0XHRzZWxmLnNlbGVjdF9iZyA9IFV0aWxzLmNyZWF0ZUltYWdlKHNlbGYucm9vdF93bmQsIG51bGwgLCAwLDAsIGNjLnYyKDAuNSwwLjUpLCB0cnVlLG51bGwsdHJ1ZSlcclxuXHRcdFx0dGhpcy5sb2FkUmVzKHJlcyxmdW5jdGlvbihTcHJpdGVGcmFtZSl7XHJcblx0XHRcdFx0c2VsZi5zZWxlY3RfYmcuc3ByaXRlRnJhbWUgPSBTcHJpdGVGcmFtZVxyXG5cdFx0XHR9LmJpbmQodGhpcykpXHJcblx0XHRcdHNlbGYuc2VsZWN0X2JnLm5vZGUuc2V0Q29udGVudFNpemUoc2VsZi5yb290X3duZC5nZXRDb250ZW50U2l6ZSgpKVxyXG5cdFx0fVxyXG5cdFx0c2VsZi5zZWxlY3RfYmcubm9kZS5hY3RpdmUgPSBzdGF0dXM7XHJcblx0fSxcclxuXHJcblxyXG59KTsiXX0=