{"version":3,"sources":["news.js"],"sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 22);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports) {\n\n/*\r\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\r\n * Digest Algorithm, as defined in RFC 1321.\r\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\r\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r\n * Distributed under the BSD License\r\n * See http://pajhome.org.uk/crypt/md5 for more info.\r\n */\r\n\r\n/*\r\n * Configurable variables. You may need to tweak these to be compatible with\r\n * the server-side, but the defaults work in most cases.\r\n */\r\nvar hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */\r\nvar b64pad = \"\"; /* base-64 pad character. \"=\" for strict RFC compliance */\r\nvar chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */\r\n\r\n/*\r\n * These are the functions you'll usually want to call\r\n * They take string arguments and return either hex or base-64 encoded strings\r\n */\r\nfunction hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}\r\nfunction b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}\r\nfunction str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}\r\nfunction hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }\r\nfunction b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }\r\nfunction str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }\r\n\r\n/*\r\n * Perform a simple self-test to see if the VM is working\r\n */\r\nfunction md5_vm_test()\r\n{\r\n return hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\";\r\n}\r\n\r\n/*\r\n * Calculate the MD5 of an array of little-endian words, and a bit length\r\n */\r\nfunction core_md5(x, len)\r\n{\r\n /* append padding */\r\n x[len >> 5] |= 0x80 << ((len) % 32);\r\n x[(((len + 64) >>> 9) << 4) + 14] = len;\r\n\r\n var a = 1732584193;\r\n var b = -271733879;\r\n var c = -1732584194;\r\n var d = 271733878;\r\n\r\n for(var i = 0; i < x.length; i += 16)\r\n {\r\n var olda = a;\r\n var oldb = b;\r\n var oldc = c;\r\n var oldd = d;\r\n\r\n a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);\r\n d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);\r\n c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);\r\n b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);\r\n a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);\r\n d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);\r\n c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);\r\n b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);\r\n a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);\r\n d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);\r\n c = md5_ff(c, d, a, b, x[i+10], 17, -42063);\r\n b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);\r\n a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);\r\n d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);\r\n c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);\r\n b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);\r\n\r\n a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);\r\n d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\r\n c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);\r\n b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);\r\n a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);\r\n d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);\r\n c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);\r\n b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);\r\n a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);\r\n d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);\r\n c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);\r\n b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);\r\n a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);\r\n d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);\r\n c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);\r\n b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);\r\n\r\n a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);\r\n d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);\r\n c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);\r\n b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);\r\n a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\r\n d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);\r\n c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);\r\n b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);\r\n a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);\r\n d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);\r\n c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);\r\n b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);\r\n a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);\r\n d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);\r\n c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);\r\n b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);\r\n\r\n a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);\r\n d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);\r\n c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);\r\n b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);\r\n a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);\r\n d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);\r\n c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);\r\n b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);\r\n a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);\r\n d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);\r\n c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);\r\n b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);\r\n a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);\r\n d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);\r\n c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);\r\n b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);\r\n\r\n a = safe_add(a, olda);\r\n b = safe_add(b, oldb);\r\n c = safe_add(c, oldc);\r\n d = safe_add(d, oldd);\r\n }\r\n return Array(a, b, c, d);\r\n\r\n}\r\n\r\n/*\r\n * These functions implement the four basic operations the algorithm uses.\r\n */\r\nfunction md5_cmn(q, a, b, x, s, t)\r\n{\r\n return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);\r\n}\r\nfunction md5_ff(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n}\r\nfunction md5_gg(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n}\r\nfunction md5_hh(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn(b ^ c ^ d, a, b, x, s, t);\r\n}\r\nfunction md5_ii(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n}\r\n\r\n/*\r\n * Calculate the HMAC-MD5, of a key and some data\r\n */\r\nfunction core_hmac_md5(key, data)\r\n{\r\n var bkey = str2binl(key);\r\n if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);\r\n\r\n var ipad = Array(16), opad = Array(16);\r\n for(var i = 0; i < 16; i++)\r\n {\r\n ipad[i] = bkey[i] ^ 0x36363636;\r\n opad[i] = bkey[i] ^ 0x5C5C5C5C;\r\n }\r\n\r\n var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);\r\n return core_md5(opad.concat(hash), 512 + 128);\r\n}\r\n\r\n/*\r\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\r\n * to work around bugs in some JS interpreters.\r\n */\r\nfunction safe_add(x, y)\r\n{\r\n var lsw = (x & 0xFFFF) + (y & 0xFFFF);\r\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\r\n return (msw << 16) | (lsw & 0xFFFF);\r\n}\r\n\r\n/*\r\n * Bitwise rotate a 32-bit number to the left.\r\n */\r\nfunction bit_rol(num, cnt)\r\n{\r\n return (num << cnt) | (num >>> (32 - cnt));\r\n}\r\n\r\n/*\r\n * Convert a string to an array of little-endian words\r\n * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.\r\n */\r\nfunction str2binl(str)\r\n{\r\n var bin = Array();\r\n var mask = (1 << chrsz) - 1;\r\n for(var i = 0; i < str.length * chrsz; i += chrsz)\r\n bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);\r\n return bin;\r\n}\r\n\r\n/*\r\n * Convert an array of little-endian words to a string\r\n */\r\nfunction binl2str(bin)\r\n{\r\n var str = \"\";\r\n var mask = (1 << chrsz) - 1;\r\n for(var i = 0; i < bin.length * 32; i += chrsz)\r\n str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);\r\n return str;\r\n}\r\n\r\n/*\r\n * Convert an array of little-endian words to a hex string.\r\n */\r\nfunction binl2hex(binarray)\r\n{\r\n var hex_tab = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\r\n var str = \"\";\r\n for(var i = 0; i < binarray.length * 4; i++)\r\n {\r\n str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +\r\n hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);\r\n }\r\n return str;\r\n}\r\n\r\n/*\r\n * Convert an array of little-endian words to a base-64 string\r\n */\r\nfunction binl2b64(binarray)\r\n{\r\n var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n var str = \"\";\r\n for(var i = 0; i < binarray.length * 4; i += 3)\r\n {\r\n var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)\r\n | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )\r\n | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);\r\n for(var j = 0; j < 4; j++)\r\n {\r\n if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;\r\n else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);\r\n }\r\n }\r\n return str;\r\n}\r\n\r\nmodule.exports = hex_md5\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports) {\n\n!function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t[\"default\"]}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=8)}({3:function(t,e){!function(e){function n(t){var n=this;n._option=e.extend(!0,{id:\"body\",selectId:\"selectTips\",aline:!0,range:[1,20]},t),n.$container=e(n._option.id),n.init()}n.prototype.init=function(){var t=this;t.hasAppend=!1,t.elementLoad(),t.mouseup()},n.prototype.elementLoad=function(){var t=this;t.tipsHtml='
\"\"搜索
复制
',e(\"body\").append(t.tipsHtml),t.$container.css(\"position\",\"relative\"),t.cssTxt=\"#selectTips{position:absolute;display:none;background:#fff;cursor: pointer;width:112px;overflow:hidden;height:24px;line-height:24px;border:1px solid #E7EAF1;box-shadow:1px 1px 5px rgba(0,0,0,.3)}#selectTips>div{float:left;width:50%;font-size:12px;text-align:center}#selectTips .search_btn{background-color:#ff4901;color:#fff}#selectTips img{vertical-align:middle;margin-right:4px;margin-top:-1px}\",t.loadCss(t.cssTxt),t.$selectTips=e(\"#\"+t._option.selectId),t.$search=e(\".search_btn\",t.$selectTips),t.$copy=e(\".copy_btn\",t.$selectTips)},n.prototype.loadCss=function(t){var e=document.createElement(\"style\");e.type=\"text/css\";try{e.appendChild(document.createTextNode(t))}catch(n){e.styleSheet.cssText=t}document.getElementsByTagName(\"head\")[0].appendChild(e)},n.prototype.getSelectTxt=function(){var t=\"\";return t=document.selection?t=document.selection.createRange().text:document.getSelection(),e.trim(t.toString())},n.prototype.mouseup=function(){var t,n,o,i,c=this,s=c.$selectTips.height(),p=c.$selectTips.width(),r=0;e(\"body\").click(function(t){setTimeout(function(){e(t.target).parents(c._option.id).length<1&&\"#\"+t.target.id!=c._option.id&&c.$selectTips.hide()},100)}),c.$container.mouseup(function(l){c.txt=c.getSelectTxt();e(window).height();var d=e(window).width()<1e3?1e3:e(window).width();l=l||window.event,t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,n=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0,o=c._option.aline?l.clientX+p>d?e(window).width()-p+n:l.clientX+n:l.clientX-p<0?l.clientX+n:l.clientX-p+n+2,e(\"#fixMenuBar\").length>0&&(r=33),i=l.clientY-s-r<0?l.clientY+t+10:l.clientY+t-35,c.txt&&c.txt.length>=c._option.range[0]&&c.txt.length= 0) {\r\n _timu.splice(_xb, 1);\r\n }\r\n\r\n });\r\n\r\n $('.vote_' + _vote_id + ' .votetype_checkbox input[type=\"checkbox\"]:checked').each(function () {//遍历每一个名字为interest的复选框,其中选中的执行函数\r\n var _viid = $(this).attr(\"viid\");\r\n var _vivmid = $(this).attr(\"vivmid\");\r\n var _vivgid = $(this).attr(\"vivgid\");\r\n _cookieValue += _viid + \"_\" + _vivmid + \"_\" + _vivgid + \",\";\r\n _chooseIds += _viid + \",\";\r\n\r\n var _xb = _timu.indexOf(_vivmid);\r\n if (_xb >= 0) {\r\n _timu.splice(_xb, 1);\r\n }\r\n\r\n });\r\n //console.log(_cookieValue);\r\n _chooseIds = _chooseIds.trim(',');\r\n\r\n if (_timu.length > 0) {\r\n alert(\"您还有题目没有做完\");\r\n return;\r\n }\r\n\r\n if (_chooseIds == \"\") {\r\n alert(\"请先选择答案\");\r\n return;\r\n }\r\n\r\n if (_isLockVote.indexOf(_vote_id) >= 0) {\r\n return;\r\n }\r\n _isLockVote.push(_vote_id);\r\n\r\n _this.addClass(\"btn_disabled\");\r\n\r\n setVoteCookie(\"vote_\" + _vote_id, _cookieValue, 24);//有效期24小时\r\n\r\n $.ajax({\r\n url: \"//cmsdataapi.eastmoney.com/api/Vote/VoteOperate?groupId=\" + _vote_id + \"&chooseIds=\" + _chooseIds + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n lookVoteResult(_this);//去查看投票结果\r\n }\r\n });\r\n\r\n });\r\n\r\n $(\"body\").on(\"change\", '.votetype_checkbox input[type=\"checkbox\"]', function () {\r\n var _this = $(this);\r\n var _vid = _this.attr(\"id\");\r\n var _vname = _this.attr(\"name\");\r\n var _maxcheck = _this.attr(\"maxcheck\");\r\n var _checkLength = $('.votetype_checkbox input[name=\"' + _vname + '\"]:checked').length;\r\n \r\n if (_checkLength > _maxcheck) {\r\n alert(\"最多只能选择【\" + _maxcheck + \"】个选项\");\r\n _this.attr(\"checked\", false);\r\n }\r\n });\r\n function lookVoteResult(_this) {//查看投票结果\r\n var _vote_id = _this.attr(\"vote_id\");\r\n var _vote_title = _this.attr(\"vote_title\");\r\n\r\n $.ajax({\r\n url: \"//cmsdataapi.eastmoney.com/api/Vote/GetVoteGroupById?Id=\" + _vote_id + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n var vote_item = getVoteCookie(\"vote_\" + _vote_id);\r\n _this.parents('.em_vote').html(initResultHTML(json, _vote_title, vote_item));\r\n _this.parents('.em_vote').show();\r\n }\r\n });\r\n }\r\n\r\n $(\"body\").on(\"click\", \".btn_lookvote\", function () {//查看投票结果点击事件\r\n var _vote_id = $(this).attr(\"vote_id\");\r\n if (location.host == \"pcarticle.eastmoney.com\") {\r\n\r\n } else {\r\n window.open(\"http://poll.eastmoney.com/Html/Result\" + _vote_id + \".html\");\r\n }\r\n //lookVoteResult($(this));//去查看投票结果\r\n });\r\n\r\n $(\"body\").on(\"click\", \".btn_govote\", function () {//去投票点击事件\r\n var _vote_id = $(this).attr(\"vote_id\");\r\n initVote(_vote_id);\r\n });\r\n \r\n function initResultHTML(json, _vote_title, vote_item) {\r\n var _html = ''\r\n _html += '
' + _vote_title + '
';\r\n var _isvote = false;//默认未投过票\r\n for (var i = 0; i < json.Result.Votes.length; i++) {\r\n var _item = json.Result.Votes[i];\r\n\r\n _html += '

' + _item.Vm_Title + '

';\r\n _html += '
';\r\n _html += ' ';\r\n _html += '
';\r\n }\r\n\r\n _html += '
';\r\n if (_isvote) {\r\n _html += ' ';\r\n _html += ' ';\r\n } else {\r\n if (json.Result.Vg_Enable == 1) {\r\n _html += ' ';\r\n } else {\r\n _html += ' ';\r\n _html += ' ';\r\n }\r\n }\r\n _html += '
';\r\n\r\n return _html;\r\n }\r\n function initHTML(json, _vote_title) {\r\n var _html = ''\r\n if (json && json.Success == 1 && json.Result) {\r\n if (json.Result.Vg_Title && json.Result.Vg_Title != \"\") {\r\n _vote_title = json.Result.Vg_Title;\r\n }\r\n\r\n _html += '
' + _vote_title + '
';\r\n\r\n for (var i = 0; i < json.Result.Votes.length; i++) {\r\n var _item = json.Result.Votes[i];\r\n _html += '

' + _item.Vm_Title + '

';\r\n _html += '
';\r\n _html += ' ';\r\n _html += '
';\r\n }\r\n \r\n _html += '
';\r\n _html += ' ';\r\n _html += ' ';\r\n _html += '
';\r\n }\r\n return _html;\r\n }\r\n function initVote(item){\r\n $(\".em_vote\").each(function () {\r\n var _this = $(this);\r\n var _vote_id = _this.attr(\"vote_id\");\r\n if (item == \"all\" || item == _vote_id) {\r\n var _vote_title = _this.attr(\"vote_title\");\r\n _vote_title = unescape(_vote_title);//解码\r\n //console.log(_vote_id);\r\n //console.log(_vote_title);\r\n //http://cmsdataapi.eastmoney.com/api/\r\n //http://cmsdataapi.test.emapd.com/api/\r\n $.ajax({\r\n url: \"//cmsdataapi.eastmoney.com/api/Vote/GetVoteGroupById?Id=\" + _vote_id + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n var vote_item = getVoteCookie(\"vote_\" + _vote_id);\r\n if (vote_item || json.Result.Vg_Enable != 1) {//Vg_Enable 1为 允许\r\n _this.html(initResultHTML(json, _vote_title, vote_item));\r\n } else {\r\n _this.html(initHTML(json, _vote_title));\r\n }\r\n _this.show();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n initVote(\"all\");\r\n }(jQuery)\r\n})\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hex_md5 = __webpack_require__(0);\r\nvar langke = __webpack_require__(3);\r\nvar vote = __webpack_require__(20);\r\nvar pdtips = __webpack_require__(1);\r\n\r\nvar config = {\r\n \"guba\": \"https://gbapi.eastmoney.com/\",\r\n \"push\": \"https://push2.eastmoney.com/\"\r\n};\r\n\r\nif(_CMSHJ == \"test\"){\r\n config.guba = \"https://gbapi-test.eastmoney.com/\";\r\n}\r\n\r\nvar cookie = {\r\n get: function(name) {\r\n var xarr = document.cookie.match(new RegExp(\"(^| )\" + name + \"=([^;]*)(;|$)\"));\r\n if (xarr != null) return decodeURIComponent(xarr[2]);\r\n return null;\r\n },\r\n set: function(key, value, expiredays, domain) {\r\n var cookiestr = key + \"=\" + escape(value)\r\n\r\n if (expiredays != undefined) {\r\n var exdate = new Date();\r\n exdate.setDate(exdate.getDate() + expiredays);\r\n cookiestr += \";expires=\" + exdate.toGMTString()\r\n }\r\n if (domain != undefined) {\r\n cookiestr += \";domain=\" + domain;\r\n }\r\n cookiestr += ';path=/';\r\n document.cookie = cookiestr;\r\n\r\n },\r\n del: function(key, domain) {\r\n var exdate = new Date((new Date).getTime() - 1);\r\n if (domain) {\r\n document.cookie = key + '=;path=/;expires=' + exdate.toGMTString() + ';domain=' + domain;\r\n } else {\r\n document.cookie = key + '=;path=/;expires=' + exdate.toGMTString();\r\n }\r\n\r\n }\r\n};\r\n\r\nvar userpassport = {\r\n /**\r\n * 获取用户信息\r\n */\r\n get: function () {\r\n if (cookie.get('ut') && cookie.get('ct') && cookie.get('uidal')) {\r\n\r\n //获取加v信息\r\n var jiav = { vtype: null, state: null, name: '' };\r\n if (cookie.get('vtpst') && cookie.get('vtpst') != '|') {\r\n var jiavarr = cookie.get('vtpst').split('|');\r\n if (jiavarr.length > 1) {\r\n //console.info(typeof jiavarr[0]);\r\n if (jiavarr[1] == \"0\" || jiavarr[1] == \"3\") {\r\n switch (jiavarr[0]) {\r\n case \"301\":\r\n jiav.vtype = 1;\r\n jiav.name = '理财师';\r\n break;\r\n case \"302\":\r\n jiav.vtype = 2;\r\n jiav.name = '非理财师';\r\n break;\r\n case \"303\":\r\n jiav.vtype = 3;\r\n jiav.name = '企业';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n switch (jiavarr[1]) {\r\n case \"0\":\r\n jiav.state = 0; //审核通过\r\n break;\r\n case \"1\":\r\n jiav.state = 11; //审核未通过\r\n break;\r\n case \"2\":\r\n jiav.state = 12; //审核中\r\n break;\r\n case \"3\":\r\n jiav.state = 13; //加v用户修改审核\r\n break;\r\n case \"8\":\r\n jiav.state = 18; //加v用户修改审核\r\n break;\r\n case \"9\":\r\n jiav.state = 19; //加v用户修改审核\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n //console.info(jiav);\r\n\r\n }\r\n }\r\n\r\n return {\r\n id: cookie.get('uidal').substring(0, 16),\r\n nick: cookie.get('uidal').substring(16),\r\n jiav: jiav\r\n };\r\n }\r\n return null;\r\n },\r\n /**\r\n * 退出登录\r\n * @param {function} 退出之后回调\r\n */\r\n logOut: function (callback) {\r\n var date = new Date();\r\n document.cookie = \"pi=;path=/;domain=eastmoney.com;expires=\" + date.toGMTString();\r\n document.cookie = \"ct=;path=/;domain=eastmoney.com;expires=\" + date.toGMTString();\r\n document.cookie = \"ut=;path=/;domain=eastmoney.com;expires=\" + date.toGMTString();\r\n document.cookie = \"uidal=;path=/;domain=eastmoney.com;expires=\" + date.toGMTString();\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n isLogin: function () {\r\n if (this.get()) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n gotoLogin: function () {\r\n var loginurl = 'https://passport2.eastmoney.com/pub/login?backurl=' + encodeURIComponent(self.location.href)\r\n self.location = loginurl\r\n // window.open(loginurl)\r\n }\r\n};\r\n\r\nvar _ctoken = cookie.get(\"ct\");\r\nvar _utoken = cookie.get(\"ut\");\r\nvar _GubaApiH = hex_md5(\"ctoken=\" + _ctoken + \"utoken=\" + _utoken + \"_519d77b29be442f8\");\r\nvar _deviceid = \"0d2798cab1716439a343c9965c20c59d\";\r\n\r\n/**\r\n * 格式化点赞收藏数\r\n * type: 0- ;1+ ;2不加不减\r\n */\r\nvar formatZanNum = function(count, type) {\r\n var num = parseInt(count) ? parseInt(count) : 0;\r\n var back = \"\";\r\n if (type == 2) {\r\n temp = num\r\n } else {\r\n temp = type ? num + 1 : num - 1;\r\n }\r\n back = temp > 99 ? \"99+\": temp > 0 ? temp: \"\";\r\n return back;\r\n};\r\n\r\n// 热搜\r\nvar hotSearchScroll = {\r\n init: function() {\r\n this.senter = null;\r\n this.time = 50;\r\n this.animation()\r\n\r\n },\r\n seter: function() {\r\n var _self = this;\r\n _self.senter = setInterval(function() {\r\n if (_self.lw >= _self.spanWidth) {\r\n _self.lw = 0\r\n } else {\r\n _self.lw++;\r\n }\r\n _self.newHtml.css({\r\n 'right': _self.lw\r\n });\r\n\r\n },\r\n\t\t_self.time)\r\n },\r\n animation: function() {\r\n var _self = this,\r\n\t\taWidth = 0;;\r\n _self._content = $('#hotnews');\r\n _self.aHtml = _self._content.html();\r\n $('a', _self._content).each(function() {\r\n aWidth += $(this).outerWidth() + 10;\r\n });\r\n _self.newHtml = $('
' + _self.aHtml + '' + _self.aHtml + '
');\r\n _self._content.html(_self.newHtml);\r\n _self.lw = _self.newHtml.position().left;\r\n _self.spanWidth = $('.span', _self._content).outerWidth();\r\n\r\n _self.seter();\r\n _self._content.hover(function() {\r\n window.clearInterval(_self.senter)\r\n },\r\n\t\tfunction() {\r\n\t\t _self.seter();\r\n\t\t})\r\n\r\n }\r\n};\r\n\r\nvar quoteTree = {\r\n HuShen: { //沪深\r\n BigName: \"沪深股市\",\r\n Link: \"http://quote.eastmoney.com/center/\",\r\n Interface: config.push + \"api/qt/ulist.np/get?ut=13697a1cc677c8bfa9a496437bfef419&fields=f1,f2,f3,f4,f12,f13,f14&secids=1.000001,0.399001,0.399006\"\r\n },\r\n HK: { //港股\r\n BigName: \"港股行情\",\r\n Link: \"http://quote.eastmoney.com/center/ggsc.html\",\r\n Interface: config.push + \"api/qt/ulist.np/get?ut=13697a1cc677c8bfa9a496437bfef419&fields=f1,f2,f3,f4,f12,f13,f14&secids=100.HSI\",\r\n Interface2: config.push + \"api/qt/kamt/get?fields1=f1,f2,f3,f4&fields2=f51,f52&ut=13697a1cc677c8bfa9a496437bfef419\"\r\n },\r\n Gold: { //黄金\r\n BigName: \"黄金行情\",\r\n Link: \"http://quote.eastmoney.com/center/hjsc.html\",\r\n Interface: config.push + \"api/qt/ulist.np/get?ut=13697a1cc677c8bfa9a496437bfef419&fields=f1,f2,f3,f4,f12,f13,f14&secids=101.GC00Y,101.SI00Y,113.aum,113.agm\"\r\n },\r\n Futures: { //期货\r\n BigName: \"期货行情\",\r\n Link: \"http://quote.eastmoney.com/center/futures.html\",\r\n //Interface: config.push + \"api/qt/clist/get?pn=1&pz=3&po=1&np=1&fltt=2&invt=2&fid=f3&fs=m:113+s:1,m:114+s:1,m:115+s:1,m:142+s:1&fields=f1,f2,f3,f4,f12,f13,f14,f152&ut=13697a1cc677c8bfa9a496437bfef419\"\r\n Interface: config.push + \"api/qt/clist/get?pn=1&pz=3&po=1&np=1&fid=f3&fs=m:113+s:1,m:114+s:1,m:115+s:1,m:142+s:1&fields=f1,f2,f3,f4,f12,f13,f14,f152&ut=13697a1cc677c8bfa9a496437bfef419\"\r\n },\r\n Global: { //全球\r\n BigName: \"全球指数\",\r\n Link: \"http://quote.eastmoney.com/center/qqzs.html\",\r\n Interface: config.push + \"api/qt/ulist.np/get?ut=13697a1cc677c8bfa9a496437bfef419&fields=f1,f2,f3,f4,f12,f13,f14&secids=1.000001,100.HSI,100.DJIA,100.N225,100.FTSE,101.GC00Y,102.CL00Y,100.UDI\"\r\n },\r\n Option: { //期权\r\n BigName: \"期权行情\",\r\n Link: \"http://quote.eastmoney.com/center/qqsc.html\",\r\n //指数\r\n Interface: config.push + \"api/qt/clist/get?pn=1&pz=1&po=1&np=1&fs=i:1.510050&fields=f1,f2,f3,f4,f12,f13,f14&ut=13697a1cc677c8bfa9a496437bfef419\",\r\n //认购\r\n Interface2: config.push + \"api/qt/clist/get?pn=1&pz=2&po=1&np=1&fltt=1&invt=2&fid=f6&fs=m:10+t:173&fields=f1,f2,f3,f4,f5,f12,f13,f14&ut=13697a1cc677c8bfa9a496437bfef419\",\r\n //认沽\r\n Interface3: config.push + \"api/qt/clist/get?pn=1&pz=2&po=1&np=1&fltt=1&invt=2&fid=f6&fs=m:10+t:174&fields=f1,f2,f3,f4,f5,f12,f13,f14&ut=13697a1cc677c8bfa9a496437bfef419\"\r\n },\r\n Forex: { //外汇\r\n BigName: \"外汇行情\",\r\n Link: \"http://quote.eastmoney.com/center/whsc.html\",\r\n Interface: config.push + \"api/qt/clist/get?pn=1&pz=4&po=1&np=1&fs=i:100.UDI&fields=f1,f2,f3,f4,f12,f13,f14&ut=13697a1cc677c8bfa9a496437bfef419\"\r\n }\r\n};\r\n\r\nvar CurrTree = quoteTree.HuShen;\r\n//window.CurrTree = CurrTree;\r\nswitch (_YM) {\r\n case \"hk\":\r\n //港股\r\n CurrTree = quoteTree.HK;\r\n break;\r\n case \"gold\":\r\n //黄金\r\n CurrTree = quoteTree.Gold;\r\n break;\r\n case \"futures\":\r\n //期货\r\n CurrTree = quoteTree.Futures;\r\n break;\r\n case \"global\":\r\n //全球\r\n CurrTree = quoteTree.Global;\r\n break;\r\n case \"option\":\r\n //期权\r\n CurrTree = quoteTree.Option;\r\n break;\r\n case \"forex\":\r\n //外汇\r\n CurrTree = quoteTree.Forex;\r\n break;\r\n default:\r\n break;\r\n}\r\n\r\n// 指数\r\nvar zsQuote = {\r\n init: function() {\r\n var that = this;\r\n that.initHTMLDom();\r\n that.formatData();\r\n setInterval(function() {\r\n that.formatData();\r\n },\r\n\t\t60 * 1000);\r\n },\r\n initHTMLDom: function() {\r\n $(\".quotemodel .mtitle .tit\").html(CurrTree.BigName);\r\n $(\".quotemodel .mtitle .tit\").attr(\"href\", CurrTree.Link);\r\n $(\".quotemodel .mtitle .more\").attr(\"href\", CurrTree.Link);\r\n },\r\n getQuoteData: function(_interface, _dom) {\r\n var that = this;\r\n return $.ajax({\r\n url: _interface,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonp: \"cb\",\r\n success: function(json) {\r\n that.QuoteCB(json, _dom);\r\n }\r\n })\r\n },\r\n getZJLData: function(_interface, _dom) {\r\n var that = this;\r\n return $.ajax({\r\n url: _interface,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonp: \"cb\",\r\n success: function(json) {\r\n that.ZJLCB(json, _dom);\r\n }\r\n })\r\n },\r\n QuoteCB: function(back, _dom) {\r\n var that = this;\r\n if (back.data && back.data.diff != \"\") {\r\n var arr = [];\r\n for (var _index in back.data.diff) {\r\n var item = back.data.diff[_index];\r\n\r\n arr.push({\r\n zs: item.f2 / Math.pow(10, item.f1),\r\n price: item.f4 / Math.pow(10, item.f1),\r\n percent: item.f3 / 100,\r\n name: item.f14,\r\n mc: item.f13 + \".\" + item.f12,\r\n f13: item.f13,\r\n f12: item.f12\r\n })\r\n }\r\n\r\n that.renderDom(arr, _dom);\r\n }\r\n },\r\n getZDFInfo: function(str) {\r\n if (str === \"\" || str == \"-\") {\r\n return {\r\n _class: \"\",\r\n _data: \"-\"\r\n };\r\n } else {\r\n var dZdf = parseFloat(str);\r\n if (dZdf > 0) {\r\n return {\r\n _class: \"red\",\r\n _data: dZdf.toFixed(2) + \"%\"\r\n };\r\n } else if (dZdf < 0) {\r\n return {\r\n _class: \"green\",\r\n _data: dZdf.toFixed(2) + \"%\"\r\n };\r\n } else {\r\n return {\r\n _class: \"\",\r\n _data: dZdf.toFixed(2) + \"%\"\r\n };\r\n }\r\n }\r\n },\r\n getGSHNum: function(str, fix, num) {\r\n if (str === \"\" || str == \"-\") {\r\n return \"-\";\r\n } else {\r\n var result;\r\n var intStr = Math.abs(parseInt(str));\r\n if (intStr.toString().length > 12) {\r\n result = (parseFloat(str) / 1000000000000).toFixed(num) + '万亿' + fix;\r\n } else if (intStr.toString().length > 8) {\r\n result = (parseFloat(str) / 100000000).toFixed(num) + '亿' + fix;\r\n } else if (intStr.toString().length > 4) {\r\n result = (parseFloat(str) / 10000).toFixed(num) + '万' + fix;\r\n } else {\r\n if (parseFloat(str) === parseInt(str)) {\r\n result = parseFloat(str) + fix;\r\n } else {\r\n result = parseFloat(str).toFixed(num) + fix;\r\n }\r\n }\r\n return result;\r\n }\r\n },\r\n getHSGTStatus: function(_hsgtstatus) {\r\n switch (_hsgtstatus) {\r\n case 1:\r\n return \"有额度\";\r\n case 2:\r\n return \"无额度\";\r\n case 3:\r\n return \"收盘\";\r\n case 4:\r\n return \"休市\";\r\n default:\r\n return \"-\";\r\n }\r\n },\r\n ZJLCB: function(back, _dom) {\r\n var that = this;\r\n try {\r\n if (back && back.rc == 0 && back.data) {\r\n //hk2sh沪股通\r\n var hgtLR = that.getGSHNum(parseFloat(back.data.hk2sh.dayNetAmtIn) * 10000, \"\", 2);\r\n $(\"#hgtInflow\").html(hgtLR);\r\n var hgtInfo = that.getZDFInfo(back.data.hk2sh.dayNetAmtIn);\r\n if (hgtInfo._class != \"\") {\r\n $(\"#hgtInflow\").addClass(hgtInfo._class);\r\n if (hgtInfo._class == \"green\") {\r\n $(\"#hgtInflow\").parent().find(\"span\").eq(0).html(\"资金净流出\");\r\n $(\"#hgtInflow\").html(hgtLR.replace(\"-\", \"\"));\r\n } else {\r\n $(\"#hgtInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n } else {\r\n $(\"#hgtInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n $(\".hgtstatus\").html(that.getHSGTStatus(back.data.hk2sh.status));\r\n if (back.data.hk2sh.status == 4) {\r\n $(\"#hgtInflow\").parent().html(\"-\");\r\n }\r\n\r\n //sh2hk港股通(沪)\r\n var ggthLR = that.getGSHNum(parseFloat(back.data.sh2hk.dayNetAmtIn) * 10000, \"\", 2);\r\n $(\"#ggthInflow\").html(ggthLR);\r\n var ggthInfo = that.getZDFInfo(back.data.sh2hk.dayNetAmtIn);\r\n if (ggthInfo._class != \"\") {\r\n $(\"#ggthInflow\").addClass(ggthInfo._class);\r\n if (ggthInfo._class == \"green\") {\r\n $(\"#ggthInflow\").parent().find(\"span\").eq(0).html(\"资金净流出\");\r\n $(\"#ggthInflow\").html(ggthLR.replace(\"-\", \"\"));\r\n } else {\r\n $(\"#ggthInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n } else {\r\n $(\"#ggthInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n $(\".ggthstatus\").html(that.getHSGTStatus(back.data.sh2hk.status));\r\n if (back.data.sh2hk.status == 4) {\r\n $(\"#ggthInflow\").parent().html(\"-\");\r\n }\r\n\r\n //hk2sz深股通\r\n var sgtLR = that.getGSHNum(parseFloat(back.data.hk2sz.dayNetAmtIn) * 10000, \"\", 2);\r\n $(\"#sgtInflow\").html(sgtLR);\r\n var sgtInfo = that.getZDFInfo(back.data.hk2sz.dayNetAmtIn);\r\n if (sgtInfo._class != \"\") {\r\n $(\"#sgtInflow\").addClass(sgtInfo._class);\r\n if (sgtInfo._class == \"green\") {\r\n $(\"#sgtInflow\").parent().find(\"span\").eq(0).html(\"资金净流出\");\r\n $(\"#sgtInflow\").html(sgtLR.replace(\"-\", \"\"));\r\n } else {\r\n $(\"#sgtInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n } else {\r\n $(\"#sgtInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n $(\".sgtstatus\").html(that.getHSGTStatus(back.data.hk2sz.status));\r\n if (back.data.hk2sz.status == 4) {\r\n $(\"#sgtInflow\").parent().html(\"-\");\r\n }\r\n\r\n //sz2hk港股通(深)\r\n var ggtsLR = that.getGSHNum(parseFloat(back.data.sz2hk.dayNetAmtIn) * 10000, \"\", 2);\r\n $(\"#ggtsInflow\").html(ggtsLR);\r\n var ggtsInfo = that.getZDFInfo(back.data.sz2hk.dayNetAmtIn);\r\n if (ggtsInfo._class != \"\") {\r\n $(\"#ggtsInflow\").addClass(ggtsInfo._class);\r\n if (ggtsInfo._class == \"green\") {\r\n $(\"#ggtsInflow\").parent().find(\"span\").eq(0).html(\"资金净流出\");\r\n $(\"#ggtsInflow\").html(ggtsLR.replace(\"-\", \"\"));\r\n } else {\r\n $(\"#ggtsInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n } else {\r\n $(\"#ggtsInflow\").parent().find(\"span\").eq(0).html(\"资金净流入\");\r\n }\r\n $(\".ggtsstatus\").html(that.getHSGTStatus(back.data.sz2hk.status));\r\n if (back.data.sz2hk.status == 4) {\r\n $(\"#ggtsInflow\").parent().html(\"-\");\r\n }\r\n }\r\n _dom.show();\r\n } catch(error) {\r\n //console.log(error.message);\r\n _dom.hide();\r\n return false;\r\n }\r\n },\r\n formatData: function() {\r\n var that = this;\r\n that.getQuoteData(CurrTree.Interface, $(\"#quotedom\"));\r\n if (_YM == \"option\") { //期权\r\n that.getQuoteData(CurrTree.Interface2, $(\"#quotedom2\"));\r\n that.getQuoteData(CurrTree.Interface3, $(\"#quotedom3\"));\r\n } else if (_YM == \"hk\") {\r\n that.getZJLData(CurrTree.Interface2, $(\"#quotedomzjl\"));\r\n }\r\n },\r\n renderDom: function (zsinfos, _dom) {\r\n var that = this;\r\n if (zsinfos && zsinfos.length) {\r\n var _html = '';\r\n for (var i = 0; i < zsinfos.length; i++) {\r\n var szzs = ((zsinfos[i].zs === \"\" || zsinfos[i].zs == \"-\") ? \"-\": zsinfos[i].zs);\r\n var szprice = ((zsinfos[i].price === \"\" || zsinfos[i].price == \"-\") ? \"-\": zsinfos[i].price);\r\n var szpercent = ((zsinfos[i].percent === \"\" || zsinfos[i].percent == \"-\") ? \"-\": parseFloat(zsinfos[i].percent).toFixed(2) + \"%\");\r\n var szname = zsinfos[i].name;\r\n\r\n var _icon = \"\";\r\n var _color = \"\";\r\n if (zsinfos[i].percent > 0) {\r\n _icon = \"icon up\";\r\n _color = \"red\";\r\n } else if (zsinfos[i].percent < 0) {\r\n _icon = \"icon down\";\r\n _color = \"green\";\r\n } else {\r\n _icon = \"icon\";\r\n _color = \"\";\r\n }\r\n\r\n _html += '
';\r\n //_html += '';\r\n _html += '
    ';\r\n if (zsinfos[i].mc == \"121.USDCNYI\" || zsinfos[i].mc == \"121.HKDCNYI\") {\r\n _html += '
  • ' + szname + '
  • ';\r\n } else if (szname.indexOf(\"ETF购\") > 0) {\r\n _html += '
  • ' + szname.substring(0, szname.indexOf(\"ETF购\") + 4) + '
    ' + szname.substring(szname.indexOf(\"ETF购\") + 4) + '
  • ';\r\n } else if (szname.indexOf(\"ETF沽\") > 0) {\r\n _html += '
  • ' + szname.substring(0, szname.indexOf(\"ETF沽\") + 4) + '
    ' + szname.substring(szname.indexOf(\"ETF沽\") + 4) + '
  • ';\r\n } else {\r\n _html += '
  • ' + szname + '
  • ';\r\n }\r\n _html += '
  • ' + szzs + '
  • ';\r\n _html += '
  • ' + szprice + '
  • ';\r\n _html += '
  • ' + szpercent + '
  • ';\r\n _html += '
';\r\n _html += '
';\r\n _html += '';\r\n _html += '';\r\n _html += '';\r\n _html += '
';\r\n _html += '
';\r\n }\r\n _dom.html(_html);\r\n\r\n if (window.QuoteshowDom == undefined && _dom.attr(\"id\") == \"quotedom\") {//第一次进入\r\n $(\".quotedom .zsitem\").eq(0).css({ \"height\": \"180px\" });//设置第一个高度,让图片显示出来\r\n //$(\".quotedom .zsitem ul\").eq(0).attr(\"openimg\", \"show\");//为第一个ul新增样式\r\n window.QuoteshowDom = $(\".quotedom .zsitem\").eq(0).data(\"mc\");\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * 点赞+1\r\n */\r\nvar creatAddlab = function(e) {\r\n var $body = document.getElementsByTagName(\"body\")[0];\r\n var $lab = document.createElement(\"b\");\r\n var diff = 0,\r\n\tanim, x = e.pageX,\r\n\ty = e.pageY;\r\n var style = $lab.style;\r\n style.color = \"#E94F06\";\r\n style.zIndex = 9999;\r\n style.position = \"absolute\";\r\n style.select = \"none\";\r\n style.left = (x - 10) + \"px\";\r\n style.top = (y - 20) + \"px\";\r\n style.fontSize = \"16px\";\r\n style.textShadow = \"\";\r\n $lab.innerText = \"+1\";\r\n clearInterval(anim);\r\n setTimeout(function() {\r\n anim = setInterval(function() {\r\n if (++diff == 100) {\r\n clearInterval(anim);\r\n $body.removeChild($lab);\r\n };\r\n style.left = (x - 10) + \"px\";\r\n style.top = y - 20 - diff + \"px\";\r\n style.opacity = (100 - diff) / 100;\r\n },\r\n\t\t10);\r\n },\r\n\t50);\r\n $body.appendChild($lab);\r\n};\r\n\r\n// 点赞\r\nvar zanObj = {\r\n // 点赞操作 $(this),haszan, \r\n zanFun: function(e, $dom, type, articleId) {\r\n var _this = $dom;\r\n\r\n var _apiurl = (_this.hasClass(\"zan\") || _this.hasClass(\"huozan\")) ? \"LikeArticle\" : \"CancelLikeArticle\";\r\n\r\n $.ajax({\r\n url: config.guba + \"likeopt/jsonp/\" + _apiurl + \"?id=\" + articleId + \"&type=1&deviceid=\" + _deviceid + \"&version=2&product=eastmoney&plat=web&h=\" + _GubaApiH + \"&ctoken=\" + _ctoken + \"&utoken=\" + _utoken,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonpCallback: \"cb\" + parseInt(Math.random() * 10000 + \"\"),\r\n success: function(res) {\r\n if (res && res.rc === 1) {\r\n var prezanum = $(\"#post_like_count\").attr(\"realnum\") ? $(\"#post_like_count\").attr(\"realnum\") : 0;\r\n\r\n if(_apiurl == \"LikeArticle\"){//点赞\r\n if (_this.hasClass(\"zan\")){//普通赞\r\n _this.removeClass(\"zan\").addClass(\"zananimate\");\r\n setTimeout(function() {\r\n _this.removeClass(\"zananimate\").addClass(\"has_zan\");\r\n },\r\n 600);\r\n }else if(_this.hasClass(\"huozan\")){//火赞\r\n _this.removeClass(\"huozan\").addClass(\"has_huozan\");\r\n }else{\r\n\r\n }\r\n\r\n var num = formatZanNum(prezanum, 1);//+1\r\n $(\"#post_like_count\").text(num);\r\n $(\"#post_like_count\").attr(\"realnum\", parseInt(prezanum) + 1);\r\n\r\n creatAddlab(e);\r\n\r\n }else{//取消点赞\r\n var num = formatZanNum(prezanum, 0);//-1\r\n $(\"#post_like_count\").text(num);\r\n $(\"#post_like_count\").attr(\"realnum\", parseInt(prezanum) - 1);\r\n if(_this.hasClass(\"has_huozan\")){//火赞\r\n _this.removeClass(\"has_huozan\").addClass(\"huozan\");\r\n }else{//普通赞\r\n _this.removeClass(\"has_zan\").addClass(\"zan\");\r\n }\r\n\r\n }\r\n }\r\n }\r\n });\r\n }\r\n};\r\n\r\n// 收藏\r\nvar collectObj = {\r\n // 收藏与取消收藏\r\n collectFun: function(e, $dom, type, articleId) {\r\n var _this = $dom;\r\n\r\n var hascollect = _this.hasClass(\"shoucang\") ? false: true;\r\n var _apiurl = hascollect ? \"CancelCollectArticle\": \"CollectArticle\";\r\n\r\n $.ajax({\r\n url: config.guba + \"collectopt/jsonp/\" + _apiurl + \"?postid=\" + articleId + \"&h=\" + _GubaApiH + \"&type=1&version=80008000&product=guba&plat=wap&deviceid=\" + _deviceid + \"&ctoken=\" + _ctoken + \"&utoken=\" + _utoken,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonpCallback: \"cb\" + parseInt(Math.random() * 10000 + \"\"),\r\n success: function(res) {\r\n if (res && res.rc === 1) {\r\n //收藏\r\n if (_this.hasClass(\"shoucang\")) {\r\n _this.removeClass(\"shoucang\").addClass(\"scanimate\");\r\n setTimeout(function () {\r\n _this.removeClass(\"scanimate\").addClass(\"has_shoucang\");\r\n }, 600);\r\n\r\n //_this.removeClass(\"shoucang\").addClass(\"has_shoucang\");\r\n\r\n //creatAddlab(e);\r\n }\r\n //取消收藏\r\n else {\r\n _this.removeClass(\"has_shoucang scanimate\").addClass(\"shoucang\");\r\n //_this.removeClass(\"has_shoucang\").addClass(\"shoucang\");\r\n }\r\n }\r\n }\r\n });\r\n }\r\n};\r\n\r\nvar zxzwObj = {\r\n /**\r\n * 初始化事件 \r\n */\r\n init: function () {\r\n\r\n // 搜索框初始化\r\n try {\r\n var StockCodeBar = new suggest2017({\r\n inputid: 'StockCode_bar',\r\n placeholder: '输入股票代码、名字、简拼或关键字',\r\n shownewtips: true,\r\n onSubmit: 'search',\r\n newtipsoffset: {\r\n left: 6,\r\n top: -1\r\n }\r\n });\r\n } catch (e) {\r\n\r\n }\r\n\r\n try {\r\n //获取点赞 收藏 分享 评论数 及相关状态\r\n this.getNewsArticleBriefInfo();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n //初始化字体大小\r\n this.loadFontSize();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n // 指数行情\r\n zsQuote.init();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n //dom 绑定事件\r\n this.bindEvent();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n // 热搜\r\n this.getHotNews();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n //固顶\r\n this.gudingFun();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n //热点推荐\r\n this.initRDTJ();\r\n } catch (e) {\r\n \r\n }\r\n\r\n try {\r\n //初始化行情股票链接及自选股\r\n this.initQuoteLink();\r\n } catch (e) {\r\n \r\n }\r\n },\r\n /**\r\n * 获取点赞 收藏 分享 评论数 及相关状态\r\n * post_like_count 点赞数 \r\n * like_state 点赞状态\r\n * collect_state 收藏状态\r\n * post_forward_count 分享数\r\n * post_comment_count 评论数\r\n */\r\n getNewsArticleBriefInfo: function () {\r\n $.ajax({\r\n url: config.guba + \"abstract/api/PostShort/NewsArticleBriefInfo?postid=\" + _NewsId + \"&type=1&version=80008000&product=guba&plat=web&deviceid=\" + _deviceid + \"&ctoken=\" + _ctoken + \"&utoken=\" + _utoken,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonpCallback: \"cb\" + parseInt(Math.random() * 10000 + \"\"),\r\n success: function (res) {\r\n if (res && res.rc == 1 && res.re && res.re.length > 0) {\r\n var infos = res.re[0];\r\n var post_like_count = infos.post_like_count,\r\n like_state = infos.like_state,\r\n collect_state = infos.collect_state,\r\n post_forward_count = infos.post_forward_count,\r\n post_comment_count = infos.post_comment_count;\r\n\r\n // 评论权限(post_comment_authory 3禁止)\r\n // 点赞权限(allow_likes_state 1禁止)\r\n // 转发权限(repost_state 1禁止)\r\n // 点赞样式(post_like_style 1是火苗 0是拇指 默认0)\r\n // 评论权限是否是系统设置的标识(system_comment_authority 1是系统设置)\r\n // infos.post_comment_authory = 3;\r\n // infos.allow_likes_state = 1;\r\n // infos.repost_state = 1;\r\n var isHuoZan = infos.post_like_style == 1;//是否火赞\r\n // isHuoZan = true;\r\n\r\n if(isHuoZan){\r\n $(\"#sharebox\").find(\".articlezan\").removeClass(\"zan\").addClass(\"huozan\");\r\n }\r\n\r\n if(infos.allow_likes_state != 1){\r\n //点赞数量\r\n if (!!post_like_count) {\r\n $(\"#post_like_count\").attr(\"realnum\", post_like_count);\r\n $(\"#post_like_count\").text(formatZanNum(post_like_count, 2));\r\n }\r\n\r\n //已点赞\r\n if (!!like_state) {\r\n if(isHuoZan){\r\n $(\"#sharebox\").find(\".articlezan\").removeClass(\"huozan\").addClass(\"has_huozan\");\r\n }else{\r\n $(\"#sharebox\").find(\".articlezan\").removeClass(\"zan\").addClass(\"has_zan\");\r\n }\r\n };\r\n }else{\r\n // $(\".articlezan,#post_like_count\").css({\"pointer-events\":\"none\"});\r\n $(\".articlezan\").parent(\".child\").css({\"pointer-events\":\"none\",\"opacity\":\"0.5\"});\r\n }\r\n\r\n //已经收藏\r\n if (!!collect_state) {\r\n $(\"#sharebox\").find(\".articlesc\").removeClass(\"shoucang\").addClass(\"has_shoucang\");\r\n };\r\n\r\n if(infos.repost_state != 1){\r\n //分享数\r\n if (!!post_forward_count) {\r\n $(\"#post_forward_count\").text(formatZanNum(post_forward_count, 2));\r\n };\r\n }else{\r\n $(\"#emsharewrap\").css({\"pointer-events\":\"none\",\"opacity\":\"0.5\"});\r\n $(\"#sharebottom\").hide();\r\n }\r\n\r\n if(infos.post_comment_authory != 3){\r\n //评论数\r\n if (!!post_comment_count) {\r\n var _num = formatZanNum(post_comment_count, 2);\r\n $(\"#post_comment_count\").text(_num);\r\n $(\".infos .gopinluntxt .item\").html('' + infos.post_comment_count + '人评论');\r\n }else{\r\n $(\"#post_comment_count\").text('');\r\n $(\".infos .gopinluntxt .item\").html('');\r\n };\r\n\r\n try {\r\n //评论区域\r\n zxzwObj.initPinLun();\r\n } catch (e) {\r\n \r\n }\r\n }else{\r\n $(\"#post_comment_count\").text('');\r\n $(\".infos .gopinluntxt .item\").html('');\r\n\r\n $(\".gopinluntxt\").attr(\"href\",\"javascript:;\");\r\n // $(\".gopinluntxt,.gopinluntxt span\").css({\"pointer-events\":\"none\"});\r\n $(\".gopinluntxt\").parent(\".child\").css({\"pointer-events\":\"none\",\"opacity\":\"0.5\"});\r\n }\r\n\r\n }\r\n }\r\n });\r\n },\r\n //初始化行情股票链接及自选股\r\n initQuoteLink: function(){\r\n //正文页增加网页个股链接功能(非第一次出现的时候转换成a链接)\r\n $(\".em_stock_key_common\").each(function () {\r\n var _this = $(this);\r\n if (_this.attr(\"web\") == \"1\") {//web=1的时候span标签变成a标签\r\n _this.after(_this.prop(\"outerHTML\").replace(\"\", \"\")).remove();\r\n }\r\n });\r\n\r\n var isIpad = navigator.userAgent.toLowerCase().match(/(ipad).*os\\s([\\d_]+)/);\r\n if (!isIpad) {//非ipad\r\n new window.pdtips({\r\n id: '#ContentBody'\r\n });\r\n\r\n var _tipZIndex = 100;\r\n\r\n $(\".txtinfos > p,.txtinfos > h3,.txtinfos > h4,.txtinfos > table\").on(\"mouseleave\", function () {\r\n if ($(this).find(\".quotebox\").length > 0) {\r\n $(this).find(\".quotebox\").remove();\r\n }\r\n });\r\n\r\n $(\".txtinfos > p,.txtinfos > h3,.txtinfos > h4,.txtinfos > table\").on(\"click\", function () {\r\n if ($(\".quotebox\").length > 0) {\r\n $(\".quotebox\").remove();\r\n }\r\n });\r\n\r\n //正文文字,需要跳转原生行情的标签属性转换\r\n $(\".keytip[data-code],.em_stock_key_common[data-code]\").each(function () {\r\n\r\n var _this = $(this);\r\n var _thisCode = _this.data(\"code\").split(',');\r\n\r\n if (_thisCode.length == 2) {\r\n _this.attr(\"data-market\", _thisCode[0]);//新增市场属性\r\n _this.attr(\"data-code\", _thisCode[1]);//新增代码属性(会覆盖掉老的属性)\r\n\r\n //console.log(\"=================\", _this.attr(\"data-market\") + \".\" + _this.attr(\"data-code\") + \" \" + _this.html());\r\n\r\n var _isMouseOver = false;//当前移入元素及状态\r\n\r\n _this.on(\"mouseout\", function (e) {//触发隐藏行情[父元素移出]\r\n _isMouseOver = false;\r\n //setTimeout(function () {\r\n // if (!_isMouseOver) {//父元素移出0.5秒钟后焦点不在,就移除\r\n // if (_this.find(\".quotebox\").length > 0) {\r\n // _this.find(\".quotebox\").remove();\r\n // }\r\n // }\r\n //}, 500);\r\n });\r\n\r\n _this.on(\"mouseover\", function (e) {//触发显示行情[父元素移入]\r\n var _thisitem = $(this);\r\n\r\n //移入的时候,先删除其他股票的浮层\r\n $(\".quotebox\").each(function () {\r\n if ($(this).data(\"mc\") != _thisitem.attr(\"data-market\") + \".\" + _thisitem.attr(\"data-code\")) {\r\n $(this).remove();\r\n }\r\n });\r\n\r\n _isMouseOver = true;\r\n\r\n setTimeout(function () {\r\n if (_isMouseOver) {//移入0.3秒后焦点还在\r\n //var winHeight = $(window).height(),\r\n // winWidth = $(window).width() < 1000 ? 1000 : $(window).width();\r\n\r\n //var _thisWidth = _thisitem.width();\r\n //var _thisHeight = _thisitem.height();\r\n\r\n //var e = e || window.event;\r\n //var sh = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n //var xh = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\r\n\r\n //var topNav = 0;\r\n //if ($('#fixMenuBar').length > 0) {\r\n // topNav = 33;\r\n //}\r\n\r\n //var left = (e.clientX + _thisWidth > winWidth) ? $(window).width() - _thisWidth + xh : e.clientX + xh;\r\n ////left = (e.clientX - _thisWidth < 0) ? e.clientX + xh : e.clientX - _thisWidth + xh + 2;\r\n //var top = (e.clientY - _thisHeight - topNav < 0) ? e.clientY + sh + 10 : e.clientY + sh - 35;\r\n\r\n //console.log(\"left-top:\", \"left:\" + left + \"top:\" + top);\r\n\r\n var _id = 'quote' + (new Date()).getTime();\r\n\r\n if (_thisitem.find(\".quotebox\").length <= 0) {\r\n var quoteboxHtml = '
';\r\n _thisitem.append(quoteboxHtml);\r\n\r\n _thisitem.on(\"mouseover\", \".quotebox\", function () {//移入子浮层\r\n _isMouseOver = true;\r\n });\r\n\r\n _thisitem.on(\"mouseout\", \".quotebox\", function () {//触发隐藏行情[浮层移出]\r\n var _thisitem2 = $(this);\r\n _isMouseOver = false;\r\n\r\n setTimeout(function () {\r\n if (!_isMouseOver) {//0.5秒后焦点不在\r\n _thisitem2.remove();\r\n }\r\n }, 500);\r\n });\r\n\r\n var _interface = config.push + \"api/qt/ulist.np/get?ut=13697a1cc677c8bfa9a496437bfef419&fields=f1,f2,f3,f4,f12,f13,f14&secids=\" + _thisitem.attr(\"data-market\") + \".\" + _thisitem.attr(\"data-code\");\r\n $.ajax({\r\n url: _interface,\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n jsonp: \"cb\",\r\n success: function (json) {\r\n var item = json.data.diff[0];\r\n var dataQuote = {\r\n price: (item.f2 === \"\" || item.f2 === \"-\") ? \"-\" : parseFloat(item.f2 / Math.pow(10, item.f1)).toFixed(item.f1),\r\n zdf: item.f3 / 100,\r\n zde: (item.f4 === \"\" || item.f4 === \"-\") ? \"-\" : parseFloat(item.f4 / Math.pow(10, item.f1)).toFixed(item.f1),\r\n name: item.f14,\r\n mc: item.f13 + \".\" + item.f12,\r\n market: item.f13,\r\n code: item.f12\r\n };\r\n\r\n var _color = \"\";\r\n if (dataQuote.zdf > 0) {\r\n _color = \"red\";\r\n } else if (dataQuote.zdf < 0) {\r\n _color = \"green\";\r\n } else {\r\n _color = \"\";\r\n }\r\n\r\n dataQuote.zdf = ((dataQuote.zdf === \"\" || dataQuote.zdf == \"-\") ? \"-\" : parseFloat(dataQuote.zdf).toFixed(2) + \"%\");\r\n\r\n $(\"#\" + _id).html(dataQuote.name + \":\" + dataQuote.code + \" \" + dataQuote.price + \" \" + dataQuote.zdf + \" \");\r\n\r\n var _dom = document.getElementById(_id);\r\n var dw = _dom.clientWidth;\r\n var dl = _dom.offsetParent.offsetLeft;\r\n\r\n if (dw + dl + 44 > 670) {//44是加自选或删自选的宽度\r\n $(\"#\" + _id).css({\r\n \"left\": (670 - parseInt(dw + dl + 44)) + \"px\"\r\n });\r\n }\r\n\r\n initZXInfo($(\"#\" + _id + \" .zixuan\"), dataQuote.mc);\r\n\r\n }\r\n });\r\n\r\n }\r\n }\r\n },300);\r\n\r\n });\r\n\r\n }\r\n });\r\n\r\n }\r\n\r\n /**\r\n * 初始化自选股相关信息\r\n * @param {*} dom jQueryDom \r\n * @param {*} code 股票代码 0.300059\r\n */\r\n function initZXInfo(dom, code) {\r\n var apiurl = '//myfavor.eastmoney.com/v4/'; //正式环境\r\n var appkey = 'e9166c7e9cdfad3aa3fd7d93b757e9b1';\r\n var params = \"appkey=\" + appkey;\r\n code = code.replace('.', '$');\r\n\r\n var fingerprint = cookie.get('qgqp_b_id') || '';\r\n\r\n if (userpassport.get() == null) {\r\n apiurl += 'anonymwebouter/';\r\n params += \"&bid=\" + fingerprint;\r\n }\r\n else {\r\n apiurl += 'webouter/';\r\n }\r\n\r\n //获取默认分组股票,检测是否加了自选\r\n $.ajax({\r\n url: apiurl + \"gsaandcheck?\" + params + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {\r\n sc: code\r\n },\r\n success: function (json) {\r\n if (json.state == 0 && json.data) {\r\n if (json.data.check) {\r\n dom.addClass(\"zixuandel\").html(\"-自选\");\r\n } else {\r\n dom.removeClass(\"zixuandel\").html(\"+自选\");\r\n }\r\n dom.on(\"click\", function () {\r\n var _AddOrDelZXG = \"\";\r\n var _type = \"\";\r\n if ($(this).hasClass(\"zixuandel\")) {//删自选\r\n _AddOrDelZXG = apiurl + \"dsz?\" + params + \"&cb=?\";\r\n _type = \"del\";\r\n } else {//加自选\r\n _AddOrDelZXG = apiurl + \"asz?\" + params + \"&cb=?\";\r\n _type = \"add\";\r\n }\r\n\r\n $.ajax({\r\n url: _AddOrDelZXG,\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {\r\n sc: code\r\n },\r\n success: function (back) {\r\n if (back.state == 0) {\r\n if (_type == \"add\") {//加自选成功,变成删自选\r\n dom.addClass(\"zixuandel\").html(\"-自选\");\r\n } else {//删自选成功,变成加自选\r\n dom.removeClass(\"zixuandel\").html(\"+自选\");\r\n }\r\n }\r\n else {\r\n console.log(\"back.message\", back.message);\r\n }\r\n }\r\n });\r\n\r\n return false;\r\n });\r\n }\r\n }\r\n });\r\n\r\n }\r\n },\r\n //初始化字体大小\r\n loadFontSize: function() {\r\n var size = cookie.get(\"EM_NewsContent_FontSize\");\r\n if (size != null && size != \"\" && size != undefined) {\r\n switch (size) {\r\n case \"12\":\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").addClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgmid bgbig\").addClass(\"bgsmall\");\r\n $(\".fsctrlbox .fs14\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"12px\",\r\n \"line-height\": \"28px\"\r\n });\r\n break;\r\n case \"15\":\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgsmall bgbig\").addClass(\"bgmid\");\r\n $(\".fsctrlbox .fs16\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"15px\",\r\n \"line-height\": \"31px\"\r\n });\r\n break;\r\n case \"18\":\r\n $(\".txtinfos\").addClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgsmall bgmid\").addClass(\"bgbig\");\r\n $(\".fsctrlbox .fs18\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"18px\",\r\n \"line-height\": \"34px\"\r\n });\r\n break;\r\n default:\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgsmall bgbig\").addClass(\"bgmid\");\r\n $(\".fsctrlbox .fs16\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"15px\",\r\n \"line-height\": \"31px\"\r\n });\r\n break;\r\n }\r\n\r\n }\r\n },\r\n /**\r\n * 事件绑定 \r\n */\r\n bindEvent: function() {\r\n var that = this;\r\n // 字体控制\r\n $(\"#fsctrl\").on(\"click\", function(e) {\r\n\t\t e.stopPropagation();\r\n\t\t var _this = $(this);\r\n\t\t if ($(e.target).prop(\"tagName\") == \"SPAN\") {\r\n\t\t var fstype = $(e.target).data(\"type\");\r\n\t\t switch (fstype) {\r\n\t\t case \"s\":\r\n\t\t $(\".txtinfos\").removeClass(\"fontsize-big\").addClass(\"fontsize-small\");\r\n\t\t _this.removeClass(\"bgmid bgbig\").addClass(\"bgsmall\");\r\n\t\t cookie.set(\"EM_NewsContent_FontSize\", \"12\", 365, \".eastmoney.com\");\r\n\t\t $(\".abstract .txt\").css({\r\n\t\t \"font-size\": \"12px\",\r\n\t\t \"line-height\": \"28px\"\r\n\t\t });\r\n\t\t break;\r\n\t\t case \"m\":\r\n\t\t $(\".txtinfos\").removeClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n\t\t _this.removeClass(\"bgsmall bgbig\").addClass(\"bgmid\");\r\n\t\t cookie.set(\"EM_NewsContent_FontSize\", \"15\", 365, \".eastmoney.com\");\r\n\t\t $(\".abstract .txt\").css({\r\n\t\t \"font-size\": \"15px\",\r\n\t\t \"line-height\": \"31px\"\r\n\t\t });\r\n\t\t break;\r\n\t\t case \"l\":\r\n\t\t $(\".txtinfos\").addClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n\t\t _this.removeClass(\"bgsmall bgmid\").addClass(\"bgbig\");\r\n\t\t cookie.set(\"EM_NewsContent_FontSize\", \"18\", 365, \".eastmoney.com\");\r\n\t\t $(\".abstract .txt\").css({\r\n\t\t \"font-size\": \"18px\",\r\n\t\t \"line-height\": \"34px\"\r\n\t\t });\r\n\t\t break;\r\n\t\t };\r\n\t\t $(e.target).addClass(\"on\").siblings().removeClass(\"on\");\r\n\t\t };\r\n\r\n\t\t $(\".fsctrlbox\").toggle();\r\n\r\n\t\t return false;\r\n });\r\n\r\n //前往评论区\r\n $(\".gopinluntxt\").on(\"click\", function () {\r\n if ($(\"#topbox\").hasClass(\"topboxfix\")) {\r\n window.scrollTo(0, $(\"#gubaComment\").offset().top - $(\"#topbox\").height() - $(\".top-nav-wrap\").height());\r\n } else {\r\n window.scrollTo(0, $(\"#gubaComment\").offset().top - $(\"#topbox\").height() * 2 - $(\".top-nav-wrap\").height() * 2);\r\n }\r\n return false;\r\n });\r\n\r\n // 点赞\r\n $(\"#sharebox\").on(\"click\", \".articlezan\", function(e) {\r\n\t\t if (_ctoken == null || _utoken == null || _GubaApiH == null) {\r\n\t\t location.href = \"https://passport2.eastmoney.com/pub/login?backurl=\" + encodeURIComponent(location.href);\r\n\t\t } else {\r\n\t\t zanObj.zanFun(e, $(this), \"1\", _NewsId);\r\n\t\t }\r\n\t\t return false;\r\n\t\t});\r\n\r\n //收藏\r\n $(\"#sharebox\").on(\"click\", \".articlesc\", function(e) {\r\n\t\t // var _this = $(this), hascollect = false;\r\n\t\t if (_ctoken == null || _utoken == null || _GubaApiH == null) {\r\n\t\t location.href = \"https://passport2.eastmoney.com/pub/login?backurl=\" + encodeURIComponent(location.href);\r\n\t\t } else {\r\n\t\t collectObj.collectFun(e, $(this), \"1\", _NewsId);\r\n\t\t }\r\n\t\t return false;\r\n\t\t});\r\n\r\n // 分享\r\n $(\"#emsharewrap\").on(\"click\", function(e) {\r\n\t\t e.stopPropagation();\r\n\r\n\t\t $(\".qrimgbox\").hide();\r\n\t\t if ($(e.target).hasClass(\"shares\")) {\r\n\t\t $(\".sharewrap\").toggle();\r\n\t\t }\r\n\t\t});\r\n\r\n //二维码\r\n $(\"#qrcode\").on(\"click\", \".qricon\", function(e) {\r\n\t\t e.stopPropagation();\r\n\r\n\t\t $(\".sharewrap\").hide();\r\n\t\t if ($(e.target).hasClass(\"qricon\")) {\r\n\t\t $(\".qrimgbox\").toggle();\r\n\t\t }\r\n\t\t});\r\n\r\n //// 沪深指数点击切换事件\r\n //$(\".zsitems\").on(\"click\", \".zsitem>ul\", function() {\r\n\t\t// var _thisdom = $(this);\r\n\r\n\t\t// $(\"[openimg='show']\").parent(\".zsitem\").animate({\r\n\t\t// height: '48px'\r\n\t\t// },\r\n\t\t//\t300);\r\n\t\t// if (window.QuoteshowDom == _thisdom.parent(\".zsitem\").data(\"mc\")) {//当前点击的是打开的\r\n\t\t// window.QuoteshowDom = \"close\";//不是当前的时候就不会打开\r\n\t\t// _thisdom.attr(\"openimg\", \"\");\r\n\t\t// } else {\r\n\t\t// _thisdom.parent(\".zsitem\").animate({\r\n\t\t// height: '180px'\r\n\t\t// },\r\n\t\t//\t 300);\r\n\t\t// _thisdom.attr(\"openimg\", \"show\").parent(\".zsitem\").siblings().find(\"ul\").attr(\"openimg\", \"\");\r\n\t\t// window.QuoteshowDom = _thisdom.parent(\".zsitem\").data(\"mc\");\r\n\t\t// }\r\n //});\r\n\r\n // 沪深指数鼠标滑过切换事件\r\n $(\".zsitems\").on(\"mouseover\", \".zsitem>ul\", function () {\r\n var _thisdom = $(this);\r\n\r\n _thisdom.parent(\".zsitem\").css({\r\n height: '180px'\r\n });\r\n _thisdom.attr(\"openimg\", \"show\").parent(\".zsitem\").siblings().css({\r\n height: '48px'\r\n });\r\n window.QuoteshowDom = _thisdom.parent(\".zsitem\").data(\"mc\");\r\n });\r\n\r\n $(\"html\").on(\"click\", function(e) {\r\n\t\t //分享\r\n\t\t var sharebox = $(e.target).parents(\"#emsharewrap\");\r\n\t\t if (!sharebox.length) {\r\n\t\t $(\".sharewrap\").hide();\r\n\t\t };\r\n\t\t //二维码\r\n\t\t var qrbox = $(e.target).parents(\"#qrcode\");\r\n\t\t if (!qrbox.length) {\r\n\t\t $(\".qrimgbox\").hide();\r\n\t\t };\r\n\t\t //底部分享\r\n\t\t var wxbox = $(e.target).parents(\"#sharebottom\");\r\n\t\t if (!wxbox.length) {\r\n\t\t $(\".wxshare\").hide();\r\n\t\t };\r\n\t\t //底部关注\r\n\t\t var gzbox = $(e.target).parents(\"#guanzhu\");\r\n\t\t if (!gzbox.length) {\r\n\t\t $(\".wxgzbox\").hide();\r\n\t\t };\r\n\t\t //字体控制\r\n\t\t var gzbox = $(e.target).parents(\"#fsctrl\");\r\n\t\t if (!gzbox.length) {\r\n\t\t $(\".fsctrlbox\").hide();\r\n\t\t };\r\n\r\n\t\t //顶部微信分享二维码\r\n\t\t var topwxbox = $(e.target).parents(\"#wxqrcodebox\");\r\n\t\t if (!topwxbox.length) {\r\n\t\t $(\".wxqrcodebox\").hide();\r\n\t\t };\r\n\r\n\t\t});\r\n\r\n // 头部微信分享事件重写\r\n $(\"#shareitems > .emshare2020_icon_weixin\").unbind(\"click\");\r\n var wxqrcodeboxstr = \"

使用微信扫一扫

分享文章到您的朋友圈

\";\r\n $(\"#shareitems\").append($(wxqrcodeboxstr));\r\n setTimeout(function(){\r\n $(\"#shareitems .emshare2020_icon_weixin\").on(\"click\",function() {\r\n $(\"#shareitems\").find(\"#wxqrcodebox\").toggle();\r\n try {\r\n if($(\"#wxqrcodebox\").css(\"display\") == \"block\"){\r\n $('body').append('');\r\n }\r\n } catch (error) { }\r\n });\r\n $(\".emshare2020_icon_guba\").on(\"click\",function(){\r\n try {\r\n $('body').append('');\r\n } catch (error) { }\r\n });\r\n $(\".emshare2020_icon_weibo\").on(\"click\",function(){\r\n try {\r\n $('body').append('');\r\n } catch (error) { }\r\n });\r\n $(\".emshare2020_icon_qzone\").on(\"click\",function(){\r\n try {\r\n $('body').append('');\r\n } catch (error) { }\r\n });\r\n }, 500);\r\n\r\n if (typeof emshareFun != \"undefined\") {\r\n emshareFun.qrcode({\r\n width: 100,// 二维码宽度 可选 默认135\r\n colorDark: \"#000000\", //二维码颜色 可选 默认黑\r\n colorLight: \"#ffffff\",//背景色 可选 默认白\r\n logosrc: \"https://g1.dfcfw.com/g4/202003/20200318140436.gif\",// 二维码logo信息 可选[不建议加此参数] 默认有logo 值为\"none\"时无logo\r\n link: __WAPURL,\r\n domid: \"wapqrcode5\"\r\n });\r\n }\r\n\r\n // 底部微信分享事件重写\r\n $(\"#sharebottom .emshare2020_icon_weixin\").unbind(\"click\");\r\n $(\"#sharebottom\").on(\"click\", \".emshare2020_icon_weixin\", function() {\r\n $(\"#sharebottom\").find(\".wxshare\").toggle();\r\n\r\n try {\r\n if($(\".wxshare\").css(\"display\") == \"block\"){\r\n $('body').append('');\r\n }\r\n } catch (error) { }\r\n\t\t});\r\n\r\n //底部微信关注\r\n $(\"#guanzhu\").on(\"click\", \".gz-wx\", function(e) {\r\n\t\t e.stopPropagation();\r\n\t\t $(\".wxgzbox\").toggle();\r\n });\r\n\r\n document.onkeydown=function(ev)\r\n {\r\n var oEvent = ev || event;\r\n\r\n if (oEvent.keyCode == 33) {//pageup\r\n if (window.scrollY - document.documentElement.clientHeight <= 0) {\r\n window.scrollTo(0, 0);\r\n } else {\r\n window.scrollTo(0, window.scrollY - document.documentElement.clientHeight + $(\".top-nav-wrap\").height() + $(\".topbox\").height() + 30);\r\n }\r\n return false;\r\n } else if (oEvent.keyCode == 34) {//pagedown\r\n window.scrollTo(0, window.scrollY + document.documentElement.clientHeight - $(\".top-nav-wrap\").height() - $(\".topbox\").height() - 30)\r\n return false;\r\n }\r\n }\r\n\r\n $(\".newstitledown\").on(\"click\", function () {//展开点击事件\r\n that.isDefaultShowTitle = \"true\";\r\n cookie.set(\"content_showtitle\", \"true\", 365, \".eastmoney.com\");\r\n that.hideDown();\r\n });\r\n\r\n $(\".newstitleup\").on(\"click\", function () {//收起点击事件\r\n that.isDefaultShowTitle = \"false\";\r\n cookie.set(\"content_showtitle\", \"false\", 365, \".eastmoney.com\");\r\n that.showDown();\r\n });\r\n\r\n },\r\n // 热搜及滚动\r\n getHotNews: function() {\r\n $.ajax({\r\n type: 'GET',\r\n url: '//searchadapter.eastmoney.com/api/PopularKey/get?token=B22D178B12A22102D9D8A0CE4D2AC824&count=20&cb=data',\r\n jsonpCallback: \"data\",\r\n dataType: \"jsonp\",\r\n success: function(res) {\r\n try {\r\n var item = \"\",\r\n\t\t\t\t\tlist = res.Data;\r\n for (var i = 0; i < list.length; i++) {\r\n item += '' + list[i].KeyPhrase + '';\r\n };\r\n $(\"#hotnews\").append($(item));\r\n\r\n hotSearchScroll.init();\r\n } catch(error) {}\r\n }\r\n });\r\n },\r\n //焦点专题滚动区\r\n initRDTJ: function() {\r\n var that = this;\r\n $.ajax({\r\n type: 'GET',\r\n url: '//list.lvb.eastmoney.com/LVB/api/Roadshow/GubaBanner?device_id=123&version=1&plat=web&product=Guba&network=wifi&ctoken=&utoken=&callback=?',\r\n //jsonpCallback: \"data\",\r\n dataType: \"jsonp\",\r\n success: function(res) {\r\n if (res.result == 1) {\r\n var _html = '';\r\n\r\n for (var i in res.data.columns) {\r\n var itemBig = res.data.columns[i];\r\n for (var j in itemBig.column_data) {\r\n var item = itemBig.column_data[j];\r\n\r\n if (item.cover != \"\" && item.name != \"\") {\r\n var _link = '';\r\n if (\"访谈\" == itemBig.column_name || \"课堂\" == itemBig.column_name || \"小视频\" == itemBig.column_name) {\r\n _link = 'https://roadshow.eastmoney.com/zw/' + item.cfh_art_code;\r\n } else {\r\n _link = 'https://roadshow.eastmoney.com/luyan/' + item.id;\r\n }\r\n _html += '
  • ';\r\n _html += ' ';\r\n\r\n var _coverLink = item.cover.replace(\"http://\", \"https://\");\r\n var _coverTag = document.createElement('a');\r\n _coverTag.href = _coverLink;\r\n if (_coverTag.hostname == \"emav-cos.lvb.eastmoney.com\" || _coverTag.hostname == \"emav-1252033264.cos.ap-chongqing.myqcloud.com\" || _coverTag.hostname == \"emav-1252033264.cos.accelerate.myqcloud.com\") {\r\n if (_coverTag.search.indexOf(\"?\") < 0) {//没有\"?\"加参数\"?imageMogr2/thumbnail/400x\"\r\n _coverLink = _coverLink + \"?imageMogr2/thumbnail/400x\";\r\n }\r\n }\r\n\r\n _html += ' \"\"';\r\n _html += '
    ';\r\n _html += '
    ';\r\n _html += ' ' + item.name + '';\r\n _html += '
  • ';\r\n }\r\n }\r\n }\r\n $(\"#scrollvides ul\").html(_html);\r\n\r\n $(\".pic_swiper\").slide({\r\n titCell: \".hd ul\",\r\n mainCell: \".bd ul\",\r\n effect: \"leftLoop\",\r\n autoPlay: true,\r\n autoPage: true\r\n });\r\n }\r\n }\r\n });\r\n\r\n },\r\n showDown: function () {\r\n $(\"#topboxbak\").hide();\r\n $(\".topbox\").removeClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").show();\r\n },\r\n hideDown: function () {\r\n $(\"#topboxbak\").show();\r\n $(\".topbox\").addClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").hide();\r\n },\r\n isDefaultShowTitle: cookie.get('content_showtitle') || \"true\",\r\n // 固顶:\r\n gudingFun: function () {\r\n var that = this;\r\n var sm = $(\"#topbox\");\r\n var _gboffsettop = $(\"#gubaComment\").offset().top;\r\n var _offtop = sm.offset().top;\r\n var _h = sm.height();\r\n function checkFixTitle() {\r\n that.isDefaultShowTitle = cookie.get('content_showtitle') || \"true\";\r\n if (document.documentElement.clientHeight >= 400) {\r\n var scrolltop = $(document).scrollTop();\r\n if (scrolltop > _offtop) {\r\n if (that.isDefaultShowTitle == \"true\") {\r\n $(\"#topboxbak\").css({\r\n \"height\": _h\r\n });\r\n that.hideDown();\r\n\r\n if (scrolltop <= _offtop + _h) {\r\n $(\".newstitleup\").hide();\r\n } else {\r\n $(\".newstitleup\").show();\r\n }\r\n } else {\r\n if (scrolltop <= _offtop + _h) {\r\n $(\".newstitledown\").hide();\r\n } else {\r\n that.showDown();\r\n }\r\n }\r\n } else {\r\n $(\"#topboxbak\").hide();\r\n $(\".topbox\").removeClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").hide();\r\n }\r\n } else {\r\n $(\"#topboxbak\").hide();\r\n $(\".topbox\").removeClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").hide();\r\n }\r\n }\r\n \r\n //$(window).scroll(checkFixTitle);\r\n //$(window).resize(checkFixTitle);\r\n },\r\n //评论区域\r\n initPinLun: function () {\r\n try {\r\n if (_ISComment) {\r\n if (_CMSHJ == \"test\") {\r\n window.editorAndList({\r\n se: '#gubaComment', id: _NewsId, type: 1, 'topNavH': 30,\r\n //uploadUrl: \"/a/upload_callback/upload_callback\",\r\n env: 'test'\r\n });\r\n } else {\r\n window.editorAndList({\r\n se: '#gubaComment', id: _NewsId, type: 1, 'topNavH': 30\r\n //, uploadUrl: \"/a/upload_callback/upload_callback\"\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n\r\n }\r\n }\r\n}\r\n\r\n$(function () {\r\n\r\n try {\r\n //var __KHWZ = \"主力资金加仓名单实时更新,APP内免费看>>\"; //主动插入的开户文字\r\n //var __KHLJ = '

      ' + __KHWZ + '

    ';\r\n if ($(\"#ContentBody\").html().indexOf(__KHWZ) < 0) { //不包含 __KHWZ\r\n var _HQLength = $(\"#ContentBody .EmImageRemark\").length;\r\n if (_HQLength > 0) { //如果有行情图\r\n try {\r\n $(\"#ContentBody .EmImageRemark\").eq(_HQLength - 1).parent('p').after(__KHLJ); //有点绕,需求就是这样,【在最后一张行情图的父级p标签同级的后面加入次推广】\r\n } catch(e) {}\r\n } else if ($(\"#ContentBody .b-review\").length > 0) { //没有行情图,但是有摘要\r\n $(\"#ContentBody .b-review\").after(__KHLJ); //插在此元素之后(同级)\r\n } else if ($(\"#ContentBody .yuanbiaoti\").length > 0) { //没有行情图,没有有摘要,但是有原标题\r\n $(\"#ContentBody .yuanbiaoti\").after(__KHLJ); //插在此元素之后(同级)\r\n } else { //没有行情图,没有摘要,插在文章最前面\r\n $(\"#ContentBody\").prepend(__KHLJ); //内部最前面加入此元素\r\n }\r\n\r\n if ($.trim($(\"#ContentBody\").text()).length > 1000) { //大于1000字,才显示下面的文字链\r\n if ($(\"#ContentBody p.em_media\").length > 0) { //底部有文章来源\r\n $(\"#ContentBody p.em_media\").before(__KHLJ); //插在此元素之前(同级)\r\n } else if ($(\"#ContentBody p.res-edit\").length > 0) { //有责任编辑\r\n $(\"#ContentBody p.res-edit\").before(__KHLJ); //插在此元素之前(同级)\r\n } else { //没有底部来源,也没有责任编辑\r\n $(\"#ContentBody\").append(__KHLJ); //内部末尾加入此元素\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n \r\n }\r\n\r\n try {\r\n $(\".jubao\").attr(\"href\", $(\".jubao\").attr(\"href\") + \"&newsurl=\" + encodeURIComponent(window.location.href));\r\n\r\n //资讯正文支持点击查看原图\r\n $(\"#ContentBody img\").wrap(function() {\r\n if (this.hasAttribute(\"orginial_src\")) {\r\n return '';\r\n }\r\n return '';\r\n });\r\n\r\n //正文页增加机会文章模块功能\r\n var _op_ids = [];\r\n $(\"#ContentBody .em_op_news\").each(function() {\r\n var _this = $(this);\r\n var _op_id = _this.attr(\"op_id\");\r\n _op_ids.push(_op_id);\r\n _this.addClass(\"em_op_news\" + _op_id);\r\n });\r\n\r\n function _initOPHTML(json) {\r\n var _opHTML = '';\r\n if (json.links.length > 0) {\r\n _opHTML += '
    ';\r\n _opHTML += '
    ' + json.title + '
    ';\r\n _opHTML += '';\r\n _opHTML += '
    ';\r\n return _opHTML;\r\n }\r\n return _opHTML;\r\n }\r\n if (_op_ids.length > 0) {\r\n $.ajax({\r\n //url: \"//newsinfo.test.emapd.com/\r\n url: \"//newsinfo.eastmoney.com/kuaixun/v2/api/content/op_modules?op_ids=\" + _op_ids.toString() + \"&callback=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function(json) {\r\n for (var i = 0; i < json.Result.length; i++) {\r\n var _op_id = json.Result[i].op_id;\r\n var _this = $(\"#ContentBody .em_op_news\" + _op_id);\r\n var _opHTML = _initOPHTML(json.Result[i]);\r\n if (_opHTML.length > 0) {\r\n _this.html(_opHTML);\r\n _this.show();\r\n }\r\n }\r\n }\r\n })\r\n }\r\n } catch (error) {\r\n \r\n }\r\n\r\n zxzwObj.init();\r\n});\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nvar videoid = \"\";\r\nvar apparr = new Array();\r\nvar _uid = getuid(\"uidal\");\r\nfunction getuid(t) { var e = document.cookie.match(new RegExp(\"(^| )\" + t + \"=([^;]*)(;|$)\")); return null != e ? decodeURIComponent(e[2]) : null }\r\nif (_uid && _uid.length >= 16) {\r\n _uid = _uid.substring(0, 16);\r\n} else {\r\n _uid = \"\";\r\n}\r\n\r\nfunction initVideo(_videoId, _videoWidth, _videoHeight, _videoType, _videoValue, _videoIsPoster, _videoPoster) {\r\n var videoitem = emav(_videoId, {\r\n width: _videoWidth,//播放器区域宽度,单位像素,按需设置,可通过 CSS 控制播放器尺寸。\r\n height: _videoHeight,//播放器区域高度,单位像素,按需设置,可通过 CSS 控制播放器尺寸。\r\n controls: true,//是否显示播放器的控制栏,默认true\r\n poster: _videoPoster,//设置封面图片完整地址\r\n posterImage: _videoIsPoster,//是否显示封面\r\n autoplay: false,//是否自动播放,默认false\r\n loop: false,//是否循环播放,默认false\r\n muted: false,//是否静音播放,默认false\r\n preload: \"auto\",//是否需要预加载,有 3 个属性\"auto\",\"meta\",\"none\" ,移动端由于系统限制,设置 auto 无效。默认auto\r\n controlBar: {//设置控制栏属性的参数组合\r\n children: [\r\n \"playToggle\",\r\n \"volumePanel\"\r\n ],\r\n playToggle: true,//是否显示播放、暂停切换按钮\r\n volumePanel: true,//是否显示音量控制\r\n\r\n remainingTimeDisplay: false,//是否显示视频剩余时间\r\n currentTimeDisplay: true,//是否显示视频当前时间\r\n timeDivider: true,//是否显示时间分割符(/)\r\n durationDisplay: true,//是否显示视频时长\r\n\r\n progressControl: true,//是否显示播放进度条\r\n playbackRateMenuButton: true,\r\n fullscreenToggle: true//是否显示全屏按钮\r\n },\r\n showContextMenu: false,//是否显示右键菜单,默认false\r\n showBigPlayButtonOnPaused: true,//暂停时是否显示播放按钮,默认false\r\n bigPlayButton: true,//是否显示居中的播放按钮\r\n statistic: {\r\n activeTime: true,\r\n bd: {\r\n extinfo: {\r\n \"UID\": _uid,\r\n \"bu\": 2,//部门\r\n \"plat\": 3,//平台:WEB 3 wap 4\r\n \"biz\": \"news\"//业务线名称\r\n }\r\n }\r\n }\r\n //,env: \"test\"\r\n });\r\n videoitem.id__ = _videoId;\r\n\r\n switch (_videoType) {\r\n case \"2\": videoitem.src(\"#\" + _videoValue); break;//直播\r\n default: videoitem.src(_videoValue); break;//录播或其他视频\r\n }\r\n\r\n videoitem.on('play', function (event) {\r\n videoid = videoitem.id__;\r\n jQuery.each(apparr, function (i, v) {\r\n if (v.id__ != videoitem.id__) {\r\n v.pause();\r\n }\r\n });\r\n jQuery(\".emav\").css({ \"position\": \"\", \"right\": 0, \"bottom\": 0, \"width\": \"\", \"height\": \"\", \"z-index\": 20001 });\r\n VideoSmall();\r\n });\r\n\r\n //videoitem.on('pause', function (event) {\r\n // videoid = \"\";\r\n //});\r\n\r\n apparr.push(videoitem);\r\n}\r\n\r\nfunction AddClose(_id) {\r\n RemoveClose(_id);\r\n jQuery(\"#\" + _id).append('');\r\n}\r\nfunction RemoveClose(_id) {\r\n jQuery(\".closevideo\" + _id).remove();\r\n}\r\n\r\njQuery(\"#ContentBody\").on(\"click\", \".closevideo\", function () {\r\n var _this = jQuery(this);\r\n var _dataid = _this.data(\"id\");\r\n jQuery(\"#\" + _dataid).css({ \"position\": \"\", \"right\": 0, \"bottom\": 0, \"width\": \"\", \"height\": \"\", \"z-index\": 20001 });\r\n jQuery(\"#\" + _dataid + \" .emav-fullscreen-control\").css({ \"display\": \"inline-block\" });//关闭,切换到大窗口放出来全屏\r\n RemoveClose(_dataid);\r\n\r\n jQuery.each(apparr, function (i, v) {\r\n if (v.id__ == _dataid) {\r\n videoid = \"\";\r\n v.pause();\r\n }\r\n });\r\n});\r\n\r\nfunction VideoSmall() {\r\n if (navigator.appName == \"Microsoft Internet Explorer\" && parseInt(navigator.appVersion.split(\";\")[1].replace(/[ ]/g, \"\").replace(\"MSIE\", \"\")) <= 9) {\r\n //小于等于IE9,不显示右下角画中画\r\n } else {\r\n var _scrolltop = jQuery(window).scrollTop();\r\n var _winHeight = document.documentElement.clientHeight || document.body.clientHeight;;\r\n jQuery(\".middlevideobg\").each(function () {\r\n var _this = jQuery(this);\r\n var _dataid = _this.data(\"id\");\r\n if (videoid == _dataid) {\r\n if (_scrolltop > _this.offset().top + _this.height() || _scrolltop + _winHeight < _this.offset().top) {\r\n jQuery(\"#\" + _dataid).css({ \"position\": \"fixed\", \"right\": 0, \"bottom\": 0, \"width\": \"300px\", \"height\": \"170px\", \"z-index\": 20001 });//小窗口\r\n jQuery(\"#\" + _dataid + \" .emav-fullscreen-control\").css({ \"display\": \"none\" });\r\n AddClose(_dataid);\r\n } else {\r\n jQuery(\"#\" + _dataid).css({ \"position\": \"\", \"right\": 0, \"bottom\": 0, \"width\": \"\", \"height\": \"\", \"z-index\": 20001 });//大窗口\r\n jQuery(\"#\" + _dataid + \" .emav-fullscreen-control\").css({ \"display\": \"inline-block\" });//大窗口放出来全屏\r\n RemoveClose(_dataid);\r\n }\r\n } else {\r\n RemoveClose(_dataid);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction initLangKeVideo() {\r\n jQuery(\".em_lk_video\").each(function (_index) {\r\n var _old = jQuery(this);\r\n var lk_des = _old.attr('lk_des');\r\n if (typeof lk_des !== typeof undefined && lk_des !== false && lk_des != \"\") {\r\n lk_des = unescape(lk_des);\r\n jQuery(this).after('

    ' + lk_des + '

    ');\r\n }\r\n jQuery(this).replaceWith('
    ');\r\n });\r\n\r\n jQuery(\".middlevideobg\").each(function () {\r\n var _this = jQuery(this);\r\n var _dataid = _this.data(\"id\");\r\n var _datavalue = _this.data(\"value\");\r\n if (typeof _datavalue !== typeof undefined && _datavalue !== false && _datavalue != \"\") {\r\n var _datavideoitem = _datavalue.split('#');\r\n if (_datavideoitem.length == 2) {\r\n initVideo(_dataid, 670, 425, _datavideoitem[0], _datavideoitem[1], false, \"\");\r\n } else {\r\n initVideo(_dataid, 670, 425, 99, _datavideoitem[0], false, \"\");\r\n }\r\n }\r\n });\r\n}\r\ninitLangKeVideo();\r\njQuery(window).scroll(function () {\r\n VideoSmall();\r\n});\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZTAzYzU2NDllYWFhZmNlOTFlZjI/NDhhMioiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9tZDUvaW5kZXguanM/ZDMzNyIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL3BkdGlwcy9pbmRleC5qcz9mODhkIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvdm90ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9qcy9uZXdzLmpzIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvbGFuZ2tlL25ld3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQSwyQ0FBMkMsY0FBYzs7UUFFekQ7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7UUFFQTtRQUNBOzs7Ozs7OztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNDQUFzQztBQUN0RCxpQkFBaUI7QUFDakIsZ0JBQWdCLHlDQUF5Qzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixrQ0FBa0MsMkNBQTJDO0FBQzdFLGtDQUFrQywyQ0FBMkM7QUFDN0Usa0NBQWtDLDJDQUEyQzs7QUFFN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RSxpQkFBaUI7QUFDakIsMEVBQTBFLGVBQWU7QUFDekYsaUJBQWlCO0FBQ2pCLDBFQUEwRSxlQUFlO0FBQ3pGLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsZ0ZBQWdGLHVEQUF1RDtBQUN2SSw4RUFBOEUsMERBQTBEO0FBQ3hJLDhFQUE4RSw0REFBNEQ7QUFDMUk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9GQUFvRjtBQUNwRixrREFBa0Qsb0JBQW9CLEVBQUU7QUFDeEUsMEVBQTBFO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlEQUFpRDtBQUNqRCxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EseUJBQXlCLGtDQUFrQztBQUMzRDtBQUNBLHlCQUF5Qjs7QUFFekI7O0FBRUEsNERBQTREO0FBQzVEO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLEtBQUs7QUFDMUIsNERBQTREO0FBQzVEO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQSx5QkFBeUIsS0FBSztBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEO0FBQzlEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGtFQUFrRSx3QkFBd0I7QUFDMUYsK0RBQStELHdDQUF3QztBQUN2Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLCtDQUErQyx3Q0FBd0M7QUFDdkY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQSxtRUFBbUU7QUFDbkUsb0VBQW9FLHdCQUF3QjtBQUM1RixnRUFBZ0Usd0NBQXdDO0FBQ3hHOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLGFBQWE7O0FBRWI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0REFBNEQ7QUFDNUQsMERBQTBEOztBQUUxRDs7QUFFQSw2Q0FBNkM7O0FBRTdDLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLHFCQUFxQjs7QUFFckIsd0RBQXdEO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3RkFBd0Y7QUFDeEY7QUFDQSxxQ0FBcUM7O0FBRXJDLHVGQUF1RjtBQUN2RjtBQUNBOztBQUVBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDs7QUFFQTs7QUFFQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekIscUJBQXFCOztBQUVyQjtBQUNBLGFBQWE7O0FBRWI7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHFCQUFxQixFQUFFO0FBQ3ZCO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsMkVBQTJFO0FBQzNFLDBDQUEwQztBQUMxQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQSxnQkFBZ0IsZ0JBQWdCO0FBQ2hDLGFBQWE7QUFDYjtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFLGlCQUFpQixnQkFBZ0I7QUFDakMsYUFBYTtBQUNiO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEUsaUJBQWlCLGdCQUFnQjtBQUNqQyxhQUFhO0FBQ2I7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRSxpQkFBaUIsZ0JBQWdCO0FBQ2pDLGFBQWE7QUFDYixTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlDQUFpQztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxpQkFBaUI7QUFDcEQsMklBQTJJO0FBQzNJO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLFNBQVM7O0FBRVQsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdEQUFnRCxJQUFJLEVBQUU7QUFDdEQ7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxpR0FBaUc7QUFDakcsaUJBQWlCO0FBQ2pCLGFBQWEsbURBQW1EO0FBQ2hFLDBEQUEwRDtBQUMxRCxhQUFhLHFEQUFxRDtBQUNsRSw0REFBNEQ7QUFDNUQsYUFBYSxPQUFPO0FBQ3BCLGtEQUFrRDtBQUNsRDs7QUFFQSxpRUFBaUU7QUFDakUsOERBQThEO0FBQzlELGdFQUFnRTtBQUNoRSxpQkFBaUIsb0RBQW9EO0FBQ3JFLGdFQUFnRTtBQUNoRSxpQkFBaUIsT0FBTztBQUN4QixxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1QkFBdUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBLG1DQUFtQyx3QkFBd0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBLENBQUMsRTs7Ozs7OztBQzdvREQ7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDhEQUE4RCxLQUFLLE9BQU87QUFDOUY7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxtREFBbUQsT0FBTztBQUMxRCw0Q0FBNEMsT0FBTztBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNkJBQTZCLHVGQUF1RjtBQUNwSDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbURBQW1ELDBHQUEwRyxZQUFZLFVBQVUsWUFBWSxhQUFhLGNBQWMsZ0JBQWdCLFlBQVksNkRBQTZEO0FBQ25UO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1RkFBdUY7QUFDdEgsNkRBQTZELDRCQUE0QixFQUFFO0FBQzNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQzs7QUFFRDtBQUNBLG9HQUFvRztBQUNwRztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxzR0FBc0csRUFBRTtBQUN2Siw2RUFBNkUsb0JBQW9CO0FBQ2pHO0FBQ0EsaUJBQWlCO0FBQ2pCLCtDQUErQyx1RkFBdUYsRUFBRTtBQUN4SSw2RUFBNkUsNEJBQTRCLEVBQUU7QUFDM0c7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGdCQUFnQixZQUFZLG1CQUFtQixXQUFXO0FBQ3ZIO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFIiwiZmlsZSI6Im5ld3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDIyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBlMDNjNTY0OWVhYWFmY2U5MWVmMiIsIi8qXHJcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcclxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cclxuICogVmVyc2lvbiAyLjEgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDAyLlxyXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XHJcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxyXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIENvbmZpZ3VyYWJsZSB2YXJpYWJsZXMuIFlvdSBtYXkgbmVlZCB0byB0d2VhayB0aGVzZSB0byBiZSBjb21wYXRpYmxlIHdpdGhcclxuICogdGhlIHNlcnZlci1zaWRlLCBidXQgdGhlIGRlZmF1bHRzIHdvcmsgaW4gbW9zdCBjYXNlcy5cclxuICovXHJcbnZhciBoZXhjYXNlID0gMDsgIC8qIGhleCBvdXRwdXQgZm9ybWF0LiAwIC0gbG93ZXJjYXNlOyAxIC0gdXBwZXJjYXNlICAgICAgICAqL1xyXG52YXIgYjY0cGFkICA9IFwiXCI7IC8qIGJhc2UtNjQgcGFkIGNoYXJhY3Rlci4gXCI9XCIgZm9yIHN0cmljdCBSRkMgY29tcGxpYW5jZSAgICovXHJcbnZhciBjaHJzeiAgID0gODsgIC8qIGJpdHMgcGVyIGlucHV0IGNoYXJhY3Rlci4gOCAtIEFTQ0lJOyAxNiAtIFVuaWNvZGUgICAgICAqL1xyXG5cclxuLypcclxuICogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgeW91J2xsIHVzdWFsbHkgd2FudCB0byBjYWxsXHJcbiAqIFRoZXkgdGFrZSBzdHJpbmcgYXJndW1lbnRzIGFuZCByZXR1cm4gZWl0aGVyIGhleCBvciBiYXNlLTY0IGVuY29kZWQgc3RyaW5nc1xyXG4gKi9cclxuZnVuY3Rpb24gaGV4X21kNShzKXsgcmV0dXJuIGJpbmwyaGV4KGNvcmVfbWQ1KHN0cjJiaW5sKHMpLCBzLmxlbmd0aCAqIGNocnN6KSk7fVxyXG5mdW5jdGlvbiBiNjRfbWQ1KHMpeyByZXR1cm4gYmlubDJiNjQoY29yZV9tZDUoc3RyMmJpbmwocyksIHMubGVuZ3RoICogY2hyc3opKTt9XHJcbmZ1bmN0aW9uIHN0cl9tZDUocyl7IHJldHVybiBiaW5sMnN0cihjb3JlX21kNShzdHIyYmlubChzKSwgcy5sZW5ndGggKiBjaHJzeikpO31cclxuZnVuY3Rpb24gaGV4X2htYWNfbWQ1KGtleSwgZGF0YSkgeyByZXR1cm4gYmlubDJoZXgoY29yZV9obWFjX21kNShrZXksIGRhdGEpKTsgfVxyXG5mdW5jdGlvbiBiNjRfaG1hY19tZDUoa2V5LCBkYXRhKSB7IHJldHVybiBiaW5sMmI2NChjb3JlX2htYWNfbWQ1KGtleSwgZGF0YSkpOyB9XHJcbmZ1bmN0aW9uIHN0cl9obWFjX21kNShrZXksIGRhdGEpIHsgcmV0dXJuIGJpbmwyc3RyKGNvcmVfaG1hY19tZDUoa2V5LCBkYXRhKSk7IH1cclxuXHJcbi8qXHJcbiAqIFBlcmZvcm0gYSBzaW1wbGUgc2VsZi10ZXN0IHRvIHNlZSBpZiB0aGUgVk0gaXMgd29ya2luZ1xyXG4gKi9cclxuZnVuY3Rpb24gbWQ1X3ZtX3Rlc3QoKVxyXG57XHJcbiAgcmV0dXJuIGhleF9tZDUoXCJhYmNcIikgPT0gXCI5MDAxNTA5ODNjZDI0ZmIwZDY5NjNmN2QyOGUxN2Y3MlwiO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3JlX21kNSh4LCBsZW4pXHJcbntcclxuICAvKiBhcHBlbmQgcGFkZGluZyAqL1xyXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgKChsZW4pICUgMzIpO1xyXG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcclxuXHJcbiAgdmFyIGEgPSAgMTczMjU4NDE5MztcclxuICB2YXIgYiA9IC0yNzE3MzM4Nzk7XHJcbiAgdmFyIGMgPSAtMTczMjU4NDE5NDtcclxuICB2YXIgZCA9ICAyNzE3MzM4Nzg7XHJcblxyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNilcclxuICB7XHJcbiAgICB2YXIgb2xkYSA9IGE7XHJcbiAgICB2YXIgb2xkYiA9IGI7XHJcbiAgICB2YXIgb2xkYyA9IGM7XHJcbiAgICB2YXIgb2xkZCA9IGQ7XHJcblxyXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDBdLCA3ICwgLTY4MDg3NjkzNik7XHJcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcclxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xyXG4gICAgYiA9IG1kNV9mZihiLCBjLCBkLCBhLCB4W2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xyXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDRdLCA3ICwgLTE3NjQxODg5Nyk7XHJcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XHJcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XHJcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsgN10sIDIyLCAtNDU3MDU5ODMpO1xyXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDhdLCA3ICwgIDE3NzAwMzU0MTYpO1xyXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xyXG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krMTBdLCAxNywgLTQyMDYzKTtcclxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcclxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpKzEyXSwgNyAsICAxODA0NjAzNjgyKTtcclxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XHJcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XHJcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XHJcblxyXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krIDFdLCA1ICwgLTE2NTc5NjUxMCk7XHJcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsgNl0sIDkgLCAtMTA2OTUwMTYzMik7XHJcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcclxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKyAwXSwgMjAsIC0zNzM4OTczMDIpO1xyXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krIDVdLCA1ICwgLTcwMTU1ODY5MSk7XHJcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsxMF0sIDkgLCAgMzgwMTYwODMpO1xyXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XHJcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcclxuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyA5XSwgNSAsICA1Njg0NDY0MzgpO1xyXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2krMTRdLCA5ICwgLTEwMTk4MDM2OTApO1xyXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XHJcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XHJcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSsxM10sIDUgLCAtMTQ0NDY4MTQ2Nyk7XHJcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsgMl0sIDkgLCAtNTE0MDM3ODQpO1xyXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xyXG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2krMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xyXG5cclxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA1XSwgNCAsIC0zNzg1NTgpO1xyXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xyXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2krMTFdLCAxNiwgIDE4MzkwMzA1NjIpO1xyXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTRdLCAyMywgLTM1MzA5NTU2KTtcclxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyAxXSwgNCAsIC0xNTMwOTkyMDYwKTtcclxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKyA0XSwgMTEsICAxMjcyODkzMzUzKTtcclxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xyXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xyXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2krMTNdLCA0ICwgIDY4MTI3OTE3NCk7XHJcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSsgMF0sIDExLCAtMzU4NTM3MjIyKTtcclxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xyXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krIDZdLCAyMywgIDc2MDI5MTg5KTtcclxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA5XSwgNCAsIC02NDAzNjQ0ODcpO1xyXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krMTJdLCAxMSwgLTQyMTgxNTgzNSk7XHJcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSsxNV0sIDE2LCAgNTMwNzQyNTIwKTtcclxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xyXG5cclxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyAwXSwgNiAsIC0xOTg2MzA4NDQpO1xyXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xyXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xyXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcclxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKzEyXSwgNiAsICAxNzAwNDg1NTcxKTtcclxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcclxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcclxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcclxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyA4XSwgNiAsICAxODczMzEzMzU5KTtcclxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XHJcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XHJcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XHJcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSsgNF0sIDYgLCAtMTQ1NTIzMDcwKTtcclxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcclxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xyXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XHJcblxyXG4gICAgYSA9IHNhZmVfYWRkKGEsIG9sZGEpO1xyXG4gICAgYiA9IHNhZmVfYWRkKGIsIG9sZGIpO1xyXG4gICAgYyA9IHNhZmVfYWRkKGMsIG9sZGMpO1xyXG4gICAgZCA9IHNhZmVfYWRkKGQsIG9sZGQpO1xyXG4gIH1cclxuICByZXR1cm4gQXJyYXkoYSwgYiwgYywgZCk7XHJcblxyXG59XHJcblxyXG4vKlxyXG4gKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gbWQ1X2NtbihxLCBhLCBiLCB4LCBzLCB0KVxyXG57XHJcbiAgcmV0dXJuIHNhZmVfYWRkKGJpdF9yb2woc2FmZV9hZGQoc2FmZV9hZGQoYSwgcSksIHNhZmVfYWRkKHgsIHQpKSwgcyksYik7XHJcbn1cclxuZnVuY3Rpb24gbWQ1X2ZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpXHJcbntcclxuICByZXR1cm4gbWQ1X2NtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XHJcbn1cclxuZnVuY3Rpb24gbWQ1X2dnKGEsIGIsIGMsIGQsIHgsIHMsIHQpXHJcbntcclxuICByZXR1cm4gbWQ1X2NtbigoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XHJcbn1cclxuZnVuY3Rpb24gbWQ1X2hoKGEsIGIsIGMsIGQsIHgsIHMsIHQpXHJcbntcclxuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xyXG59XHJcbmZ1bmN0aW9uIG1kNV9paShhLCBiLCBjLCBkLCB4LCBzLCB0KVxyXG57XHJcbiAgcmV0dXJuIG1kNV9jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDYWxjdWxhdGUgdGhlIEhNQUMtTUQ1LCBvZiBhIGtleSBhbmQgc29tZSBkYXRhXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3JlX2htYWNfbWQ1KGtleSwgZGF0YSlcclxue1xyXG4gIHZhciBia2V5ID0gc3RyMmJpbmwoa2V5KTtcclxuICBpZihia2V5Lmxlbmd0aCA+IDE2KSBia2V5ID0gY29yZV9tZDUoYmtleSwga2V5Lmxlbmd0aCAqIGNocnN6KTtcclxuXHJcbiAgdmFyIGlwYWQgPSBBcnJheSgxNiksIG9wYWQgPSBBcnJheSgxNik7XHJcbiAgZm9yKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXHJcbiAge1xyXG4gICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2O1xyXG4gICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVDNUM1QzVDO1xyXG4gIH1cclxuXHJcbiAgdmFyIGhhc2ggPSBjb3JlX21kNShpcGFkLmNvbmNhdChzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogY2hyc3opO1xyXG4gIHJldHVybiBjb3JlX21kNShvcGFkLmNvbmNhdChoYXNoKSwgNTEyICsgMTI4KTtcclxufVxyXG5cclxuLypcclxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxyXG4gKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gc2FmZV9hZGQoeCwgeSlcclxue1xyXG4gIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRik7XHJcbiAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xyXG4gIHJldHVybiAobXN3IDw8IDE2KSB8IChsc3cgJiAweEZGRkYpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXHJcbiAqL1xyXG5mdW5jdGlvbiBiaXRfcm9sKG51bSwgY250KVxyXG57XHJcbiAgcmV0dXJuIChudW0gPDwgY250KSB8IChudW0gPj4+ICgzMiAtIGNudCkpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcclxuICogSWYgY2hyc3ogaXMgQVNDSUksIGNoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cjJiaW5sKHN0cilcclxue1xyXG4gIHZhciBiaW4gPSBBcnJheSgpO1xyXG4gIHZhciBtYXNrID0gKDEgPDwgY2hyc3opIC0gMTtcclxuICBmb3IodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aCAqIGNocnN6OyBpICs9IGNocnN6KVxyXG4gICAgYmluW2k+PjVdIHw9IChzdHIuY2hhckNvZGVBdChpIC8gY2hyc3opICYgbWFzaykgPDwgKGklMzIpO1xyXG4gIHJldHVybiBiaW47XHJcbn1cclxuXHJcbi8qXHJcbiAqIENvbnZlcnQgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcyB0byBhIHN0cmluZ1xyXG4gKi9cclxuZnVuY3Rpb24gYmlubDJzdHIoYmluKVxyXG57XHJcbiAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgdmFyIG1hc2sgPSAoMSA8PCBjaHJzeikgLSAxO1xyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoICogMzI7IGkgKz0gY2hyc3opXHJcbiAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYmluW2k+PjVdID4+PiAoaSAlIDMyKSkgJiBtYXNrKTtcclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBoZXggc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gYmlubDJoZXgoYmluYXJyYXkpXHJcbntcclxuICB2YXIgaGV4X3RhYiA9IGhleGNhc2UgPyBcIjAxMjM0NTY3ODlBQkNERUZcIiA6IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xyXG4gIHZhciBzdHIgPSBcIlwiO1xyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiaW5hcnJheS5sZW5ndGggKiA0OyBpKyspXHJcbiAge1xyXG4gICAgc3RyICs9IGhleF90YWIuY2hhckF0KChiaW5hcnJheVtpPj4yXSA+PiAoKGklNCkqOCs0KSkgJiAweEYpICtcclxuICAgICAgICAgICBoZXhfdGFiLmNoYXJBdCgoYmluYXJyYXlbaT4+Ml0gPj4gKChpJTQpKjggICkpICYgMHhGKTtcclxuICB9XHJcbiAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuLypcclxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGEgYmFzZS02NCBzdHJpbmdcclxuICovXHJcbmZ1bmN0aW9uIGJpbmwyYjY0KGJpbmFycmF5KVxyXG57XHJcbiAgdmFyIHRhYiA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO1xyXG4gIHZhciBzdHIgPSBcIlwiO1xyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiaW5hcnJheS5sZW5ndGggKiA0OyBpICs9IDMpXHJcbiAge1xyXG4gICAgdmFyIHRyaXBsZXQgPSAoKChiaW5hcnJheVtpICAgPj4gMl0gPj4gOCAqICggaSAgICU0KSkgJiAweEZGKSA8PCAxNilcclxuICAgICAgICAgICAgICAgIHwgKCgoYmluYXJyYXlbaSsxID4+IDJdID4+IDggKiAoKGkrMSklNCkpICYgMHhGRikgPDwgOCApXHJcbiAgICAgICAgICAgICAgICB8ICAoKGJpbmFycmF5W2krMiA+PiAyXSA+PiA4ICogKChpKzIpJTQpKSAmIDB4RkYpO1xyXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IDQ7IGorKylcclxuICAgIHtcclxuICAgICAgaWYoaSAqIDggKyBqICogNiA+IGJpbmFycmF5Lmxlbmd0aCAqIDMyKSBzdHIgKz0gYjY0cGFkO1xyXG4gICAgICBlbHNlIHN0ciArPSB0YWIuY2hhckF0KCh0cmlwbGV0ID4+IDYqKDMtaikpICYgMHgzRik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaGV4X21kNVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvbW9kdWxlcy9tZDUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAxIDIgMyIsIiFmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG8pe2lmKG5bb10pcmV0dXJuIG5bb10uZXhwb3J0czt2YXIgaT1uW29dPXtpOm8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtvXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxlKSxpLmw9ITAsaS5leHBvcnRzfXZhciBuPXt9O2UubT10LGUuYz1uLGUuaT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZS5kPWZ1bmN0aW9uKHQsbixvKXtlLm8odCxuKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Om99KX0sZS5uPWZ1bmN0aW9uKHQpe3ZhciBuPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0W1wiZGVmYXVsdFwiXX06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIGUuZChuLFwiYVwiLG4pLG59LGUubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sZS5wPVwiXCIsZShlLnM9OCl9KHszOmZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49dGhpcztuLl9vcHRpb249ZS5leHRlbmQoITAse2lkOlwiYm9keVwiLHNlbGVjdElkOlwic2VsZWN0VGlwc1wiLGFsaW5lOiEwLHJhbmdlOlsxLDIwXX0sdCksbi4kY29udGFpbmVyPWUobi5fb3B0aW9uLmlkKSxuLmluaXQoKX1uLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0Lmhhc0FwcGVuZD0hMSx0LmVsZW1lbnRMb2FkKCksdC5tb3VzZXVwKCl9LG4ucHJvdG90eXBlLmVsZW1lbnRMb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LnRpcHNIdG1sPSc8ZGl2IGlkPVwiJyt0Ll9vcHRpb24uc2VsZWN0SWQrJ1wiPjxkaXYgY2xhc3M9XCJzZWFyY2hfYnRuXCI+PGltZyBzcmM9XCIvL2cxLmRmY2Z3LmNvbS9nMi8yMDE3MTEvMjAxNzExMTYxNDIyMDkucG5nXCIgYWx0PVwiXCI+PHNwYW4+5pCc57SiPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9XCJjb3B5X2J0blwiPuWkjeWItjwvZGl2PjwvZGl2PicsZShcImJvZHlcIikuYXBwZW5kKHQudGlwc0h0bWwpLHQuJGNvbnRhaW5lci5jc3MoXCJwb3NpdGlvblwiLFwicmVsYXRpdmVcIiksdC5jc3NUeHQ9XCIjc2VsZWN0VGlwc3twb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5Om5vbmU7YmFja2dyb3VuZDojZmZmO2N1cnNvcjogcG9pbnRlcjt3aWR0aDoxMTJweDtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtib3JkZXI6MXB4IHNvbGlkICNFN0VBRjE7Ym94LXNoYWRvdzoxcHggMXB4IDVweCByZ2JhKDAsMCwwLC4zKX0jc2VsZWN0VGlwcz5kaXZ7ZmxvYXQ6bGVmdDt3aWR0aDo1MCU7Zm9udC1zaXplOjEycHg7dGV4dC1hbGlnbjpjZW50ZXJ9I3NlbGVjdFRpcHMgLnNlYXJjaF9idG57YmFja2dyb3VuZC1jb2xvcjojZmY0OTAxO2NvbG9yOiNmZmZ9I3NlbGVjdFRpcHMgaW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi10b3A6LTFweH1cIix0LmxvYWRDc3ModC5jc3NUeHQpLHQuJHNlbGVjdFRpcHM9ZShcIiNcIit0Ll9vcHRpb24uc2VsZWN0SWQpLHQuJHNlYXJjaD1lKFwiLnNlYXJjaF9idG5cIix0LiRzZWxlY3RUaXBzKSx0LiRjb3B5PWUoXCIuY29weV9idG5cIix0LiRzZWxlY3RUaXBzKX0sbi5wcm90b3R5cGUubG9hZENzcz1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7ZS50eXBlPVwidGV4dC9jc3NcIjt0cnl7ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSl9Y2F0Y2gobil7ZS5zdHlsZVNoZWV0LmNzc1RleHQ9dH1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoZSl9LG4ucHJvdG90eXBlLmdldFNlbGVjdFR4dD1mdW5jdGlvbigpe3ZhciB0PVwiXCI7cmV0dXJuIHQ9ZG9jdW1lbnQuc2VsZWN0aW9uP3Q9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dDpkb2N1bWVudC5nZXRTZWxlY3Rpb24oKSxlLnRyaW0odC50b1N0cmluZygpKX0sbi5wcm90b3R5cGUubW91c2V1cD1mdW5jdGlvbigpe3ZhciB0LG4sbyxpLGM9dGhpcyxzPWMuJHNlbGVjdFRpcHMuaGVpZ2h0KCkscD1jLiRzZWxlY3RUaXBzLndpZHRoKCkscj0wO2UoXCJib2R5XCIpLmNsaWNrKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHQudGFyZ2V0KS5wYXJlbnRzKGMuX29wdGlvbi5pZCkubGVuZ3RoPDEmJlwiI1wiK3QudGFyZ2V0LmlkIT1jLl9vcHRpb24uaWQmJmMuJHNlbGVjdFRpcHMuaGlkZSgpfSwxMDApfSksYy4kY29udGFpbmVyLm1vdXNldXAoZnVuY3Rpb24obCl7Yy50eHQ9Yy5nZXRTZWxlY3RUeHQoKTtlKHdpbmRvdykuaGVpZ2h0KCk7dmFyIGQ9ZSh3aW5kb3cpLndpZHRoKCk8MWUzPzFlMzplKHdpbmRvdykud2lkdGgoKTtsPWx8fHdpbmRvdy5ldmVudCx0PXdpbmRvdy5wYWdlWU9mZnNldHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3B8fDAsbj13aW5kb3cucGFnZVhPZmZzZXR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fDAsbz1jLl9vcHRpb24uYWxpbmU/bC5jbGllbnRYK3A+ZD9lKHdpbmRvdykud2lkdGgoKS1wK246bC5jbGllbnRYK246bC5jbGllbnRYLXA8MD9sLmNsaWVudFgrbjpsLmNsaWVudFgtcCtuKzIsZShcIiNmaXhNZW51QmFyXCIpLmxlbmd0aD4wJiYocj0zMyksaT1sLmNsaWVudFktcy1yPDA/bC5jbGllbnRZK3QrMTA6bC5jbGllbnRZK3QtMzUsYy50eHQmJmMudHh0Lmxlbmd0aD49Yy5fb3B0aW9uLnJhbmdlWzBdJiZjLnR4dC5sZW5ndGg8Yy5fb3B0aW9uLnJhbmdlWzFdPyhjLiRzZWxlY3RUaXBzLmNzcyh7ZGlzcGxheTpcImJsb2NrXCIsbGVmdDpvK1wicHhcIix0b3A6aStcInB4XCJ9KSxjLiRjb3B5LmF0dHIoXCJkYXRhLWNsaXBib2FyZC10ZXh0XCIsYy50eHQpKTpjLiRzZWxlY3RUaXBzLmhpZGUoKX0pLGMuZW5lbnRzKCl9LG4ucHJvdG90eXBlLmVuZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC4kc2VsZWN0VGlwcy5vbihcImNsaWNrXCIsXCIuc2VhcmNoX2J0blwiLGZ1bmN0aW9uKCl7d2luZG93Lm9wZW4oXCJodHRwOi8vc28uZWFzdG1vbmV5LmNvbS93ZWIvcz9rZXl3b3JkPVwiK2VuY29kZVVSSUNvbXBvbmVudCh0LnR4dCkpLHQuJHNlbGVjdFRpcHMuaGlkZSgpfSksd2luZG93LkFjdGl2ZVhPYmplY3Q/dC4kc2VsZWN0VGlwcy5vbihcImNsaWNrXCIsXCIuY29weV9idG5cIixmdW5jdGlvbihlKXt3aW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwiVGV4dFwiLHQudHh0KSx0LiRzZWxlY3RUaXBzLmhpZGUoKX0pOnQubG9hZFNjcmlwdChcIi8vZW1yZXMuZGZjZncuY29tL2NvbW1vbi9qcy9jbGlwYm9hcmQubWluLmpzXCIsZnVuY3Rpb24oKXtuZXcgQ2xpcGJvYXJkKFwiLmNvcHlfYnRuXCIpLm9uKFwic3VjY2Vzc1wiLGZ1bmN0aW9uKGUpe3QuJHNlbGVjdFRpcHMuaGlkZSgpfSl9KX0sbi5wcm90b3R5cGUubG9hZFNjcmlwdD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaGFzQXBwZW5kKWUmJmUoKTtlbHNle3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJ0ZXh0L2phdmFzY3JpcHRcIiksbi5zZXRBdHRyaWJ1dGUoXCJzcmNcIix0KSxuLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIixcInV0Zi04XCIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChuKSxuLm9ubG9hZD1mdW5jdGlvbigpe2UmJmUoKX19fSx0LmV4cG9ydHM9bn0oalF1ZXJ5KX0sODpmdW5jdGlvbih0LGUsbil7dmFyIG89bigzKTt3aW5kb3cucGR0aXBzPW99fSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBkdGlwcy5qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvcGR0aXBzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMSAyIiwialF1ZXJ5KGZ1bmN0aW9uICgpIHtcclxuICAgICFmdW5jdGlvbiBFTV9Wb3RlKCQpIHtcclxuICAgICAgICAvL+agvOW8j+WMluaKleelqOaVsFxyXG4gICAgICAgIGZ1bmN0aW9uIGdzaFZvdGVOdW0obnVtYikge1xyXG4gICAgICAgICAgICBpZiAobnVtYiA8IDEwMDAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bWIgLyAxMDAwMCkudG9GaXhlZCgyKSArIFwi5LiHXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/mipXnpajmr5TkvotcclxuICAgICAgICBmdW5jdGlvbiBWb3RlWmhhbkJpKHN1bVZvdGUsIGN1clZvdGUpIHtcclxuICAgICAgICAgICAgaWYgKHN1bVZvdGUgPT0gMCB8fCBjdXJWb3RlID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGN1clZvdGUgLyBzdW1Wb3RlICogMTAwKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+WNoOavlOadoeWuveW6puiuoeeul1xyXG4gICAgICAgIGZ1bmN0aW9uIFZvdGVaaGFuQmlXaWR0aCh6aGFuQmksbWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgaWYgKHpoYW5CaSA9PSAwIHx8IG1heFdpZHRoID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh6aGFuQmkgLyAxMDAgKiBtYXhXaWR0aCkudG9GaXhlZCgyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g6I635Y+WY29va2llXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0Vm90ZUNvb2tpZShrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGNvb2tpZUFycmF5ID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IGNvb2tpZUFycmF5W2ldLnNwbGl0KFwiPVwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJbMF0ucmVwbGFjZShcIiBcIiwgXCJcIikgPT0ga2V5KVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmVzY2FwZShhcnJbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDorr7nva5jb29raWVcclxuICAgICAgICBmdW5jdGlvbiBzZXRWb3RlQ29va2llKGtleSwgdmFsdWUsIGV4cGlyZXMpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgbXMgPSBleHBpcmVzICogNjAgKiA2MCAqIDEwMDA7Ly/lj4LmlbDkvKDov5vmnaXnmoTljZXkvY3mmK/lsI/ml7ZcclxuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgbXMpO1xyXG4gICAgICAgICAgICB2YXIgc3RyID0ga2V5ICsgXCI9XCIgKyBlc2NhcGUodmFsdWUpO1xyXG4gICAgICAgICAgICBzdHIgKz0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvVVRDU3RyaW5nKCkgKyBcIjsgZG9tYWluPVwiICsgbG9jYXRpb24uaG9zdCArIFwiO1wiO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBzdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBfaXNMb2NrVm90ZSA9IFtdOy8v5oqV56Wo5oyJ6ZKu5piv5ZCm5aSE5LqO6ZSB5a6a54q25oCB77yM5pS+572u6L+e57ut54K55Ye75oqV56Wo5oyJ6ZKuXHJcbiAgICAgICAgJChcImJvZHlcIikub24oXCJjbGlja1wiLCBcIi5idG5fdm90ZVwiLCBmdW5jdGlvbiAoKSB7Ly/mipXnpajngrnlh7vkuovku7ZcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gJCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfdm90ZV9pZCA9IF90aGlzLmF0dHIoXCJ2b3RlX2lkXCIpO1xyXG4gICAgICAgICAgICB2YXIgX3ZvdGVfdGl0bGUgPSBfdGhpcy5hdHRyKFwidm90ZV90aXRsZVwiKTtcclxuICAgICAgICAgICAgaWYgKF92b3RlX2lkID09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgX2Nob29zZUlkcyA9IFwiXCI7Ly9WaV9JZOWNleS4queahOmAiemhuWlk77ybVmlfVm1fSWTkuIDpgZPpopgx5LiqaWTvvJvpgInpobnkuIDkuKppZO+8m1ZpX1ZnX0lk5LiA5Liq5oqV56Wo5LiA5LiqaWRcclxuICAgICAgICAgICAgLy9WaV9JZOWNleS4queahOmAiemhuWlk77ybVmlfVm1fSWTkuIDpgZPpopgx5LiqaWTvvJvpgInpobnkuIDkuKppZO+8m1ZpX1ZnX0lk5LiA5Liq5oqV56Wo5LiA5LiqaWRcclxuXHJcblxyXG4gICAgICAgICAgICB2YXIgX3RpbXUgPSBbXTsvL+W9k+WJjeaKleelqOaAu+eahOmimOebrlxyXG4gICAgICAgICAgICAkKCcudm90ZV8nICsgX3ZvdGVfaWQgKyBcIiAudm90ZXR5cGVfbGlcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdml2bWlkID0gJCh0aGlzKS5hdHRyKFwidml2bWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aW11LmluZGV4T2Yodml2bWlkKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGltdS5wdXNoKHZpdm1pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9jb29raWVWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICQoJy52b3RlXycgKyBfdm90ZV9pZCArICcgLnZvdGV0eXBlX3JhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoKSB7Ly/pgY3ljobmr4/kuIDkuKrlkI3lrZfkuLppbnRlcmVzdOeahOWkjemAieahhu+8jOWFtuS4remAieS4reeahOaJp+ihjOWHveaVsCAgICBcclxuICAgICAgICAgICAgICAgIHZhciBfdmlpZCA9ICQodGhpcykuYXR0cihcInZpaWRcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3Zpdm1pZCA9ICQodGhpcykuYXR0cihcInZpdm1pZFwiKTtcclxuICAgICAgICAgICAgICAgIHZhciBfdml2Z2lkID0gJCh0aGlzKS5hdHRyKFwidml2Z2lkXCIpO1xyXG4gICAgICAgICAgICAgICAgX2Nvb2tpZVZhbHVlICs9IF92aWlkICsgXCJfXCIgKyBfdml2bWlkICsgXCJfXCIgKyBfdml2Z2lkICsgXCIsXCI7XHJcbiAgICAgICAgICAgICAgICBfY2hvb3NlSWRzICs9IF92aWlkICsgXCIsXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIF94YiA9IF90aW11LmluZGV4T2YoX3Zpdm1pZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3hiID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGltdS5zcGxpY2UoX3hiLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnLnZvdGVfJyArIF92b3RlX2lkICsgJyAudm90ZXR5cGVfY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHsvL+mBjeWOhuavj+S4gOS4quWQjeWtl+S4umludGVyZXN055qE5aSN6YCJ5qGG77yM5YW25Lit6YCJ5Lit55qE5omn6KGM5Ye95pWwXHJcbiAgICAgICAgICAgICAgICB2YXIgX3ZpaWQgPSAkKHRoaXMpLmF0dHIoXCJ2aWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF92aXZtaWQgPSAkKHRoaXMpLmF0dHIoXCJ2aXZtaWRcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3ZpdmdpZCA9ICQodGhpcykuYXR0cihcInZpdmdpZFwiKTtcclxuICAgICAgICAgICAgICAgIF9jb29raWVWYWx1ZSArPSBfdmlpZCArIFwiX1wiICsgX3Zpdm1pZCArIFwiX1wiICsgX3ZpdmdpZCArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgX2Nob29zZUlkcyArPSBfdmlpZCArIFwiLFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBfeGIgPSBfdGltdS5pbmRleE9mKF92aXZtaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF94YiA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RpbXUuc3BsaWNlKF94YiwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhfY29va2llVmFsdWUpO1xyXG4gICAgICAgICAgICBfY2hvb3NlSWRzID0gX2Nob29zZUlkcy50cmltKCcsJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoX3RpbXUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoXCLmgqjov5jmnInpopjnm67msqHmnInlgZrlroxcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChfY2hvb3NlSWRzID09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwi6K+35YWI6YCJ5oup562U5qGIXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoX2lzTG9ja1ZvdGUuaW5kZXhPZihfdm90ZV9pZCkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9pc0xvY2tWb3RlLnB1c2goX3ZvdGVfaWQpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuYWRkQ2xhc3MoXCJidG5fZGlzYWJsZWRcIik7XHJcblxyXG4gICAgICAgICAgICBzZXRWb3RlQ29va2llKFwidm90ZV9cIiArIF92b3RlX2lkLCBfY29va2llVmFsdWUsIDI0KTsvL+acieaViOacnzI05bCP5pe2XHJcblxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiBcIi8vY21zZGF0YWFwaS5lYXN0bW9uZXkuY29tL2FwaS9Wb3RlL1ZvdGVPcGVyYXRlP2dyb3VwSWQ9XCIgKyBfdm90ZV9pZCArIFwiJmNob29zZUlkcz1cIiArIF9jaG9vc2VJZHMgKyBcIiZjYj0/XCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsb29rVm90ZVJlc3VsdChfdGhpcyk7Ly/ljrvmn6XnnIvmipXnpajnu5PmnpxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKFwiYm9keVwiKS5vbihcImNoYW5nZVwiLCAnLnZvdGV0eXBlX2NoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgdmFyIF92aWQgPSBfdGhpcy5hdHRyKFwiaWRcIik7XHJcbiAgICAgICAgICAgIHZhciBfdm5hbWUgPSBfdGhpcy5hdHRyKFwibmFtZVwiKTtcclxuICAgICAgICAgICAgdmFyIF9tYXhjaGVjayA9IF90aGlzLmF0dHIoXCJtYXhjaGVja1wiKTtcclxuICAgICAgICAgICAgdmFyIF9jaGVja0xlbmd0aCA9ICQoJy52b3RldHlwZV9jaGVja2JveCBpbnB1dFtuYW1lPVwiJyArIF92bmFtZSArICdcIl06Y2hlY2tlZCcpLmxlbmd0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChfY2hlY2tMZW5ndGggPiBfbWF4Y2hlY2spIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwi5pyA5aSa5Y+q6IO96YCJ5oup44CQXCIgKyBfbWF4Y2hlY2sgKyBcIuOAkeS4qumAiemhuVwiKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmF0dHIoXCJjaGVja2VkXCIsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZ1bmN0aW9uIGxvb2tWb3RlUmVzdWx0KF90aGlzKSB7Ly/mn6XnnIvmipXnpajnu5PmnpxcclxuICAgICAgICAgICAgdmFyIF92b3RlX2lkID0gX3RoaXMuYXR0cihcInZvdGVfaWRcIik7XHJcbiAgICAgICAgICAgIHZhciBfdm90ZV90aXRsZSA9IF90aGlzLmF0dHIoXCJ2b3RlX3RpdGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogXCIvL2Ntc2RhdGFhcGkuZWFzdG1vbmV5LmNvbS9hcGkvVm90ZS9HZXRWb3RlR3JvdXBCeUlkP0lkPVwiICsgX3ZvdGVfaWQgKyBcIiZjYj0/XCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdm90ZV9pdGVtID0gZ2V0Vm90ZUNvb2tpZShcInZvdGVfXCIgKyBfdm90ZV9pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucGFyZW50cygnLmVtX3ZvdGUnKS5odG1sKGluaXRSZXN1bHRIVE1MKGpzb24sIF92b3RlX3RpdGxlLCB2b3RlX2l0ZW0pKTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5wYXJlbnRzKCcuZW1fdm90ZScpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKFwiYm9keVwiKS5vbihcImNsaWNrXCIsIFwiLmJ0bl9sb29rdm90ZVwiLCBmdW5jdGlvbiAoKSB7Ly/mn6XnnIvmipXnpajnu5Pmnpzngrnlh7vkuovku7ZcclxuICAgICAgICAgICAgdmFyIF92b3RlX2lkID0gJCh0aGlzKS5hdHRyKFwidm90ZV9pZFwiKTtcclxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3QgPT0gXCJwY2FydGljbGUuZWFzdG1vbmV5LmNvbVwiKSB7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oXCJodHRwOi8vcG9sbC5lYXN0bW9uZXkuY29tL0h0bWwvUmVzdWx0XCIgKyBfdm90ZV9pZCArIFwiLmh0bWxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sb29rVm90ZVJlc3VsdCgkKHRoaXMpKTsvL+WOu+afpeeci+aKleelqOe7k+aenFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKFwiYm9keVwiKS5vbihcImNsaWNrXCIsIFwiLmJ0bl9nb3ZvdGVcIiwgZnVuY3Rpb24gKCkgey8v5Y675oqV56Wo54K55Ye75LqL5Lu2XHJcbiAgICAgICAgICAgIHZhciBfdm90ZV9pZCA9ICQodGhpcykuYXR0cihcInZvdGVfaWRcIik7XHJcbiAgICAgICAgICAgIGluaXRWb3RlKF92b3RlX2lkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBmdW5jdGlvbiBpbml0UmVzdWx0SFRNTChqc29uLCBfdm90ZV90aXRsZSwgdm90ZV9pdGVtKSB7XHJcbiAgICAgICAgICAgIHZhciBfaHRtbCA9ICcnXHJcbiAgICAgICAgICAgIF9odG1sICs9ICc8ZGl2IGNsYXNzPVwidGl0bGVcIj48aSBjbGFzcz1cImljb24gaWNvbl90aXRsZVwiPjwvaT4nICsgX3ZvdGVfdGl0bGUgKyAnPC9kaXY+JztcclxuICAgICAgICAgICAgdmFyIF9pc3ZvdGUgPSBmYWxzZTsvL+m7mOiupOacquaKlei/h+elqFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24uUmVzdWx0LlZvdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSBqc29uLlJlc3VsdC5Wb3Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGgzIGNsYXNzPVwidGl0XCI+JyArIF9pdGVtLlZtX1RpdGxlICsgJzwvaDM+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8ZGl2IGNsYXNzPVwiY29udGVudFwiPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDx1bCBjbGFzcz1cInJlc3VsdF9saXN0XCI+JztcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgX2lzQWxsMEZsYWcgPSB0cnVlOy8v6K6w5b2V5piv5ZCm5YWo6YOo5Li6MFxyXG4gICAgICAgICAgICAgICAgdmFyIF92b3RlU3VtID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2l0ZW0uRWxlbWVudHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX19pdGVtID0gX2l0ZW0uRWxlbWVudHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9jb29raWVWYWx1ZSA9IF9faXRlbS5WaV9JZCArIFwiX1wiICsgX19pdGVtLlZpX1ZtX0lkICsgXCJfXCIgKyBfX2l0ZW0uVmlfVmdfSWQgKyBcIixcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodm90ZV9pdGVtICYmIHZvdGVfaXRlbS5pbmRleE9mKF9jb29raWVWYWx1ZSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXRlbS5FbGVtZW50c1tqXS5WaV9Db3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXN2b3RlID0gdHJ1ZTsvL+aKlei/h+elqFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX2l0ZW0uRWxlbWVudHNbal0uVmlfQ291bnQgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNBbGwwRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfdm90ZVN1bSArPSBfaXRlbS5FbGVtZW50c1tqXS5WaV9Db3VudDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9pdGVtLkVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9faXRlbSA9IF9pdGVtLkVsZW1lbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfVmlfQ291bnQgPSBfX2l0ZW0uVmlfQ291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX3ZvdGVCaUxpID0gVm90ZVpoYW5CaShfdm90ZVN1bSwgX1ZpX0NvdW50KTsvL+WNoOavlFxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2Nvb2tpZVZhbHVlID0gX19pdGVtLlZpX0lkICsgXCJfXCIgKyBfX2l0ZW0uVmlfVm1fSWQgKyBcIl9cIiArIF9faXRlbS5WaV9WZ19JZCArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2b3RlX2l0ZW0gJiYgdm90ZV9pdGVtLmluZGV4T2YoX2Nvb2tpZVZhbHVlKSA+PSAwKSB7Ly/mnKzpgInpobnlt7LmipXnpahcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgPGxpIGNsYXNzPVwiYWN0aXZlXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRcIj4nICsgX19pdGVtLlZpX1RpdGxlICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlc1wiPu+8iCcgKyBnc2hWb3RlTnVtKF9WaV9Db3VudCkgKyAn56Wo77yJJyArIF92b3RlQmlMaSArICclPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFyXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbm5lclwiIHN0eWxlPVwid2lkdGg6JyArIFZvdGVaaGFuQmlXaWR0aChfdm90ZUJpTGksIDQyMCkgKyAncHhcIj48L3NwYW4+JzsvL+aAu+mVvzQyMHB4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlwc1wiPjxpIGNsYXNzPVwiaWNvbiBpY29uX3dkdHBcIj48L2k+5oiR55qE5oqV56WoPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgPC9saT4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly/mnKzpgInpobnmnKrmipXnpahcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgPGxpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0XCI+JyArIF9faXRlbS5WaV9UaXRsZSArICc8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXNcIj7vvIgnICsgZ3NoVm90ZU51bShfVmlfQ291bnQpICsgJ+elqO+8iScgKyBfdm90ZUJpTGkgKyAnJTwvc3Bhbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhclwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5uZXJcIiBzdHlsZT1cIndpZHRoOicgKyBWb3RlWmhhbkJpV2lkdGgoX3ZvdGVCaUxpLCA0MjApICsgJ3B4XCI+PC9zcGFuPic7Ly/mgLvplb80MjBweFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICA8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICA8L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPC91bD4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF9odG1sICs9ICc8ZGl2IGNsYXNzPVwiYnRuX3dyYXBcIj4nO1xyXG4gICAgICAgICAgICBpZiAoX2lzdm90ZSkge1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bl9kaXNhYmxlZFwiPuW3suaKleelqDwvYnV0dG9uPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuX2JsdWUgYnRuX2xvb2t2b3RlXCIgdm90ZV9pZD1cIicgKyBqc29uLlJlc3VsdC5WZ19JZCArICdcIiB2b3RlX3RpdGxlPVwiJyArIF92b3RlX3RpdGxlICsgJ1wiPuafpeecizwvYnV0dG9uPic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoanNvbi5SZXN1bHQuVmdfRW5hYmxlID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuX2JsdWUgYnRuX2dvdm90ZVwiIHZvdGVfaWQ9XCInICsganNvbi5SZXN1bHQuVmdfSWQgKyAnXCI+5Y675oqV56WoPC9idXR0b24+JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bl9kaXNhYmxlZFwiPuivpeaKleelqOW3sue7k+adnzwvYnV0dG9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bl9ibHVlIGJ0bl9sb29rdm90ZVwiIHZvdGVfaWQ9XCInICsganNvbi5SZXN1bHQuVmdfSWQgKyAnXCIgdm90ZV90aXRsZT1cIicgKyBfdm90ZV90aXRsZSArICdcIj7mn6XnnIs8L2J1dHRvbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9odG1sICs9ICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIF9odG1sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBpbml0SFRNTChqc29uLCBfdm90ZV90aXRsZSkge1xyXG4gICAgICAgICAgICB2YXIgX2h0bWwgPSAnJ1xyXG4gICAgICAgICAgICBpZiAoanNvbiAmJiBqc29uLlN1Y2Nlc3MgPT0gMSAmJiBqc29uLlJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGpzb24uUmVzdWx0LlZnX1RpdGxlICYmIGpzb24uUmVzdWx0LlZnX1RpdGxlICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdm90ZV90aXRsZSA9IGpzb24uUmVzdWx0LlZnX1RpdGxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8ZGl2IGNsYXNzPVwidGl0bGVcIj48aSBjbGFzcz1cImljb24gaWNvbl90aXRsZVwiPjwvaT4nICsgX3ZvdGVfdGl0bGUgKyAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24uUmVzdWx0LlZvdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVtID0ganNvbi5SZXN1bHQuVm90ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxoMyBjbGFzcz1cInRpdFwiPicgKyBfaXRlbS5WbV9UaXRsZSArICc8L2gzPic7XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJjb250ZW50IHZvdGVpdGVtXycgKyBqc29uLlJlc3VsdC5WZ19JZCArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPHVsIGNsYXNzPVwicHJvYmxlbV9saXN0IHZvdGVfJyArIGpzb24uUmVzdWx0LlZnX0lkICsgJ1wiPic7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2l0ZW0uRWxlbWVudHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvT3JDaGVja2JveCA9IFwicmFkaW9cIjsvL+WNlemAiVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2l0ZW0uVm1fVHlwZSA9PSAxKSB7Ly/mipXnpajmqKHlvI8gMS4g5aSa6YCJIDAuIOWNlemAiVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9PckNoZWNrYm94ID0gXCJjaGVja2JveFwiOy8v5aSa6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfVm1fTWF4Q2hlY2sgPSBfaXRlbS5WbV9NYXhDaGVjaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9WbV9NYXhDaGVjayA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVm1fTWF4Q2hlY2sgPSA5OTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9faXRlbSA9IF9pdGVtLkVsZW1lbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICA8bGkgY2xhc3M9XCJ2b3RldHlwZV8nICsgcmFkaW9PckNoZWNrYm94ICsgJyB2b3RldHlwZV9saVwiIHZpdm1pZD1cIicgKyBfX2l0ZW0uVmlfVm1fSWQgKyAnXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hvb3NlLXdyYXBcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiJyArIHJhZGlvT3JDaGVja2JveCArICdcIiAgbmFtZT1cInZvdGVfaXRlbV8nICsganNvbi5SZXN1bHQuVmdfSWQgKyAnXycgKyBpICsgJ1wiIGlkPVwidm90ZV9pdGVtXycgKyBqc29uLlJlc3VsdC5WZ19JZCArICdfJyArIGkgKyAnXycgKyBqICsgJ1wiIHZhbHVlPVwiJyArIF9faXRlbS5WaV9WbV9JZCArICdfJyArIF9faXRlbS5WaV9WZ19JZCArICdcIiBtYXhjaGVjaz1cIicgKyBfVm1fTWF4Q2hlY2sgKyAnXCIgdmlpZD1cIicgKyBfX2l0ZW0uVmlfSWQgKyAnXCIgdml2bWlkPVwiJyArIF9faXRlbS5WaV9WbV9JZCArICdcIiB2aXZnaWQ9XCInICsgX19pdGVtLlZpX1ZnX0lkICsgJ1wiPic7Ly9WaV9JZOWNleS4queahOmAiemhuWlk77ybVmlfVm1fSWTkuIDpgZPpopgx5LiqaWTvvJvpgInpobnkuIDkuKppZO+8m1ZpX1ZnX0lk5LiA5Liq5oqV56Wo5LiA5LiqaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNob29zZS1pbm5lclwiPjwvc3Bhbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICA8bGFiZWwgZm9yPVwidm90ZV9pdGVtXycgKyBqc29uLlJlc3VsdC5WZ19JZCArICdfJyArIGkgKyAnXycgKyBqICsgJ1wiPicgKyBfX2l0ZW0uVmlfVGl0bGUgKyAnPC9sYWJlbD4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICA8L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDwvdWw+JztcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJidG5fd3JhcFwiPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuX29yYW5nZSBidG5fdm90ZVwiIHZvdGVfaWQ9XCInICsganNvbi5SZXN1bHQuVmdfSWQgKyAnXCIgdm90ZV90aXRsZT1cIicgKyBfdm90ZV90aXRsZSArICdcIiA+5oqV56WoPC9idXR0b24+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG5fYmx1ZSBidG5fbG9va3ZvdGVcIiB2b3RlX2lkPVwiJyArIGpzb24uUmVzdWx0LlZnX0lkICsgJ1wiIHZvdGVfdGl0bGU9XCInICsgX3ZvdGVfdGl0bGUgKyAnXCI+5p+l55yLPC9idXR0b24+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfaHRtbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gaW5pdFZvdGUoaXRlbSl7XHJcbiAgICAgICAgICAgICQoXCIuZW1fdm90ZVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3ZvdGVfaWQgPSBfdGhpcy5hdHRyKFwidm90ZV9pZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09IFwiYWxsXCIgfHwgaXRlbSA9PSBfdm90ZV9pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfdm90ZV90aXRsZSA9IF90aGlzLmF0dHIoXCJ2b3RlX3RpdGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIF92b3RlX3RpdGxlID0gdW5lc2NhcGUoX3ZvdGVfdGl0bGUpOy8v6Kej56CBXHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhfdm90ZV9pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhfdm90ZV90aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9odHRwOi8vY21zZGF0YWFwaS5lYXN0bW9uZXkuY29tL2FwaS9cclxuICAgICAgICAgICAgICAgICAgICAvL2h0dHA6Ly9jbXNkYXRhYXBpLnRlc3QuZW1hcGQuY29tL2FwaS9cclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiLy9jbXNkYXRhYXBpLmVhc3Rtb25leS5jb20vYXBpL1ZvdGUvR2V0Vm90ZUdyb3VwQnlJZD9JZD1cIiArIF92b3RlX2lkICsgXCImY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2b3RlX2l0ZW0gPSBnZXRWb3RlQ29va2llKFwidm90ZV9cIiArIF92b3RlX2lkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b3RlX2l0ZW0gfHwganNvbi5SZXN1bHQuVmdfRW5hYmxlICE9IDEpIHsvL1ZnX0VuYWJsZSAx5Li6IOWFgeiuuFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmh0bWwoaW5pdFJlc3VsdEhUTUwoanNvbiwgX3ZvdGVfdGl0bGUsIHZvdGVfaXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5odG1sKGluaXRIVE1MKGpzb24sIF92b3RlX3RpdGxlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluaXRWb3RlKFwiYWxsXCIpO1xyXG4gICAgfShqUXVlcnkpXHJcbn0pXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL3ZvdGUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMiIsInZhciBoZXhfbWQ1ID0gcmVxdWlyZSgnLi4vanMvbW9kdWxlcy9tZDUnKTtcclxudmFyIGxhbmdrZSA9IHJlcXVpcmUoJy4uL2pzL21vZHVsZXMvbGFuZ2tlL25ld3MnKTtcclxudmFyIHZvdGUgPSByZXF1aXJlKCcuLi9qcy9tb2R1bGVzL3ZvdGUnKTtcclxudmFyIHBkdGlwcyA9IHJlcXVpcmUoJy4uL2pzL21vZHVsZXMvcGR0aXBzJyk7XHJcblxyXG52YXIgY29uZmlnID0ge1xyXG4gICAgXCJndWJhXCI6IFwiaHR0cHM6Ly9nYmFwaS5lYXN0bW9uZXkuY29tL1wiLFxyXG4gICAgXCJwdXNoXCI6IFwiaHR0cHM6Ly9wdXNoMi5lYXN0bW9uZXkuY29tL1wiXHJcbn07XHJcblxyXG5pZihfQ01TSEogPT0gXCJ0ZXN0XCIpe1xyXG4gICAgY29uZmlnLmd1YmEgPSBcImh0dHBzOi8vZ2JhcGktdGVzdC5lYXN0bW9uZXkuY29tL1wiO1xyXG59XHJcblxyXG52YXIgY29va2llID0ge1xyXG4gICAgZ2V0OiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgdmFyIHhhcnIgPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cChcIihefCApXCIgKyBuYW1lICsgXCI9KFteO10qKSg7fCQpXCIpKTtcclxuICAgICAgICBpZiAoeGFyciAhPSBudWxsKSByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHhhcnJbMl0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSwgZXhwaXJlZGF5cywgZG9tYWluKSB7XHJcbiAgICAgICAgdmFyIGNvb2tpZXN0ciA9IGtleSArIFwiPVwiICsgZXNjYXBlKHZhbHVlKVxyXG5cclxuICAgICAgICBpZiAoZXhwaXJlZGF5cyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGV4ZGF0ZS5zZXREYXRlKGV4ZGF0ZS5nZXREYXRlKCkgKyBleHBpcmVkYXlzKTtcclxuICAgICAgICAgICAgY29va2llc3RyICs9IFwiO2V4cGlyZXM9XCIgKyBleGRhdGUudG9HTVRTdHJpbmcoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG9tYWluICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb29raWVzdHIgKz0gXCI7ZG9tYWluPVwiICsgZG9tYWluO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb29raWVzdHIgKz0gJztwYXRoPS8nO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZXN0cjtcclxuXHJcbiAgICB9LFxyXG4gICAgZGVsOiBmdW5jdGlvbihrZXksIGRvbWFpbikge1xyXG4gICAgICAgIHZhciBleGRhdGUgPSBuZXcgRGF0ZSgobmV3IERhdGUpLmdldFRpbWUoKSAtIDEpO1xyXG4gICAgICAgIGlmIChkb21haW4pIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0ga2V5ICsgJz07cGF0aD0vO2V4cGlyZXM9JyArIGV4ZGF0ZS50b0dNVFN0cmluZygpICsgJztkb21haW49JyArIGRvbWFpbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPTtwYXRoPS87ZXhwaXJlcz0nICsgZXhkYXRlLnRvR01UU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxufTtcclxuXHJcbnZhciB1c2VycGFzc3BvcnQgPSB7XHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlueUqOaIt+S/oeaBr1xyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoY29va2llLmdldCgndXQnKSAmJiBjb29raWUuZ2V0KCdjdCcpICYmIGNvb2tpZS5nZXQoJ3VpZGFsJykpIHtcclxuXHJcbiAgICAgICAgICAgIC8v6I635Y+W5YqgduS/oeaBr1xyXG4gICAgICAgICAgICB2YXIgamlhdiA9IHsgdnR5cGU6IG51bGwsIHN0YXRlOiBudWxsLCBuYW1lOiAnJyB9O1xyXG4gICAgICAgICAgICBpZiAoY29va2llLmdldCgndnRwc3QnKSAmJiBjb29raWUuZ2V0KCd2dHBzdCcpICE9ICd8Jykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGppYXZhcnIgPSBjb29raWUuZ2V0KCd2dHBzdCcpLnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoamlhdmFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmluZm8odHlwZW9mIGppYXZhcnJbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChqaWF2YXJyWzFdID09IFwiMFwiIHx8IGppYXZhcnJbMV0gPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChqaWF2YXJyWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiMzAxXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi52dHlwZSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi5uYW1lID0gJ+eQhui0ouW4iCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiMzAyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi52dHlwZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi5uYW1lID0gJ+mdnueQhui0ouW4iCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiMzAzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi52dHlwZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi5uYW1lID0gJ+S8geS4mic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGppYXZhcnJbMV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjBcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppYXYuc3RhdGUgPSAwOyAvL+WuoeaguOmAmui/h1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIxXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaWF2LnN0YXRlID0gMTE7IC8v5a6h5qC45pyq6YCa6L+HXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjJcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppYXYuc3RhdGUgPSAxMjsgLy/lrqHmoLjkuK1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiM1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi5zdGF0ZSA9IDEzOyAvL+WKoHbnlKjmiLfkv67mlLnlrqHmoLhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiOFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi5zdGF0ZSA9IDE4OyAvL+WKoHbnlKjmiLfkv67mlLnlrqHmoLhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiOVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgamlhdi5zdGF0ZSA9IDE5OyAvL+WKoHbnlKjmiLfkv67mlLnlrqHmoLhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuaW5mbyhqaWF2KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogY29va2llLmdldCgndWlkYWwnKS5zdWJzdHJpbmcoMCwgMTYpLFxyXG4gICAgICAgICAgICAgICAgbmljazogY29va2llLmdldCgndWlkYWwnKS5zdWJzdHJpbmcoMTYpLFxyXG4gICAgICAgICAgICAgICAgamlhdjogamlhdlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOmAgOWHuueZu+W9lVxyXG4gICAgICogQHBhcmFtICB7ZnVuY3Rpb259IOmAgOWHuuS5i+WQjuWbnuiwg1xyXG4gICAgICovXHJcbiAgICBsb2dPdXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBcInBpPTtwYXRoPS87ZG9tYWluPWVhc3Rtb25leS5jb207ZXhwaXJlcz1cIiArIGRhdGUudG9HTVRTdHJpbmcoKTtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBcImN0PTtwYXRoPS87ZG9tYWluPWVhc3Rtb25leS5jb207ZXhwaXJlcz1cIiArIGRhdGUudG9HTVRTdHJpbmcoKTtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBcInV0PTtwYXRoPS87ZG9tYWluPWVhc3Rtb25leS5jb207ZXhwaXJlcz1cIiArIGRhdGUudG9HTVRTdHJpbmcoKTtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBcInVpZGFsPTtwYXRoPS87ZG9tYWluPWVhc3Rtb25leS5jb207ZXhwaXJlcz1cIiArIGRhdGUudG9HTVRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgaXNMb2dpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnb3RvTG9naW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9naW51cmwgPSAnaHR0cHM6Ly9wYXNzcG9ydDIuZWFzdG1vbmV5LmNvbS9wdWIvbG9naW4/YmFja3VybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbGYubG9jYXRpb24uaHJlZilcclxuICAgICAgICBzZWxmLmxvY2F0aW9uID0gbG9naW51cmxcclxuICAgICAgICAvLyB3aW5kb3cub3Blbihsb2dpbnVybClcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBfY3Rva2VuID0gY29va2llLmdldChcImN0XCIpO1xyXG52YXIgX3V0b2tlbiA9IGNvb2tpZS5nZXQoXCJ1dFwiKTtcclxudmFyIF9HdWJhQXBpSCA9IGhleF9tZDUoXCJjdG9rZW49XCIgKyBfY3Rva2VuICsgXCJ1dG9rZW49XCIgKyBfdXRva2VuICsgXCJfNTE5ZDc3YjI5YmU0NDJmOFwiKTtcclxudmFyIF9kZXZpY2VpZCA9IFwiMGQyNzk4Y2FiMTcxNjQzOWEzNDNjOTk2NWMyMGM1OWRcIjtcclxuXHJcbi8qKlxyXG4gKiDmoLzlvI/ljJbngrnotZ7mlLbol4/mlbBcclxuICogdHlwZTogMC0gOzErIDsy5LiN5Yqg5LiN5YePXHJcbiAqL1xyXG52YXIgZm9ybWF0WmFuTnVtID0gZnVuY3Rpb24oY291bnQsIHR5cGUpIHtcclxuICAgIHZhciBudW0gPSBwYXJzZUludChjb3VudCkgPyBwYXJzZUludChjb3VudCkgOiAwO1xyXG4gICAgdmFyIGJhY2sgPSBcIlwiO1xyXG4gICAgaWYgKHR5cGUgPT0gMikge1xyXG4gICAgICAgIHRlbXAgPSBudW1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGVtcCA9IHR5cGUgPyBudW0gKyAxIDogbnVtIC0gMTtcclxuICAgIH1cclxuICAgIGJhY2sgPSB0ZW1wID4gOTkgPyBcIjk5K1wiOiB0ZW1wID4gMCA/IHRlbXA6IFwiXCI7XHJcbiAgICByZXR1cm4gYmFjaztcclxufTtcclxuXHJcbi8vIOeDreaQnFxyXG52YXIgaG90U2VhcmNoU2Nyb2xsID0ge1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5zZW50ZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGltZSA9IDUwO1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uKClcclxuXHJcbiAgICB9LFxyXG4gICAgc2V0ZXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgX3NlbGYuc2VudGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChfc2VsZi5sdyA+PSBfc2VsZi5zcGFuV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIF9zZWxmLmx3ID0gMFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3NlbGYubHcrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfc2VsZi5uZXdIdG1sLmNzcyh7XHJcbiAgICAgICAgICAgICAgICAncmlnaHQnOiBfc2VsZi5sd1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSxcclxuXHRcdF9zZWxmLnRpbWUpXHJcbiAgICB9LFxyXG4gICAgYW5pbWF0aW9uOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgX3NlbGYgPSB0aGlzLFxyXG5cdFx0YVdpZHRoID0gMDs7XHJcbiAgICAgICAgX3NlbGYuX2NvbnRlbnQgPSAkKCcjaG90bmV3cycpO1xyXG4gICAgICAgIF9zZWxmLmFIdG1sID0gX3NlbGYuX2NvbnRlbnQuaHRtbCgpO1xyXG4gICAgICAgICQoJ2EnLCBfc2VsZi5fY29udGVudCkuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgYVdpZHRoICs9ICQodGhpcykub3V0ZXJXaWR0aCgpICsgMTA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgX3NlbGYubmV3SHRtbCA9ICQoJzxkaXYgc3R5bGU9XCJ3aWR0aDonICsgYVdpZHRoICogMiArICdweFwiPjxzcGFuIGNsYXNzPVwic3BhblwiPicgKyBfc2VsZi5hSHRtbCArICc8L3NwYW4+PHNwYW4+JyArIF9zZWxmLmFIdG1sICsgJzwvc3Bhbj48L2Rpdj4nKTtcclxuICAgICAgICBfc2VsZi5fY29udGVudC5odG1sKF9zZWxmLm5ld0h0bWwpO1xyXG4gICAgICAgIF9zZWxmLmx3ID0gX3NlbGYubmV3SHRtbC5wb3NpdGlvbigpLmxlZnQ7XHJcbiAgICAgICAgX3NlbGYuc3BhbldpZHRoID0gJCgnLnNwYW4nLCBfc2VsZi5fY29udGVudCkub3V0ZXJXaWR0aCgpO1xyXG5cclxuICAgICAgICBfc2VsZi5zZXRlcigpO1xyXG4gICAgICAgIF9zZWxmLl9jb250ZW50LmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChfc2VsZi5zZW50ZXIpXHJcbiAgICAgICAgfSxcclxuXHRcdGZ1bmN0aW9uKCkge1xyXG5cdFx0ICAgIF9zZWxmLnNldGVyKCk7XHJcblx0XHR9KVxyXG5cclxuICAgIH1cclxufTtcclxuXHJcbnZhciBxdW90ZVRyZWUgPSB7XHJcbiAgICBIdVNoZW46IHsgLy/msqrmt7FcclxuICAgICAgICBCaWdOYW1lOiBcIuayqua3seiCoeW4glwiLFxyXG4gICAgICAgIExpbms6IFwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL1wiLFxyXG4gICAgICAgIEludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC91bGlzdC5ucC9nZXQ/dXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTkmZmllbGRzPWYxLGYyLGYzLGY0LGYxMixmMTMsZjE0JnNlY2lkcz0xLjAwMDAwMSwwLjM5OTAwMSwwLjM5OTAwNlwiXHJcbiAgICB9LFxyXG4gICAgSEs6IHsgLy/muK/ogqFcclxuICAgICAgICBCaWdOYW1lOiBcIua4r+iCoeihjOaDhVwiLFxyXG4gICAgICAgIExpbms6IFwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2dnc2MuaHRtbFwiLFxyXG4gICAgICAgIEludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC91bGlzdC5ucC9nZXQ/dXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTkmZmllbGRzPWYxLGYyLGYzLGY0LGYxMixmMTMsZjE0JnNlY2lkcz0xMDAuSFNJXCIsXHJcbiAgICAgICAgSW50ZXJmYWNlMjogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9rYW10L2dldD9maWVsZHMxPWYxLGYyLGYzLGY0JmZpZWxkczI9ZjUxLGY1MiZ1dD0xMzY5N2ExY2M2NzdjOGJmYTlhNDk2NDM3YmZlZjQxOVwiXHJcbiAgICB9LFxyXG4gICAgR29sZDogeyAvL+m7hOmHkVxyXG4gICAgICAgIEJpZ05hbWU6IFwi6buE6YeR6KGM5oOFXCIsXHJcbiAgICAgICAgTGluazogXCJodHRwOi8vcXVvdGUuZWFzdG1vbmV5LmNvbS9jZW50ZXIvaGpzYy5odG1sXCIsXHJcbiAgICAgICAgSW50ZXJmYWNlOiBjb25maWcucHVzaCArIFwiYXBpL3F0L3VsaXN0Lm5wL2dldD91dD0xMzY5N2ExY2M2NzdjOGJmYTlhNDk2NDM3YmZlZjQxOSZmaWVsZHM9ZjEsZjIsZjMsZjQsZjEyLGYxMyxmMTQmc2VjaWRzPTEwMS5HQzAwWSwxMDEuU0kwMFksMTEzLmF1bSwxMTMuYWdtXCJcclxuICAgIH0sXHJcbiAgICBGdXR1cmVzOiB7IC8v5pyf6LSnXHJcbiAgICAgICAgQmlnTmFtZTogXCLmnJ/otKfooYzmg4VcIixcclxuICAgICAgICBMaW5rOiBcImh0dHA6Ly9xdW90ZS5lYXN0bW9uZXkuY29tL2NlbnRlci9mdXR1cmVzLmh0bWxcIixcclxuICAgICAgICAvL0ludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9jbGlzdC9nZXQ/cG49MSZwej0zJnBvPTEmbnA9MSZmbHR0PTImaW52dD0yJmZpZD1mMyZmcz1tOjExMytzOjEsbToxMTQrczoxLG06MTE1K3M6MSxtOjE0MitzOjEmZmllbGRzPWYxLGYyLGYzLGY0LGYxMixmMTMsZjE0LGYxNTImdXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTlcIlxyXG4gICAgICAgIEludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9jbGlzdC9nZXQ/cG49MSZwej0zJnBvPTEmbnA9MSZmaWQ9ZjMmZnM9bToxMTMrczoxLG06MTE0K3M6MSxtOjExNStzOjEsbToxNDIrczoxJmZpZWxkcz1mMSxmMixmMyxmNCxmMTIsZjEzLGYxNCxmMTUyJnV0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5XCJcclxuICAgIH0sXHJcbiAgICBHbG9iYWw6IHsgLy/lhajnkINcclxuICAgICAgICBCaWdOYW1lOiBcIuWFqOeQg+aMh+aVsFwiLFxyXG4gICAgICAgIExpbms6IFwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL3FxenMuaHRtbFwiLFxyXG4gICAgICAgIEludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC91bGlzdC5ucC9nZXQ/dXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTkmZmllbGRzPWYxLGYyLGYzLGY0LGYxMixmMTMsZjE0JnNlY2lkcz0xLjAwMDAwMSwxMDAuSFNJLDEwMC5ESklBLDEwMC5OMjI1LDEwMC5GVFNFLDEwMS5HQzAwWSwxMDIuQ0wwMFksMTAwLlVESVwiXHJcbiAgICB9LFxyXG4gICAgT3B0aW9uOiB7IC8v5pyf5p2DXHJcbiAgICAgICAgQmlnTmFtZTogXCLmnJ/mnYPooYzmg4VcIixcclxuICAgICAgICBMaW5rOiBcImh0dHA6Ly9xdW90ZS5lYXN0bW9uZXkuY29tL2NlbnRlci9xcXNjLmh0bWxcIixcclxuICAgICAgICAvL+aMh+aVsFxyXG4gICAgICAgIEludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9jbGlzdC9nZXQ/cG49MSZwej0xJnBvPTEmbnA9MSZmcz1pOjEuNTEwMDUwJmZpZWxkcz1mMSxmMixmMyxmNCxmMTIsZjEzLGYxNCZ1dD0xMzY5N2ExY2M2NzdjOGJmYTlhNDk2NDM3YmZlZjQxOVwiLFxyXG4gICAgICAgIC8v6K6k6LStXHJcbiAgICAgICAgSW50ZXJmYWNlMjogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9jbGlzdC9nZXQ/cG49MSZwej0yJnBvPTEmbnA9MSZmbHR0PTEmaW52dD0yJmZpZD1mNiZmcz1tOjEwK3Q6MTczJmZpZWxkcz1mMSxmMixmMyxmNCxmNSxmMTIsZjEzLGYxNCZ1dD0xMzY5N2ExY2M2NzdjOGJmYTlhNDk2NDM3YmZlZjQxOVwiLFxyXG4gICAgICAgIC8v6K6k5rK9XHJcbiAgICAgICAgSW50ZXJmYWNlMzogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9jbGlzdC9nZXQ/cG49MSZwej0yJnBvPTEmbnA9MSZmbHR0PTEmaW52dD0yJmZpZD1mNiZmcz1tOjEwK3Q6MTc0JmZpZWxkcz1mMSxmMixmMyxmNCxmNSxmMTIsZjEzLGYxNCZ1dD0xMzY5N2ExY2M2NzdjOGJmYTlhNDk2NDM3YmZlZjQxOVwiXHJcbiAgICB9LFxyXG4gICAgRm9yZXg6IHsgLy/lpJbmsYdcclxuICAgICAgICBCaWdOYW1lOiBcIuWkluaxh+ihjOaDhVwiLFxyXG4gICAgICAgIExpbms6IFwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL3doc2MuaHRtbFwiLFxyXG4gICAgICAgIEludGVyZmFjZTogY29uZmlnLnB1c2ggKyBcImFwaS9xdC9jbGlzdC9nZXQ/cG49MSZwej00JnBvPTEmbnA9MSZmcz1pOjEwMC5VREkmZmllbGRzPWYxLGYyLGYzLGY0LGYxMixmMTMsZjE0JnV0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5XCJcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBDdXJyVHJlZSA9IHF1b3RlVHJlZS5IdVNoZW47XHJcbi8vd2luZG93LkN1cnJUcmVlID0gQ3VyclRyZWU7XHJcbnN3aXRjaCAoX1lNKSB7XHJcbiAgICBjYXNlIFwiaGtcIjpcclxuICAgICAgICAvL+a4r+iCoVxyXG4gICAgICAgIEN1cnJUcmVlID0gcXVvdGVUcmVlLkhLO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImdvbGRcIjpcclxuICAgICAgICAvL+m7hOmHkVxyXG4gICAgICAgIEN1cnJUcmVlID0gcXVvdGVUcmVlLkdvbGQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiZnV0dXJlc1wiOlxyXG4gICAgICAgIC8v5pyf6LSnXHJcbiAgICAgICAgQ3VyclRyZWUgPSBxdW90ZVRyZWUuRnV0dXJlcztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJnbG9iYWxcIjpcclxuICAgICAgICAvL+WFqOeQg1xyXG4gICAgICAgIEN1cnJUcmVlID0gcXVvdGVUcmVlLkdsb2JhbDtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJvcHRpb25cIjpcclxuICAgICAgICAvL+acn+adg1xyXG4gICAgICAgIEN1cnJUcmVlID0gcXVvdGVUcmVlLk9wdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJmb3JleFwiOlxyXG4gICAgICAgIC8v5aSW5rGHXHJcbiAgICAgICAgQ3VyclRyZWUgPSBxdW90ZVRyZWUuRm9yZXg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG59XHJcblxyXG4vLyDmjIfmlbBcclxudmFyIHpzUXVvdGUgPSB7XHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgdGhhdC5pbml0SFRNTERvbSgpO1xyXG4gICAgICAgIHRoYXQuZm9ybWF0RGF0YSgpO1xyXG4gICAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGF0LmZvcm1hdERhdGEoKTtcclxuICAgICAgICB9LFxyXG5cdFx0NjAgKiAxMDAwKTtcclxuICAgIH0sXHJcbiAgICBpbml0SFRNTERvbTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgJChcIi5xdW90ZW1vZGVsIC5tdGl0bGUgLnRpdFwiKS5odG1sKEN1cnJUcmVlLkJpZ05hbWUpO1xyXG4gICAgICAgICQoXCIucXVvdGVtb2RlbCAubXRpdGxlIC50aXRcIikuYXR0cihcImhyZWZcIiwgQ3VyclRyZWUuTGluayk7XHJcbiAgICAgICAgJChcIi5xdW90ZW1vZGVsIC5tdGl0bGUgLm1vcmVcIikuYXR0cihcImhyZWZcIiwgQ3VyclRyZWUuTGluayk7XHJcbiAgICB9LFxyXG4gICAgZ2V0UXVvdGVEYXRhOiBmdW5jdGlvbihfaW50ZXJmYWNlLCBfZG9tKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IF9pbnRlcmZhY2UsXHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAganNvbnA6IFwiY2JcIixcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbikge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5RdW90ZUNCKGpzb24sIF9kb20pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBnZXRaSkxEYXRhOiBmdW5jdGlvbihfaW50ZXJmYWNlLCBfZG9tKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IF9pbnRlcmZhY2UsXHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAganNvbnA6IFwiY2JcIixcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbikge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5aSkxDQihqc29uLCBfZG9tKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgUXVvdGVDQjogZnVuY3Rpb24oYmFjaywgX2RvbSkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICBpZiAoYmFjay5kYXRhICYmIGJhY2suZGF0YS5kaWZmICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBfaW5kZXggaW4gYmFjay5kYXRhLmRpZmYpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gYmFjay5kYXRhLmRpZmZbX2luZGV4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgenM6IGl0ZW0uZjIgLyBNYXRoLnBvdygxMCwgaXRlbS5mMSksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0uZjQgLyBNYXRoLnBvdygxMCwgaXRlbS5mMSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudDogaXRlbS5mMyAvIDEwMCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLmYxNCxcclxuICAgICAgICAgICAgICAgICAgICBtYzogaXRlbS5mMTMgKyBcIi5cIiArIGl0ZW0uZjEyLFxyXG4gICAgICAgICAgICAgICAgICAgIGYxMzogaXRlbS5mMTMsXHJcbiAgICAgICAgICAgICAgICAgICAgZjEyOiBpdGVtLmYxMlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhhdC5yZW5kZXJEb20oYXJyLCBfZG9tKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0WkRGSW5mbzogZnVuY3Rpb24oc3RyKSB7XHJcbiAgICAgICAgaWYgKHN0ciA9PT0gXCJcIiB8fCBzdHIgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIF9jbGFzczogXCJcIixcclxuICAgICAgICAgICAgICAgIF9kYXRhOiBcIi1cIlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBkWmRmID0gcGFyc2VGbG9hdChzdHIpO1xyXG4gICAgICAgICAgICBpZiAoZFpkZiA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIF9kYXRhOiBkWmRmLnRvRml4ZWQoMikgKyBcIiVcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkWmRmIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xhc3M6IFwiZ3JlZW5cIixcclxuICAgICAgICAgICAgICAgICAgICBfZGF0YTogZFpkZi50b0ZpeGVkKDIpICsgXCIlXCJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIF9jbGFzczogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBfZGF0YTogZFpkZi50b0ZpeGVkKDIpICsgXCIlXCJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0R1NITnVtOiBmdW5jdGlvbihzdHIsIGZpeCwgbnVtKSB7XHJcbiAgICAgICAgaWYgKHN0ciA9PT0gXCJcIiB8fCBzdHIgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiLVwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgICAgIHZhciBpbnRTdHIgPSBNYXRoLmFicyhwYXJzZUludChzdHIpKTtcclxuICAgICAgICAgICAgaWYgKGludFN0ci50b1N0cmluZygpLmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAocGFyc2VGbG9hdChzdHIpIC8gMTAwMDAwMDAwMDAwMCkudG9GaXhlZChudW0pICsgJ+S4h+S6vycgKyBmaXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50U3RyLnRvU3RyaW5nKCkubGVuZ3RoID4gOCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHBhcnNlRmxvYXQoc3RyKSAvIDEwMDAwMDAwMCkudG9GaXhlZChudW0pICsgJ+S6vycgKyBmaXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50U3RyLnRvU3RyaW5nKCkubGVuZ3RoID4gNCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHBhcnNlRmxvYXQoc3RyKSAvIDEwMDAwKS50b0ZpeGVkKG51bSkgKyAn5LiHJyArIGZpeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KHN0cikgPT09IHBhcnNlSW50KHN0cikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZUZsb2F0KHN0cikgKyBmaXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlRmxvYXQoc3RyKS50b0ZpeGVkKG51bSkgKyBmaXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0SFNHVFN0YXR1czogZnVuY3Rpb24oX2hzZ3RzdGF0dXMpIHtcclxuICAgICAgICBzd2l0Y2ggKF9oc2d0c3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIuaciemineW6plwiO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLml6Dpop3luqZcIjtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi5pS255uYXCI7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIuS8keW4glwiO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLVwiO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBaSkxDQjogZnVuY3Rpb24oYmFjaywgX2RvbSkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoYmFjayAmJiBiYWNrLnJjID09IDAgJiYgYmFjay5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAvL2hrMnNo5rKq6IKh6YCaXHJcbiAgICAgICAgICAgICAgICB2YXIgaGd0TFIgPSB0aGF0LmdldEdTSE51bShwYXJzZUZsb2F0KGJhY2suZGF0YS5oazJzaC5kYXlOZXRBbXRJbikgKiAxMDAwMCwgXCJcIiwgMik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2hndEluZmxvd1wiKS5odG1sKGhndExSKTtcclxuICAgICAgICAgICAgICAgIHZhciBoZ3RJbmZvID0gdGhhdC5nZXRaREZJbmZvKGJhY2suZGF0YS5oazJzaC5kYXlOZXRBbXRJbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGd0SW5mby5fY2xhc3MgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjaGd0SW5mbG93XCIpLmFkZENsYXNzKGhndEluZm8uX2NsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGd0SW5mby5fY2xhc3MgPT0gXCJncmVlblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjaGd0SW5mbG93XCIpLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmVxKDApLmh0bWwoXCLotYTph5Hlh4DmtYHlh7pcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjaGd0SW5mbG93XCIpLmh0bWwoaGd0TFIucmVwbGFjZShcIi1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjaGd0SW5mbG93XCIpLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmVxKDApLmh0bWwoXCLotYTph5Hlh4DmtYHlhaVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI2hndEluZmxvd1wiKS5wYXJlbnQoKS5maW5kKFwic3BhblwiKS5lcSgwKS5odG1sKFwi6LWE6YeR5YeA5rWB5YWlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChcIi5oZ3RzdGF0dXNcIikuaHRtbCh0aGF0LmdldEhTR1RTdGF0dXMoYmFjay5kYXRhLmhrMnNoLnN0YXR1cykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhY2suZGF0YS5oazJzaC5zdGF0dXMgPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjaGd0SW5mbG93XCIpLnBhcmVudCgpLmh0bWwoXCItXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vc2gyaGvmuK/ogqHpgJoo5rKqKVxyXG4gICAgICAgICAgICAgICAgdmFyIGdndGhMUiA9IHRoYXQuZ2V0R1NITnVtKHBhcnNlRmxvYXQoYmFjay5kYXRhLnNoMmhrLmRheU5ldEFtdEluKSAqIDEwMDAwLCBcIlwiLCAyKTtcclxuICAgICAgICAgICAgICAgICQoXCIjZ2d0aEluZmxvd1wiKS5odG1sKGdndGhMUik7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2d0aEluZm8gPSB0aGF0LmdldFpERkluZm8oYmFjay5kYXRhLnNoMmhrLmRheU5ldEFtdEluKTtcclxuICAgICAgICAgICAgICAgIGlmIChnZ3RoSW5mby5fY2xhc3MgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0aEluZmxvd1wiKS5hZGRDbGFzcyhnZ3RoSW5mby5fY2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZ3RoSW5mby5fY2xhc3MgPT0gXCJncmVlblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0aEluZmxvd1wiKS5wYXJlbnQoKS5maW5kKFwic3BhblwiKS5lcSgwKS5odG1sKFwi6LWE6YeR5YeA5rWB5Ye6XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2dndGhJbmZsb3dcIikuaHRtbChnZ3RoTFIucmVwbGFjZShcIi1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0aEluZmxvd1wiKS5wYXJlbnQoKS5maW5kKFwic3BhblwiKS5lcSgwKS5odG1sKFwi6LWE6YeR5YeA5rWB5YWlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNnZ3RoSW5mbG93XCIpLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmVxKDApLmh0bWwoXCLotYTph5Hlh4DmtYHlhaVcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKFwiLmdndGhzdGF0dXNcIikuaHRtbCh0aGF0LmdldEhTR1RTdGF0dXMoYmFjay5kYXRhLnNoMmhrLnN0YXR1cykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhY2suZGF0YS5zaDJoay5zdGF0dXMgPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0aEluZmxvd1wiKS5wYXJlbnQoKS5odG1sKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2hrMnN65rex6IKh6YCaXHJcbiAgICAgICAgICAgICAgICB2YXIgc2d0TFIgPSB0aGF0LmdldEdTSE51bShwYXJzZUZsb2F0KGJhY2suZGF0YS5oazJzei5kYXlOZXRBbXRJbikgKiAxMDAwMCwgXCJcIiwgMik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI3NndEluZmxvd1wiKS5odG1sKHNndExSKTtcclxuICAgICAgICAgICAgICAgIHZhciBzZ3RJbmZvID0gdGhhdC5nZXRaREZJbmZvKGJhY2suZGF0YS5oazJzei5kYXlOZXRBbXRJbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2d0SW5mby5fY2xhc3MgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjc2d0SW5mbG93XCIpLmFkZENsYXNzKHNndEluZm8uX2NsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2d0SW5mby5fY2xhc3MgPT0gXCJncmVlblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjc2d0SW5mbG93XCIpLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmVxKDApLmh0bWwoXCLotYTph5Hlh4DmtYHlh7pcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjc2d0SW5mbG93XCIpLmh0bWwoc2d0TFIucmVwbGFjZShcIi1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjc2d0SW5mbG93XCIpLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmVxKDApLmh0bWwoXCLotYTph5Hlh4DmtYHlhaVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI3NndEluZmxvd1wiKS5wYXJlbnQoKS5maW5kKFwic3BhblwiKS5lcSgwKS5odG1sKFwi6LWE6YeR5YeA5rWB5YWlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChcIi5zZ3RzdGF0dXNcIikuaHRtbCh0aGF0LmdldEhTR1RTdGF0dXMoYmFjay5kYXRhLmhrMnN6LnN0YXR1cykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhY2suZGF0YS5oazJzei5zdGF0dXMgPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjc2d0SW5mbG93XCIpLnBhcmVudCgpLmh0bWwoXCItXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vc3oyaGvmuK/ogqHpgJoo5rexKVxyXG4gICAgICAgICAgICAgICAgdmFyIGdndHNMUiA9IHRoYXQuZ2V0R1NITnVtKHBhcnNlRmxvYXQoYmFjay5kYXRhLnN6MmhrLmRheU5ldEFtdEluKSAqIDEwMDAwLCBcIlwiLCAyKTtcclxuICAgICAgICAgICAgICAgICQoXCIjZ2d0c0luZmxvd1wiKS5odG1sKGdndHNMUik7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2d0c0luZm8gPSB0aGF0LmdldFpERkluZm8oYmFjay5kYXRhLnN6MmhrLmRheU5ldEFtdEluKTtcclxuICAgICAgICAgICAgICAgIGlmIChnZ3RzSW5mby5fY2xhc3MgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0c0luZmxvd1wiKS5hZGRDbGFzcyhnZ3RzSW5mby5fY2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZ3RzSW5mby5fY2xhc3MgPT0gXCJncmVlblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0c0luZmxvd1wiKS5wYXJlbnQoKS5maW5kKFwic3BhblwiKS5lcSgwKS5odG1sKFwi6LWE6YeR5YeA5rWB5Ye6XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2dndHNJbmZsb3dcIikuaHRtbChnZ3RzTFIucmVwbGFjZShcIi1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0c0luZmxvd1wiKS5wYXJlbnQoKS5maW5kKFwic3BhblwiKS5lcSgwKS5odG1sKFwi6LWE6YeR5YeA5rWB5YWlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNnZ3RzSW5mbG93XCIpLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmVxKDApLmh0bWwoXCLotYTph5Hlh4DmtYHlhaVcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKFwiLmdndHNzdGF0dXNcIikuaHRtbCh0aGF0LmdldEhTR1RTdGF0dXMoYmFjay5kYXRhLnN6MmhrLnN0YXR1cykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhY2suZGF0YS5zejJoay5zdGF0dXMgPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjZ2d0c0luZmxvd1wiKS5wYXJlbnQoKS5odG1sKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfZG9tLnNob3coKTtcclxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIF9kb20uaGlkZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZvcm1hdERhdGE6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB0aGF0LmdldFF1b3RlRGF0YShDdXJyVHJlZS5JbnRlcmZhY2UsICQoXCIjcXVvdGVkb21cIikpO1xyXG4gICAgICAgIGlmIChfWU0gPT0gXCJvcHRpb25cIikgeyAvL+acn+adg1xyXG4gICAgICAgICAgICB0aGF0LmdldFF1b3RlRGF0YShDdXJyVHJlZS5JbnRlcmZhY2UyLCAkKFwiI3F1b3RlZG9tMlwiKSk7XHJcbiAgICAgICAgICAgIHRoYXQuZ2V0UXVvdGVEYXRhKEN1cnJUcmVlLkludGVyZmFjZTMsICQoXCIjcXVvdGVkb20zXCIpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKF9ZTSA9PSBcImhrXCIpIHtcclxuICAgICAgICAgICAgdGhhdC5nZXRaSkxEYXRhKEN1cnJUcmVlLkludGVyZmFjZTIsICQoXCIjcXVvdGVkb216amxcIikpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZW5kZXJEb206IGZ1bmN0aW9uICh6c2luZm9zLCBfZG9tKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIGlmICh6c2luZm9zICYmIHpzaW5mb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBfaHRtbCA9ICcnO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHpzaW5mb3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBzenpzID0gKCh6c2luZm9zW2ldLnpzID09PSBcIlwiIHx8IHpzaW5mb3NbaV0uenMgPT0gXCItXCIpID8gXCItXCI6IHpzaW5mb3NbaV0uenMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN6cHJpY2UgPSAoKHpzaW5mb3NbaV0ucHJpY2UgPT09IFwiXCIgfHwgenNpbmZvc1tpXS5wcmljZSA9PSBcIi1cIikgPyBcIi1cIjogenNpbmZvc1tpXS5wcmljZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3pwZXJjZW50ID0gKCh6c2luZm9zW2ldLnBlcmNlbnQgPT09IFwiXCIgfHwgenNpbmZvc1tpXS5wZXJjZW50ID09IFwiLVwiKSA/IFwiLVwiOiBwYXJzZUZsb2F0KHpzaW5mb3NbaV0ucGVyY2VudCkudG9GaXhlZCgyKSArIFwiJVwiKTtcclxuICAgICAgICAgICAgICAgIHZhciBzem5hbWUgPSB6c2luZm9zW2ldLm5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIF9pY29uID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHZhciBfY29sb3IgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKHpzaW5mb3NbaV0ucGVyY2VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfaWNvbiA9IFwiaWNvbiB1cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb2xvciA9IFwicmVkXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHpzaW5mb3NbaV0ucGVyY2VudCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfaWNvbiA9IFwiaWNvbiBkb3duXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvbG9yID0gXCJncmVlblwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfaWNvbiA9IFwiaWNvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb2xvciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJ6c2l0ZW1cIiBkYXRhLW1jPVwiJyArIHpzaW5mb3NbaV0ubWMgKyAnXCInICsgKCh3aW5kb3cuUXVvdGVzaG93RG9tID09IHpzaW5mb3NbaV0ubWMpID8gJyBzdHlsZT1cImhlaWdodDoxODBweFwiJyA6ICcnKSArICc+JztcclxuICAgICAgICAgICAgICAgIC8vX2h0bWwgKz0gJzx1bCcgKyAoKHdpbmRvdy5RdW90ZXNob3dEb20gPT0genNpbmZvc1tpXS5tYykgPyAnIG9wZW5pbWc9XCJzaG93XCInIDogJycpICsgJz4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzx1bD4nO1xyXG4gICAgICAgICAgICAgICAgaWYgKHpzaW5mb3NbaV0ubWMgPT0gXCIxMjEuVVNEQ05ZSVwiIHx8IHpzaW5mb3NbaV0ubWMgPT0gXCIxMjEuSEtEQ05ZSVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxsaSBjbGFzcz1cInpzbmFtZVwiIHN0eWxlPVwiZm9udC1zaXplOjEycHg7XCI+JyArIHN6bmFtZSArICc8L2xpPic7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN6bmFtZS5pbmRleE9mKFwiRVRG6LStXCIpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICc8bGkgY2xhc3M9XCJ6c25hbWVcIiBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMHB4O3BhZGRpbmc6IDRweCAwO1wiPicgKyBzem5hbWUuc3Vic3RyaW5nKDAsIHN6bmFtZS5pbmRleE9mKFwiRVRG6LStXCIpICsgNCkgKyAnPGJyPicgKyBzem5hbWUuc3Vic3RyaW5nKHN6bmFtZS5pbmRleE9mKFwiRVRG6LStXCIpICsgNCkgKyAnPC9saT4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzem5hbWUuaW5kZXhPZihcIkVURuayvVwiKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGxpIGNsYXNzPVwienNuYW1lXCIgc3R5bGU9XCJsaW5lLWhlaWdodDogMjBweDtwYWRkaW5nOiA0cHggMDtcIj4nICsgc3puYW1lLnN1YnN0cmluZygwLCBzem5hbWUuaW5kZXhPZihcIkVURuayvVwiKSArIDQpICsgJzxicj4nICsgc3puYW1lLnN1YnN0cmluZyhzem5hbWUuaW5kZXhPZihcIkVURuayvVwiKSArIDQpICsgJzwvbGk+JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxsaSBjbGFzcz1cInpzbmFtZVwiPicgKyBzem5hbWUgKyAnPC9saT4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxsaSBjbGFzcz1cInpzcHJpY2VcIj48c3BhbiBzdHlsZT1cImNvbG9yOicgKyBfY29sb3IgKyAnO1wiPicgKyBzenpzICsgJzwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOicgKyBfY29sb3IgKyAnO1wiIGNsYXNzPVwiJyArIF9pY29uICsgJ1wiPjwvc3Bhbj48L2xpPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGxpIGNsYXNzPVwienN6ZGVcIj48c3BhbiBzdHlsZT1cImNvbG9yOicgKyBfY29sb3IgKyAnO1wiPicgKyBzenByaWNlICsgJzwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOicgKyBfY29sb3IgKyAnO1wiIGNsYXNzPVwiJyArIF9pY29uICsgJ1wiPjwvc3Bhbj48L2xpPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGxpIGNsYXNzPVwienN6ZGZcIj48c3BhbiBzdHlsZT1cImNvbG9yOicgKyBfY29sb3IgKyAnO1wiPicgKyBzenBlcmNlbnQgKyAnPC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6JyArIF9jb2xvciArICc7XCIgY2xhc3M9XCInICsgX2ljb24gKyAnXCI+PC9zcGFuPjwvbGk+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8L3VsPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGRpdiBjbGFzcz1cInF1b3RlaW1nXCI+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8YSBocmVmPVwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vdW5pZnkvci8nICsgenNpbmZvc1tpXS5tYyArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxpbWcgc3JjPVwiLy93ZWJxdW90ZXBpYy5lYXN0bW9uZXkuY29tL0dldFBpYy5hc3B4P25pZD0nICsgenNpbmZvc1tpXS5tYyArICcmaW1hZ2VUeXBlPXJ0b3AmdG9rZW49ZTFmYzcxNjUyNTAzMGI1NTE3Zjk5NjhmZTY1ZWIyNWQmdGltZXNwYW49JyArIE1hdGgucmFuZG9tKCkgKyAnXCI+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8L2E+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX2RvbS5odG1sKF9odG1sKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuUXVvdGVzaG93RG9tID09IHVuZGVmaW5lZCAmJiBfZG9tLmF0dHIoXCJpZFwiKSA9PSBcInF1b3RlZG9tXCIpIHsvL+esrOS4gOasoei/m+WFpVxyXG4gICAgICAgICAgICAgICAgJChcIi5xdW90ZWRvbSAuenNpdGVtXCIpLmVxKDApLmNzcyh7IFwiaGVpZ2h0XCI6IFwiMTgwcHhcIiB9KTsvL+iuvue9ruesrOS4gOS4qumrmOW6pu+8jOiuqeWbvueJh+aYvuekuuWHuuadpVxyXG4gICAgICAgICAgICAgICAgLy8kKFwiLnF1b3RlZG9tIC56c2l0ZW0gdWxcIikuZXEoMCkuYXR0cihcIm9wZW5pbWdcIiwgXCJzaG93XCIpOy8v5Li656ys5LiA5LiqdWzmlrDlop7moLflvI9cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5RdW90ZXNob3dEb20gPSAkKFwiLnF1b3RlZG9tIC56c2l0ZW1cIikuZXEoMCkuZGF0YShcIm1jXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIOeCuei1nisxXHJcbiAqL1xyXG52YXIgY3JlYXRBZGRsYWIgPSBmdW5jdGlvbihlKSB7XHJcbiAgICB2YXIgJGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XHJcbiAgICB2YXIgJGxhYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiXCIpO1xyXG4gICAgdmFyIGRpZmYgPSAwLFxyXG5cdGFuaW0sIHggPSBlLnBhZ2VYLFxyXG5cdHkgPSBlLnBhZ2VZO1xyXG4gICAgdmFyIHN0eWxlID0gJGxhYi5zdHlsZTtcclxuICAgIHN0eWxlLmNvbG9yID0gXCIjRTk0RjA2XCI7XHJcbiAgICBzdHlsZS56SW5kZXggPSA5OTk5O1xyXG4gICAgc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBzdHlsZS5zZWxlY3QgPSBcIm5vbmVcIjtcclxuICAgIHN0eWxlLmxlZnQgPSAoeCAtIDEwKSArIFwicHhcIjtcclxuICAgIHN0eWxlLnRvcCA9ICh5IC0gMjApICsgXCJweFwiO1xyXG4gICAgc3R5bGUuZm9udFNpemUgPSBcIjE2cHhcIjtcclxuICAgIHN0eWxlLnRleHRTaGFkb3cgPSBcIlwiO1xyXG4gICAgJGxhYi5pbm5lclRleHQgPSBcIisxXCI7XHJcbiAgICBjbGVhckludGVydmFsKGFuaW0pO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICBhbmltID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICgrK2RpZmYgPT0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGFuaW0pO1xyXG4gICAgICAgICAgICAgICAgJGJvZHkucmVtb3ZlQ2hpbGQoJGxhYik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHN0eWxlLmxlZnQgPSAoeCAtIDEwKSArIFwicHhcIjtcclxuICAgICAgICAgICAgc3R5bGUudG9wID0geSAtIDIwIC0gZGlmZiArIFwicHhcIjtcclxuICAgICAgICAgICAgc3R5bGUub3BhY2l0eSA9ICgxMDAgLSBkaWZmKSAvIDEwMDtcclxuICAgICAgICB9LFxyXG5cdFx0MTApO1xyXG4gICAgfSxcclxuXHQ1MCk7XHJcbiAgICAkYm9keS5hcHBlbmRDaGlsZCgkbGFiKTtcclxufTtcclxuXHJcbi8vIOeCuei1nlxyXG52YXIgemFuT2JqID0ge1xyXG4gICAgLy8g54K56LWe5pON5L2cICQodGhpcyksaGFzemFuLCBcclxuICAgIHphbkZ1bjogZnVuY3Rpb24oZSwgJGRvbSwgdHlwZSwgYXJ0aWNsZUlkKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gJGRvbTtcclxuXHJcbiAgICAgICAgdmFyIF9hcGl1cmwgPSAoX3RoaXMuaGFzQ2xhc3MoXCJ6YW5cIikgfHwgX3RoaXMuaGFzQ2xhc3MoXCJodW96YW5cIikpID8gXCJMaWtlQXJ0aWNsZVwiIDogXCJDYW5jZWxMaWtlQXJ0aWNsZVwiO1xyXG5cclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IGNvbmZpZy5ndWJhICsgXCJsaWtlb3B0L2pzb25wL1wiICsgX2FwaXVybCArIFwiP2lkPVwiICsgYXJ0aWNsZUlkICsgXCImdHlwZT0xJmRldmljZWlkPVwiICsgX2RldmljZWlkICsgXCImdmVyc2lvbj0yJnByb2R1Y3Q9ZWFzdG1vbmV5JnBsYXQ9d2ViJmg9XCIgKyBfR3ViYUFwaUggKyBcIiZjdG9rZW49XCIgKyBfY3Rva2VuICsgXCImdXRva2VuPVwiICsgX3V0b2tlbixcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICBqc29ucENhbGxiYWNrOiBcImNiXCIgKyBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMTAwMDAgKyBcIlwiKSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5yYyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV6YW51bSA9ICQoXCIjcG9zdF9saWtlX2NvdW50XCIpLmF0dHIoXCJyZWFsbnVtXCIpID8gJChcIiNwb3N0X2xpa2VfY291bnRcIikuYXR0cihcInJlYWxudW1cIikgOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZihfYXBpdXJsID09IFwiTGlrZUFydGljbGVcIil7Ly/ngrnotZ5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmhhc0NsYXNzKFwiemFuXCIpKXsvL+aZrumAmui1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoXCJ6YW5cIikuYWRkQ2xhc3MoXCJ6YW5hbmltYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcInphbmFuaW1hdGVcIikuYWRkQ2xhc3MoXCJoYXNfemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKF90aGlzLmhhc0NsYXNzKFwiaHVvemFuXCIpKXsvL+eBq+i1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoXCJodW96YW5cIikuYWRkQ2xhc3MoXCJoYXNfaHVvemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBmb3JtYXRaYW5OdW0ocHJlemFudW0sIDEpOy8vKzFcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2xpa2VfY291bnRcIikudGV4dChudW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3Bvc3RfbGlrZV9jb3VudFwiKS5hdHRyKFwicmVhbG51bVwiLCBwYXJzZUludChwcmV6YW51bSkgKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0QWRkbGFiKGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXsvL+WPlua2iOeCuei1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gZm9ybWF0WmFuTnVtKHByZXphbnVtLCAwKTsvLy0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9saWtlX2NvdW50XCIpLnRleHQobnVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2xpa2VfY291bnRcIikuYXR0cihcInJlYWxudW1cIiwgcGFyc2VJbnQocHJlemFudW0pIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKF90aGlzLmhhc0NsYXNzKFwiaGFzX2h1b3phblwiKSl7Ly/ngavotZ5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiaGFzX2h1b3phblwiKS5hZGRDbGFzcyhcImh1b3phblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ly/mma7pgJrotZ5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiaGFzX3phblwiKS5hZGRDbGFzcyhcInphblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIOaUtuiXj1xyXG52YXIgY29sbGVjdE9iaiA9IHtcclxuICAgIC8vIOaUtuiXj+S4juWPlua2iOaUtuiXj1xyXG4gICAgY29sbGVjdEZ1bjogZnVuY3Rpb24oZSwgJGRvbSwgdHlwZSwgYXJ0aWNsZUlkKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gJGRvbTtcclxuXHJcbiAgICAgICAgdmFyIGhhc2NvbGxlY3QgPSBfdGhpcy5oYXNDbGFzcyhcInNob3VjYW5nXCIpID8gZmFsc2U6IHRydWU7XHJcbiAgICAgICAgdmFyIF9hcGl1cmwgPSBoYXNjb2xsZWN0ID8gXCJDYW5jZWxDb2xsZWN0QXJ0aWNsZVwiOiBcIkNvbGxlY3RBcnRpY2xlXCI7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogY29uZmlnLmd1YmEgKyBcImNvbGxlY3RvcHQvanNvbnAvXCIgKyBfYXBpdXJsICsgXCI/cG9zdGlkPVwiICsgYXJ0aWNsZUlkICsgXCImaD1cIiArIF9HdWJhQXBpSCArIFwiJnR5cGU9MSZ2ZXJzaW9uPTgwMDA4MDAwJnByb2R1Y3Q9Z3ViYSZwbGF0PXdhcCZkZXZpY2VpZD1cIiArIF9kZXZpY2VpZCArIFwiJmN0b2tlbj1cIiArIF9jdG9rZW4gKyBcIiZ1dG9rZW49XCIgKyBfdXRva2VuLFxyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgIGpzb25wQ2FsbGJhY2s6IFwiY2JcIiArIHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAxMDAwMCArIFwiXCIpLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJjID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mlLbol49cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaGFzQ2xhc3MoXCJzaG91Y2FuZ1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcInNob3VjYW5nXCIpLmFkZENsYXNzKFwic2NhbmltYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwic2NhbmltYXRlXCIpLmFkZENsYXNzKFwiaGFzX3Nob3VjYW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA2MDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9fdGhpcy5yZW1vdmVDbGFzcyhcInNob3VjYW5nXCIpLmFkZENsYXNzKFwiaGFzX3Nob3VjYW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jcmVhdEFkZGxhYihlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5Y+W5raI5pS26JePXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiaGFzX3Nob3VjYW5nIHNjYW5pbWF0ZVwiKS5hZGRDbGFzcyhcInNob3VjYW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL190aGlzLnJlbW92ZUNsYXNzKFwiaGFzX3Nob3VjYW5nXCIpLmFkZENsYXNzKFwic2hvdWNhbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgenh6d09iaiA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5Yid5aeL5YyW5LqL5Lu2IFxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vIOaQnOe0ouahhuWIneWni+WMllxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBTdG9ja0NvZGVCYXIgPSBuZXcgc3VnZ2VzdDIwMTcoe1xyXG4gICAgICAgICAgICAgICAgaW5wdXRpZDogJ1N0b2NrQ29kZV9iYXInLFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICfovpPlhaXogqHnpajku6PnoIHjgIHlkI3lrZfjgIHnroDmi7zmiJblhbPplK7lrZcnLFxyXG4gICAgICAgICAgICAgICAgc2hvd25ld3RpcHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBvblN1Ym1pdDogJ3NlYXJjaCcsXHJcbiAgICAgICAgICAgICAgICBuZXd0aXBzb2Zmc2V0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogNixcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IC0xXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvL+iOt+WPlueCuei1niDmlLbol48g5YiG5LqrIOivhOiuuuaVsCAg5Y+K55u45YWz54q25oCBXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV3c0FydGljbGVCcmllZkluZm8oKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy/liJ3lp4vljJblrZfkvZPlpKflsI9cclxuICAgICAgICAgICAgdGhpcy5sb2FkRm9udFNpemUoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8g5oyH5pWw6KGM5oOFXHJcbiAgICAgICAgICAgIHpzUXVvdGUuaW5pdCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvL2RvbSDnu5Hlrprkuovku7ZcclxuICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8g54Ot5pCcXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SG90TmV3cygpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvL+WbuumhtlxyXG4gICAgICAgICAgICB0aGlzLmd1ZGluZ0Z1bigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvL+eDreeCueaOqOiNkFxyXG4gICAgICAgICAgICB0aGlzLmluaXRSRFRKKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW6KGM5oOF6IKh56Wo6ZO+5o6l5Y+K6Ieq6YCJ6IKhXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFF1b3RlTGluaygpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W54K56LWeIOaUtuiXjyDliIbkuqsg6K+E6K665pWwICDlj4rnm7jlhbPnirbmgIFcclxuICAgICAgKiBwb3N0X2xpa2VfY291bnQg54K56LWe5pWwICBcclxuICAgICAgKiBsaWtlX3N0YXRlIOeCuei1nueKtuaAgVxyXG4gICAgICAqIGNvbGxlY3Rfc3RhdGUg5pS26JeP54q25oCBXHJcbiAgICAgICogcG9zdF9mb3J3YXJkX2NvdW50IOWIhuS6q+aVsFxyXG4gICAgICAqIHBvc3RfY29tbWVudF9jb3VudCDor4TorrrmlbBcclxuICAgICAqL1xyXG4gICAgZ2V0TmV3c0FydGljbGVCcmllZkluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IGNvbmZpZy5ndWJhICsgXCJhYnN0cmFjdC9hcGkvUG9zdFNob3J0L05ld3NBcnRpY2xlQnJpZWZJbmZvP3Bvc3RpZD1cIiArIF9OZXdzSWQgKyBcIiZ0eXBlPTEmdmVyc2lvbj04MDAwODAwMCZwcm9kdWN0PWd1YmEmcGxhdD13ZWImZGV2aWNlaWQ9XCIgKyBfZGV2aWNlaWQgKyBcIiZjdG9rZW49XCIgKyBfY3Rva2VuICsgXCImdXRva2VuPVwiICsgX3V0b2tlbixcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICBqc29ucENhbGxiYWNrOiBcImNiXCIgKyBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMTAwMDAgKyBcIlwiKSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMucmMgPT0gMSAmJiByZXMucmUgJiYgcmVzLnJlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5mb3MgPSByZXMucmVbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3RfbGlrZV9jb3VudCA9IGluZm9zLnBvc3RfbGlrZV9jb3VudCxcclxuICAgICAgICAgICAgICAgICAgICBsaWtlX3N0YXRlID0gaW5mb3MubGlrZV9zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0X3N0YXRlID0gaW5mb3MuY29sbGVjdF9zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICBwb3N0X2ZvcndhcmRfY291bnQgPSBpbmZvcy5wb3N0X2ZvcndhcmRfY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdF9jb21tZW50X2NvdW50ID0gaW5mb3MucG9zdF9jb21tZW50X2NvdW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDor4TorrrmnYPpmZAocG9zdF9jb21tZW50X2F1dGhvcnkgM+emgeatoilcclxuICAgICAgICAgICAgICAgICAgICAvLyDngrnotZ7mnYPpmZAoYWxsb3dfbGlrZXNfc3RhdGUgMeemgeatoilcclxuICAgICAgICAgICAgICAgICAgICAvLyDovazlj5HmnYPpmZAocmVwb3N0X3N0YXRlIDHnpoHmraIpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g54K56LWe5qC35byPKHBvc3RfbGlrZV9zdHlsZSAx5piv54Gr6IuXIDDmmK/mi4fmjIcg6buY6K6kMClcclxuICAgICAgICAgICAgICAgICAgICAvLyDor4TorrrmnYPpmZDmmK/lkKbmmK/ns7vnu5/orr7nva7nmoTmoIfor4Yoc3lzdGVtX2NvbW1lbnRfYXV0aG9yaXR5IDHmmK/ns7vnu5/orr7nva4pXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3MucG9zdF9jb21tZW50X2F1dGhvcnkgPSAzO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluZm9zLmFsbG93X2xpa2VzX3N0YXRlID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbmZvcy5yZXBvc3Rfc3RhdGUgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0h1b1phbiA9IGluZm9zLnBvc3RfbGlrZV9zdHlsZSA9PSAxOy8v5piv5ZCm54Gr6LWeXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXNIdW9aYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZihpc0h1b1phbil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjc2hhcmVib3hcIikuZmluZChcIi5hcnRpY2xlemFuXCIpLnJlbW92ZUNsYXNzKFwiemFuXCIpLmFkZENsYXNzKFwiaHVvemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5mb3MuYWxsb3dfbGlrZXNfc3RhdGUgIT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v54K56LWe5pWw6YePXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXBvc3RfbGlrZV9jb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2xpa2VfY291bnRcIikuYXR0cihcInJlYWxudW1cIiwgcG9zdF9saWtlX2NvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9saWtlX2NvdW50XCIpLnRleHQoZm9ybWF0WmFuTnVtKHBvc3RfbGlrZV9jb3VudCwgMikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+W3sueCuei1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFsaWtlX3N0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpc0h1b1phbil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNzaGFyZWJveFwiKS5maW5kKFwiLmFydGljbGV6YW5cIikucmVtb3ZlQ2xhc3MoXCJodW96YW5cIikuYWRkQ2xhc3MoXCJoYXNfaHVvemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNzaGFyZWJveFwiKS5maW5kKFwiLmFydGljbGV6YW5cIikucmVtb3ZlQ2xhc3MoXCJ6YW5cIikuYWRkQ2xhc3MoXCJoYXNfemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAkKFwiLmFydGljbGV6YW4sI3Bvc3RfbGlrZV9jb3VudFwiKS5jc3Moe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmFydGljbGV6YW5cIikucGFyZW50KFwiLmNoaWxkXCIpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLFwib3BhY2l0eVwiOlwiMC41XCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v5bey57uP5pS26JePXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhY29sbGVjdF9zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3NoYXJlYm94XCIpLmZpbmQoXCIuYXJ0aWNsZXNjXCIpLnJlbW92ZUNsYXNzKFwic2hvdWNhbmdcIikuYWRkQ2xhc3MoXCJoYXNfc2hvdWNhbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5mb3MucmVwb3N0X3N0YXRlICE9IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+WIhuS6q+aVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwb3N0X2ZvcndhcmRfY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9mb3J3YXJkX2NvdW50XCIpLnRleHQoZm9ybWF0WmFuTnVtKHBvc3RfZm9yd2FyZF9jb3VudCwgMikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2Vtc2hhcmV3cmFwXCIpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLFwib3BhY2l0eVwiOlwiMC41XCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNzaGFyZWJvdHRvbVwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZihpbmZvcy5wb3N0X2NvbW1lbnRfYXV0aG9yeSAhPSAzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy/or4TorrrmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcG9zdF9jb21tZW50X2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX251bSA9IGZvcm1hdFphbk51bShwb3N0X2NvbW1lbnRfY291bnQsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2NvbW1lbnRfY291bnRcIikudGV4dChfbnVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuaW5mb3MgLmdvcGlubHVudHh0IC5pdGVtXCIpLmh0bWwoJzxpIGNsYXNzPVwiaWNvbmNvbW1lbnRcIj48L2k+PHNwYW4gY2xhc3M9XCJvcmFuZ2VcIj4nICsgaW5mb3MucG9zdF9jb21tZW50X2NvdW50ICsgJzwvc3Bhbj7kurror4TorronKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3Bvc3RfY29tbWVudF9jb3VudFwiKS50ZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuaW5mb3MgLmdvcGlubHVudHh0IC5pdGVtXCIpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v6K+E6K665Yy65Z+fXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eHp3T2JqLmluaXRQaW5MdW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2NvbW1lbnRfY291bnRcIikudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuaW5mb3MgLmdvcGlubHVudHh0IC5pdGVtXCIpLmh0bWwoJycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5nb3Bpbmx1bnR4dFwiKS5hdHRyKFwiaHJlZlwiLFwiamF2YXNjcmlwdDo7XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAkKFwiLmdvcGlubHVudHh0LC5nb3Bpbmx1bnR4dCBzcGFuXCIpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuZ29waW5sdW50eHRcIikucGFyZW50KFwiLmNoaWxkXCIpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLFwib3BhY2l0eVwiOlwiMC41XCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLy/liJ3lp4vljJbooYzmg4XogqHnpajpk77mjqXlj4roh6rpgInogqFcclxuICAgIGluaXRRdW90ZUxpbms6IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgLy/mraPmlofpobXlop7liqDnvZHpobXkuKrogqHpk77mjqXlip/og70o6Z2e56ys5LiA5qyh5Ye6546w55qE5pe25YCZ6L2s5o2i5oiQYemTvuaOpSlcclxuICAgICAgICAkKFwiLmVtX3N0b2NrX2tleV9jb21tb25cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5hdHRyKFwid2ViXCIpID09IFwiMVwiKSB7Ly93ZWI9MeeahOaXtuWAmXNwYW7moIfnrb7lj5jmiJBh5qCH562+XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZnRlcihfdGhpcy5wcm9wKFwib3V0ZXJIVE1MXCIpLnJlcGxhY2UoXCI8c3BhblwiLCBcIjxhXCIpLnJlcGxhY2UoXCI8L3NwYW4+XCIsIFwiPC9hPlwiKSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGlzSXBhZCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGlwYWQpLipvc1xccyhbXFxkX10rKS8pO1xyXG4gICAgICAgIGlmICghaXNJcGFkKSB7Ly/pnZ5pcGFkXHJcbiAgICAgICAgICAgIG5ldyB3aW5kb3cucGR0aXBzKHtcclxuICAgICAgICAgICAgICAgIGlkOiAnI0NvbnRlbnRCb2R5J1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfdGlwWkluZGV4ID0gMTAwO1xyXG5cclxuICAgICAgICAgICAgJChcIi50eHRpbmZvcyA+IHAsLnR4dGluZm9zID4gaDMsLnR4dGluZm9zID4gaDQsLnR4dGluZm9zID4gdGFibGVcIikub24oXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmZpbmQoXCIucXVvdGVib3hcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZChcIi5xdW90ZWJveFwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAkKFwiLnR4dGluZm9zID4gcCwudHh0aW5mb3MgPiBoMywudHh0aW5mb3MgPiBoNCwudHh0aW5mb3MgPiB0YWJsZVwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICgkKFwiLnF1b3RlYm94XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLnF1b3RlYm94XCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8v5q2j5paH5paH5a2X77yM6ZyA6KaB6Lez6L2s5Y6f55Sf6KGM5oOF55qE5qCH562+5bGe5oCn6L2s5o2iXHJcbiAgICAgICAgICAgICQoXCIua2V5dGlwW2RhdGEtY29kZV0sLmVtX3N0b2NrX2tleV9jb21tb25bZGF0YS1jb2RlXVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF90aGlzQ29kZSA9IF90aGlzLmRhdGEoXCJjb2RlXCIpLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzQ29kZS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dHIoXCJkYXRhLW1hcmtldFwiLCBfdGhpc0NvZGVbMF0pOy8v5paw5aKe5biC5Zy65bGe5oCnXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0cihcImRhdGEtY29kZVwiLCBfdGhpc0NvZGVbMV0pOy8v5paw5aKe5Luj56CB5bGe5oCnKOS8muimhuebluaOieiAgeeahOWxnuaApylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09XCIsIF90aGlzLmF0dHIoXCJkYXRhLW1hcmtldFwiKSArIFwiLlwiICsgX3RoaXMuYXR0cihcImRhdGEtY29kZVwiKSArIFwiICAgIFwiICsgX3RoaXMuaHRtbCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9pc01vdXNlT3ZlciA9IGZhbHNlOy8v5b2T5YmN56e75YWl5YWD57Sg5Y+K54q25oCBXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKGUpIHsvL+inpuWPkemakOiXj+ihjOaDhVvniLblhYPntKDnp7vlh7pdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc01vdXNlT3ZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBpZiAoIV9pc01vdXNlT3Zlcikgey8v54i25YWD57Sg56e75Ye6MC4156eS6ZKf5ZCO54Sm54K55LiN5Zyo77yM5bCx56e76ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpZiAoX3RoaXMuZmluZChcIi5xdW90ZWJveFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgX3RoaXMuZmluZChcIi5xdW90ZWJveFwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL30sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uIChlKSB7Ly/op6blj5HmmL7npLrooYzmg4Vb54i25YWD57Sg56e75YWlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXNpdGVtID0gJCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v56e75YWl55qE5pe25YCZ77yM5YWI5Yig6Zmk5YW25LuW6IKh56Wo55qE5rWu5bGCXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIucXVvdGVib3hcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5kYXRhKFwibWNcIikgIT0gX3RoaXNpdGVtLmF0dHIoXCJkYXRhLW1hcmtldFwiKSArIFwiLlwiICsgX3RoaXNpdGVtLmF0dHIoXCJkYXRhLWNvZGVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc01vdXNlT3ZlciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNb3VzZU92ZXIpIHsvL+enu+WFpTAuM+enkuWQjueEpueCuei/mOWcqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICB3aW5XaWR0aCA9ICQod2luZG93KS53aWR0aCgpIDwgMTAwMCA/IDEwMDAgOiAkKHdpbmRvdykud2lkdGgoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgX3RoaXNXaWR0aCA9IF90aGlzaXRlbS53aWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIF90aGlzSGVpZ2h0ID0gX3RoaXNpdGVtLmhlaWdodCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgc2ggPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHhoID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCB8fCAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0b3BOYXYgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKCQoJyNmaXhNZW51QmFyJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHRvcE5hdiA9IDMzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBsZWZ0ID0gKGUuY2xpZW50WCArIF90aGlzV2lkdGggPiB3aW5XaWR0aCkgPyAkKHdpbmRvdykud2lkdGgoKSAtIF90aGlzV2lkdGggKyB4aCA6IGUuY2xpZW50WCArIHhoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy9sZWZ0ID0gKGUuY2xpZW50WCAtIF90aGlzV2lkdGggPCAwKSA/IGUuY2xpZW50WCArIHhoIDogZS5jbGllbnRYIC0gX3RoaXNXaWR0aCArIHhoICsgMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0b3AgPSAoZS5jbGllbnRZIC0gX3RoaXNIZWlnaHQgLSB0b3BOYXYgPCAwKSA/IGUuY2xpZW50WSArIHNoICsgMTAgOiBlLmNsaWVudFkgKyBzaCAtIDM1O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibGVmdC10b3A6XCIsIFwibGVmdDpcIiArIGxlZnQgKyBcInRvcDpcIiArIHRvcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaWQgPSAncXVvdGUnICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzaXRlbS5maW5kKFwiLnF1b3RlYm94XCIpLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdW90ZWJveEh0bWwgPSAnPGRpdiBpZD1cIicgKyBfaWQgKyAnXCIgY2xhc3M9XCJxdW90ZWJveFwiIGRhdGEtbWM9XCInICsgX3RoaXNpdGVtLmF0dHIoXCJkYXRhLW1hcmtldFwiKSArIFwiLlwiICsgX3RoaXNpdGVtLmF0dHIoXCJkYXRhLWNvZGVcIikgKyAnXCIgc3R5bGU9XCJ6LWluZGV4OicgKyAoX3RpcFpJbmRleCsrKSArICdcIj48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpc2l0ZW0uYXBwZW5kKHF1b3RlYm94SHRtbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpc2l0ZW0ub24oXCJtb3VzZW92ZXJcIiwgXCIucXVvdGVib3hcIiwgZnVuY3Rpb24gKCkgey8v56e75YWl5a2Q5rWu5bGCXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNNb3VzZU92ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzaXRlbS5vbihcIm1vdXNlb3V0XCIsIFwiLnF1b3RlYm94XCIsIGZ1bmN0aW9uICgpIHsvL+inpuWPkemakOiXj+ihjOaDhVvmta7lsYLnp7vlh7pdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXNpdGVtMiA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNNb3VzZU92ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pc01vdXNlT3Zlcikgey8vMC4156eS5ZCO54Sm54K55LiN5ZyoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzaXRlbTIucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ludGVyZmFjZSA9IGNvbmZpZy5wdXNoICsgXCJhcGkvcXQvdWxpc3QubnAvZ2V0P3V0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5JmZpZWxkcz1mMSxmMixmMyxmNCxmMTIsZjEzLGYxNCZzZWNpZHM9XCIgKyBfdGhpc2l0ZW0uYXR0cihcImRhdGEtbWFya2V0XCIpICsgXCIuXCIgKyBfdGhpc2l0ZW0uYXR0cihcImRhdGEtY29kZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogX2ludGVyZmFjZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbnA6IFwiY2JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLmRhdGEuZGlmZlswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YVF1b3RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogKGl0ZW0uZjIgPT09IFwiXCIgfHwgaXRlbS5mMiA9PT0gXCItXCIpID8gXCItXCIgOiBwYXJzZUZsb2F0KGl0ZW0uZjIgLyBNYXRoLnBvdygxMCwgaXRlbS5mMSkpLnRvRml4ZWQoaXRlbS5mMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkZjogaXRlbS5mMyAvIDEwMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemRlOiAoaXRlbS5mNCA9PT0gXCJcIiB8fCBpdGVtLmY0ID09PSBcIi1cIikgPyBcIi1cIiA6IHBhcnNlRmxvYXQoaXRlbS5mNCAvIE1hdGgucG93KDEwLCBpdGVtLmYxKSkudG9GaXhlZChpdGVtLmYxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5mMTQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jOiBpdGVtLmYxMyArIFwiLlwiICsgaXRlbS5mMTIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldDogaXRlbS5mMTMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGl0ZW0uZjEyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jb2xvciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFRdW90ZS56ZGYgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvciA9IFwicmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhUXVvdGUuemRmIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sb3IgPSBcImdyZWVuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFRdW90ZS56ZGYgPSAoKGRhdGFRdW90ZS56ZGYgPT09IFwiXCIgfHwgZGF0YVF1b3RlLnpkZiA9PSBcIi1cIikgPyBcIi1cIiA6IHBhcnNlRmxvYXQoZGF0YVF1b3RlLnpkZikudG9GaXhlZCgyKSArIFwiJVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArIF9pZCkuaHRtbChkYXRhUXVvdGUubmFtZSArIFwi77yaXCIgKyBkYXRhUXVvdGUuY29kZSArIFwiIDxzcGFuIGNsYXNzPSd6aXh1YW5wcmljZSBcIiArIF9jb2xvciArIFwiJz5cIiArIGRhdGFRdW90ZS5wcmljZSArIFwiPC9zcGFuPiA8c3BhbiBjbGFzcz0neml4dWFuemRmIFwiICsgX2NvbG9yICsgXCInPlwiICsgZGF0YVF1b3RlLnpkZiArIFwiPC9zcGFuPiA8c3BhbiBjbGFzcz0neml4dWFuJz48L3NwYW4+XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF9pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR3ID0gX2RvbS5jbGllbnRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGwgPSBfZG9tLm9mZnNldFBhcmVudC5vZmZzZXRMZWZ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHcgKyBkbCArIDQ0ID4gNjcwKSB7Ly80NOaYr+WKoOiHqumAieaIluWIoOiHqumAieeahOWuveW6plxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgX2lkKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWZ0XCI6ICg2NzAgLSBwYXJzZUludChkdyArIGRsICsgNDQpKSArIFwicHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRaWEluZm8oJChcIiNcIiArIF9pZCArIFwiIC56aXh1YW5cIiksIGRhdGFRdW90ZS5tYyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LDMwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiDliJ3lp4vljJboh6rpgInogqHnm7jlhbPkv6Hmga9cclxuICAgICAgICAgICAqIEBwYXJhbSB7Kn0gZG9tIGpRdWVyeURvbSBcclxuICAgICAgICAgICAqIEBwYXJhbSB7Kn0gY29kZSDogqHnpajku6PnoIEgMC4zMDAwNTlcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIGluaXRaWEluZm8oZG9tLCBjb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBhcGl1cmwgPSAnLy9teWZhdm9yLmVhc3Rtb25leS5jb20vdjQvJzsgLy/mraPlvI/njq/looNcclxuICAgICAgICAgICAgdmFyIGFwcGtleSA9ICdkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSc7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBcImFwcGtleT1cIiArIGFwcGtleTtcclxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgnLicsICckJyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZmluZ2VycHJpbnQgPSBjb29raWUuZ2V0KCdxZ3FwX2JfaWQnKSB8fCAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VycGFzc3BvcnQuZ2V0KCkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgYXBpdXJsICs9ICdhbm9ueW13ZWJvdXRlci8nO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zICs9IFwiJmJpZD1cIiArIGZpbmdlcnByaW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXBpdXJsICs9ICd3ZWJvdXRlci8nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+iOt+WPlum7mOiupOWIhue7hOiCoeelqO+8jOajgOa1i+aYr+WQpuWKoOS6huiHqumAiVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiBhcGl1cmwgKyBcImdzYWFuZGNoZWNrP1wiICsgcGFyYW1zICsgXCImY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2M6IGNvZGVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnN0YXRlID09IDAgJiYganNvbi5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmRhdGEuY2hlY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhcInppeHVhbmRlbFwiKS5odG1sKFwiLeiHqumAiVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhcInppeHVhbmRlbFwiKS5odG1sKFwiK+iHqumAiVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb20ub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX0FkZE9yRGVsWlhHID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdHlwZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcyhcInppeHVhbmRlbFwiKSkgey8v5Yig6Ieq6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FkZE9yRGVsWlhHID0gYXBpdXJsICsgXCJkc3o/XCIgKyBwYXJhbXMgKyBcIiZjYj0/XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3R5cGUgPSBcImRlbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsvL+WKoOiHqumAiVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BZGRPckRlbFpYRyA9IGFwaXVybCArIFwiYXN6P1wiICsgcGFyYW1zICsgXCImY2I9P1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90eXBlID0gXCJhZGRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogX0FkZE9yRGVsWlhHLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFjay5zdGF0ZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGUgPT0gXCJhZGRcIikgey8v5Yqg6Ieq6YCJ5oiQ5Yqf77yM5Y+Y5oiQ5Yig6Ieq6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLmFkZENsYXNzKFwieml4dWFuZGVsXCIpLmh0bWwoXCIt6Ieq6YCJXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsvL+WIoOiHqumAieaIkOWKn++8jOWPmOaIkOWKoOiHqumAiVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhcInppeHVhbmRlbFwiKS5odG1sKFwiK+iHqumAiVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYmFjay5tZXNzYWdlXCIsIGJhY2subWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvL+WIneWni+WMluWtl+S9k+Wkp+Wwj1xyXG4gICAgbG9hZEZvbnRTaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IGNvb2tpZS5nZXQoXCJFTV9OZXdzQ29udGVudF9Gb250U2l6ZVwiKTtcclxuICAgICAgICBpZiAoc2l6ZSAhPSBudWxsICYmIHNpemUgIT0gXCJcIiAmJiBzaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCIxMlwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybFwiKS5yZW1vdmVDbGFzcyhcImJnbWlkIGJnYmlnXCIpLmFkZENsYXNzKFwiYmdzbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybGJveCAuZnMxNFwiKS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmFic3RyYWN0IC50eHRcIikuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxMnB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIyOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCIxNVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybFwiKS5yZW1vdmVDbGFzcyhcImJnc21hbGwgYmdiaWdcIikuYWRkQ2xhc3MoXCJiZ21pZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybGJveCAuZnMxNlwiKS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmFic3RyYWN0IC50eHRcIikuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxNXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIzMXB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCIxOFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybFwiKS5yZW1vdmVDbGFzcyhcImJnc21hbGwgYmdtaWRcIikuYWRkQ2xhc3MoXCJiZ2JpZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybGJveCAuZnMxOFwiKS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmFic3RyYWN0IC50eHRcIikuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIzNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi50eHRpbmZvc1wiKS5yZW1vdmVDbGFzcyhcImZvbnRzaXplLWJpZ1wiKS5yZW1vdmVDbGFzcyhcImZvbnRzaXplLXNtYWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIuZnNjdHJsXCIpLnJlbW92ZUNsYXNzKFwiYmdzbWFsbCBiZ2JpZ1wiKS5hZGRDbGFzcyhcImJnbWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIuZnNjdHJsYm94IC5mczE2XCIpLmFkZENsYXNzKFwib25cIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcIm9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIuYWJzdHJhY3QgLnR4dFwiKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnQtc2l6ZVwiOiBcIjE1cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5lLWhlaWdodFwiOiBcIjMxcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOS6i+S7tue7keWumiBcclxuICAgICAqL1xyXG4gICAgYmluZEV2ZW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgLy8g5a2X5L2T5o6n5Yi2XHJcbiAgICAgICAgJChcIiNmc2N0cmxcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbihlKSB7XHJcblx0XHQgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdCAgICB2YXIgX3RoaXMgPSAkKHRoaXMpO1xyXG5cdFx0ICAgIGlmICgkKGUudGFyZ2V0KS5wcm9wKFwidGFnTmFtZVwiKSA9PSBcIlNQQU5cIikge1xyXG5cdFx0ICAgICAgICB2YXIgZnN0eXBlID0gJChlLnRhcmdldCkuZGF0YShcInR5cGVcIik7XHJcblx0XHQgICAgICAgIHN3aXRjaCAoZnN0eXBlKSB7XHJcblx0XHQgICAgICAgICAgICBjYXNlIFwic1wiOlxyXG5cdFx0ICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcImJnbWlkIGJnYmlnXCIpLmFkZENsYXNzKFwiYmdzbWFsbFwiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBjb29raWUuc2V0KFwiRU1fTmV3c0NvbnRlbnRfRm9udFNpemVcIiwgXCIxMlwiLCAzNjUsIFwiLmVhc3Rtb25leS5jb21cIik7XHJcblx0XHQgICAgICAgICAgICAgICAgJChcIi5hYnN0cmFjdCAudHh0XCIpLmNzcyh7XHJcblx0XHQgICAgICAgICAgICAgICAgICAgIFwiZm9udC1zaXplXCI6IFwiMTJweFwiLFxyXG5cdFx0ICAgICAgICAgICAgICAgICAgICBcImxpbmUtaGVpZ2h0XCI6IFwiMjhweFwiXHJcblx0XHQgICAgICAgICAgICAgICAgfSk7XHJcblx0XHQgICAgICAgICAgICAgICAgYnJlYWs7XHJcblx0XHQgICAgICAgICAgICBjYXNlIFwibVwiOlxyXG5cdFx0ICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcImJnc21hbGwgYmdiaWdcIikuYWRkQ2xhc3MoXCJiZ21pZFwiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBjb29raWUuc2V0KFwiRU1fTmV3c0NvbnRlbnRfRm9udFNpemVcIiwgXCIxNVwiLCAzNjUsIFwiLmVhc3Rtb25leS5jb21cIik7XHJcblx0XHQgICAgICAgICAgICAgICAgJChcIi5hYnN0cmFjdCAudHh0XCIpLmNzcyh7XHJcblx0XHQgICAgICAgICAgICAgICAgICAgIFwiZm9udC1zaXplXCI6IFwiMTVweFwiLFxyXG5cdFx0ICAgICAgICAgICAgICAgICAgICBcImxpbmUtaGVpZ2h0XCI6IFwiMzFweFwiXHJcblx0XHQgICAgICAgICAgICAgICAgfSk7XHJcblx0XHQgICAgICAgICAgICAgICAgYnJlYWs7XHJcblx0XHQgICAgICAgICAgICBjYXNlIFwibFwiOlxyXG5cdFx0ICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcImJnc21hbGwgYmdtaWRcIikuYWRkQ2xhc3MoXCJiZ2JpZ1wiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBjb29raWUuc2V0KFwiRU1fTmV3c0NvbnRlbnRfRm9udFNpemVcIiwgXCIxOFwiLCAzNjUsIFwiLmVhc3Rtb25leS5jb21cIik7XHJcblx0XHQgICAgICAgICAgICAgICAgJChcIi5hYnN0cmFjdCAudHh0XCIpLmNzcyh7XHJcblx0XHQgICAgICAgICAgICAgICAgICAgIFwiZm9udC1zaXplXCI6IFwiMThweFwiLFxyXG5cdFx0ICAgICAgICAgICAgICAgICAgICBcImxpbmUtaGVpZ2h0XCI6IFwiMzRweFwiXHJcblx0XHQgICAgICAgICAgICAgICAgfSk7XHJcblx0XHQgICAgICAgICAgICAgICAgYnJlYWs7XHJcblx0XHQgICAgICAgIH07XHJcblx0XHQgICAgICAgICQoZS50YXJnZXQpLmFkZENsYXNzKFwib25cIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcIm9uXCIpO1xyXG5cdFx0ICAgIH07XHJcblxyXG5cdFx0ICAgICQoXCIuZnNjdHJsYm94XCIpLnRvZ2dsZSgpO1xyXG5cclxuXHRcdCAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8v5YmN5b6A6K+E6K665Yy6XHJcbiAgICAgICAgJChcIi5nb3Bpbmx1bnR4dFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCQoXCIjdG9wYm94XCIpLmhhc0NsYXNzKFwidG9wYm94Zml4XCIpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgJChcIiNndWJhQ29tbWVudFwiKS5vZmZzZXQoKS50b3AgLSAkKFwiI3RvcGJveFwiKS5oZWlnaHQoKSAtICQoXCIudG9wLW5hdi13cmFwXCIpLmhlaWdodCgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAkKFwiI2d1YmFDb21tZW50XCIpLm9mZnNldCgpLnRvcCAtICQoXCIjdG9wYm94XCIpLmhlaWdodCgpICogMiAtICQoXCIudG9wLW5hdi13cmFwXCIpLmhlaWdodCgpICogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDngrnotZ5cclxuICAgICAgICAkKFwiI3NoYXJlYm94XCIpLm9uKFwiY2xpY2tcIiwgXCIuYXJ0aWNsZXphblwiLCBmdW5jdGlvbihlKSB7XHJcblx0XHQgICAgaWYgKF9jdG9rZW4gPT0gbnVsbCB8fCBfdXRva2VuID09IG51bGwgfHwgX0d1YmFBcGlIID09IG51bGwpIHtcclxuXHRcdCAgICAgICAgbG9jYXRpb24uaHJlZiA9IFwiaHR0cHM6Ly9wYXNzcG9ydDIuZWFzdG1vbmV5LmNvbS9wdWIvbG9naW4/YmFja3VybD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmKTtcclxuXHRcdCAgICB9IGVsc2Uge1xyXG5cdFx0ICAgICAgICB6YW5PYmouemFuRnVuKGUsICQodGhpcyksIFwiMVwiLCBfTmV3c0lkKTtcclxuXHRcdCAgICB9XHJcblx0XHQgICAgcmV0dXJuIGZhbHNlO1xyXG5cdFx0fSk7XHJcblxyXG4gICAgICAgIC8v5pS26JePXHJcbiAgICAgICAgJChcIiNzaGFyZWJveFwiKS5vbihcImNsaWNrXCIsIFwiLmFydGljbGVzY1wiLCBmdW5jdGlvbihlKSB7XHJcblx0XHQgICAgLy8gdmFyIF90aGlzID0gJCh0aGlzKSwgaGFzY29sbGVjdCA9IGZhbHNlO1xyXG5cdFx0ICAgIGlmIChfY3Rva2VuID09IG51bGwgfHwgX3V0b2tlbiA9PSBudWxsIHx8IF9HdWJhQXBpSCA9PSBudWxsKSB7XHJcblx0XHQgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBcImh0dHBzOi8vcGFzc3BvcnQyLmVhc3Rtb25leS5jb20vcHViL2xvZ2luP2JhY2t1cmw9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZik7XHJcblx0XHQgICAgfSBlbHNlIHtcclxuXHRcdCAgICAgICAgY29sbGVjdE9iai5jb2xsZWN0RnVuKGUsICQodGhpcyksIFwiMVwiLCBfTmV3c0lkKTtcclxuXHRcdCAgICB9XHJcblx0XHQgICAgcmV0dXJuIGZhbHNlO1xyXG5cdFx0fSk7XHJcblxyXG4gICAgICAgIC8vIOWIhuS6q1xyXG4gICAgICAgICQoXCIjZW1zaGFyZXdyYXBcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbihlKSB7XHJcblx0XHQgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHQgICAgJChcIi5xcmltZ2JveFwiKS5oaWRlKCk7XHJcblx0XHQgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwic2hhcmVzXCIpKSB7XHJcblx0XHQgICAgICAgICQoXCIuc2hhcmV3cmFwXCIpLnRvZ2dsZSgpO1xyXG5cdFx0ICAgIH1cclxuXHRcdH0pO1xyXG5cclxuICAgICAgICAvL+S6jOe7tOeggVxyXG4gICAgICAgICQoXCIjcXJjb2RlXCIpLm9uKFwiY2xpY2tcIiwgXCIucXJpY29uXCIsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdCAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdCAgICAkKFwiLnNoYXJld3JhcFwiKS5oaWRlKCk7XHJcblx0XHQgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwicXJpY29uXCIpKSB7XHJcblx0XHQgICAgICAgICQoXCIucXJpbWdib3hcIikudG9nZ2xlKCk7XHJcblx0XHQgICAgfVxyXG5cdFx0fSk7XHJcblxyXG4gICAgICAgIC8vLy8g5rKq5rex5oyH5pWw54K55Ye75YiH5o2i5LqL5Lu2XHJcbiAgICAgICAgLy8kKFwiLnpzaXRlbXNcIikub24oXCJjbGlja1wiLCBcIi56c2l0ZW0+dWxcIiwgZnVuY3Rpb24oKSB7XHJcblx0XHQvLyAgICB2YXIgX3RoaXNkb20gPSAkKHRoaXMpO1xyXG5cclxuXHRcdC8vICAgICQoXCJbb3BlbmltZz0nc2hvdyddXCIpLnBhcmVudChcIi56c2l0ZW1cIikuYW5pbWF0ZSh7XHJcblx0XHQvLyAgICAgICAgICAgIGhlaWdodDogJzQ4cHgnXHJcblx0XHQvLyAgICAgICAgfSxcclxuXHRcdC8vXHQzMDApO1xyXG5cdFx0Ly8gICAgaWYgKHdpbmRvdy5RdW90ZXNob3dEb20gPT0gX3RoaXNkb20ucGFyZW50KFwiLnpzaXRlbVwiKS5kYXRhKFwibWNcIikpIHsvL+W9k+WJjeeCueWHu+eahOaYr+aJk+W8gOeahFxyXG5cdFx0Ly8gICAgICAgIHdpbmRvdy5RdW90ZXNob3dEb20gPSBcImNsb3NlXCI7Ly/kuI3mmK/lvZPliY3nmoTml7blgJnlsLHkuI3kvJrmiZPlvIBcclxuXHRcdC8vICAgICAgICBfdGhpc2RvbS5hdHRyKFwib3BlbmltZ1wiLCBcIlwiKTtcclxuXHRcdC8vICAgIH0gZWxzZSB7XHJcblx0XHQvLyAgICAgICAgX3RoaXNkb20ucGFyZW50KFwiLnpzaXRlbVwiKS5hbmltYXRlKHtcclxuXHRcdC8vICAgICAgICAgICAgaGVpZ2h0OiAnMTgwcHgnXHJcblx0XHQvLyAgICAgICAgfSxcclxuXHRcdC8vXHQgICAgMzAwKTtcclxuXHRcdC8vICAgICAgICBfdGhpc2RvbS5hdHRyKFwib3BlbmltZ1wiLCBcInNob3dcIikucGFyZW50KFwiLnpzaXRlbVwiKS5zaWJsaW5ncygpLmZpbmQoXCJ1bFwiKS5hdHRyKFwib3BlbmltZ1wiLCBcIlwiKTtcclxuXHRcdC8vICAgICAgICB3aW5kb3cuUXVvdGVzaG93RG9tID0gX3RoaXNkb20ucGFyZW50KFwiLnpzaXRlbVwiKS5kYXRhKFwibWNcIik7XHJcblx0XHQvLyAgICB9XHJcbiAgICAgICAgLy99KTtcclxuXHJcbiAgICAgICAgLy8g5rKq5rex5oyH5pWw6byg5qCH5ruR6L+H5YiH5o2i5LqL5Lu2XHJcbiAgICAgICAgJChcIi56c2l0ZW1zXCIpLm9uKFwibW91c2VvdmVyXCIsIFwiLnpzaXRlbT51bFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpc2RvbSA9ICQodGhpcyk7XHJcblxyXG4gICAgICAgICAgICBfdGhpc2RvbS5wYXJlbnQoXCIuenNpdGVtXCIpLmNzcyh7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxODBweCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF90aGlzZG9tLmF0dHIoXCJvcGVuaW1nXCIsIFwic2hvd1wiKS5wYXJlbnQoXCIuenNpdGVtXCIpLnNpYmxpbmdzKCkuY3NzKHtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogJzQ4cHgnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3aW5kb3cuUXVvdGVzaG93RG9tID0gX3RoaXNkb20ucGFyZW50KFwiLnpzaXRlbVwiKS5kYXRhKFwibWNcIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoXCJodG1sXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xyXG5cdFx0ICAgIC8v5YiG5LqrXHJcblx0XHQgICAgdmFyIHNoYXJlYm94ID0gJChlLnRhcmdldCkucGFyZW50cyhcIiNlbXNoYXJld3JhcFwiKTtcclxuXHRcdCAgICBpZiAoIXNoYXJlYm94Lmxlbmd0aCkge1xyXG5cdFx0ICAgICAgICAkKFwiLnNoYXJld3JhcFwiKS5oaWRlKCk7XHJcblx0XHQgICAgfTtcclxuXHRcdCAgICAvL+S6jOe7tOeggVxyXG5cdFx0ICAgIHZhciBxcmJveCA9ICQoZS50YXJnZXQpLnBhcmVudHMoXCIjcXJjb2RlXCIpO1xyXG5cdFx0ICAgIGlmICghcXJib3gubGVuZ3RoKSB7XHJcblx0XHQgICAgICAgICQoXCIucXJpbWdib3hcIikuaGlkZSgpO1xyXG5cdFx0ICAgIH07XHJcblx0XHQgICAgLy/lupXpg6jliIbkuqtcclxuXHRcdCAgICB2YXIgd3hib3ggPSAkKGUudGFyZ2V0KS5wYXJlbnRzKFwiI3NoYXJlYm90dG9tXCIpO1xyXG5cdFx0ICAgIGlmICghd3hib3gubGVuZ3RoKSB7XHJcblx0XHQgICAgICAgICQoXCIud3hzaGFyZVwiKS5oaWRlKCk7XHJcblx0XHQgICAgfTtcclxuXHRcdCAgICAvL+W6lemDqOWFs+azqFxyXG5cdFx0ICAgIHZhciBnemJveCA9ICQoZS50YXJnZXQpLnBhcmVudHMoXCIjZ3VhbnpodVwiKTtcclxuXHRcdCAgICBpZiAoIWd6Ym94Lmxlbmd0aCkge1xyXG5cdFx0ICAgICAgICAkKFwiLnd4Z3pib3hcIikuaGlkZSgpO1xyXG5cdFx0ICAgIH07XHJcblx0XHQgICAgLy/lrZfkvZPmjqfliLZcclxuXHRcdCAgICB2YXIgZ3pib3ggPSAkKGUudGFyZ2V0KS5wYXJlbnRzKFwiI2ZzY3RybFwiKTtcclxuXHRcdCAgICBpZiAoIWd6Ym94Lmxlbmd0aCkge1xyXG5cdFx0ICAgICAgICAkKFwiLmZzY3RybGJveFwiKS5oaWRlKCk7XHJcblx0XHQgICAgfTtcclxuXHJcblx0XHQgICAgLy/pobbpg6jlvq7kv6HliIbkuqvkuoznu7TnoIFcclxuXHRcdCAgICB2YXIgdG9wd3hib3ggPSAkKGUudGFyZ2V0KS5wYXJlbnRzKFwiI3d4cXJjb2RlYm94XCIpO1xyXG5cdFx0ICAgIGlmICghdG9wd3hib3gubGVuZ3RoKSB7XHJcblx0XHQgICAgICAgICQoXCIud3hxcmNvZGVib3hcIikuaGlkZSgpO1xyXG5cdFx0ICAgIH07XHJcblxyXG5cdFx0fSk7XHJcblxyXG4gICAgICAgIC8vIOWktOmDqOW+ruS/oeWIhuS6q+S6i+S7tumHjeWGmVxyXG4gICAgICAgICQoXCIjc2hhcmVpdGVtcyA+IC5lbXNoYXJlMjAyMF9pY29uX3dlaXhpblwiKS51bmJpbmQoXCJjbGlja1wiKTtcclxuICAgICAgICB2YXIgd3hxcmNvZGVib3hzdHIgPSBcIjxkaXYgaWQ9J3d4cXJjb2RlYm94JyBjbGFzcz0nd3hxcmNvZGVib3gnPjxzcGFuIGNsYXNzPSdhcnJvd3JpZ2h0Jz48L3NwYW4+PGRpdiBjbGFzcz0naW1nYm94Jz48ZGl2IGNsYXNzPSdxcmltZycgaWQ9J3dhcHFyY29kZTUnPjwvZGl2PjwvZGl2PjxwPuS9v+eUqOW+ruS/oeaJq+S4gOaJqzwvcD48cD7liIbkuqvmlofnq6DliLDmgqjnmoTmnIvlj4vlnIg8L3A+PC9kaXY+XCI7XHJcbiAgICAgICAgJChcIiNzaGFyZWl0ZW1zXCIpLmFwcGVuZCgkKHd4cXJjb2RlYm94c3RyKSk7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAkKFwiI3NoYXJlaXRlbXMgLmVtc2hhcmUyMDIwX2ljb25fd2VpeGluXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICQoXCIjc2hhcmVpdGVtc1wiKS5maW5kKFwiI3d4cXJjb2RlYm94XCIpLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZigkKFwiI3d4cXJjb2RlYm94XCIpLmNzcyhcImRpc3BsYXlcIikgPT0gXCJibG9ja1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCgnPGltZyBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgc3JjPVwiaHR0cHM6Ly9nYmFwaS5lYXN0bW9uZXkuY29tL3NoYXJlb3B0L1dlYi9XZWJfU2hhcmUuZ2lmP3Bvc3RpZD0nK19OZXdzSWQrJyZ0eXBlPTEmc2hhcmVUeXBlPTMmcGxhdD1XZWImcHJvZHVjdD1OZXdzJnZlcnNpb249MTAwJmRldmljZWlkPScrKG5ldyBEYXRlKCkpLmdldFRpbWUoKSsnJmN0b2tlbj0nK2Nvb2tpZS5nZXQoXCJjdFwiKSsnJnV0b2tlbj0nK2Nvb2tpZS5nZXQoXCJ1dFwiKSsnXCIgLz4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICQoXCIuZW1zaGFyZTIwMjBfaWNvbl9ndWJhXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8aW1nIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBzcmM9XCJodHRwczovL2diYXBpLmVhc3Rtb25leS5jb20vc2hhcmVvcHQvV2ViL1dlYl9TaGFyZS5naWY/cG9zdGlkPScrX05ld3NJZCsnJnR5cGU9MSZzaGFyZVR5cGU9MCZwbGF0PVdlYiZwcm9kdWN0PU5ld3MmdmVyc2lvbj0xMDAmZGV2aWNlaWQ9JysobmV3IERhdGUoKSkuZ2V0VGltZSgpKycmY3Rva2VuPScrY29va2llLmdldChcImN0XCIpKycmdXRva2VuPScrY29va2llLmdldChcInV0XCIpKydcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJChcIi5lbXNoYXJlMjAyMF9pY29uX3dlaWJvXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8aW1nIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBzcmM9XCJodHRwczovL2diYXBpLmVhc3Rtb25leS5jb20vc2hhcmVvcHQvV2ViL1dlYl9TaGFyZS5naWY/cG9zdGlkPScrX05ld3NJZCsnJnR5cGU9MSZzaGFyZVR5cGU9MiZwbGF0PVdlYiZwcm9kdWN0PU5ld3MmdmVyc2lvbj0xMDAmZGV2aWNlaWQ9JysobmV3IERhdGUoKSkuZ2V0VGltZSgpKycmY3Rva2VuPScrY29va2llLmdldChcImN0XCIpKycmdXRva2VuPScrY29va2llLmdldChcInV0XCIpKydcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJChcIi5lbXNoYXJlMjAyMF9pY29uX3F6b25lXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8aW1nIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBzcmM9XCJodHRwczovL2diYXBpLmVhc3Rtb25leS5jb20vc2hhcmVvcHQvV2ViL1dlYl9TaGFyZS5naWY/cG9zdGlkPScrX05ld3NJZCsnJnR5cGU9MSZzaGFyZVR5cGU9NCZwbGF0PVdlYiZwcm9kdWN0PU5ld3MmdmVyc2lvbj0xMDAmZGV2aWNlaWQ9JysobmV3IERhdGUoKSkuZ2V0VGltZSgpKycmY3Rva2VuPScrY29va2llLmdldChcImN0XCIpKycmdXRva2VuPScrY29va2llLmdldChcInV0XCIpKydcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCA1MDApO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGVtc2hhcmVGdW4gIT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBlbXNoYXJlRnVuLnFyY29kZSh7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwLC8vIOS6jOe7tOeggeWuveW6piDlj6/pgIkg6buY6K6kMTM1XHJcbiAgICAgICAgICAgICAgICBjb2xvckRhcms6IFwiIzAwMDAwMFwiLCAvL+S6jOe7tOeggeminOiJsiDlj6/pgIkg6buY6K6k6buRXHJcbiAgICAgICAgICAgICAgICBjb2xvckxpZ2h0OiBcIiNmZmZmZmZcIiwvL+iDjOaZr+iJsiDlj6/pgIkg6buY6K6k55m9XHJcbiAgICAgICAgICAgICAgICBsb2dvc3JjOiBcImh0dHBzOi8vZzEuZGZjZncuY29tL2c0LzIwMjAwMy8yMDIwMDMxODE0MDQzNi5naWZcIiwvLyDkuoznu7TnoIFsb2dv5L+h5oGvIOWPr+mAiVvkuI3lu7rorq7liqDmraTlj4LmlbBdIOm7mOiupOaciWxvZ28g5YC85Li6XCJub25lXCLml7bml6Bsb2dvXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBfX1dBUFVSTCxcclxuICAgICAgICAgICAgICAgIGRvbWlkOiBcIndhcHFyY29kZTVcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOW6lemDqOW+ruS/oeWIhuS6q+S6i+S7tumHjeWGmVxyXG4gICAgICAgICQoXCIjc2hhcmVib3R0b20gLmVtc2hhcmUyMDIwX2ljb25fd2VpeGluXCIpLnVuYmluZChcImNsaWNrXCIpO1xyXG4gICAgICAgICQoXCIjc2hhcmVib3R0b21cIikub24oXCJjbGlja1wiLCBcIi5lbXNoYXJlMjAyMF9pY29uX3dlaXhpblwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJChcIiNzaGFyZWJvdHRvbVwiKS5maW5kKFwiLnd4c2hhcmVcIikudG9nZ2xlKCk7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYoJChcIi53eHNoYXJlXCIpLmNzcyhcImRpc3BsYXlcIikgPT0gXCJibG9ja1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8aW1nIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBzcmM9XCJodHRwczovL2diYXBpLmVhc3Rtb25leS5jb20vc2hhcmVvcHQvV2ViL1dlYl9TaGFyZS5naWY/cG9zdGlkPScrX05ld3NJZCsnJnR5cGU9MSZzaGFyZVR5cGU9MyZwbGF0PVdlYiZwcm9kdWN0PU5ld3MmdmVyc2lvbj0xMDAmZGV2aWNlaWQ9JysobmV3IERhdGUoKSkuZ2V0VGltZSgpKycmY3Rva2VuPScrY29va2llLmdldChcImN0XCIpKycmdXRva2VuPScrY29va2llLmdldChcInV0XCIpKydcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuXHRcdH0pO1xyXG5cclxuICAgICAgICAvL+W6lemDqOW+ruS/oeWFs+azqFxyXG4gICAgICAgICQoXCIjZ3VhbnpodVwiKS5vbihcImNsaWNrXCIsIFwiLmd6LXd4XCIsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdCAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0ICAgICQoXCIud3hnemJveFwiKS50b2dnbGUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQub25rZXlkb3duPWZ1bmN0aW9uKGV2KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG9FdmVudCA9IGV2IHx8IGV2ZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKG9FdmVudC5rZXlDb2RlID09IDMzKSB7Ly9wYWdldXBcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2Nyb2xsWSAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHdpbmRvdy5zY3JvbGxZIC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCArICQoXCIudG9wLW5hdi13cmFwXCIpLmhlaWdodCgpICsgJChcIi50b3Bib3hcIikuaGVpZ2h0KCkgKyAzMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob0V2ZW50LmtleUNvZGUgPT0gMzQpIHsvL3BhZ2Vkb3duXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgd2luZG93LnNjcm9sbFkgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gJChcIi50b3AtbmF2LXdyYXBcIikuaGVpZ2h0KCkgLSAkKFwiLnRvcGJveFwiKS5oZWlnaHQoKSAtIDMwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKFwiLm5ld3N0aXRsZWRvd25cIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7Ly/lsZXlvIDngrnlh7vkuovku7ZcclxuICAgICAgICAgICAgdGhhdC5pc0RlZmF1bHRTaG93VGl0bGUgPSBcInRydWVcIjtcclxuICAgICAgICAgICAgY29va2llLnNldChcImNvbnRlbnRfc2hvd3RpdGxlXCIsIFwidHJ1ZVwiLCAzNjUsIFwiLmVhc3Rtb25leS5jb21cIik7XHJcbiAgICAgICAgICAgIHRoYXQuaGlkZURvd24oKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcIi5uZXdzdGl0bGV1cFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHsvL+aUtui1t+eCueWHu+S6i+S7tlxyXG4gICAgICAgICAgICB0aGF0LmlzRGVmYXVsdFNob3dUaXRsZSA9IFwiZmFsc2VcIjtcclxuICAgICAgICAgICAgY29va2llLnNldChcImNvbnRlbnRfc2hvd3RpdGxlXCIsIFwiZmFsc2VcIiwgMzY1LCBcIi5lYXN0bW9uZXkuY29tXCIpO1xyXG4gICAgICAgICAgICB0aGF0LnNob3dEb3duKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfSxcclxuICAgIC8vIOeDreaQnOWPiua7muWKqFxyXG4gICAgZ2V0SG90TmV3czogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXHJcbiAgICAgICAgICAgIHVybDogJy8vc2VhcmNoYWRhcHRlci5lYXN0bW9uZXkuY29tL2FwaS9Qb3B1bGFyS2V5L2dldD90b2tlbj1CMjJEMTc4QjEyQTIyMTAyRDlEOEEwQ0U0RDJBQzgyNCZjb3VudD0yMCZjYj1kYXRhJyxcclxuICAgICAgICAgICAganNvbnBDYWxsYmFjazogXCJkYXRhXCIsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IFwiXCIsXHJcblx0XHRcdFx0XHRsaXN0ID0gcmVzLkRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gKz0gJzxhIGhyZWY9XCInICsgbGlzdFtpXS5KdW1wQWRkcmVzcyArICdcIiB0cmFja2VyLWV2ZW50Y29kZT1cIldlYl9wZHp3X3JzdGdcIiB0cmFja2VyLWV4dGluZm89XCJzb3VyY2U6bmV3c3JpZ2h0O1wiPicgKyBsaXN0W2ldLktleVBocmFzZSArICc8L2E+JztcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjaG90bmV3c1wiKS5hcHBlbmQoJChpdGVtKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGhvdFNlYXJjaFNjcm9sbC5pbml0KCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLy/nhKbngrnkuJPpopjmu5rliqjljLpcclxuICAgIGluaXRSRFRKOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXHJcbiAgICAgICAgICAgIHVybDogJy8vbGlzdC5sdmIuZWFzdG1vbmV5LmNvbS9MVkIvYXBpL1JvYWRzaG93L0d1YmFCYW5uZXI/ZGV2aWNlX2lkPTEyMyZ2ZXJzaW9uPTEmcGxhdD13ZWImcHJvZHVjdD1HdWJhJm5ldHdvcms9d2lmaSZjdG9rZW49JnV0b2tlbj0mY2FsbGJhY2s9PycsXHJcbiAgICAgICAgICAgIC8vanNvbnBDYWxsYmFjazogXCJkYXRhXCIsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfaHRtbCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHJlcy5kYXRhLmNvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1CaWcgPSByZXMuZGF0YS5jb2x1bW5zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqIGluIGl0ZW1CaWcuY29sdW1uX2RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbUJpZy5jb2x1bW5fZGF0YVtqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb3ZlciAhPSBcIlwiICYmIGl0ZW0ubmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9saW5rID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwi6K6/6LCIXCIgPT0gaXRlbUJpZy5jb2x1bW5fbmFtZSB8fCBcIuivvuWgglwiID09IGl0ZW1CaWcuY29sdW1uX25hbWUgfHwgXCLlsI/op4bpopFcIiA9PSBpdGVtQmlnLmNvbHVtbl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9saW5rID0gJ2h0dHBzOi8vcm9hZHNob3cuZWFzdG1vbmV5LmNvbS96dy8nICsgaXRlbS5jZmhfYXJ0X2NvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xpbmsgPSAnaHR0cHM6Ly9yb2Fkc2hvdy5lYXN0bW9uZXkuY29tL2x1eWFuLycgKyBpdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGxpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJyArIF9saW5rICsgJ1wiIGNsYXNzPVwiaW1nXCIgdGl0bGU9XCInICsgaXRlbS5uYW1lICsgJ1wiPic7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfY292ZXJMaW5rID0gaXRlbS5jb3Zlci5yZXBsYWNlKFwiaHR0cDovL1wiLCBcImh0dHBzOi8vXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfY292ZXJUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvdmVyVGFnLmhyZWYgPSBfY292ZXJMaW5rO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY292ZXJUYWcuaG9zdG5hbWUgPT0gXCJlbWF2LWNvcy5sdmIuZWFzdG1vbmV5LmNvbVwiIHx8IF9jb3ZlclRhZy5ob3N0bmFtZSA9PSBcImVtYXYtMTI1MjAzMzI2NC5jb3MuYXAtY2hvbmdxaW5nLm15cWNsb3VkLmNvbVwiIHx8IF9jb3ZlclRhZy5ob3N0bmFtZSA9PSBcImVtYXYtMTI1MjAzMzI2NC5jb3MuYWNjZWxlcmF0ZS5teXFjbG91ZC5jb21cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvdmVyVGFnLnNlYXJjaC5pbmRleE9mKFwiP1wiKSA8IDApIHsvL+ayoeaciVwiP1wi5Yqg5Y+C5pWwXCI/aW1hZ2VNb2dyMi90aHVtYm5haWwvNDAweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY292ZXJMaW5rID0gX2NvdmVyTGluayArIFwiP2ltYWdlTW9ncjIvdGh1bWJuYWlsLzQwMHhcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgPGltZyBhbHQ9XCJcIiBzcmM9XCInICsgX2NvdmVyTGluayArICdcIiAvPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgPGRpdiBjbGFzcz1cInBsYXlcIj48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPC9hPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJyArIF9saW5rICsgJ1wiIGNsYXNzPVwidGl0bGVcIj4nICsgaXRlbS5uYW1lICsgJzwvYT4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICc8L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNzY3JvbGx2aWRlcyB1bFwiKS5odG1sKF9odG1sKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi5waWNfc3dpcGVyXCIpLnNsaWRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0Q2VsbDogXCIuaGQgdWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkNlbGw6IFwiLmJkIHVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdDogXCJsZWZ0TG9vcFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BhZ2U6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH0sXHJcbiAgICBzaG93RG93bjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoXCIjdG9wYm94YmFrXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiLnRvcGJveFwiKS5yZW1vdmVDbGFzcyhcInRvcGJveGZpeFwiKTtcclxuXHJcbiAgICAgICAgJChcIi5uZXdzdGl0bGVkb3duXCIpLnNob3coKTtcclxuICAgIH0sXHJcbiAgICBoaWRlRG93bjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoXCIjdG9wYm94YmFrXCIpLnNob3coKTtcclxuICAgICAgICAkKFwiLnRvcGJveFwiKS5hZGRDbGFzcyhcInRvcGJveGZpeFwiKTtcclxuXHJcbiAgICAgICAgJChcIi5uZXdzdGl0bGVkb3duXCIpLmhpZGUoKTtcclxuICAgIH0sXHJcbiAgICBpc0RlZmF1bHRTaG93VGl0bGU6IGNvb2tpZS5nZXQoJ2NvbnRlbnRfc2hvd3RpdGxlJykgfHwgXCJ0cnVlXCIsXHJcbiAgICAvLyDlm7rpobY6XHJcbiAgICBndWRpbmdGdW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNtID0gJChcIiN0b3Bib3hcIik7XHJcbiAgICAgICAgdmFyIF9nYm9mZnNldHRvcCA9ICQoXCIjZ3ViYUNvbW1lbnRcIikub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIHZhciBfb2ZmdG9wID0gc20ub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIHZhciBfaCA9IHNtLmhlaWdodCgpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrRml4VGl0bGUoKSB7XHJcbiAgICAgICAgICAgIHRoYXQuaXNEZWZhdWx0U2hvd1RpdGxlID0gY29va2llLmdldCgnY29udGVudF9zaG93dGl0bGUnKSB8fCBcInRydWVcIjtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPj0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsdG9wID0gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsdG9wID4gX29mZnRvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmlzRGVmYXVsdFNob3dUaXRsZSA9PSBcInRydWVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3RvcGJveGJha1wiKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWlnaHRcIjogX2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuaGlkZURvd24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGx0b3AgPD0gX29mZnRvcCArIF9oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLm5ld3N0aXRsZXVwXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubmV3c3RpdGxldXBcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbHRvcCA8PSBfb2ZmdG9wICsgX2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubmV3c3RpdGxlZG93blwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNob3dEb3duKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjdG9wYm94YmFrXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLnRvcGJveFwiKS5yZW1vdmVDbGFzcyhcInRvcGJveGZpeFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi5uZXdzdGl0bGVkb3duXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICQoXCIjdG9wYm94YmFrXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICQoXCIudG9wYm94XCIpLnJlbW92ZUNsYXNzKFwidG9wYm94Zml4XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICQoXCIubmV3c3RpdGxlZG93blwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8kKHdpbmRvdykuc2Nyb2xsKGNoZWNrRml4VGl0bGUpO1xyXG4gICAgICAgIC8vJCh3aW5kb3cpLnJlc2l6ZShjaGVja0ZpeFRpdGxlKTtcclxuICAgIH0sXHJcbiAgICAvL+ivhOiuuuWMuuWfn1xyXG4gICAgaW5pdFBpbkx1bjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChfSVNDb21tZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX0NNU0hKID09IFwidGVzdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmVkaXRvckFuZExpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZTogJyNndWJhQ29tbWVudCcsIGlkOiBfTmV3c0lkLCB0eXBlOiAxLCAndG9wTmF2SCc6IDMwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VwbG9hZFVybDogXCIvYS91cGxvYWRfY2FsbGJhY2svdXBsb2FkX2NhbGxiYWNrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudjogJ3Rlc3QnXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5lZGl0b3JBbmRMaXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2U6ICcjZ3ViYUNvbW1lbnQnLCBpZDogX05ld3NJZCwgdHlwZTogMSwgJ3RvcE5hdkgnOiAzMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLywgdXBsb2FkVXJsOiBcIi9hL3VwbG9hZF9jYWxsYmFjay91cGxvYWRfY2FsbGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbiQoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy92YXIgX19LSFdaID0gXCLkuLvlipvotYTph5HliqDku5PlkI3ljZXlrp7ml7bmm7TmlrDvvIxBUFDlhoXlhY3otLnnnIsmZ3Q7Jmd0O1wiOyAvL+S4u+WKqOaPkuWFpeeahOW8gOaIt+aWh+Wtl1xyXG4gICAgICAgIC8vdmFyIF9fS0hMSiA9ICc8cD7jgIDjgIA8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly96cWhkLmVhc3Rtb25leS5jb20vSHRtbC9hZ2hkL3BjLzIwMTcwOTE4L2h0bWwvYWN0aXZpdHkyLmh0bWxcIj4nICsgX19LSFdaICsgJzwvYT48L3A+JztcclxuICAgICAgICBpZiAoJChcIiNDb250ZW50Qm9keVwiKS5odG1sKCkuaW5kZXhPZihfX0tIV1opIDwgMCkgeyAvL+S4jeWMheWQqyBfX0tIV1pcclxuICAgICAgICAgICAgdmFyIF9IUUxlbmd0aCA9ICQoXCIjQ29udGVudEJvZHkgLkVtSW1hZ2VSZW1hcmtcIikubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoX0hRTGVuZ3RoID4gMCkgeyAvL+WmguaenOacieihjOaDheWbvlxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI0NvbnRlbnRCb2R5IC5FbUltYWdlUmVtYXJrXCIpLmVxKF9IUUxlbmd0aCAtIDEpLnBhcmVudCgncCcpLmFmdGVyKF9fS0hMSik7IC8v5pyJ54K557uV77yM6ZyA5rGC5bCx5piv6L+Z5qC377yM44CQ5Zyo5pyA5ZCO5LiA5byg6KGM5oOF5Zu+55qE54i257qncOagh+etvuWQjOe6p+eahOWQjumdouWKoOWFpeasoeaOqOW5v+OAkVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQoXCIjQ29udGVudEJvZHkgLmItcmV2aWV3XCIpLmxlbmd0aCA+IDApIHsgLy/msqHmnInooYzmg4Xlm77vvIzkvYbmmK/mnInmkZjopoFcclxuICAgICAgICAgICAgICAgICQoXCIjQ29udGVudEJvZHkgLmItcmV2aWV3XCIpLmFmdGVyKF9fS0hMSik7IC8v5o+S5Zyo5q2k5YWD57Sg5LmL5ZCO77yI5ZCM57qn77yJXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJChcIiNDb250ZW50Qm9keSAueXVhbmJpYW90aVwiKS5sZW5ndGggPiAwKSB7IC8v5rKh5pyJ6KGM5oOF5Zu+77yM5rKh5pyJ5pyJ5pGY6KaB77yM5L2G5piv5pyJ5Y6f5qCH6aKYXHJcbiAgICAgICAgICAgICAgICAkKFwiI0NvbnRlbnRCb2R5IC55dWFuYmlhb3RpXCIpLmFmdGVyKF9fS0hMSik7IC8v5o+S5Zyo5q2k5YWD57Sg5LmL5ZCO77yI5ZCM57qn77yJXHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8v5rKh5pyJ6KGM5oOF5Zu+77yM5rKh5pyJ5pGY6KaB77yM5o+S5Zyo5paH56ug5pyA5YmN6Z2iXHJcbiAgICAgICAgICAgICAgICAkKFwiI0NvbnRlbnRCb2R5XCIpLnByZXBlbmQoX19LSExKKTsgLy/lhoXpg6jmnIDliY3pnaLliqDlhaXmraTlhYPntKBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCQudHJpbSgkKFwiI0NvbnRlbnRCb2R5XCIpLnRleHQoKSkubGVuZ3RoID4gMTAwMCkgeyAvL+Wkp+S6jjEwMDDlrZfvvIzmiY3mmL7npLrkuIvpnaLnmoTmloflrZfpk75cclxuICAgICAgICAgICAgICAgIGlmICgkKFwiI0NvbnRlbnRCb2R5IHAuZW1fbWVkaWFcIikubGVuZ3RoID4gMCkgeyAvL+W6lemDqOacieaWh+eroOadpea6kFxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjQ29udGVudEJvZHkgcC5lbV9tZWRpYVwiKS5iZWZvcmUoX19LSExKKTsgLy/mj5LlnKjmraTlhYPntKDkuYvliY3vvIjlkIznuqfvvIlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJChcIiNDb250ZW50Qm9keSBwLnJlcy1lZGl0XCIpLmxlbmd0aCA+IDApIHsgLy/mnInotKPku7vnvJbovpFcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI0NvbnRlbnRCb2R5IHAucmVzLWVkaXRcIikuYmVmb3JlKF9fS0hMSik7IC8v5o+S5Zyo5q2k5YWD57Sg5LmL5YmN77yI5ZCM57qn77yJXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvL+ayoeacieW6lemDqOadpea6kO+8jOS5n+ayoeaciei0o+S7u+e8lui+kVxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjQ29udGVudEJvZHlcIikuYXBwZW5kKF9fS0hMSik7IC8v5YaF6YOo5pyr5bC+5Yqg5YWl5q2k5YWD57SgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgJChcIi5qdWJhb1wiKS5hdHRyKFwiaHJlZlwiLCAkKFwiLmp1YmFvXCIpLmF0dHIoXCJocmVmXCIpICsgXCImbmV3c3VybD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZikpO1xyXG5cclxuICAgICAgICAvL+i1hOiur+ato+aWh+aUr+aMgeeCueWHu+afpeeci+WOn+WbvlxyXG4gICAgICAgICQoXCIjQ29udGVudEJvZHkgaW1nXCIpLndyYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZShcIm9yZ2luaWFsX3NyY1wiKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8YSBocmVmPVwiJyArIHRoaXMuZ2V0QXR0cmlidXRlKFwib3JnaW5pYWxfc3JjXCIpICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPjwvYT4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy/mraPmlofpobXlop7liqDmnLrkvJrmlofnq6DmqKHlnZflip/og71cclxuICAgICAgICB2YXIgX29wX2lkcyA9IFtdO1xyXG4gICAgICAgICQoXCIjQ29udGVudEJvZHkgLmVtX29wX25ld3NcIikuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgdmFyIF9vcF9pZCA9IF90aGlzLmF0dHIoXCJvcF9pZFwiKTtcclxuICAgICAgICAgICAgX29wX2lkcy5wdXNoKF9vcF9pZCk7XHJcbiAgICAgICAgICAgIF90aGlzLmFkZENsYXNzKFwiZW1fb3BfbmV3c1wiICsgX29wX2lkKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2luaXRPUEhUTUwoanNvbikge1xyXG4gICAgICAgICAgICB2YXIgX29wSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoanNvbi5saW5rcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBfb3BIVE1MICs9ICc8ZGl2IGNsYXNzPVwib3BfaXRlbVwiPic7XHJcbiAgICAgICAgICAgICAgICBfb3BIVE1MICs9ICc8ZGl2IGNsYXNzPVwib3BfdGl0bGVcIiBzdHlsZT1cImNvbG9yOicgKyBqc29uLnRpdGxlX2NvbG9yICsgJ1wiPicgKyBqc29uLnRpdGxlICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICBfb3BIVE1MICs9ICc8dWw+JztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5saW5rcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIF9vcEhUTUwgKz0gJzxsaT48YSBocmVmPVwiJyArIGpzb24ubGlua3NbaV0udXJsICsgJ1wiPicgKyBqc29uLmxpbmtzW2ldLnRleHQgKyAnPC9hPjwvbGk+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF9vcEhUTUwgKz0gJzwvdWw+JztcclxuICAgICAgICAgICAgICAgIF9vcEhUTUwgKz0gJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29wSFRNTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX29wSFRNTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF9vcF9pZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgLy91cmw6IFwiLy9uZXdzaW5mby50ZXN0LmVtYXBkLmNvbS9cclxuICAgICAgICAgICAgICAgIHVybDogXCIvL25ld3NpbmZvLmVhc3Rtb25leS5jb20va3VhaXh1bi92Mi9hcGkvY29udGVudC9vcF9tb2R1bGVzP29wX2lkcz1cIiArIF9vcF9pZHMudG9TdHJpbmcoKSArIFwiJmNhbGxiYWNrPT9cIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihqc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLlJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX29wX2lkID0ganNvbi5SZXN1bHRbaV0ub3BfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9ICQoXCIjQ29udGVudEJvZHkgLmVtX29wX25ld3NcIiArIF9vcF9pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfb3BIVE1MID0gX2luaXRPUEhUTUwoanNvbi5SZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wSFRNTC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5odG1sKF9vcEhUTUwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgenh6d09iai5pbml0KCk7XHJcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvbmV3cy5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAyIiwidmFyIHZpZGVvaWQgPSBcIlwiO1xyXG52YXIgYXBwYXJyID0gbmV3IEFycmF5KCk7XHJcbnZhciBfdWlkID0gZ2V0dWlkKFwidWlkYWxcIik7XHJcbmZ1bmN0aW9uIGdldHVpZCh0KSB7IHZhciBlID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoXCIoXnwgKVwiICsgdCArIFwiPShbXjtdKikoO3wkKVwiKSk7IHJldHVybiBudWxsICE9IGUgPyBkZWNvZGVVUklDb21wb25lbnQoZVsyXSkgOiBudWxsIH1cclxuaWYgKF91aWQgJiYgX3VpZC5sZW5ndGggPj0gMTYpIHtcclxuICAgIF91aWQgPSBfdWlkLnN1YnN0cmluZygwLCAxNik7XHJcbn0gZWxzZSB7XHJcbiAgICBfdWlkID0gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFZpZGVvKF92aWRlb0lkLCBfdmlkZW9XaWR0aCwgX3ZpZGVvSGVpZ2h0LCBfdmlkZW9UeXBlLCBfdmlkZW9WYWx1ZSwgX3ZpZGVvSXNQb3N0ZXIsIF92aWRlb1Bvc3Rlcikge1xyXG4gICAgdmFyIHZpZGVvaXRlbSA9IGVtYXYoX3ZpZGVvSWQsIHtcclxuICAgICAgICB3aWR0aDogX3ZpZGVvV2lkdGgsLy/mkq3mlL7lmajljLrln5/lrr3luqbvvIzljZXkvY3lg4/ntKDvvIzmjInpnIDorr7nva7vvIzlj6/pgJrov4cgQ1NTIOaOp+WItuaSreaUvuWZqOWwuuWvuOOAglxyXG4gICAgICAgIGhlaWdodDogX3ZpZGVvSGVpZ2h0LC8v5pKt5pS+5Zmo5Yy65Z+f6auY5bqm77yM5Y2V5L2N5YOP57Sg77yM5oyJ6ZyA6K6+572u77yM5Y+v6YCa6L+HIENTUyDmjqfliLbmkq3mlL7lmajlsLrlr7jjgIJcclxuICAgICAgICBjb250cm9sczogdHJ1ZSwvL+aYr+WQpuaYvuekuuaSreaUvuWZqOeahOaOp+WItuagj++8jOm7mOiupHRydWVcclxuICAgICAgICBwb3N0ZXI6IF92aWRlb1Bvc3RlciwvL+iuvue9ruWwgemdouWbvueJh+WujOaVtOWcsOWdgFxyXG4gICAgICAgIHBvc3RlckltYWdlOiBfdmlkZW9Jc1Bvc3RlciwvL+aYr+WQpuaYvuekuuWwgemdolxyXG4gICAgICAgIGF1dG9wbGF5OiBmYWxzZSwvL+aYr+WQpuiHquWKqOaSreaUvu+8jOm7mOiupGZhbHNlXHJcbiAgICAgICAgbG9vcDogZmFsc2UsLy/mmK/lkKblvqrnjq/mkq3mlL7vvIzpu5jorqRmYWxzZVxyXG4gICAgICAgIG11dGVkOiBmYWxzZSwvL+aYr+WQpumdmemfs+aSreaUvu+8jOm7mOiupGZhbHNlXHJcbiAgICAgICAgcHJlbG9hZDogXCJhdXRvXCIsLy/mmK/lkKbpnIDopoHpooTliqDovb3vvIzmnIkgMyDkuKrlsZ7mgKdcImF1dG9cIu+8jFwibWV0YVwi77yMXCJub25lXCIg77yM56e75Yqo56uv55Sx5LqO57O757uf6ZmQ5Yi277yM6K6+572uIGF1dG8g5peg5pWI44CC6buY6K6kYXV0b1xyXG4gICAgICAgIGNvbnRyb2xCYXI6IHsvL+iuvue9ruaOp+WItuagj+WxnuaAp+eahOWPguaVsOe7hOWQiFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xyXG4gICAgICAgICAgICAgICAgXCJwbGF5VG9nZ2xlXCIsXHJcbiAgICAgICAgICAgICAgICBcInZvbHVtZVBhbmVsXCJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgcGxheVRvZ2dsZTogdHJ1ZSwvL+aYr+WQpuaYvuekuuaSreaUvuOAgeaaguWBnOWIh+aNouaMiemSrlxyXG4gICAgICAgICAgICB2b2x1bWVQYW5lbDogdHJ1ZSwvL+aYr+WQpuaYvuekuumfs+mHj+aOp+WItlxyXG5cclxuICAgICAgICAgICAgcmVtYWluaW5nVGltZURpc3BsYXk6IGZhbHNlLC8v5piv5ZCm5pi+56S66KeG6aKR5Ymp5L2Z5pe26Ze0XHJcbiAgICAgICAgICAgIGN1cnJlbnRUaW1lRGlzcGxheTogdHJ1ZSwvL+aYr+WQpuaYvuekuuinhumikeW9k+WJjeaXtumXtFxyXG4gICAgICAgICAgICB0aW1lRGl2aWRlcjogdHJ1ZSwvL+aYr+WQpuaYvuekuuaXtumXtOWIhuWJsuespu+8iC/vvIlcclxuICAgICAgICAgICAgZHVyYXRpb25EaXNwbGF5OiB0cnVlLC8v5piv5ZCm5pi+56S66KeG6aKR5pe26ZW/XHJcblxyXG4gICAgICAgICAgICBwcm9ncmVzc0NvbnRyb2w6IHRydWUsLy/mmK/lkKbmmL7npLrmkq3mlL7ov5vluqbmnaFcclxuICAgICAgICAgICAgcGxheWJhY2tSYXRlTWVudUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgZnVsbHNjcmVlblRvZ2dsZTogdHJ1ZS8v5piv5ZCm5pi+56S65YWo5bGP5oyJ6ZKuXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93Q29udGV4dE1lbnU6IGZhbHNlLC8v5piv5ZCm5pi+56S65Y+z6ZSu6I+c5Y2V77yM6buY6K6kZmFsc2VcclxuICAgICAgICBzaG93QmlnUGxheUJ1dHRvbk9uUGF1c2VkOiB0cnVlLC8v5pqC5YGc5pe25piv5ZCm5pi+56S65pKt5pS+5oyJ6ZKu77yM6buY6K6kZmFsc2VcclxuICAgICAgICBiaWdQbGF5QnV0dG9uOiB0cnVlLC8v5piv5ZCm5pi+56S65bGF5Lit55qE5pKt5pS+5oyJ6ZKuXHJcbiAgICAgICAgc3RhdGlzdGljOiB7XHJcbiAgICAgICAgICAgIGFjdGl2ZVRpbWU6IHRydWUsXHJcbiAgICAgICAgICAgIGJkOiB7XHJcbiAgICAgICAgICAgICAgICBleHRpbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJVSURcIjogX3VpZCxcclxuICAgICAgICAgICAgICAgICAgICBcImJ1XCI6IDIsLy/pg6jpl6hcclxuICAgICAgICAgICAgICAgICAgICBcInBsYXRcIjogMywvL+W5s+WPsO+8mldFQiAzIHdhcCA0XHJcbiAgICAgICAgICAgICAgICAgICAgXCJiaXpcIjogXCJuZXdzXCIvL+S4muWKoee6v+WQjeensFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vLGVudjogXCJ0ZXN0XCJcclxuICAgIH0pO1xyXG4gICAgdmlkZW9pdGVtLmlkX18gPSBfdmlkZW9JZDtcclxuXHJcbiAgICBzd2l0Y2ggKF92aWRlb1R5cGUpIHtcclxuICAgICAgICBjYXNlIFwiMlwiOiB2aWRlb2l0ZW0uc3JjKFwiI1wiICsgX3ZpZGVvVmFsdWUpOyBicmVhazsvL+ebtOaSrVxyXG4gICAgICAgIGRlZmF1bHQ6IHZpZGVvaXRlbS5zcmMoX3ZpZGVvVmFsdWUpOyBicmVhazsvL+W9leaSreaIluWFtuS7luinhumikVxyXG4gICAgfVxyXG5cclxuICAgIHZpZGVvaXRlbS5vbigncGxheScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHZpZGVvaWQgPSB2aWRlb2l0ZW0uaWRfXztcclxuICAgICAgICBqUXVlcnkuZWFjaChhcHBhcnIsIGZ1bmN0aW9uIChpLCB2KSB7XHJcbiAgICAgICAgICAgIGlmICh2LmlkX18gIT0gdmlkZW9pdGVtLmlkX18pIHtcclxuICAgICAgICAgICAgICAgIHYucGF1c2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGpRdWVyeShcIi5lbWF2XCIpLmNzcyh7IFwicG9zaXRpb25cIjogXCJcIiwgXCJyaWdodFwiOiAwLCBcImJvdHRvbVwiOiAwLCBcIndpZHRoXCI6IFwiXCIsIFwiaGVpZ2h0XCI6IFwiXCIsIFwiei1pbmRleFwiOiAyMDAwMSB9KTtcclxuICAgICAgICBWaWRlb1NtYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL3ZpZGVvaXRlbS5vbigncGF1c2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vICAgIHZpZGVvaWQgPSBcIlwiO1xyXG4gICAgLy99KTtcclxuXHJcbiAgICBhcHBhcnIucHVzaCh2aWRlb2l0ZW0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBBZGRDbG9zZShfaWQpIHtcclxuICAgIFJlbW92ZUNsb3NlKF9pZCk7XHJcbiAgICBqUXVlcnkoXCIjXCIgKyBfaWQpLmFwcGVuZCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiY2xvc2V2aWRlbyBjbG9zZXZpZGVvJyArIF9pZCArICdcIiBkYXRhLWlkPVwiJyArIF9pZCArICdcIiB0YXJnZXQ9XCJfc2VsZlwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAxMnB4O3RvcDogMTJweDt3aWR0aDogMTJweDtoZWlnaHQ6IDEycHg7ei1pbmRleDoyMDAwMjtjdXJzb3I6IHBvaW50ZXI7Y29sb3I6ICNmZmY7YmFja2dyb3VuZDogdXJsKC8vZzEuZGZjZncuY29tL2czLzIwMTkwNC8yMDE5MDQwMzEwMDk1Mi5wbmcpO1wiIHRpdGxlPVwi5YWz6ZetXCI+PC9hPicpO1xyXG59XHJcbmZ1bmN0aW9uIFJlbW92ZUNsb3NlKF9pZCkge1xyXG4gICAgalF1ZXJ5KFwiLmNsb3NldmlkZW9cIiArIF9pZCkucmVtb3ZlKCk7XHJcbn1cclxuXHJcbmpRdWVyeShcIiNDb250ZW50Qm9keVwiKS5vbihcImNsaWNrXCIsIFwiLmNsb3NldmlkZW9cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIF90aGlzID0galF1ZXJ5KHRoaXMpO1xyXG4gICAgdmFyIF9kYXRhaWQgPSBfdGhpcy5kYXRhKFwiaWRcIik7XHJcbiAgICBqUXVlcnkoXCIjXCIgKyBfZGF0YWlkKS5jc3MoeyBcInBvc2l0aW9uXCI6IFwiXCIsIFwicmlnaHRcIjogMCwgXCJib3R0b21cIjogMCwgXCJ3aWR0aFwiOiBcIlwiLCBcImhlaWdodFwiOiBcIlwiLCBcInotaW5kZXhcIjogMjAwMDEgfSk7XHJcbiAgICBqUXVlcnkoXCIjXCIgKyBfZGF0YWlkICsgXCIgLmVtYXYtZnVsbHNjcmVlbi1jb250cm9sXCIpLmNzcyh7IFwiZGlzcGxheVwiOiBcImlubGluZS1ibG9ja1wiIH0pOy8v5YWz6Zet77yM5YiH5o2i5Yiw5aSn56qX5Y+j5pS+5Ye65p2l5YWo5bGPXHJcbiAgICBSZW1vdmVDbG9zZShfZGF0YWlkKTtcclxuXHJcbiAgICBqUXVlcnkuZWFjaChhcHBhcnIsIGZ1bmN0aW9uIChpLCB2KSB7XHJcbiAgICAgICAgaWYgKHYuaWRfXyA9PSBfZGF0YWlkKSB7XHJcbiAgICAgICAgICAgIHZpZGVvaWQgPSBcIlwiO1xyXG4gICAgICAgICAgICB2LnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gVmlkZW9TbWFsbCgpIHtcclxuICAgIGlmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiICYmIHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uLnNwbGl0KFwiO1wiKVsxXS5yZXBsYWNlKC9bIF0vZywgXCJcIikucmVwbGFjZShcIk1TSUVcIiwgXCJcIikpIDw9IDkpIHtcclxuICAgICAgICAvL+Wwj+S6juetieS6jklFOe+8jOS4jeaYvuekuuWPs+S4i+inkueUu+S4reeUu1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgX3Njcm9sbHRvcCA9IGpRdWVyeSh3aW5kb3cpLnNjcm9sbFRvcCgpO1xyXG4gICAgICAgIHZhciBfd2luSGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDs7XHJcbiAgICAgICAgalF1ZXJ5KFwiLm1pZGRsZXZpZGVvYmdcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IGpRdWVyeSh0aGlzKTtcclxuICAgICAgICAgICAgdmFyIF9kYXRhaWQgPSBfdGhpcy5kYXRhKFwiaWRcIik7XHJcbiAgICAgICAgICAgIGlmICh2aWRlb2lkID09IF9kYXRhaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfc2Nyb2xsdG9wID4gX3RoaXMub2Zmc2V0KCkudG9wICsgX3RoaXMuaGVpZ2h0KCkgfHwgX3Njcm9sbHRvcCArIF93aW5IZWlnaHQgPCBfdGhpcy5vZmZzZXQoKS50b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIjXCIgKyBfZGF0YWlkKS5jc3MoeyBcInBvc2l0aW9uXCI6IFwiZml4ZWRcIiwgXCJyaWdodFwiOiAwLCBcImJvdHRvbVwiOiAwLCBcIndpZHRoXCI6IFwiMzAwcHhcIiwgXCJoZWlnaHRcIjogXCIxNzBweFwiLCBcInotaW5kZXhcIjogMjAwMDEgfSk7Ly/lsI/nqpflj6NcclxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIjXCIgKyBfZGF0YWlkICsgXCIgLmVtYXYtZnVsbHNjcmVlbi1jb250cm9sXCIpLmNzcyh7IFwiZGlzcGxheVwiOiBcIm5vbmVcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBBZGRDbG9zZShfZGF0YWlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KFwiI1wiICsgX2RhdGFpZCkuY3NzKHsgXCJwb3NpdGlvblwiOiBcIlwiLCBcInJpZ2h0XCI6IDAsIFwiYm90dG9tXCI6IDAsIFwid2lkdGhcIjogXCJcIiwgXCJoZWlnaHRcIjogXCJcIiwgXCJ6LWluZGV4XCI6IDIwMDAxIH0pOy8v5aSn56qX5Y+jXHJcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KFwiI1wiICsgX2RhdGFpZCArIFwiIC5lbWF2LWZ1bGxzY3JlZW4tY29udHJvbFwiKS5jc3MoeyBcImRpc3BsYXlcIjogXCJpbmxpbmUtYmxvY2tcIiB9KTsvL+Wkp+eql+WPo+aUvuWHuuadpeWFqOWxj1xyXG4gICAgICAgICAgICAgICAgICAgIFJlbW92ZUNsb3NlKF9kYXRhaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUmVtb3ZlQ2xvc2UoX2RhdGFpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdExhbmdLZVZpZGVvKCkge1xyXG4gICAgalF1ZXJ5KFwiLmVtX2xrX3ZpZGVvXCIpLmVhY2goZnVuY3Rpb24gKF9pbmRleCkge1xyXG4gICAgICAgIHZhciBfb2xkID0galF1ZXJ5KHRoaXMpO1xyXG4gICAgICAgIHZhciBsa19kZXMgPSBfb2xkLmF0dHIoJ2xrX2RlcycpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbGtfZGVzICE9PSB0eXBlb2YgdW5kZWZpbmVkICYmIGxrX2RlcyAhPT0gZmFsc2UgJiYgbGtfZGVzICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgbGtfZGVzID0gdW5lc2NhcGUobGtfZGVzKTtcclxuICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmFmdGVyKCc8cCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtmb250LXNpemU6IDEycHg7Y29sb3I6ICM2NjY7cG9zaXRpb246IHJlbGF0aXZlO3RvcDogLTEwcHg7XCI+JyArIGxrX2RlcyArICc8L3A+Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGpRdWVyeSh0aGlzKS5yZXBsYWNlV2l0aCgnPGRpdiBjbGFzcz1cIm1pZGRsZXZpZGVvYmdcIiBkYXRhLWlkPVwiYXYtcGxheWVyLWN0eCcgKyBfaW5kZXggKyAnXCIgZGF0YS12YWx1ZT1cIicgKyBfb2xkLmF0dHIoXCJsa19kYXRhXCIpICsgJ1wiPjx2aWRlbyBpZD1cImF2LXBsYXllci1jdHgnICsgX2luZGV4ICsgJ1wiIGNsYXNzPVwiZW1hdlwiIHByZWxvYWQ9XCJhdXRvXCI+PC92aWRlbz48L2Rpdj4nKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGpRdWVyeShcIi5taWRkbGV2aWRlb2JnXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IGpRdWVyeSh0aGlzKTtcclxuICAgICAgICB2YXIgX2RhdGFpZCA9IF90aGlzLmRhdGEoXCJpZFwiKTtcclxuICAgICAgICB2YXIgX2RhdGF2YWx1ZSA9IF90aGlzLmRhdGEoXCJ2YWx1ZVwiKTtcclxuICAgICAgICBpZiAodHlwZW9mIF9kYXRhdmFsdWUgIT09IHR5cGVvZiB1bmRlZmluZWQgJiYgX2RhdGF2YWx1ZSAhPT0gZmFsc2UgJiYgX2RhdGF2YWx1ZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHZhciBfZGF0YXZpZGVvaXRlbSA9IF9kYXRhdmFsdWUuc3BsaXQoJyMnKTtcclxuICAgICAgICAgICAgaWYgKF9kYXRhdmlkZW9pdGVtLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0VmlkZW8oX2RhdGFpZCwgNjcwLCA0MjUsIF9kYXRhdmlkZW9pdGVtWzBdLCBfZGF0YXZpZGVvaXRlbVsxXSwgZmFsc2UsIFwiXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5pdFZpZGVvKF9kYXRhaWQsIDY3MCwgNDI1LCA5OSwgX2RhdGF2aWRlb2l0ZW1bMF0sIGZhbHNlLCBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmluaXRMYW5nS2VWaWRlbygpO1xyXG5qUXVlcnkod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKCkge1xyXG4gICAgVmlkZW9TbWFsbCgpO1xyXG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvbGFuZ2tlL25ld3MuanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sInNvdXJjZVJvb3QiOiIifQ=="],"names":["modules","installedModules","__webpack_require__","moduleId","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","0","hexcase","chrsz","hex_md5","binl2hex","core_md5","str2binl","length","x","len","a","b","olda","oldb","oldc","oldd","md5_ff","md5_gg","md5_hh","md5_ii","safe_add","Array","md5_cmn","q","t","num","cnt","y","lsw","str","bin","mask","charCodeAt","binarray","hex_tab","charAt","1","e","3","this","_option","extend","id","selectId","aline","range","$container","init","jQuery","hasAppend","elementLoad","mouseup","tipsHtml","append","css","cssTxt","loadCss","$selectTips","$search","$copy","document","createElement","type","appendChild","createTextNode","styleSheet","cssText","getElementsByTagName","getSelectTxt","selection","createRange","text","getSelection","trim","toString","height","width","r","click","setTimeout","target","parents","hide","txt","window","event","pageYOffset","documentElement","scrollTop","body","pageXOffset","scrollLeft","clientX","clientY","display","left","top","attr","enents","on","open","encodeURIComponent","ActiveXObject","clipboardData","setData","loadScript","Clipboard","setAttribute","onload","8","pdtips","20","gshVoteNum","numb","parseFloat","toFixed","VoteZhanBiWidth","zhanBi","maxWidth","getVoteCookie","key","cookieArray","cookie","split","arr","replace","unescape","initResultHTML","json","_vote_title","vote_item","_html","sumVote","curVote","_isvote","Result","Votes","_item","Vm_Title","_voteSum","j","Elements","_cookieValue","__item","Vi_Id","Vi_Vm_Id","Vi_Vg_Id","indexOf","Vi_Count","_Vi_Count","_voteBiLi","Vi_Title","Vg_Id","Vg_Enable","initVote","item","$","each","_this","_vote_id","ajax","url","dataType","data","success","html","Success","Vg_Title","radioOrCheckbox","Vm_Type","_Vm_MaxCheck","Vm_MaxCheck","initHTML","show","_isLockVote","_chooseIds","_timu","vivmid","push","_viid","_vivmid","_vivgid","_xb","splice","alert","addClass","expires","date","Date","ms","setTime","getTime","escape","toUTCString","location","host","setVoteCookie","_vname","_maxcheck","22","config","guba","_CMSHJ","xarr","match","RegExp","decodeURIComponent","expiredays","domain","exdate","cookiestr","undefined","setDate","getDate","toGMTString","userpassport","jiav","vtype","state","jiavarr","substring","nick","_ctoken","_utoken","_GubaApiH","_deviceid","formatZanNum","count","parseInt","temp","hotSearchScroll","senter","time","animation","seter","_self","setInterval","lw","spanWidth","newHtml","right","aWidth","_content","aHtml","outerWidth","position","hover","clearInterval","quoteTree","HuShen","BigName","Link","Interface","HK","Interface2","Gold","Futures","Global","Option","Interface3","Forex","CurrTree","_YM","zsQuote","that","initHTMLDom","formatData","getQuoteData","_interface","_dom","method","jsonp","QuoteCB","getZJLData","ZJLCB","back","diff","_index","zs","f2","Math","pow","f1","price","f4","percent","f3","f14","mc","f13","f12","renderDom","getZDFInfo","_class","_data","dZdf","getGSHNum","fix","intStr","abs","result","getHSGTStatus","_hsgtstatus","hgtLR","hgtInfo","ggthLR","ggthInfo","sgtLR","sgtInfo","ggtsLR","ggtsInfo","rc","hk2sh","dayNetAmtIn","parent","find","eq","status","sh2hk","hk2sz","sz2hk","error","zsinfos","szzs","szprice","szpercent","szname","_icon","_color","QuoteshowDom","random","zanObj","$dom","articleId","_apiurl","hasClass","jsonpCallback","res","prezanum","anim","$body","$lab","style","removeClass","pageX","pageY","color","zIndex","select","fontSize","textShadow","innerText","removeChild","opacity","collectObj","zxzwObj","suggest2017","inputid","placeholder","shownewtips","onSubmit","newtipsoffset","getNewsArticleBriefInfo","loadFontSize","bindEvent","getHotNews","gudingFun","initRDTJ","initQuoteLink","_NewsId","re","_num","infos","post_like_count","like_state","collect_state","post_forward_count","post_comment_count","isHuoZan","post_like_style","allow_likes_state","pointer-events","repost_state","post_comment_authory","initPinLun","_tipZIndex","after","prop","remove","navigator","userAgent","toLowerCase","_isMouseOver","_thisCode","_thisitem","_id","quoteboxHtml","_thisitem2","dataQuote","zdf","zde","market","code","getElementById","dw","clientWidth","dl","offsetParent","offsetLeft","dom","apiurl","params","fingerprint","sc","check","_AddOrDelZXG","_type","initZXInfo","size","siblings","font-size","line-height","stopPropagation","toggle","scrollTo","offset","href","_thisdom","unbind","emshareFun","qrcode","colorDark","colorLight","logosrc","link","__WAPURL","domid","onkeydown","ev","oEvent","keyCode","scrollY","clientHeight","isDefaultShowTitle","hideDown","showDown","list","Data","JumpAddress","KeyPhrase","columns","itemBig","column_data","_link","_coverLink","_coverTag","cover","column_name","cfh_art_code","hostname","search","slide","titCell","mainCell","effect","autoPlay","autoPage","sm","_ISComment","editorAndList","se","topNavH","env","__KHWZ","_HQLength","__KHLJ","prepend","before","wrap","hasAttribute","getAttribute","_op_ids","_op_id","op_id","_opHTML","links","title_color","title","_initOPHTML","videoid","apparr","_uid","initVideo","_videoId","_videoWidth","_videoHeight","_videoType","_videoValue","_videoIsPoster","_videoPoster","videoitem","emav","controls","poster","posterImage","autoplay","loop","muted","preload","controlBar","children","playToggle","volumePanel","remainingTimeDisplay","currentTimeDisplay","timeDivider","durationDisplay","progressControl","playbackRateMenuButton","fullscreenToggle","showContextMenu","showBigPlayButtonOnPaused","bigPlayButton","statistic","activeTime","bd","extinfo","UID","bu","plat","biz","id__","src","v","pause","bottom","z-index","VideoSmall","RemoveClose","_scrolltop","_winHeight","appName","appVersion","_dataid","_old","lk_des","replaceWith","_datavideoitem","_datavalue","scroll"],"mappings":"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"}