(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/friend/view/friend_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, '206f7ai3axIgJQSSPY0yn2p', 'friend_window'); // Scripts/mod/friend/view/friend_window.js "use strict"; // -------------------------------------------------------------------- // @author: shiraho@syg.com(必填, 创建模块的人员) // @description: // 好友主界面 //
Create: new Date().toISOString() // -------------------------------------------------------------------- var FriendController = require("friend_controller"); var RoleController = require("role_controller"); var CommonScrollView = require("common_scrollview"); var FriendListItem = require("friend_list_item"); var FriendConst = require("friend_const"); var FriendEvent = require("friend_event"); var FriendAwardPanel = require("friend_award_panel"); var FriendApplyPanel = require("friend_apply_panel"); var FriendBlackPanel = require("friend_black_panel"); var FriendListPanel = require("friend_list_panel"); var MainuiConst = require("mainui_const"); var FriendWindow = cc.Class({ "extends": CommonWindowTab, ctor: function ctor() { this.ctrl = FriendController.getInstance(); this.win_type = WinType.Full; this.viewTag = SCENE_TAG.ui; this.tab_info_list = [{ label: Utils.TI18N("我的好友"), index: FriendConst.Type.MyFriend, status: true }, { label: Utils.TI18N("领取礼物"), index: FriendConst.Type.Award, status: true }, { label: Utils.TI18N("申请列表"), index: FriendConst.Type.ApplyList, status: true }, { label: Utils.TI18N("黑名单"), index: FriendConst.Type.BlackList, status: true }]; this.title_str = Utils.TI18N("好友"); this.view_list = {}; this.friend_list = {}; this.scroll_width = 630; this.scroll_height = 614; this.rend_list = {}; this.cache_lit = {}; this.role_vo = RoleController.getInstance().getRoleVo(); }, initPanel: function initPanel() { var scroll_view_size = cc.size(this.scroll_width, this.scroll_height); var setting = { item_class: FriendListItem, // 单元类 start_x: 7.5, // 第一个单元的X起点 space_x: 0, // x方向的间隔 start_y: 0, // 第一个单元的Y起点 space_y: 2, // y方向的间隔 item_width: 624, // 单元的尺寸width item_height: 114, // 单元的尺寸height row: 0, // 行数,作用于水平滚动类型 col: 1, // 列数,作用于垂直滚动类型 once_num: 1, need_dynamic: true }; this.item_scrollview = new CommonScrollView(); this.item_scrollview.createScroll(this.scroll_con, cc.v2(0, 65), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5)); }, registerEvent: function registerEvent() { //申请好友列表返回 this.addGlobalEvent(FriendEvent.FRIEND_APPLY, function () { if (this.cur_type != FriendConst.Type.ApplyList) return; this.updateFriendList(false); }.bind(this)); //赠送返回 this.addGlobalEvent(FriendEvent.STRENGTH_UPDATE, function (data) { if (this.cur_type != FriendConst.Type.Award && this.cur_type != FriendConst.Type.MyFriend) return; var list = data.list || {}; var id_list = {}; for (var i in list) { var v = list[i]; id_list[v.rid + "_" + v.srv_id] = v; } var item_list = this.item_scrollview.getItemList(); if (item_list) { for (var k in item_list) { var v = item_list[k]; var vo = v.getData(); if (vo && id_list[vo.rid + "_" + vo.srv_id]) { v.setData(id_list[vo.rid + "_" + vo.srv_id]); } } } }.bind(this)); //删除好友返回 this.addGlobalEvent(FriendEvent.FRIEND_DELETE, function () { if (this.cur_type != FriendConst.Type.MyFriend && this.cur_type != FriendConst.Type.BlackList) return; this.updateFriendList(false, true); this.changeFriendBtn(true); }.bind(this)); //增加好友 this.addGlobalEvent(FriendEvent.UPDATE_APPLY, function () { if (this.cur_type != FriendConst.Type.MyFriend) { this.setTabTips(true, FriendConst.Type.MyFriend); if (this.cur_type == FriendConst.Type.ApplyList) { this.updateFriendList(false); } } else { this.updateFriendList(false); } this.showRedPoint(); }.bind(this)); //友情点变化更新 if (this.role_vo != null) { if (this.role_assets_event == null) { this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) { if (key == "friend_point") { if (this.cur_type == FriendConst.Type.MyFriend || this.cur_type == FriendConst.Type.Award) { if (this.pre_panel && this.pre_panel.setFriendPoint) this.pre_panel.setFriendPoint(); } } }.bind(this)); } } this.addGlobalEvent(FriendEvent.UPDATE_COUNT, function () { this.updateFriendList(false); this.showRedPoint(); }.bind(this)); //被删好友 this.addGlobalEvent(FriendEvent.UPDATE_GROUP_COUNT, function () { this.updateFriendList(false, true); this.showRedPoint(); }.bind(this)); //有人来礼物 this.addGlobalEvent(FriendEvent.FRIEND_LIST, function () { this.updateFriendList(false); this.showRedPoint(); }.bind(this)); //更新红点用 this.addGlobalEvent(FriendEvent.Update_Red_Point, function () { this.showRedPoint(); }.bind(this)); }, openRootWnd: function openRootWnd(type) { type = type || FriendConst.Type.MyFriend; this.setSelecteTab(type, true); this.showRedPoint(); }, //切换标签页 selectedTabCallBack: function selectedTabCallBack(type) { type = type || FriendConst.Type.MyFriend; if (this.cur_type == type) return; this.changeFriendBtn(false); // //切换到好友列表就把红点清掉 this.setTabTips(false, FriendConst.Type.MyFriend); this.cur_type = type; if (this.pre_panel != null) { if (this.pre_panel.setVisibleStatus) this.pre_panel.setVisibleStatus(false); } this.pre_panel = this.createSubPanel(this.cur_type); if (this.pre_panel != null) { if (this.pre_panel.setVisibleStatus) this.pre_panel.setVisibleStatus(true); } if (this.cur_type == FriendConst.Type.MyFriend) { this.scroll_con.y = 433; this.scroll_con.setContentSize(cc.size(this.scroll_width, this.scroll_height)); this.item_scrollview.resetSize(cc.size(this.scroll_width, this.scroll_height)); } else if (this.cur_type == FriendConst.Type.Award) { this.scroll_con.y = 375; this.scroll_con.setContentSize(cc.size(this.scroll_width, 600)); this.item_scrollview.resetSize(cc.size(this.scroll_width, 674)); } else { this.scroll_con.y = 323; this.scroll_con.setContentSize(cc.size(this.scroll_width, 724)); this.item_scrollview.resetSize(cc.size(this.scroll_width, 724)); } // //更新列表数据 this.updateFriendList(true); }, createSubPanel: function createSubPanel(index) { var panel = this.view_list[index]; if (panel == null) { if (index == FriendConst.Type.MyFriend) { panel = new FriendListPanel(); } else if (index == FriendConst.Type.ApplyList) { panel = new FriendApplyPanel(this.container); } else if (index == FriendConst.Type.Award) { panel = new FriendAwardPanel(); } else if (index == FriendConst.Type.BlackList) { panel = new FriendBlackPanel(); } panel.show(); var size = this.container.getContentSize(); // panel.setPosition(cc.v2(size.width / 2, 405)); panel.setParent(this.container); this.view_list[index] = panel; } if (panel && panel.setCallFun) { panel.setCallFun(function (is_del) { if (index == FriendConst.Type.MyFriend) { is_del = is_del || false; this.changeFriendBtn(is_del); } }.bind(this)); } return panel; }, //变更好友子项的按钮作用,true变为删除好友,false还原为私聊 changeFriendBtn: function changeFriendBtn(bool) { this.del_friend_status = bool; for (var i = 0; i < this.rend_list.length; ++i) { this.rend_list[i].del_status = bool; } this.item_scrollview.resetAddPosition(this.rend_list, null, this.cur_type); // var item_list = this.item_scrollview.getItemList(); // if (item_list) { // for (var k in item_list) { // item_list[k].setDelStatus(bool) // } // } }, updateFriendList: function updateFriendList(change_index, is_del) { change_index = change_index || false; this.rend_list = []; var list = []; if (this.cur_type == FriendConst.Type.MyFriend) { list = this.ctrl.getModel().getArray() || []; } else if (this.cur_type == FriendConst.Type.ApplyList) { if (change_index == true) { this.ctrl.apply(); return; } else { var array = []; var apply_list = this.ctrl.getModel().getApplyList() || {}; for (var i in apply_list) { array.push(apply_list[i]); } list = array; } this.updateApplyNum(); } else if (this.cur_type == FriendConst.Type.Award) { var array = this.ctrl.getModel().getArray() || []; var award_array = []; for (var i = 0; i < array.length; i++) { var vo = array[i]; if (vo && vo.is_draw == 1) { award_array.push(vo); } } list = award_array; } else if (this.cur_type == FriendConst.Type.BlackList) { list = this.ctrl.getModel().getBlackArray() || []; } if (list) { for (var k in list) { if (list[k]) { this.rend_list.push(list[k]); } } } this.showEmptyIcon(false); if (this.rend_list.length <= 0) { this.showEmptyIcon(true); } this.pre_panel.setData(this.rend_list); if (is_del == true && change_index == false && Utils.next(this.rend_list) != null) this.item_scrollview.setData(this.rend_list, null);else { this.item_scrollview.setData(this.rend_list, null, this.cur_type); } }, //更新申请数 updateApplyNum: function updateApplyNum() { if (this.pre_panel && this.pre_panel.setApplyNum) { var num = this.ctrl.getModel().getApplyNum() || 0; this.pre_panel.setApplyNum(num); } }, //红点处理 showRedPoint: function showRedPoint() { var award_num = this.ctrl.getModel().getAwardNum() || 0; this.setTabTipsII(award_num, FriendConst.Type.Award); var appl_num = this.ctrl.getModel().getApplyNum() || 0; this.setTabTipsII(appl_num, FriendConst.Type.ApplyList); var list = [{ bid: 1, num: award_num }, { bid: 2, num: appl_num }]; require("mainui_controller").getInstance().setFunctionTipsStatus(MainuiConst.icon.friend, list); }, //显示空白 showEmptyIcon: function showEmptyIcon(bool) { if (!this.empty_con && bool == false) return; var str = "暂无好友"; if (this.cur_type == FriendConst.Type.Award) { str = "暂无好友赠送"; } else if (this.cur_type == FriendConst.Type.ApplyList) { str = "暂无好友申请"; } else if (this.cur_type == FriendConst.Type.BlackList) { str = "暂无拉黑名单"; } this.empty_label.string = str; this.empty_con.active = bool; }, closeCallBack: function closeCallBack() { this.ctrl.openFriendWindow(false); if (this.item_scrollview) { this.item_scrollview.DeleteMe(); this.item_scrollview = null; } for (var i in this.view_list) { var v = this.view_list[i]; if (v && v.deleteMe) { v.deleteMe(); v = null; } } this.view_list = null; if (this.role_vo != null) { if (this.role_assets_event != null) { this.role_vo.unbind(this.role_assets_event); this.role_assets_event = null; } } } }); module.exports = FriendWindow; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxmcmllbmRcXHZpZXdcXGZyaWVuZF93aW5kb3cuanMiXSwibmFtZXMiOlsiRnJpZW5kQ29udHJvbGxlciIsInJlcXVpcmUiLCJSb2xlQ29udHJvbGxlciIsIkNvbW1vblNjcm9sbFZpZXciLCJGcmllbmRMaXN0SXRlbSIsIkZyaWVuZENvbnN0IiwiRnJpZW5kRXZlbnQiLCJGcmllbmRBd2FyZFBhbmVsIiwiRnJpZW5kQXBwbHlQYW5lbCIsIkZyaWVuZEJsYWNrUGFuZWwiLCJGcmllbmRMaXN0UGFuZWwiLCJNYWludWlDb25zdCIsIkZyaWVuZFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJDb21tb25XaW5kb3dUYWIiLCJjdG9yIiwiY3RybCIsImdldEluc3RhbmNlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiRnVsbCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJ1aSIsInRhYl9pbmZvX2xpc3QiLCJsYWJlbCIsIlV0aWxzIiwiVEkxOE4iLCJpbmRleCIsIlR5cGUiLCJNeUZyaWVuZCIsInN0YXR1cyIsIkF3YXJkIiwiQXBwbHlMaXN0IiwiQmxhY2tMaXN0IiwidGl0bGVfc3RyIiwidmlld19saXN0IiwiZnJpZW5kX2xpc3QiLCJzY3JvbGxfd2lkdGgiLCJzY3JvbGxfaGVpZ2h0IiwicmVuZF9saXN0IiwiY2FjaGVfbGl0Iiwicm9sZV92byIsImdldFJvbGVWbyIsImluaXRQYW5lbCIsInNjcm9sbF92aWV3X3NpemUiLCJzaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwib25jZV9udW0iLCJuZWVkX2R5bmFtaWMiLCJpdGVtX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJzY3JvbGxfY29uIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJyZWdpc3RlckV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJGUklFTkRfQVBQTFkiLCJjdXJfdHlwZSIsInVwZGF0ZUZyaWVuZExpc3QiLCJiaW5kIiwiU1RSRU5HVEhfVVBEQVRFIiwiZGF0YSIsImxpc3QiLCJpZF9saXN0IiwiaSIsInYiLCJyaWQiLCJzcnZfaWQiLCJpdGVtX2xpc3QiLCJnZXRJdGVtTGlzdCIsImsiLCJ2byIsImdldERhdGEiLCJzZXREYXRhIiwiRlJJRU5EX0RFTEVURSIsImNoYW5nZUZyaWVuZEJ0biIsIlVQREFURV9BUFBMWSIsInNldFRhYlRpcHMiLCJzaG93UmVkUG9pbnQiLCJyb2xlX2Fzc2V0c19ldmVudCIsIkV2ZW50SWQiLCJVUERBVEVfUk9MRV9BVFRSSUJVVEUiLCJrZXkiLCJ2YWx1ZSIsInByZV9wYW5lbCIsInNldEZyaWVuZFBvaW50IiwiVVBEQVRFX0NPVU5UIiwiVVBEQVRFX0dST1VQX0NPVU5UIiwiRlJJRU5EX0xJU1QiLCJVcGRhdGVfUmVkX1BvaW50Iiwib3BlblJvb3RXbmQiLCJ0eXBlIiwic2V0U2VsZWN0ZVRhYiIsInNlbGVjdGVkVGFiQ2FsbEJhY2siLCJzZXRWaXNpYmxlU3RhdHVzIiwiY3JlYXRlU3ViUGFuZWwiLCJ5Iiwic2V0Q29udGVudFNpemUiLCJyZXNldFNpemUiLCJwYW5lbCIsImNvbnRhaW5lciIsInNob3ciLCJnZXRDb250ZW50U2l6ZSIsInNldFBhcmVudCIsInNldENhbGxGdW4iLCJpc19kZWwiLCJib29sIiwiZGVsX2ZyaWVuZF9zdGF0dXMiLCJsZW5ndGgiLCJkZWxfc3RhdHVzIiwicmVzZXRBZGRQb3NpdGlvbiIsImNoYW5nZV9pbmRleCIsImdldE1vZGVsIiwiZ2V0QXJyYXkiLCJhcHBseSIsImFycmF5IiwiYXBwbHlfbGlzdCIsImdldEFwcGx5TGlzdCIsInB1c2giLCJ1cGRhdGVBcHBseU51bSIsImF3YXJkX2FycmF5IiwiaXNfZHJhdyIsImdldEJsYWNrQXJyYXkiLCJzaG93RW1wdHlJY29uIiwibmV4dCIsInNldEFwcGx5TnVtIiwibnVtIiwiZ2V0QXBwbHlOdW0iLCJhd2FyZF9udW0iLCJnZXRBd2FyZE51bSIsInNldFRhYlRpcHNJSSIsImFwcGxfbnVtIiwiYmlkIiwic2V0RnVuY3Rpb25UaXBzU3RhdHVzIiwiaWNvbiIsImZyaWVuZCIsImVtcHR5X2NvbiIsInN0ciIsImVtcHR5X2xhYmVsIiwic3RyaW5nIiwiYWN0aXZlIiwiY2xvc2VDYWxsQmFjayIsIm9wZW5GcmllbmRXaW5kb3ciLCJEZWxldGVNZSIsImRlbGV0ZU1lIiwidW5iaW5kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlDLGNBQWMsR0FBR0QsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlFLGdCQUFnQixHQUFHRixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUcsY0FBYyxHQUFHSCxPQUFPLENBQUMsa0JBQUQsQ0FBNUI7O0FBQ0EsSUFBSUksV0FBVyxHQUFHSixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJSyxXQUFXLEdBQUdMLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlNLGdCQUFnQixHQUFHTixPQUFPLENBQUMsb0JBQUQsQ0FBOUI7O0FBQ0EsSUFBSU8sZ0JBQWdCLEdBQUdQLE9BQU8sQ0FBQyxvQkFBRCxDQUE5Qjs7QUFDQSxJQUFJUSxnQkFBZ0IsR0FBR1IsT0FBTyxDQUFDLG9CQUFELENBQTlCOztBQUNBLElBQUlTLGVBQWUsR0FBR1QsT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLElBQUlVLFdBQVcsR0FBR1YsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBRUEsSUFBSVcsWUFBWSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUN4QixhQUFTQyxlQURlO0FBRXhCQyxFQUFB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SUFBZ0IsSUFBcEIsRUFBMEI7QUFDdEIsVUFBSSxLQUFLa0QsaUJBQUwsSUFBMEIsSUFBOUIsRUFBb0M7QUFDaEMsYUFBS2xELE9BQUwsQ0FBYW9ILE1BQWIsQ0FBb0IsS0FBS2xFLGlCQUF6QjtBQUNBLGFBQUtBLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0g7QUFDSjtBQUVKO0FBN1V1QixDQUFULENBQW5CO0FBa1ZBbUUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCckosWUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIEBhdXRob3I6IHNoaXJhaG9Ac3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOWlveWPi+S4u+eVjOmdolxyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbnZhciBGcmllbmRDb250cm9sbGVyID0gcmVxdWlyZShcImZyaWVuZF9jb250cm9sbGVyXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcclxudmFyIEZyaWVuZExpc3RJdGVtID0gcmVxdWlyZShcImZyaWVuZF9saXN0X2l0ZW1cIik7XHJcbnZhciBGcmllbmRDb25zdCA9IHJlcXVpcmUoXCJmcmllbmRfY29uc3RcIik7XHJcbnZhciBGcmllbmRFdmVudCA9IHJlcXVpcmUoXCJmcmllbmRfZXZlbnRcIik7XHJcbnZhciBGcmllbmRBd2FyZFBhbmVsID0gcmVxdWlyZShcImZyaWVuZF9hd2FyZF9wYW5lbFwiKTtcclxudmFyIEZyaWVuZEFwcGx5UGFuZWwgPSByZXF1aXJlKFwiZnJpZW5kX2FwcGx5X3BhbmVsXCIpO1xyXG52YXIgRnJpZW5kQmxhY2tQYW5lbCA9IHJlcXVpcmUoXCJmcmllbmRfYmxhY2tfcGFuZWxcIik7XHJcbnZhciBGcmllbmRMaXN0UGFuZWwgPSByZXF1aXJlKFwiZnJpZW5kX2xpc3RfcGFuZWxcIik7XHJcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XHJcblxyXG52YXIgRnJpZW5kV2luZG93ID0gY2MuQ2xhc3Moe1xyXG4gICAgZXh0ZW5kczogQ29tbW9uV2luZG93VGFiLFxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY3RybCA9IEZyaWVuZENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsO1xyXG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy51aTsgXHJcbiAgICAgICAgdGhpcy50YWJfaW5mb19saXN0ID0gW1xyXG4gICAgICAgICAgICB7IGxhYmVsOiBVdGlscy5USTE4TihcIuaIkeeahOWlveWPi1wiKSwgaW5kZXg6IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQsIHN0YXR1czogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiBVdGlscy5USTE4TihcIumihuWPluekvOeJqVwiKSwgaW5kZXg6IEZyaWVuZENvbnN0LlR5cGUuQXdhcmQsIHN0YXR1czogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiBVdGlscy5USTE4TihcIueUs+ivt+WIl+ihqFwiKSwgaW5kZXg6IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0LCBzdGF0dXM6IHRydWUgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogVXRpbHMuVEkxOE4oXCLpu5HlkI3ljZVcIiksIGluZGV4OiBGcmllbmRDb25zdC5UeXBlLkJsYWNrTGlzdCwgc3RhdHVzOiB0cnVlIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudGl0bGVfc3RyID0gVXRpbHMuVEkxOE4oXCLlpb3lj4tcIik7XHJcbiAgICAgICAgdGhpcy52aWV3X2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmZyaWVuZF9saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5zY3JvbGxfd2lkdGggPSA2MzA7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxfaGVpZ2h0ID0gNjE0O1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRfbGlzdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGVfbGl0ID0ge307XHJcbiAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSBjYy5zaXplKHRoaXMuc2Nyb2xsX3dpZHRoLCB0aGlzLnNjcm9sbF9oZWlnaHQpXHJcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1fY2xhc3M6IEZyaWVuZExpc3RJdGVtLCAgICAgIC8vIOWNleWFg+exu1xyXG4gICAgICAgICAgICBzdGFydF94OiA3LjUsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3k6IDIsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcclxuICAgICAgICAgICAgaXRlbV93aWR0aDogNjI0LCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXHJcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxMTQsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcclxuICAgICAgICAgICAgcm93OiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xyXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIG9uY2VfbnVtOiAxLFxyXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpXHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMuc2Nyb2xsX2NvbiwgY2MudjIoMCwgNjUpLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nLCBjYy52MigwLjUsIDAuNSkpXHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL+eUs+ivt+WlveWPi+WIl+ihqOi/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuRlJJRU5EX0FQUExZLCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSAhPSBGcmllbmRDb25zdC5UeXBlLkFwcGx5TGlzdClcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZyaWVuZExpc3QoZmFsc2UpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAvL+i1oOmAgei/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuU1RSRU5HVEhfVVBEQVRFLCAoZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgIT0gRnJpZW5kQ29uc3QuVHlwZS5Bd2FyZCAmJiB0aGlzLmN1cl90eXBlICE9IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gZGF0YS5saXN0IHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgaWRfbGlzdCA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlkX2xpc3Rbdi5yaWQgKyBcIl9cIiArIHYuc3J2X2lkXSA9IHZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaXRlbV9saXN0ID0gdGhpcy5pdGVtX3Njcm9sbHZpZXcuZ2V0SXRlbUxpc3QoKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1fbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiBpdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGl0ZW1fbGlzdFtrXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdm8gPSB2LmdldERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodm8gJiYgaWRfbGlzdFt2by5yaWQgKyBcIl9cIiArIHZvLnNydl9pZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5zZXREYXRhKGlkX2xpc3Rbdm8ucmlkICsgXCJfXCIgKyB2by5zcnZfaWRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICAvL+WIoOmZpOWlveWPi+i/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuRlJJRU5EX0RFTEVURSwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgIT0gRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZCAmJiB0aGlzLmN1cl90eXBlICE9IEZyaWVuZENvbnN0LlR5cGUuQmxhY2tMaXN0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRnJpZW5kQnRuKHRydWUpXHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/lop7liqDlpb3lj4tcclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEZyaWVuZEV2ZW50LlVQREFURV9BUFBMWSwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgIT0gRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJUaXBzKHRydWUsIEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgPT0gRnJpZW5kQ29uc3QuVHlwZS5BcHBseUxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZyaWVuZExpc3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGcmllbmRMaXN0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNob3dSZWRQb2ludCgpXHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/lj4vmg4Xngrnlj5jljJbmm7TmlrBcclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9IHRoaXMucm9sZV92by5iaW5kKEV2ZW50SWQuVVBEQVRFX1JPTEVfQVRUUklCVVRFLCAoZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwiZnJpZW5kX3BvaW50XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgPT0gRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZCB8fCB0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQXdhcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZV9wYW5lbCAmJiB0aGlzLnByZV9wYW5lbC5zZXRGcmllbmRQb2ludClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZV9wYW5lbC5zZXRGcmllbmRQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChGcmllbmRFdmVudC5VUERBVEVfQ09VTlQsIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/ooqvliKDlpb3lj4tcclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChGcmllbmRFdmVudC5VUERBVEVfR1JPVVBfQ09VTlQsIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcblxyXG4gICAgICAgIC8v5pyJ5Lq65p2l56S854mpXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChGcmllbmRFdmVudC5GUklFTkRfTElTVCwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGcmllbmRMaXN0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoKTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICAvL+abtOaWsOe6oueCueeUqFxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuVXBkYXRlX1JlZF9Qb2ludCwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoKTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgICAgICB0eXBlID0gdHlwZSB8fCBGcmllbmRDb25zdC5UeXBlLk15RnJpZW5kO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZVRhYih0eXBlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLnNob3dSZWRQb2ludCgpO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy/liIfmjaLmoIfnrb7pobVcclxuICAgIHNlbGVjdGVkVGFiQ2FsbEJhY2s6IGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZDtcclxuICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSA9PSB0eXBlKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmNoYW5nZUZyaWVuZEJ0bihmYWxzZSk7XHJcbiAgICAgICAgLy8gLy/liIfmjaLliLDlpb3lj4vliJfooajlsLHmiornuqLngrnmuIXmjolcclxuICAgICAgICB0aGlzLnNldFRhYlRpcHMoZmFsc2UsIEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cl90eXBlID0gdHlwZTtcclxuICAgICAgICBpZiAodGhpcy5wcmVfcGFuZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cylcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlX3BhbmVsLnNldFZpc2libGVTdGF0dXMoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmVfcGFuZWwgPSB0aGlzLmNyZWF0ZVN1YlBhbmVsKHRoaXMuY3VyX3R5cGUpO1xyXG4gICAgICAgIGlmICh0aGlzLnByZV9wYW5lbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZV9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cyh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSA9PSBGcmllbmRDb25zdC5UeXBlLk15RnJpZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX2Nvbi55ID0gNDMzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbF9jb24uc2V0Q29udGVudFNpemUoY2Muc2l6ZSh0aGlzLnNjcm9sbF93aWR0aCwgdGhpcy5zY3JvbGxfaGVpZ2h0KSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnJlc2V0U2l6ZShjYy5zaXplKHRoaXMuc2Nyb2xsX3dpZHRoLCB0aGlzLnNjcm9sbF9oZWlnaHQpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyX3R5cGUgPT0gRnJpZW5kQ29uc3QuVHlwZS5Bd2FyZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbF9jb24ueSA9IDM3NTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxfY29uLnNldENvbnRlbnRTaXplKGNjLnNpemUodGhpcy5zY3JvbGxfd2lkdGgsIDYwMCkpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5yZXNldFNpemUoY2Muc2l6ZSh0aGlzLnNjcm9sbF93aWR0aCwgNjc0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxfY29uLnkgPSAzMjM7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX2Nvbi5zZXRDb250ZW50U2l6ZShjYy5zaXplKHRoaXMuc2Nyb2xsX3dpZHRoLCA3MjQpKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcucmVzZXRTaXplKGNjLnNpemUodGhpcy5zY3JvbGxfd2lkdGgsIDcyNCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAvL+abtOaWsOWIl+ihqOaVsOaNrlxyXG4gICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdCh0cnVlKTtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIGNyZWF0ZVN1YlBhbmVsOiBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnZpZXdfbGlzdFtpbmRleF07XHJcbiAgICAgICAgaWYgKHBhbmVsID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVsID0gbmV3IEZyaWVuZExpc3RQYW5lbCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lbCA9IG5ldyBGcmllbmRBcHBseVBhbmVsKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSBGcmllbmRDb25zdC5UeXBlLkF3YXJkKSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lbCA9IG5ldyBGcmllbmRBd2FyZFBhbmVsKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gRnJpZW5kQ29uc3QuVHlwZS5CbGFja0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVsID0gbmV3IEZyaWVuZEJsYWNrUGFuZWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYW5lbC5zaG93KClcclxuICAgICAgICAgICAgdmFyIHNpemUgPSB0aGlzLmNvbnRhaW5lci5nZXRDb250ZW50U2l6ZSgpO1xyXG4gICAgICAgICAgICAvLyBwYW5lbC5zZXRQb3NpdGlvbihjYy52MihzaXplLndpZHRoIC8gMiwgNDA1KSk7XHJcbiAgICAgICAgICAgIHBhbmVsLnNldFBhcmVudCh0aGlzLmNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHRoaXMudmlld19saXN0W2luZGV4XSA9IHBhbmVsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhbmVsICYmIHBhbmVsLnNldENhbGxGdW4pIHtcclxuICAgICAgICAgICAgcGFuZWwuc2V0Q2FsbEZ1bigoZnVuY3Rpb24gKGlzX2RlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc19kZWwgPSBpc19kZWwgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VGcmllbmRCdG4oaXNfZGVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhbmVsXHJcbiAgICB9LFxyXG5cclxuICAgIC8v5Y+Y5pu05aW95Y+L5a2Q6aG555qE5oyJ6ZKu5L2c55So77yMdHJ1ZeWPmOS4uuWIoOmZpOWlveWPi++8jGZhbHNl6L+Y5Y6f5Li656eB6IGKXHJcbiAgICBjaGFuZ2VGcmllbmRCdG46IGZ1bmN0aW9uIChib29sKSB7XHJcbiAgICAgICAgdGhpcy5kZWxfZnJpZW5kX3N0YXR1cyA9IGJvb2w7XHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLnJlbmRfbGlzdC5sZW5ndGg7KytpKXtcclxuICAgICAgICAgICAgdGhpcy5yZW5kX2xpc3RbaV0uZGVsX3N0YXR1cyA9IGJvb2xcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcucmVzZXRBZGRQb3NpdGlvbih0aGlzLnJlbmRfbGlzdCwgbnVsbCwgdGhpcy5jdXJfdHlwZSk7XHJcbiAgICAgICAgLy8gdmFyIGl0ZW1fbGlzdCA9IHRoaXMuaXRlbV9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KCk7XHJcbiAgICAgICAgLy8gaWYgKGl0ZW1fbGlzdCkge1xyXG4gICAgICAgIC8vICAgICBmb3IgKHZhciBrIGluIGl0ZW1fbGlzdCkge1xyXG4gICAgICAgIC8vICAgICAgICAgaXRlbV9saXN0W2tdLnNldERlbFN0YXR1cyhib29sKVxyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVGcmllbmRMaXN0OiBmdW5jdGlvbiAoY2hhbmdlX2luZGV4LCBpc19kZWwpIHtcclxuICAgICAgICBjaGFuZ2VfaW5kZXggPSBjaGFuZ2VfaW5kZXggfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZW5kX2xpc3QgPSBbXTtcclxuICAgICAgICB2YXIgbGlzdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpIHtcclxuICAgICAgICAgICAgbGlzdCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmdldEFycmF5KCkgfHwgW107XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VfaW5kZXggPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLmFwcGx5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFwcGx5X2xpc3QgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBcHBseUxpc3QoKSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYXBwbHlfbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goYXBwbHlfbGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBcHBseU51bSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJfdHlwZSA9PSBGcmllbmRDb25zdC5UeXBlLkF3YXJkKSB7XHJcbiAgICAgICAgICAgIHZhciBhcnJheSA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmdldEFycmF5KCkgfHwgW107XHJcbiAgICAgICAgICAgIHZhciBhd2FyZF9hcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdm8gPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh2byAmJiB2by5pc19kcmF3ID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FyZF9hcnJheS5wdXNoKHZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaXN0ID0gYXdhcmRfYXJyYXk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQmxhY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIGxpc3QgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRCbGFja0FycmF5KCkgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3Rba10pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRfbGlzdC5wdXNoKGxpc3Rba10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNob3dFbXB0eUljb24oZmFsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlbmRfbGlzdC5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dFbXB0eUljb24odHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJlX3BhbmVsLnNldERhdGEodGhpcy5yZW5kX2xpc3QpO1xyXG4gICAgICAgIGlmIChpc19kZWwgPT0gdHJ1ZSAmJiBjaGFuZ2VfaW5kZXggPT0gZmFsc2UgJiYgVXRpbHMubmV4dCh0aGlzLnJlbmRfbGlzdCkgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuc2V0RGF0YSh0aGlzLnJlbmRfbGlzdCwgbnVsbCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnNldERhdGEodGhpcy5yZW5kX2xpc3QsIG51bGwsIHRoaXMuY3VyX3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/mm7TmlrDnlLPor7fmlbBcclxuICAgIHVwZGF0ZUFwcGx5TnVtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJlX3BhbmVsICYmIHRoaXMucHJlX3BhbmVsLnNldEFwcGx5TnVtKSB7XHJcbiAgICAgICAgICAgIHZhciBudW0gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBcHBseU51bSgpIHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMucHJlX3BhbmVsLnNldEFwcGx5TnVtKG51bSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy/nuqLngrnlpITnkIZcclxuICAgIHNob3dSZWRQb2ludDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhd2FyZF9udW0gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBd2FyZE51bSgpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5zZXRUYWJUaXBzSUkoYXdhcmRfbnVtLCBGcmllbmRDb25zdC5UeXBlLkF3YXJkKTtcclxuICAgICAgICB2YXIgYXBwbF9udW0gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBcHBseU51bSgpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5zZXRUYWJUaXBzSUkoYXBwbF9udW0sIEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KTtcclxuICAgICAgICB2YXIgbGlzdCA9IFt7IGJpZDogMSwgbnVtOiBhd2FyZF9udW0gfSwgeyBiaWQ6IDIsIG51bTogYXBwbF9udW0gfV07XHJcbiAgICAgICAgcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuc2V0RnVuY3Rpb25UaXBzU3RhdHVzKE1haW51aUNvbnN0Lmljb24uZnJpZW5kLCBsaXN0KVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+aYvuekuuepuueZvVxyXG4gICAgc2hvd0VtcHR5SWNvbjogZnVuY3Rpb24gKGJvb2wpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW1wdHlfY29uICYmIGJvb2wgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG5cclxuICAgICAgICB2YXIgc3RyID0gXCLmmoLml6Dlpb3lj4tcIjtcclxuICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSA9PSBGcmllbmRDb25zdC5UeXBlLkF3YXJkKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwi5pqC5peg5aW95Y+L6LWg6YCBXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwi5pqC5peg5aW95Y+L55Sz6K+3XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQmxhY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwi5pqC5peg5ouJ6buR5ZCN5Y2VXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1wdHlfbGFiZWwuc3RyaW5nID0gc3RyO1xyXG4gICAgICAgIHRoaXMuZW1wdHlfY29uLmFjdGl2ZSA9IGJvb2w7XHJcbiAgICB9LFxyXG4gICAgY2xvc2VDYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY3RybC5vcGVuRnJpZW5kV2luZG93KGZhbHNlKTtcclxuICAgICAgICBpZiAodGhpcy5pdGVtX3Njcm9sbHZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuRGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMudmlld19saXN0KSB7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy52aWV3X2xpc3RbaV07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYuZGVsZXRlTWUpIHtcclxuICAgICAgICAgICAgICAgIHYuZGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgICAgIHYgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld19saXN0ID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvLnVuYmluZCh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRnJpZW5kV2luZG93OyJdfQ==