{"version":3,"sources":["article.js"],"names":["modules","installedModules","__webpack_require__","moduleId","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","7","win","lib","tid","doc","document","docEl","documentElement","metaEl","querySelector","flexibleEl","dpr","scale","flexible","isAndroid","navigator","appVersion","match","isIPhone","setAttribute","getAttribute","parseFloat","parseInt","content","initialDpr","maximumDpr","toFixed","devicePixelRatio","createElement","firstElementChild","appendChild","wrap","write","innerHTML","refreshRem","width","getBoundingClientRect","rem","style","fontSize","addEventListener","clearTimeout","setTimeout","e","persisted","readyState","body","rem2px","val","this","px2rem","error","window"],"mappings":"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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 = 7);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 7:\n/***/ (function(module, exports) {\n\n;\r\n(function (win, lib) {\r\n try {\r\n var doc = win.document;\r\n var docEl = doc.documentElement;\r\n var metaEl = doc.querySelector('meta[name=\"viewport\"]');\r\n var flexibleEl = doc.querySelector('meta[name=\"flexible\"]');\r\n var dpr = 0;\r\n var scale = 0;\r\n var tid;\r\n var flexible = lib.flexible || (lib.flexible = {});\r\n\r\n var isAndroid = win.navigator.appVersion.match(/android/gi);\r\n var isIPhone = win.navigator.appVersion.match(/iphone/gi);\r\n if (isAndroid || isIPhone) {\r\n metaEl.setAttribute('content', 'width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0');\r\n }\r\n\r\n\r\n if (metaEl) {\r\n var match = metaEl.getAttribute('content').match(/initial\\-scale=([\\d\\.]+)/);\r\n if (match) {\r\n scale = parseFloat(match[1]);\r\n dpr = parseInt(1 / scale);\r\n }\r\n } else if (flexibleEl) {\r\n var content = flexibleEl.getAttribute('content');\r\n if (content) {\r\n var initialDpr = content.match(/initial\\-dpr=([\\d\\.]+)/);\r\n var maximumDpr = content.match(/maximum\\-dpr=([\\d\\.]+)/);\r\n if (initialDpr) {\r\n dpr = parseFloat(initialDpr[1]);\r\n scale = parseFloat((1 / dpr).toFixed(2));\r\n }\r\n if (maximumDpr) {\r\n dpr = parseFloat(maximumDpr[1]);\r\n scale = parseFloat((1 / dpr).toFixed(2));\r\n }\r\n }\r\n }\r\n\r\n if (!dpr && !scale) {\r\n var isAndroid = win.navigator.appVersion.match(/android/gi);\r\n var isIPhone = win.navigator.appVersion.match(/iphone/gi);\r\n var devicePixelRatio = win.devicePixelRatio;\r\n if (isIPhone) {\r\n // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案\r\n if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {\r\n dpr = 3;\r\n } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {\r\n dpr = 2;\r\n } else {\r\n dpr = 1;\r\n }\r\n } else {\r\n // 其他设备下,仍旧使用1倍的方案\r\n dpr = 1;\r\n }\r\n scale = 1 / dpr;\r\n }\r\n\r\n docEl.setAttribute('data-dpr', dpr);\r\n if (!metaEl) {\r\n metaEl = doc.createElement('meta');\r\n metaEl.setAttribute('name', 'viewport');\r\n metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');\r\n if (docEl.firstElementChild) {\r\n docEl.firstElementChild.appendChild(metaEl);\r\n } else {\r\n var wrap = doc.createElement('div');\r\n wrap.appendChild(metaEl);\r\n doc.write(wrap.innerHTML);\r\n }\r\n }\r\n\r\n function refreshRem() {\r\n var width = docEl.getBoundingClientRect().width;\r\n if (width / dpr > 540) {\r\n width = 540 * dpr;\r\n }\r\n var rem = width / 10;\r\n docEl.style.fontSize = rem + 'px';\r\n flexible.rem = win.rem = rem;\r\n }\r\n\r\n win.addEventListener('resize', function () {\r\n clearTimeout(tid);\r\n tid = setTimeout(refreshRem, 300);\r\n }, false);\r\n win.addEventListener('pageshow', function (e) {\r\n if (e.persisted) {\r\n clearTimeout(tid);\r\n tid = setTimeout(refreshRem, 300);\r\n }\r\n }, false);\r\n\r\n if (doc.readyState === 'complete') {\r\n doc.body.style.fontSize = 12 * dpr + 'px';\r\n } else {\r\n doc.addEventListener('DOMContentLoaded', function (e) {\r\n doc.body.style.fontSize = 12 * dpr + 'px';\r\n }, false);\r\n }\r\n\r\n\r\n refreshRem();\r\n\r\n flexible.dpr = win.dpr = dpr;\r\n flexible.refreshRem = refreshRem;\r\n flexible.rem2px = function (d) {\r\n var val = parseFloat(d) * this.rem;\r\n if (typeof d === 'string' && d.match(/rem$/)) {\r\n val += 'px';\r\n }\r\n return val;\r\n }\r\n flexible.px2rem = function (d) {\r\n var val = parseFloat(d) / this.rem;\r\n if (typeof d === 'string' && d.match(/px$/)) {\r\n val += 'rem';\r\n }\r\n return val;\r\n }\r\n } catch (error) {\r\n\r\n }\r\n})(window, window['lib'] || (window['lib'] = {}));\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYTgyOGU1MTkwYzY1NjZlNjU3NGI/ODllMCoqKioqKioqKioqKioqKioqKioqIiwid2VicGFjazovLy8uL2pzL2FydGljbGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7OztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsQ0FBQyw4Q0FBOEMsRyIsImZpbGUiOiJhcnRpY2xlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBhODI4ZTUxOTBjNjU2NmU2NTc0YiIsIjtcclxuKGZ1bmN0aW9uICh3aW4sIGxpYikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgZG9jID0gd2luLmRvY3VtZW50O1xyXG4gICAgICAgIHZhciBkb2NFbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgdmFyIG1ldGFFbCA9IGRvYy5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ2aWV3cG9ydFwiXScpO1xyXG4gICAgICAgIHZhciBmbGV4aWJsZUVsID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImZsZXhpYmxlXCJdJyk7XHJcbiAgICAgICAgdmFyIGRwciA9IDA7XHJcbiAgICAgICAgdmFyIHNjYWxlID0gMDtcclxuICAgICAgICB2YXIgdGlkO1xyXG4gICAgICAgIHZhciBmbGV4aWJsZSA9IGxpYi5mbGV4aWJsZSB8fCAobGliLmZsZXhpYmxlID0ge30pO1xyXG5cclxuICAgICAgICB2YXIgaXNBbmRyb2lkID0gd2luLm5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9hbmRyb2lkL2dpKTtcclxuICAgICAgICB2YXIgaXNJUGhvbmUgPSB3aW4ubmF2aWdhdG9yLmFwcFZlcnNpb24ubWF0Y2goL2lwaG9uZS9naSk7XHJcbiAgICAgICAgaWYgKGlzQW5kcm9pZCB8fCBpc0lQaG9uZSkge1xyXG4gICAgICAgICAgICBtZXRhRWwuc2V0QXR0cmlidXRlKCdjb250ZW50JywgJ3dpZHRoPWRldmljZS13aWR0aCwgdXNlci1zY2FsYWJsZT1ubywgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCBtaW5pbXVtLXNjYWxlPTEuMCcpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChtZXRhRWwpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGNoID0gbWV0YUVsLmdldEF0dHJpYnV0ZSgnY29udGVudCcpLm1hdGNoKC9pbml0aWFsXFwtc2NhbGU9KFtcXGRcXC5dKykvKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xyXG4gICAgICAgICAgICAgICAgZHByID0gcGFyc2VJbnQoMSAvIHNjYWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmxleGlibGVFbCkge1xyXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IGZsZXhpYmxlRWwuZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbERwciA9IGNvbnRlbnQubWF0Y2goL2luaXRpYWxcXC1kcHI9KFtcXGRcXC5dKykvKTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXhpbXVtRHByID0gY29udGVudC5tYXRjaCgvbWF4aW11bVxcLWRwcj0oW1xcZFxcLl0rKS8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluaXRpYWxEcHIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkcHIgPSBwYXJzZUZsb2F0KGluaXRpYWxEcHJbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gcGFyc2VGbG9hdCgoMSAvIGRwcikudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWF4aW11bURwcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRwciA9IHBhcnNlRmxvYXQobWF4aW11bURwclsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBwYXJzZUZsb2F0KCgxIC8gZHByKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkcHIgJiYgIXNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0FuZHJvaWQgPSB3aW4ubmF2aWdhdG9yLmFwcFZlcnNpb24ubWF0Y2goL2FuZHJvaWQvZ2kpO1xyXG4gICAgICAgICAgICB2YXIgaXNJUGhvbmUgPSB3aW4ubmF2aWdhdG9yLmFwcFZlcnNpb24ubWF0Y2goL2lwaG9uZS9naSk7XHJcbiAgICAgICAgICAgIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gd2luLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIGlmIChpc0lQaG9uZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaU9T5LiL77yM5a+55LqOMuWSjDPnmoTlsY/vvIznlKgy5YCN55qE5pa55qGI77yM5YW25L2Z55qE55SoMeWAjeaWueahiFxyXG4gICAgICAgICAgICAgICAgaWYgKGRldmljZVBpeGVsUmF0aW8gPj0gMyAmJiAoIWRwciB8fCBkcHIgPj0gMykpIHtcclxuICAgICAgICAgICAgICAgICAgICBkcHIgPSAzO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXZpY2VQaXhlbFJhdGlvID49IDIgJiYgKCFkcHIgfHwgZHByID49IDIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHByID0gMjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHByID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIOWFtuS7luiuvuWkh+S4i++8jOS7jeaXp+S9v+eUqDHlgI3nmoTmlrnmoYhcclxuICAgICAgICAgICAgICAgIGRwciA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2NhbGUgPSAxIC8gZHByO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9jRWwuc2V0QXR0cmlidXRlKCdkYXRhLWRwcicsIGRwcik7XHJcbiAgICAgICAgaWYgKCFtZXRhRWwpIHtcclxuICAgICAgICAgICAgbWV0YUVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcclxuICAgICAgICAgICAgbWV0YUVsLnNldEF0dHJpYnV0ZSgnbmFtZScsICd2aWV3cG9ydCcpO1xyXG4gICAgICAgICAgICBtZXRhRWwuc2V0QXR0cmlidXRlKCdjb250ZW50JywgJ2luaXRpYWwtc2NhbGU9JyArIHNjYWxlICsgJywgbWF4aW11bS1zY2FsZT0nICsgc2NhbGUgKyAnLCBtaW5pbXVtLXNjYWxlPScgKyBzY2FsZSArICcsIHVzZXItc2NhbGFibGU9bm8nKTtcclxuICAgICAgICAgICAgaWYgKGRvY0VsLmZpcnN0RWxlbWVudENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICBkb2NFbC5maXJzdEVsZW1lbnRDaGlsZC5hcHBlbmRDaGlsZChtZXRhRWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICB3cmFwLmFwcGVuZENoaWxkKG1ldGFFbCk7XHJcbiAgICAgICAgICAgICAgICBkb2Mud3JpdGUod3JhcC5pbm5lckhUTUwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWZyZXNoUmVtKCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSBkb2NFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICAgICAgICAgICAgaWYgKHdpZHRoIC8gZHByID4gNTQwKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IDU0MCAqIGRwcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVtID0gd2lkdGggLyAxMDtcclxuICAgICAgICAgICAgZG9jRWwuc3R5bGUuZm9udFNpemUgPSByZW0gKyAncHgnO1xyXG4gICAgICAgICAgICBmbGV4aWJsZS5yZW0gPSB3aW4ucmVtID0gcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2luLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpZCk7XHJcbiAgICAgICAgICAgIHRpZCA9IHNldFRpbWVvdXQocmVmcmVzaFJlbSwgMzAwKTtcclxuICAgICAgICB9LCBmYWxzZSk7XHJcbiAgICAgICAgd2luLmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUucGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGlkKTtcclxuICAgICAgICAgICAgICAgIHRpZCA9IHNldFRpbWVvdXQocmVmcmVzaFJlbSwgMzAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIGZhbHNlKTtcclxuXHJcbiAgICAgICAgaWYgKGRvYy5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XHJcbiAgICAgICAgICAgIGRvYy5ib2R5LnN0eWxlLmZvbnRTaXplID0gMTIgKiBkcHIgKyAncHgnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIGRvYy5ib2R5LnN0eWxlLmZvbnRTaXplID0gMTIgKiBkcHIgKyAncHgnO1xyXG4gICAgICAgICAgICB9LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgcmVmcmVzaFJlbSgpO1xyXG5cclxuICAgICAgICBmbGV4aWJsZS5kcHIgPSB3aW4uZHByID0gZHByO1xyXG4gICAgICAgIGZsZXhpYmxlLnJlZnJlc2hSZW0gPSByZWZyZXNoUmVtO1xyXG4gICAgICAgIGZsZXhpYmxlLnJlbTJweCA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJzZUZsb2F0KGQpICogdGhpcy5yZW07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycgJiYgZC5tYXRjaCgvcmVtJC8pKSB7XHJcbiAgICAgICAgICAgICAgICB2YWwgKz0gJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbGV4aWJsZS5weDJyZW0gPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcGFyc2VGbG9hdChkKSAvIHRoaXMucmVtO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGQgPT09ICdzdHJpbmcnICYmIGQubWF0Y2goL3B4JC8pKSB7XHJcbiAgICAgICAgICAgICAgICB2YWwgKz0gJ3JlbSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG5cclxuICAgIH1cclxufSkod2luZG93LCB3aW5kb3dbJ2xpYiddIHx8ICh3aW5kb3dbJ2xpYiddID0ge30pKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL2FydGljbGUuanNcbi8vIG1vZHVsZSBpZCA9IDdcbi8vIG1vZHVsZSBjaHVua3MgPSAyMSJdLCJzb3VyY2VSb290IjoiIn0="]}