|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/welfare/welfare_model.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, '59603epoM5B0qWPofuy3wHr', 'welfare_model');
|
// Scripts/mod/welfare/welfare_model.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里填写详细说明,主要填写该模块的功能简要
|
// <br/>Create: 2018-12-19 10:57:29
|
// --------------------------------------------------------------------
|
var RoleController = require("role_controller");
|
|
var WelfareConst = require("welfare_const");
|
|
var PartnersummonController = require("partnersummon_controller");
|
|
var ActionController = require("action_controller");
|
|
var VipController = require("vip_controller");
|
|
var WelfareModel = cc.Class({
|
"extends": BaseClass,
|
ctor: function ctor() {},
|
initConfig: function initConfig() {
|
this.daily_award_status = 1; //每日礼状态
|
},
|
//保存下月卡信息
|
setYueka: function setYueka(data) {
|
this.yueka_data = data;
|
},
|
getYueka: function getYueka() {
|
return this.yueka_data;
|
},
|
//保存下今日充值次数
|
setRechargeCount: function setRechargeCount(count) {
|
this.recharge_num = count;
|
},
|
checkWelfareSubIsOpen: function checkWelfareSubIsOpen(id) {
|
var config = gdata("holiday_client_data", "data_info", [id]);
|
|
if (config) {
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
if (IS_SHOW_CHARGE || IS_SHOW_CHARGE == false && config.is_verifyios == 1) {
|
if (role_vo.lev >= config.open_lev) {
|
return true;
|
}
|
}
|
}
|
|
return false;
|
},
|
//判断月卡状态
|
getYuekaStatus: function getYuekaStatus() {
|
var can_charge = true;
|
|
if (!this.checkWelfareSubIsOpen(WelfareConst.WelfareIcon.yueka)) {
|
can_charge = false;
|
} else {
|
if (this.yueka_data == null) {
|
can_charge = true;
|
} else {
|
var cur_time = gcore.SmartSocket.getTime();
|
|
if (this.yueka_data.card1_end_time && this.yueka_data.card2_end_time) {
|
can_charge = this.yueka_data.card1_end_time < cur_time || this.yueka_data.card2_end_time < cur_time;
|
}
|
}
|
}
|
|
return can_charge;
|
},
|
getRechargeCount: function getRechargeCount() {
|
return this.recharge_num || 0;
|
},
|
|
/*[[
|
{"钻石召唤", 0}, --常驻类型
|
{"月耀召唤", 200},
|
{"神圣召唤", 300},
|
{"天辉召唤", 400}
|
]]*/
|
//逆向排序
|
reverseTable: function reverseTable(tab) {
|
// var tmp = {};
|
// for (var i = 1; i <= Utils.getArrLen(tab); i++) {
|
// var key = Utils.getArrLen(tab);
|
// // tmp[i] =
|
// }
|
return tab.reverse();
|
},
|
getPartnerSummonData: function getPartnerSummonData() {
|
var config = Config.recruit_award_data.data_huoli;
|
var list1 = {};
|
var list2 = {};
|
var list3 = {};
|
var list4 = {}; //本地数据分类
|
|
for (var i in config) {
|
var v = config[i];
|
|
if (v.type == 0) {
|
list1.push(v);
|
} else if (v.type == 200) {
|
list2.push(v);
|
} else if (v.type == 300) {
|
list3.push(v);
|
} else if (v.type == 400) {
|
list4.push(v);
|
}
|
} //获取开启的卡库
|
|
|
var list = PartnersummonController.getInstance().getModel().getOpenSummonData(); //开启的
|
|
var data = [];
|
|
for (var i in list) {
|
var v = list[i];
|
|
if (v == 200) {
|
for (var k in list2) {
|
data.push(list2[k]);
|
}
|
} else if (v == 300) {
|
for (var k in list3) {
|
data.push(list3[k]);
|
}
|
} else if (v == 400) {
|
for (var k in list4) {
|
data.push(list4[k]);
|
}
|
}
|
}
|
|
data = this.reverseTable(data);
|
|
for (var i in data) {
|
list1.push(data[i]);
|
}
|
|
list1 = this.reverseTable(list1);
|
return list1;
|
},
|
//接收服务端的数据 返回: 服务端的数据,本地配置表的数据
|
getServeData: function getServeData(data1) {
|
var list = [];
|
var data2 = this.getPartnerSummonData(); //抽取出开启的状态
|
|
var open_data = [];
|
|
for (var i in data1) {
|
var v = data1[i];
|
|
for (var k in data2) {
|
var m = data2[k];
|
|
if (v.id == m.id) {
|
open_data.push(v);
|
}
|
}
|
}
|
|
var model = ActionController.getInstance().getModel();
|
open_data = model.getReawardSortList(open_data);
|
|
for (var i in open_data) {
|
var v = open_data[i];
|
|
for (var k in data2) {
|
var val = data2[k];
|
|
if (v.id == val.id) {
|
list.push(val);
|
}
|
}
|
}
|
|
this.setPartnerWelfarCallRedPoint(open_data);
|
return {
|
open_data: open_data,
|
list: list
|
};
|
},
|
setPartnerWelfarCallRedPoint: function setPartnerWelfarCallRedPoint(data) {
|
this.callPartnerData = data;
|
},
|
getPartnerWelfarCallRedPoint: function getPartnerWelfarCallRedPoint() {
|
if (this.callPartnerData && Utils.next(this.callPartnerData) != null) {
|
var bool = false;
|
|
for (var i in this.callPartnerData) {
|
var v = this.callPartnerData[i];
|
|
if (v.status == 1) {
|
bool = true;
|
break;
|
}
|
}
|
|
return bool;
|
}
|
},
|
//召唤界面是否显示入口
|
setPartnerSunmonWelfarData: function setPartnerSunmonWelfarData(bool) {
|
this.summonWelfarBool = bool;
|
},
|
getPartnerSunmonWelfarData: function getPartnerSunmonWelfarData() {
|
var bool = false;
|
|
if (this.summonWelfarBool == 1) {
|
bool = true;
|
}
|
|
return bool;
|
},
|
//问卷调查
|
setQuestOpenData: function setQuestOpenData(data) {
|
this.questOpenData = data;
|
},
|
getQuestOpenData: function getQuestOpenData() {
|
return this.questOpenData;
|
},
|
|
/*周、月循环礼包
|
--[[
|
{"周循环", 1}
|
{"月循环", 2}
|
]]*/
|
setWeekMonthSortData: function setWeekMonthSortData() {
|
var data = Config.misc_data.data_cycle_gift_info;
|
this.weekGiftData = [];
|
this.monthGiftData = [];
|
|
for (var i in data) {
|
var v = data[i];
|
|
if (v) {
|
for (var k in v) {
|
var obj = v[k];
|
|
if (obj.gift_type == 1) {
|
this.weekGiftData.push(obj);
|
} else if (obj.gift_type == 2) {
|
this.monthGiftData.push(obj);
|
}
|
}
|
}
|
}
|
|
this.weekGiftData.sort(Utils.tableLowerSorter(["charge_id"]));
|
this.monthGiftData.sort(Utils.tableLowerSorter(["charge_id"]));
|
},
|
getWeekMonthSortData: function getWeekMonthSortData(index) {
|
if (!this.weekGiftData || !this.monthGiftData) return;
|
|
if (index == 1) {
|
return this.weekGiftData || [];
|
} else if (index == 2) {
|
return this.monthGiftData || [];
|
}
|
},
|
//每日礼领取状态
|
setDailyAwardStatus: function setDailyAwardStatus(status) {
|
this.daily_award_status = status;
|
|
if (status == 0) {
|
VipController.getInstance().setTipsVIPStstus(VIPREDPOINT.DAILY_AWARD, true);
|
} else {
|
VipController.getInstance().setTipsVIPStstus(VIPREDPOINT.DAILY_AWARD, false);
|
}
|
},
|
getDailyAwardStatus: function getDailyAwardStatus() {
|
return this.daily_award_status;
|
},
|
//shrh------
|
setShareAward: function setShareAward(data) {
|
this.share_award = data;
|
},
|
getShareAward: function getShareAward() {
|
return this.share_award || [];
|
},
|
setShareAwardStatus: function setShareAwardStatus(status) {
|
this.share_award_status = status;
|
},
|
getShareAwardStatus: function getShareAwardStatus() {
|
return this.share_award_status || 0;
|
},
|
setSubscriptionAward: function setSubscriptionAward(data) {
|
this.subscription_award = data;
|
},
|
//设置关注奖励领取状态,1是领取了
|
setSubscriptionAwardStatus: function setSubscriptionAwardStatus(status) {
|
this.subscription_award_status = status;
|
},
|
getSubscriptionAwardStatus: function getSubscriptionAwardStatus() {
|
return this.subscription_award_status || 0;
|
},
|
getSubscriptionAward: function getSubscriptionAward() {
|
return this.subscription_award || [];
|
},
|
//shwx-----
|
setCollectAward: function setCollectAward(data) {
|
this.collect_award = data;
|
},
|
getCollectAward: function getCollectAward() {
|
return this.collect_award || [];
|
},
|
setCollectAwardStatus: function setCollectAwardStatus(status) {
|
this.collect_award_status = status;
|
},
|
getCollectAwardStatus: function getCollectAwardStatus() {
|
return this.collect_award_status || 0;
|
}
|
});
|
module.exports = WelfareModel;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx3ZWxmYXJlX21vZGVsLmpzIl0sIm5hbWVzIjpbIlJvbGVDb250cm9sbGVyIiwicmVxdWlyZSIsIldlbGZhcmVDb25zdCIsIlBhcnRuZXJzdW1tb25Db250cm9sbGVyIiwiQWN0aW9uQ29udHJvbGxlciIsIlZpcENvbnRyb2xsZXIiLCJXZWxmYXJlTW9kZWwiLCJjYyIsIkNsYXNzIiwiQmFzZUNsYXNzIiwiY3RvciIsImluaXRDb25maWciLCJkYWlseV9hd2FyZF9zdGF0dXMiLCJzZXRZdWVrYSIsImRhdGEiLCJ5dWVrYV9kYXRhIiwiZ2V0WXVla2EiLCJzZXRSZWNoYXJnZUNvdW50IiwiY291bnQiLCJyZWNoYXJnZV9udW0iLCJjaGVja1dlbGZhcmVTdWJJc09wZW4iLCJpZCIsImNvbmZpZyIsImdkYXRhIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwiSVNfU0hPV19DSEFSR0UiLCJpc192ZXJpZnlpb3MiLCJsZXYiLCJvcGVuX2xldiIsImdldFl1ZWthU3RhdHVzIiwiY2FuX2NoYXJnZSIsIldlbGZhcmVJY29uIiwieXVla2EiLCJjdXJfdGltZSIsImdjb3JlIiwiU21hcnRTb2NrZXQiLCJnZXRUaW1lIiwiY2FyZDFfZW5kX3RpbWUiLCJjYXJkMl9lbmRfdGltZSIsImdldFJlY2hhcmdlQ291bnQiLCJyZXZlcnNlVGFibGUiLCJ0YWIiLCJyZXZlcnNlIiwiZ2V0UGFydG5lclN1bW1vbkRhdGEiLCJDb25maWciLCJyZWNydWl0X2F3YXJkX2RhdGEiLCJkYXRhX2h1b2xpIiwibGlzdDEiLCJsaXN0MiIsImxpc3QzIiwibGlzdDQiLCJpIiwidiIsInR5cGUiLCJwdXNoIiwibGlzdCIsImdldE1vZGVsIiwiZ2V0T3BlblN1bW1vbkRhdGEiLCJrIiwiZ2V0U2VydmVEYXRhIiwiZGF0YTEiLCJkYXRhMiIsIm9wZW5fZGF0YSIsIm0iLCJtb2RlbCIsImdldFJlYXdhcmRTb3J0TGlzdCIsInZhbCIsInNldFBhcnRuZXJXZWxmYXJDYWxsUmVkUG9pbnQiLCJjYWxsUGFydG5lckRhdGEiLCJnZXRQYXJ0bmVyV2VsZmFyQ2FsbFJlZFBvaW50IiwiVXRpbHMiLCJuZXh0IiwiYm9vbCIsInN0YXR1cyIsInNldFBhcnRuZXJTdW5tb25XZWxmYXJEYXRhIiwic3VtbW9uV2VsZmFyQm9vbCIsImdldFBhcnRuZXJTdW5tb25XZWxmYXJEYXRhIiwic2V0UXVlc3RPcGVuRGF0YSIsInF1ZXN0T3BlbkRhdGEiLCJnZXRRdWVzdE9wZW5EYXRhIiwic2V0V2Vla01vbnRoU29ydERhdGEiLCJtaXNjX2RhdGEiLCJkYXRhX2N5Y2xlX2dpZnRfaW5mbyIsIndlZWtHaWZ0RGF0YSIsIm1vbnRoR2lmdERhdGEiLCJvYmoiLCJnaWZ0X3R5cGUiLCJzb3J0IiwidGFibGVMb3dlclNvcnRlciIsImdldFdlZWtNb250aFNvcnREYXRhIiwiaW5kZXgiLCJzZXREYWlseUF3YXJkU3RhdHVzIiwic2V0VGlwc1ZJUFN0c3R1cyIsIlZJUFJFRFBPSU5UIiwiREFJTFlfQVdBUkQiLCJnZXREYWlseUF3YXJkU3RhdHVzIiwic2V0U2hhcmVBd2FyZCIsInNoYXJlX2F3YXJkIiwiZ2V0U2hhcmVBd2FyZCIsInNldFNoYXJlQXdhcmRTdGF0dXMiLCJzaGFyZV9hd2FyZF9zdGF0dXMiLCJnZXRTaGFyZUF3YXJkU3RhdHVzIiwic2V0U3Vic2NyaXB0aW9uQXdhcmQiLCJzdWJzY3JpcHRpb25fYXdhcmQiLCJzZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1cyIsInN1YnNjcmlwdGlvbl9hd2FyZF9zdGF0dXMiLCJnZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1cyIsImdldFN1YnNjcmlwdGlvbkF3YXJkIiwic2V0Q29sbGVjdEF3YXJkIiwiY29sbGVjdF9hd2FyZCIsImdldENvbGxlY3RBd2FyZCIsInNldENvbGxlY3RBd2FyZFN0YXR1cyIsImNvbGxlY3RfYXdhcmRfc3RhdHVzIiwiZ2V0Q29sbGVjdEF3YXJkU3RhdHVzIiwibW9kdWxlIiwi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LHlCQUFMLElBQWtDLENBQXpDO0FBQ0gsR0FqUnVCO0FBbVJ4QkUsRUFBQUEsb0JBQW9CLEVBQUUsZ0NBQVk7QUFDOUIsV0FBTyxLQUFLSixrQkFBTCxJQUEyQixFQUFsQztBQUNILEdBclJ1QjtBQXVSeEI7QUFDQUssRUFBQUEsZUFBZSxFQUFFLHlCQUFVaEcsSUFBVixFQUFnQjtBQUM3QixTQUFLaUcsYUFBTCxHQUFxQmpHLElBQXJCO0FBQ0gsR0ExUnVCO0FBNFJ4QmtHLEVBQUFBLGVBQWUsRUFBRSwyQkFBWTtBQUN6QixXQUFPLEtBQUtELGFBQUwsSUFBc0IsRUFBN0I7QUFDSCxHQTlSdUI7QUFnU3hCRSxFQUFBQSxxQkFBcUIsRUFBRSwrQkFBVXRDLE1BQVYsRUFBa0I7QUFDckMsU0FBS3VDLG9CQUFMLEdBQTRCdkMsTUFBNUI7QUFDSCxHQWxTdUI7QUFvU3hCd0MsRUFBQUEscUJBQXFCLEVBQUMsaUNBQVU7QUFDNUIsV0FBTyxLQUFLRCxvQkFBTCxJQUE2QixDQUFwQztBQUNIO0FBdFN1QixDQUFULENBQW5CO0FBeVNBRSxNQUFNLENBQUNDLE9BQVAsR0FBaUIvRyxZQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDov5nph4zloavlhpnor6bnu4bor7TmmI4s5Li76KaB5aGr5YaZ6K+l5qih5Z2X55qE5Yqf6IO9566A6KaBXG4vLyA8YnIvPkNyZWF0ZTogMjAxOC0xMi0xOSAxMDo1NzoyOVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgV2VsZmFyZUNvbnN0ID0gcmVxdWlyZShcIndlbGZhcmVfY29uc3RcIik7XG52YXIgUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl9jb250cm9sbGVyXCIpO1xudmFyIEFjdGlvbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnRyb2xsZXJcIik7XG52YXIgVmlwQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKTtcblxudmFyIFdlbGZhcmVNb2RlbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ2xhc3MsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGFpbHlfYXdhcmRfc3RhdHVzID0gMS8v5q+P5pel56S854q25oCBXG4gICAgfSxcblxuICAgIC8v5L+d5a2Y5LiL5pyI5Y2h5L+h5oGvXG4gICAgc2V0WXVla2E6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMueXVla2FfZGF0YSA9IGRhdGE7XG4gICAgfSxcblxuICAgIGdldFl1ZWthOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnl1ZWthX2RhdGE7XG4gICAgfSxcblxuICAgIC8v5L+d5a2Y5LiL5LuK5pel5YWF5YC85qyh5pWwXG4gICAgc2V0UmVjaGFyZ2VDb3VudDogZnVuY3Rpb24gKGNvdW50KSB7XG4gICAgICAgIHRoaXMucmVjaGFyZ2VfbnVtID0gY291bnQ7XG4gICAgfSxcblxuICAgIGNoZWNrV2VsZmFyZVN1YklzT3BlbjogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHZhciBjb25maWcgPSBnZGF0YShcImhvbGlkYXlfY2xpZW50X2RhdGFcIiwgXCJkYXRhX2luZm9cIiwgW2lkXSk7XG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgIGlmIChJU19TSE9XX0NIQVJHRSB8fCAoSVNfU0hPV19DSEFSR0UgPT0gZmFsc2UgJiYgY29uZmlnLmlzX3ZlcmlmeWlvcyA9PSAxKSkge1xuICAgICAgICAgICAgICAgIGlmIChyb2xlX3ZvLmxldiA+PSBjb25maWcub3Blbl9sZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIC8v5Yik5pat5pyI5Y2h54q25oCBXG4gICAgZ2V0WXVla2FTdGF0dXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNhbl9jaGFyZ2UgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tXZWxmYXJlU3ViSXNPcGVuKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi55dWVrYSkpIHtcbiAgICAgICAgICAgIGNhbl9jaGFyZ2UgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnl1ZWthX2RhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbl9jaGFyZ2UgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VyX3RpbWUgPSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMueXVla2FfZGF0YS5jYXJkMV9lbmRfdGltZSAmJiB0aGlzLnl1ZWthX2RhdGEuY2FyZDJfZW5kX3RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuX2NoYXJnZSA9ICh0aGlzLnl1ZWthX2RhdGEuY2FyZDFfZW5kX3RpbWUgPCBjdXJfdGltZSkgfHwgKHRoaXMueXVla2FfZGF0YS5jYXJkMl9lbmRfdGltZSA8IGN1cl90aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbl9jaGFyZ2VcbiAgICB9LFxuXG4gICAgZ2V0UmVjaGFyZ2VDb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWNoYXJnZV9udW0gfHwgMFxuICAgIH0sXG5cbiAgICAvKltbXG4gICAgICAgIHtcIumSu+efs+WPrOWUpFwiLCAwfSwgLS3luLjpqbvnsbvlnotcbiAgICAgICAge1wi5pyI6ICA5Y+s5ZSkXCIsIDIwMH0sXG4gICAgICAgIHtcIuelnuWco+WPrOWUpFwiLCAzMDB9LFxuICAgICAgICB7XCLlpKnovonlj6zllKRcIiwgNDAwfVxuICAgIF1dKi9cblxuICAgIC8v6YCG5ZCR5o6S5bqPXG4gICAgcmV2ZXJzZVRhYmxlOiBmdW5jdGlvbiAodGFiKSB7XG4gICAgICAgIC8vIHZhciB0bXAgPSB7fTtcbiAgICAgICAgLy8gZm9yICh2YXIgaSA9IDE7IGkgPD0gVXRpbHMuZ2V0QXJyTGVuKHRhYik7IGkrKykge1xuICAgICAgICAvLyAgICAgdmFyIGtleSA9IFV0aWxzLmdldEFyckxlbih0YWIpO1xuICAgICAgICAvLyAgICAgLy8gdG1wW2ldID0gXG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIHRhYi5yZXZlcnNlKClcbiAgICB9LFxuXG4gICAgZ2V0UGFydG5lclN1bW1vbkRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5yZWNydWl0X2F3YXJkX2RhdGEuZGF0YV9odW9saTtcbiAgICAgICAgdmFyIGxpc3QxID0ge307XG4gICAgICAgIHZhciBsaXN0MiA9IHt9O1xuICAgICAgICB2YXIgbGlzdDMgPSB7fTtcbiAgICAgICAgdmFyIGxpc3Q0ID0ge307XG4gICAgICAgIC8v5pys5Zyw5pWw5o2u5YiG57G7XG4gICAgICAgIGZvciAodmFyIGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgdiA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgIGlmICh2LnR5cGUgPT0gMCkge1xuICAgICAgICAgICAgICAgIGxpc3QxLnB1c2godik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudHlwZSA9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBsaXN0Mi5wdXNoKHYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnR5cGUgPT0gMzAwKSB7XG4gICAgICAgICAgICAgICAgbGlzdDMucHVzaCh2KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi50eXBlID09IDQwMCkge1xuICAgICAgICAgICAgICAgIGxpc3Q0LnB1c2godilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+iOt+WPluW8gOWQr+eahOWNoeW6k1xuICAgICAgICB2YXIgbGlzdCA9IFBhcnRuZXJzdW1tb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRPcGVuU3VtbW9uRGF0YSgpO1xuICAgICAgICAvL+W8gOWQr+eahFxuICAgICAgICB2YXIgZGF0YSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcbiAgICAgICAgICAgIHZhciB2ID0gbGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ID09IDIwMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbGlzdDIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKGxpc3QyW2tdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgPT0gMzAwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiBsaXN0Mykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gobGlzdDNba10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh2ID09IDQwMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbGlzdDQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKGxpc3Q0W2tdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhID0gdGhpcy5yZXZlcnNlVGFibGUoZGF0YSk7XG4gICAgICAgIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgICAgICAgICAgbGlzdDEucHVzaChkYXRhW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBsaXN0MSA9IHRoaXMucmV2ZXJzZVRhYmxlKGxpc3QxKTtcbiAgICAgICAgcmV0dXJuIGxpc3QxXG4gICAgfSxcblxuICAgIC8v5o6l5pS25pyN5Yqh56uv55qE5pWw5o2uICDov5Tlm57vvJog5pyN5Yqh56uv55qE5pWw5o2u77yM5pys5Zyw6YWN572u6KGo55qE5pWw5o2uXG4gICAgZ2V0U2VydmVEYXRhOiBmdW5jdGlvbiAoZGF0YTEpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgdmFyIGRhdGEyID0gdGhpcy5nZXRQYXJ0bmVyU3VtbW9uRGF0YSgpO1xuICAgICAgICAvL+aKveWPluWHuuW8gOWQr+eahOeKtuaAgVxuICAgICAgICB2YXIgb3Blbl9kYXRhID0gW107XG4gICAgICAgIGZvciAodmFyIGkgaW4gZGF0YTEpIHtcbiAgICAgICAgICAgIHZhciB2ID0gZGF0YTFbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGRhdGEyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG0gPSBkYXRhMltrXTtcbiAgICAgICAgICAgICAgICBpZiAodi5pZCA9PSBtLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5fZGF0YS5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb2RlbCA9IEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xuICAgICAgICBvcGVuX2RhdGEgPSBtb2RlbC5nZXRSZWF3YXJkU29ydExpc3Qob3Blbl9kYXRhKTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcGVuX2RhdGEpIHtcbiAgICAgICAgICAgIHZhciB2ID0gb3Blbl9kYXRhW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBkYXRhMikge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBkYXRhMltrXTtcbiAgICAgICAgICAgICAgICBpZiAodi5pZCA9PSB2YWwuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHZhbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQYXJ0bmVyV2VsZmFyQ2FsbFJlZFBvaW50KG9wZW5fZGF0YSk7XG4gICAgICAgIHJldHVybiB7IG9wZW5fZGF0YTogb3Blbl9kYXRhLCBsaXN0OiBsaXN0IH1cbiAgICB9LFxuXG4gICAgc2V0UGFydG5lcldlbGZhckNhbGxSZWRQb2ludDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5jYWxsUGFydG5lckRhdGEgPSBkYXRhO1xuICAgIH0sXG5cbiAgICBnZXRQYXJ0bmVyV2VsZmFyQ2FsbFJlZFBvaW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbGxQYXJ0bmVyRGF0YSAmJiBVdGlscy5uZXh0KHRoaXMuY2FsbFBhcnRuZXJEYXRhKSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgYm9vbCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmNhbGxQYXJ0bmVyRGF0YSkge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5jYWxsUGFydG5lckRhdGFbaV07XG4gICAgICAgICAgICAgICAgaWYgKHYuc3RhdHVzID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYm9vbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJvb2xcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WPrOWUpOeVjOmdouaYr+WQpuaYvuekuuWFpeWPo1xuICAgIHNldFBhcnRuZXJTdW5tb25XZWxmYXJEYXRhOiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICB0aGlzLnN1bW1vbldlbGZhckJvb2wgPSBib29sO1xuICAgIH0sXG5cbiAgICBnZXRQYXJ0bmVyU3VubW9uV2VsZmFyRGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYm9vbCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdW1tb25XZWxmYXJCb29sID09IDEpIHtcbiAgICAgICAgICAgIGJvb2wgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib29sXG4gICAgfSxcblxuICAgIC8v6Zeu5Y236LCD5p+lXG4gICAgc2V0UXVlc3RPcGVuRGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5xdWVzdE9wZW5EYXRhID0gZGF0YTtcbiAgICB9LFxuXG4gICAgZ2V0UXVlc3RPcGVuRGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdE9wZW5EYXRhO1xuICAgIH0sXG5cbiAgICAvKuWRqOOAgeaciOW+queOr+ekvOWMhVxuICAgIC0tW1tcbiAgICB7XCLlkajlvqrnjq9cIiwgMX1cbiAgICB7XCLmnIjlvqrnjq9cIiwgMn1cbiAgICBdXSovXG4gICAgc2V0V2Vla01vbnRoU29ydERhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBDb25maWcubWlzY19kYXRhLmRhdGFfY3ljbGVfZ2lmdF9pbmZvO1xuICAgICAgICB0aGlzLndlZWtHaWZ0RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLm1vbnRoR2lmdERhdGEgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgICAgICAgICB2YXIgdiA9IGRhdGFbaV07XG4gICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdltrXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5naWZ0X3R5cGUgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrR2lmdERhdGEucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iai5naWZ0X3R5cGUgPT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aEdpZnREYXRhLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLndlZWtHaWZ0RGF0YS5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wiY2hhcmdlX2lkXCJdKSk7XG4gICAgICAgIHRoaXMubW9udGhHaWZ0RGF0YS5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wiY2hhcmdlX2lkXCJdKSk7XG4gICAgfSxcblxuICAgIGdldFdlZWtNb250aFNvcnREYXRhOiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLndlZWtHaWZ0RGF0YSB8fCAhdGhpcy5tb250aEdpZnREYXRhKSByZXR1cm5cbiAgICAgICAgaWYgKGluZGV4ID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlZWtHaWZ0RGF0YSB8fCBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb250aEdpZnREYXRhIHx8IFtdO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5q+P5pel56S86aKG5Y+W54q25oCBXG4gICAgc2V0RGFpbHlBd2FyZFN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICB0aGlzLmRhaWx5X2F3YXJkX3N0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAwKSB7XG4gICAgICAgICAgICBWaXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0VGlwc1ZJUFN0c3R1cyhWSVBSRURQT0lOVC5EQUlMWV9BV0FSRCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBWaXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0VGlwc1ZJUFN0c3R1cyhWSVBSRURQT0lOVC5EQUlMWV9BV0FSRCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldERhaWx5QXdhcmRTdGF0dXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFpbHlfYXdhcmRfc3RhdHVzO1xuICAgIH0sXG5cblxuICAgIC8vc2hyaC0tLS0tLVxuICAgIHNldFNoYXJlQXdhcmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2hhcmVfYXdhcmQgPSBkYXRhO1xuICAgIH0sXG5cbiAgICBnZXRTaGFyZUF3YXJkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJlX2F3YXJkIHx8IFtdO1xuICAgIH0sXG5cbiAgICBzZXRTaGFyZUF3YXJkU3RhdHVzOiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIHRoaXMuc2hhcmVfYXdhcmRfc3RhdHVzID0gc3RhdHVzO1xuICAgIH0sXG5cbiAgICBnZXRTaGFyZUF3YXJkU3RhdHVzOmZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJlX2F3YXJkX3N0YXR1cyB8fCAwO1xuICAgIH0sXG5cbiAgICBzZXRTdWJzY3JpcHRpb25Bd2FyZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25fYXdhcmQgPSBkYXRhXG4gICAgfSxcblxuICAgIC8v6K6+572u5YWz5rOo5aWW5Yqx6aKG5Y+W54q25oCBLDHmmK/pooblj5bkuoZcbiAgICBzZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbl9hd2FyZF9zdGF0dXMgPSBzdGF0dXM7XG4gICAgfSxcblxuICAgIGdldFN1YnNjcmlwdGlvbkF3YXJkU3RhdHVzOmZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbl9hd2FyZF9zdGF0dXMgfHwgMDtcbiAgICB9LFxuXG4gICAgZ2V0U3Vic2NyaXB0aW9uQXdhcmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9uX2F3YXJkIHx8IFtdO1xuICAgIH0sXG5cbiAgICAvL3Nod3gtLS0tLVxuICAgIHNldENvbGxlY3RBd2FyZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0X2F3YXJkID0gZGF0YTtcbiAgICB9LFxuXG4gICAgZ2V0Q29sbGVjdEF3YXJkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3RfYXdhcmQgfHwgW107XG4gICAgfSxcblxuICAgIHNldENvbGxlY3RBd2FyZFN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICB0aGlzLmNvbGxlY3RfYXdhcmRfc3RhdHVzID0gc3RhdHVzO1xuICAgIH0sXG5cbiAgICBnZXRDb2xsZWN0QXdhcmRTdGF0dXM6ZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdF9hd2FyZF9zdGF0dXMgfHwgMDtcbiAgICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2VsZmFyZU1vZGVsOyJdfQ==
|