(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/welfare/view/notice_panel.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, '5c685tZb5BISb0muzSIY7g8', 'notice_panel'); // Scripts/mod/welfare/view/notice_panel.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 公告 //
Create: 2019-08-8 20:53:13 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var WelfareConst = require("welfare_const"); var PastePanel = cc.Class({ "extends": BasePanel, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("welfare", "notice_panel"); }, // 可以初始化声明一些变量的 initConfig: function initConfig() { this.ctrl = require("notice_controller").getInstance(); this.dengluMgr = require("login_controller").getInstance().getModel(); this.node_list = []; this.color = new cc.Color(0x64, 0x32, 0x23, 0xff); }, // 初始化一些配置数据,可以用于声明一些变量之类的 initPanel: function initPanel() { this.main_container = this.seekChild("main_container"); this.title_lab = this.seekChild("title_lab", cc.Label); this.qq_lab = this.seekChild("qq_lab", cc.Label); this.qq_lab.string = ""; this.notice_scroll = this.seekChild("notice_scroll"); this.notice_scroll_sv = this.seekChild("notice_scroll", cc.ScrollView); this.scroll_content = this.seekChild(this.notice_scroll, "content"); this.container_size = this.notice_scroll.getContentSize(); }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() {}, setMessage: function setMessage() { this.notice_content = this.ctrl.getNoticeContent(); if (this.notice_content == null) { var loginData = this.dengluMgr.getLoginInfo(); var svrName = this.dengluMgr.getSvrName(loginData.srv_id); var svrTime = loginData.open_time || 0; var svrDays = 0; // let str = '{"error":"success","msg":"\u83b7\u53d6\u6210\u529f","data":[{"type":"2","title":"\u65b0\u670d\u516c\u544a","content":"\u4eb2\u7231\u7684\u5192\u9669\u8005\u5927\u4eba:|\r\n
2019-08-07 11:00:00<\/div>\uff0c\u5192\u9669\u4e16\u754c\u5c06\u5f00\u542f\u5168\u65b0\u670d\u52a1\u5668\u2014\u2014
\u82f1\u96c4\u4e4b\u8defS1<\/div>\u3002\u795d\u613f\u5e7f\u5927\u5192\u9669\u8005\u80fd\u5728\u5192\u9669\u5927\u9646\u4e4b\u4e2d\u5c3d\u60c5\u5192\u9669\uff0c\u5bfb\u89c5\u5feb\u4e50~\u795d\u5927\u5bb6\u5192\u9669\u6109\u5feb\uff01\r\n\r\n \r\n\u300c\u65b0\u670d\u6d3b\u52a8\u300d\r\n \r\n\u6d3b\u52a8\u4e00\uff1a\u4e03\u5929\u767b\u5f55\u9886\u597d\u793c\u00b7\u6b21\u65e5\u767b\u5f55\u90015\u661f\u5965\u4e01<\/div>\r\n \u6bcf\u65e5\u767b\u9646\u5c31\u80fd\u9886\u53d6\u4e30\u539a\u5956\u52b1\uff0c\u9996\u65e5\u767b\u5f55\u9001\u5927\u91cf\u94bb\u77f3\uff0c\u6b21\u65e5\u767b\u9646\u90015\u661f\u8089\u76fe\u82f1\u96c4-\u5965\u4e01\uff01\u7b2c\u4e09\u65e5\u90015\u661f\u8f93\u51fa\u82f1\u96c4--\u7f8e\u675c\u838e\u3002\r\n \r\n\u6d3b\u52a8\u4e8c\uff1a\u9996\u5145\u53cc\u500d<\/div>\r\n \u9996\u6b21\u5355\u7b14\u5145\u503c\u6307\u5b9a\u989d\u5ea6\uff0c\u7acb\u5373\u83b7\u5f97\u53cc\u500d\u94bb\u77f3\uff0c\u8d85\u503c\u8fd4\u5229\u4e0d\u505c\u6b47\uff01\r\n \r\n\u6d3b\u52a8\u4e09\uff1a\u840c\u65b0\u8865\u7ed9<\/div>\r\n \u9996\u5145\u6ee16\u5143\u5373\u53ef\u83b7\u5f975\u661f\u8d85\u5f3a\u8f93\u51fa\u82f1\u96c4\u3010\u96c5\u5178\u5a1c\u3011\uff01\u66f4\u6709\u5176\u4ed6\u8d85\u503c\u5956\u52b1\u4e00\u6ce2\u5e26\u8d70\uff0c\u4e0d\u5bb9\u9519\u8fc7\uff01\r\n \r\n\u6d3b\u52a8\u56db\uff1a\u4e03\u65e5\u76ee\u6807<\/div>\r\n \u8fde\u7eed\u4e03\u65e5\u5b8c\u6210\u6bcf\u65e5\u4efb\u52a1\uff0c\u6bcf\u5929\u90fd\u6709\u597d\u793c\u9001\uff0c\u8d85\u503c\u82f1\u96c4\uff0c\u5347\u7ea7\u9053\u5177\uff0c\u52a9\u529b\u5192\u9669\u8005\u5927\u4eba\u63d0\u5347\u4e0d\u95f4\u65ad\uff017\u65e5\u7d2f\u5145\u5956\u52b1\u989d\u5916\u9001\u51fa\u5f3a\u529b\u5149\u6697\u82f1\u96c4\u3002\r\n \r\n\u6d3b\u52a8\u4e94\uff1a\u7d2f\u8ba1\u5145\u503c<\/div>\r\n \u6bcf\u65e5\u7d2f\u8ba1\u5145\u503c\u90015\u661f\u82f1\u96c4\uff0c\u8fd8\u9001\u7ea2\u8272\u88c5\u5907\u4e0e\u5927\u91cf\u8d44\u6e90\uff01\r\n \r\n\u6d3b\u52a8\u516d\uff1a\u793c\u5305\u62a2\u8d2d\/\u6bcf\u6708\u798f\u5229\/\u6bcf\u5468\u798f\u5229<\/div>\r\n \u6bcf\u5468\u9650\u8d2d\u8d85\u503c\u793c\u5305\u964d\u4ef7\u5927\u7529\u5356\uff0c\u5404\u7c7b\u968f\u673a\u798f\u888b\u597d\u793c\u5916\uff0c\u5145\u503c648\u8fd8\u6709\u5f3a\u529b\u5149\u6697\u82f1\u96c4\u788e\u7247\u4e0e\u5f69\u8679\u7b26\u6587\uff01\r\n \r\n\u6d3b\u52a8\u4e03\uff1a\u79ef\u5929\u8c6a\u793c<\/div>\r\n \u8fde\u7eed\u5145\u503c\u597d\u793c\u4e0d\u505c\u6b47\uff0c\u51b2\u7684\u5929\u6570\u8d8a\u591a\uff0c\u5956\u52b1\u8d8a\u591a\u3002\u5927\u91cf\u4e94\u661f\u968f\u673a\u788e\u7247\u9001\uff01\r\n\r\n\u6d3b\u52a8\u516b\uff1a\u6bcf\u65e5\u793c\u5305<\/div>\r\n \u6bcf\u65e5\u8d85\u503c\u597d\u793c\u8d85\u4f4e\u4ef7\u653e\u9001\uff0c\u989d\u5916\u8d60\u9001\u53cc\u500d\u94bb\u77f3\uff01\r\n \r\n\u6d3b\u52a8\u4e5d\uff1a\u7279\u6743\u5546\u57ce<\/div>\r\n \u5f3a\u529b\u5192\u9669\u8005\u5fc5\u5907\uff0c\u8d85\u503c\u4f18\u60e0\u793c\u5305\u548c\u8d85\u8c6a\u534e\u7279\u6743\uff01\u52a9\u529b\u5192\u9669\u8005\u5feb\u901f\u5347\u7ea7\u3002\r\n \r\n\u6d3b\u52a8\u5341\uff1a\u8363\u8000\/\u81f3\u5c0a\u6708\u5361<\/div>\r\n \u7d2f\u8ba1\u5145\u503c30\/98\u53ef\u6fc0\u6d3b\u8363\u8000\/\u81f3\u5c0a\u6708\u5361\uff0c\u6bcf\u65e5\u94bb\u77f3\u9886\u4e0d\u505c\uff0c\u8fd8\u80fd\u989d\u5916\u6fc0\u6d3b\u8d85\u503c\u57fa\u91d1\u8d2d\u4e70\u673a\u4f1a\uff01\r\n \r\n\u6d3b\u52a8\u5341\u4e00\uff1a\u8d85\u503c\u57fa\u91d1<\/div>\r\n20\u500d\u8d85\u503c\u8fd4\u5229\uff0c\u8fde\u7eed30\u65e5\u9886\u53d6\u8c6a\u534e\u5956\u52b1\r\n \r\n\u6d3b\u52a8\u5341\u4e8c\uff1a\u6210\u957f\u57fa\u91d1<\/div>\r\n \u8d2d\u4e70\u8d85\u503c\u6210\u957f\u8ba1\u5212\uff0c\u52a9\u529b\u65b0\u4eba\u6210\u957f\uff0c\u7d2f\u8ba130\u500d\u8fd4\u8fd8\u94bb\u77f3\r\n \r\n\u6d3b\u52a8\u5341\u56db\uff1a\u70b9\u77f3\u6210\u91d1<\/div>\r\n \u6d3b\u52a8\u671f\u95f4\uff0c\u70b9\u91d1\u6b21\u6570\u8d85\u5927\u5e45\u63d0\u5347\uff01\u70b9\u91d1\u8fbe\u5230\u6307\u5b9a\u6b21\u6570\u66f4\u6709\u4e30\u539a\u5956\u52b1\u9886~\u8fbe\u5230\u6700\u7ec8\u76ee\u6807\u53ef\u83b7\u6ce2\u585e\u51ac\u788e\u7247*50,\uff0c\u8fd8\u6709\u9650\u65f6\u6392\u884c\u5956\u52b1\uff0c\u5927\u91cf\u94bb\u77f3\uff0c\u9ad8\u7ea7\u5bfb\u5b9d\u5377\uff0c\u592a\u9633\u7b26\u6587\u7b49\u4f60\u6765\u62a2\r\n \r\n\u6d3b\u52a8\u5341\u4e94\uff1a\u9650\u65f6\u7b49\u7ea7\u793c\u5305<\/div>\r\n \u5168\u670d\u9650\u91cf\u793c\u5305\uff0c\u8fbe\u5230\u7b49\u7ea7\u5373\u53ef\u514d\u8d39\u9886\u53d6\uff01\u6570\u91cf\u6709\u9650\uff0c\u8fd8\u4e0d\u8d76\u7d27\u5feb\u5feb\u5347\u7ea7\uff0c\u62a2\u5168\u670d\u793c\u5305~\r\n \r\n \t\u671f\u5f85\u5192\u9669\u8005\u5927\u4eba\u7684\u5149\u4e34\uff0c\u795d\u5927\u4eba\u5192\u9669\u6109\u5feb~\r\n \r\n P.S. \u5927\u4eba\u7684\u53cd\u9988\u5efa\u8bae\u5c31\u662f\u6211\u4eec\u524d\u8fdb\u7684\u52a8\u529b\uff0c\u5728\u6e38\u620f\u4e2d\u5982\u6709\u9047\u5230\u95ee\u9898\u6216\u5bf9\u5192\u9669\u4e16\u754c\u6709\u4ec0\u4e48\u5efa\u8bae\uff0c\u8bf7\u70b9\u51fb\u3010\u5934\u50cf\u3011->\u3010BUG\u53cd\u9988\u3011\u8054\u7cfb\u5c0f\u52a9\u624b\uff0c\u5c0f\u52a9\u624b\u4f1a\u9010\u6761\u67e5\u770b\u5927\u4eba\u4eec\u7684\u53cd\u9988\uff0c\u8ba9\u5192\u9669\u4e16\u754c\u53d8\u5f97\u66f4\u597d~"}]}' // // str = str.replace(/</g, "<"); // // str = str.replace(/>/g, ">"); // // str = str.replace(/'/g, "'"); // // str = str.replace(/"/g, '"'); // // str = str.replace(/\9/g, ' '); // str = str.replace(/\r\n/g,"\\r\\n"); // str = str.replace(/\t/g,""); // // cc.log(str) // let _str = JSON.parse(str); // let cont = _str.data[0].content // cc.log(cont); // this.notice_content = StringUtil.parseStr(cont).string; // cc.log(StringUtil.parseStr(cont)) // var list = this.notice_content.split("|"); // cc.log(list) // this.addNoticeContent(list) // } var srvurl = this.ctrl.get_notice_url(svrDays, loginData); // console.log(srvurl); if (srvurl) { DownloadManager.getInstance().downloadText(srvurl, function (status, responseText) { // console.log("url+++++++++++", status, responseText) // console.log("type=", typeof (responseText)); // var response = JSON.parse(responseText); // console.log(response); var str = StringUtil.parseStr(responseText); // console.log(str); if (status == null && responseText != null) { var _str2 = responseText; _str2 = _str2.replace(/\r\n/g, "\\r\\n"); _str2 = _str2.replace(/\t/g, ""); var _str = JSON.parse(_str2); if (_str.data && _str.data[0]) { this.notice_content = StringUtil.parseStr(_str.data[0].content).string; var list = this.notice_content.split("|"); // console.log(list) this.addNoticeContent(list); this.ctrl.setNoticeContent(this.notice_content); } } else { cc.log("status==>", status, "responseText==>", responseText); } }.bind(this)); } } else { var list = this.notice_content.split("|"); this.addNoticeContent(list); } }, addNoticeContent: function addNoticeContent(list) { if (list == null || list.length == 0) return; //更新先情况,防止加载不到文件时候多次加载 this.main_container.stopAllActions(); var curY = -80; //取出第一个用于称谓显示 this.title_lab.string = list.shift() || ""; this.list_index = 0; var _y = 0; this.startUpdate(list.length, function () { var index = this.list_index; var vo = list[index]; var sub = this.createSubContent(2, 20, vo, this.container_size.width - 4, 0); this.node_list.push(sub); curY = curY + sub.node.getContentSize().height + 3; //60 cc.log(curY); var maxY = Math.max(curY, this.container_size.height); this.scroll_content.setContentSize(this.container_size.width, maxY + 80); sub.node.y = _y - sub.node.getContentSize().height + 5; _y = sub.node.y; this.list_index += 1; }.bind(this), 100); this.notice_scroll_sv.scrollToTop(0.5); }, createSubContent: function createSubContent(x, y, content, width, linespce) { var label = Utils.createRichLabel(24, this.color, cc.v2(0, 0), cc.v2(0, 0), 30, width, this.scroll_content); label.string = content; label.horizontalAlign = cc.macro.TextAlignment.LEFT; label.node.setPosition(x, y); return label; }, // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了 onShow: function onShow(params) { this.setMessage(); }, setVisibleStatus: function setVisibleStatus(status) { this.setVisible(status); }, // 面板设置不可见的回调,这里做一些不可见的屏蔽处理 onHide: function onHide() {}, // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用 onDelete: function onDelete() { if (this.node_list) { for (var i in this.node_list) { var v = this.node_list[i]; if (v instanceof cc.Node) { v.destroy(); v = null; } else { v.node.destroy(); v = null; } } this.node_list = null; } if (this.main_container) { this.main_container.stopAllActions(); } } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx2aWV3XFxub3RpY2VfcGFuZWwuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiV2VsZmFyZUNvbnN0IiwiUGFzdGVQYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpbml0Q29uZmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiZGVuZ2x1TWdyIiwiZ2V0TW9kZWwiLCJub2RlX2xpc3QiLCJjb2xvciIsIkNvbG9yIiwiaW5pdFBhbmVsIiwibWFpbl9jb250YWluZXIiLCJzZWVrQ2hpbGQiLCJ0aXRsZV9sYWIiLCJMYWJlbCIsInFxX2xhYiIsInN0cmluZyIsIm5vdGljZV9zY3JvbGwiLCJub3RpY2Vfc2Nyb2xsX3N2IiwiU2Nyb2xsVmlldyIsInNjcm9sbF9jb250ZW50IiwiY29udGFpbmVyX3NpemUiLCJnZXRDb250ZW50U2l6ZSIsInJlZ2lzdGVyRXZlbnQiLCJzZXRNZXNzYWdlIiwibm90aWNlX2NvbnRlbnQiLCJnZXROb3RpY2VDb250ZW50IiwibG9naW5EYXRhIiwiZ2V0TG9naW5JbmZvIiwic3ZyTmFtZSIsImdldFN2ck5hbWUiLCJzcnZfaWQiLCJzdnJUaW1lIiwib3Blbl90aW1lIiwic3ZyRGF5cyIsInNydnVybCIsImdldF9ub3RpY2VfdXJsIiwiRG93bmxvYWRNYW5hZ2VyIiwiZG93bmxvYWRUZXh0Iiwic3RhdHVzIiwicmVzcG9uc2VUZXh0Iiwic3RyIiwiU3RyaW5nVXRpbCIsInBhcnNlU3RyIiwicmVwbGFjZSIsIl9zdHIiLCJKU09OIiwicGFyc2UiLCJkYXRhIiwiY29udGVudCIsImxpc3QiLCJzcGxpdCIsImFkZE5vdGljZUNvbnRlbnQiLCJzZXROb3RpY2VDb250ZW50IiwibG9nIiwiYmluZCIsImxlbmd0aCIsInN0b3BBbGxBY3Rpb25zIiwiY3VyWSIsInNoaWZ0IiwibGlzdF9pbmRleCIsIl95Iiwic3RhcnRVcGRhdGUiLCJpbmRleCIsInZvIiwic3ViIiwiY3JlYXRlU3ViQ29udGVudCIsIndpZHRoIiwicHVzaCIsIm5vZGUiLCJoZWlnaHQiLCJtYXhZIiwiTWF0aCIsIm1heCIsInNldENvbnRlbnRTaXplIiwieSIsInNjcm9sbFRvVG9wIiwieCIsImxpbmVzcGNlIiwibGFiZWwiLCJVdGlscyIsImNyZWF0ZVJpY2hMYWJlbCIsInYyIiwiaG9yaXpvbnRhbEFsaWduIiwibWFjcm8iLCJUZXh0QWxpZ25tZW50IiwiTEVGVCIsInNldFBvc2l0aW9uIiwib25TaG93IiwicGFyYW1zIiwic2V0VmlzaWJsZVN0YXR1cyIsInNldFZpc2libGUiLCJvbkhpZGUiLCJvbkRlbGV0ZSIsImkiLCJ2IiwiTm9kZSIsImRlc3Ryb3kiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxZQUFZLEdBQUdELE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUVBLElBQUlFLFVBQVUsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDdEIsYUFBU0MsU0FEYTtBQUV0QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlIsUUFBUSxDQUFDUyxhQUFULENBQXVCLFNBQXZCLEVBQWtDLGNBQWxDLENBQWxCO0FBQ0gsR0FKcUI7QUFNdEI7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLHNCQUFZO0FBQ3BCLFNBQUtDLElBQUwsR0FBWVYsT0FBTyxDQUFDLG1CQUFELENBQVAsQ0FBNkJXLFdBQTdCLEVBQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCWixPQUFPLENBQUMsa0JBQUQsQ0FBUCxDQUE0QlcsV0FBNUIsR0FBMENFLFFBQTFDLEVBQWpCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxJQUFJWixF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QUo7QUFDSCxTQUhELE1BR087QUFDSEEsVUFBQUEsQ0FBQyxDQUFDMUIsSUFBRixDQUFPNEIsT0FBUDtBQUNBRixVQUFBQSxDQUFDLEdBQUcsSUFBSjtBQUNIO0FBQ0o7O0FBQ0QsV0FBS3hGLFNBQUwsR0FBaUIsSUFBakI7QUFDSDs7QUFDRCxRQUFHLEtBQUtJLGNBQVIsRUFBdUI7QUFDbkIsV0FBS0EsY0FBTCxDQUFvQjhDLGNBQXBCO0FBQ0g7QUFDSjtBQTFLcUIsQ0FBVCxDQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOWFrOWRilxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDgtOCAyMDo1MzoxM1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKVxudmFyIFdlbGZhcmVDb25zdCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnN0XCIpO1xuXG52YXIgUGFzdGVQYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwid2VsZmFyZVwiLCBcIm5vdGljZV9wYW5lbFwiKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmN0cmwgPSByZXF1aXJlKFwibm90aWNlX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5kZW5nbHVNZ3IgPSByZXF1aXJlKFwibG9naW5fY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCk7XG4gICAgICAgIHRoaXMubm9kZV9saXN0ID0gW107XG4gICAgICAgIHRoaXMuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHg2NCwgMHgzMiwgMHgyMywgMHhmZik7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9jb250YWluZXJcIik7XG5cbiAgICAgICAgdGhpcy50aXRsZV9sYWIgPSB0aGlzLnNlZWtDaGlsZChcInRpdGxlX2xhYlwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMucXFfbGFiID0gdGhpcy5zZWVrQ2hpbGQoXCJxcV9sYWJcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnFxX2xhYi5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLm5vdGljZV9zY3JvbGwgPSB0aGlzLnNlZWtDaGlsZChcIm5vdGljZV9zY3JvbGxcIik7XG4gICAgICAgIHRoaXMubm90aWNlX3Njcm9sbF9zdiA9IHRoaXMuc2Vla0NoaWxkKFwibm90aWNlX3Njcm9sbFwiLCBjYy5TY3JvbGxWaWV3KTtcbiAgICAgICAgdGhpcy5zY3JvbGxfY29udGVudCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubm90aWNlX3Njcm9sbCwgXCJjb250ZW50XCIpO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyX3NpemUgPSB0aGlzLm5vdGljZV9zY3JvbGwuZ2V0Q29udGVudFNpemUoKTtcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcblxuICAgIH0sXG5cblxuICAgIHNldE1lc3NhZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgXG4gICAgICAgIHRoaXMubm90aWNlX2NvbnRlbnQgPSB0aGlzLmN0cmwuZ2V0Tm90aWNlQ29udGVudCgpO1xuICAgICAgICBpZiAodGhpcy5ub3RpY2VfY29udGVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9naW5EYXRhID0gdGhpcy5kZW5nbHVNZ3IuZ2V0TG9naW5JbmZvKCk7XG4gICAgICAgICAgICB2YXIgc3ZyTmFtZSA9IHRoaXMuZGVuZ2x1TWdyLmdldFN2ck5hbWUobG9naW5EYXRhLnNydl9pZCk7XG4gICAgICAgICAgICB2YXIgc3ZyVGltZSA9IGxvZ2luRGF0YS5vcGVuX3RpbWUgfHwgMDtcbiAgICAgICAgICAgIHZhciBzdnJEYXlzID0gMDtcblxuICAgICAgICAgICAgLy8gbGV0IHN0ciA9ICd7XCJlcnJvclwiOlwic3VjY2Vzc1wiLFwibXNnXCI6XCJcXHU4M2I3XFx1NTNkNlxcdTYyMTBcXHU1MjlmXCIsXCJkYXRhXCI6W3tcInR5cGVcIjpcIjJcIixcInRpdGxlXCI6XCJcXHU2NWIwXFx1NjcwZFxcdTUxNmNcXHU1NDRhXCIsXCJjb250ZW50XCI6XCJcXHU0ZWIyXFx1NzIzMVxcdTc2ODRcXHU1MTkyXFx1OTY2OVxcdTgwMDVcXHU1OTI3XFx1NGViYTp8XFxyXFxuICAgICAgICA8ZGl2IGZvbnRjb2xvcj0jYzIzZjM1PjIwMTktMDgtMDcgMTE6MDA6MDA8XFwvZGl2PlxcdWZmMGNcXHU1MTkyXFx1OTY2OVxcdTRlMTZcXHU3NTRjXFx1NWMwNlxcdTVmMDBcXHU1NDJmXFx1NTE2OFxcdTY1YjBcXHU2NzBkXFx1NTJhMVxcdTU2NjhcXHUyMDE0XFx1MjAxNDxkaXYgZm9udGNvbG9yPSNjMjNmMzU+XFx1ODJmMVxcdTk2YzRcXHU0ZTRiXFx1OGRlZlMxPFxcL2Rpdj5cXHUzMDAyXFx1Nzk1ZFxcdTYxM2ZcXHU1ZTdmXFx1NTkyN1xcdTUxOTJcXHU5NjY5XFx1ODAwNVxcdTgwZmRcXHU1NzI4XFx1NTE5MlxcdTk2NjlcXHU1OTI3XFx1OTY0NlxcdTRlNGJcXHU0ZTJkXFx1NWMzZFxcdTYwYzVcXHU1MTkyXFx1OTY2OVxcdWZmMGNcXHU1YmZiXFx1ODljNVxcdTVmZWJcXHU0ZTUwflxcdTc5NWRcXHU1OTI3XFx1NWJiNlxcdTUxOTJcXHU5NjY5XFx1NjEwOVxcdTVmZWJcXHVmZjAxXFxyXFxuXFxyXFxuIFxcclxcblxcdTMwMGNcXHU2NWIwXFx1NjcwZFxcdTZkM2JcXHU1MmE4XFx1MzAwZFxcclxcbiAgXFxyXFxuPGRpdlxcdTAwYTBmb250Y29sb3I9I2MyM2YzNT5cXHU2ZDNiXFx1NTJhOFxcdTRlMDBcXHVmZjFhXFx1NGUwM1xcdTU5MjlcXHU3NjdiXFx1NWY1NVxcdTk4ODZcXHU1OTdkXFx1NzkzY1xcdTAwYjdcXHU2YjIxXFx1NjVlNVxcdTc2N2JcXHU1ZjU1XFx1OTAwMTVcXHU2NjFmXFx1NTk2NVxcdTRlMDE8XFwvZGl2PlxcclxcbiAgICAgICBcXHU2YmNmXFx1NjVlNVxcdTc2N2JcXHU5NjQ2XFx1NWMzMVxcdTgwZmRcXHU5ODg2XFx1NTNkNlxcdTRlMzBcXHU1MzlhXFx1NTk1NlxcdTUyYjFcXHVmZjBjXFx1OTk5NlxcdTY1ZTVcXHU3NjdiXFx1NWY1NVxcdTkwMDFcXHU1OTI3XFx1OTFjZlxcdTk0YmJcXHU3N2YzXFx1ZmYwY1xcdTZiMjFcXHU2NWU1XFx1NzY3YlxcdTk2NDZcXHU5MDAxNVxcdTY2MWZcXHU4MDg5XFx1NzZmZVxcdTgyZjFcXHU5NmM0LVxcdTU5NjVcXHU0ZTAxXFx1ZmYwMVxcdTdiMmNcXHU0ZTA5XFx1NjVlNVxcdTkwMDE1XFx1NjYxZlxcdThmOTNcXHU1MWZhXFx1ODJmMVxcdTk2YzQtLVxcdTdmOGVcXHU2NzVjXFx1ODM4ZVxcdTMwMDJcXHJcXG4gIFxcclxcbjxkaXZcXHUwMGEwZm9udGNvbG9yPSNjMjNmMzU+XFx1NmQzYlxcdTUyYThcXHU0ZThjXFx1ZmYxYVxcdTk5OTZcXHU1MTQ1XFx1NTNjY1xcdTUwMGQ8XFwvZGl2PlxcclxcbiAgICAgICAgXFx1OTk5NlxcdTZiMjFcXHU1MzU1XFx1N2IxNFxcdTUxNDVcXHU1MDNjXFx1NjMwN1xcdTViOWFcXHU5ODlkXFx1NWVhNlxcdWZmMGNcXHU3YWNiXFx1NTM3M1xcdTgzYjdcXHU1Zjk3XFx1NTNjY1xcdTUwMGRcXHU5NGJiXFx1NzdmM1xcdWZmMGNcXHU4ZDg1XFx1NTAzY1xcdThmZDRcXHU1MjI5XFx1NGUwZFxcdTUwNWNcXHU2YjQ3XFx1ZmYwMVxcclxcbiBcXHJcXG48ZGl2XFx1MDBhMGZvbnRjb2xvcj0jYzIzZjM1PlxcdTZkM2JcXHU1MmE4XFx1NGUwOVxcdWZmMWFcXHU4NDBjXFx1NjViMFxcdTg4NjVcXHU3ZWQ5PFxcL2Rpdj5cXHJcXG4gICAgICAgXFx1OTk5NlxcdTUxNDVcXHU2ZWUxNlxcdTUxNDNcXHU1MzczXFx1NTNlZlxcdTgzYjdcXHU1Zjk3NVxcdTY2MWZcXHU4ZDg1XFx1NWYzYVxcdThmOTNcXHU1MWZhXFx1ODJmMVxcdTk2YzRcXHUzMDEwXFx1OTZjNVxcdTUxNzhcXHU1YTFjXFx1MzAxMVxcdWZmMDFcXHU2NmY0XFx1NjcwOVxcdTUxNzZcXHU0ZWQ2XFx1OGQ4NVxcdTUwM2NcXHU1OTU2XFx1NTJiMVxcdTRlMDBcXHU2Y2UyXFx1NWUyNlxcdThkNzBcXHVmZjBjXFx1NGUwZFxcdTViYjlcXHU5NTE5XFx1OGZjN1xcdWZmMDFcXHJcXG4gIFxcclxcbjxkaXZcXHUwMGEwZm9udGNvbG9yPSNjMjNmMzU+XFx1NmQzYlxcdTUyYThcXHU1NmRiXFx1ZmYxYVxcdTRlMDNcXHU2NWU1XFx1NzZlZVxcdTY4MDc8XFwvZGl2PlxcclxcbiAgICAgICAgXFx1OGZkZVxcdTdlZWRcXHU0ZTAzXFx1NjVlNVxcdTViOGNcXHU2MjEwXFx1NmJjZlxcdTY1ZTVcXHU0ZWZiXFx1NTJhMVxcdWZmMGNcXHU2YmNmXFx1NTkyOVxcdTkwZmRcXHU2NzA5XFx1NTk3ZFxcdTc5M2NcXHU5MDAxXFx1ZmYwY1xcdThkODVcXHU1MDNjXFx1ODJmMVxcdTk2YzRcXHVmZjBjXFx1NTM0N1xcdTdlYTdcXHU5MDUzXFx1NTE3N1xcdWZmMGNcXHU1MmE5XFx1NTI5YlxcdTUxOTJcXHU5NjY5XFx1ODAwNVxcdTU5MjdcXHU0ZWJhXFx1NjNkMFxcdTUzNDdcXHU0ZTBkXFx1OTVmNFxcdTY1YWRcXHVmZjAxN1xcdTY1ZTVcXHU3ZDJmXFx1NTE0NVxcdTU5NTZcXHU1MmIxXFx1OTg5ZFxcdTU5MTZcXHU5MDAxXFx1NTFmYVxcdTVmM2FcXHU1MjliXFx1NTE0OVxcdTY2OTdcXHU4MmYxXFx1OTZjNFxcdTMwMDJcXHJcXG4gICBcXHJcXG48ZGl2XFx1MDBhMGZvbnRjb2xvcj0jYzIzZjM1PlxcdTZkM2JcXHU1MmE4XFx1NGU5NFxcdWZmMWFcXHU3ZDJmXFx1OGJhMVxcdTUxNDVcXHU1MDNjPFxcL2Rpdj5cXHJcXG4gICAgICAgIFxcdTZiY2ZcXHU2NWU1XFx1N2QyZlxcdThiYTFcXHU1MTQ1XFx1NTAzY1xcdTkwMDE1XFx1NjYxZlxcdTgyZjFcXHU5NmM0XFx1ZmYwY1xcdThmZDhcXHU5MDAxXFx1N2VhMlxcdTgyNzJcXHU4OGM1XFx1NTkwN1xcdTRlMGVcXHU1OTI3XFx1OTFjZlxcdThkNDRcXHU2ZTkwXFx1ZmYwMVxcclxcbiAgICBcXHJcXG48ZGl2XFx1MDBhMGZvbnRjb2xvcj0jYzIzZjM1PlxcdTZkM2JcXHU1MmE4XFx1NTE2ZFxcdWZmMWFcXHU3OTNjXFx1NTMwNVxcdTYyYTJcXHU4ZDJkXFwvXFx1NmJjZlxcdTY3MDhcXHU3OThmXFx1NTIyOVxcL1xcdTZiY2ZcXHU1NDY4XFx1Nzk4ZlxcdTUyMjk8XFwvZGl2PlxcclxcbiAgICAgICAgXFx1NmJjZlxcdTU0NjhcXHU5NjUwXFx1OGQyZFxcdThkODVcXHU1MDNjXFx1NzkzY1xcdTUzMDVcXHU5NjRkXFx1NGVmN1xcdTU5MjdcXHU3NTI5XFx1NTM1NlxcdWZmMGNcXHU1NDA0XFx1N2M3YlxcdTk2OGZcXHU2NzNhXFx1Nzk4ZlxcdTg4OGJcXHU1OTdkXFx1NzkzY1xcdTU5MTZcXHVmZjBjXFx1NTE0NVxcdTUwM2M2NDhcXHU4ZmQ4XFx1NjcwOVxcdTVmM2FcXHU1MjliXFx1NTE0OVxcdTY2OTdcXHU4MmYxXFx1OTZjNFxcdTc4OGVcXHU3MjQ3XFx1NGUwZVxcdTVmNjlcXHU4Njc5XFx1N2IyNlxcdTY1ODdcXHVmZjAxXFxyXFxuIFxcclxcbjxkaXZcXHUwMGEwZm9udGNvbG9yPSNjMjNmMzU+XFx1NmQzYlxcdTUyYThcXHU0ZTAzXFx1ZmYxYVxcdTc5ZWZcXHU1OTI5XFx1OGM2YVxcdTc5M2M8XFwvZGl2PlxcclxcbiAgICAgICAgXFx1OGZkZVxcdTdlZWRcXHU1MTQ1XFx1NTAzY1xcdTU5N2RcXHU3OTNjXFx1NGUwZFxcdTUwNWNcXHU2YjQ3XFx1ZmYwY1xcdTUxYjJcXHU3Njg0XFx1NTkyOVxcdTY1NzBcXHU4ZDhhXFx1NTkxYVxcdWZmMGNcXHU1OTU2XFx1NTJiMVxcdThkOGFcXHU1OTFhXFx1MzAwMlxcdTU5MjdcXHU5MWNmXFx1NGU5NFxcdTY2MWZcXHU5NjhmXFx1NjczYVxcdTc4OGVcXHU3MjQ3XFx1OTAwMVxcdWZmMDFcXHJcXG5cXHJcXG48ZGl2XFx1MDBhMGZvbnRjb2xvcj0jYzIzZjM1PlxcdTZkM2JcXHU1MmE4XFx1NTE2YlxcdWZmMWFcXHU2YmNmXFx1NjVlNVxcdTc5M2NcXHU1MzA1PFxcL2Rpdj5cXHJcXG4gICAgICAgIFxcdTZiY2ZcXHU2NWU1XFx1OGQ4NVxcdTUwM2NcXHU1OTdkXFx1NzkzY1xcdThkODVcXHU0ZjRlXFx1NGVmN1xcdTY1M2VcXHU5MDAxXFx1ZmYwY1xcdTk4OWRcXHU1OTE2XFx1OGQ2MFxcdTkwMDFcXHU1M2NjXFx1NTAwZFxcdTk0YmJcXHU3N2YzXFx1ZmYwMVxcclxcbiAgXFxyXFxuPGRpdlxcdTAwYTBmb250Y29sb3I9I2MyM2YzNT5cXHU2ZDNiXFx1NTJhOFxcdTRlNWRcXHVmZjFhXFx1NzI3OVxcdTY3NDNcXHU1NTQ2XFx1NTdjZTxcXC9kaXY+XFxyXFxuICAgICAgICBcXHU1ZjNhXFx1NTI5YlxcdTUxOTJcXHU5NjY5XFx1ODAwNVxcdTVmYzVcXHU1OTA3XFx1ZmYwY1xcdThkODVcXHU1MDNjXFx1NGYxOFxcdTYwZTBcXHU3OTNjXFx1NTMwNVxcdTU0OGNcXHU4ZDg1XFx1OGM2YVxcdTUzNGVcXHU3Mjc5XFx1Njc0M1xcdWZmMDFcXHU1MmE5XFx1NTI5YlxcdTUxOTJcXHU5NjY5XFx1ODAwNVxcdTVmZWJcXHU5MDFmXFx1NTM0N1xcdTdlYTdcXHUzMDAyXFxyXFxuICBcXHJcXG48ZGl2XFx1MDBhMGZvbnRjb2xvcj0jYzIzZjM1PlxcdTZkM2JcXHU1MmE4XFx1NTM0MVxcdWZmMWFcXHU4MzYzXFx1ODAwMFxcL1xcdTgxZjNcXHU1YzBhXFx1NjcwOFxcdTUzNjE8XFwvZGl2PlxcclxcbiAgICAgICAgXFx1N2QyZlxcdThiYTFcXHU1MTQ1XFx1NTAzYzMwXFwvOThcXHU1M2VmXFx1NmZjMFxcdTZkM2JcXHU4MzYzXFx1ODAwMFxcL1xcdTgxZjNcXHU1YzBhXFx1NjcwOFxcdTUzNjFcXHVmZjBjXFx1NmJjZlxcdTY1ZTVcXHU5NGJiXFx1NzdmM1xcdTk4ODZcXHU0ZTBkXFx1NTA1Y1xcdWZmMGNcXHU4ZmQ4XFx1ODBmZFxcdTk4OWRcXHU1OTE2XFx1NmZjMFxcdTZkM2JcXHU4ZDg1XFx1NTAzY1xcdTU3ZmFcXHU5MWQxXFx1OGQyZFxcdTRlNzBcXHU2NzNhXFx1NGYxYVxcdWZmMDFcXHJcXG4gIFxcclxcbjxkaXZcXHUwMGEwZm9udGNvbG9yPSNjMjNmMzU+XFx1NmQzYlxcdTUyYThcXHU1MzQxXFx1NGUwMFxcdWZmMWFcXHU4ZDg1XFx1NTAzY1xcdTU3ZmFcXHU5MWQxPFxcL2Rpdj5cXHJcXG4yMFxcdTUwMGRcXHU4ZDg1XFx1NTAzY1xcdThmZDRcXHU1MjI5XFx1ZmYwY1xcdThmZGVcXHU3ZWVkMzBcXHU2NWU1XFx1OTg4NlxcdTUzZDZcXHU4YzZhXFx1NTM0ZVxcdTU5NTZcXHU1MmIxXFxyXFxuICBcXHJcXG48ZGl2XFx1MDBhMGZvbnRjb2xvcj0jYzIzZjM1PlxcdTZkM2JcXHU1MmE4XFx1NTM0MVxcdTRlOGNcXHVmZjFhXFx1NjIxMFxcdTk1N2ZcXHU1N2ZhXFx1OTFkMTxcXC9kaXY+XFxyXFxuICAgICAgICBcXHU4ZDJkXFx1NGU3MFxcdThkODVcXHU1MDNjXFx1NjIxMFxcdTk1N2ZcXHU4YmExXFx1NTIxMlxcdWZmMGNcXHU1MmE5XFx1NTI5YlxcdTY1YjBcXHU0ZWJhXFx1NjIxMFxcdTk1N2ZcXHVmZjBjXFx1N2QyZlxcdThiYTEzMFxcdTUwMGRcXHU4ZmQ0XFx1OGZkOFxcdTk0YmJcXHU3N2YzXFxyXFxuICAgXFxyXFxuPGRpdlxcdTAwYTBmb250Y29sb3I9I2MyM2YzNT5cXHU2ZDNiXFx1NTJhOFxcdTUzNDFcXHU1NmRiXFx1ZmYxYVxcdTcwYjlcXHU3N2YzXFx1NjIxMFxcdTkxZDE8XFwvZGl2PlxcclxcbiAgICAgICAgXFx1NmQzYlxcdTUyYThcXHU2NzFmXFx1OTVmNFxcdWZmMGNcXHU3MGI5XFx1OTFkMVxcdTZiMjFcXHU2NTcwXFx1OGQ4NVxcdTU5MjdcXHU1ZTQ1XFx1NjNkMFxcdTUzNDdcXHVmZjAxXFx1NzBiOVxcdTkxZDFcXHU4ZmJlXFx1NTIzMFxcdTYzMDdcXHU1YjlhXFx1NmIyMVxcdTY1NzBcXHU2NmY0XFx1NjcwOVxcdTRlMzBcXHU1MzlhXFx1NTk1NlxcdTUyYjFcXHU5ODg2flxcdThmYmVcXHU1MjMwXFx1NjcwMFxcdTdlYzhcXHU3NmVlXFx1NjgwN1xcdTUzZWZcXHU4M2I3XFx1NmNlMlxcdTU4NWVcXHU1MWFjXFx1Nzg4ZVxcdTcyNDcqNTAsXFx1ZmYwY1xcdThmZDhcXHU2NzA5XFx1OTY1MFxcdTY1ZjZcXHU2MzkyXFx1ODg0Y1xcdTU5NTZcXHU1MmIxXFx1ZmYwY1xcdTU5MjdcXHU5MWNmXFx1OTRiYlxcdTc3ZjNcXHVmZjBjXFx1OWFkOFxcdTdlYTdcXHU1YmZiXFx1NWI5ZFxcdTUzNzdcXHVmZjBjXFx1NTkyYVxcdTk2MzNcXHU3YjI2XFx1NjU4N1xcdTdiNDlcXHU0ZjYwXFx1Njc2NVxcdTYyYTJcXHJcXG4gIFxcclxcbjxkaXZcXHUwMGEwZm9udGNvbG9yPSNjMjNmMzU+XFx1NmQzYlxcdTUyYThcXHU1MzQxXFx1NGU5NFxcdWZmMWFcXHU5NjUwXFx1NjVmNlxcdTdiNDlcXHU3ZWE3XFx1NzkzY1xcdTUzMDU8XFwvZGl2PlxcclxcbiAgICAgICBcXHU1MTY4XFx1NjcwZFxcdTk2NTBcXHU5MWNmXFx1NzkzY1xcdTUzMDVcXHVmZjBjXFx1OGZiZVxcdTUyMzBcXHU3YjQ5XFx1N2VhN1xcdTUzNzNcXHU1M2VmXFx1NTE0ZFxcdThkMzlcXHU5ODg2XFx1NTNkNlxcdWZmMDFcXHU2NTcwXFx1OTFjZlxcdTY3MDlcXHU5NjUwXFx1ZmYwY1xcdThmZDhcXHU0ZTBkXFx1OGQ3NlxcdTdkMjdcXHU1ZmViXFx1NWZlYlxcdTUzNDdcXHU3ZWE3XFx1ZmYwY1xcdTYyYTJcXHU1MTY4XFx1NjcwZFxcdTc5M2NcXHU1MzA1flxcclxcbiAgICBcXHJcXG4gICBcXHRcXHU2NzFmXFx1NWY4NVxcdTUxOTJcXHU5NjY5XFx1ODAwNVxcdTU5MjdcXHU0ZWJhXFx1NzY4NFxcdTUxNDlcXHU0ZTM0XFx1ZmYwY1xcdTc5NWRcXHU1OTI3XFx1NGViYVxcdTUxOTJcXHU5NjY5XFx1NjEwOVxcdTVmZWJ+XFxyXFxuICBcXHJcXG4gICAgICAgIFAuUy4gXFx1NTkyN1xcdTRlYmFcXHU3Njg0XFx1NTNjZFxcdTk5ODhcXHU1ZWZhXFx1OGJhZVxcdTVjMzFcXHU2NjJmXFx1NjIxMVxcdTRlZWNcXHU1MjRkXFx1OGZkYlxcdTc2ODRcXHU1MmE4XFx1NTI5YlxcdWZmMGNcXHU1NzI4XFx1NmUzOFxcdTYyMGZcXHU0ZTJkXFx1NTk4MlxcdTY3MDlcXHU5MDQ3XFx1NTIzMFxcdTk1ZWVcXHU5ODk4XFx1NjIxNlxcdTViZjlcXHU1MTkyXFx1OTY2OVxcdTRlMTZcXHU3NTRjXFx1NjcwOVxcdTRlYzBcXHU0ZTQ4XFx1NWVmYVxcdThiYWVcXHVmZjBjXFx1OGJmN1xcdTcwYjlcXHU1MWZiXFx1MzAxMFxcdTU5MzRcXHU1MGNmXFx1MzAxMS0+XFx1MzAxMEJVR1xcdTUzY2RcXHU5OTg4XFx1MzAxMVxcdTgwNTRcXHU3Y2ZiXFx1NWMwZlxcdTUyYTlcXHU2MjRiXFx1ZmYwY1xcdTVjMGZcXHU1MmE5XFx1NjI0YlxcdTRmMWFcXHU5MDEwXFx1Njc2MVxcdTY3ZTVcXHU3NzBiXFx1NTkyN1xcdTRlYmFcXHU0ZWVjXFx1NzY4NFxcdTUzY2RcXHU5OTg4XFx1ZmYwY1xcdThiYTlcXHU1MTkyXFx1OTY2OVxcdTRlMTZcXHU3NTRjXFx1NTNkOFxcdTVmOTdcXHU2NmY0XFx1NTk3ZH5cIn1dfSdcbiAgICAgICAgICAgIC8vIC8vIHN0ciA9IHN0ci5yZXBsYWNlKC8mbHQvZywgXCI8XCIpO1xuICAgICAgICAgICAgLy8gLy8gc3RyID0gc3RyLnJlcGxhY2UoLyZndC9nLCBcIj5cIik7XG4gICAgICAgICAgICAvLyAvLyBzdHIgPSBzdHIucmVwbGFjZSgvJiMwMzkvZywgXCInXCIpO1xuICAgICAgICAgICAgLy8gLy8gc3RyID0gc3RyLnJlcGxhY2UoLyZxdW90L2csICdcIicpO1xuICAgICAgICAgICAgLy8gLy8gc3RyID0gc3RyLnJlcGxhY2UoL1xcOS9nLCAnICAgICcpO1xuICAgICAgICAgICAgLy8gc3RyID0gc3RyLnJlcGxhY2UoL1xcclxcbi9nLFwiXFxcXHJcXFxcblwiKTtcbiAgICAgICAgICAgIC8vIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHQvZyxcIlwiKTtcblxuICAgICAgICAgICAgLy8gLy8gY2MubG9nKHN0cilcbiAgICAgICAgICAgIC8vIGxldCBfc3RyID0gSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICAgICAgLy8gbGV0IGNvbnQgPSBfc3RyLmRhdGFbMF0uY29udGVudFxuICAgICAgICAgICAgLy8gY2MubG9nKGNvbnQpO1xuICAgICAgICAgICAgLy8gdGhpcy5ub3RpY2VfY29udGVudCA9IFN0cmluZ1V0aWwucGFyc2VTdHIoY29udCkuc3RyaW5nO1xuICAgICAgICAgICAgLy8gY2MubG9nKFN0cmluZ1V0aWwucGFyc2VTdHIoY29udCkpXG4gICAgICAgICAgICAvLyB2YXIgbGlzdCA9IHRoaXMubm90aWNlX2NvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuICAgICAgICAgICAgLy8gY2MubG9nKGxpc3QpXG4gICAgICAgICAgICAvLyB0aGlzLmFkZE5vdGljZUNvbnRlbnQobGlzdClcblxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgdmFyIHNydnVybCA9IHRoaXMuY3RybC5nZXRfbm90aWNlX3VybChzdnJEYXlzLCBsb2dpbkRhdGEpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3J2dXJsKTtcbiAgICAgICAgICAgIGlmIChzcnZ1cmwpIHtcbiAgICAgICAgICAgICAgICBEb3dubG9hZE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5kb3dubG9hZFRleHQoc3J2dXJsLCBmdW5jdGlvbiAoc3RhdHVzLCByZXNwb25zZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ1cmwrKysrKysrKysrK1wiLCBzdGF0dXMsIHJlc3BvbnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0eXBlPVwiLCB0eXBlb2YgKHJlc3BvbnNlVGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICAvLyB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IFN0cmluZ1V0aWwucGFyc2VTdHIocmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBudWxsICYmIHJlc3BvbnNlVGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gcmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcXFxyXFxcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx0L2csIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IF9zdHIgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3N0ci5kYXRhICYmIF9zdHIuZGF0YVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWNlX2NvbnRlbnQgPSBTdHJpbmdVdGlsLnBhcnNlU3RyKF9zdHIuZGF0YVswXS5jb250ZW50KS5zdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLm5vdGljZV9jb250ZW50LnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTm90aWNlQ29udGVudChsaXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZXROb3RpY2VDb250ZW50KHRoaXMubm90aWNlX2NvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5sb2coXCJzdGF0dXM9PT5cIiwgc3RhdHVzLCBcInJlc3BvbnNlVGV4dD09PlwiLCByZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLm5vdGljZV9jb250ZW50LnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgIHRoaXMuYWRkTm90aWNlQ29udGVudChsaXN0KVxuICAgICAgICB9XG4gICAgfSxcblxuXG4gICAgYWRkTm90aWNlQ29udGVudDogZnVuY3Rpb24gKGxpc3QpIHtcbiAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCB8fCBsaXN0Lmxlbmd0aCA9PSAwKSByZXR1cm5cblxuICAgICAgICAvL+abtOaWsOWFiOaDheWGtSzpmLLmraLliqDovb3kuI3liLDmlofku7bml7blgJnlpJrmrKHliqDovb1cblxuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyLnN0b3BBbGxBY3Rpb25zKCk7XG4gICAgICAgIHZhciBjdXJZID0gLTgwO1xuXG4gICAgICAgIC8v5Y+W5Ye656ys5LiA5Liq55So5LqO56ew6LCT5pi+56S6XG4gICAgICAgIHRoaXMudGl0bGVfbGFiLnN0cmluZyA9IGxpc3Quc2hpZnQoKSB8fCBcIlwiO1xuXG4gICAgICAgIHRoaXMubGlzdF9pbmRleCA9IDA7XG4gICAgICAgIGxldCBfeSA9IDA7XG4gICAgICAgIHRoaXMuc3RhcnRVcGRhdGUobGlzdC5sZW5ndGgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubGlzdF9pbmRleDtcbiAgICAgICAgICAgIGxldCB2byA9IGxpc3RbaW5kZXhdO1xuICAgICAgICAgICAgbGV0IHN1YiA9IHRoaXMuY3JlYXRlU3ViQ29udGVudCgyLCAyMCwgdm8sIHRoaXMuY29udGFpbmVyX3NpemUud2lkdGggLSA0LCAwKTtcbiAgICAgICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2goc3ViKTtcbiAgICAgICAgICAgIGN1clkgPSBjdXJZICsgc3ViLm5vZGUuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQgKyAzOy8vNjBcbiAgICAgICAgICAgIGNjLmxvZyhjdXJZKTtcbiAgICAgICAgICAgIGxldCBtYXhZID0gTWF0aC5tYXgoY3VyWSwgdGhpcy5jb250YWluZXJfc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxfY29udGVudC5zZXRDb250ZW50U2l6ZSh0aGlzLmNvbnRhaW5lcl9zaXplLndpZHRoLCBtYXhZKzgwKTtcblxuICAgICAgICAgICAgc3ViLm5vZGUueSA9IF95IC0gc3ViLm5vZGUuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQgKyA1O1xuICAgICAgICAgICAgX3kgPSBzdWIubm9kZS55O1xuICAgICAgICAgICAgdGhpcy5saXN0X2luZGV4ICs9IDE7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMTAwKVxuICAgICAgICB0aGlzLm5vdGljZV9zY3JvbGxfc3Yuc2Nyb2xsVG9Ub3AoMC41KTtcbiAgICB9LFxuXG4gICAgY3JlYXRlU3ViQ29udGVudDogZnVuY3Rpb24gKHgsIHksIGNvbnRlbnQsIHdpZHRoLCBsaW5lc3BjZSkge1xuICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVSaWNoTGFiZWwoMjQsIHRoaXMuY29sb3IsIGNjLnYyKDAsIDApLCBjYy52MigwLCAwKSwgMzAsIHdpZHRoLCB0aGlzLnNjcm9sbF9jb250ZW50KTtcbiAgICAgICAgbGFiZWwuc3RyaW5nID0gY29udGVudDtcbiAgICAgICAgbGFiZWwuaG9yaXpvbnRhbEFsaWduID0gY2MubWFjcm8uVGV4dEFsaWdubWVudC5MRUZUO1xuICAgICAgICBsYWJlbC5ub2RlLnNldFBvc2l0aW9uKHgsIHkpO1xuICAgICAgICByZXR1cm4gbGFiZWxcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB0aGlzLnNldE1lc3NhZ2UoKTtcbiAgICB9LFxuXG5cblxuICAgIHNldFZpc2libGVTdGF0dXM6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgdGhpcy5zZXRWaXNpYmxlKHN0YXR1cylcbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLm5vZGVfbGlzdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLm5vZGVfbGlzdCkge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5ub2RlX2xpc3RbaV07XG4gICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBjYy5Ob2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHYuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2Lm5vZGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5tYWluX2NvbnRhaW5lcil7XG4gICAgICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyLnN0b3BBbGxBY3Rpb25zKCk7XG4gICAgICAgIH1cbiAgICB9LFxufSkiXX0=