{"version":3,"sources":["article.js"],"names":["modules","__webpack_require__","moduleId","installedModules","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","btnId","set","btn","style","display","scrollTop","b","document","getElementById","documentElement","body","window","onscroll","onclick","this","timer","setInterval","Math","ceil","clearInterval","options","replaceAPI","api","replace","url","title","content","pic","location","href","urlold","encodeURIComponent","qzone","open","weibo","tqq","renren","douban","facebook","twitter","linkedin","qq","weixin","showWeiXin","guba","$","remove","QRCode","append","text","width","height","colorDark","colorLight","correctLevel","CorrectLevel","H","click","share","backTop","bannerHeight","css","resize","QR8bitByte","data","mode","QRMode","MODE_8BIT_BYTE","parsedData","length","byteArray","code","charCodeAt","push","Array","concat","apply","unshift","QRCodeModel","typeNumber","errorCorrectLevel","moduleCount","dataCache","dataList","QRPolynomial","num","shift","undefined","Error","offset","QRRSBlock","totalCount","dataCount","QRBitBuffer","buffer","_getAndroid","android","sAgent","navigator","userAgent","test","aMat","toString","match","parseFloat","_getTypeNumber","sText","nCorrectLevel","nType","replacedText","encodeURI","_getUTF8Length","len","QRCodeLimitLength","nLimit","QRErrorCorrectLevel","L","M","Q","getLength","write","put","addData","newData","isDark","row","col","getModuleCount","make","makeImpl","getBestMaskPattern","maskPattern","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","minLostPoint","pattern","lostPoint","QRUtil","getLostPoint","createMovieClip","target_mc","instance_name","depth","qr_mc","createEmptyMovieClip","y","x","beginFill","moveTo","lineTo","endFill","pos","getPatternPosition","j","bits","getBCHTypeNumber","mod","floor","getBCHTypeInfo","inc","bitIndex","byteIndex","dark","getMask","PAD0","PAD1","rsBlocks","getRSBlocks","getLengthInBits","totalDataCount","putBit","createBytes","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","max","rsPoly","getErrorCorrectPolynomial","modPoly","modIndex","totalCodeCount","index","MODE_NUMBER","MODE_ALPHA_NUM","MODE_KANJI","QRMaskPattern","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","errorCorrectLength","a","multiply","QRMath","gexp","type","qrCode","sameCount","count","darkCount","abs","glog","LOG_TABLE","EXP_TABLE","e","ratio","RS_BLOCK_TABLE","rsBlock","getRsBlockTable","list","bufIndex","bit","svgDrawer","Drawing","el","htOption","_el","_htOption","draw","oQRCode","makeSVG","tag","attrs","createElementNS","k","setAttribute","nCount","clear","svg","viewBox","String","fill","setAttributeNS","appendChild","id","child","hasChildNodes","removeChild","lastChild","tagName","toLowerCase","CanvasRenderingContext2D","nWidth","nHeight","aHTML","innerHTML","join","elTable","childNodes","nLeftMarginTable","offsetWidth","nTopMarginTable","offsetHeight","margin","_onMakeImage","_elImage","src","_elCanvas","toDataURL","_android","factor","devicePixelRatio","drawImage","image","sx","sy","sw","sh","dx","dy","dw","dh","nodeName","arguments","_bIsPainted","createElement","_oContext","getContext","alt","_bSupportDataURI","nRoundedWidth","round","nRoundedHeight","bIsDark","nLeft","nTop","strokeStyle","lineWidth","fillStyle","fillRect","strokeRect","makeImage","fSuccess","fFail","self","_fFail","_fSuccess","fOnError","onabort","onerror","onload","isPainted","clearRect","nNumber","vOption","useSVG","_oQRCode","_oDrawing","makeCode"],"mappings":"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,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG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","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 = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nvar backTop = function(btnId){\r\n var btn = document.getElementById(btnId);\r\n var d = document.documentElement;\r\n var b = document.body;\r\n window.onscroll = set;\r\n btn.onclick = function(){\r\n btn.style.display = 'block';\r\n this.timer = setInterval(function(){\r\n d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);\r\n b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);\r\n if((d.scrollTop + b.scrollTop) == 0){\r\n clearInterval(btn.timer,window.onscroll = set)\r\n }\r\n },10)\r\n };\r\n\r\n function set(){\r\n btn.style.display = (d.scrollTop + b.scrollTop > 100) ? 'block' : 'none'\r\n }\r\n};\r\nmodule.exports = backTop;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\n * simple-share\r\n * @yujiangshui\r\n * https://github.com/yujiangshui/simple-share.js\r\n *\r\n * Licensed under the MIT license.\r\n */\r\n\r\nvar SimpleShare = function (options) {\r\n \r\n // get share content\r\n options = options || {};\r\n var url = options.url || window.location.href;\r\n var title = options.title || document.title;\r\n var content = options.content || '';\r\n var pic = options.pic || '';\r\n \r\n // fix content format\r\n var urlold = url;\r\n url = encodeURIComponent(url);\r\n title = encodeURIComponent(title);\r\n content = encodeURIComponent(content);\r\n pic = encodeURIComponent(pic);\r\n \r\n // share target url\r\n var qzone = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&title={title}&pics={pic}&summary={content}';\r\n var weibo = 'http://service.weibo.com/share/share.php?url={url}&title={title}&pic={pic}&searchPic=false';\r\n var tqq = 'http://share.v.t.qq.com/index.php?c=share&a=index&url={url}&title={title}&appkey=801cf76d3cfc44ada52ec13114e84a96';\r\n var renren = 'http://widget.renren.com/dialog/share?resourceUrl={url}&srcUrl={url}&title={title}&description={content}';\r\n var douban = 'http://www.douban.com/share/service?href={url}&name={title}&text={content}&image={pic}';\r\n var facebook = 'https://www.facebook.com/sharer/sharer.php?u={url}&t={title}&pic={pic}';\r\n var twitter = 'https://twitter.com/intent/tweet?text={title}&url={url}';\r\n var linkedin = 'https://www.linkedin.com/shareArticle?title={title}&summary={content}&mini=true&url={url}&ro=true';\r\n var weixin = 'http://qr.liantu.com/api.php?text={url}';\r\n var qq = 'http://connect.qq.com/widget/shareqq/index.html?url={url}&desc={title}&pics={pic}';\r\n var guba = 'http://iguba.eastmoney.com/share?url={url}&title={title}';\r\n \r\n // replace content functions\r\n function replaceAPI (api) {\r\n api = api.replace('{url}', url);\r\n api = api.replace('{title}', title);\r\n api = api.replace('{content}', content);\r\n api = api.replace('{pic}', pic);\r\n \r\n return api;\r\n }\r\n \r\n // share target\r\n this.qzone = function() {\r\n window.open(replaceAPI(qzone));\r\n };\r\n this.weibo = function() {\r\n window.open(replaceAPI(weibo));\r\n };\r\n this.tqq = function() {\r\n window.open(replaceAPI(tqq));\r\n };\r\n this.renren = function() {\r\n window.open(replaceAPI(renren));\r\n };\r\n this.douban = function() {\r\n window.open(replaceAPI(douban));\r\n };\r\n this.facebook = function() {\r\n window.open(replaceAPI(facebook));\r\n };\r\n this.twitter = function() {\r\n window.open(replaceAPI(twitter));\r\n };\r\n this.linkedin = function() {\r\n window.open(replaceAPI(linkedin));\r\n };\r\n this.qq = function() {\r\n window.open(replaceAPI(qq));\r\n };\r\n this.weixin = function() {\r\n this.showWeiXin();\r\n };\r\n this.guba = function () {\r\n window.open(replaceAPI(guba));\r\n }\r\n \r\n \r\n this.showWeiXin = function () {\r\n // 多次点击,移除\r\n var $shareDialog = $('.share-dialog');\r\n $shareDialog.remove();\r\n \r\n var QRCode = __webpack_require__(5);\r\n var html = '
' +\r\n '
×分享到微信朋友圈
' +\r\n '
' +\r\n // ''+\r\n '
'\r\n \r\n $('body').append(html);\r\n \r\n var qrcode = new QRCode(document.getElementById(\"share-dialog-content\"), {\r\n text: urlold,\r\n width: 256,\r\n height: 256,\r\n colorDark: \"#000000\",\r\n colorLight: \"#ffffff\",\r\n correctLevel: QRCode.CorrectLevel.H\r\n });\r\n \r\n $('.share-dialog-close').click(function () {\r\n $('.share-dialog').remove()\r\n });\r\n }\r\n \r\n };\r\n \r\n module.exports=SimpleShare;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\r\nvar share = __webpack_require__(1);\r\nvar backTop = __webpack_require__(0);\r\n\r\nwindow.share = share;\r\n\r\n$(function(){\r\n backTop('backtop');\r\n\r\n var bannerHeight = $('.top-banner').height();\r\n $('.fixed_right').css('top',bannerHeight+61+0+'px');\r\n\r\n $(window).resize(function() {\r\n var bannerHeight = $('.top-banner').height();\r\n $('.fixed_right').css('top',bannerHeight+61+0+'px');\r\n });\r\n})\n\n/***/ }),\n/* 3 */,\n/* 4 */,\n/* 5 */\n/***/ (function(module, exports) {\n\n/**\r\n * @fileoverview\r\n * - Using the 'QRCode for Javascript library'\r\n * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.\r\n * - this library has no dependencies.\r\n * \r\n * @author davidshimjs\r\n * @see http://www.d-project.com/\r\n * @see http://jeromeetienne.github.com/jquery-qrcode/\r\n */\r\nvar QRCode;\r\n\r\n(function () {\r\n\t//---------------------------------------------------------------------\r\n\t// QRCode for JavaScript\r\n\t//\r\n\t// Copyright (c) 2009 Kazuhiko Arase\r\n\t//\r\n\t// URL: http://www.d-project.com/\r\n\t//\r\n\t// Licensed under the MIT license:\r\n\t// http://www.opensource.org/licenses/mit-license.php\r\n\t//\r\n\t// The word \"QR Code\" is registered trademark of \r\n\t// DENSO WAVE INCORPORATED\r\n\t// http://www.denso-wave.com/qrcode/faqpatent-e.html\r\n\t//\r\n\t//---------------------------------------------------------------------\r\n\tfunction QR8bitByte(data) {\r\n\t\tthis.mode = QRMode.MODE_8BIT_BYTE;\r\n\t\tthis.data = data;\r\n\t\tthis.parsedData = [];\r\n\r\n\t\t// Added to support UTF-8 Characters\r\n\t\tfor (var i = 0, l = this.data.length; i < l; i++) {\r\n\t\t\tvar byteArray = [];\r\n\t\t\tvar code = this.data.charCodeAt(i);\r\n\r\n\t\t\tif (code > 0x10000) {\r\n\t\t\t\tbyteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\r\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\r\n\t\t\t\tbyteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\r\n\t\t\t\tbyteArray[3] = 0x80 | (code & 0x3F);\r\n\t\t\t} else if (code > 0x800) {\r\n\t\t\t\tbyteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\r\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\r\n\t\t\t\tbyteArray[2] = 0x80 | (code & 0x3F);\r\n\t\t\t} else if (code > 0x80) {\r\n\t\t\t\tbyteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\r\n\t\t\t\tbyteArray[1] = 0x80 | (code & 0x3F);\r\n\t\t\t} else {\r\n\t\t\t\tbyteArray[0] = code;\r\n\t\t\t}\r\n\r\n\t\t\tthis.parsedData.push(byteArray);\r\n\t\t}\r\n\r\n\t\tthis.parsedData = Array.prototype.concat.apply([], this.parsedData);\r\n\r\n\t\tif (this.parsedData.length != this.data.length) {\r\n\t\t\tthis.parsedData.unshift(191);\r\n\t\t\tthis.parsedData.unshift(187);\r\n\t\t\tthis.parsedData.unshift(239);\r\n\t\t}\r\n\t}\r\n\r\n\tQR8bitByte.prototype = {\r\n\t\tgetLength: function (buffer) {\r\n\t\t\treturn this.parsedData.length;\r\n\t\t},\r\n\t\twrite: function (buffer) {\r\n\t\t\tfor (var i = 0, l = this.parsedData.length; i < l; i++) {\r\n\t\t\t\tbuffer.put(this.parsedData[i], 8);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfunction QRCodeModel(typeNumber, errorCorrectLevel) {\r\n\t\tthis.typeNumber = typeNumber;\r\n\t\tthis.errorCorrectLevel = errorCorrectLevel;\r\n\t\tthis.modules = null;\r\n\t\tthis.moduleCount = 0;\r\n\t\tthis.dataCache = null;\r\n\t\tthis.dataList = [];\r\n\t}\r\n\r\n\tQRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+\",\"+col);}\r\n\treturn this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);}\r\n\tif(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}\r\n\tthis.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}\r\n\treturn pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}\r\n\tfor(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}\r\n\tfor(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}\r\n\tthis.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);}\r\n\tvar mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}\r\n\tthis.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}\r\n\trow+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error(\"code length overflow. (\"\r\n\t+buffer.getLengthInBits()\r\n\t+\">\"\r\n\t+totalDataCount*8\r\n\t+\")\");}\r\n\tif(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}\r\n\twhile(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}\r\n\twhile(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}\r\n\tbuffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}\r\n\tbuffer.put(QRCodeModel.PAD1,8);}\r\n\treturn QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}}\r\n\tvar totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}\r\n\treturn((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}\r\n\treturn(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}\r\n\treturn digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error(\"bad maskPattern:\"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}}\r\n\tfor(var row=0;row=256){n-=255;}\r\n\treturn QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}\r\n\tif(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}\r\n\tthis.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];\r\n\t\r\n\tfunction _isSupportCanvas() {\r\n\t\treturn typeof CanvasRenderingContext2D != \"undefined\";\r\n\t}\r\n\t\r\n\t// android 2.x doesn't support Data-URI spec\r\n\tfunction _getAndroid() {\r\n\t\tvar android = false;\r\n\t\tvar sAgent = navigator.userAgent;\r\n\t\t\r\n\t\tif (/android/i.test(sAgent)) { // android\r\n\t\t\tandroid = true;\r\n\t\t\tvar aMat = sAgent.toString().match(/android ([0-9]\\.[0-9])/i);\r\n\t\t\t\r\n\t\t\tif (aMat && aMat[1]) {\r\n\t\t\t\tandroid = parseFloat(aMat[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn android;\r\n\t}\r\n\t\r\n\tvar svgDrawer = (function() {\r\n\r\n\t\tvar Drawing = function (el, htOption) {\r\n\t\t\tthis._el = el;\r\n\t\t\tthis._htOption = htOption;\r\n\t\t};\r\n\r\n\t\tDrawing.prototype.draw = function (oQRCode) {\r\n\t\t\tvar _htOption = this._htOption;\r\n\t\t\tvar _el = this._el;\r\n\t\t\tvar nCount = oQRCode.getModuleCount();\r\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\r\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\r\n\r\n\t\t\tthis.clear();\r\n\r\n\t\t\tfunction makeSVG(tag, attrs) {\r\n\t\t\t\tvar el = document.createElementNS('http://www.w3.org/2000/svg', tag);\r\n\t\t\t\tfor (var k in attrs)\r\n\t\t\t\t\tif (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);\r\n\t\t\t\treturn el;\r\n\t\t\t}\r\n\r\n\t\t\tvar svg = makeSVG(\"svg\" , {'viewBox': '0 0 ' + String(nCount) + \" \" + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});\r\n\t\t\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\r\n\t\t\t_el.appendChild(svg);\r\n\r\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorLight, \"width\": \"100%\", \"height\": \"100%\"}));\r\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorDark, \"width\": \"1\", \"height\": \"1\", \"id\": \"template\"}));\r\n\r\n\t\t\tfor (var row = 0; row < nCount; row++) {\r\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\r\n\t\t\t\t\tif (oQRCode.isDark(row, col)) {\r\n\t\t\t\t\t\tvar child = makeSVG(\"use\", {\"x\": String(col), \"y\": String(row)});\r\n\t\t\t\t\t\tchild.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", \"#template\")\r\n\t\t\t\t\t\tsvg.appendChild(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tDrawing.prototype.clear = function () {\r\n\t\t\twhile (this._el.hasChildNodes())\r\n\t\t\t\tthis._el.removeChild(this._el.lastChild);\r\n\t\t};\r\n\t\treturn Drawing;\r\n\t})();\r\n\r\n\tvar useSVG = document.documentElement.tagName.toLowerCase() === \"svg\";\r\n\r\n\t// Drawing in DOM by using Table tag\r\n\tvar Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {\r\n\t\tvar Drawing = function (el, htOption) {\r\n\t\t\tthis._el = el;\r\n\t\t\tthis._htOption = htOption;\r\n\t\t};\r\n\t\t\t\r\n\t\t/**\r\n\t\t * Draw the QRCode\r\n\t\t * \r\n\t\t * @param {QRCode} oQRCode\r\n\t\t */\r\n\t\tDrawing.prototype.draw = function (oQRCode) {\r\n var _htOption = this._htOption;\r\n var _el = this._el;\r\n\t\t\tvar nCount = oQRCode.getModuleCount();\r\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\r\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\r\n\t\t\tvar aHTML = [''];\r\n\t\t\t\r\n\t\t\tfor (var row = 0; row < nCount; row++) {\r\n\t\t\t\taHTML.push('');\r\n\t\t\t\t\r\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\r\n\t\t\t\t\taHTML.push('');\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\taHTML.push('');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\taHTML.push('
');\r\n\t\t\t_el.innerHTML = aHTML.join('');\r\n\t\t\t\r\n\t\t\t// Fix the margin values as real size.\r\n\t\t\tvar elTable = _el.childNodes[0];\r\n\t\t\tvar nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;\r\n\t\t\tvar nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;\r\n\t\t\t\r\n\t\t\tif (nLeftMarginTable > 0 && nTopMarginTable > 0) {\r\n\t\t\t\telTable.style.margin = nTopMarginTable + \"px \" + nLeftMarginTable + \"px\";\t\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\t/**\r\n\t\t * Clear the QRCode\r\n\t\t */\r\n\t\tDrawing.prototype.clear = function () {\r\n\t\t\tthis._el.innerHTML = '';\r\n\t\t};\r\n\t\t\r\n\t\treturn Drawing;\r\n\t})() : (function () { // Drawing in Canvas\r\n\t\tfunction _onMakeImage() {\r\n\t\t\tthis._elImage.src = this._elCanvas.toDataURL(\"image/png\");\r\n\t\t\tthis._elImage.style.display = \"block\";\r\n\t\t\tthis._elCanvas.style.display = \"none\";\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t// Android 2.1 bug workaround\r\n\t\t// http://code.google.com/p/android/issues/detail?id=5141\r\n\t\tif (this._android && this._android <= 2.1) {\r\n\t \tvar factor = 1 / window.devicePixelRatio;\r\n\t var drawImage = CanvasRenderingContext2D.prototype.drawImage; \r\n\t \tCanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {\r\n\t \t\tif ((\"nodeName\" in image) && /img/i.test(image.nodeName)) {\r\n\t\t \tfor (var i = arguments.length - 1; i >= 1; i--) {\r\n\t\t \targuments[i] = arguments[i] * factor;\r\n\t\t \t}\r\n\t \t\t} else if (typeof dw == \"undefined\") {\r\n\t \t\t\targuments[1] *= factor;\r\n\t \t\t\targuments[2] *= factor;\r\n\t \t\t\targuments[3] *= factor;\r\n\t \t\t\targuments[4] *= factor;\r\n\t \t\t}\r\n\t \t\t\r\n\t \tdrawImage.apply(this, arguments); \r\n\t \t};\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Check whether the user's browser supports Data URI or not\r\n\t\t * \r\n\t\t * @private\r\n\t\t * @param {Function} fSuccess Occurs if it supports Data URI\r\n\t\t * @param {Function} fFail Occurs if it doesn't support Data URI\r\n\t\t */\r\n\t\tfunction _safeSetDataURI(fSuccess, fFail) {\r\n var self = this;\r\n self._fFail = fFail;\r\n self._fSuccess = fSuccess;\r\n\r\n // Check it just once\r\n if (self._bSupportDataURI === null) {\r\n var el = document.createElement(\"img\");\r\n var fOnError = function() {\r\n self._bSupportDataURI = false;\r\n\r\n if (self._fFail) {\r\n self._fFail.call(self);\r\n }\r\n };\r\n var fOnSuccess = function() {\r\n self._bSupportDataURI = true;\r\n\r\n if (self._fSuccess) {\r\n self._fSuccess.call(self);\r\n }\r\n };\r\n\r\n el.onabort = fOnError;\r\n el.onerror = fOnError;\r\n el.onload = fOnSuccess;\r\n el.src = \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"; // the Image contains 1px data.\r\n return;\r\n } else if (self._bSupportDataURI === true && self._fSuccess) {\r\n self._fSuccess.call(self);\r\n } else if (self._bSupportDataURI === false && self._fFail) {\r\n self._fFail.call(self);\r\n }\r\n\t\t};\r\n\t\t\r\n\t\t/**\r\n\t\t * Drawing QRCode by using canvas\r\n\t\t * \r\n\t\t * @constructor\r\n\t\t * @param {HTMLElement} el\r\n\t\t * @param {Object} htOption QRCode Options \r\n\t\t */\r\n\t\tvar Drawing = function (el, htOption) {\r\n \t\tthis._bIsPainted = false;\r\n \t\tthis._android = _getAndroid();\r\n\t\t\r\n\t\t\tthis._htOption = htOption;\r\n\t\t\tthis._elCanvas = document.createElement(\"canvas\");\r\n\t\t\tthis._elCanvas.width = htOption.width;\r\n\t\t\tthis._elCanvas.height = htOption.height;\r\n\t\t\tel.appendChild(this._elCanvas);\r\n\t\t\tthis._el = el;\r\n\t\t\tthis._oContext = this._elCanvas.getContext(\"2d\");\r\n\t\t\tthis._bIsPainted = false;\r\n\t\t\tthis._elImage = document.createElement(\"img\");\r\n\t\t\tthis._elImage.alt = \"Scan me!\";\r\n\t\t\tthis._elImage.style.display = \"none\";\r\n\t\t\tthis._el.appendChild(this._elImage);\r\n\t\t\tthis._bSupportDataURI = null;\r\n\t\t};\r\n\t\t\t\r\n\t\t/**\r\n\t\t * Draw the QRCode\r\n\t\t * \r\n\t\t * @param {QRCode} oQRCode \r\n\t\t */\r\n\t\tDrawing.prototype.draw = function (oQRCode) {\r\n var _elImage = this._elImage;\r\n var _oContext = this._oContext;\r\n var _htOption = this._htOption;\r\n \r\n\t\t\tvar nCount = oQRCode.getModuleCount();\r\n\t\t\tvar nWidth = _htOption.width / nCount;\r\n\t\t\tvar nHeight = _htOption.height / nCount;\r\n\t\t\tvar nRoundedWidth = Math.round(nWidth);\r\n\t\t\tvar nRoundedHeight = Math.round(nHeight);\r\n\r\n\t\t\t_elImage.style.display = \"none\";\r\n\t\t\tthis.clear();\r\n\t\t\t\r\n\t\t\tfor (var row = 0; row < nCount; row++) {\r\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\r\n\t\t\t\t\tvar bIsDark = oQRCode.isDark(row, col);\r\n\t\t\t\t\tvar nLeft = col * nWidth;\r\n\t\t\t\t\tvar nTop = row * nHeight;\r\n\t\t\t\t\t_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\r\n\t\t\t\t\t_oContext.lineWidth = 1;\r\n\t\t\t\t\t_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\t\t\t\t\t\r\n\t\t\t\t\t_oContext.fillRect(nLeft, nTop, nWidth, nHeight);\r\n\t\t\t\t\t\r\n\t\t\t\t\t// 안티 앨리어싱 방지 처리\r\n\t\t\t\t\t_oContext.strokeRect(\r\n\t\t\t\t\t\tMath.floor(nLeft) + 0.5,\r\n\t\t\t\t\t\tMath.floor(nTop) + 0.5,\r\n\t\t\t\t\t\tnRoundedWidth,\r\n\t\t\t\t\t\tnRoundedHeight\r\n\t\t\t\t\t);\r\n\t\t\t\t\t\r\n\t\t\t\t\t_oContext.strokeRect(\r\n\t\t\t\t\t\tMath.ceil(nLeft) - 0.5,\r\n\t\t\t\t\t\tMath.ceil(nTop) - 0.5,\r\n\t\t\t\t\t\tnRoundedWidth,\r\n\t\t\t\t\t\tnRoundedHeight\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._bIsPainted = true;\r\n\t\t};\r\n\t\t\t\r\n\t\t/**\r\n\t\t * Make the image from Canvas if the browser supports Data URI.\r\n\t\t */\r\n\t\tDrawing.prototype.makeImage = function () {\r\n\t\t\tif (this._bIsPainted) {\r\n\t\t\t\t_safeSetDataURI.call(this, _onMakeImage);\r\n\t\t\t}\r\n\t\t};\r\n\t\t\t\r\n\t\t/**\r\n\t\t * Return whether the QRCode is painted or not\r\n\t\t * \r\n\t\t * @return {Boolean}\r\n\t\t */\r\n\t\tDrawing.prototype.isPainted = function () {\r\n\t\t\treturn this._bIsPainted;\r\n\t\t};\r\n\t\t\r\n\t\t/**\r\n\t\t * Clear the QRCode\r\n\t\t */\r\n\t\tDrawing.prototype.clear = function () {\r\n\t\t\tthis._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);\r\n\t\t\tthis._bIsPainted = false;\r\n\t\t};\r\n\t\t\r\n\t\t/**\r\n\t\t * @private\r\n\t\t * @param {Number} nNumber\r\n\t\t */\r\n\t\tDrawing.prototype.round = function (nNumber) {\r\n\t\t\tif (!nNumber) {\r\n\t\t\t\treturn nNumber;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Math.floor(nNumber * 1000) / 1000;\r\n\t\t};\r\n\t\t\r\n\t\treturn Drawing;\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Get the type by string length\r\n\t * \r\n\t * @private\r\n\t * @param {String} sText\r\n\t * @param {Number} nCorrectLevel\r\n\t * @return {Number} type\r\n\t */\r\n\tfunction _getTypeNumber(sText, nCorrectLevel) {\t\t\t\r\n\t\tvar nType = 1;\r\n\t\tvar length = _getUTF8Length(sText);\r\n\t\t\r\n\t\tfor (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {\r\n\t\t\tvar nLimit = 0;\r\n\t\t\t\r\n\t\t\tswitch (nCorrectLevel) {\r\n\t\t\t\tcase QRErrorCorrectLevel.L :\r\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][0];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase QRErrorCorrectLevel.M :\r\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][1];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase QRErrorCorrectLevel.Q :\r\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][2];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase QRErrorCorrectLevel.H :\r\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][3];\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (length <= nLimit) {\r\n\t\t\t\tbreak;\r\n\t\t\t} else {\r\n\t\t\t\tnType++;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif (nType > QRCodeLimitLength.length) {\r\n\t\t\tthrow new Error(\"Too long data\");\r\n\t\t}\r\n\t\t\r\n\t\treturn nType;\r\n\t}\r\n\r\n\tfunction _getUTF8Length(sText) {\r\n\t\tvar replacedText = encodeURI(sText).toString().replace(/\\%[0-9a-fA-F]{2}/g, 'a');\r\n\t\treturn replacedText.length + (replacedText.length != sText ? 3 : 0);\r\n\t}\r\n\t\r\n\t/**\r\n\t * @class QRCode\r\n\t * @constructor\r\n\t * @example \r\n\t * new QRCode(document.getElementById(\"test\"), \"http://jindo.dev.naver.com/collie\");\r\n\t *\r\n\t * @example\r\n\t * var oQRCode = new QRCode(\"test\", {\r\n\t * text : \"http://naver.com\",\r\n\t * width : 128,\r\n\t * height : 128\r\n\t * });\r\n\t * \r\n\t * oQRCode.clear(); // Clear the QRCode.\r\n\t * oQRCode.makeCode(\"http://map.naver.com\"); // Re-create the QRCode.\r\n\t *\r\n\t * @param {HTMLElement|String} el target element or 'id' attribute of element.\r\n\t * @param {Object|String} vOption\r\n\t * @param {String} vOption.text QRCode link data\r\n\t * @param {Number} [vOption.width=256]\r\n\t * @param {Number} [vOption.height=256]\r\n\t * @param {String} [vOption.colorDark=\"#000000\"]\r\n\t * @param {String} [vOption.colorLight=\"#ffffff\"]\r\n\t * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] \r\n\t */\r\n\tQRCode = function (el, vOption) {\r\n\t\tthis._htOption = {\r\n\t\t\twidth : 256, \r\n\t\t\theight : 256,\r\n\t\t\ttypeNumber : 4,\r\n\t\t\tcolorDark : \"#000000\",\r\n\t\t\tcolorLight : \"#ffffff\",\r\n\t\t\tcorrectLevel : QRErrorCorrectLevel.H\r\n\t\t};\r\n\t\t\r\n\t\tif (typeof vOption === 'string') {\r\n\t\t\tvOption\t= {\r\n\t\t\t\ttext : vOption\r\n\t\t\t};\r\n\t\t}\r\n\t\t\r\n\t\t// Overwrites options\r\n\t\tif (vOption) {\r\n\t\t\tfor (var i in vOption) {\r\n\t\t\t\tthis._htOption[i] = vOption[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif (typeof el == \"string\") {\r\n\t\t\tel = document.getElementById(el);\r\n\t\t}\r\n\r\n\t\tif (this._htOption.useSVG) {\r\n\t\t\tDrawing = svgDrawer;\r\n\t\t}\r\n\t\t\r\n\t\tthis._android = _getAndroid();\r\n\t\tthis._el = el;\r\n\t\tthis._oQRCode = null;\r\n\t\tthis._oDrawing = new Drawing(this._el, this._htOption);\r\n\t\t\r\n\t\tif (this._htOption.text) {\r\n\t\t\tthis.makeCode(this._htOption.text);\t\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Make the QRCode\r\n\t * \r\n\t * @param {String} sText link data\r\n\t */\r\n\tQRCode.prototype.makeCode = function (sText) {\r\n\t\tthis._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);\r\n\t\tthis._oQRCode.addData(sText);\r\n\t\tthis._oQRCode.make();\r\n\t\tthis._el.title = sText;\r\n\t\tthis._oDrawing.draw(this._oQRCode);\t\t\t\r\n\t\tthis.makeImage();\r\n\t};\r\n\t\r\n\t/**\r\n\t * Make the Image from Canvas element\r\n\t * - It occurs automatically\r\n\t * - Android below 3 doesn't support Data-URI spec.\r\n\t * \r\n\t * @private\r\n\t */\r\n\tQRCode.prototype.makeImage = function () {\r\n\t\tif (typeof this._oDrawing.makeImage == \"function\" && (!this._android || this._android >= 3)) {\r\n\t\t\tthis._oDrawing.makeImage();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Clear the QRCode\r\n\t */\r\n\tQRCode.prototype.clear = function () {\r\n\t\tthis._oDrawing.clear();\r\n\t};\r\n\t\r\n\t/**\r\n\t * @name QRCode.CorrectLevel\r\n\t */\r\n\tQRCode.CorrectLevel = QRErrorCorrectLevel;\r\n})();\r\n\r\n\r\nmodule.exports = QRCode;\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMzgxZjllNGU4ZWRhYjE3Y2FmYzIiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9iYWNrdG9wL2luZGV4LmpzIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvc2hhcmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vanMvYXJ0aWNsZS5qcyIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL3NoYXJlL3FyY29kZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Qjs7Ozs7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxRkFBcUYsSUFBSSxRQUFRLE1BQU0sT0FBTyxJQUFJLFVBQVUsUUFBUTtBQUNwSSxtRUFBbUUsSUFBSSxRQUFRLE1BQU0sTUFB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0VBQXdFLEVBQUU7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esb0JBQW9CO0FBQ3BCLDZDQUE2QztBQUM3QztBQUNBLFlBQVksbUJBQW1CO0FBQy9CLFlBQVksY0FBYztBQUMxQixZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Qsd0IiLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMzgxZjllNGU4ZWRhYjE3Y2FmYzIiLCJ2YXIgYmFja1RvcCA9IGZ1bmN0aW9uKGJ0bklkKXtcclxuICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidG5JZCk7XHJcbiAgICB2YXIgZCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgIHZhciBiID0gZG9jdW1lbnQuYm9keTtcclxuICAgIHdpbmRvdy5vbnNjcm9sbCA9IHNldDtcclxuICAgIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBidG4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgdGhpcy50aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGQuc2Nyb2xsVG9wIC09IE1hdGguY2VpbCgoZC5zY3JvbGxUb3AgKyBiLnNjcm9sbFRvcCkgKiAwLjEpO1xyXG4gICAgICAgICAgICBiLnNjcm9sbFRvcCAtPSBNYXRoLmNlaWwoKGQuc2Nyb2xsVG9wICsgYi5zY3JvbGxUb3ApICogMC4xKTtcclxuICAgICAgICAgICAgaWYoKGQuc2Nyb2xsVG9wICsgYi5zY3JvbGxUb3ApID09IDApe1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChidG4udGltZXIsd2luZG93Lm9uc2Nyb2xsID0gc2V0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwxMClcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0KCl7XHJcbiAgICAgICAgYnRuLnN0eWxlLmRpc3BsYXkgPSAoZC5zY3JvbGxUb3AgKyBiLnNjcm9sbFRvcCA+IDEwMCkgPyAnYmxvY2snIDogJ25vbmUnXHJcbiAgICB9XHJcbn07XHJcbm1vZHVsZS5leHBvcnRzID0gYmFja1RvcDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvYmFja3RvcC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKlxyXG4gKiBzaW1wbGUtc2hhcmVcclxuICogQHl1amlhbmdzaHVpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS95dWppYW5nc2h1aS9zaW1wbGUtc2hhcmUuanNcclxuICpcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuXHJcbnZhciBTaW1wbGVTaGFyZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBcclxuICAgICAgICAvLyBnZXQgc2hhcmUgY29udGVudFxyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciB1cmwgPSBvcHRpb25zLnVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICB2YXIgdGl0bGUgPSBvcHRpb25zLnRpdGxlIHx8IGRvY3VtZW50LnRpdGxlO1xyXG4gICAgICAgIHZhciBjb250ZW50ID0gb3B0aW9ucy5jb250ZW50IHx8ICcnO1xyXG4gICAgICAgIHZhciBwaWMgPSBvcHRpb25zLnBpYyB8fCAnJztcclxuICAgIFxyXG4gICAgICAgIC8vIGZpeCBjb250ZW50IGZvcm1hdFxyXG4gICAgICAgIHZhciB1cmxvbGQgPSB1cmw7XHJcbiAgICAgICAgdXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KHVybCk7XHJcbiAgICAgICAgdGl0bGUgPSBlbmNvZGVVUklDb21wb25lbnQodGl0bGUpO1xyXG4gICAgICAgIGNvbnRlbnQgPSBlbmNvZGVVUklDb21wb25lbnQoY29udGVudCk7XHJcbiAgICAgICAgcGljID0gZW5jb2RlVVJJQ29tcG9uZW50KHBpYyk7XHJcbiAgICBcclxuICAgICAgICAvLyBzaGFyZSB0YXJnZXQgdXJsXHJcbiAgICAgICAgdmFyIHF6b25lID0gJ2h0dHA6Ly9zbnMucXpvbmUucXEuY29tL2NnaS1iaW4vcXpzaGFyZS9jZ2lfcXpzaGFyZV9vbmVrZXk/dXJsPXt1cmx9JnRpdGxlPXt0aXRsZX0mcGljcz17cGljfSZzdW1tYXJ5PXtjb250ZW50fSc7XHJcbiAgICAgICAgdmFyIHdlaWJvID0gJ2h0dHA6Ly9zZXJ2aWNlLndlaWJvLmNvbS9zaGFyZS9zaGFyZS5waHA/dXJsPXt1cmx9JnRpdGxlPXt0aXRsZX0mcGljPXtwaWN9JnNlYXJjaFBpYz1mYWxzZSc7XHJcbiAgICAgICAgdmFyIHRxcSA9ICdodHRwOi8vc2hhcmUudi50LnFxLmNvbS9pbmRleC5waHA/Yz1zaGFyZSZhPWluZGV4JnVybD17dXJsfSZ0aXRsZT17dGl0bGV9JmFwcGtleT04MDFjZjc2ZDNjZmM0NGFkYTUyZWMxMzExNGU4NGE5Nic7XHJcbiAgICAgICAgdmFyIHJlbnJlbiA9ICdodHRwOi8vd2lkZ2V0LnJlbnJlbi5jb20vZGlhbG9nL3NoYXJlP3Jlc291cmNlVXJsPXt1cmx9JnNyY1VybD17dXJsfSZ0aXRsZT17dGl0bGV9JmRlc2NyaXB0aW9uPXtjb250ZW50fSc7XHJcbiAgICAgICAgdmFyIGRvdWJhbiA9ICdodHRwOi8vd3d3LmRvdWJhbi5jb20vc2hhcmUvc2VydmljZT9ocmVmPXt1cmx9Jm5hbWU9e3RpdGxlfSZ0ZXh0PXtjb250ZW50fSZpbWFnZT17cGljfSc7XHJcbiAgICAgICAgdmFyIGZhY2Vib29rID0gJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZXIvc2hhcmVyLnBocD91PXt1cmx9JnQ9e3RpdGxlfSZwaWM9e3BpY30nO1xyXG4gICAgICAgIHZhciB0d2l0dGVyID0gJ2h0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9e3RpdGxlfSZ1cmw9e3VybH0nO1xyXG4gICAgICAgIHZhciBsaW5rZWRpbiA9ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vc2hhcmVBcnRpY2xlP3RpdGxlPXt0aXRsZX0mc3VtbWFyeT17Y29udGVudH0mbWluaT10cnVlJnVybD17dXJsfSZybz10cnVlJztcclxuICAgICAgICB2YXIgd2VpeGluID0gJ2h0dHA6Ly9xci5saWFudHUuY29tL2FwaS5waHA/dGV4dD17dXJsfSc7XHJcbiAgICAgICAgdmFyIHFxID0gJ2h0dHA6Ly9jb25uZWN0LnFxLmNvbS93aWRnZXQvc2hhcmVxcS9pbmRleC5odG1sP3VybD17dXJsfSZkZXNjPXt0aXRsZX0mcGljcz17cGljfSc7XHJcbiAgICAgICAgdmFyIGd1YmEgPSAnaHR0cDovL2lndWJhLmVhc3Rtb25leS5jb20vc2hhcmU/dXJsPXt1cmx9JnRpdGxlPXt0aXRsZX0nO1xyXG4gICAgXHJcbiAgICAgICAgLy8gcmVwbGFjZSBjb250ZW50IGZ1bmN0aW9uc1xyXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VBUEkgKGFwaSkge1xyXG4gICAgICAgICAgICBhcGkgPSBhcGkucmVwbGFjZSgne3VybH0nLCB1cmwpO1xyXG4gICAgICAgICAgICBhcGkgPSBhcGkucmVwbGFjZSgne3RpdGxlfScsIHRpdGxlKTtcclxuICAgICAgICAgICAgYXBpID0gYXBpLnJlcGxhY2UoJ3tjb250ZW50fScsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBhcGkgPSBhcGkucmVwbGFjZSgne3BpY30nLCBwaWMpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJldHVybiBhcGk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgLy8gc2hhcmUgdGFyZ2V0XHJcbiAgICAgICAgdGhpcy5xem9uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3BlbihyZXBsYWNlQVBJKHF6b25lKSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLndlaWJvID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHJlcGxhY2VBUEkod2VpYm8pKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudHFxID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHJlcGxhY2VBUEkodHFxKSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlbnJlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3BlbihyZXBsYWNlQVBJKHJlbnJlbikpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kb3ViYW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4ocmVwbGFjZUFQSShkb3ViYW4pKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZmFjZWJvb2sgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4ocmVwbGFjZUFQSShmYWNlYm9vaykpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50d2l0dGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHJlcGxhY2VBUEkodHdpdHRlcikpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5saW5rZWRpbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3BlbihyZXBsYWNlQVBJKGxpbmtlZGluKSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnFxID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHJlcGxhY2VBUEkocXEpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMud2VpeGluID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1dlaVhpbigpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ndWJhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3BlbihyZXBsYWNlQVBJKGd1YmEpKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgICAgIHRoaXMuc2hvd1dlaVhpbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy8g5aSa5qyh54K55Ye777yM56e76ZmkXHJcbiAgICAgICAgICAgIHZhciAkc2hhcmVEaWFsb2cgPSAkKCcuc2hhcmUtZGlhbG9nJyk7XHJcbiAgICAgICAgICAgICRzaGFyZURpYWxvZy5yZW1vdmUoKTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgUVJDb2RlID0gcmVxdWlyZSgnLi9xcmNvZGUnKTtcclxuICAgICAgICAgICAgdmFyIGh0bWwgPSAnPGRpdiBjbGFzcz1cInNoYXJlLWRpYWxvZ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzaGFyZS1kaWFsb2ctdGl0bGVcIj48c3BhbiBjbGFzcz1cInNoYXJlLWRpYWxvZy1jbG9zZVwiPsOXPC9zcGFuPuWIhuS6q+WIsOW+ruS/oeaci+WPi+WciDwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzaGFyZS1kaWFsb2ctY29udGVudFwiIGlkPVwic2hhcmUtZGlhbG9nLWNvbnRlbnRcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgIC8vICc8aWZyYW1lIGNsYXNzPVwic2hhcmUtZGlhbG9nLWNvbnRlbnRcIiBzcmM9XCInK3JlcGxhY2VBUEkod2VpeGluKSsnXCIgZnJhbWVib3JkZXI9XCIwXCI+PC9pZnJhbWU+JytcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nXHJcbiAgICBcclxuICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZChodG1sKTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgcXJjb2RlID0gbmV3IFFSQ29kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNoYXJlLWRpYWxvZy1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB1cmxvbGQsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMjU2LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNTYsXHJcbiAgICAgICAgICAgICAgICBjb2xvckRhcms6IFwiIzAwMDAwMFwiLFxyXG4gICAgICAgICAgICAgICAgY29sb3JMaWdodDogXCIjZmZmZmZmXCIsXHJcbiAgICAgICAgICAgICAgICBjb3JyZWN0TGV2ZWw6IFFSQ29kZS5Db3JyZWN0TGV2ZWwuSFxyXG4gICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgICAkKCcuc2hhcmUtZGlhbG9nLWNsb3NlJykuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJCgnLnNoYXJlLWRpYWxvZycpLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgbW9kdWxlLmV4cG9ydHM9U2ltcGxlU2hhcmU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL3NoYXJlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlxyXG52YXIgc2hhcmUgPSByZXF1aXJlKCcuL21vZHVsZXMvc2hhcmUvaW5kZXgnKTtcclxudmFyIGJhY2tUb3AgPSByZXF1aXJlKCcuL21vZHVsZXMvYmFja3RvcC9pbmRleCcpO1xyXG5cclxud2luZG93LnNoYXJlID0gc2hhcmU7XHJcblxyXG4kKGZ1bmN0aW9uKCl7XHJcbiAgICBiYWNrVG9wKCdiYWNrdG9wJyk7XHJcblxyXG4gICAgdmFyIGJhbm5lckhlaWdodCA9ICQoJy50b3AtYmFubmVyJykuaGVpZ2h0KCk7XHJcbiAgICAkKCcuZml4ZWRfcmlnaHQnKS5jc3MoJ3RvcCcsYmFubmVySGVpZ2h0KzYxKzArJ3B4Jyk7XHJcblxyXG4gICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgYmFubmVySGVpZ2h0ID0gJCgnLnRvcC1iYW5uZXInKS5oZWlnaHQoKTtcclxuICAgICAgICAkKCcuZml4ZWRfcmlnaHQnKS5jc3MoJ3RvcCcsYmFubmVySGVpZ2h0KzYxKzArJ3B4Jyk7XHJcbiAgICB9KTtcclxufSlcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL2FydGljbGUuanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXHJcbiAqIEBmaWxlb3ZlcnZpZXdcclxuICogLSBVc2luZyB0aGUgJ1FSQ29kZSBmb3IgSmF2YXNjcmlwdCBsaWJyYXJ5J1xyXG4gKiAtIEZpeGVkIGRhdGFzZXQgb2YgJ1FSQ29kZSBmb3IgSmF2YXNjcmlwdCBsaWJyYXJ5JyBmb3Igc3VwcG9ydCBmdWxsLXNwZWMuXHJcbiAqIC0gdGhpcyBsaWJyYXJ5IGhhcyBubyBkZXBlbmRlbmNpZXMuXHJcbiAqIFxyXG4gKiBAYXV0aG9yIGRhdmlkc2hpbWpzXHJcbiAqIEBzZWUgPGEgaHJlZj1cImh0dHA6Ly93d3cuZC1wcm9qZWN0LmNvbS9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5odHRwOi8vd3d3LmQtcHJvamVjdC5jb20vPC9hPlxyXG4gKiBAc2VlIDxhIGhyZWY9XCJodHRwOi8vamVyb21lZXRpZW5uZS5naXRodWIuY29tL2pxdWVyeS1xcmNvZGUvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+aHR0cDovL2plcm9tZWV0aWVubmUuZ2l0aHViLmNvbS9qcXVlcnktcXJjb2RlLzwvYT5cclxuICovXHJcbnZhciBRUkNvZGU7XHJcblxyXG4oZnVuY3Rpb24gKCkge1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gUVJDb2RlIGZvciBKYXZhU2NyaXB0XHJcblx0Ly9cclxuXHQvLyBDb3B5cmlnaHQgKGMpIDIwMDkgS2F6dWhpa28gQXJhc2VcclxuXHQvL1xyXG5cdC8vIFVSTDogaHR0cDovL3d3dy5kLXByb2plY3QuY29tL1xyXG5cdC8vXHJcblx0Ly8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxyXG5cdC8vICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuXHQvL1xyXG5cdC8vIFRoZSB3b3JkIFwiUVIgQ29kZVwiIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFxyXG5cdC8vIERFTlNPIFdBVkUgSU5DT1JQT1JBVEVEXHJcblx0Ly8gICBodHRwOi8vd3d3LmRlbnNvLXdhdmUuY29tL3FyY29kZS9mYXFwYXRlbnQtZS5odG1sXHJcblx0Ly9cclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGZ1bmN0aW9uIFFSOGJpdEJ5dGUoZGF0YSkge1xyXG5cdFx0dGhpcy5tb2RlID0gUVJNb2RlLk1PREVfOEJJVF9CWVRFO1xyXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcclxuXHRcdHRoaXMucGFyc2VkRGF0YSA9IFtdO1xyXG5cclxuXHRcdC8vIEFkZGVkIHRvIHN1cHBvcnQgVVRGLTggQ2hhcmFjdGVyc1xyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmRhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdHZhciBieXRlQXJyYXkgPSBbXTtcclxuXHRcdFx0dmFyIGNvZGUgPSB0aGlzLmRhdGEuY2hhckNvZGVBdChpKTtcclxuXHJcblx0XHRcdGlmIChjb2RlID4gMHgxMDAwMCkge1xyXG5cdFx0XHRcdGJ5dGVBcnJheVswXSA9IDB4RjAgfCAoKGNvZGUgJiAweDFDMDAwMCkgPj4+IDE4KTtcclxuXHRcdFx0XHRieXRlQXJyYXlbMV0gPSAweDgwIHwgKChjb2RlICYgMHgzRjAwMCkgPj4+IDEyKTtcclxuXHRcdFx0XHRieXRlQXJyYXlbMl0gPSAweDgwIHwgKChjb2RlICYgMHhGQzApID4+PiA2KTtcclxuXHRcdFx0XHRieXRlQXJyYXlbM10gPSAweDgwIHwgKGNvZGUgJiAweDNGKTtcclxuXHRcdFx0fSBlbHNlIGlmIChjb2RlID4gMHg4MDApIHtcclxuXHRcdFx0XHRieXRlQXJyYXlbMF0gPSAweEUwIHwgKChjb2RlICYgMHhGMDAwKSA+Pj4gMTIpO1xyXG5cdFx0XHRcdGJ5dGVBcnJheVsxXSA9IDB4ODAgfCAoKGNvZGUgJiAweEZDMCkgPj4+IDYpO1xyXG5cdFx0XHRcdGJ5dGVBcnJheVsyXSA9IDB4ODAgfCAoY29kZSAmIDB4M0YpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGNvZGUgPiAweDgwKSB7XHJcblx0XHRcdFx0Ynl0ZUFycmF5WzBdID0gMHhDMCB8ICgoY29kZSAmIDB4N0MwKSA+Pj4gNik7XHJcblx0XHRcdFx0Ynl0ZUFycmF5WzFdID0gMHg4MCB8IChjb2RlICYgMHgzRik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ynl0ZUFycmF5WzBdID0gY29kZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5wYXJzZWREYXRhLnB1c2goYnl0ZUFycmF5KTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnBhcnNlZERhdGEgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB0aGlzLnBhcnNlZERhdGEpO1xyXG5cclxuXHRcdGlmICh0aGlzLnBhcnNlZERhdGEubGVuZ3RoICE9IHRoaXMuZGF0YS5sZW5ndGgpIHtcclxuXHRcdFx0dGhpcy5wYXJzZWREYXRhLnVuc2hpZnQoMTkxKTtcclxuXHRcdFx0dGhpcy5wYXJzZWREYXRhLnVuc2hpZnQoMTg3KTtcclxuXHRcdFx0dGhpcy5wYXJzZWREYXRhLnVuc2hpZnQoMjM5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFFSOGJpdEJ5dGUucHJvdG90eXBlID0ge1xyXG5cdFx0Z2V0TGVuZ3RoOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlZERhdGEubGVuZ3RoO1xyXG5cdFx0fSxcclxuXHRcdHdyaXRlOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5wYXJzZWREYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdGJ1ZmZlci5wdXQodGhpcy5wYXJzZWREYXRhW2ldLCA4KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdGZ1bmN0aW9uIFFSQ29kZU1vZGVsKHR5cGVOdW1iZXIsIGVycm9yQ29ycmVjdExldmVsKSB7XHJcblx0XHR0aGlzLnR5cGVOdW1iZXIgPSB0eXBlTnVtYmVyO1xyXG5cdFx0dGhpcy5lcnJvckNvcnJlY3RMZXZlbCA9IGVycm9yQ29ycmVjdExldmVsO1xyXG5cdFx0dGhpcy5tb2R1bGVzID0gbnVsbDtcclxuXHRcdHRoaXMubW9kdWxlQ291bnQgPSAwO1xyXG5cdFx0dGhpcy5kYXRhQ2FjaGUgPSBudWxsO1xyXG5cdFx0dGhpcy5kYXRhTGlzdCA9IFtdO1xyXG5cdH1cclxuXHJcblx0UVJDb2RlTW9kZWwucHJvdG90eXBlPXthZGREYXRhOmZ1bmN0aW9uKGRhdGEpe3ZhciBuZXdEYXRhPW5ldyBRUjhiaXRCeXRlKGRhdGEpO3RoaXMuZGF0YUxpc3QucHVzaChuZXdEYXRhKTt0aGlzLmRhdGFDYWNoZT1udWxsO30saXNEYXJrOmZ1bmN0aW9uKHJvdyxjb2wpe2lmKHJvdzwwfHx0aGlzLm1vZHVsZUNvdW50PD1yb3d8fGNvbDwwfHx0aGlzLm1vZHVsZUNvdW50PD1jb2wpe3Rocm93IG5ldyBFcnJvcihyb3crXCIsXCIrY29sKTt9XHJcblx0cmV0dXJuIHRoaXMubW9kdWxlc1tyb3ddW2NvbF07fSxnZXRNb2R1bGVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZHVsZUNvdW50O30sbWFrZTpmdW5jdGlvbigpe3RoaXMubWFrZUltcGwoZmFsc2UsdGhpcy5nZXRCZXN0TWFza1BhdHRlcm4oKSk7fSxtYWtlSW1wbDpmdW5jdGlvbih0ZXN0LG1hc2tQYXR0ZXJuKXt0aGlzLm1vZHVsZUNvdW50PXRoaXMudHlwZU51bWJlcio0KzE3O3RoaXMubW9kdWxlcz1uZXcgQXJyYXkodGhpcy5tb2R1bGVDb3VudCk7Zm9yKHZhciByb3c9MDtyb3c8dGhpcy5tb2R1bGVDb3VudDtyb3crKyl7dGhpcy5tb2R1bGVzW3Jvd109bmV3IEFycmF5KHRoaXMubW9kdWxlQ291bnQpO2Zvcih2YXIgY29sPTA7Y29sPHRoaXMubW9kdWxlQ291bnQ7Y29sKyspe3RoaXMubW9kdWxlc1tyb3ddW2NvbF09bnVsbDt9fVxyXG5cdHRoaXMuc2V0dXBQb3NpdGlvblByb2JlUGF0dGVybigwLDApO3RoaXMuc2V0dXBQb3NpdGlvblByb2JlUGF0dGVybih0aGlzLm1vZHVsZUNvdW50LTcsMCk7dGhpcy5zZXR1cFBvc2l0aW9uUHJvYmVQYXR0ZXJuKDAsdGhpcy5tb2R1bGVDb3VudC03KTt0aGlzLnNldHVwUG9zaXRpb25BZGp1c3RQYXR0ZXJuKCk7dGhpcy5zZXR1cFRpbWluZ1BhdHRlcm4oKTt0aGlzLnNldHVwVHlwZUluZm8odGVzdCxtYXNrUGF0dGVybik7aWYodGhpcy50eXBlTnVtYmVyPj03KXt0aGlzLnNldHVwVHlwZU51bWJlcih0ZXN0KTt9XHJcblx0aWYodGhpcy5kYXRhQ2FjaGU9PW51bGwpe3RoaXMuZGF0YUNhY2hlPVFSQ29kZU1vZGVsLmNyZWF0ZURhdGEodGhpcy50eXBlTnVtYmVyLHRoaXMuZXJyb3JDb3JyZWN0TGV2ZWwsdGhpcy5kYXRhTGlzdCk7fVxyXG5cdHRoaXMubWFwRGF0YSh0aGlzLmRhdGFDYWNoZSxtYXNrUGF0dGVybik7fSxzZXR1cFBvc2l0aW9uUHJvYmVQYXR0ZXJuOmZ1bmN0aW9uKHJvdyxjb2wpe2Zvcih2YXIgcj0tMTtyPD03O3IrKyl7aWYocm93K3I8PS0xfHx0aGlzLm1vZHVsZUNvdW50PD1yb3crciljb250aW51ZTtmb3IodmFyIGM9LTE7Yzw9NztjKyspe2lmKGNvbCtjPD0tMXx8dGhpcy5tb2R1bGVDb3VudDw9Y29sK2MpY29udGludWU7aWYoKDA8PXImJnI8PTYmJihjPT0wfHxjPT02KSl8fCgwPD1jJiZjPD02JiYocj09MHx8cj09NikpfHwoMjw9ciYmcjw9NCYmMjw9YyYmYzw9NCkpe3RoaXMubW9kdWxlc1tyb3crcl1bY29sK2NdPXRydWU7fWVsc2V7dGhpcy5tb2R1bGVzW3JvdytyXVtjb2wrY109ZmFsc2U7fX19fSxnZXRCZXN0TWFza1BhdHRlcm46ZnVuY3Rpb24oKXt2YXIgbWluTG9zdFBvaW50PTA7dmFyIHBhdHRlcm49MDtmb3IodmFyIGk9MDtpPDg7aSsrKXt0aGlzLm1ha2VJbXBsKHRydWUsaSk7dmFyIGxvc3RQb2ludD1RUlV0aWwuZ2V0TG9zdFBvaW50KHRoaXMpO2lmKGk9PTB8fG1pbkxvc3RQb2ludD5sb3N0UG9pbnQpe21pbkxvc3RQb2ludD1sb3N0UG9pbnQ7cGF0dGVybj1pO319XHJcblx0cmV0dXJuIHBhdHRlcm47fSxjcmVhdGVNb3ZpZUNsaXA6ZnVuY3Rpb24odGFyZ2V0X21jLGluc3RhbmNlX25hbWUsZGVwdGgpe3ZhciBxcl9tYz10YXJnZXRfbWMuY3JlYXRlRW1wdHlNb3ZpZUNsaXAoaW5zdGFuY2VfbmFtZSxkZXB0aCk7dmFyIGNzPTE7dGhpcy5tYWtlKCk7Zm9yKHZhciByb3c9MDtyb3c8dGhpcy5tb2R1bGVzLmxlbmd0aDtyb3crKyl7dmFyIHk9cm93KmNzO2Zvcih2YXIgY29sPTA7Y29sPHRoaXMubW9kdWxlc1tyb3ddLmxlbmd0aDtjb2wrKyl7dmFyIHg9Y29sKmNzO3ZhciBkYXJrPXRoaXMubW9kdWxlc1tyb3ddW2NvbF07aWYoZGFyayl7cXJfbWMuYmVnaW5GaWxsKDAsMTAwKTtxcl9tYy5tb3ZlVG8oeCx5KTtxcl9tYy5saW5lVG8oeCtjcyx5KTtxcl9tYy5saW5lVG8oeCtjcyx5K2NzKTtxcl9tYy5saW5lVG8oeCx5K2NzKTtxcl9tYy5lbmRGaWxsKCk7fX19XHJcblx0cmV0dXJuIHFyX21jO30sc2V0dXBUaW1pbmdQYXR0ZXJuOmZ1bmN0aW9uKCl7Zm9yKHZhciByPTg7cjx0aGlzLm1vZHVsZUNvdW50LTg7cisrKXtpZih0aGlzLm1vZHVsZXNbcl1bNl0hPW51bGwpe2NvbnRpbnVlO31cclxuXHR0aGlzLm1vZHVsZXNbcl1bNl09KHIlMj09MCk7fVxyXG5cdGZvcih2YXIgYz04O2M8dGhpcy5tb2R1bGVDb3VudC04O2MrKyl7aWYodGhpcy5tb2R1bGVzWzZdW2NdIT1udWxsKXtjb250aW51ZTt9XHJcblx0dGhpcy5tb2R1bGVzWzZdW2NdPShjJTI9PTApO319LHNldHVwUG9zaXRpb25BZGp1c3RQYXR0ZXJuOmZ1bmN0aW9uKCl7dmFyIHBvcz1RUlV0aWwuZ2V0UGF0dGVyblBvc2l0aW9uKHRoaXMudHlwZU51bWJlcik7Zm9yKHZhciBpPTA7aTxwb3MubGVuZ3RoO2krKyl7Zm9yKHZhciBqPTA7ajxwb3MubGVuZ3RoO2orKyl7dmFyIHJvdz1wb3NbaV07dmFyIGNvbD1wb3Nbal07aWYodGhpcy5tb2R1bGVzW3Jvd11bY29sXSE9bnVsbCl7Y29udGludWU7fVxyXG5cdGZvcih2YXIgcj0tMjtyPD0yO3IrKyl7Zm9yKHZhciBjPS0yO2M8PTI7YysrKXtpZihyPT0tMnx8cj09Mnx8Yz09LTJ8fGM9PTJ8fChyPT0wJiZjPT0wKSl7dGhpcy5tb2R1bGVzW3JvdytyXVtjb2wrY109dHJ1ZTt9ZWxzZXt0aGlzLm1vZHVsZXNbcm93K3JdW2NvbCtjXT1mYWxzZTt9fX19fX0sc2V0dXBUeXBlTnVtYmVyOmZ1bmN0aW9uKHRlc3Qpe3ZhciBiaXRzPVFSVXRpbC5nZXRCQ0hUeXBlTnVtYmVyKHRoaXMudHlwZU51bWJlcik7Zm9yKHZhciBpPTA7aTwxODtpKyspe3ZhciBtb2Q9KCF0ZXN0JiYoKGJpdHM+PmkpJjEpPT0xKTt0aGlzLm1vZHVsZXNbTWF0aC5mbG9vcihpLzMpXVtpJTMrdGhpcy5tb2R1bGVDb3VudC04LTNdPW1vZDt9XHJcblx0Zm9yKHZhciBpPTA7aTwxODtpKyspe3ZhciBtb2Q9KCF0ZXN0JiYoKGJpdHM+PmkpJjEpPT0xKTt0aGlzLm1vZHVsZXNbaSUzK3RoaXMubW9kdWxlQ291bnQtOC0zXVtNYXRoLmZsb29yKGkvMyldPW1vZDt9fSxzZXR1cFR5cGVJbmZvOmZ1bmN0aW9uKHRlc3QsbWFza1BhdHRlcm4pe3ZhciBkYXRhPSh0aGlzLmVycm9yQ29ycmVjdExldmVsPDwzKXxtYXNrUGF0dGVybjt2YXIgYml0cz1RUlV0aWwuZ2V0QkNIVHlwZUluZm8oZGF0YSk7Zm9yKHZhciBpPTA7aTwxNTtpKyspe3ZhciBtb2Q9KCF0ZXN0JiYoKGJpdHM+PmkpJjEpPT0xKTtpZihpPDYpe3RoaXMubW9kdWxlc1tpXVs4XT1tb2Q7fWVsc2UgaWYoaTw4KXt0aGlzLm1vZHVsZXNbaSsxXVs4XT1tb2Q7fWVsc2V7dGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQtMTUraV1bOF09bW9kO319XHJcblx0Zm9yKHZhciBpPTA7aTwxNTtpKyspe3ZhciBtb2Q9KCF0ZXN0JiYoKGJpdHM+PmkpJjEpPT0xKTtpZihpPDgpe3RoaXMubW9kdWxlc1s4XVt0aGlzLm1vZHVsZUNvdW50LWktMV09bW9kO31lbHNlIGlmKGk8OSl7dGhpcy5tb2R1bGVzWzhdWzE1LWktMSsxXT1tb2Q7fWVsc2V7dGhpcy5tb2R1bGVzWzhdWzE1LWktMV09bW9kO319XHJcblx0dGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQtOF1bOF09KCF0ZXN0KTt9LG1hcERhdGE6ZnVuY3Rpb24oZGF0YSxtYXNrUGF0dGVybil7dmFyIGluYz0tMTt2YXIgcm93PXRoaXMubW9kdWxlQ291bnQtMTt2YXIgYml0SW5kZXg9Nzt2YXIgYnl0ZUluZGV4PTA7Zm9yKHZhciBjb2w9dGhpcy5tb2R1bGVDb3VudC0xO2NvbD4wO2NvbC09Mil7aWYoY29sPT02KWNvbC0tO3doaWxlKHRydWUpe2Zvcih2YXIgYz0wO2M8MjtjKyspe2lmKHRoaXMubW9kdWxlc1tyb3ddW2NvbC1jXT09bnVsbCl7dmFyIGRhcms9ZmFsc2U7aWYoYnl0ZUluZGV4PGRhdGEubGVuZ3RoKXtkYXJrPSgoKGRhdGFbYnl0ZUluZGV4XT4+PmJpdEluZGV4KSYxKT09MSk7fVxyXG5cdHZhciBtYXNrPVFSVXRpbC5nZXRNYXNrKG1hc2tQYXR0ZXJuLHJvdyxjb2wtYyk7aWYobWFzayl7ZGFyaz0hZGFyazt9XHJcblx0dGhpcy5tb2R1bGVzW3Jvd11bY29sLWNdPWRhcms7Yml0SW5kZXgtLTtpZihiaXRJbmRleD09LTEpe2J5dGVJbmRleCsrO2JpdEluZGV4PTc7fX19XHJcblx0cm93Kz1pbmM7aWYocm93PDB8fHRoaXMubW9kdWxlQ291bnQ8PXJvdyl7cm93LT1pbmM7aW5jPS1pbmM7YnJlYWs7fX19fX07UVJDb2RlTW9kZWwuUEFEMD0weEVDO1FSQ29kZU1vZGVsLlBBRDE9MHgxMTtRUkNvZGVNb2RlbC5jcmVhdGVEYXRhPWZ1bmN0aW9uKHR5cGVOdW1iZXIsZXJyb3JDb3JyZWN0TGV2ZWwsZGF0YUxpc3Qpe3ZhciByc0Jsb2Nrcz1RUlJTQmxvY2suZ2V0UlNCbG9ja3ModHlwZU51bWJlcixlcnJvckNvcnJlY3RMZXZlbCk7dmFyIGJ1ZmZlcj1uZXcgUVJCaXRCdWZmZXIoKTtmb3IodmFyIGk9MDtpPGRhdGFMaXN0Lmxlbmd0aDtpKyspe3ZhciBkYXRhPWRhdGFMaXN0W2ldO2J1ZmZlci5wdXQoZGF0YS5tb2RlLDQpO2J1ZmZlci5wdXQoZGF0YS5nZXRMZW5ndGgoKSxRUlV0aWwuZ2V0TGVuZ3RoSW5CaXRzKGRhdGEubW9kZSx0eXBlTnVtYmVyKSk7ZGF0YS53cml0ZShidWZmZXIpO31cclxuXHR2YXIgdG90YWxEYXRhQ291bnQ9MDtmb3IodmFyIGk9MDtpPHJzQmxvY2tzLmxlbmd0aDtpKyspe3RvdGFsRGF0YUNvdW50Kz1yc0Jsb2Nrc1tpXS5kYXRhQ291bnQ7fVxyXG5cdGlmKGJ1ZmZlci5nZXRMZW5ndGhJbkJpdHMoKT50b3RhbERhdGFDb3VudCo4KXt0aHJvdyBuZXcgRXJyb3IoXCJjb2RlIGxlbmd0aCBvdmVyZmxvdy4gKFwiXHJcblx0K2J1ZmZlci5nZXRMZW5ndGhJbkJpdHMoKVxyXG5cdCtcIj5cIlxyXG5cdCt0b3RhbERhdGFDb3VudCo4XHJcblx0K1wiKVwiKTt9XHJcblx0aWYoYnVmZmVyLmdldExlbmd0aEluQml0cygpKzQ8PXRvdGFsRGF0YUNvdW50Kjgpe2J1ZmZlci5wdXQoMCw0KTt9XHJcblx0d2hpbGUoYnVmZmVyLmdldExlbmd0aEluQml0cygpJTghPTApe2J1ZmZlci5wdXRCaXQoZmFsc2UpO31cclxuXHR3aGlsZSh0cnVlKXtpZihidWZmZXIuZ2V0TGVuZ3RoSW5CaXRzKCk+PXRvdGFsRGF0YUNvdW50Kjgpe2JyZWFrO31cclxuXHRidWZmZXIucHV0KFFSQ29kZU1vZGVsLlBBRDAsOCk7aWYoYnVmZmVyLmdldExlbmd0aEluQml0cygpPj10b3RhbERhdGFDb3VudCo4KXticmVhazt9XHJcblx0YnVmZmVyLnB1dChRUkNvZGVNb2RlbC5QQUQxLDgpO31cclxuXHRyZXR1cm4gUVJDb2RlTW9kZWwuY3JlYXRlQnl0ZXMoYnVmZmVyLHJzQmxvY2tzKTt9O1FSQ29kZU1vZGVsLmNyZWF0ZUJ5dGVzPWZ1bmN0aW9uKGJ1ZmZlcixyc0Jsb2Nrcyl7dmFyIG9mZnNldD0wO3ZhciBtYXhEY0NvdW50PTA7dmFyIG1heEVjQ291bnQ9MDt2YXIgZGNkYXRhPW5ldyBBcnJheShyc0Jsb2Nrcy5sZW5ndGgpO3ZhciBlY2RhdGE9bmV3IEFycmF5KHJzQmxvY2tzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjxyc0Jsb2Nrcy5sZW5ndGg7cisrKXt2YXIgZGNDb3VudD1yc0Jsb2Nrc1tyXS5kYXRhQ291bnQ7dmFyIGVjQ291bnQ9cnNCbG9ja3Nbcl0udG90YWxDb3VudC1kY0NvdW50O21heERjQ291bnQ9TWF0aC5tYXgobWF4RGNDb3VudCxkY0NvdW50KTttYXhFY0NvdW50PU1hdGgubWF4KG1heEVjQ291bnQsZWNDb3VudCk7ZGNkYXRhW3JdPW5ldyBBcnJheShkY0NvdW50KTtmb3IodmFyIGk9MDtpPGRjZGF0YVtyXS5sZW5ndGg7aSsrKXtkY2RhdGFbcl1baV09MHhmZiZidWZmZXIuYnVmZmVyW2krb2Zmc2V0XTt9XHJcblx0b2Zmc2V0Kz1kY0NvdW50O3ZhciByc1BvbHk9UVJVdGlsLmdldEVycm9yQ29ycmVjdFBvbHlub21pYWwoZWNDb3VudCk7dmFyIHJhd1BvbHk9bmV3IFFSUG9seW5vbWlhbChkY2RhdGFbcl0scnNQb2x5LmdldExlbmd0aCgpLTEpO3ZhciBtb2RQb2x5PXJhd1BvbHkubW9kKHJzUG9seSk7ZWNkYXRhW3JdPW5ldyBBcnJheShyc1BvbHkuZ2V0TGVuZ3RoKCktMSk7Zm9yKHZhciBpPTA7aTxlY2RhdGFbcl0ubGVuZ3RoO2krKyl7dmFyIG1vZEluZGV4PWkrbW9kUG9seS5nZXRMZW5ndGgoKS1lY2RhdGFbcl0ubGVuZ3RoO2VjZGF0YVtyXVtpXT0obW9kSW5kZXg+PTApP21vZFBvbHkuZ2V0KG1vZEluZGV4KTowO319XHJcblx0dmFyIHRvdGFsQ29kZUNvdW50PTA7Zm9yKHZhciBpPTA7aTxyc0Jsb2Nrcy5sZW5ndGg7aSsrKXt0b3RhbENvZGVDb3VudCs9cnNCbG9ja3NbaV0udG90YWxDb3VudDt9XHJcblx0dmFyIGRhdGE9bmV3IEFycmF5KHRvdGFsQ29kZUNvdW50KTt2YXIgaW5kZXg9MDtmb3IodmFyIGk9MDtpPG1heERjQ291bnQ7aSsrKXtmb3IodmFyIHI9MDtyPHJzQmxvY2tzLmxlbmd0aDtyKyspe2lmKGk8ZGNkYXRhW3JdLmxlbmd0aCl7ZGF0YVtpbmRleCsrXT1kY2RhdGFbcl1baV07fX19XHJcblx0Zm9yKHZhciBpPTA7aTxtYXhFY0NvdW50O2krKyl7Zm9yKHZhciByPTA7cjxyc0Jsb2Nrcy5sZW5ndGg7cisrKXtpZihpPGVjZGF0YVtyXS5sZW5ndGgpe2RhdGFbaW5kZXgrK109ZWNkYXRhW3JdW2ldO319fVxyXG5cdHJldHVybiBkYXRhO307dmFyIFFSTW9kZT17TU9ERV9OVU1CRVI6MTw8MCxNT0RFX0FMUEhBX05VTToxPDwxLE1PREVfOEJJVF9CWVRFOjE8PDIsTU9ERV9LQU5KSToxPDwzfTt2YXIgUVJFcnJvckNvcnJlY3RMZXZlbD17TDoxLE06MCxROjMsSDoyfTt2YXIgUVJNYXNrUGF0dGVybj17UEFUVEVSTjAwMDowLFBBVFRFUk4wMDE6MSxQQVRURVJOMDEwOjIsUEFUVEVSTjAxMTozLFBBVFRFUk4xMDA6NCxQQVRURVJOMTAxOjUsUEFUVEVSTjExMDo2LFBBVFRFUk4xMTE6N307dmFyIFFSVXRpbD17UEFUVEVSTl9QT1NJVElPTl9UQUJMRTpbW10sWzYsMThdLFs2LDIyXSxbNiwyNl0sWzYsMzBdLFs2LDM0XSxbNiwyMiwzOF0sWzYsMjQsNDJdLFs2LDI2LDQ2XSxbNiwyOCw1MF0sWzYsMzAsNTRdLFs2LDMyLDU4XSxbNiwzNCw2Ml0sWzYsMjYsNDYsNjZdLFs2LDI2LDQ4LDcwXSxbNiwyNiw1MCw3NF0sWzYsMzAsNTQsNzhdLFs2LDMwLDU2LDgyXSxbNiwzMCw1OCw4Nl0sWzYsMzQsNjIsOTBdLFs2LDI4LDUwLDcyLDk0XSxbNiwyNiw1MCw3NCw5OF0sWzYsMzAsNTQsNzgsMTAyXSxbNiwyOCw1NCw4MCwxMDZdLFs2LDMyLDU4LDg0LDExMF0sWzYsMzAsNTgsODYsMTE0XSxbNiwzNCw2Miw5MCwxMThdLFs2LDI2LDUwLDc0LDk4LDEyMl0sWzYsMzAsNTQsNzgsMTAyLDEyNl0sWzYsMjYsNTIsNzgsMTA0LDEzMF0sWzYsMzAsNTYsODIsMTA4LDEzNF0sWzYsMzQsNjAsODYsMTEyLDEzOF0sWzYsMzAsNTgsODYsMTE0LDE0Ml0sWzYsMzQsNjIsOTAsMTE4LDE0Nl0sWzYsMzAsNTQsNzgsMTAyLDEyNiwxNTBdLFs2LDI0LDUwLDc2LDEwMiwxMjgsMTU0XSxbNiwyOCw1NCw4MCwxMDYsMTMyLDE1OF0sWzYsMzIsNTgsODQsMTEwLDEzNiwxNjJdLFs2LDI2LDU0LDgyLDExMCwxMzgsMTY2XSxbNiwzMCw1OCw4NiwxMTQsMTQyLDE3MF1dLEcxNTooMTw8MTApfCgxPDw4KXwoMTw8NSl8KDE8PDQpfCgxPDwyKXwoMTw8MSl8KDE8PDApLEcxODooMTw8MTIpfCgxPDwxMSl8KDE8PDEwKXwoMTw8OSl8KDE8PDgpfCgxPDw1KXwoMTw8Mil8KDE8PDApLEcxNV9NQVNLOigxPDwxNCl8KDE8PDEyKXwoMTw8MTApfCgxPDw0KXwoMTw8MSksZ2V0QkNIVHlwZUluZm86ZnVuY3Rpb24oZGF0YSl7dmFyIGQ9ZGF0YTw8MTA7d2hpbGUoUVJVdGlsLmdldEJDSERpZ2l0KGQpLVFSVXRpbC5nZXRCQ0hEaWdpdChRUlV0aWwuRzE1KT49MCl7ZF49KFFSVXRpbC5HMTU8PChRUlV0aWwuZ2V0QkNIRGlnaXQoZCktUVJVdGlsLmdldEJDSERpZ2l0KFFSVXRpbC5HMTUpKSk7fVxyXG5cdHJldHVybigoZGF0YTw8MTApfGQpXlFSVXRpbC5HMTVfTUFTSzt9LGdldEJDSFR5cGVOdW1iZXI6ZnVuY3Rpb24oZGF0YSl7dmFyIGQ9ZGF0YTw8MTI7d2hpbGUoUVJVdGlsLmdldEJDSERpZ2l0KGQpLVFSVXRpbC5nZXRCQ0hEaWdpdChRUlV0aWwuRzE4KT49MCl7ZF49KFFSVXRpbC5HMTg8PChRUlV0aWwuZ2V0QkNIRGlnaXQoZCktUVJVdGlsLmdldEJDSERpZ2l0KFFSVXRpbC5HMTgpKSk7fVxyXG5cdHJldHVybihkYXRhPDwxMil8ZDt9LGdldEJDSERpZ2l0OmZ1bmN0aW9uKGRhdGEpe3ZhciBkaWdpdD0wO3doaWxlKGRhdGEhPTApe2RpZ2l0Kys7ZGF0YT4+Pj0xO31cclxuXHRyZXR1cm4gZGlnaXQ7fSxnZXRQYXR0ZXJuUG9zaXRpb246ZnVuY3Rpb24odHlwZU51bWJlcil7cmV0dXJuIFFSVXRpbC5QQVRURVJOX1BPU0lUSU9OX1RBQkxFW3R5cGVOdW1iZXItMV07fSxnZXRNYXNrOmZ1bmN0aW9uKG1hc2tQYXR0ZXJuLGksail7c3dpdGNoKG1hc2tQYXR0ZXJuKXtjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjAwMDpyZXR1cm4oaStqKSUyPT0wO2Nhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMDAxOnJldHVybiBpJTI9PTA7Y2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4wMTA6cmV0dXJuIGolMz09MDtjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjAxMTpyZXR1cm4oaStqKSUzPT0wO2Nhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMTAwOnJldHVybihNYXRoLmZsb29yKGkvMikrTWF0aC5mbG9vcihqLzMpKSUyPT0wO2Nhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMTAxOnJldHVybihpKmopJTIrKGkqaiklMz09MDtjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjExMDpyZXR1cm4oKGkqaiklMisoaSpqKSUzKSUyPT0wO2Nhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMTExOnJldHVybigoaSpqKSUzKyhpK2opJTIpJTI9PTA7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbWFza1BhdHRlcm46XCIrbWFza1BhdHRlcm4pO319LGdldEVycm9yQ29ycmVjdFBvbHlub21pYWw6ZnVuY3Rpb24oZXJyb3JDb3JyZWN0TGVuZ3RoKXt2YXIgYT1uZXcgUVJQb2x5bm9taWFsKFsxXSwwKTtmb3IodmFyIGk9MDtpPGVycm9yQ29ycmVjdExlbmd0aDtpKyspe2E9YS5tdWx0aXBseShuZXcgUVJQb2x5bm9taWFsKFsxLFFSTWF0aC5nZXhwKGkpXSwwKSk7fVxyXG5cdHJldHVybiBhO30sZ2V0TGVuZ3RoSW5CaXRzOmZ1bmN0aW9uKG1vZGUsdHlwZSl7aWYoMTw9dHlwZSYmdHlwZTwxMCl7c3dpdGNoKG1vZGUpe2Nhc2UgUVJNb2RlLk1PREVfTlVNQkVSOnJldHVybiAxMDtjYXNlIFFSTW9kZS5NT0RFX0FMUEhBX05VTTpyZXR1cm4gOTtjYXNlIFFSTW9kZS5NT0RFXzhCSVRfQllURTpyZXR1cm4gODtjYXNlIFFSTW9kZS5NT0RFX0tBTkpJOnJldHVybiA4O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwibW9kZTpcIittb2RlKTt9fWVsc2UgaWYodHlwZTwyNyl7c3dpdGNoKG1vZGUpe2Nhc2UgUVJNb2RlLk1PREVfTlVNQkVSOnJldHVybiAxMjtjYXNlIFFSTW9kZS5NT0RFX0FMUEhBX05VTTpyZXR1cm4gMTE7Y2FzZSBRUk1vZGUuTU9ERV84QklUX0JZVEU6cmV0dXJuIDE2O2Nhc2UgUVJNb2RlLk1PREVfS0FOSkk6cmV0dXJuIDEwO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwibW9kZTpcIittb2RlKTt9fWVsc2UgaWYodHlwZTw0MSl7c3dpdGNoKG1vZGUpe2Nhc2UgUVJNb2RlLk1PREVfTlVNQkVSOnJldHVybiAxNDtjYXNlIFFSTW9kZS5NT0RFX0FMUEhBX05VTTpyZXR1cm4gMTM7Y2FzZSBRUk1vZGUuTU9ERV84QklUX0JZVEU6cmV0dXJuIDE2O2Nhc2UgUVJNb2RlLk1PREVfS0FOSkk6cmV0dXJuIDEyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwibW9kZTpcIittb2RlKTt9fWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidHlwZTpcIit0eXBlKTt9fSxnZXRMb3N0UG9pbnQ6ZnVuY3Rpb24ocXJDb2RlKXt2YXIgbW9kdWxlQ291bnQ9cXJDb2RlLmdldE1vZHVsZUNvdW50KCk7dmFyIGxvc3RQb2ludD0wO2Zvcih2YXIgcm93PTA7cm93PG1vZHVsZUNvdW50O3JvdysrKXtmb3IodmFyIGNvbD0wO2NvbDxtb2R1bGVDb3VudDtjb2wrKyl7dmFyIHNhbWVDb3VudD0wO3ZhciBkYXJrPXFyQ29kZS5pc0Rhcmsocm93LGNvbCk7Zm9yKHZhciByPS0xO3I8PTE7cisrKXtpZihyb3crcjwwfHxtb2R1bGVDb3VudDw9cm93K3Ipe2NvbnRpbnVlO31cclxuXHRmb3IodmFyIGM9LTE7Yzw9MTtjKyspe2lmKGNvbCtjPDB8fG1vZHVsZUNvdW50PD1jb2wrYyl7Y29udGludWU7fVxyXG5cdGlmKHI9PTAmJmM9PTApe2NvbnRpbnVlO31cclxuXHRpZihkYXJrPT1xckNvZGUuaXNEYXJrKHJvdytyLGNvbCtjKSl7c2FtZUNvdW50Kys7fX19XHJcblx0aWYoc2FtZUNvdW50PjUpe2xvc3RQb2ludCs9KDMrc2FtZUNvdW50LTUpO319fVxyXG5cdGZvcih2YXIgcm93PTA7cm93PG1vZHVsZUNvdW50LTE7cm93Kyspe2Zvcih2YXIgY29sPTA7Y29sPG1vZHVsZUNvdW50LTE7Y29sKyspe3ZhciBjb3VudD0wO2lmKHFyQ29kZS5pc0Rhcmsocm93LGNvbCkpY291bnQrKztpZihxckNvZGUuaXNEYXJrKHJvdysxLGNvbCkpY291bnQrKztpZihxckNvZGUuaXNEYXJrKHJvdyxjb2wrMSkpY291bnQrKztpZihxckNvZGUuaXNEYXJrKHJvdysxLGNvbCsxKSljb3VudCsrO2lmKGNvdW50PT0wfHxjb3VudD09NCl7bG9zdFBvaW50Kz0zO319fVxyXG5cdGZvcih2YXIgcm93PTA7cm93PG1vZHVsZUNvdW50O3JvdysrKXtmb3IodmFyIGNvbD0wO2NvbDxtb2R1bGVDb3VudC02O2NvbCsrKXtpZihxckNvZGUuaXNEYXJrKHJvdyxjb2wpJiYhcXJDb2RlLmlzRGFyayhyb3csY29sKzEpJiZxckNvZGUuaXNEYXJrKHJvdyxjb2wrMikmJnFyQ29kZS5pc0Rhcmsocm93LGNvbCszKSYmcXJDb2RlLmlzRGFyayhyb3csY29sKzQpJiYhcXJDb2RlLmlzRGFyayhyb3csY29sKzUpJiZxckNvZGUuaXNEYXJrKHJvdyxjb2wrNikpe2xvc3RQb2ludCs9NDA7fX19XHJcblx0Zm9yKHZhciBjb2w9MDtjb2w8bW9kdWxlQ291bnQ7Y29sKyspe2Zvcih2YXIgcm93PTA7cm93PG1vZHVsZUNvdW50LTY7cm93Kyspe2lmKHFyQ29kZS5pc0Rhcmsocm93LGNvbCkmJiFxckNvZGUuaXNEYXJrKHJvdysxLGNvbCkmJnFyQ29kZS5pc0Rhcmsocm93KzIsY29sKSYmcXJDb2RlLmlzRGFyayhyb3crMyxjb2wpJiZxckNvZGUuaXNEYXJrKHJvdys0LGNvbCkmJiFxckNvZGUuaXNEYXJrKHJvdys1LGNvbCkmJnFyQ29kZS5pc0Rhcmsocm93KzYsY29sKSl7bG9zdFBvaW50Kz00MDt9fX1cclxuXHR2YXIgZGFya0NvdW50PTA7Zm9yKHZhciBjb2w9MDtjb2w8bW9kdWxlQ291bnQ7Y29sKyspe2Zvcih2YXIgcm93PTA7cm93PG1vZHVsZUNvdW50O3JvdysrKXtpZihxckNvZGUuaXNEYXJrKHJvdyxjb2wpKXtkYXJrQ291bnQrKzt9fX1cclxuXHR2YXIgcmF0aW89TWF0aC5hYnMoMTAwKmRhcmtDb3VudC9tb2R1bGVDb3VudC9tb2R1bGVDb3VudC01MCkvNTtsb3N0UG9pbnQrPXJhdGlvKjEwO3JldHVybiBsb3N0UG9pbnQ7fX07dmFyIFFSTWF0aD17Z2xvZzpmdW5jdGlvbihuKXtpZihuPDEpe3Rocm93IG5ldyBFcnJvcihcImdsb2coXCIrbitcIilcIik7fVxyXG5cdHJldHVybiBRUk1hdGguTE9HX1RBQkxFW25dO30sZ2V4cDpmdW5jdGlvbihuKXt3aGlsZShuPDApe24rPTI1NTt9XHJcblx0d2hpbGUobj49MjU2KXtuLT0yNTU7fVxyXG5cdHJldHVybiBRUk1hdGguRVhQX1RBQkxFW25dO30sRVhQX1RBQkxFOm5ldyBBcnJheSgyNTYpLExPR19UQUJMRTpuZXcgQXJyYXkoMjU2KX07Zm9yKHZhciBpPTA7aTw4O2krKyl7UVJNYXRoLkVYUF9UQUJMRVtpXT0xPDxpO31cclxuXHRmb3IodmFyIGk9ODtpPDI1NjtpKyspe1FSTWF0aC5FWFBfVEFCTEVbaV09UVJNYXRoLkVYUF9UQUJMRVtpLTRdXlFSTWF0aC5FWFBfVEFCTEVbaS01XV5RUk1hdGguRVhQX1RBQkxFW2ktNl1eUVJNYXRoLkVYUF9UQUJMRVtpLThdO31cclxuXHRmb3IodmFyIGk9MDtpPDI1NTtpKyspe1FSTWF0aC5MT0dfVEFCTEVbUVJNYXRoLkVYUF9UQUJMRVtpXV09aTt9XHJcblx0ZnVuY3Rpb24gUVJQb2x5bm9taWFsKG51bSxzaGlmdCl7aWYobnVtLmxlbmd0aD09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IobnVtLmxlbmd0aCtcIi9cIitzaGlmdCk7fVxyXG5cdHZhciBvZmZzZXQ9MDt3aGlsZShvZmZzZXQ8bnVtLmxlbmd0aCYmbnVtW29mZnNldF09PTApe29mZnNldCsrO31cclxuXHR0aGlzLm51bT1uZXcgQXJyYXkobnVtLmxlbmd0aC1vZmZzZXQrc2hpZnQpO2Zvcih2YXIgaT0wO2k8bnVtLmxlbmd0aC1vZmZzZXQ7aSsrKXt0aGlzLm51bVtpXT1udW1baStvZmZzZXRdO319XHJcblx0UVJQb2x5bm9taWFsLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gdGhpcy5udW1baW5kZXhdO30sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtLmxlbmd0aDt9LG11bHRpcGx5OmZ1bmN0aW9uKGUpe3ZhciBudW09bmV3IEFycmF5KHRoaXMuZ2V0TGVuZ3RoKCkrZS5nZXRMZW5ndGgoKS0xKTtmb3IodmFyIGk9MDtpPHRoaXMuZ2V0TGVuZ3RoKCk7aSsrKXtmb3IodmFyIGo9MDtqPGUuZ2V0TGVuZ3RoKCk7aisrKXtudW1baStqXV49UVJNYXRoLmdleHAoUVJNYXRoLmdsb2codGhpcy5nZXQoaSkpK1FSTWF0aC5nbG9nKGUuZ2V0KGopKSk7fX1cclxuXHRyZXR1cm4gbmV3IFFSUG9seW5vbWlhbChudW0sMCk7fSxtb2Q6ZnVuY3Rpb24oZSl7aWYodGhpcy5nZXRMZW5ndGgoKS1lLmdldExlbmd0aCgpPDApe3JldHVybiB0aGlzO31cclxuXHR2YXIgcmF0aW89UVJNYXRoLmdsb2codGhpcy5nZXQoMCkpLVFSTWF0aC5nbG9nKGUuZ2V0KDApKTt2YXIgbnVtPW5ldyBBcnJheSh0aGlzLmdldExlbmd0aCgpKTtmb3IodmFyIGk9MDtpPHRoaXMuZ2V0TGVuZ3RoKCk7aSsrKXtudW1baV09dGhpcy5nZXQoaSk7fVxyXG5cdGZvcih2YXIgaT0wO2k8ZS5nZXRMZW5ndGgoKTtpKyspe251bVtpXV49UVJNYXRoLmdleHAoUVJNYXRoLmdsb2coZS5nZXQoaSkpK3JhdGlvKTt9XHJcblx0cmV0dXJuIG5ldyBRUlBvbHlub21pYWwobnVtLDApLm1vZChlKTt9fTtmdW5jdGlvbiBRUlJTQmxvY2sodG90YWxDb3VudCxkYXRhQ291bnQpe3RoaXMudG90YWxDb3VudD10b3RhbENvdW50O3RoaXMuZGF0YUNvdW50PWRhdGFDb3VudDt9XHJcblx0UVJSU0Jsb2NrLlJTX0JMT0NLX1RBQkxFPVtbMSwyNiwxOV0sWzEsMjYsMTZdLFsxLDI2LDEzXSxbMSwyNiw5XSxbMSw0NCwzNF0sWzEsNDQsMjhdLFsxLDQ0LDIyXSxbMSw0NCwxNl0sWzEsNzAsNTVdLFsxLDcwLDQ0XSxbMiwzNSwxN10sWzIsMzUsMTNdLFsxLDEwMCw4MF0sWzIsNTAsMzJdLFsyLDUwLDI0XSxbNCwyNSw5XSxbMSwxMzQsMTA4XSxbMiw2Nyw0M10sWzIsMzMsMTUsMiwzNCwxNl0sWzIsMzMsMTEsMiwzNCwxMl0sWzIsODYsNjhdLFs0LDQzLDI3XSxbNCw0MywxOV0sWzQsNDMsMTVdLFsyLDk4LDc4XSxbNCw0OSwzMV0sWzIsMzIsMTQsNCwzMywxNV0sWzQsMzksMTMsMSw0MCwxNF0sWzIsMTIxLDk3XSxbMiw2MCwzOCwyLDYxLDM5XSxbNCw0MCwxOCwyLDQxLDE5XSxbNCw0MCwxNCwyLDQxLDE1XSxbMiwxNDYsMTE2XSxbMyw1OCwzNiwyLDU5LDM3XSxbNCwzNiwxNiw0LDM3LDE3XSxbNCwzNiwxMiw0LDM3LDEzXSxbMiw4Niw2OCwyLDg3LDY5XSxbNCw2OSw0MywxLDcwLDQ0XSxbNiw0MywxOSwyLDQ0LDIwXSxbNiw0MywxNSwyLDQ0LDE2XSxbNCwxMDEsODFdLFsxLDgwLDUwLDQsODEsNTFdLFs0LDUwLDIyLDQsNTEsMjNdLFszLDM2LDEyLDgsMzcsMTNdLFsyLDExNiw5MiwyLDExNyw5M10sWzYsNTgsMzYsMiw1OSwzN10sWzQsNDYsMjAsNiw0NywyMV0sWzcsNDIsMTQsNCw0MywxNV0sWzQsMTMzLDEwN10sWzgsNTksMzcsMSw2MCwzOF0sWzgsNDQsMjAsNCw0NSwyMV0sWzEyLDMzLDExLDQsMzQsMTJdLFszLDE0NSwxMTUsMSwxNDYsMTE2XSxbNCw2NCw0MCw1LDY1LDQxXSxbMTEsMzYsMTYsNSwzNywxN10sWzExLDM2LDEyLDUsMzcsMTNdLFs1LDEwOSw4NywxLDExMCw4OF0sWzUsNjUsNDEsNSw2Niw0Ml0sWzUsNTQsMjQsNyw1NSwyNV0sWzExLDM2LDEyXSxbNSwxMjIsOTgsMSwxMjMsOTldLFs3LDczLDQ1LDMsNzQsNDZdLFsxNSw0MywxOSwyLDQ0LDIwXSxbMyw0NSwxNSwxMyw0NiwxNl0sWzEsMTM1LDEwNyw1LDEzNiwxMDhdLFsxMCw3NCw0NiwxLDc1LDQ3XSxbMSw1MCwyMiwxNSw1MSwyM10sWzIsNDIsMTQsMTcsNDMsMTVdLFs1LDE1MCwxMjAsMSwxNTEsMTIxXSxbOSw2OSw0Myw0LDcwLDQ0XSxbMTcsNTAsMjIsMSw1MSwyM10sWzIsNDIsMTQsMTksNDMsMTVdLFszLDE0MSwxMTMsNCwxNDIsMTE0XSxbMyw3MCw0NCwxMSw3MSw0NV0sWzE3LDQ3LDIxLDQsNDgsMjJdLFs5LDM5LDEzLDE2LDQwLDE0XSxbMywxMzUsMTA3LDUsMTM2LDEwOF0sWzMsNjcsNDEsMTMsNjgsNDJdLFsxNSw1NCwyNCw1LDU1LDI1XSxbMTUsNDMsMTUsMTAsNDQsMTZdLFs0LDE0NCwxMTYsNCwxNDUsMTE3XSxbMTcsNjgsNDJdLFsxNyw1MCwyMiw2LDUxLDIzXSxbMTksNDYsMTYsNiw0NywxN10sWzIsMTM5LDExMSw3LDE0MCwxMTJdLFsxNyw3NCw0Nl0sWzcsNTQsMjQsMTYsNTUsMjVdLFszNCwzNywxM10sWzQsMTUxLDEyMSw1LDE1MiwxMjJdLFs0LDc1LDQ3LDE0LDc2LDQ4XSxbMTEsNTQsMjQsMTQsNTUsMjVdLFsxNiw0NSwxNSwxNCw0NiwxNl0sWzYsMTQ3LDExNyw0LDE0OCwxMThdLFs2LDczLDQ1LDE0LDc0LDQ2XSxbMTEsNTQsMjQsMTYsNTUsMjVdLFszMCw0NiwxNiwyLDQ3LDE3XSxbOCwxMzIsMTA2LDQsMTMzLDEwN10sWzgsNzUsNDcsMTMsNzYsNDhdLFs3LDU0LDI0LDIyLDU1LDI1XSxbMjIsNDUsMTUsMTMsNDYsMTZdLFsxMCwxNDIsMTE0LDIsMTQzLDExNV0sWzE5LDc0LDQ2LDQsNzUsNDddLFsyOCw1MCwyMiw2LDUxLDIzXSxbMzMsNDYsMTYsNCw0NywxN10sWzgsMTUyLDEyMiw0LDE1MywxMjNdLFsyMiw3Myw0NSwzLDc0LDQ2XSxbOCw1MywyMywyNiw1NCwyNF0sWzEyLDQ1LDE1LDI4LDQ2LDE2XSxbMywxNDcsMTE3LDEwLDE0OCwxMThdLFszLDczLDQ1LDIzLDc0LDQ2XSxbNCw1NCwyNCwzMSw1NSwyNV0sWzExLDQ1LDE1LDMxLDQ2LDE2XSxbNywxNDYsMTE2LDcsMTQ3LDExN10sWzIxLDczLDQ1LDcsNzQsNDZdLFsxLDUzLDIzLDM3LDU0LDI0XSxbMTksNDUsMTUsMjYsNDYsMTZdLFs1LDE0NSwxMTUsMTAsMTQ2LDExNl0sWzE5LDc1LDQ3LDEwLDc2LDQ4XSxbMTUsNTQsMjQsMjUsNTUsMjVdLFsyMyw0NSwxNSwyNSw0NiwxNl0sWzEzLDE0NSwxMTUsMywxNDYsMTE2XSxbMiw3NCw0NiwyOSw3NSw0N10sWzQyLDU0LDI0LDEsNTUsMjVdLFsyMyw0NSwxNSwyOCw0NiwxNl0sWzE3LDE0NSwxMTVdLFsxMCw3NCw0NiwyMyw3NSw0N10sWzEwLDU0LDI0LDM1LDU1LDI1XSxbMTksNDUsMTUsMzUsNDYsMTZdLFsxNywxNDUsMTE1LDEsMTQ2LDExNl0sWzE0LDc0LDQ2LDIxLDc1LDQ3XSxbMjksNTQsMjQsMTksNTUsMjVdLFsxMSw0NSwxNSw0Niw0NiwxNl0sWzEzLDE0NSwxMTUsNiwxNDYsMTE2XSxbMTQsNzQsNDYsMjMsNzUsNDddLFs0NCw1NCwyNCw3LDU1LDI1XSxbNTksNDYsMTYsMSw0NywxN10sWzEyLDE1MSwxMjEsNywxNTIsMTIyXSxbMTIsNzUsNDcsMjYsNzYsNDhdLFszOSw1NCwyNCwxNCw1NSwyNV0sWzIyLDQ1LDE1LDQxLDQ2LDE2XSxbNiwxNTEsMTIxLDE0LDE1MiwxMjJdLFs2LDc1LDQ3LDM0LDc2LDQ4XSxbNDYsNTQsMjQsMTAsNTUsMjVdLFsyLDQ1LDE1LDY0LDQ2LDE2XSxbMTcsMTUyLDEyMiw0LDE1MywxMjNdLFsyOSw3NCw0NiwxNCw3NSw0N10sWzQ5LDU0LDI0LDEwLDU1LDI1XSxbMjQsNDUsMTUsNDYsNDYsMTZdLFs0LDE1MiwxMjIsMTgsMTUzLDEyM10sWzEzLDc0LDQ2LDMyLDc1LDQ3XSxbNDgsNTQsMjQsMTQsNTUsMjVdLFs0Miw0NSwxNSwzMiw0NiwxNl0sWzIwLDE0NywxMTcsNCwxNDgsMTE4XSxbNDAsNzUsNDcsNyw3Niw0OF0sWzQzLDU0LDI0LDIyLDU1LDI1XSxbMTAsNDUsMTUsNjcsNDYsMTZdLFsxOSwxNDgsMTE4LDYsMTQ5LDExOV0sWzE4LDc1LDQ3LDMxLDc2LDQ4XSxbMzQsNTQsMjQsMzQsNTUsMjVdLFsyMCw0NSwxNSw2MSw0NiwxNl1dO1FSUlNCbG9jay5nZXRSU0Jsb2Nrcz1mdW5jdGlvbih0eXBlTnVtYmVyLGVycm9yQ29ycmVjdExldmVsKXt2YXIgcnNCbG9jaz1RUlJTQmxvY2suZ2V0UnNCbG9ja1RhYmxlKHR5cGVOdW1iZXIsZXJyb3JDb3JyZWN0TGV2ZWwpO2lmKHJzQmxvY2s9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKFwiYmFkIHJzIGJsb2NrIEAgdHlwZU51bWJlcjpcIit0eXBlTnVtYmVyK1wiL2Vycm9yQ29ycmVjdExldmVsOlwiK2Vycm9yQ29ycmVjdExldmVsKTt9XHJcblx0dmFyIGxlbmd0aD1yc0Jsb2NrLmxlbmd0aC8zO3ZhciBsaXN0PVtdO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7dmFyIGNvdW50PXJzQmxvY2tbaSozKzBdO3ZhciB0b3RhbENvdW50PXJzQmxvY2tbaSozKzFdO3ZhciBkYXRhQ291bnQ9cnNCbG9ja1tpKjMrMl07Zm9yKHZhciBqPTA7ajxjb3VudDtqKyspe2xpc3QucHVzaChuZXcgUVJSU0Jsb2NrKHRvdGFsQ291bnQsZGF0YUNvdW50KSk7fX1cclxuXHRyZXR1cm4gbGlzdDt9O1FSUlNCbG9jay5nZXRSc0Jsb2NrVGFibGU9ZnVuY3Rpb24odHlwZU51bWJlcixlcnJvckNvcnJlY3RMZXZlbCl7c3dpdGNoKGVycm9yQ29ycmVjdExldmVsKXtjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuTDpyZXR1cm4gUVJSU0Jsb2NrLlJTX0JMT0NLX1RBQkxFWyh0eXBlTnVtYmVyLTEpKjQrMF07Y2FzZSBRUkVycm9yQ29ycmVjdExldmVsLk06cmV0dXJuIFFSUlNCbG9jay5SU19CTE9DS19UQUJMRVsodHlwZU51bWJlci0xKSo0KzFdO2Nhc2UgUVJFcnJvckNvcnJlY3RMZXZlbC5ROnJldHVybiBRUlJTQmxvY2suUlNfQkxPQ0tfVEFCTEVbKHR5cGVOdW1iZXItMSkqNCsyXTtjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuSDpyZXR1cm4gUVJSU0Jsb2NrLlJTX0JMT0NLX1RBQkxFWyh0eXBlTnVtYmVyLTEpKjQrM107ZGVmYXVsdDpyZXR1cm4gdW5kZWZpbmVkO319O2Z1bmN0aW9uIFFSQml0QnVmZmVyKCl7dGhpcy5idWZmZXI9W107dGhpcy5sZW5ndGg9MDt9XHJcblx0UVJCaXRCdWZmZXIucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oaW5kZXgpe3ZhciBidWZJbmRleD1NYXRoLmZsb29yKGluZGV4LzgpO3JldHVybigodGhpcy5idWZmZXJbYnVmSW5kZXhdPj4+KDctaW5kZXglOCkpJjEpPT0xO30scHV0OmZ1bmN0aW9uKG51bSxsZW5ndGgpe2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7dGhpcy5wdXRCaXQoKChudW0+Pj4obGVuZ3RoLWktMSkpJjEpPT0xKTt9fSxnZXRMZW5ndGhJbkJpdHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg7fSxwdXRCaXQ6ZnVuY3Rpb24oYml0KXt2YXIgYnVmSW5kZXg9TWF0aC5mbG9vcih0aGlzLmxlbmd0aC84KTtpZih0aGlzLmJ1ZmZlci5sZW5ndGg8PWJ1ZkluZGV4KXt0aGlzLmJ1ZmZlci5wdXNoKDApO31cclxuXHRpZihiaXQpe3RoaXMuYnVmZmVyW2J1ZkluZGV4XXw9KDB4ODA+Pj4odGhpcy5sZW5ndGglOCkpO31cclxuXHR0aGlzLmxlbmd0aCsrO319O3ZhciBRUkNvZGVMaW1pdExlbmd0aD1bWzE3LDE0LDExLDddLFszMiwyNiwyMCwxNF0sWzUzLDQyLDMyLDI0XSxbNzgsNjIsNDYsMzRdLFsxMDYsODQsNjAsNDRdLFsxMzQsMTA2LDc0LDU4XSxbMTU0LDEyMiw4Niw2NF0sWzE5MiwxNTIsMTA4LDg0XSxbMjMwLDE4MCwxMzAsOThdLFsyNzEsMjEzLDE1MSwxMTldLFszMjEsMjUxLDE3NywxMzddLFszNjcsMjg3LDIwMywxNTVdLFs0MjUsMzMxLDI0MSwxNzddLFs0NTgsMzYyLDI1OCwxOTRdLFs1MjAsNDEyLDI5MiwyMjBdLFs1ODYsNDUwLDMyMiwyNTBdLFs2NDQsNTA0LDM2NCwyODBdLFs3MTgsNTYwLDM5NCwzMTBdLFs3OTIsNjI0LDQ0MiwzMzhdLFs4NTgsNjY2LDQ4MiwzODJdLFs5MjksNzExLDUwOSw0MDNdLFsxMDAzLDc3OSw1NjUsNDM5XSxbMTA5MSw4NTcsNjExLDQ2MV0sWzExNzEsOTExLDY2MSw1MTFdLFsxMjczLDk5Nyw3MTUsNTM1XSxbMTM2NywxMDU5LDc1MSw1OTNdLFsxNDY1LDExMjUsODA1LDYyNV0sWzE1MjgsMTE5MCw4NjgsNjU4XSxbMTYyOCwxMjY0LDkwOCw2OThdLFsxNzMyLDEzNzAsOTgyLDc0Ml0sWzE4NDAsMTQ1MiwxMDMwLDc5MF0sWzE5NTIsMTUzOCwxMTEyLDg0Ml0sWzIwNjgsMTYyOCwxMTY4LDg5OF0sWzIxODgsMTcyMiwxMjI4LDk1OF0sWzIzMDMsMTgwOSwxMjgzLDk4M10sWzI0MzEsMTkxMSwxMzUxLDEwNTFdLFsyNTYzLDE5ODksMTQyMywxMDkzXSxbMjY5OSwyMDk5LDE0OTksMTEzOV0sWzI4MDksMjIxMywxNTc5LDEyMTldLFsyOTUzLDIzMzEsMTY2MywxMjczXV07XHJcblx0XHJcblx0ZnVuY3Rpb24gX2lzU3VwcG9ydENhbnZhcygpIHtcclxuXHRcdHJldHVybiB0eXBlb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEICE9IFwidW5kZWZpbmVkXCI7XHJcblx0fVxyXG5cdFxyXG5cdC8vIGFuZHJvaWQgMi54IGRvZXNuJ3Qgc3VwcG9ydCBEYXRhLVVSSSBzcGVjXHJcblx0ZnVuY3Rpb24gX2dldEFuZHJvaWQoKSB7XHJcblx0XHR2YXIgYW5kcm9pZCA9IGZhbHNlO1xyXG5cdFx0dmFyIHNBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcblx0XHRcclxuXHRcdGlmICgvYW5kcm9pZC9pLnRlc3Qoc0FnZW50KSkgeyAvLyBhbmRyb2lkXHJcblx0XHRcdGFuZHJvaWQgPSB0cnVlO1xyXG5cdFx0XHR2YXIgYU1hdCA9IHNBZ2VudC50b1N0cmluZygpLm1hdGNoKC9hbmRyb2lkIChbMC05XVxcLlswLTldKS9pKTtcclxuXHRcdFx0XHJcblx0XHRcdGlmIChhTWF0ICYmIGFNYXRbMV0pIHtcclxuXHRcdFx0XHRhbmRyb2lkID0gcGFyc2VGbG9hdChhTWF0WzFdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRyZXR1cm4gYW5kcm9pZDtcclxuXHR9XHJcblx0XHJcblx0dmFyIHN2Z0RyYXdlciA9IChmdW5jdGlvbigpIHtcclxuXHJcblx0XHR2YXIgRHJhd2luZyA9IGZ1bmN0aW9uIChlbCwgaHRPcHRpb24pIHtcclxuXHRcdFx0dGhpcy5fZWwgPSBlbDtcclxuXHRcdFx0dGhpcy5faHRPcHRpb24gPSBodE9wdGlvbjtcclxuXHRcdH07XHJcblxyXG5cdFx0RHJhd2luZy5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChvUVJDb2RlKSB7XHJcblx0XHRcdHZhciBfaHRPcHRpb24gPSB0aGlzLl9odE9wdGlvbjtcclxuXHRcdFx0dmFyIF9lbCA9IHRoaXMuX2VsO1xyXG5cdFx0XHR2YXIgbkNvdW50ID0gb1FSQ29kZS5nZXRNb2R1bGVDb3VudCgpO1xyXG5cdFx0XHR2YXIgbldpZHRoID0gTWF0aC5mbG9vcihfaHRPcHRpb24ud2lkdGggLyBuQ291bnQpO1xyXG5cdFx0XHR2YXIgbkhlaWdodCA9IE1hdGguZmxvb3IoX2h0T3B0aW9uLmhlaWdodCAvIG5Db3VudCk7XHJcblxyXG5cdFx0XHR0aGlzLmNsZWFyKCk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBtYWtlU1ZHKHRhZywgYXR0cnMpIHtcclxuXHRcdFx0XHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgdGFnKTtcclxuXHRcdFx0XHRmb3IgKHZhciBrIGluIGF0dHJzKVxyXG5cdFx0XHRcdFx0aWYgKGF0dHJzLmhhc093blByb3BlcnR5KGspKSBlbC5zZXRBdHRyaWJ1dGUoaywgYXR0cnNba10pO1xyXG5cdFx0XHRcdHJldHVybiBlbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIHN2ZyA9IG1ha2VTVkcoXCJzdmdcIiAsIHsndmlld0JveCc6ICcwIDAgJyArIFN0cmluZyhuQ291bnQpICsgXCIgXCIgKyBTdHJpbmcobkNvdW50KSwgJ3dpZHRoJzogJzEwMCUnLCAnaGVpZ2h0JzogJzEwMCUnLCAnZmlsbCc6IF9odE9wdGlvbi5jb2xvckxpZ2h0fSk7XHJcblx0XHRcdHN2Zy5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCIsIFwieG1sbnM6eGxpbmtcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIpO1xyXG5cdFx0XHRfZWwuYXBwZW5kQ2hpbGQoc3ZnKTtcclxuXHJcblx0XHRcdHN2Zy5hcHBlbmRDaGlsZChtYWtlU1ZHKFwicmVjdFwiLCB7XCJmaWxsXCI6IF9odE9wdGlvbi5jb2xvckxpZ2h0LCBcIndpZHRoXCI6IFwiMTAwJVwiLCBcImhlaWdodFwiOiBcIjEwMCVcIn0pKTtcclxuXHRcdFx0c3ZnLmFwcGVuZENoaWxkKG1ha2VTVkcoXCJyZWN0XCIsIHtcImZpbGxcIjogX2h0T3B0aW9uLmNvbG9yRGFyaywgXCJ3aWR0aFwiOiBcIjFcIiwgXCJoZWlnaHRcIjogXCIxXCIsIFwiaWRcIjogXCJ0ZW1wbGF0ZVwifSkpO1xyXG5cclxuXHRcdFx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgbkNvdW50OyByb3crKykge1xyXG5cdFx0XHRcdGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5Db3VudDsgY29sKyspIHtcclxuXHRcdFx0XHRcdGlmIChvUVJDb2RlLmlzRGFyayhyb3csIGNvbCkpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGNoaWxkID0gbWFrZVNWRyhcInVzZVwiLCB7XCJ4XCI6IFN0cmluZyhjb2wpLCBcInlcIjogU3RyaW5nKHJvdyl9KTtcclxuXHRcdFx0XHRcdFx0Y2hpbGQuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsIFwiaHJlZlwiLCBcIiN0ZW1wbGF0ZVwiKVxyXG5cdFx0XHRcdFx0XHRzdmcuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHRcdERyYXdpbmcucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR3aGlsZSAodGhpcy5fZWwuaGFzQ2hpbGROb2RlcygpKVxyXG5cdFx0XHRcdHRoaXMuX2VsLnJlbW92ZUNoaWxkKHRoaXMuX2VsLmxhc3RDaGlsZCk7XHJcblx0XHR9O1xyXG5cdFx0cmV0dXJuIERyYXdpbmc7XHJcblx0fSkoKTtcclxuXHJcblx0dmFyIHVzZVNWRyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwic3ZnXCI7XHJcblxyXG5cdC8vIERyYXdpbmcgaW4gRE9NIGJ5IHVzaW5nIFRhYmxlIHRhZ1xyXG5cdHZhciBEcmF3aW5nID0gdXNlU1ZHID8gc3ZnRHJhd2VyIDogIV9pc1N1cHBvcnRDYW52YXMoKSA/IChmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgRHJhd2luZyA9IGZ1bmN0aW9uIChlbCwgaHRPcHRpb24pIHtcclxuXHRcdFx0dGhpcy5fZWwgPSBlbDtcclxuXHRcdFx0dGhpcy5faHRPcHRpb24gPSBodE9wdGlvbjtcclxuXHRcdH07XHJcblx0XHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBEcmF3IHRoZSBRUkNvZGVcclxuXHRcdCAqIFxyXG5cdFx0ICogQHBhcmFtIHtRUkNvZGV9IG9RUkNvZGVcclxuXHRcdCAqL1xyXG5cdFx0RHJhd2luZy5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChvUVJDb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBfaHRPcHRpb24gPSB0aGlzLl9odE9wdGlvbjtcclxuICAgICAgICAgICAgdmFyIF9lbCA9IHRoaXMuX2VsO1xyXG5cdFx0XHR2YXIgbkNvdW50ID0gb1FSQ29kZS5nZXRNb2R1bGVDb3VudCgpO1xyXG5cdFx0XHR2YXIgbldpZHRoID0gTWF0aC5mbG9vcihfaHRPcHRpb24ud2lkdGggLyBuQ291bnQpO1xyXG5cdFx0XHR2YXIgbkhlaWdodCA9IE1hdGguZmxvb3IoX2h0T3B0aW9uLmhlaWdodCAvIG5Db3VudCk7XHJcblx0XHRcdHZhciBhSFRNTCA9IFsnPHRhYmxlIHN0eWxlPVwiYm9yZGVyOjA7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO1wiPiddO1xyXG5cdFx0XHRcclxuXHRcdFx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgbkNvdW50OyByb3crKykge1xyXG5cdFx0XHRcdGFIVE1MLnB1c2goJzx0cj4nKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuQ291bnQ7IGNvbCsrKSB7XHJcblx0XHRcdFx0XHRhSFRNTC5wdXNoKCc8dGQgc3R5bGU9XCJib3JkZXI6MDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7cGFkZGluZzowO21hcmdpbjowO3dpZHRoOicgKyBuV2lkdGggKyAncHg7aGVpZ2h0OicgKyBuSGVpZ2h0ICsgJ3B4O2JhY2tncm91bmQtY29sb3I6JyArIChvUVJDb2RlLmlzRGFyayhyb3csIGNvbCkgPyBfaHRPcHRpb24uY29sb3JEYXJrIDogX2h0T3B0aW9uLmNvbG9yTGlnaHQpICsgJztcIj48L3RkPicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHRhSFRNTC5wdXNoKCc8L3RyPicpO1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHRhSFRNTC5wdXNoKCc8L3RhYmxlPicpO1xyXG5cdFx0XHRfZWwuaW5uZXJIVE1MID0gYUhUTUwuam9pbignJyk7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBGaXggdGhlIG1hcmdpbiB2YWx1ZXMgYXMgcmVhbCBzaXplLlxyXG5cdFx0XHR2YXIgZWxUYWJsZSA9IF9lbC5jaGlsZE5vZGVzWzBdO1xyXG5cdFx0XHR2YXIgbkxlZnRNYXJnaW5UYWJsZSA9IChfaHRPcHRpb24ud2lkdGggLSBlbFRhYmxlLm9mZnNldFdpZHRoKSAvIDI7XHJcblx0XHRcdHZhciBuVG9wTWFyZ2luVGFibGUgPSAoX2h0T3B0aW9uLmhlaWdodCAtIGVsVGFibGUub2Zmc2V0SGVpZ2h0KSAvIDI7XHJcblx0XHRcdFxyXG5cdFx0XHRpZiAobkxlZnRNYXJnaW5UYWJsZSA+IDAgJiYgblRvcE1hcmdpblRhYmxlID4gMCkge1xyXG5cdFx0XHRcdGVsVGFibGUuc3R5bGUubWFyZ2luID0gblRvcE1hcmdpblRhYmxlICsgXCJweCBcIiArIG5MZWZ0TWFyZ2luVGFibGUgKyBcInB4XCI7XHRcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbGVhciB0aGUgUVJDb2RlXHJcblx0XHQgKi9cclxuXHRcdERyYXdpbmcucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR0aGlzLl9lbC5pbm5lckhUTUwgPSAnJztcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdHJldHVybiBEcmF3aW5nO1xyXG5cdH0pKCkgOiAoZnVuY3Rpb24gKCkgeyAvLyBEcmF3aW5nIGluIENhbnZhc1xyXG5cdFx0ZnVuY3Rpb24gX29uTWFrZUltYWdlKCkge1xyXG5cdFx0XHR0aGlzLl9lbEltYWdlLnNyYyA9IHRoaXMuX2VsQ2FudmFzLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTtcclxuXHRcdFx0dGhpcy5fZWxJbWFnZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG5cdFx0XHR0aGlzLl9lbENhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHRcdFx0XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIEFuZHJvaWQgMi4xIGJ1ZyB3b3JrYXJvdW5kXHJcblx0XHQvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTUxNDFcclxuXHRcdGlmICh0aGlzLl9hbmRyb2lkICYmIHRoaXMuX2FuZHJvaWQgPD0gMi4xKSB7XHJcblx0ICAgIFx0dmFyIGZhY3RvciA9IDEgLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcclxuXHQgICAgICAgIHZhciBkcmF3SW1hZ2UgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLmRyYXdJbWFnZTsgXHJcblx0ICAgIFx0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5kcmF3SW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2UsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkge1xyXG5cdCAgICBcdFx0aWYgKChcIm5vZGVOYW1lXCIgaW4gaW1hZ2UpICYmIC9pbWcvaS50ZXN0KGltYWdlLm5vZGVOYW1lKSkge1xyXG5cdFx0ICAgICAgICBcdGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcclxuXHRcdCAgICAgICAgICAgIFx0YXJndW1lbnRzW2ldID0gYXJndW1lbnRzW2ldICogZmFjdG9yO1xyXG5cdFx0ICAgICAgICBcdH1cclxuXHQgICAgXHRcdH0gZWxzZSBpZiAodHlwZW9mIGR3ID09IFwidW5kZWZpbmVkXCIpIHtcclxuXHQgICAgXHRcdFx0YXJndW1lbnRzWzFdICo9IGZhY3RvcjtcclxuXHQgICAgXHRcdFx0YXJndW1lbnRzWzJdICo9IGZhY3RvcjtcclxuXHQgICAgXHRcdFx0YXJndW1lbnRzWzNdICo9IGZhY3RvcjtcclxuXHQgICAgXHRcdFx0YXJndW1lbnRzWzRdICo9IGZhY3RvcjtcclxuXHQgICAgXHRcdH1cclxuXHQgICAgXHRcdFxyXG5cdCAgICAgICAgXHRkcmF3SW1hZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgXHJcblx0ICAgIFx0fTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayB3aGV0aGVyIHRoZSB1c2VyJ3MgYnJvd3NlciBzdXBwb3J0cyBEYXRhIFVSSSBvciBub3RcclxuXHRcdCAqIFxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZTdWNjZXNzIE9jY3VycyBpZiBpdCBzdXBwb3J0cyBEYXRhIFVSSVxyXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZkZhaWwgT2NjdXJzIGlmIGl0IGRvZXNuJ3Qgc3VwcG9ydCBEYXRhIFVSSVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBfc2FmZVNldERhdGFVUkkoZlN1Y2Nlc3MsIGZGYWlsKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgc2VsZi5fZkZhaWwgPSBmRmFpbDtcclxuICAgICAgICAgICAgc2VsZi5fZlN1Y2Nlc3MgPSBmU3VjY2VzcztcclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGl0IGp1c3Qgb25jZVxyXG4gICAgICAgICAgICBpZiAoc2VsZi5fYlN1cHBvcnREYXRhVVJJID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZPbkVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fYlN1cHBvcnREYXRhVVJJID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9mRmFpbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mRmFpbC5jYWxsKHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB2YXIgZk9uU3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2JTdXBwb3J0RGF0YVVSSSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9mU3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mU3VjY2Vzcy5jYWxsKHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgZWwub25hYm9ydCA9IGZPbkVycm9yO1xyXG4gICAgICAgICAgICAgICAgZWwub25lcnJvciA9IGZPbkVycm9yO1xyXG4gICAgICAgICAgICAgICAgZWwub25sb2FkID0gZk9uU3VjY2VzcztcclxuICAgICAgICAgICAgICAgIGVsLnNyYyA9IFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQUhFbEVRVlFJMTJQNC8vOC93MzhHSUFYRElCS0UwREh4Z2xqTkJBQU85VFhMMFk0T0h3QUFBQUJKUlU1RXJrSmdnZz09XCI7IC8vIHRoZSBJbWFnZSBjb250YWlucyAxcHggZGF0YS5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLl9iU3VwcG9ydERhdGFVUkkgPT09IHRydWUgJiYgc2VsZi5fZlN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2ZTdWNjZXNzLmNhbGwoc2VsZik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5fYlN1cHBvcnREYXRhVVJJID09PSBmYWxzZSAmJiBzZWxmLl9mRmFpbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fZkZhaWwuY2FsbChzZWxmKTtcclxuICAgICAgICAgICAgfVxyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBEcmF3aW5nIFFSQ29kZSBieSB1c2luZyBjYW52YXNcclxuXHRcdCAqIFxyXG5cdFx0ICogQGNvbnN0cnVjdG9yXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGh0T3B0aW9uIFFSQ29kZSBPcHRpb25zIFxyXG5cdFx0ICovXHJcblx0XHR2YXIgRHJhd2luZyA9IGZ1bmN0aW9uIChlbCwgaHRPcHRpb24pIHtcclxuICAgIFx0XHR0aGlzLl9iSXNQYWludGVkID0gZmFsc2U7XHJcbiAgICBcdFx0dGhpcy5fYW5kcm9pZCA9IF9nZXRBbmRyb2lkKCk7XHJcblx0XHRcclxuXHRcdFx0dGhpcy5faHRPcHRpb24gPSBodE9wdGlvbjtcclxuXHRcdFx0dGhpcy5fZWxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG5cdFx0XHR0aGlzLl9lbENhbnZhcy53aWR0aCA9IGh0T3B0aW9uLndpZHRoO1xyXG5cdFx0XHR0aGlzLl9lbENhbnZhcy5oZWlnaHQgPSBodE9wdGlvbi5oZWlnaHQ7XHJcblx0XHRcdGVsLmFwcGVuZENoaWxkKHRoaXMuX2VsQ2FudmFzKTtcclxuXHRcdFx0dGhpcy5fZWwgPSBlbDtcclxuXHRcdFx0dGhpcy5fb0NvbnRleHQgPSB0aGlzLl9lbENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblx0XHRcdHRoaXMuX2JJc1BhaW50ZWQgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5fZWxJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcblx0XHRcdHRoaXMuX2VsSW1hZ2UuYWx0ID0gXCJTY2FuIG1lIVwiO1xyXG5cdFx0XHR0aGlzLl9lbEltYWdlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHRcdFx0dGhpcy5fZWwuYXBwZW5kQ2hpbGQodGhpcy5fZWxJbWFnZSk7XHJcblx0XHRcdHRoaXMuX2JTdXBwb3J0RGF0YVVSSSA9IG51bGw7XHJcblx0XHR9O1xyXG5cdFx0XHRcclxuXHRcdC8qKlxyXG5cdFx0ICogRHJhdyB0aGUgUVJDb2RlXHJcblx0XHQgKiBcclxuXHRcdCAqIEBwYXJhbSB7UVJDb2RlfSBvUVJDb2RlIFxyXG5cdFx0ICovXHJcblx0XHREcmF3aW5nLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKG9RUkNvZGUpIHtcclxuICAgICAgICAgICAgdmFyIF9lbEltYWdlID0gdGhpcy5fZWxJbWFnZTtcclxuICAgICAgICAgICAgdmFyIF9vQ29udGV4dCA9IHRoaXMuX29Db250ZXh0O1xyXG4gICAgICAgICAgICB2YXIgX2h0T3B0aW9uID0gdGhpcy5faHRPcHRpb247XHJcbiAgICAgICAgICAgIFxyXG5cdFx0XHR2YXIgbkNvdW50ID0gb1FSQ29kZS5nZXRNb2R1bGVDb3VudCgpO1xyXG5cdFx0XHR2YXIgbldpZHRoID0gX2h0T3B0aW9uLndpZHRoIC8gbkNvdW50O1xyXG5cdFx0XHR2YXIgbkhlaWdodCA9IF9odE9wdGlvbi5oZWlnaHQgLyBuQ291bnQ7XHJcblx0XHRcdHZhciBuUm91bmRlZFdpZHRoID0gTWF0aC5yb3VuZChuV2lkdGgpO1xyXG5cdFx0XHR2YXIgblJvdW5kZWRIZWlnaHQgPSBNYXRoLnJvdW5kKG5IZWlnaHQpO1xyXG5cclxuXHRcdFx0X2VsSW1hZ2Uuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG5cdFx0XHR0aGlzLmNsZWFyKCk7XHJcblx0XHRcdFxyXG5cdFx0XHRmb3IgKHZhciByb3cgPSAwOyByb3cgPCBuQ291bnQ7IHJvdysrKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgY29sID0gMDsgY29sIDwgbkNvdW50OyBjb2wrKykge1xyXG5cdFx0XHRcdFx0dmFyIGJJc0RhcmsgPSBvUVJDb2RlLmlzRGFyayhyb3csIGNvbCk7XHJcblx0XHRcdFx0XHR2YXIgbkxlZnQgPSBjb2wgKiBuV2lkdGg7XHJcblx0XHRcdFx0XHR2YXIgblRvcCA9IHJvdyAqIG5IZWlnaHQ7XHJcblx0XHRcdFx0XHRfb0NvbnRleHQuc3Ryb2tlU3R5bGUgPSBiSXNEYXJrID8gX2h0T3B0aW9uLmNvbG9yRGFyayA6IF9odE9wdGlvbi5jb2xvckxpZ2h0O1xyXG5cdFx0XHRcdFx0X29Db250ZXh0LmxpbmVXaWR0aCA9IDE7XHJcblx0XHRcdFx0XHRfb0NvbnRleHQuZmlsbFN0eWxlID0gYklzRGFyayA/IF9odE9wdGlvbi5jb2xvckRhcmsgOiBfaHRPcHRpb24uY29sb3JMaWdodDtcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRfb0NvbnRleHQuZmlsbFJlY3QobkxlZnQsIG5Ub3AsIG5XaWR0aCwgbkhlaWdodCk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vIOyViO2LsCDslajrpqzslrTsi7Eg67Cp7KeAIOyymOumrFxyXG5cdFx0XHRcdFx0X29Db250ZXh0LnN0cm9rZVJlY3QoXHJcblx0XHRcdFx0XHRcdE1hdGguZmxvb3IobkxlZnQpICsgMC41LFxyXG5cdFx0XHRcdFx0XHRNYXRoLmZsb29yKG5Ub3ApICsgMC41LFxyXG5cdFx0XHRcdFx0XHRuUm91bmRlZFdpZHRoLFxyXG5cdFx0XHRcdFx0XHRuUm91bmRlZEhlaWdodFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0X29Db250ZXh0LnN0cm9rZVJlY3QoXHJcblx0XHRcdFx0XHRcdE1hdGguY2VpbChuTGVmdCkgLSAwLjUsXHJcblx0XHRcdFx0XHRcdE1hdGguY2VpbChuVG9wKSAtIDAuNSxcclxuXHRcdFx0XHRcdFx0blJvdW5kZWRXaWR0aCxcclxuXHRcdFx0XHRcdFx0blJvdW5kZWRIZWlnaHRcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHR0aGlzLl9iSXNQYWludGVkID0gdHJ1ZTtcclxuXHRcdH07XHJcblx0XHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBNYWtlIHRoZSBpbWFnZSBmcm9tIENhbnZhcyBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBEYXRhIFVSSS5cclxuXHRcdCAqL1xyXG5cdFx0RHJhd2luZy5wcm90b3R5cGUubWFrZUltYWdlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAodGhpcy5fYklzUGFpbnRlZCkge1xyXG5cdFx0XHRcdF9zYWZlU2V0RGF0YVVSSS5jYWxsKHRoaXMsIF9vbk1ha2VJbWFnZSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0XHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXR1cm4gd2hldGhlciB0aGUgUVJDb2RlIGlzIHBhaW50ZWQgb3Igbm90XHJcblx0XHQgKiBcclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdERyYXdpbmcucHJvdG90eXBlLmlzUGFpbnRlZCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2JJc1BhaW50ZWQ7XHJcblx0XHR9O1xyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIENsZWFyIHRoZSBRUkNvZGVcclxuXHRcdCAqL1xyXG5cdFx0RHJhd2luZy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHRoaXMuX29Db250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl9lbENhbnZhcy53aWR0aCwgdGhpcy5fZWxDYW52YXMuaGVpZ2h0KTtcclxuXHRcdFx0dGhpcy5fYklzUGFpbnRlZCA9IGZhbHNlO1xyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IG5OdW1iZXJcclxuXHRcdCAqL1xyXG5cdFx0RHJhd2luZy5wcm90b3R5cGUucm91bmQgPSBmdW5jdGlvbiAobk51bWJlcikge1xyXG5cdFx0XHRpZiAoIW5OdW1iZXIpIHtcclxuXHRcdFx0XHRyZXR1cm4gbk51bWJlcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3Iobk51bWJlciAqIDEwMDApIC8gMTAwMDtcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdHJldHVybiBEcmF3aW5nO1xyXG5cdH0pKCk7XHJcblx0XHJcblx0LyoqXHJcblx0ICogR2V0IHRoZSB0eXBlIGJ5IHN0cmluZyBsZW5ndGhcclxuXHQgKiBcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzVGV4dFxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBuQ29ycmVjdExldmVsXHJcblx0ICogQHJldHVybiB7TnVtYmVyfSB0eXBlXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gX2dldFR5cGVOdW1iZXIoc1RleHQsIG5Db3JyZWN0TGV2ZWwpIHtcdFx0XHRcclxuXHRcdHZhciBuVHlwZSA9IDE7XHJcblx0XHR2YXIgbGVuZ3RoID0gX2dldFVURjhMZW5ndGgoc1RleHQpO1xyXG5cdFx0XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gUVJDb2RlTGltaXRMZW5ndGgubGVuZ3RoOyBpIDw9IGxlbjsgaSsrKSB7XHJcblx0XHRcdHZhciBuTGltaXQgPSAwO1xyXG5cdFx0XHRcclxuXHRcdFx0c3dpdGNoIChuQ29ycmVjdExldmVsKSB7XHJcblx0XHRcdFx0Y2FzZSBRUkVycm9yQ29ycmVjdExldmVsLkwgOlxyXG5cdFx0XHRcdFx0bkxpbWl0ID0gUVJDb2RlTGltaXRMZW5ndGhbaV1bMF07XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuTSA6XHJcblx0XHRcdFx0XHRuTGltaXQgPSBRUkNvZGVMaW1pdExlbmd0aFtpXVsxXTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgUVJFcnJvckNvcnJlY3RMZXZlbC5RIDpcclxuXHRcdFx0XHRcdG5MaW1pdCA9IFFSQ29kZUxpbWl0TGVuZ3RoW2ldWzJdO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBRUkVycm9yQ29ycmVjdExldmVsLkggOlxyXG5cdFx0XHRcdFx0bkxpbWl0ID0gUVJDb2RlTGltaXRMZW5ndGhbaV1bM107XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0aWYgKGxlbmd0aCA8PSBuTGltaXQpIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRuVHlwZSsrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGlmIChuVHlwZSA+IFFSQ29kZUxpbWl0TGVuZ3RoLmxlbmd0aCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUb28gbG9uZyBkYXRhXCIpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRyZXR1cm4gblR5cGU7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfZ2V0VVRGOExlbmd0aChzVGV4dCkge1xyXG5cdFx0dmFyIHJlcGxhY2VkVGV4dCA9IGVuY29kZVVSSShzVGV4dCkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXCVbMC05YS1mQS1GXXsyfS9nLCAnYScpO1xyXG5cdFx0cmV0dXJuIHJlcGxhY2VkVGV4dC5sZW5ndGggKyAocmVwbGFjZWRUZXh0Lmxlbmd0aCAhPSBzVGV4dCA/IDMgOiAwKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGNsYXNzIFFSQ29kZVxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBleGFtcGxlIFxyXG5cdCAqIG5ldyBRUkNvZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXN0XCIpLCBcImh0dHA6Ly9qaW5kby5kZXYubmF2ZXIuY29tL2NvbGxpZVwiKTtcclxuXHQgKlxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogdmFyIG9RUkNvZGUgPSBuZXcgUVJDb2RlKFwidGVzdFwiLCB7XHJcblx0ICogICAgdGV4dCA6IFwiaHR0cDovL25hdmVyLmNvbVwiLFxyXG5cdCAqICAgIHdpZHRoIDogMTI4LFxyXG5cdCAqICAgIGhlaWdodCA6IDEyOFxyXG5cdCAqIH0pO1xyXG5cdCAqIFxyXG5cdCAqIG9RUkNvZGUuY2xlYXIoKTsgLy8gQ2xlYXIgdGhlIFFSQ29kZS5cclxuXHQgKiBvUVJDb2RlLm1ha2VDb2RlKFwiaHR0cDovL21hcC5uYXZlci5jb21cIik7IC8vIFJlLWNyZWF0ZSB0aGUgUVJDb2RlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd9IGVsIHRhcmdldCBlbGVtZW50IG9yICdpZCcgYXR0cmlidXRlIG9mIGVsZW1lbnQuXHJcblx0ICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSB2T3B0aW9uXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHZPcHRpb24udGV4dCBRUkNvZGUgbGluayBkYXRhXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFt2T3B0aW9uLndpZHRoPTI1Nl1cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3ZPcHRpb24uaGVpZ2h0PTI1Nl1cclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3ZPcHRpb24uY29sb3JEYXJrPVwiIzAwMDAwMFwiXVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbdk9wdGlvbi5jb2xvckxpZ2h0PVwiI2ZmZmZmZlwiXVxyXG5cdCAqIEBwYXJhbSB7UVJDb2RlLkNvcnJlY3RMZXZlbH0gW3ZPcHRpb24uY29ycmVjdExldmVsPVFSQ29kZS5Db3JyZWN0TGV2ZWwuSF0gW0x8TXxRfEhdIFxyXG5cdCAqL1xyXG5cdFFSQ29kZSA9IGZ1bmN0aW9uIChlbCwgdk9wdGlvbikge1xyXG5cdFx0dGhpcy5faHRPcHRpb24gPSB7XHJcblx0XHRcdHdpZHRoIDogMjU2LCBcclxuXHRcdFx0aGVpZ2h0IDogMjU2LFxyXG5cdFx0XHR0eXBlTnVtYmVyIDogNCxcclxuXHRcdFx0Y29sb3JEYXJrIDogXCIjMDAwMDAwXCIsXHJcblx0XHRcdGNvbG9yTGlnaHQgOiBcIiNmZmZmZmZcIixcclxuXHRcdFx0Y29ycmVjdExldmVsIDogUVJFcnJvckNvcnJlY3RMZXZlbC5IXHJcblx0XHR9O1xyXG5cdFx0XHJcblx0XHRpZiAodHlwZW9mIHZPcHRpb24gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdHZPcHRpb25cdD0ge1xyXG5cdFx0XHRcdHRleHQgOiB2T3B0aW9uXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIE92ZXJ3cml0ZXMgb3B0aW9uc1xyXG5cdFx0aWYgKHZPcHRpb24pIHtcclxuXHRcdFx0Zm9yICh2YXIgaSBpbiB2T3B0aW9uKSB7XHJcblx0XHRcdFx0dGhpcy5faHRPcHRpb25baV0gPSB2T3B0aW9uW2ldO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGlmICh0eXBlb2YgZWwgPT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5faHRPcHRpb24udXNlU1ZHKSB7XHJcblx0XHRcdERyYXdpbmcgPSBzdmdEcmF3ZXI7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHRoaXMuX2FuZHJvaWQgPSBfZ2V0QW5kcm9pZCgpO1xyXG5cdFx0dGhpcy5fZWwgPSBlbDtcclxuXHRcdHRoaXMuX29RUkNvZGUgPSBudWxsO1xyXG5cdFx0dGhpcy5fb0RyYXdpbmcgPSBuZXcgRHJhd2luZyh0aGlzLl9lbCwgdGhpcy5faHRPcHRpb24pO1xyXG5cdFx0XHJcblx0XHRpZiAodGhpcy5faHRPcHRpb24udGV4dCkge1xyXG5cdFx0XHR0aGlzLm1ha2VDb2RlKHRoaXMuX2h0T3B0aW9uLnRleHQpO1x0XHJcblx0XHR9XHJcblx0fTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBNYWtlIHRoZSBRUkNvZGVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc1RleHQgbGluayBkYXRhXHJcblx0ICovXHJcblx0UVJDb2RlLnByb3RvdHlwZS5tYWtlQ29kZSA9IGZ1bmN0aW9uIChzVGV4dCkge1xyXG5cdFx0dGhpcy5fb1FSQ29kZSA9IG5ldyBRUkNvZGVNb2RlbChfZ2V0VHlwZU51bWJlcihzVGV4dCwgdGhpcy5faHRPcHRpb24uY29ycmVjdExldmVsKSwgdGhpcy5faHRPcHRpb24uY29ycmVjdExldmVsKTtcclxuXHRcdHRoaXMuX29RUkNvZGUuYWRkRGF0YShzVGV4dCk7XHJcblx0XHR0aGlzLl9vUVJDb2RlLm1ha2UoKTtcclxuXHRcdHRoaXMuX2VsLnRpdGxlID0gc1RleHQ7XHJcblx0XHR0aGlzLl9vRHJhd2luZy5kcmF3KHRoaXMuX29RUkNvZGUpO1x0XHRcdFxyXG5cdFx0dGhpcy5tYWtlSW1hZ2UoKTtcclxuXHR9O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIE1ha2UgdGhlIEltYWdlIGZyb20gQ2FudmFzIGVsZW1lbnRcclxuXHQgKiAtIEl0IG9jY3VycyBhdXRvbWF0aWNhbGx5XHJcblx0ICogLSBBbmRyb2lkIGJlbG93IDMgZG9lc24ndCBzdXBwb3J0IERhdGEtVVJJIHNwZWMuXHJcblx0ICogXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRRUkNvZGUucHJvdG90eXBlLm1ha2VJbWFnZSA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdGlmICh0eXBlb2YgdGhpcy5fb0RyYXdpbmcubWFrZUltYWdlID09IFwiZnVuY3Rpb25cIiAmJiAoIXRoaXMuX2FuZHJvaWQgfHwgdGhpcy5fYW5kcm9pZCA+PSAzKSkge1xyXG5cdFx0XHR0aGlzLl9vRHJhd2luZy5tYWtlSW1hZ2UoKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIENsZWFyIHRoZSBRUkNvZGVcclxuXHQgKi9cclxuXHRRUkNvZGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0dGhpcy5fb0RyYXdpbmcuY2xlYXIoKTtcclxuXHR9O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBuYW1lIFFSQ29kZS5Db3JyZWN0TGV2ZWxcclxuXHQgKi9cclxuXHRRUkNvZGUuQ29ycmVjdExldmVsID0gUVJFcnJvckNvcnJlY3RMZXZlbDtcclxufSkoKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFFSQ29kZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvc2hhcmUvcXJjb2RlLmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="]}