|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/backpack/view/gift_select_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, 'b00c3eFmMBH97uyPdz6r5+V', 'gift_select_window');
|
// Scripts/mod/backpack/view/gift_select_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-04-15 10:35:50
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var Gift_selectWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("backpack", "gift_select");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Mini; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = arguments[0];
|
this.model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.WIDTH = 460; //界面的宽度
|
|
this.HEIGHT = 350;
|
this.GOODS_WIDTH = 68; //偏移量
|
|
this.select_type = 1;
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.main_panel = this.root_wnd.getChildByName("main_panel");
|
var size = this.main_panel.getContentSize();
|
this.close_btn = this.main_panel.getChildByName("close_btn");
|
this.top_panel = this.main_panel.getChildByName("top_panel");
|
var title = this.top_panel.getChildByName("title_label").getComponent(cc.Label);
|
title.string = Utils.TI18N("自选礼包"); //领取按钮
|
|
this.use_btn = this.main_panel.getChildByName("use_btn");
|
var use_lab = this.use_btn.getChildByName("Label").getComponent(cc.Label);
|
use_lab.string = Utils.TI18N("使用"); // 滚动部分
|
|
this.scroll_view = this.seekChild("items_content");
|
this.desc_label = Utils.createRichLabel(24, new cc.Color(0x76, 0x45, 0x19, 0xff), cc.v2(0.5, 1), cc.v2(size.width / 2, 625), null, 400);
|
this.main_panel.addChild(this.desc_label.node);
|
},
|
// 设置数据
|
updateGiftList: function updateGiftList(giftid, giftBid, goods_list, choose_num) {
|
this.giftid = giftid;
|
this.giftBid = giftBid;
|
this.goods_list = goods_list || [];
|
this.choose_num = choose_num || 1; // 物品列表
|
|
this.desc_label.string = cc.js.formatStr(Utils.TI18N("请从以下奖励中选择%s个"), this.choose_num);
|
|
if (!this.item_list) {
|
this.item_list = [];
|
}
|
|
if (!this.name_list) {
|
this.name_list = [];
|
}
|
|
var scroll_size = this.scroll_view.getContentSize();
|
var len = 0;
|
|
var RoleController = require("role_controller");
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
for (var i in this.goods_list) {
|
if (this.goods_list[i].min_lev <= role_vo.lev && this.goods_list[i].max_lev >= role_vo.lev) {
|
len = len + 1;
|
}
|
}
|
|
var max_height = Math.max(scroll_size.height, len * 128 + 20);
|
this.scroll_view.setContentSize(cc.size(scroll_size.width, max_height));
|
var index = 1;
|
|
for (var i in this.goods_list) {
|
var v = this.goods_list[i];
|
|
if (v.min_lev <= role_vo.lev && v.max_lev >= role_vo.lev) {
|
var temp = v;
|
var x;
|
var y;
|
x = scroll_size.width / 2;
|
y = max_height - 128 * index;
|
var bid = temp.bid;
|
|
if (!this.item_list[index]) {
|
var GiftSelectItem = require("gift_select_item_panel");
|
|
this.item_list[index] = new GiftSelectItem(index);
|
this.item_list[index].setParent(this.scroll_view);
|
}
|
|
this.item_list[index].setPosition(x, y);
|
var data = {
|
base_id: bid,
|
quantity: temp.num
|
};
|
this.item_list[index].setData(data);
|
this.item_list[index].addCallBack(function (index, vo) {
|
var id = index || 1;
|
this.clickCallBack(id, vo.base_id, vo.quantity);
|
}.bind(this));
|
index = index + 1;
|
}
|
} // 选择列表置空
|
|
|
this.select_list = [];
|
},
|
// 点击的事件
|
clickCallBack: function clickCallBack(goods_id, bid, num) {
|
// 判断该bid是否存在的
|
if (this.select_list && this.select_list.length > 0) {
|
for (var i = this.select_list.length - 1; i >= 0; i--) {
|
var temp_id = this.select_list[i].goods_id;
|
|
if (temp_id == goods_id) {
|
this.select_list.splice(i, 1);
|
this.setSelectedState(goods_id, false);
|
return;
|
}
|
}
|
} // 判断数量是否满了
|
|
|
if (this.select_list.length >= this.choose_num) {
|
var item = this.select_list.shift();
|
var temp_goods_id = item.goods_id;
|
this.setSelectedState(temp_goods_id, false); // -- message2("选择数量已满!")
|
// -- return
|
} // 插入数据
|
|
|
this.select_list.push({
|
goods_id: goods_id,
|
bid: bid,
|
num: num
|
});
|
this.setSelectedState(goods_id, true);
|
},
|
setSelectedState: function setSelectedState(id, bool) {
|
if (this.item_list) {
|
for (var i in this.item_list) {
|
var item = this.item_list[i];
|
|
if (item.index && item.index == id) {
|
item.setSelected(bool);
|
}
|
}
|
}
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.use_btn, function () {
|
if (this.select_list && this.select_list.length >= this.choose_num) {
|
var gift_id = this.giftid;
|
var chose_ids = [];
|
var goods_num = 1;
|
|
for (var i in this.select_list) {
|
chose_ids.push({
|
name: 1,
|
value: this.select_list[i].bid,
|
str: ""
|
});
|
goods_num = this.select_list[i].num;
|
}
|
|
var BackPackConst = require("backpack_const");
|
|
var count = this.model.getPackItemNumByBid(BackPackConst.Bag_Code.BACKPACK, this.giftBid);
|
|
if (count > 1 && this.choose_num == 1) {
|
this.ctrl.openBatchUseItemView(true, this.gift_vo, 1, chose_ids);
|
} else {
|
this.ctrl.sender10515(gift_id, 1, chose_ids);
|
this.ctrl.closeGiftSelectPanel();
|
}
|
} else {
|
message(cc.js.formatStr(Utils.TI18N("请选择<color=#5a503c>%d个</color>物品!"), this.choose_num));
|
}
|
}.bind(this), 1);
|
Utils.onTouchEnd(this.close_btn, function () {
|
this.ctrl.closeGiftSelectPanel();
|
}.bind(this), 2);
|
},
|
// function GiftSelectPanel:createTitleTxt(txt, x, y)
|
// local container = ccui.Widget:create()
|
// container:setAnchorPoint(cc.p(0.5, 1))
|
// local size = cc.size(400, 20)
|
// container:setContentSize(size)
|
// container:setPosition(cc.p(x, y))
|
// local bg = createSprite(PathTool.getCommonRes("line7"), 0, 20)
|
// bg:setAnchorPoint(cc.p(0, 1))
|
// container:addChild(bg)
|
// bg = createSprite(PathTool.getCommonRes("line7"), size.width, 20)
|
// bg:setFlippedX(true)
|
// bg:setAnchorPoint(cc.p(1, 1))
|
// container:addChild(bg)
|
// local title = createLabel(22,Config.ColorData.data_color4[1],nil,size.width/2, 12,"",this.scroll_view,nil,cc.p(0,0))
|
// title:setString(txt)
|
// container:addChild(title)
|
// return container, title
|
// end
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(giftvo) {
|
var choose_num = 1;
|
this.gift_vo = giftvo;
|
if (!giftvo) return;
|
var giftId = giftvo.id;
|
var giftBid = giftvo.base_id;
|
var item_list = [];
|
|
if (Config.gift_data.data_choose_gift[giftBid]) {
|
var item = Utils.getItemConfig(giftBid);
|
|
if (item && item.ext && item.ext.length > 0) {
|
for (var i in item.ext) {
|
choose_num = item.ext[i];
|
}
|
}
|
|
var gift_cfg = Config.gift_data.data_choose_gift[giftBid];
|
|
for (var i in gift_cfg) {
|
item_list.push(gift_cfg[i]);
|
}
|
}
|
|
item_list.sort(Utils.tableLowerSorter(["sort_id"]));
|
this.updateGiftList(giftId, giftBid, item_list, choose_num);
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
for (var i in this.item_list) {
|
this.item_list[i].deleteMe();
|
}
|
|
this.item_list = null;
|
this.select_list = null;
|
this.name_list = null;
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcdmlld1xcZ2lmdF9zZWxlY3Rfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkdpZnRfc2VsZWN0V2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiTWluaSIsImN0cmwiLCJhcmd1bWVudHMiLCJtb2RlbCIsImdldE1vZGVsIiwiaW5pdENvbmZpZyIsIldJRFRIIiwiSEVJR0hUIiwiR09PRFNfV0lEVEgiLCJzZWxlY3RfdHlwZSIsIm9wZW5DYWxsQmFjayIsIm1haW5fcGFuZWwiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2l6ZSIsImdldENvbnRlbnRTaXplIiwiY2xvc2VfYnRuIiwidG9wX3BhbmVsIiwidGl0bGUiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ1c2VfYnRuIiwidXNlX2xhYiIsInNjcm9sbF92aWV3Iiwic2Vla0NoaWxkIiwiZGVzY19sYWJlbCIsImNyZWF0ZVJpY2hMYWJlbCIsIkNvbG9yIiwidjIiLCJ3aWR0aCIsImFkZENoaWxkIiwibm9kZSIsInVwZGF0ZUdpZnRMaXN0IiwiZ2lmdGlkIiwiZ2lmdEJpZCIsImdvb2RzX2xpc3QiLCJjaG9vc2VfbnVtIiwianMiLCJmb3JtYXRTdHIiLCJpdGVtX2xpc3QiLCJuYW1lX2xpc3QiLCJzY3JvbGxfc2l6ZSIsImxlbiIsIlJvbGVDb250cm9sbGVyIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwiaSIsIm1pbl9sZXYiLCJsZXYiLCJtYXhfbGV2IiwibWF4X2hlaWdodCIsIk1hdGgiLCJtYXgiLCJoZWlnaHQiLCJzZXRDb250ZW50U2l6ZSIsImluZGV4IiwidiIsInRlbXAiLCJ4IiwieSIsImJpZCIsIkdpZnRTZWxlY3RJdGVtIiwic2V0UGFyZW50Iiwic2V0UG9zaXRpb24iLCJkYXRhIiwiYmFzZV9pZCIsInF1YW50aXR5IiwibnVtIiwic2V0RGF0YSIsImFkZENhbGxCYWNrIiwidm8iLCJpZCIsImNsaWNrQ2FsbEJhY2siLCJiaW5kIiwic2VsZWN0X2xpc3QiLCJnb29kc19pZCIsImxlbmd0aCIsInRlbXBfaWQiLCJzcGxpY2UiLCJzZXRTZWxlY3RlZFN0YXRlIiwiaXRlbSIsInNoaWZ0IiwidGVtcF9nb29kc19pZCIsInB1c2giLCJib29sIiwic2V0U2VsZWN0ZWQiLCJyZWdpc3RlckV2ZW50Iiwib25Ub3VjaEVuZCIsImdpZnRfaWQiLCJjaG9zZV9pZHMiLCJnb29kc19udW0iLCJuYW1lIiwidmFsdWUiLCJzdHIiLCJCYWNrUGFja0NvbnN0IiwiY291bnQiLCJnZXRQYWNrSXRlbU51bUJ5QmlkIiwiQmFnX0NvZGUiLCJCQUNLUEFDSyIsIm9wZW5CYXRjaFVzZUl0ZW1WaWV3IiwiZ2lmdF92byIsInNlbmRlcjEwNTE1IiwiY2xvc2VHaWZ0U2VsZWN0UGFuZWwiLCJtZXNzYWdlIiwib3BlblJvb3RXbmQiLCJnaWZ0dm8iLCJnaWZ0SWQiLCJDb25maWciLCJnaWZ0X2RhdGEiLCJkYXRhX2Nob29zZV9naWZ0IiwiZ2V0SXRlbUNvbmZpZyIsImV4dCIsImdpZnRfY2ZnIiwic29ydCIsInRhYmxlTG93ZXJTb3J0ZXIiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxpQkFBaUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDN0IsYUFBU0MsUUFEb0I7QUFFN0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JQLFFBQVEs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O0FBQ2xCMUUsUUFBQUEsU0FBUyxDQUFDNkMsSUFBVixDQUFlNkIsUUFBUSxDQUFDbEUsQ0FBRCxDQUF2QjtBQUNIO0FBQ0o7O0FBQ0RSLElBQUFBLFNBQVMsQ0FBQzJFLElBQVYsQ0FBZS9GLEtBQUssQ0FBQ2dHLGdCQUFOLENBQXVCLENBQUMsU0FBRCxDQUF2QixDQUFmO0FBQ0EsU0FBS25GLGNBQUwsQ0FBb0IyRSxNQUFwQixFQUE0QnpFLE9BQTVCLEVBQXFDSyxTQUFyQyxFQUFnREgsVUFBaEQ7QUFDSCxHQXJONEI7QUF1TjdCO0FBQ0FnRixFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFDcEIsU0FBSSxJQUFJckUsQ0FBUixJQUFhLEtBQUtSLFNBQWxCLEVBQTRCO0FBQ3hCLFdBQUtBLFNBQUwsQ0FBZVEsQ0FBZixFQUFrQnNFLFFBQWxCO0FBQ0g7O0FBQ0QsU0FBSzlFLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxTQUFLb0MsV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUtuQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0g7QUEvTjRCLENBQVQsQ0FBeEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTE1IDEwOjM1OjUwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEdpZnRfc2VsZWN0V2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhY2twYWNrXCIsIFwiZ2lmdF9zZWxlY3RcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLldJRFRIID0gNDYwOyAgLy/nlYzpnaLnmoTlrr3luqZcbiAgICAgICAgdGhpcy5IRUlHSFQgPSAzNTA7XG4gICAgICAgIHRoaXMuR09PRFNfV0lEVEggPSA2ODsgLy/lgY/np7vph49cbiAgICAgICAgdGhpcy5zZWxlY3RfdHlwZSA9IDE7XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fcGFuZWxcIik7XG4gICAgICAgIHZhciBzaXplID0gdGhpcy5tYWluX3BhbmVsLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID10aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjbG9zZV9idG5cIik7XG4gICAgICAgIHRoaXMudG9wX3BhbmVsID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwidG9wX3BhbmVsXCIpO1xuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnRvcF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2xhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRpdGxlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6Ieq6YCJ56S85YyFXCIpO1xuICAgIFxuICAgICAgICAvL+mihuWPluaMiemSrlxuICAgICAgICB0aGlzLnVzZV9idG4gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ1c2VfYnRuXCIpO1xuICAgICAgICB2YXIgdXNlX2xhYiA9IHRoaXMudXNlX2J0bi5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHVzZV9sYWIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkvb/nlKhcIik7XG5cbiAgICAgICAgLy8g5rua5Yqo6YOo5YiGXG4gICAgICAgIHRoaXMuc2Nyb2xsX3ZpZXcgPSB0aGlzLnNlZWtDaGlsZChcIml0ZW1zX2NvbnRlbnRcIik7XG5cbiAgICAgICAgdGhpcy5kZXNjX2xhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg3NiwweDQ1LDB4MTksIDB4ZmYpLCBjYy52MigwLjUsIDEpLCBjYy52MihzaXplLndpZHRoLzIsNjI1KSxudWxsLDQwMCk7XG4gICAgICAgIHRoaXMubWFpbl9wYW5lbC5hZGRDaGlsZCh0aGlzLmRlc2NfbGFiZWwubm9kZSk7XG4gICAgfSxcblxuICAgIC8vIOiuvue9ruaVsOaNrlxuICAgIHVwZGF0ZUdpZnRMaXN0OmZ1bmN0aW9uKGdpZnRpZCxnaWZ0QmlkLCBnb29kc19saXN0LCBjaG9vc2VfbnVtKXtcbiAgICAgICAgdGhpcy5naWZ0aWQgPSBnaWZ0aWQ7XG4gICAgICAgIHRoaXMuZ2lmdEJpZCA9IGdpZnRCaWQ7XG4gICAgICAgIHRoaXMuZ29vZHNfbGlzdCA9IGdvb2RzX2xpc3QgfHwgW107XG4gICAgICAgIHRoaXMuY2hvb3NlX251bSA9IGNob29zZV9udW0gfHwgMTtcbiAgICAgICAgLy8g54mp5ZOB5YiX6KGoXG4gICAgICAgIHRoaXMuZGVzY19sYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLor7fku47ku6XkuIvlpZblirHkuK3pgInmi6klc+S4qlwiKSwgdGhpcy5jaG9vc2VfbnVtICk7XG5cbiAgICAgICAgaWYoIXRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0ID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZighdGhpcy5uYW1lX2xpc3Qpe1xuICAgICAgICAgICAgdGhpcy5uYW1lX2xpc3QgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzY3JvbGxfc2l6ZSA9IHRoaXMuc2Nyb2xsX3ZpZXcuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIGxlbiA9IDA7XG4gICAgICAgIHZhciBSb2xlQ29udHJvbGxlciAgICAgID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbiAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuXG4gICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLmdvb2RzX2xpc3Qpe1xuICAgICAgICAgICAgaWYodGhpcy5nb29kc19saXN0W2ldLm1pbl9sZXYgPD1yb2xlX3ZvLmxldiAmJiB0aGlzLmdvb2RzX2xpc3RbaV0ubWF4X2xldiA+PXJvbGVfdm8ubGV2KXtcbiAgICAgICAgICAgICAgICBsZW4gPSBsZW4rMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYXhfaGVpZ2h0ID0gTWF0aC5tYXgoc2Nyb2xsX3NpemUuaGVpZ2h0LCBsZW4qMTI4ICsyMCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNjcm9sbF92aWV3LnNldENvbnRlbnRTaXplKGNjLnNpemUoc2Nyb2xsX3NpemUud2lkdGgsIG1heF9oZWlnaHQpKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMTtcbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuZ29vZHNfbGlzdCl7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuZ29vZHNfbGlzdFtpXTtcblxuICAgICAgICAgICAgaWYodi5taW5fbGV2IDw9cm9sZV92by5sZXYgJiYgdi5tYXhfbGV2ID49cm9sZV92by5sZXYpe1xuICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gdjtcbiAgICAgICAgICAgICAgICB2YXIgeDtcbiAgICAgICAgICAgICAgICB2YXIgeTtcbiAgICAgICAgICAgICAgICB4ID0gc2Nyb2xsX3NpemUud2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID1tYXhfaGVpZ2h0IC0xMjgqaW5kZXg7XG5cbiAgICAgICAgICAgICAgICB2YXIgYmlkID0gdGVtcC5iaWQ7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXRlbV9saXN0W2luZGV4XSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBHaWZ0U2VsZWN0SXRlbSA9IHJlcXVpcmUoXCJnaWZ0X3NlbGVjdF9pdGVtX3BhbmVsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0gPSBuZXcgR2lmdFNlbGVjdEl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0uc2V0UGFyZW50KHRoaXMuc2Nyb2xsX3ZpZXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0uc2V0UG9zaXRpb24oeCwgeSk7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7YmFzZV9pZDogYmlkLHF1YW50aXR5OiB0ZW1wLm51bX1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0uc2V0RGF0YShkYXRhKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2luZGV4XS5hZGRDYWxsQmFjayhmdW5jdGlvbihpbmRleCx2byl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGluZGV4IHx8IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tDYWxsQmFjayhpZCwgdm8uYmFzZV9pZCwgdm8ucXVhbnRpdHkpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDpgInmi6nliJfooajnva7nqbpcbiAgICAgICAgdGhpcy5zZWxlY3RfbGlzdCA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDngrnlh7vnmoTkuovku7ZcbiAgICBjbGlja0NhbGxCYWNrOmZ1bmN0aW9uKGdvb2RzX2lkLCBiaWQsIG51bSl7XG4gICAgICAgIC8vIOWIpOaWreivpWJpZOaYr+WQpuWtmOWcqOeahFxuICAgICAgICBpZih0aGlzLnNlbGVjdF9saXN0ICYmIHRoaXMuc2VsZWN0X2xpc3QubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICBmb3IodmFyIGkgPSB0aGlzLnNlbGVjdF9saXN0Lmxlbmd0aC0xOyBpPj0wO2ktLSl7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBfaWQgPSB0aGlzLnNlbGVjdF9saXN0W2ldLmdvb2RzX2lkO1xuICAgICAgICAgICAgICAgIGlmKHRlbXBfaWQgPT0gZ29vZHNfaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdF9saXN0LnNwbGljZShpLDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUoZ29vZHNfaWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDliKTmlq3mlbDph4/mmK/lkKbmu6HkuoZcbiAgICAgICAgaWYodGhpcy5zZWxlY3RfbGlzdC5sZW5ndGggPj0gdGhpcy5jaG9vc2VfbnVtKXtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5zZWxlY3RfbGlzdC5zaGlmdCgpO1xuICAgICAgICAgICAgdmFyIHRlbXBfZ29vZHNfaWQgPSBpdGVtLmdvb2RzX2lkXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUodGVtcF9nb29kc19pZCwgZmFsc2UpO1xuICAgIC8vIC0tICAgICAgICBtZXNzYWdlMihcIumAieaLqeaVsOmHj+W3sua7oe+8gVwiKVxuICAgIC8vIC0tICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOaPkuWFpeaVsOaNrlxuICAgICAgICB0aGlzLnNlbGVjdF9saXN0LnB1c2goe2dvb2RzX2lkOmdvb2RzX2lkLGJpZDpiaWQsbnVtOiBudW19KTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFN0YXRlKGdvb2RzX2lkLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgc2V0U2VsZWN0ZWRTdGF0ZTpmdW5jdGlvbihpZCwgYm9vbCl7XG4gICAgICAgIGlmKHRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLml0ZW1fbGlzdCl7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1fbGlzdFtpXTtcbiAgICAgICAgICAgICAgICBpZihpdGVtLmluZGV4ICYmIGl0ZW0uaW5kZXggPT0gaWQpe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFNlbGVjdGVkKGJvb2wpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy51c2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdF9saXN0ICYmIHRoaXMuc2VsZWN0X2xpc3QubGVuZ3RoID49IHRoaXMuY2hvb3NlX251bSl7XG4gICAgICAgICAgICAgICAgdmFyIGdpZnRfaWQgPSB0aGlzLmdpZnRpZDtcbiAgICAgICAgICAgICAgICB2YXIgY2hvc2VfaWRzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGdvb2RzX251bSA9IDE7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuc2VsZWN0X2xpc3Qpe1xuICAgICAgICAgICAgICAgICAgICBjaG9zZV9pZHMucHVzaCh7bmFtZToxLHZhbHVlOiB0aGlzLnNlbGVjdF9saXN0W2ldLmJpZCxzdHI6XCJcIn0pO1xuICAgICAgICAgICAgICAgICAgICBnb29kc19udW0gPSB0aGlzLnNlbGVjdF9saXN0W2ldLm51bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIEJhY2tQYWNrQ29uc3QgPSByZXF1aXJlKFwiYmFja3BhY2tfY29uc3RcIik7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5tb2RlbC5nZXRQYWNrSXRlbU51bUJ5QmlkKEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuQkFDS1BBQ0ssdGhpcy5naWZ0QmlkKTtcbiAgICAgICAgICAgICAgICBpZihjb3VudCA+MSAmJiB0aGlzLmNob29zZV9udW09PTEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkJhdGNoVXNlSXRlbVZpZXcodHJ1ZSwgdGhpcy5naWZ0X3ZvLDEsY2hvc2VfaWRzKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTA1MTUoZ2lmdF9pZCwxLGNob3NlX2lkcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5jbG9zZUdpZnRTZWxlY3RQYW5lbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UoY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi6K+36YCJ5oupPGNvbG9yPSM1YTUwM2M+JWTkuKo8L2NvbG9yPueJqeWTge+8gVwiKSwgIHRoaXMuY2hvb3NlX251bSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNsb3NlX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLmNsb3NlR2lmdFNlbGVjdFBhbmVsKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMik7XG4gICAgXG4gICAgfSxcblxuLy8gICAgIGZ1bmN0aW9uIEdpZnRTZWxlY3RQYW5lbDpjcmVhdGVUaXRsZVR4dCh0eHQsIHgsIHkpXG4vLyAgICAgbG9jYWwgY29udGFpbmVyID0gY2N1aS5XaWRnZXQ6Y3JlYXRlKClcbi8vICAgICBjb250YWluZXI6c2V0QW5jaG9yUG9pbnQoY2MucCgwLjUsIDEpKVxuLy8gICAgIGxvY2FsIHNpemUgPSBjYy5zaXplKDQwMCwgMjApXG4vLyAgICAgY29udGFpbmVyOnNldENvbnRlbnRTaXplKHNpemUpXG4vLyAgICAgY29udGFpbmVyOnNldFBvc2l0aW9uKGNjLnAoeCwgeSkpXG4vLyAgICAgbG9jYWwgYmcgPSBjcmVhdGVTcHJpdGUoUGF0aFRvb2wuZ2V0Q29tbW9uUmVzKFwibGluZTdcIiksIDAsIDIwKVxuLy8gICAgIGJnOnNldEFuY2hvclBvaW50KGNjLnAoMCwgMSkpXG4vLyAgICAgY29udGFpbmVyOmFkZENoaWxkKGJnKVxuLy8gICAgIGJnID0gY3JlYXRlU3ByaXRlKFBhdGhUb29sLmdldENvbW1vblJlcyhcImxpbmU3XCIpLCBzaXplLndpZHRoLCAyMClcbi8vICAgICBiZzpzZXRGbGlwcGVkWCh0cnVlKVxuLy8gICAgIGJnOnNldEFuY2hvclBvaW50KGNjLnAoMSwgMSkpXG4vLyAgICAgY29udGFpbmVyOmFkZENoaWxkKGJnKVxuLy8gICAgIGxvY2FsIHRpdGxlID0gY3JlYXRlTGFiZWwoMjIsQ29uZmlnLkNvbG9yRGF0YS5kYXRhX2NvbG9yNFsxXSxuaWwsc2l6ZS53aWR0aC8yLCAxMixcIlwiLHRoaXMuc2Nyb2xsX3ZpZXcsbmlsLGNjLnAoMCwwKSlcbi8vICAgICB0aXRsZTpzZXRTdHJpbmcodHh0KVxuLy8gICAgIGNvbnRhaW5lcjphZGRDaGlsZCh0aXRsZSlcbi8vICAgICByZXR1cm4gY29udGFpbmVyLCB0aXRsZVxuLy8gZW5kXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihnaWZ0dm8pe1xuICAgICAgICB2YXIgY2hvb3NlX251bSA9IDE7XG4gICAgICAgIHRoaXMuZ2lmdF92byA9IGdpZnR2bztcbiAgICAgICAgaWYoIWdpZnR2bylyZXR1cm47XG4gICAgICAgIHZhciBnaWZ0SWQgPSBnaWZ0dm8uaWQ7XG5cbiAgICAgICAgdmFyIGdpZnRCaWQgPSBnaWZ0dm8uYmFzZV9pZDtcbiAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICBpZihDb25maWcuZ2lmdF9kYXRhLmRhdGFfY2hvb3NlX2dpZnRbZ2lmdEJpZF0pe1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBVdGlscy5nZXRJdGVtQ29uZmlnKGdpZnRCaWQpO1xuICAgICAgICAgICAgaWYoaXRlbSAmJiBpdGVtLmV4dCAmJiBpdGVtLmV4dC5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpIGluIGl0ZW0uZXh0KXtcbiAgICAgICAgICAgICAgICAgICAgY2hvb3NlX251bSA9IGl0ZW0uZXh0W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBnaWZ0X2NmZyA9IENvbmZpZy5naWZ0X2RhdGEuZGF0YV9jaG9vc2VfZ2lmdFtnaWZ0QmlkXTtcbiAgICAgICAgICAgIGZvcih2YXIgaSBpbiBnaWZ0X2NmZyl7XG4gICAgICAgICAgICAgICAgaXRlbV9saXN0LnB1c2goZ2lmdF9jZmdbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1fbGlzdC5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wic29ydF9pZFwiXSkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUdpZnRMaXN0KGdpZnRJZCwgZ2lmdEJpZCwgaXRlbV9saXN0LCBjaG9vc2VfbnVtKTtcbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldLmRlbGV0ZU1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdF9saXN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5uYW1lX2xpc3QgPSBudWxsO1xuICAgIH0sXG59KSJdfQ==
|