(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/welfare/view/sureveyquest_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, '68669Ad5XpC4Lw+4ffTXOFr', 'sureveyquest_window'); // Scripts/mod/welfare/view/sureveyquest_window.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-08-12 15:43:29 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var WelfareEvent = require("welfare_event"); var WelfareConst = require("welfare_const"); var SureveyquestWindow = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("welfare", "surveyquest_window"); this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意 this.win_type = WinType.Big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips this.ctrl = arguments[0]; }, // 初始化一些配置数据,可以用于声明一些变量之类的 initConfig: function initConfig() { this.topic_length = 10; //题目数 this.index_count = -1; //做题数量 this.answer_ret_temp = null; this.topic_layout = {}; //点击区域 this.answer_list = []; //答案 }, // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件 openCallBack: function openCallBack() { this.background = this.root_wnd.getChildByName("background"); this.main_container = this.root_wnd.getChildByName("main_container"); this.btn_start = this.main_container.getChildByName("btn_start"); this.btn_start.label = this.btn_start.getChildByName("Text_9").getComponent(cc.Label); this.btn_close = this.main_container.getChildByName("btn_close"); this.answer_content = this.main_container.getChildByName("answer_content"); this.answer_content.active = false; this.titleTopic = this.main_container.getChildByName("titleTopic").getComponent(cc.Label); this.topic_layout_nd = this.answer_content.getChildByName("topic_layout"); this.scroll = this.answer_content.getChildByName("answer_scroll"); this.content = this.answer_content.getChildByName("answer_scroll").getChildByName("content"); this.main_container.getChildByName("Text_10").getComponent(cc.Label).string = Utils.TI18N("小助手的冒险调查"); // --调查开始的框 this.text_prompt = this.main_container.getChildByName("text_prompt"); this.start_title = this.text_prompt.getChildByName("Text_8").getComponent(cc.Label); this.start_title.string = ""; this.start_memo = this.text_prompt.getChildByName("Text_8_0").getComponent(cc.Label); this.start_memo.string = ""; // --填空框 this.suggest_panel = this.main_container.getChildByName("suggest_panel"); this.text_field_eb = this.suggest_panel.getChildByName("text_Field").getComponent(cc.EditBox); this.suggest_panel.active = false; // --奖励框 this.reward_panel = this.main_container.getChildByName("reward_panel"); this.reward_panel.active = false; }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { this.btn_start.on('click', function () { Utils.playButtonSound(1); var open_data = this.ctrl.getModel().getQuestOpenData(); if (open_data && open_data.flag != 0) { this.ctrl.sender24604(); return; } if (this.index_count > this.topic_length) return; if (this.questNaire_list) { var last_data = this.questNaire_list[this.index_count]; //有题目 var tab = {}; tab.id = last_data.id; tab.topic_type = last_data.topic_type; if (last_data.specific_type != WelfareConst.QuestConst.fill_blank) { var status_return = false; for (var i in this.topic_layout) { if (this.topic_layout[i].active && this.topic_layout[i].getChildByName("checkmark").active) { status_return = true; break; } } if (!status_return && last_data.must == 1) { message(Utils.TI18N("必须选择一个答案")); return; } // [{id:"题目ID",topic_type:"类型",ret:"ret"},{id:"题目ID",topic_type:"类型",ret:"ret"},{id:"题目ID",topic_type:"类型",ret:"ret"}] var str = ""; for (var _i in this.topic_layout) { if (this.topic_layout[_i].active && this.topic_layout[_i].getChildByName("checkmark").active) { str += _i; } } tab.ret = str; } else { //意见 if (last_data.must == 1 && this.text_field_eb.string == "") { message(Utils.TI18N("当前题必填")); return; } tab.ret = this.text_field_eb.string; } this.answer_list.push(tab); } this.index_count = this.index_count + 1; if (this.index_count == 0) { this.ctrl.sender24602(); } if (this.questNaire_list) { if (this.index_count == this.questNaire_list.length) { this.ctrl.sender24603(this.answer_list); } else { this.startTopicAnswer(this.questNaire_list); } } }, this); this.btn_close.on('click', function () { Utils.playButtonSound(2); this.ctrl.openSureveyQuestView(false); }, this); this.addGlobalEvent(WelfareEvent.Get_SureveyQuest_Basic, function (data) { if (!data || Utils.next(data) == null) return; var open = this.ctrl.getModel().getQuestOpenData(); if (open && open.status == 0) { return; } this.answer_reward_list = data.rewards; var open_data = this.ctrl.getModel().getQuestOpenData(); if (open_data) { if (open_data.flag == 0) { this.start_title.string = Utils.TI18N("亲爱的冒险者大人:"); this.start_memo.string = Utils.TI18N("辛苦您参加小助手的冒险调查,小助手为大人\n\n准备了小小谢礼,放在了问卷的最后哦~"); } else { this.getRewardList(open_data.flag); } } }.bind(this)); this.addGlobalEvent(WelfareEvent.Get_SureveyQuest_Topic_Content, function (data) { if (!data || Utils.next(data) == null) return; var open = this.ctrl.getModel().getQuestOpenData(); if (open && open.status == 0) { return; } this.topic_length = data.questionnaire_list.length; data.questionnaire_list.sort(function (a, b) { return a.sort - b.sort; }); this.questNaire_list = data.questionnaire_list; this.startTopicAnswer(this.questNaire_list); }.bind(this)); this.addGlobalEvent(WelfareEvent.SureveyQuest_Submit, function () { this.answer_content.active = false; this.suggest_panel.active = false; this.titleTopic.node.active = false; this.getRewardList(); }, this); this.addGlobalEvent(WelfareEvent.Get_SureveyQuest_Get_Reward, function (data) { if (!data || Utils.next(data) == null) return; var open = this.ctrl.getModel().getQuestOpenData(); if (open && open.status == 0) { return; } this.btn_start.label.string = Utils.TI18N("已完成"); this.btn_start.label.node.getComponent(cc.LabelOutline).enabled = false; this.btn_start.getComponent(cc.Button).interactable = false; this.btn_start.getComponent(cc.Button).enableAutoGrayEffect = true; }, this); }, // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了 openRootWnd: function openRootWnd(params) { var open_data = this.ctrl.getModel().getQuestOpenData(); if (open_data.flag == 1) { this.ctrl.setWelfareStatus(WelfareConst.WelfareIcon.quest, true); } else { this.ctrl.setWelfareStatus(WelfareConst.WelfareIcon.quest, false); } this.ctrl.sender24601(); }, //题目 startTopicAnswer: function startTopicAnswer(data) { var _this = this; this.scroll.getComponent(cc.ScrollView).scrollToTop(0); this.text_prompt.active = false; if (!data || Utils.next(data) == null) return; if (!data[this.index_count]) { return; } var answer = data[this.index_count].specific_type; if (answer == WelfareConst.QuestConst.single) { this.selectNum = WelfareConst.QuestConst.single; } else if (answer == WelfareConst.QuestConst.multiple) { this.selectNum = WelfareConst.QuestConst.multiple; } this.titleTopic.string = data[this.index_count].title; if (answer == WelfareConst.QuestConst.fill_blank) { this.answer_content.active = false; this.suggest_panel.active = true; this.text_field_eb.string = ""; return; } else { this.answer_content.active = true; this.suggest_panel.active = false; } var str = data[this.index_count].option.replace(/\\r/g, ""); var strArr = []; for (var i = 0; i < str.length; ++i) { if (str[i] == '"') { strArr.push(i); } } var topic = {}; for (var _i2 = 0; _i2 < strArr.length / 4; ++_i2) { var index = _i2 * 4; var p = /[a-z]/i; var string = str.slice(strArr[index] + 1, strArr[index + 1]); var string1 = str.slice(strArr[index + 2] + 1, strArr[index + 3]); var b = p.test(string); if (b) { topic[string] = string1; } } for (var _i3 in this.topic_layout) { if (this.topic_layout[_i3]) { this.topic_layout[_i3].active = false; this.topic_layout[_i3].getChildByName("checkmark").active = false; } } var spacingY = 30; var count = 0; var itemHeight = 40; var height = 5; var _loop = function _loop(_i4) { var node = _this.topic_layout[_i4]; if (node == null) { node = cc.instantiate(_this.topic_layout_nd); _this.content.addChild(node); node.background_sp = node.getChildByName("Background").getComponent(cc.Sprite); node.label = node.getChildByName("Background").getChildByName("label").getComponent("cc.Label"); node.getChildByName("checkmark").active = false; _this.topic_layout[_i4] = node; node.on('touchend', function (event) { this.setButtonState(_i4); }, _this); } node.active = true; count++; var path = void 0; if (answer == WelfareConst.QuestConst.single) { path = PathTool.getUIIconPath("common", "common_1030"); } else { path = PathTool.getUIIconPath("common", "common_1044"); } node.label.string = topic[_i4]; node.label._updateRenderData(true); 40 + 30 * (2 - 1); var y = height; if (node.label.node.height > itemHeight) { height = y + node.label.node.height + spacingY; } else { height = y + itemHeight + spacingY; } node.setPosition(-243, -y); _this.loadRes(path, function (res) { node.background_sp.spriteFrame = res; }.bind(_this)); }; for (var _i4 in topic) { _loop(_i4); } this.content.height = height - spacingY; if (this.index_count != this.topic_length) { this.btn_start.label.string = Utils.TI18N("下一页"); } }, setButtonState: function setButtonState(index) { if (this.selectNum == WelfareConst.QuestConst.single) { for (var i in this.topic_layout) { if (this.topic_layout[i].active) { this.topic_layout[i].getChildByName("checkmark").active = false; } } this.topic_layout[index].getChildByName("checkmark").active = true; } else if (this.selectNum == WelfareConst.QuestConst.multiple) { this.topic_layout[index].getChildByName("checkmark").active = !this.topic_layout[index].getChildByName("checkmark").active; var count = 0; for (var _i5 in this.topic_layout) { if (this.topic_layout[_i5].active && this.topic_layout[_i5].getChildByName("checkmark").active) { count++; } } if (count > this.selectNum) { if (count == this.selectNum + 1) { this.topic_layout[index].getChildByName("checkmark").active = false; } message(Utils.TI18N("最多选择三个选项")); } } }, getRewardList: function getRewardList(flag) { flag = flag || 1; this.reward_panel.active = true; this.end_memo = this.reward_panel.getChildByName("Text_1").getComponent(cc.Label); this.end_memo.string = Utils.TI18N("亲爱的冒险者大人~\n\n请收下小助手的一点心意"); if (flag == 2) { this.btn_start.label.string = Utils.TI18N("已完成"); this.btn_start.label.node.getComponent(cc.LabelOutline).enabled = false; this.btn_start.getComponent(cc.Button).interactable = false; this.btn_start.getComponent(cc.Button).enableAutoGrayEffect = true; } else { this.btn_start.label.string = Utils.TI18N("领取奖励"); } if (this.answer_reward_list) { var content = this.reward_panel.getChildByName("good_cons").getChildByName("content"); var space_x = 10; this.award_item = []; for (var i = 0; i < this.answer_reward_list.length; ++i) { var bid = this.answer_reward_list[i].bid; var num = this.answer_reward_list[i].num; var item = ItemsPool.getInstance().getItem("backpack_item"); item.setParent(content); var x = 60 + i * 120 + i * space_x; item.setPosition(x, 60); item.show(); item.setData({ bid: bid, num: num }); this.award_item.push(item); } content.width = this.answer_reward_list.length * 120 + (this.answer_reward_list.length - 1) * space_x; } }, // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象 closeCallBack: function closeCallBack() { if (this.award_item) { for (var i = 0; i < this.award_item.length; ++i) { if (this.award_item[i]) { this.award_item[i].deleteMe(); this.award_item[i] = null; } } this.award_item = null; } this.ctrl.openSureveyQuestView(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx2aWV3XFxzdXJldmV5cXVlc3Rfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIldlbGZhcmVFdmVudCIsIldlbGZhcmVDb25zdCIsIlN1cmV2ZXlxdWVzdFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkJpZyIsImN0cmwiLCJhcmd1bWVudHMiLCJpbml0Q29uZmlnIiwidG9waWNfbGVuZ3RoIiwiaW5kZXhfY291bnQiLCJhbnN3ZXJfcmV0X3RlbXAiLCJ0b3BpY19sYXlvdXQiLCJhbnN3ZXJfbGlzdCIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJidG5fc3RhcnQiLCJsYWJlbCIsImdldENvbXBvbmVudCIsIkxhYmVsIiwiYnRuX2Nsb3NlIiwiYW5zd2VyX2NvbnRlbnQiLCJhY3RpdmUiLCJ0aXRsZVRvcGljIiwidG9waWNfbGF5b3V0X25kIiwic2Nyb2xsIiwiY29udGVudCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ0ZXh0X3Byb21wdCIsInN0YXJ0X3RpdGxlIiwic3RhcnRfbWVtbyIsInN1Z2dlc3RfcGFuZWwiLCJ0ZXh0X2ZpZWxkX2ViIiwiRWRpdEJveCIsInJld2FyZF9wYW5lbCIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsIm9wZW5fZGF0YSIsImdldE1vZGVsIiwiZ2V0UXVlc3RPcGVuRGF0YSIsImZsYWciLCJzZW5kZXIyNDYwNCIsInF1ZXN0TmFpcmVfbGlzdCIsImxhc3RfZGF0YSIsInRhYiIsImlkIiwidG9waWNfdHlwZSIsInNwZWNpZmljX3R5cGUiLCJRdWVzdENvbnN0IiwiZmlsbF9ibGFuayIsInN0YXR1c19yZXR1cm4iLCJpIiwibXVzdCIsIm1lc3NhZ2UiLCJzdHIiLCJyZXQiLCJwdXNoIiwic2VuZGVyMjQ2MDIiLCJsZW5ndGgiLCJzZW5kZXIyNDYwMyIsInN0YXJ0VG9waWNBbnN3ZXIiLCJvcGVuU3VyZXZleVF1ZXN0VmlldyIsImFkZEdsb2JhbEV2ZW50IiwiR2V0X1N1cmV2ZXlRdWVzdF9CYXNpYyIsImRhdGEiLCJuZXh0Iiwib3BlbiIsInN0YXR1cyIsImFuc3dlcl9yZXdhcmRfbGlzdCIsInJld2FyZHMiLCJnZXRSZXdhcmRMaXN0IiwiYmluZCIsIkdldF9TdXJldmV5UXVlc3RfVG9waWNfQ29udGVudCIsInF1ZXN0aW9ubmFpcmVfbGlzdCIsInNvcnQiLCJhIiwiYiIsIlN1cmV2ZXlRdWVzdF9TdWJtaXQiLCJub2RlIiwiR2V0X1N1cmV2ZXlRdWVzdF9HZXRfUmV3YXJkIiwiTGFiZWxPdXRsaW5lIiwiZW5hYmxlZCIsIkJ1dHRvbiIsImludGVyYWN0YWJsZSIsImVuYWJsZUF1dG9HcmF5RWZmZWN0Iiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJzZXRXZWxmYXJlU3RhdHVzIiwiV2VsZmFyZUljb24iLCJxdWVzdCIsInNlbmRlcjI0NjAxIiwiU2Nyb2xsVmlldyIsInNjcm9sbFRvVG9wIiwiYW5zd2VyIiwic2luZ2xlIiwic2VsZWN0TnVtIiwibXVsdGlwbGUiLCJ0aXRsZSIsIm9wdGlvbiIsInJlcGxhY2UiLCJzdHJBcnIiLCJ0b3BpYyIsImluZGV4IiwicCIsInNsaWNlIiwic3RyaW5nMSIsInRlc3QiLCJzcGFjaW5nWSIsImNvdW50IiwiaXRlbUhlaWdodCIsImhlaWdodCIsImluc3RhbnRpYXRlIiwiYWRkQ2hpbGQiLCJiYWNrZ3JvdW5kX3NwIiwiU3ByaXRlIiwiZXZlbnQiLCJzZXRCdXR0b25TdGF0ZSIsInBhdGgiLCJnZXRVSUljb25QYXRoIiwiX3VwZGF0ZVJlbmRlckRhdGEiLCJ5Iiwic2V0UG9zaXRpb24iLCJsb2FkUmVzIiwicmVzIiwic3ByaXRlRnJhbWUiLCJlbmRfbWVtbyIsInNwYWNlX3giLCJhd2FyZF9pdGVtIiwiYmlkIiwibnVtIiwiaXRlbSIsIkl0ZW1zUG9vbCIsImdldEluc3RhbmNlIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsIngiLCJzaG93Iiwic2V0RGF0YSIsIndpZHRoIiwiY2xvc2VDYWxsQmFjayIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsWUFBWSxHQUFHRCxPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFDQSxJQUFJRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUNBLElBQUlHLGtCQUFrQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUM5QixhQUFTQyxRQURxQjtBQUU5QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlQsUUFBUSxDQUFDVSxhQUFULENBQXVCLFNBQXZCLEVBQWtDLG9CQUFsQyxDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxRQUF6QixDQUZjLENBRW9DOztBQUNsRCxTQUFLQyxRQUFMLEdBQWdCQyxPQUFPLENBQUNDLEdBQXhCLENBSGMsQ0FHNkI7O0FBQzNDLFNBQUtDLElBQUwsR0FBWUMsU0FBUyxDQUFDLENBQUQsQ0FBckI7QUFDSCxHQVA2QjtBQVM5QjtBQUNBQyxFQUFBQSxVQUFVLEVBQUMsc0JBQVU7QUFDakIsU0FBS0MsWUFBTCxHQUFvQixFQUFwQixDQURpQixDQUNNOztBQUN2QixTQUFLQyxXQUFMLEdBQW1CLENBQUMsQ0FBcEIsQ0FGaUIsQ0FFSzs7QUFDdEIsU0FBS0MsZUFBTCxHQUF1QixJQUF2QjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsRUFBcEIsQ0FKaUIsQ0FJTTs7QUFDdkIsU0FBS0MsV0FBTCxHQUFtQixF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LENBQVYsRUFBWUEsQ0FBQyxHQUFDLEtBQUs0RSxVQUFMLENBQWdCckUsTUFBOUIsRUFBcUMsRUFBRVAsQ0FBdkMsRUFBeUM7QUFDckMsWUFBRyxLQUFLNEUsVUFBTCxDQUFnQjVFLENBQWhCLENBQUgsRUFBc0I7QUFDbEIsZUFBSzRFLFVBQUwsQ0FBZ0I1RSxDQUFoQixFQUFtQnlGLFFBQW5CO0FBQ0EsZUFBS2IsVUFBTCxDQUFnQjVFLENBQWhCLElBQXFCLElBQXJCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLNEUsVUFBTCxHQUFrQixJQUFsQjtBQUNIOztBQUVELFNBQUsvSCxJQUFMLENBQVU2RCxvQkFBVixDQUErQixLQUEvQjtBQUNIO0FBNVU2QixDQUFULENBQXpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wOC0xMiAxNTo0MzoyOVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBXZWxmYXJlRXZlbnQgPSByZXF1aXJlKFwid2VsZmFyZV9ldmVudFwiKVxudmFyIFdlbGZhcmVDb25zdCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnN0XCIpXG52YXIgU3VyZXZleXF1ZXN0V2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIndlbGZhcmVcIiwgXCJzdXJ2ZXlxdWVzdF93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkJpZzsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jdHJsID0gYXJndW1lbnRzWzBdXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMudG9waWNfbGVuZ3RoID0gMTAgLy/popjnm67mlbBcbiAgICAgICAgdGhpcy5pbmRleF9jb3VudCA9IC0xIC8v5YGa6aKY5pWw6YePXG4gICAgICAgIHRoaXMuYW5zd2VyX3JldF90ZW1wID0gbnVsbDtcbiAgICAgICAgdGhpcy50b3BpY19sYXlvdXQgPSB7fSAvL+eCueWHu+WMuuWfn1xuICAgICAgICB0aGlzLmFuc3dlcl9saXN0ID0gW10gLy/nrZTmoYhcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKVxuICAgIFxuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpXG4gICAgICAgIHRoaXMuYnRuX3N0YXJ0ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9zdGFydFwiKVxuICAgICAgICB0aGlzLmJ0bl9zdGFydC5sYWJlbCA9IHRoaXMuYnRuX3N0YXJ0LmdldENoaWxkQnlOYW1lKFwiVGV4dF85XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5idG5fY2xvc2UgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX2Nsb3NlXCIpXG4gICAgICAgIHRoaXMuYW5zd2VyX2NvbnRlbnQgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYW5zd2VyX2NvbnRlbnRcIilcbiAgICAgICAgdGhpcy5hbnN3ZXJfY29udGVudC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aXRsZVRvcGljID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlVG9waWNcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLnRvcGljX2xheW91dF9uZCA9IHRoaXMuYW5zd2VyX2NvbnRlbnQuZ2V0Q2hpbGRCeU5hbWUoXCJ0b3BpY19sYXlvdXRcIilcbiAgICAgICAgdGhpcy5zY3JvbGwgPSB0aGlzLmFuc3dlcl9jb250ZW50LmdldENoaWxkQnlOYW1lKFwiYW5zd2VyX3Njcm9sbFwiKVxuICAgICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmFuc3dlcl9jb250ZW50LmdldENoaWxkQnlOYW1lKFwiYW5zd2VyX3Njcm9sbFwiKS5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIilcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMTBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWwj+WKqeaJi+eahOWGkumZqeiwg+afpVwiKVxuICAgICAgICAvLyAtLeiwg+afpeW8gOWni+eahOahhlxuICAgICAgICB0aGlzLnRleHRfcHJvbXB0ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRleHRfcHJvbXB0XCIpXG4gICAgICAgIHRoaXMuc3RhcnRfdGl0bGUgPSB0aGlzLnRleHRfcHJvbXB0LmdldENoaWxkQnlOYW1lKFwiVGV4dF84XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5zdGFydF90aXRsZS5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLnN0YXJ0X21lbW8gPSB0aGlzLnRleHRfcHJvbXB0LmdldENoaWxkQnlOYW1lKFwiVGV4dF84XzBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLnN0YXJ0X21lbW8uc3RyaW5nID0gXCJcIjtcblxuICAgICAgICAvLyAtLeWhq+epuuahhlxuICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic3VnZ2VzdF9wYW5lbFwiKVxuICAgICAgICB0aGlzLnRleHRfZmllbGRfZWIgPSB0aGlzLnN1Z2dlc3RfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ0ZXh0X0ZpZWxkXCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KVxuICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gLS3lpZblirHmoYZcbiAgICAgICAgdGhpcy5yZXdhcmRfcGFuZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicmV3YXJkX3BhbmVsXCIpXG4gICAgICAgIHRoaXMucmV3YXJkX3BhbmVsLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJ0bl9zdGFydC5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGxldCBvcGVuX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgICAgIGlmKG9wZW5fZGF0YSAmJiBvcGVuX2RhdGEuZmxhZyAhPSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjQ2MDQoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5pbmRleF9jb3VudCA+IHRoaXMudG9waWNfbGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICBpZih0aGlzLnF1ZXN0TmFpcmVfbGlzdCl7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RfZGF0YSA9IHRoaXMucXVlc3ROYWlyZV9saXN0W3RoaXMuaW5kZXhfY291bnRdXG4gICAgICAgICAgICAgICAgLy/mnInpopjnm65cbiAgICAgICAgICAgICAgICBsZXQgdGFiID0ge31cbiAgICAgICAgICAgICAgICB0YWIuaWQgPSBsYXN0X2RhdGEuaWQ7XG4gICAgICAgICAgICAgICAgdGFiLnRvcGljX3R5cGUgPSBsYXN0X2RhdGEudG9waWNfdHlwZTtcbiAgICAgICAgICAgICAgICBpZihsYXN0X2RhdGEuc3BlY2lmaWNfdHlwZSAhPSAgV2VsZmFyZUNvbnN0LlF1ZXN0Q29uc3QuZmlsbF9ibGFuayl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGF0dXNfcmV0dXJuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLnRvcGljX2xheW91dCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnRvcGljX2xheW91dFtpXS5hY3RpdmUgJiYgdGhpcy50b3BpY19sYXlvdXRbaV0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcmV0dXJuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKCFzdGF0dXNfcmV0dXJuICYmIGxhc3RfZGF0YS5tdXN0ID09IDEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuW/hemhu+mAieaLqeS4gOS4quetlOahiFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFt7aWQ6XCLpopjnm65JRFwiLHRvcGljX3R5cGU6XCLnsbvlnotcIixyZXQ6XCJyZXRcIn0se2lkOlwi6aKY55uuSURcIix0b3BpY190eXBlOlwi57G75Z6LXCIscmV0OlwicmV0XCJ9LHtpZDpcIumimOebrklEXCIsdG9waWNfdHlwZTpcIuexu+Wei1wiLHJldDpcInJldFwifV1cbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHRoaXMudG9waWNfbGF5b3V0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudG9waWNfbGF5b3V0W2ldLmFjdGl2ZSAmJiB0aGlzLnRvcGljX2xheW91dFtpXS5nZXRDaGlsZEJ5TmFtZShcImNoZWNrbWFya1wiKS5hY3RpdmUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGFiLnJldCA9IHN0cjtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgLy/mhI/op4FcbiAgICAgICAgICAgICAgICAgICAgaWYobGFzdF9kYXRhLm11c3QgPT0gMSAmJiB0aGlzLnRleHRfZmllbGRfZWIuc3RyaW5nID09IFwiXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuW9k+WJjemimOW/heWhq1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRhYi5yZXQgPSB0aGlzLnRleHRfZmllbGRfZWIuc3RyaW5nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2VyX2xpc3QucHVzaCh0YWIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluZGV4X2NvdW50ID0gdGhpcy5pbmRleF9jb3VudCArIDFcbiAgICAgICAgICAgIGlmKHRoaXMuaW5kZXhfY291bnQgPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjI0NjAyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMucXVlc3ROYWlyZV9saXN0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluZGV4X2NvdW50ID09IHRoaXMucXVlc3ROYWlyZV9saXN0Lmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyNDYwMyh0aGlzLmFuc3dlcl9saXN0KVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VG9waWNBbnN3ZXIodGhpcy5xdWVzdE5haXJlX2xpc3QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYnRuX2Nsb3NlLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgyKVxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TdXJldmV5UXVlc3RWaWV3KGZhbHNlKVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoV2VsZmFyZUV2ZW50LkdldF9TdXJldmV5UXVlc3RfQmFzaWMsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBpZighZGF0YSB8fCBVdGlscy5uZXh0KGRhdGEpID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBvcGVuID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0UXVlc3RPcGVuRGF0YSgpXG4gICAgICAgICAgICBpZihvcGVuICYmIG9wZW4uc3RhdHVzID09IDApe1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3QgPSBkYXRhLnJld2FyZHNcbiAgICAgICAgICAgIGxldCBvcGVuX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgICAgIGlmKG9wZW5fZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYob3Blbl9kYXRhLmZsYWcgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRfdGl0bGUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkurLniLHnmoTlhpLpmanogIXlpKfkurrvvJpcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydF9tZW1vLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6L6b6Ium5oKo5Y+C5Yqg5bCP5Yqp5omL55qE5YaS6Zmp6LCD5p+l77yM5bCP5Yqp5omL5Li65aSn5Lq6XFxuXFxu5YeG5aSH5LqG5bCP5bCP6LCi56S877yM5pS+5Zyo5LqG6Zeu5Y2355qE5pyA5ZCO5ZOmflwiKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJld2FyZExpc3Qob3Blbl9kYXRhLmZsYWcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoV2VsZmFyZUV2ZW50LkdldF9TdXJldmV5UXVlc3RfVG9waWNfQ29udGVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIGlmKCFkYXRhIHx8IFV0aWxzLm5leHQoZGF0YSkgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IG9wZW4gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgICAgIGlmKG9wZW4gJiYgb3Blbi5zdGF0dXMgPT0gMCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvcGljX2xlbmd0aCA9IGRhdGEucXVlc3Rpb25uYWlyZV9saXN0Lmxlbmd0aFxuICAgICAgICAgICAgZGF0YS5xdWVzdGlvbm5haXJlX2xpc3Quc29ydChmdW5jdGlvbihhLGIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnNvcnQgLSBiLnNvcnQgXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5xdWVzdE5haXJlX2xpc3QgPSBkYXRhLnF1ZXN0aW9ubmFpcmVfbGlzdFxuICAgICAgICAgICAgdGhpcy5zdGFydFRvcGljQW5zd2VyKHRoaXMucXVlc3ROYWlyZV9saXN0KVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoV2VsZmFyZUV2ZW50LlN1cmV2ZXlRdWVzdF9TdWJtaXQsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyX2NvbnRlbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMudGl0bGVUb3BpYy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5nZXRSZXdhcmRMaXN0KClcbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFdlbGZhcmVFdmVudC5HZXRfU3VyZXZleVF1ZXN0X0dldF9SZXdhcmQsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBpZighZGF0YSB8fCBVdGlscy5uZXh0KGRhdGEpID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBvcGVuID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0UXVlc3RPcGVuRGF0YSgpXG4gICAgICAgICAgICBpZihvcGVuICYmIG9wZW4uc3RhdHVzID09IDApe1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQubGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LlrozmiJBcIilcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmxhYmVsLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmdldENvbXBvbmVudChjYy5CdXR0b24pLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gdHJ1ZVxuICAgICAgICB9LHRoaXMpXG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIMs5Lmf5bCx5piv5LiA5Liq56qX5L2T55qE5q2j5byP5YWl5Y+jLOWPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9wZW5Sb290V25kOmZ1bmN0aW9uKHBhcmFtcyl7XG4gICAgICAgIGxldCBvcGVuX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRRdWVzdE9wZW5EYXRhKClcbiAgICAgICAgaWYob3Blbl9kYXRhLmZsYWcgPT0gMSl7XG4gICAgICAgICAgICB0aGlzLmN0cmwuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ucXVlc3QsIHRydWUpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5jdHJsLnNldFdlbGZhcmVTdGF0dXMoV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLnF1ZXN0LCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjQ2MDEoKVxuICAgIH0sXG4gICAgLy/popjnm65cbiAgICBzdGFydFRvcGljQW5zd2VyKGRhdGEpe1xuICAgICAgICB0aGlzLnNjcm9sbC5nZXRDb21wb25lbnQoY2MuU2Nyb2xsVmlldykuc2Nyb2xsVG9Ub3AoMClcbiAgICAgICAgdGhpcy50ZXh0X3Byb21wdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYoIWRhdGEgfHwgVXRpbHMubmV4dChkYXRhKSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlmKCFkYXRhW3RoaXMuaW5kZXhfY291bnRdKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGxldCBhbnN3ZXIgPSBkYXRhW3RoaXMuaW5kZXhfY291bnRdLnNwZWNpZmljX3R5cGVcbiAgICAgICAgaWYoYW5zd2VyID09IFdlbGZhcmVDb25zdC5RdWVzdENvbnN0LnNpbmdsZSl7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE51bSA9IFdlbGZhcmVDb25zdC5RdWVzdENvbnN0LnNpbmdsZVxuICAgICAgICB9ZWxzZSBpZihhbnN3ZXIgPT0gV2VsZmFyZUNvbnN0LlF1ZXN0Q29uc3QubXVsdGlwbGUpe1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROdW0gPSBXZWxmYXJlQ29uc3QuUXVlc3RDb25zdC5tdWx0aXBsZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGl0bGVUb3BpYy5zdHJpbmcgPSBkYXRhW3RoaXMuaW5kZXhfY291bnRdLnRpdGxlXG4gICAgICAgIGlmKGFuc3dlciA9PSBXZWxmYXJlQ29uc3QuUXVlc3RDb25zdC5maWxsX2JsYW5rKXtcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyX2NvbnRlbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudGV4dF9maWVsZF9lYi5zdHJpbmcgPSBcIlwiXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmFuc3dlcl9jb250ZW50LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RfcGFuZWwuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0ciA9IGRhdGFbdGhpcy5pbmRleF9jb3VudF0ub3B0aW9uLnJlcGxhY2UoL1xcXFxyL2csXCJcIilcbiAgICAgICAgbGV0IHN0ckFyciA9IFtdXG4gICAgICAgIGZvcihsZXQgaT0wO2k8c3RyLmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgaWYoc3RyW2ldID09ICdcIicpe1xuICAgICAgICAgICAgICAgIHN0ckFyci5wdXNoKGkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRvcGljID0ge31cbiAgICAgICAgZm9yKGxldCBpPTA7aTxzdHJBcnIubGVuZ3RoLzQ7KytpKXtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGkqNFxuICAgICAgICAgICAgbGV0IHAgPSAvW2Etel0vaTsgXG4gICAgICAgICAgICBsZXQgc3RyaW5nID0gc3RyLnNsaWNlKHN0ckFycltpbmRleF0rMSxzdHJBcnJbaW5kZXgrMV0pXG4gICAgICAgICAgICBsZXQgc3RyaW5nMSA9IHN0ci5zbGljZShzdHJBcnJbaW5kZXgrMl0rMSxzdHJBcnJbaW5kZXgrM10pXG4gICAgICAgICAgICBsZXQgYiA9IHAudGVzdChzdHJpbmcpO1xuICAgICAgICAgICAgaWYoYil7XG4gICAgICAgICAgICAgICAgdG9waWNbc3RyaW5nXSA9IHN0cmluZzFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy50b3BpY19sYXlvdXQpe1xuICAgICAgICAgICAgaWYodGhpcy50b3BpY19sYXlvdXRbaV0pe1xuICAgICAgICAgICAgICAgIHRoaXMudG9waWNfbGF5b3V0W2ldLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudG9waWNfbGF5b3V0W2ldLmdldENoaWxkQnlOYW1lKFwiY2hlY2ttYXJrXCIpLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzcGFjaW5nWSA9IDMwO1xuICAgICAgICBsZXQgY291bnQgPSAwXG4gICAgICAgIGxldCBpdGVtSGVpZ2h0ID0gNDBcbiAgICAgICAgbGV0IGhlaWdodCA9IDVcbiAgICAgICAgZm9yKGxldCBpIGluIHRvcGljKXtcbiAgICAgICAgICAgIGxldCBub2RlID0gdGhpcy50b3BpY19sYXlvdXRbaV1cbiAgICAgICAgICAgIGlmKG5vZGUgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgbm9kZSA9IGNjLmluc3RhbnRpYXRlKHRoaXMudG9waWNfbGF5b3V0X25kKVxuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudC5hZGRDaGlsZChub2RlKVxuICAgICAgICAgICAgICAgIG5vZGUuYmFja2dyb3VuZF9zcCA9IG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCYWNrZ3JvdW5kXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgICAgIG5vZGUubGFiZWwgPSBub2RlLmdldENoaWxkQnlOYW1lKFwiQmFja2dyb3VuZFwiKS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChcImNjLkxhYmVsXCIpO1xuICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy50b3BpY19sYXlvdXRbaV0gPSBub2RlO1xuICAgICAgICAgICAgICAgIG5vZGUub24oJ3RvdWNoZW5kJyxmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QnV0dG9uU3RhdGUoaSlcbiAgICAgICAgICAgICAgICB9LHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICBjb3VudCsrXG4gICAgICAgICAgICBsZXQgcGF0aFxuICAgICAgICAgICAgaWYoYW5zd2VyID09IFdlbGZhcmVDb25zdC5RdWVzdENvbnN0LnNpbmdsZSl7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIixcImNvbW1vbl8xMDMwXCIpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBwYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzEwNDRcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUubGFiZWwuc3RyaW5nID0gdG9waWNbaV1cbiAgICAgICAgICAgIG5vZGUubGFiZWwuX3VwZGF0ZVJlbmRlckRhdGEodHJ1ZSlcbiAgICAgICAgICAgIDQwICsgMzAgKiAoMi0xKVxuICAgICAgICAgICAgbGV0IHkgPSBoZWlnaHRcbiAgICAgICAgICAgIGlmKG5vZGUubGFiZWwubm9kZS5oZWlnaHQgPiBpdGVtSGVpZ2h0KXtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSAoeSArIG5vZGUubGFiZWwubm9kZS5oZWlnaHQpICsgc3BhY2luZ1lcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGhlaWdodCA9ICh5ICsgaXRlbUhlaWdodCkgKyBzcGFjaW5nWVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBub2RlLnNldFBvc2l0aW9uKC0yNDMsLXkpXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocGF0aCxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgICAgIG5vZGUuYmFja2dyb3VuZF9zcC5zcHJpdGVGcmFtZSA9IHJlcztcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnQuaGVpZ2h0ID0gaGVpZ2h0IC0gc3BhY2luZ1lcbiAgICAgICAgaWYodGhpcy5pbmRleF9jb3VudCAhPSB0aGlzLnRvcGljX2xlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLmJ0bl9zdGFydC5sYWJlbC5zdHJpbmcgID0gVXRpbHMuVEkxOE4oXCLkuIvkuIDpobVcIilcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0QnV0dG9uU3RhdGUoaW5kZXgpe1xuICAgICAgICBpZih0aGlzLnNlbGVjdE51bSA9PSBXZWxmYXJlQ29uc3QuUXVlc3RDb25zdC5zaW5nbGUpe1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIHRoaXMudG9waWNfbGF5b3V0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRvcGljX2xheW91dFtpXS5hY3RpdmUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcGljX2xheW91dFtpXS5nZXRDaGlsZEJ5TmFtZShcImNoZWNrbWFya1wiKS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvcGljX2xheW91dFtpbmRleF0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5zZWxlY3ROdW0gPT0gV2VsZmFyZUNvbnN0LlF1ZXN0Q29uc3QubXVsdGlwbGUpe1xuICAgICAgICAgICAgdGhpcy50b3BpY19sYXlvdXRbaW5kZXhdLmdldENoaWxkQnlOYW1lKFwiY2hlY2ttYXJrXCIpLmFjdGl2ZSA9ICF0aGlzLnRvcGljX2xheW91dFtpbmRleF0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlO1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLnRvcGljX2xheW91dCl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy50b3BpY19sYXlvdXRbaV0uYWN0aXZlICYmIHRoaXMudG9waWNfbGF5b3V0W2ldLmdldENoaWxkQnlOYW1lKFwiY2hlY2ttYXJrXCIpLmFjdGl2ZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50KytcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjb3VudCA+IHRoaXMuc2VsZWN0TnVtKXtcbiAgICAgICAgICAgICAgICBpZihjb3VudCA9PSB0aGlzLnNlbGVjdE51bSArIDEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcGljX2xheW91dFtpbmRleF0uZ2V0Q2hpbGRCeU5hbWUoXCJjaGVja21hcmtcIikuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuacgOWkmumAieaLqeS4ieS4qumAiemhuVwiKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UmV3YXJkTGlzdChmbGFnKXtcbiAgICAgICAgZmxhZyA9IGZsYWcgfHwgMVxuICAgICAgICB0aGlzLnJld2FyZF9wYW5lbC5hY3RpdmUgPSB0cnVlXG4gICAgICAgIHRoaXMuZW5kX21lbW8gPSB0aGlzLnJld2FyZF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMuZW5kX21lbW8uc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkurLniLHnmoTlhpLpmanogIXlpKfkurp+XFxuXFxu6K+35pS25LiL5bCP5Yqp5omL55qE5LiA54K55b+D5oSPXCIpO1xuICAgICAgICBpZihmbGFnID09IDIpe1xuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQubGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LlrozmiJBcIilcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmxhYmVsLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idG5fc3RhcnQuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmdldENvbXBvbmVudChjYy5CdXR0b24pLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gdHJ1ZVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuYnRuX3N0YXJ0LmxhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6aKG5Y+W5aWW5YqxXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3Qpe1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLnJld2FyZF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImdvb2RfY29uc1wiKS5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIilcbiAgICAgICAgICAgIGxldCBzcGFjZV94ID0gMTBcbiAgICAgICAgICAgIHRoaXMuYXdhcmRfaXRlbSA9IFtdXG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuYW5zd2VyX3Jld2FyZF9saXN0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCBiaWQgPSB0aGlzLmFuc3dlcl9yZXdhcmRfbGlzdFtpXS5iaWRcbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gdGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3RbaV0ubnVtXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIilcbiAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudChjb250ZW50KTtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IDYwICsgaSoxMjAgKyBpICogc3BhY2VfeFxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oeCwgNjApXG4gICAgICAgICAgICAgICAgaXRlbS5zaG93KClcbiAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoe2JpZDpiaWQsbnVtOm51bX0pXG4gICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRlbnQud2lkdGggPSB0aGlzLmFuc3dlcl9yZXdhcmRfbGlzdC5sZW5ndGggKiAxMjAgKyAodGhpcy5hbnN3ZXJfcmV3YXJkX2xpc3QubGVuZ3RoLTEpICogc3BhY2VfeFxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLmF3YXJkX2l0ZW0pe1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLmF3YXJkX2l0ZW0ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hd2FyZF9pdGVtW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtW2ldLmRlbGV0ZU1lKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hd2FyZF9pdGVtW2ldID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXdhcmRfaXRlbSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN0cmwub3BlblN1cmV2ZXlRdWVzdFZpZXcoZmFsc2UpXG4gICAgfSxcbn0pIl19