|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/battle/view/battle_camp_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, '9f32f8mi0xM7p1LxrXy34aU', 'battle_camp_window');
|
// Scripts/mod/battle/view/battle_camp_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-04-11 10:35:32
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var BattleCampItem = require("battle_camp_Item");
|
|
var BattleController = require("battle_controller");
|
|
var BattleEvent = require("battle_event");
|
|
var Battle_campWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("battle", "battle_camp_view");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Full; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = BattleController.getInstance();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
var self = this;
|
self.background = self.root_wnd.getChildByName("background");
|
var main_container = self.root_wnd.getChildByName("main_container");
|
var title_label_1 = main_container.getChildByName("title_label_1").getComponent(cc.Label);
|
title_label_1.string = Utils.TI18N("种族克制");
|
var title_label_2 = main_container.getChildByName("title_label_2").getComponent(cc.Label);
|
title_label_2.string = Utils.TI18N("种族克制效果:");
|
var attr_label_1 = main_container.getChildByName("attr_label_1").getComponent(cc.Label);
|
attr_label_1.string = Utils.TI18N("伤害+25%");
|
var attr_label_2 = main_container.getChildByName("attr_label_2").getComponent(cc.Label);
|
attr_label_2.string = Utils.TI18N("命中+20%");
|
self.background.scale = FIT_SCALE;
|
var list_panel = main_container.getChildByName("list_panel");
|
var scroll_view_size = cc.size(list_panel.width, list_panel.height);
|
var setting = {
|
item_class: BattleCampItem,
|
// -- 单元类
|
start_x: 0,
|
//-- 第一个单元的X起点
|
space_x: 0,
|
// -- x方向的间隔
|
start_y: 0,
|
//-- 第一个单元的Y起点
|
space_y: 5,
|
//-- y方向的间隔
|
item_width: 603,
|
//-- 单元的尺寸width
|
item_height: 143,
|
//-- 单元的尺寸height
|
row: 0,
|
//-- 行数,作用于水平滚动类型
|
col: 1,
|
//-- 列数,作用于垂直滚动类型
|
need_dynamic: true
|
};
|
self.camp_scrollview = new CommonScrollView();
|
self.camp_scrollview.createScroll(list_panel, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
this.background.on("touchend", function () {
|
Utils.playButtonSound(2);
|
this.ctrl.openBattleCampView(false);
|
}, this);
|
this.addGlobalEvent(BattleEvent.EXIT_FIGHT, function () {
|
this.ctrl.openBattleCampView(false);
|
}.bind(this));
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(form_id_list) {
|
this.form_id_list = form_id_list || [];
|
this.form_pos_info = {};
|
|
for (var k = 0; k < this.form_id_list.length; ++k) {
|
var form_id = this.form_id_list[k];
|
var form_cfg = Config.combat_halo_data.data_halo[form_id];
|
|
if (form_cfg) {
|
for (var i = 0; i < form_cfg.pos_info.length; ++i) {
|
var v = form_cfg.pos_info[i];
|
var camp_type = v[0];
|
var camp_num = v[1];
|
|
if (!this.form_pos_info[camp_type]) {
|
this.form_pos_info[camp_type] = camp_num;
|
} else {
|
this.form_pos_info[camp_type] = this.form_pos_info[camp_type] + camp_num;
|
}
|
}
|
}
|
}
|
|
this.refreshCampList();
|
},
|
refreshCampList: function refreshCampList() {
|
var self = this;
|
var camp_show_config = Config.combat_halo_data.data_halo_show;
|
|
if (camp_show_config) {
|
var camp_data = [];
|
|
for (var k in camp_show_config) {
|
var v = camp_show_config[k];
|
var data = Utils.deepCopy(v);
|
var show_cfg = {};
|
show_cfg.id = k;
|
show_cfg.is_activate = false;
|
|
for (var j in data) {
|
var cfg = data[j];
|
cfg.is_activate = this.checkIsActivateCamp(cfg.pos_info);
|
|
if (cfg.is_activate) {
|
show_cfg.is_activate = true;
|
}
|
|
if (!show_cfg.name) {
|
show_cfg.name = cfg.name;
|
}
|
|
if (!show_cfg.icon) {
|
show_cfg.icon = cfg.icon;
|
}
|
}
|
|
show_cfg.attr_data = data;
|
camp_data.push(show_cfg);
|
}
|
|
var SortFunc = function SortFunc(objA, objB) {
|
if (objA.is_activate && !objB.is_activate) {
|
return -1;
|
} else if (!objA.is_activate && objB.is_activate) {
|
return 1;
|
} else {
|
return objA.id - objB.id;
|
}
|
};
|
|
camp_data.sort(SortFunc);
|
|
for (var i = 0; i < camp_data.length; ++i) {
|
camp_data[i].index = i;
|
}
|
|
self.camp_scrollview.setData(camp_data);
|
}
|
},
|
checkIsActivateCamp: function checkIsActivateCamp(pos_info) {
|
var is_activate = false;
|
|
if (pos_info && Utils.next(pos_info) != null) {
|
is_activate = true;
|
|
for (var i = 0; i < pos_info.length; ++i) {
|
var v = pos_info[i];
|
var camp_type = v[0];
|
var camp_num = v[1];
|
var have_num = 0;
|
|
for (var _type in this.form_pos_info) {
|
var num = this.form_pos_info[_type];
|
|
if (_type == camp_type) {
|
have_num = num;
|
break;
|
}
|
}
|
|
if (camp_num > have_num) {
|
is_activate = false;
|
break;
|
}
|
}
|
}
|
|
return is_activate;
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.camp_scrollview) {
|
this.camp_scrollview.deleteMe();
|
this.camp_scrollview = null;
|
}
|
|
this.ctrl.openBattleCampView(false);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYXR0bGVcXHZpZXdcXGJhdHRsZV9jYW1wX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJDb21tb25TY3JvbGxWaWV3IiwiQmF0dGxlQ2FtcEl0ZW0iLCJCYXR0bGVDb250cm9sbGVyIiwiQmF0dGxlRXZlbnQiLCJCYXR0bGVfY2FtcFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpbml0Q29uZmlnIiwib3BlbkNhbGxCYWNrIiwic2VsZiIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJ0aXRsZV9sYWJlbF8xIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwidGl0bGVfbGFiZWxfMiIsImF0dHJfbGFiZWxfMSIsImF0dHJfbGFiZWxfMiIsInNjYWxlIiwiRklUX1NDQUxFIiwibGlzdF9wYW5lbCIsInNjcm9sbF92aWV3X3NpemUiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJzZXR0aW5nIiwiaXRlbV9jbGFzcyIsInN0YXJ0X3giLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiaXRlbV9oZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJjYW1wX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsIm9wZW5CYXR0bGVDYW1wVmlldyIsImFkZEdsb2JhbEV2ZW50IiwiRVhJVF9GSUdIVCIsImJpbmQiLCJvcGVuUm9vdFduZCIsImZvcm1faWRfbGlzdCIsImZvcm1fcG9zX2luZm8iLCJrIiwibGVuZ3RoIiwiZm9ybV9pZCIsImZvcm1fY2ZnIiwiQ29uZmlnIiwiY29tYmF0X2hhbG9fZGF0YSIsImRhdGFfaGFsbyIsImkiLCJwb3NfaW5mbyIsInYiLCJjYW1wX3R5cGUiLCJjYW1wX251bSIsInJlZnJlc2hDYW1wTGlzdCIsImNhbXBfc2hvd19jb25maWciLCJkYXRhX2hhbG9fc2hvdyIsImNhbXBfZGF0YSIsImRhdGEiLCJkZWVwQ29weSIsInNob3dfY2ZnIiwiaWQiLCJpc19hY3RpdmF0ZSIsImoiLCJjZmciLCJjaGVja0lzQWN0aXZhdGVDYW1wIiwibmFtZSIsImljb24iLCJhdHRyX2RhdGEiLCJwdXNoIiwiU29ydEZ1bmMiLCJvYmpBIiwib2JqQiIsInNvcnQiLCJpbmRleCIsInNldERhdGEiLCJuZXh0IiwiaGF2ZV9udW0iLCJfdHlwZSIsIm51bSIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsa0JBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsZ0JBQWdCLEdBQUdILE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxJQUFJSSxXQUFXLEdBQUdKLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlLLGlCQUFpQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUM3QixhQUFTQyxRQURvQjtBQUU3QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlgsUUFBUSxDQUFDWSxhQUFULENB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S0EsZUFBTCxDQUFxQndELFFBQXJCO0FBQ0EsV0FBS3hELGVBQUwsR0FBdUIsSUFBdkI7QUFDSDs7QUFDRCxTQUFLcEMsSUFBTCxDQUFVOEMsa0JBQVYsQ0FBNkIsS0FBN0I7QUFDSDtBQTVKNEIsQ0FBVCxDQUF4QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDQtMTEgMTA6MzU6MzJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBCYXR0bGVDYW1wSXRlbSA9IHJlcXVpcmUoXCJiYXR0bGVfY2FtcF9JdGVtXCIpXG52YXIgQmF0dGxlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYXR0bGVfY29udHJvbGxlclwiKVxudmFyIEJhdHRsZUV2ZW50ID0gcmVxdWlyZShcImJhdHRsZV9ldmVudFwiKVxudmFyIEJhdHRsZV9jYW1wV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhdHRsZVwiLCBcImJhdHRsZV9jYW1wX3ZpZXdcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IEJhdHRsZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmJhY2tncm91bmQgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgbGV0IG1haW5fY29udGFpbmVyID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xuICAgICAgICBsZXQgdGl0bGVfbGFiZWxfMSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGl0bGVfbGFiZWxfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRpdGxlX2xhYmVsXzEuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi56eN5peP5YWL5Yi2XCIpKVxuICAgICAgICBsZXQgdGl0bGVfbGFiZWxfMiA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGl0bGVfbGFiZWxfMlwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRpdGxlX2xhYmVsXzIuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi56eN5peP5YWL5Yi25pWI5p6cOlwiKSlcbiAgICAgICAgbGV0IGF0dHJfbGFiZWxfMSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYXR0cl9sYWJlbF8xXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgYXR0cl9sYWJlbF8xLnN0cmluZyA9IChVdGlscy5USTE4TihcIuS8pOWusysyNSVcIikpXG4gICAgICAgIGxldCBhdHRyX2xhYmVsXzIgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImF0dHJfbGFiZWxfMlwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIGF0dHJfbGFiZWxfMi5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLlkb3kuK0rMjAlXCIpKVxuICAgICAgICBzZWxmLmJhY2tncm91bmQuc2NhbGUgPSBGSVRfU0NBTEU7XG5cbiAgICAgICAgbGV0IGxpc3RfcGFuZWwgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImxpc3RfcGFuZWxcIik7XG4gICAgICAgIGxldCBzY3JvbGxfdmlld19zaXplID0gY2Muc2l6ZShsaXN0X3BhbmVsLndpZHRoLCBsaXN0X3BhbmVsLmhlaWdodCk7XG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzcyA6IEJhdHRsZUNhbXBJdGVtLCAgICAgLy8gLS0g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94IDogMCwgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3ggOiAwLCAgICAgICAgICAgICAgICAgICAvLyAtLSB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95IDogMCwgICAgICAgICAgICAgICAgICAgIC8vLS0g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeSA6IDUsICAgICAgICAgICAgICAgICAgIC8vLS0geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgaXRlbV93aWR0aCA6IDYwMywgICAgICAgICAgICAgICAvLy0tIOWNleWFg+eahOWwuuWvuHdpZHRoXG4gICAgICAgICAgICBpdGVtX2hlaWdodCA6IDE0MywgICAgICAgICAgICAgIC8vLS0g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3cgOiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2wgOiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOWIl+aVsO+8jOS9nOeUqOS6juWeguebtOa7muWKqOexu+Wei1xuICAgICAgICAgICAgbmVlZF9keW5hbWljIDogdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5jYW1wX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpOyBcbiAgICAgICAgc2VsZi5jYW1wX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKGxpc3RfcGFuZWwsIGNjLnYyKDAsMCkgLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nKTtcbiAgICBcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLm9uKFwidG91Y2hlbmRcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDIpXG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkJhdHRsZUNhbXBWaWV3KGZhbHNlKVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoQmF0dGxlRXZlbnQuRVhJVF9GSUdIVCxmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5CYXR0bGVDYW1wVmlldyhmYWxzZSlcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihmb3JtX2lkX2xpc3Qpe1xuICAgICAgICB0aGlzLmZvcm1faWRfbGlzdCA9IGZvcm1faWRfbGlzdCB8fCBbXTtcbiAgICAgICAgdGhpcy5mb3JtX3Bvc19pbmZvID0ge31cbiAgICAgICAgZm9yKGxldCBrPTA7azx0aGlzLmZvcm1faWRfbGlzdC5sZW5ndGg7KytrKXtcbiAgICAgICAgICAgIGxldCBmb3JtX2lkID0gdGhpcy5mb3JtX2lkX2xpc3Rba11cbiAgICAgICAgICAgIGxldCBmb3JtX2NmZyA9IENvbmZpZy5jb21iYXRfaGFsb19kYXRhLmRhdGFfaGFsb1tmb3JtX2lkXVxuICAgICAgICAgICAgaWYoZm9ybV9jZmcpe1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8Zm9ybV9jZmcucG9zX2luZm8ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gZm9ybV9jZmcucG9zX2luZm9baV1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbXBfdHlwZSA9IHZbMF1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbXBfbnVtID0gdlsxXVxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5mb3JtX3Bvc19pbmZvW2NhbXBfdHlwZV0pe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtX3Bvc19pbmZvW2NhbXBfdHlwZV0gPSBjYW1wX251bVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybV9wb3NfaW5mb1tjYW1wX3R5cGVdID0gdGhpcy5mb3JtX3Bvc19pbmZvW2NhbXBfdHlwZV0gKyBjYW1wX251bVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaENhbXBMaXN0KCk7XG4gICAgfSxcbiAgICByZWZyZXNoQ2FtcExpc3QoICApe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBjYW1wX3Nob3dfY29uZmlnID0gQ29uZmlnLmNvbWJhdF9oYWxvX2RhdGEuZGF0YV9oYWxvX3Nob3c7XG4gICAgICAgIGlmIChjYW1wX3Nob3dfY29uZmlnKXtcbiAgICAgICAgICAgIGxldCBjYW1wX2RhdGEgPSBbXTtcbiAgICAgICAgICAgIGZvcihsZXQgayBpbiBjYW1wX3Nob3dfY29uZmlnKXtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGNhbXBfc2hvd19jb25maWdba107XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBVdGlscy5kZWVwQ29weSh2KTtcbiAgICAgICAgICAgICAgICBsZXQgc2hvd19jZmcgPSB7fVxuICAgICAgICAgICAgICAgIHNob3dfY2ZnLmlkID0ga1xuXHRcdFx0ICAgIHNob3dfY2ZnLmlzX2FjdGl2YXRlID0gZmFsc2VcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjZmcgPSBkYXRhW2pdXG4gICAgICAgICAgICAgICAgICAgIGNmZy5pc19hY3RpdmF0ZSA9IHRoaXMuY2hlY2tJc0FjdGl2YXRlQ2FtcChjZmcucG9zX2luZm8pXG4gICAgICAgICAgICAgICAgICAgIGlmKGNmZy5pc19hY3RpdmF0ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93X2NmZy5pc19hY3RpdmF0ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZighc2hvd19jZmcubmFtZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93X2NmZy5uYW1lID0gY2ZnLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZighc2hvd19jZmcuaWNvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93X2NmZy5pY29uID0gY2ZnLmljb25cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzaG93X2NmZy5hdHRyX2RhdGEgPSBkYXRhXG4gICAgICAgICAgICAgICAgY2FtcF9kYXRhLnB1c2goc2hvd19jZmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgU29ydEZ1bmMgPSBmdW5jdGlvbiggb2JqQSwgb2JqQil7XG4gICAgICAgICAgICAgICAgaWYgKG9iakEuaXNfYWN0aXZhdGUgJiYgIW9iakIuaXNfYWN0aXZhdGUpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoIW9iakEuaXNfYWN0aXZhdGUgJiYgb2JqQi5pc19hY3RpdmF0ZSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqQS5pZCAtIG9iakIuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FtcF9kYXRhLnNvcnQoU29ydEZ1bmMpO1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxjYW1wX2RhdGEubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgY2FtcF9kYXRhW2ldLmluZGV4ID0gaVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5jYW1wX3Njcm9sbHZpZXcuc2V0RGF0YShjYW1wX2RhdGEpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjaGVja0lzQWN0aXZhdGVDYW1wKHBvc19pbmZvKXtcbiAgICAgICAgbGV0IGlzX2FjdGl2YXRlID0gZmFsc2VcbiAgICAgICAgaWYocG9zX2luZm8gJiYgVXRpbHMubmV4dChwb3NfaW5mbykgIT0gbnVsbCl7XG4gICAgICAgICAgICBpc19hY3RpdmF0ZSA9IHRydWVcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8cG9zX2luZm8ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgbGV0IHYgPSBwb3NfaW5mb1tpXVxuICAgICAgICAgICAgICAgIGxldCBjYW1wX3R5cGUgPSB2WzBdXG4gICAgICAgICAgICAgICAgbGV0IGNhbXBfbnVtID0gdlsxXVxuICAgICAgICAgICAgICAgIGxldCBoYXZlX251bSA9IDBcbiAgICAgICAgICAgICAgICBmb3IobGV0IF90eXBlIGluIHRoaXMuZm9ybV9wb3NfaW5mbyl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW0gPSB0aGlzLmZvcm1fcG9zX2luZm9bX3R5cGVdXG4gICAgICAgICAgICAgICAgICAgIGlmKF90eXBlID09IGNhbXBfdHlwZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXZlX251bSA9IG51bVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihjYW1wX251bSA+IGhhdmVfbnVtKXtcbiAgICAgICAgICAgICAgICAgICAgaXNfYWN0aXZhdGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNfYWN0aXZhdGVcbiAgICB9LFxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0aGlzLmNhbXBfc2Nyb2xsdmlldyl7XG4gICAgICAgICAgICB0aGlzLmNhbXBfc2Nyb2xsdmlldy5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5jYW1wX3Njcm9sbHZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5vcGVuQmF0dGxlQ2FtcFZpZXcoZmFsc2UpXG4gICAgfSxcbn0pIl19
|