Files
cms_thermo_active/Step/wwwroot/dist/6.build.js
T
2018-01-15 12:16:35 +01:00

10 lines
92 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
webpackJsonp([6],{
/***/ 456:
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\r\n* iziToast | v1.2.0\r\n* http://izitoast.marcelodolce.com\r\n* by Marcelo Dolce.\r\n*/\r\n(function (root, factory) {\r\n\tif(true) {\r\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory(root)),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t} else if(typeof exports === 'object') {\r\n\t\tmodule.exports = factory(root);\r\n\t} else {\r\n\t\troot.iziToast = factory(root);\r\n\t}\r\n})(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) {\r\n\r\n\t'use strict';\r\n\r\n\t//\r\n\t// Variables\r\n\t//\r\n\tvar $iziToast = {},\r\n\t\tPLUGIN_NAME = 'iziToast',\r\n\t\tBODY = document.querySelector('body'),\r\n\t\tISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false,\r\n\t\tISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor),\r\n\t\tISFIREFOX = typeof InstallTrigger !== 'undefined',\r\n\t\tACCEPTSTOUCH = 'ontouchstart' in document.documentElement,\r\n\t\tPOSITIONS = ['bottomRight','bottomLeft','bottomCenter','topRight','topLeft','topCenter','center'],\r\n\t\tTHEMES = {\r\n\t\t\tinfo: {\r\n\t\t\t\tcolor: 'blue',\r\n\t\t\t\ticon: 'ico-info'\r\n\t\t\t},\r\n\t\t\tsuccess: {\r\n\t\t\t\tcolor: 'green',\r\n\t\t\t\ticon: 'ico-success'\r\n\t\t\t},\r\n\t\t\twarning: {\r\n\t\t\t\tcolor: 'orange',\r\n\t\t\t\ticon: 'ico-warning'\r\n\t\t\t},\r\n\t\t\terror: {\r\n\t\t\t\tcolor: 'red',\r\n\t\t\t\ticon: 'ico-error'\r\n\t\t\t},\r\n\t\t\tquestion: {\r\n\t\t\t\tcolor: 'yellow',\r\n\t\t\t\ticon: 'ico-question'\r\n\t\t\t}\r\n\t\t},\r\n\t\tMOBILEWIDTH = 568,\r\n\t\tCONFIG = {};\r\n\r\n\r\n\t// Default settings\r\n\tvar defaults = {\r\n\t\tid: null, \r\n\t\tclass: '',\r\n\t\ttitle: '',\r\n\t\ttitleColor: '',\r\n\t\ttitleSize: '',\r\n\t\ttitleLineHeight: '',\r\n\t\tmessage: '',\r\n\t\tmessageColor: '',\r\n\t\tmessageSize: '',\r\n\t\tmessageLineHeight: '',\r\n\t\tbackgroundColor: '',\r\n\t\ttheme: 'light', // dark\r\n\t\tcolor: '', // blue, red, green, yellow\r\n\t\ticon: '',\r\n\t\ticonText: '',\r\n\t\ticonColor: '',\r\n\t\timage: '',\r\n\t\timageWidth: 50,\r\n\t\tmaxWidth: null,\r\n\t\tzindex: null,\r\n\t\tlayout: 1,\r\n\t\tballoon: false,\r\n\t\tclose: true,\r\n\t\tcloseOnEscape: false,\r\n\t\trtl: false,\r\n\t\tposition: 'bottomRight', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center\r\n\t\ttarget: '',\r\n\t\ttargetFirst: true,\r\n\t\ttoastOnce: false,\r\n\t\ttimeout: 5000,\r\n\t\tanimateInside: true,\r\n\t\tdrag: true,\r\n\t\tpauseOnHover: true,\r\n\t\tresetOnHover: false,\r\n\t\tprogressBar: true,\r\n\t\tprogressBarColor: '',\r\n\t\tprogressBarEasing: 'linear',\r\n\t\toverlay: false,\r\n\t\toverlayClose: false,\r\n\t\toverlayColor: 'rgba(0, 0, 0, 0.6)',\r\n\t\ttransitionIn: 'fadeInUp', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX\r\n\t\ttransitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX\r\n\t\ttransitionInMobile: 'fadeInUp',\r\n\t\ttransitionOutMobile: 'fadeOutDown',\r\n\t\tbuttons: {},\r\n\t\tonOpening: function () {},\r\n\t\tonOpened: function () {},\r\n\t\tonClosing: function () {},\r\n\t\tonClosed: function () {}\r\n\t};\r\n\r\n\t//\r\n\t// Methods\r\n\t//\r\n\r\n\r\n\t/**\r\n\t * Polyfill for remove() method\r\n\t */\r\n\tif(!('remove' in Element.prototype)) {\r\n\t Element.prototype.remove = function() {\r\n\t if(this.parentNode) {\r\n\t this.parentNode.removeChild(this);\r\n\t }\r\n\t };\r\n\t}\r\n\r\n\t/*\r\n * Polyfill for CustomEvent for IE >= 9\r\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill\r\n */\r\n if(typeof window.CustomEvent !== 'function') {\r\n var CustomEventPolyfill = function (event, params) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n };\r\n\r\n CustomEventPolyfill.prototype = window.Event.prototype;\r\n\r\n window.CustomEvent = CustomEventPolyfill;\r\n } \r\n\r\n\t/**\r\n\t * A simple forEach() implementation for Arrays, Objects and NodeLists\r\n\t * @private\r\n\t * @param {Array|Object|NodeList} collection Collection of items to iterate\r\n\t * @param {Function} callback Callback function for each iteration\r\n\t * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)\r\n\t */\r\n\tvar forEach = function (collection, callback, scope) {\r\n\t\tif(Object.prototype.toString.call(collection) === '[object Object]') {\r\n\t\t\tfor (var prop in collection) {\r\n\t\t\t\tif(Object.prototype.hasOwnProperty.call(collection, prop)) {\r\n\t\t\t\t\tcallback.call(scope, collection[prop], prop, collection);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif(collection){\r\n\t\t\t\tfor (var i = 0, len = collection.length; i < len; i++) {\r\n\t\t\t\t\tcallback.call(scope, collection[i], i, collection);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Merge defaults with user options\r\n\t * @private\r\n\t * @param {Object} defaults Default settings\r\n\t * @param {Object} options User options\r\n\t * @returns {Object} Merged values of defaults and options\r\n\t */\r\n\tvar extend = function (defaults, options) {\r\n\t\tvar extended = {};\r\n\t\tforEach(defaults, function (value, prop) {\r\n\t\t\textended[prop] = defaults[prop];\r\n\t\t});\r\n\t\tforEach(options, function (value, prop) {\r\n\t\t\textended[prop] = options[prop];\r\n\t\t});\r\n\t\treturn extended;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Create a fragment DOM elements\r\n\t * @private\r\n\t */\r\n\tvar createFragElem = function(htmlStr) {\r\n\t\tvar frag = document.createDocumentFragment(),\r\n\t\t\ttemp = document.createElement('div');\r\n\t\ttemp.innerHTML = htmlStr;\r\n\t\twhile (temp.firstChild) {\r\n\t\t\tfrag.appendChild(temp.firstChild);\r\n\t\t}\r\n\t\treturn frag;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Check if is a color\r\n\t * @private\r\n\t */\r\n\tvar isColor = function(color){\r\n\t\tif( color.substring(0,1) == '#' || color.substring(0,3) == 'rgb' || color.substring(0,3) == 'hsl' ){\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Check if is a Base64 string\r\n\t * @private\r\n\t */\r\n\tvar isBase64 = function(str) {\r\n\t try {\r\n\t return btoa(atob(str)) == str;\r\n\t } catch (err) {\r\n\t return false;\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Drag method of toasts\r\n\t * @private\r\n\t */\r\n\tvar drag = function() {\r\n\t \r\n\t return {\r\n\t move: function(toast, instance, settings, xpos) {\r\n\r\n\t \tvar opacity,\r\n\t \t\topacityRange = 0.3,\r\n\t \t\tdistance = 180;\r\n\t \r\n\t if(xpos !== 0){\r\n\t \t\r\n\t \ttoast.classList.add(PLUGIN_NAME+'-dragged');\r\n\r\n\t \ttoast.style.transform = 'translateX('+xpos + 'px)';\r\n\r\n\t\t if(xpos > 0){\r\n\t\t \topacity = (distance-xpos) / distance;\r\n\t\t \tif(opacity < opacityRange){\r\n\t\t\t\t\t\t\tinstance.hide(toast, extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), 'drag');\r\n\t\t\t\t\t\t}\r\n\t\t } else {\r\n\t\t \topacity = (distance+xpos) / distance;\r\n\t\t \tif(opacity < opacityRange){\r\n\t\t\t\t\t\t\tinstance.hide(toast, extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), 'drag');\r\n\t\t\t\t\t\t}\r\n\t\t }\r\n\t\t\t\t\ttoast.style.opacity = opacity;\r\n\t\t\t\r\n\t\t\t\t\tif(opacity < opacityRange){\r\n\r\n\t\t\t\t\t\tif(ISCHROME || ISFIREFOX)\r\n\t\t\t\t\t\t\ttoast.style.left = xpos+'px';\r\n\r\n\t\t\t\t\t\ttoast.parentNode.style.opacity = opacityRange;\r\n\r\n\t\t this.stopMoving(toast, null);\r\n\t\t\t\t\t}\r\n\t }\r\n\r\n\t\t\t\t\r\n\t },\r\n\t startMoving: function(toast, instance, settings, e) {\r\n\r\n\t e = e || window.event;\r\n\t var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX),\r\n\t toastLeft = toast.style.transform.replace('px)', '');\r\n\t toastLeft = toastLeft.replace('translateX(', '');\r\n\t var offsetX = posX - toastLeft;\r\n\r\n\t\t\t\ttoast.classList.remove(settings.transitionIn);\r\n\t\t\t\ttoast.classList.remove(settings.transitionInMobile);\r\n\t\t\t\ttoast.style.transition = '';\r\n\r\n\t if(ACCEPTSTOUCH) {\r\n\t document.ontouchmove = function(e) {\r\n\t e.preventDefault();\r\n\t e = e || window.event;\r\n\t var posX = e.touches[0].clientX,\r\n\t finalX = posX - offsetX;\r\n drag.move(toast, instance, settings, finalX);\r\n\t };\r\n\t } else {\r\n\t document.onmousemove = function(e) {\r\n\t e.preventDefault();\r\n\t e = e || window.event;\r\n\t var posX = e.clientX,\r\n\t finalX = posX - offsetX;\r\n drag.move(toast, instance, settings, finalX);\r\n\t };\r\n\t }\r\n\r\n\t },\r\n\t stopMoving: function(toast, e) {\r\n\r\n\t if(ACCEPTSTOUCH) {\r\n\t document.ontouchmove = function() {};\r\n\t } else {\r\n\t \tdocument.onmousemove = function() {};\r\n\t }\r\n\r\n\t\t\t\ttoast.style.opacity = '';\r\n\t\t\t\ttoast.style.transform = '';\r\n\r\n\t if(toast.classList.contains(PLUGIN_NAME+'-dragged')){\r\n\t \t\r\n\t \ttoast.classList.remove(PLUGIN_NAME+'-dragged');\r\n\r\n\t\t\t\t\ttoast.style.transition = 'transform 0.4s ease, opacity 0.4s ease';\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\ttoast.style.transition = '';\r\n\t\t\t\t\t}, 400);\r\n\t }\r\n\r\n\t }\r\n\t };\r\n\r\n\t}();\r\n\r\n\r\n\t/**\r\n\t * Destroy the current initialization.\r\n\t * @public\r\n\t */\r\n\t$iziToast.destroy = function () {\r\n\r\n\t\tforEach(document.querySelectorAll('.'+PLUGIN_NAME+'-wrapper'), function(element, index) {\r\n\t\t\telement.remove();\r\n\t\t});\r\n\r\n\t\tforEach(document.querySelectorAll('.'+PLUGIN_NAME), function(element, index) {\r\n\t\t\telement.remove();\r\n\t\t});\r\n\r\n\t\t// Remove event listeners\r\n\t\tdocument.removeEventListener(PLUGIN_NAME+'-opened', {}, false);\r\n\t\tdocument.removeEventListener(PLUGIN_NAME+'-opening', {}, false);\r\n\t\tdocument.removeEventListener(PLUGIN_NAME+'-closing', {}, false);\r\n\t\tdocument.removeEventListener(PLUGIN_NAME+'-closed', {}, false);\r\n\t\tdocument.removeEventListener('keyup', {}, false);\r\n\r\n\t\t// Reset variables\r\n\t\tCONFIG = {};\r\n\t};\r\n\r\n\t/**\r\n\t * Initialize Plugin\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n\t$iziToast.settings = function (options) {\r\n\r\n\t\t// Destroy any existing initializations\r\n\t\t$iziToast.destroy();\r\n\r\n\t\tCONFIG = options;\r\n\t\tdefaults = extend(defaults, options || {});\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Building themes functions.\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n\tforEach(THEMES, function (theme, name) {\r\n\r\n\t\t$iziToast[name] = function (options) {\r\n\r\n\t\t\tvar settings = extend(CONFIG, options || {});\r\n\t\t\tsettings = extend(theme, settings || {});\r\n\r\n\t\t\tthis.show(settings);\r\n\t\t};\r\n\r\n\t});\r\n\r\n\r\n\t/**\r\n\t * Do the calculation to move the progress bar\r\n\t * @private\r\n\t */\r\n\t $iziToast.progress = function ($toast, options, callback) {\r\n\r\n\t\tvar that = this,\r\n\t\t\tsettings = extend(that.settings, options || {}),\r\n\t\t\t$elem = $toast.querySelector('.'+PLUGIN_NAME+'-progressbar div');\r\n\r\n\t return {\r\n\t start: function() {\r\n\r\n\t \tif($elem !== null){\r\n\t\t\t\t\t$elem.style.transition = 'width '+ settings.timeout +'ms '+settings.progressBarEasing;\r\n\t\t\t\t\t$elem.style.width = '0%';\r\n\t\t\t\t}\r\n\t \tsettings.TIME.START = new Date().getTime();\r\n\t \tsettings.TIME.END = settings.TIME.START + settings.timeout;\r\n\t\t\t\tsettings.TIME.TIMER = setTimeout(function() {\r\n\r\n\t\t\t\t\tclearTimeout(settings.TIME.TIMER);\r\n\r\n\t\t\t\t\tif(!$toast.classList.contains(PLUGIN_NAME+'-closing')){\r\n\r\n\t\t\t\t\t\tthat.hide($toast, settings, 'timeout');\r\n\r\n\t\t\t\t\t\tif(typeof callback === 'function'){\r\n\t\t\t\t\t\t\tcallback.apply(that);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}, settings.timeout);\r\n\t\t\t\t\r\n\t },\r\n\t pause: function() {\r\n\r\n\t\t\t\tsettings.TIME.REMAINING = settings.TIME.END - new Date().getTime();\r\n\r\n\t\t\t\tclearTimeout(settings.TIME.TIMER);\r\n\r\n\t\t\t\tif($elem !== null){\r\n\t\t\t\t\tvar computedStyle = window.getComputedStyle($elem),\r\n\t\t\t\t\t\tpropertyWidth = computedStyle.getPropertyValue('width');\r\n\r\n\t\t\t\t\t$elem.style.transition = 'none';\r\n\t\t\t\t\t$elem.style.width = propertyWidth;\t\t\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof callback === 'function'){\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\tcallback.apply(that);\t\t\t\t\t\t\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t}\r\n\r\n\t },\r\n\t resume: function() {\r\n\r\n\t \tif($elem !== null){\r\n\t\t\t\t\t$elem.style.transition = 'width '+ settings.TIME.REMAINING +'ms '+settings.progressBarEasing;\r\n\t\t\t\t\t$elem.style.width = '0%';\r\n\t\t\t\t}\r\n\r\n\t \tsettings.TIME.END = new Date().getTime() + settings.TIME.REMAINING;\r\n\t\t\t\tsettings.TIME.TIMER = setTimeout(function() {\r\n\r\n\t\t\t\t\tclearTimeout(settings.TIME.TIMER);\r\n\r\n\t\t\t\t\tif(!$toast.classList.contains(PLUGIN_NAME+'-closing')){\r\n\r\n\t\t\t\t\t\tthat.hide($toast, settings, 'timeout');\r\n\r\n\t\t\t\t\t\tif(typeof callback === 'function'){\r\n\t\t\t\t\t\t\tcallback.apply(that);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}, settings.TIME.REMAINING);\r\n\r\n\t },\r\n\t reset: function(){\r\n\r\n\t\t\t\tclearTimeout(settings.TIME.TIMER);\r\n\r\n\t\t\t\tif($elem !== null){\r\n\t\t\t\t\t$elem.style.transition = 'none';\r\n\t\t\t\t\t$elem.style.width = '100%';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof callback === 'function'){\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\tcallback.apply(that);\t\t\t\t\t\t\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t}\r\n\r\n\t }\r\n\t };\r\n\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Close the specific Toast\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n\t$iziToast.hide = function ($toast, options, closedBy) {\r\n\r\n\t\tvar settings = extend(this.settings, options || {});\r\n\t\t\tclosedBy = closedBy || null;\r\n\r\n\t\tif(typeof $toast != 'object'){\r\n\t\t\t$toast = document.querySelector($toast);\r\n\t\t}\r\n\r\n\t\t$toast.classList.add(PLUGIN_NAME+'-closing');\r\n\r\n\t\tsettings.closedBy = closedBy;\r\n\t\tsettings.REF = $toast.getAttribute('data-iziToast-ref');\r\n\r\n\t\t// Overlay\r\n\t\t(function(){\r\n\r\n\t\t\tvar $overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay');\r\n\t\t\tif($overlay !== null){\r\n\t\t\t\tvar refs = $overlay.getAttribute('data-iziToast-ref');\t\t\r\n\t\t\t\t\trefs = refs.split(',');\r\n\t\t\t\tvar index = refs.indexOf(settings.REF);\r\n\r\n\t\t\t\tif(index !== -1){\r\n\t\t\t\t\trefs.splice(index, 1);\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t$overlay.setAttribute('data-iziToast-ref', refs.join());\r\n\r\n\t\t\t\tif(refs.length === 0){\r\n\t\t\t\t\t$overlay.classList.remove('fadeIn');\r\n\t\t\t\t\t$overlay.classList.add('fadeOut');\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t$overlay.remove();\r\n\t\t\t\t\t}, 700);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t})();\r\n\r\n\t\tif(settings.transitionIn || settings.transitionInMobile){\r\n\t\t\t$toast.classList.remove(settings.transitionIn);\r\n\t\t\t$toast.classList.remove(settings.transitionInMobile);\r\n\t\t}\r\n\r\n\t\tif(ISMOBILE || window.innerWidth <= MOBILEWIDTH){\r\n\t\t\tif(settings.transitionOutMobile)\r\n\t\t\t\t$toast.classList.add(settings.transitionOutMobile);\r\n\t\t} else {\r\n\t\t\tif(settings.transitionOut)\r\n\t\t\t\t$toast.classList.add(settings.transitionOut);\r\n\t\t}\r\n\t\tvar H = $toast.parentNode.offsetHeight;\r\n\t\t\t\t$toast.parentNode.style.height = H+'px';\r\n\t\t\t\t$toast.style.pointerEvents = 'none';\r\n\t\t\r\n\t\tif(!ISMOBILE || window.innerWidth > MOBILEWIDTH){\r\n\t\t\t$toast.parentNode.style.transitionDelay = '0.2s';\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tsettings.closedBy = closedBy;\r\n\t\t\tvar event = new CustomEvent(PLUGIN_NAME+'-closing', {detail: settings, bubbles: true, cancelable: true});\r\n\t\t\tdocument.dispatchEvent(event);\r\n\t\t} catch(ex){\r\n\t\t\tconsole.warn(ex);\r\n\t\t}\r\n\r\n\t\tsetTimeout(function() {\r\n\t\t\t\r\n\t\t\t$toast.parentNode.style.height = '0px';\r\n\t\t\t$toast.parentNode.style.overflow = '';\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\t\r\n\t\t\t\t$toast.parentNode.remove();\r\n\t\t\t\ttry {\r\n\t\t\t\t\tsettings.closedBy = closedBy;\r\n\t\t\t\t\tvar event = new CustomEvent(PLUGIN_NAME+'-closed', {detail: settings, bubbles: true, cancelable: true});\r\n\t\t\t\t\tdocument.dispatchEvent(event);\r\n\t\t\t\t} catch(ex){\r\n\t\t\t\t\tconsole.warn(ex);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof settings.onClosed !== 'undefined'){\r\n\t\t\t\t\tsettings.onClosed.apply(null, [settings, $toast, closedBy]);\r\n\t\t\t\t}\r\n\r\n\t\t\t}, 1000);\r\n\t\t}, 200);\r\n\r\n\r\n\t\tif(typeof settings.onClosing !== 'undefined'){\r\n\t\t\tsettings.onClosing.apply(null, [settings, $toast, closedBy]);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Create and show the Toast\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n\t$iziToast.show = function (options) {\r\n\r\n\t\tvar that = this;\r\n\r\n\t\t// Merge user options with defaults\r\n\t\tvar settings = extend(CONFIG, options || {});\r\n\t\t\tsettings = extend(defaults, settings);\r\n\r\n\t\t\tsettings.TIME = {};\r\n\r\n\t\tif(settings.toastOnce && settings.id && document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id).length > 0){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tsettings.REF = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1);\r\n\r\n\t\tvar $DOM = {\r\n\t\t\tbody: document.querySelector('body'),\r\n\t\t\toverlay: document.createElement('div'),\r\n\t\t\ttoast: document.createElement('div'),\r\n\t\t\ttoastBody: document.createElement('div'),\r\n\t\t\ttoastTexts: document.createElement('div'),\r\n\t\t\ttoastCapsule: document.createElement('div'),\r\n\t\t\ticon: document.createElement('i'),\r\n\t\t\tcover: document.createElement('div'),\r\n\t\t\tbuttons: document.createElement('div'),\r\n\t\t\twrapper: null\r\n\t\t};\r\n\r\n\t\t$DOM.toast.setAttribute('data-iziToast-ref', settings.REF);\r\n\t\t$DOM.toast.appendChild($DOM.toastBody);\r\n\t\t$DOM.toastCapsule.appendChild($DOM.toast);\r\n\r\n\t\t// CSS Settings\r\n\t\t(function(){\r\n\r\n\t\t\t$DOM.toast.classList.add(PLUGIN_NAME);\r\n\t\t\t$DOM.toast.classList.add(PLUGIN_NAME+'-opening');\r\n\t\t\t$DOM.toastCapsule.classList.add(PLUGIN_NAME+'-capsule');\r\n\t\t\t$DOM.toastBody.classList.add(PLUGIN_NAME + '-body');\r\n\t\t\t$DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts');\r\n\r\n\t\t\tif(ISMOBILE || window.innerWidth <= MOBILEWIDTH){\r\n\t\t\t\tif(settings.transitionInMobile)\r\n\t\t\t\t\t$DOM.toast.classList.add(settings.transitionInMobile);\r\n\t\t\t} else {\r\n\t\t\t\tif(settings.transitionIn)\r\n\t\t\t\t\t$DOM.toast.classList.add(settings.transitionIn);\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.class){\r\n\t\t\t\tvar classes = settings.class.split(' ');\r\n\t\t\t\tforEach(classes, function (value, index) {\r\n\t\t\t\t\t$DOM.toast.classList.add(value);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.id){ $DOM.toast.id = settings.id; }\r\n\r\n\t\t\tif(settings.rtl){ $DOM.toast.classList.add(PLUGIN_NAME + '-rtl'); }\r\n\r\n\t\t\tif(settings.layout > 1){ $DOM.toast.classList.add(PLUGIN_NAME+'-layout'+settings.layout); }\r\n\r\n\t\t\tif(settings.balloon){ $DOM.toast.classList.add(PLUGIN_NAME+'-balloon'); }\r\n\r\n\t\t\tif(settings.maxWidth){\r\n\t\t\t\tif( !isNaN(settings.maxWidth) ){\r\n\t\t\t\t\t$DOM.toast.style.maxWidth = settings.maxWidth+'px';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.toast.style.maxWidth = settings.maxWidth;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.theme !== '' || settings.theme !== 'light') {\r\n\r\n\t\t\t\t$DOM.toast.classList.add(PLUGIN_NAME+'-theme-'+settings.theme);\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.color) { //#, rgb, rgba, hsl\r\n\t\t\t\t\r\n\t\t\t\tif( isColor(settings.color) ){\r\n\t\t\t\t\t$DOM.toast.style.background = settings.color;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.toast.classList.add(PLUGIN_NAME+'-color-'+settings.color);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.backgroundColor) {\r\n\t\t\t\t$DOM.toast.style.background = settings.backgroundColor;\r\n\t\t\t\tif(settings.balloon){\r\n\t\t\t\t\t$DOM.toast.style.borderColor = settings.backgroundColor;\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t// Cover image\r\n\t\t(function(){\r\n\t\t\tif(settings.image) {\r\n\t\t\t\t$DOM.cover.classList.add(PLUGIN_NAME + '-cover');\r\n\t\t\t\t$DOM.cover.style.width = settings.imageWidth + 'px';\r\n\r\n\t\t\t\tif(isBase64(settings.image.replace(/ /g,''))){\r\n\t\t\t\t\t$DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g,'') + ')';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.cover.style.backgroundImage = 'url(' + settings.image + ')';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.rtl){\r\n\t\t\t\t\t$DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px';\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t$DOM.toast.appendChild($DOM.cover);\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t// Button close\r\n\t\t(function(){\r\n\t\t\tif(settings.close){\r\n\t\t\t\t\r\n\t\t\t\t$DOM.buttonClose = document.createElement('button');\r\n\r\n\t\t\t\t$DOM.buttonClose.classList.add(PLUGIN_NAME + '-close');\r\n\t\t\t\t$DOM.buttonClose.addEventListener('click', function (e) {\r\n\t\t\t\t\tvar button = e.target;\r\n\t\t\t\t\tthat.hide($DOM.toast, settings, 'button');\r\n\t\t\t\t});\r\n\t\t\t\t$DOM.toast.appendChild($DOM.buttonClose);\r\n\t\t\t} else {\r\n\t\t\t\tif(settings.rtl){\r\n\t\t\t\t\t$DOM.toast.style.paddingLeft = '20px';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.toast.style.paddingRight = '20px';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t// Progress Bar & Timeout\r\n\t\t(function(){\r\n\t\t\tif(settings.timeout) {\r\n\r\n\t\t\t\tif(settings.progressBar){\r\n\t\t\t\t\t$DOM.progressBar = document.createElement('div');\r\n\t\t\t\t\t$DOM.progressBarDiv = document.createElement('div');\r\n\t\t\t\t\t$DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar');\r\n\t\t\t\t\t$DOM.progressBarDiv.style.background = settings.progressBarColor;\r\n\t\t\t\t\t$DOM.progressBar.appendChild($DOM.progressBarDiv);\r\n\t\t\t\t\t$DOM.toast.appendChild($DOM.progressBar);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.pauseOnHover && !settings.resetOnHover){\r\n\t\t\t\t\t\r\n\t\t\t\t\t$DOM.toast.addEventListener('mouseenter', function (e) {\r\n\t\t\t\t\t\tthis.classList.add(PLUGIN_NAME+'-paused');\r\n\r\n\t\t\t\t\t\tthat.progress($DOM.toast, settings).pause();\r\n\t\t\t\t\t});\r\n\t\t\t\t\t$DOM.toast.addEventListener('mouseleave', function (e) {\r\n\t\t\t\t\t\tthis.classList.remove(PLUGIN_NAME+'-paused');\r\n\r\n\t\t\t\t\t\tthat.progress($DOM.toast, settings).resume();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.resetOnHover){\r\n\r\n\t\t\t\t\t$DOM.toast.addEventListener('mouseenter', function (e) {\r\n\t\t\t\t\t\tthis.classList.add(PLUGIN_NAME+'-reseted');\r\n\r\n\t\t\t\t\t\tthat.progress($DOM.toast, settings).reset();\r\n\t\t\t\t\t});\r\n\t\t\t\t\t$DOM.toast.addEventListener('mouseleave', function (e) {\r\n\t\t\t\t\t\tthis.classList.remove(PLUGIN_NAME+'-reseted');\r\n\r\n\t\t\t\t\t\tthat.progress($DOM.toast, settings).start();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t// Icon\r\n\t\t(function(){\r\n\t\t\tif(settings.icon) {\r\n\t\t\t\t$DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon);\r\n\t\t\t\t\r\n\t\t\t\tif(settings.iconText){\r\n\t\t\t\t\t$DOM.icon.appendChild(document.createTextNode(settings.iconText));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.rtl){\r\n\t\t\t\t\t$DOM.toastBody.style.paddingRight = '33px';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.toastBody.style.paddingLeft = '33px';\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(settings.iconColor){\r\n\t\t\t\t\t$DOM.icon.style.color = settings.iconColor;\r\n\t\t\t\t}\r\n\t\t\t\t$DOM.toastBody.appendChild($DOM.icon);\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t// Title\r\n\t\t(function(){\r\n\t\t\tif(settings.title.length > 0) {\r\n\r\n\t\t\t\t$DOM.strong = document.createElement('strong');\r\n\t\t\t\t$DOM.strong.classList.add(PLUGIN_NAME + '-title');\r\n\t\t\t\t$DOM.strong.appendChild(createFragElem(settings.title));\r\n\t\t\t\t$DOM.toastTexts.appendChild($DOM.strong);\r\n\r\n\t\t\t\tif(settings.titleColor) {\r\n\t\t\t\t\t$DOM.strong.style.color = settings.titleColor;\r\n\t\t\t\t}\r\n\t\t\t\tif(settings.titleSize) {\r\n\t\t\t\t\tif( !isNaN(settings.titleSize) ){\r\n\t\t\t\t\t\t$DOM.strong.style.fontSize = settings.titleSize+'px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$DOM.strong.style.fontSize = settings.titleSize;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(settings.titleLineHeight) {\r\n\t\t\t\t\tif( !isNaN(settings.titleSize) ){\r\n\t\t\t\t\t\t$DOM.strong.style.lineHeight = settings.titleLineHeight+'px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$DOM.strong.style.lineHeight = settings.titleLineHeight;\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\t\r\n\t\t// Message\r\n\t\t(function(){\r\n\t\t\tif(settings.message.length > 0) {\r\n\r\n\t\t\t\t$DOM.p = document.createElement('p');\r\n\t\t\t\t$DOM.p.classList.add(PLUGIN_NAME + '-message');\r\n\t\t\t\t$DOM.p.appendChild(createFragElem(settings.message));\r\n\t\t\t\t$DOM.toastTexts.appendChild($DOM.p);\r\n\r\n\t\t\t\tif(settings.messageColor) {\r\n\t\t\t\t\t$DOM.p.style.color = settings.messageColor;\r\n\t\t\t\t}\r\n\t\t\t\tif(settings.messageSize) {\r\n\t\t\t\t\tif( !isNaN(settings.titleSize) ){\r\n\t\t\t\t\t\t$DOM.p.style.fontSize = settings.messageSize+'px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$DOM.p.style.fontSize = settings.messageSize;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(settings.messageLineHeight) {\r\n\t\t\t\t\t\r\n\t\t\t\t\tif( !isNaN(settings.titleSize) ){\r\n\t\t\t\t\t\t$DOM.p.style.lineHeight = settings.messageLineHeight+'px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$DOM.p.style.lineHeight = settings.messageLineHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\tif(settings.title.length > 0 && settings.message.length > 0) {\r\n\t\t\tif(settings.rtl){\r\n\t\t\t\t$DOM.strong.style.marginLeft = '10px';\r\n\t\t\t} else if(settings.layout !== 2 && !settings.rtl) {\r\n\t\t\t\t$DOM.strong.style.marginRight = '10px';\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$DOM.toastBody.appendChild($DOM.toastTexts);\r\n\r\n\t\t// Buttons\r\n\t\t(function(){\r\n\t\t\tif(settings.buttons.length > 0) {\r\n\r\n\t\t\t\t$DOM.buttons.classList.add(PLUGIN_NAME + '-buttons');\r\n\r\n\t\t\t\tif(settings.title.length > 0 && settings.message.length === 0) {\r\n\t\t\t\t\tif(settings.rtl){\r\n\t\t\t\t\t\t$DOM.strong.style.marginLeft = '15px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$DOM.strong.style.marginRight = '15px';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(settings.message.length > 0) {\r\n\t\t\t\t\tif(settings.rtl){\r\n\t\t\t\t\t\t$DOM.p.style.marginLeft = '15px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$DOM.p.style.marginRight = '15px';\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$DOM.p.style.marginBottom = '0';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tforEach(settings.buttons, function (value, index) {\r\n\t\t\t\t\t$DOM.buttons.appendChild(createFragElem(value[0]));\r\n\r\n\t\t\t\t\tvar $btns = $DOM.buttons.childNodes;\r\n\r\n\t\t\t\t\t$btns[index].classList.add(PLUGIN_NAME + '-buttons-child');\r\n\r\n\t\t\t\t\tif(value[2]){\r\n\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t$btns[index].focus();\r\n\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$btns[index].addEventListener('click', function (e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tvar ts = value[1];\r\n\t\t\t\t\t\treturn ts(that, $DOM.toast);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t$DOM.toastBody.appendChild($DOM.buttons);\r\n\t\t})();\r\n\r\n\t\t// Target\r\n\t\t(function(){\r\n\t\t\t$DOM.toastCapsule.style.visibility = 'hidden';\r\n\t\t\tsetTimeout(function() {\r\n\t\t\t\tvar H = $DOM.toast.offsetHeight;\r\n\t\t\t\tvar style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast);\r\n\t\t\t\tvar marginTop = style.marginTop;\r\n\t\t\t\t\tmarginTop = marginTop.split('px');\r\n\t\t\t\t\tmarginTop = parseInt(marginTop[0]);\r\n\t\t\t\tvar marginBottom = style.marginBottom;\r\n\t\t\t\t\tmarginBottom = marginBottom.split('px');\r\n\t\t\t\t\tmarginBottom = parseInt(marginBottom[0]);\r\n\r\n\t\t\t\t$DOM.toastCapsule.style.visibility = '';\r\n\t\t\t\t$DOM.toastCapsule.style.height = (H+marginBottom+marginTop)+'px';\r\n\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t$DOM.toastCapsule.style.height = 'auto';\r\n\t\t\t\t\tif(settings.target){\r\n\t\t\t\t\t\t$DOM.toastCapsule.style.overflow = 'visible';\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 500);\r\n\r\n\t\t\t\tif(settings.timeout) {\r\n\t\t\t\t\tthat.progress($DOM.toast, settings).start();\r\n\t\t\t\t}\r\n\t\t\t}, 100);\r\n\t\t})();\r\n\r\n\t\t// Target\r\n\t\t(function(){\r\n\t\t\tvar position = settings.position;\r\n\r\n\t\t\tif(settings.target){\r\n\r\n\t\t\t\t$DOM.wrapper = document.querySelector(settings.target);\r\n\t\t\t\t$DOM.wrapper.classList.add(PLUGIN_NAME + '-target');\r\n\r\n\t\t\t\tif(settings.targetFirst) {\r\n\t\t\t\t\t$DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.wrapper.appendChild($DOM.toastCapsule);\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif( POSITIONS.indexOf(settings.position) == -1 ){\r\n\t\t\t\t\tconsole.warn('['+PLUGIN_NAME+'] Incorrect position.\\nIt can be ' + POSITIONS);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(ISMOBILE || window.innerWidth <= MOBILEWIDTH){\r\n\t\t\t\t\tif(settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter'){\r\n\t\t\t\t\t\tposition = PLUGIN_NAME+'-wrapper-bottomCenter';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if(settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter'){\r\n\t\t\t\t\t\tposition = PLUGIN_NAME+'-wrapper-topCenter';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tposition = PLUGIN_NAME+'-wrapper-center';\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tposition = PLUGIN_NAME+'-wrapper-'+position;\r\n\t\t\t\t}\r\n\t\t\t\t$DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.'+position);\r\n\r\n\t\t\t\tif(!$DOM.wrapper) {\r\n\t\t\t\t\t$DOM.wrapper = document.createElement('div');\r\n\t\t\t\t\t$DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper');\r\n\t\t\t\t\t$DOM.wrapper.classList.add(position);\r\n\t\t\t\t\tdocument.body.appendChild($DOM.wrapper);\r\n\t\t\t\t}\r\n\t\t\t\tif(settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight'){\r\n\t\t\t\t\t$DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.wrapper.appendChild($DOM.toastCapsule);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!isNaN(settings.zindex)) {\r\n\t\t\t\t$DOM.wrapper.style.zIndex = settings.zindex;\r\n\t\t\t} else {\r\n\t\t\t\tconsole.warn('['+PLUGIN_NAME+'] Invalid zIndex.');\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t// Overlay\r\n\t\t(function(){\r\n\r\n\t\t\tif(settings.overlay) {\r\n\r\n\t\t\t\tif( document.querySelector('.'+PLUGIN_NAME+'-overlay.fadeIn') !== null ){\r\n\r\n\t\t\t\t\t$DOM.overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay');\r\n\t\t\t\t\t$DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.REF);\r\n\r\n\t\t\t\t\tif(!isNaN(settings.zindex) && settings.zindex !== null) {\r\n\t\t\t\t\t\t$DOM.overlay.style.zIndex = settings.zindex-1;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t$DOM.overlay.classList.add(PLUGIN_NAME+'-overlay');\r\n\t\t\t\t\t$DOM.overlay.classList.add('fadeIn');\r\n\t\t\t\t\t$DOM.overlay.style.background = settings.overlayColor;\r\n\t\t\t\t\t$DOM.overlay.setAttribute('data-iziToast-ref', settings.REF);\r\n\t\t\t\t\tif(!isNaN(settings.zindex) && settings.zindex !== null) {\r\n\t\t\t\t\t\t$DOM.overlay.style.zIndex = settings.zindex-1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdocument.querySelector('body').appendChild($DOM.overlay);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.overlayClose) {\r\n\r\n\t\t\t\t\t$DOM.overlay.removeEventListener('click', {});\r\n\t\t\t\t\t$DOM.overlay.addEventListener('click', function (e) {\r\n\t\t\t\t\t\tthat.hide($DOM.toast, settings, 'overlay');\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$DOM.overlay.removeEventListener('click', {});\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t})();\r\n\r\n\t\t// Inside animations\r\n\t\t(function(){\r\n\t\t\tif(settings.animateInside){\r\n\t\t\t\t$DOM.toast.classList.add(PLUGIN_NAME+'-animateInside');\r\n\t\t\t\r\n\t\t\t\tvar animationTimes = [200, 100, 300];\r\n\t\t\t\tif(settings.transitionIn == 'bounceInLeft'){\r\n\t\t\t\t\tanimationTimes = [400, 200, 400];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.title.length > 0) {\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t$DOM.strong.classList.add('slideIn');\r\n\t\t\t\t\t}, animationTimes[0]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.message.length > 0) {\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t$DOM.p.classList.add('slideIn');\r\n\t\t\t\t\t}, animationTimes[1]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.icon) {\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t$DOM.icon.classList.add('revealIn');\r\n\t\t\t\t\t}, animationTimes[2]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.buttons.length > 0 && $DOM.buttons) {\r\n\t\t\t\t\tvar counter = 150;\r\n\t\t\t\t\tforEach($DOM.buttons.childNodes, function(element, index) {\r\n\r\n\t\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t\telement.classList.add('revealIn');\r\n\t\t\t\t\t\t}, counter);\r\n\t\t\t\t\t\tcounter = counter + 150;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\tsettings.onOpening.apply(null, [settings, $DOM.toast]);\r\n\r\n\t\ttry {\r\n\t\t\tvar event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true});\r\n\t\t\tdocument.dispatchEvent(event);\r\n\t\t} catch(ex){\r\n\t\t\tconsole.warn(ex);\r\n\t\t}\r\n\r\n\t\tsetTimeout(function() {\r\n\r\n\t\t\t$DOM.toast.classList.remove(PLUGIN_NAME+'-opening');\r\n\t\t\t$DOM.toast.classList.add(PLUGIN_NAME+'-opened');\r\n\r\n\t\t\ttry {\r\n\t\t\t\tvar event = new CustomEvent(PLUGIN_NAME + '-opened', {detail: settings, bubbles: true, cancelable: true});\r\n\t\t\t\tdocument.dispatchEvent(event);\r\n\t\t\t} catch(ex){\r\n\t\t\t\tconsole.warn(ex);\r\n\t\t\t}\r\n\r\n\t\t\tsettings.onOpened.apply(null, [settings, $DOM.toast]);\r\n\t\t}, 1000);\r\n\r\n\t\tif(settings.drag){\r\n\r\n\t\t\tif(ACCEPTSTOUCH) {\r\n\r\n\t\t\t $DOM.toast.addEventListener('touchstart', function(e) {\r\n\t\t\t drag.startMoving(this, that, settings, e);\r\n\t\t\t }, false);\r\n\r\n\t\t\t $DOM.toast.addEventListener('touchend', function(e) {\r\n\t\t\t drag.stopMoving(this, e);\r\n\t\t\t }, false);\r\n\t\t\t} else {\r\n\r\n\t\t\t $DOM.toast.addEventListener('mousedown', function(e) {\r\n\t\t\t \te.preventDefault();\r\n\t\t\t drag.startMoving(this, that, settings, e);\r\n\t\t\t }, false);\r\n\r\n\t\t\t $DOM.toast.addEventListener('mouseup', function(e) {\r\n\t\t\t \te.preventDefault();\r\n\t\t\t drag.stopMoving(this, e);\r\n\t\t\t }, false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(settings.closeOnEscape) {\r\n\r\n\t\t\tdocument.addEventListener('keyup', function (evt) {\r\n\t\t\t\tevt = evt || window.event;\r\n\t\t\t\tif(evt.keyCode == 27) {\r\n\t\t\t\t that.hide($DOM.toast, settings, 'esc');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthat.toast = $DOM.toast;\t\t\r\n\t};\r\n\t\r\n\r\n\treturn $iziToast;\r\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(53)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2l6aXRvYXN0L2Rpc3QvanMvaXppVG9hc3QuanM/NjMxNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4qIGl6aVRvYXN0IHwgdjEuMi4wXHJcbiogaHR0cDovL2l6aXRvYXN0Lm1hcmNlbG9kb2xjZS5jb21cclxuKiBieSBNYXJjZWxvIERvbGNlLlxyXG4qL1xyXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcclxuXHRpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuXHRcdGRlZmluZShbXSwgZmFjdG9yeShyb290KSk7XHJcblx0fSBlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJvb3QpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyb290Lml6aVRvYXN0ID0gZmFjdG9yeShyb290KTtcclxuXHR9XHJcbn0pKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93IHx8IHRoaXMud2luZG93IHx8IHRoaXMuZ2xvYmFsLCBmdW5jdGlvbiAocm9vdCkge1xyXG5cclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vXHJcblx0Ly8gVmFyaWFibGVzXHJcblx0Ly9cclxuXHR2YXIgJGl6aVRvYXN0ID0ge30sXHJcblx0XHRQTFVHSU5fTkFNRSA9ICdpemlUb2FzdCcsXHJcblx0XHRCT0RZID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLFxyXG5cdFx0SVNNT0JJTEUgPSAoL01vYmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpID8gdHJ1ZSA6IGZhbHNlLFxyXG5cdFx0SVNDSFJPTUUgPSAvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC9Hb29nbGUgSW5jLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLFxyXG5cdFx0SVNGSVJFRk9YID0gdHlwZW9mIEluc3RhbGxUcmlnZ2VyICE9PSAndW5kZWZpbmVkJyxcclxuXHRcdEFDQ0VQVFNUT1VDSCA9ICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcclxuXHRcdFBPU0lUSU9OUyA9IFsnYm90dG9tUmlnaHQnLCdib3R0b21MZWZ0JywnYm90dG9tQ2VudGVyJywndG9wUmlnaHQnLCd0b3BMZWZ0JywndG9wQ2VudGVyJywnY2VudGVyJ10sXHJcblx0XHRUSEVNRVMgPSB7XHJcblx0XHRcdGluZm86IHtcclxuXHRcdFx0XHRjb2xvcjogJ2JsdWUnLFxyXG5cdFx0XHRcdGljb246ICdpY28taW5mbydcclxuXHRcdFx0fSxcclxuXHRcdFx0c3VjY2Vzczoge1xyXG5cdFx0XHRcdGNvbG9yOiAnZ3JlZW4nLFxyXG5cdFx0XHRcdGljb246ICdpY28tc3VjY2VzcydcclxuXHRcdFx0fSxcclxuXHRcdFx0d2FybmluZzoge1xyXG5cdFx0XHRcdGNvbG9yOiAnb3JhbmdlJyxcclxuXHRcdFx0XHRpY29uOiAnaWNvLXdhcm5pbmcnXHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiB7XHJcblx0XHRcdFx0Y29sb3I6ICdyZWQnLFxyXG5cdFx0XHRcdGljb246ICdpY28tZXJyb3InXHJcblx0XHRcdH0sXHJcblx0XHRcdHF1ZXN0aW9uOiB7XHJcblx0XHRcdFx0Y29sb3I6ICd5ZWxsb3cnLFxyXG5cdFx0XHRcdGljb246ICdpY28tcXVlc3Rpb24nXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRNT0JJTEVXSURUSCA9IDU2OCxcclxuXHRcdENPTkZJRyA9IHt9O1xyXG5cclxuXHJcblx0Ly8gRGVmYXVsdCBzZXR0aW5nc1xyXG5cdHZhciBkZWZhdWx0cyA9IHtcclxuXHRcdGlkOiBudWxsLCBcclxuXHRcdGNsYXNzOiAnJyxcclxuXHRcdHRpdGxlOiAnJyxcclxuXHRcdHRpdGxlQ29sb3I6ICcnLFxyXG5cdFx0dGl0bGVTaXplOiAnJyxcclxuXHRcdHRpdGxlTGluZUhlaWdodDogJycsXHJcblx0XHRtZXNzYWdlOiAnJyxcclxuXHRcdG1lc3NhZ2VDb2xvcjogJycsXHJcblx0XHRtZXNzYWdlU2l6ZTogJycsXHJcblx0XHRtZXNzYWdlTGluZUhlaWdodDogJycsXHJcblx0XHRiYWNrZ3JvdW5kQ29sb3I6ICcnLFxyXG5cdFx0dGhlbWU6ICdsaWdodCcsIC8vIGRhcmtcclxuXHRcdGNvbG9yOiAnJywgLy8gYmx1ZSwgcmVkLCBncmVlbiwgeWVsbG93XHJcblx0XHRpY29uOiAnJyxcclxuXHRcdGljb25UZXh0OiAnJyxcclxuXHRcdGljb25Db2xvcjogJycsXHJcblx0XHRpbWFnZTogJycsXHJcblx0XHRpbWFnZVdpZHRoOiA1MCxcclxuXHRcdG1heFdpZHRoOiBudWxsLFxyXG5cdFx0emluZGV4OiBudWxsLFxyXG5cdFx0bGF5b3V0OiAxLFxyXG5cdFx0YmFsbG9vbjogZmFsc2UsXHJcblx0XHRjbG9zZTogdHJ1ZSxcclxuXHRcdGNsb3NlT25Fc2NhcGU6IGZhbHNlLFxyXG5cdFx0cnRsOiBmYWxzZSxcclxuXHRcdHBvc2l0aW9uOiAnYm90dG9tUmlnaHQnLCAvLyBib3R0b21SaWdodCwgYm90dG9tTGVmdCwgdG9wUmlnaHQsIHRvcExlZnQsIHRvcENlbnRlciwgYm90dG9tQ2VudGVyLCBjZW50ZXJcclxuXHRcdHRhcmdldDogJycsXHJcblx0XHR0YXJnZXRGaXJzdDogdHJ1ZSxcclxuXHRcdHRvYXN0T25jZTogZmFsc2UsXHJcblx0XHR0aW1lb3V0OiA1MDAwLFxyXG5cdFx0YW5pbWF0ZUluc2lkZTogdHJ1ZSxcclxuXHRcdGRyYWc6IHRydWUsXHJcblx0XHRwYXVzZU9uSG92ZXI6IHRydWUsXHJcblx0XHRyZXNldE9uSG92ZXI6IGZhbHNlLFxyXG5cdFx0cHJvZ3Jlc3NCYXI6IHRydWUsXHJcblx0XHRwcm9ncmVzc0JhckNvbG9yOiAnJyxcclxuXHRcdHByb2dyZXNzQmFyRWFzaW5nOiAnbGluZWFyJyxcclxuXHRcdG92ZXJsYXk6IGZhbHNlLFxyXG5cdFx0b3ZlcmxheUNsb3NlOiBmYWxzZSxcclxuXHRcdG92ZXJsYXlDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC42KScsXHJcblx0XHR0cmFuc2l0aW9uSW46ICdmYWRlSW5VcCcsIC8vIGJvdW5jZUluTGVmdCwgYm91bmNlSW5SaWdodCwgYm91bmNlSW5VcCwgYm91bmNlSW5Eb3duLCBmYWRlSW4sIGZhZGVJbkRvd24sIGZhZGVJblVwLCBmYWRlSW5MZWZ0LCBmYWRlSW5SaWdodCwgZmxpcEluWFxyXG5cdFx0dHJhbnNpdGlvbk91dDogJ2ZhZGVPdXQnLCAvLyBmYWRlT3V0LCBmYWRlT3V0VXAsIGZhZGVPdXREb3duLCBmYWRlT3V0TGVmdCwgZmFkZU91dFJpZ2h0LCBmbGlwT3V0WFxyXG5cdFx0dHJhbnNpdGlvbkluTW9iaWxlOiAnZmFkZUluVXAnLFxyXG5cdFx0dHJhbnNpdGlvbk91dE1vYmlsZTogJ2ZhZGVPdXREb3duJyxcclxuXHRcdGJ1dHRvbnM6IHt9LFxyXG5cdFx0b25PcGVuaW5nOiBmdW5jdGlvbiAoKSB7fSxcclxuXHRcdG9uT3BlbmVkOiBmdW5jdGlvbiAoKSB7fSxcclxuXHRcdG9uQ2xvc2luZzogZnVuY3Rpb24gKCkge30sXHJcblx0XHRvbkNsb3NlZDogZnVuY3Rpb24gKCkge31cclxuXHR9O1xyXG5cclxuXHQvL1xyXG5cdC8vIE1ldGhvZHNcclxuXHQvL1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogUG9seWZpbGwgZm9yIHJlbW92ZSgpIG1ldGhvZFxyXG5cdCAqL1xyXG5cdGlmKCEoJ3JlbW92ZScgaW4gRWxlbWVudC5wcm90b3R5cGUpKSB7XHJcblx0ICAgIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xyXG5cdCAgICAgICAgaWYodGhpcy5wYXJlbnROb2RlKSB7XHJcblx0ICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9O1xyXG5cdH1cclxuXHJcblx0LypcclxuICAgICAqIFBvbHlmaWxsIGZvciBDdXN0b21FdmVudCBmb3IgSUUgPj0gOVxyXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L0N1c3RvbUV2ZW50I1BvbHlmaWxsXHJcbiAgICAgKi9cclxuICAgIGlmKHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB2YXIgQ3VzdG9tRXZlbnRQb2x5ZmlsbCA9IGZ1bmN0aW9uIChldmVudCwgcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7IGJ1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiBmYWxzZSwgZGV0YWlsOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xyXG4gICAgICAgICAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZ0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEN1c3RvbUV2ZW50UG9seWZpbGwucHJvdG90eXBlID0gd2luZG93LkV2ZW50LnByb3RvdHlwZTtcclxuXHJcbiAgICAgICAgd2luZG93LkN1c3RvbUV2ZW50ID0gQ3VzdG9tRXZlbnRQb2x5ZmlsbDtcclxuICAgIH0gXHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgc2ltcGxlIGZvckVhY2goKSBpbXBsZW1lbnRhdGlvbiBmb3IgQXJyYXlzLCBPYmplY3RzIGFuZCBOb2RlTGlzdHNcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fE5vZGVMaXN0fSBjb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgaXRlbXMgdG8gaXRlcmF0ZVxyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZXJhdGlvblxyXG5cdCAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fE5vZGVMaXN0fSBzY29wZSBPYmplY3QvTm9kZUxpc3QvQXJyYXkgdGhhdCBmb3JFYWNoIGlzIGl0ZXJhdGluZyBvdmVyIChha2EgYHRoaXNgKVxyXG5cdCAqL1xyXG5cdHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGNhbGxiYWNrLCBzY29wZSkge1xyXG5cdFx0aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGNvbGxlY3Rpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xyXG5cdFx0XHRmb3IgKHZhciBwcm9wIGluIGNvbGxlY3Rpb24pIHtcclxuXHRcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29sbGVjdGlvbiwgcHJvcCkpIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoc2NvcGUsIGNvbGxlY3Rpb25bcHJvcF0sIHByb3AsIGNvbGxlY3Rpb24pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYoY29sbGVjdGlvbil7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoc2NvcGUsIGNvbGxlY3Rpb25baV0sIGksIGNvbGxlY3Rpb24pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlIGRlZmF1bHRzIHdpdGggdXNlciBvcHRpb25zXHJcblx0ICogQHByaXZhdGVcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdHMgRGVmYXVsdCBzZXR0aW5nc1xyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFVzZXIgb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IE1lcmdlZCB2YWx1ZXMgb2YgZGVmYXVsdHMgYW5kIG9wdGlvbnNcclxuXHQgKi9cclxuXHR2YXIgZXh0ZW5kID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBvcHRpb25zKSB7XHJcblx0XHR2YXIgZXh0ZW5kZWQgPSB7fTtcclxuXHRcdGZvckVhY2goZGVmYXVsdHMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkge1xyXG5cdFx0XHRleHRlbmRlZFtwcm9wXSA9IGRlZmF1bHRzW3Byb3BdO1xyXG5cdFx0fSk7XHJcblx0XHRmb3JFYWNoKG9wdGlvbnMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkge1xyXG5cdFx0XHRleHRlbmRlZFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBleHRlbmRlZDtcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIGEgZnJhZ21lbnQgRE9NIGVsZW1lbnRzXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHR2YXIgY3JlYXRlRnJhZ0VsZW0gPSBmdW5jdGlvbihodG1sU3RyKSB7XHJcblx0XHR2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHRcdFx0dGVtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0dGVtcC5pbm5lckhUTUwgPSBodG1sU3RyO1xyXG5cdFx0d2hpbGUgKHRlbXAuZmlyc3RDaGlsZCkge1xyXG5cdFx0XHRmcmFnLmFwcGVuZENoaWxkKHRlbXAuZmlyc3RDaGlsZCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZnJhZztcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgaXMgYSBjb2xvclxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0dmFyIGlzQ29sb3IgPSBmdW5jdGlvbihjb2xvcil7XHJcblx0XHRpZiggY29sb3Iuc3Vic3RyaW5nKDAsMSkgPT0gJyMnIHx8IGNvbG9yLnN1YnN0cmluZygwLDMpID09ICdyZ2InIHx8IGNvbG9yLnN1YnN0cmluZygwLDMpID09ICdoc2wnICl7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiBpcyBhIEJhc2U2NCBzdHJpbmdcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdHZhciBpc0Jhc2U2NCA9IGZ1bmN0aW9uKHN0cikge1xyXG5cdCAgICB0cnkge1xyXG5cdCAgICAgICAgcmV0dXJuIGJ0b2EoYXRvYihzdHIpKSA9PSBzdHI7XHJcblx0ICAgIH0gY2F0Y2ggKGVycikge1xyXG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cdCAgICB9XHJcblx0fTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIERyYWcgbWV0aG9kIG9mIHRvYXN0c1xyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0dmFyIGRyYWcgPSBmdW5jdGlvbigpIHtcclxuXHQgICAgXHJcblx0ICAgIHJldHVybiB7XHJcblx0ICAgICAgICBtb3ZlOiBmdW5jdGlvbih0b2FzdCwgaW5zdGFuY2UsIHNldHRpbmdzLCB4cG9zKSB7XHJcblxyXG5cdCAgICAgICAgXHR2YXIgb3BhY2l0eSxcclxuXHQgICAgICAgIFx0XHRvcGFjaXR5UmFuZ2UgPSAwLjMsXHJcblx0ICAgICAgICBcdFx0ZGlzdGFuY2UgPSAxODA7XHJcblx0ICAgICAgICAgICAgXHJcblx0ICAgICAgICAgICAgaWYoeHBvcyAhPT0gMCl7XHJcblx0ICAgICAgICAgICAgXHRcclxuXHQgICAgICAgICAgICBcdHRvYXN0LmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUrJy1kcmFnZ2VkJyk7XHJcblxyXG5cdCAgICAgICAgICAgIFx0dG9hc3Quc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoJyt4cG9zICsgJ3B4KSc7XHJcblxyXG5cdFx0ICAgICAgICAgICAgaWYoeHBvcyA+IDApe1xyXG5cdFx0ICAgICAgICAgICAgXHRvcGFjaXR5ID0gKGRpc3RhbmNlLXhwb3MpIC8gZGlzdGFuY2U7XHJcblx0XHQgICAgICAgICAgICBcdGlmKG9wYWNpdHkgPCBvcGFjaXR5UmFuZ2Upe1xyXG5cdFx0XHRcdFx0XHRcdGluc3RhbmNlLmhpZGUodG9hc3QsIGV4dGVuZChzZXR0aW5ncywgeyB0cmFuc2l0aW9uT3V0OiAnZmFkZU91dFJpZ2h0JywgdHJhbnNpdGlvbk91dE1vYmlsZTogJ2ZhZGVPdXRSaWdodCcgfSksICdkcmFnJyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdCAgICAgICAgICAgIH0gZWxzZSB7XHJcblx0XHQgICAgICAgICAgICBcdG9wYWNpdHkgPSAoZGlzdGFuY2UreHBvcykgLyBkaXN0YW5jZTtcclxuXHRcdCAgICAgICAgICAgIFx0aWYob3BhY2l0eSA8IG9wYWNpdHlSYW5nZSl7XHJcblx0XHRcdFx0XHRcdFx0aW5zdGFuY2UuaGlkZSh0b2FzdCwgZXh0ZW5kKHNldHRpbmdzLCB7IHRyYW5zaXRpb25PdXQ6ICdmYWRlT3V0TGVmdCcsIHRyYW5zaXRpb25PdXRNb2JpbGU6ICdmYWRlT3V0TGVmdCcgfSksICdkcmFnJyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdHRvYXN0LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xyXG5cdFx0XHRcclxuXHRcdFx0XHRcdGlmKG9wYWNpdHkgPCBvcGFjaXR5UmFuZ2Upe1xyXG5cclxuXHRcdFx0XHRcdFx0aWYoSVNDSFJPTUUgfHwgSVNGSVJFRk9YKVxyXG5cdFx0XHRcdFx0XHRcdHRvYXN0LnN0eWxlLmxlZnQgPSB4cG9zKydweCc7XHJcblxyXG5cdFx0XHRcdFx0XHR0b2FzdC5wYXJlbnROb2RlLnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5UmFuZ2U7XHJcblxyXG5cdFx0ICAgICAgICAgICAgICAgIHRoaXMuc3RvcE1vdmluZyh0b2FzdCwgbnVsbCk7XHJcblx0XHRcdFx0XHR9XHJcblx0ICAgICAgICAgICAgfVxyXG5cclxuXHRcdFx0XHRcclxuXHQgICAgICAgIH0sXHJcblx0ICAgICAgICBzdGFydE1vdmluZzogZnVuY3Rpb24odG9hc3QsIGluc3RhbmNlLCBzZXR0aW5ncywgZSkge1xyXG5cclxuXHQgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblx0ICAgICAgICAgICAgdmFyIHBvc1ggPSAoKEFDQ0VQVFNUT1VDSCkgPyBlLnRvdWNoZXNbMF0uY2xpZW50WCA6IGUuY2xpZW50WCksXHJcblx0ICAgICAgICAgICAgICAgIHRvYXN0TGVmdCA9IHRvYXN0LnN0eWxlLnRyYW5zZm9ybS5yZXBsYWNlKCdweCknLCAnJyk7XHJcblx0ICAgICAgICAgICAgICAgIHRvYXN0TGVmdCA9IHRvYXN0TGVmdC5yZXBsYWNlKCd0cmFuc2xhdGVYKCcsICcnKTtcclxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0WCA9IHBvc1ggLSB0b2FzdExlZnQ7XHJcblxyXG5cdFx0XHRcdHRvYXN0LmNsYXNzTGlzdC5yZW1vdmUoc2V0dGluZ3MudHJhbnNpdGlvbkluKTtcclxuXHRcdFx0XHR0b2FzdC5jbGFzc0xpc3QucmVtb3ZlKHNldHRpbmdzLnRyYW5zaXRpb25Jbk1vYmlsZSk7XHJcblx0XHRcdFx0dG9hc3Quc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xyXG5cclxuXHQgICAgICAgICAgICBpZihBQ0NFUFRTVE9VQ0gpIHtcclxuXHQgICAgICAgICAgICAgICAgZG9jdW1lbnQub250b3VjaG1vdmUgPSBmdW5jdGlvbihlKSB7XHJcblx0ICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0ICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcG9zWCA9IGUudG91Y2hlc1swXS5jbGllbnRYLFxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsWCA9IHBvc1ggLSBvZmZzZXRYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnLm1vdmUodG9hc3QsIGluc3RhbmNlLCBzZXR0aW5ncywgZmluYWxYKTtcclxuXHQgICAgICAgICAgICAgICAgfTtcclxuXHQgICAgICAgICAgICB9IGVsc2Uge1xyXG5cdCAgICAgICAgICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpIHtcclxuXHQgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHQgICAgICAgICAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwb3NYID0gZS5jbGllbnRYLFxyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsWCA9IHBvc1ggLSBvZmZzZXRYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnLm1vdmUodG9hc3QsIGluc3RhbmNlLCBzZXR0aW5ncywgZmluYWxYKTtcclxuXHQgICAgICAgICAgICAgICAgfTtcclxuXHQgICAgICAgICAgICB9XHJcblxyXG5cdCAgICAgICAgfSxcclxuXHQgICAgICAgIHN0b3BNb3Zpbmc6IGZ1bmN0aW9uKHRvYXN0LCBlKSB7XHJcblxyXG5cdCAgICAgICAgICAgIGlmKEFDQ0VQVFNUT1VDSCkge1xyXG5cdCAgICAgICAgICAgICAgICBkb2N1bWVudC5vbnRvdWNobW92ZSA9IGZ1bmN0aW9uKCkge307XHJcblx0ICAgICAgICAgICAgfSBlbHNlIHtcclxuXHQgICAgICAgICAgICBcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oKSB7fTtcclxuXHQgICAgICAgICAgICB9XHJcblxyXG5cdFx0XHRcdHRvYXN0LnN0eWxlLm9wYWNpdHkgPSAnJztcclxuXHRcdFx0XHR0b2FzdC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcclxuXHJcblx0ICAgICAgICAgICAgaWYodG9hc3QuY2xhc3NMaXN0LmNvbnRhaW5zKFBMVUdJTl9OQU1FKyctZHJhZ2dlZCcpKXtcclxuXHQgICAgICAgICAgICBcdFxyXG5cdCAgICAgICAgICAgIFx0dG9hc3QuY2xhc3NMaXN0LnJlbW92ZShQTFVHSU5fTkFNRSsnLWRyYWdnZWQnKTtcclxuXHJcblx0XHRcdFx0XHR0b2FzdC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAwLjRzIGVhc2UsIG9wYWNpdHkgMC40cyBlYXNlJztcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdHRvYXN0LnN0eWxlLnRyYW5zaXRpb24gPSAnJztcclxuXHRcdFx0XHRcdH0sIDQwMCk7XHJcblx0ICAgICAgICAgICAgfVxyXG5cclxuXHQgICAgICAgIH1cclxuXHQgICAgfTtcclxuXHJcblx0fSgpO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRGVzdHJveSB0aGUgY3VycmVudCBpbml0aWFsaXphdGlvbi5cclxuXHQgKiBAcHVibGljXHJcblx0ICovXHJcblx0JGl6aVRvYXN0LmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG5cdFx0Zm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJytQTFVHSU5fTkFNRSsnLXdyYXBwZXInKSwgZnVuY3Rpb24oZWxlbWVudCwgaW5kZXgpIHtcclxuXHRcdFx0ZWxlbWVudC5yZW1vdmUoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGZvckVhY2goZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicrUExVR0lOX05BTUUpLCBmdW5jdGlvbihlbGVtZW50LCBpbmRleCkge1xyXG5cdFx0XHRlbGVtZW50LnJlbW92ZSgpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyc1xyXG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihQTFVHSU5fTkFNRSsnLW9wZW5lZCcsIHt9LCBmYWxzZSk7XHJcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFBMVUdJTl9OQU1FKyctb3BlbmluZycsIHt9LCBmYWxzZSk7XHJcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFBMVUdJTl9OQU1FKyctY2xvc2luZycsIHt9LCBmYWxzZSk7XHJcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFBMVUdJTl9OQU1FKyctY2xvc2VkJywge30sIGZhbHNlKTtcclxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywge30sIGZhbHNlKTtcclxuXHJcblx0XHQvLyBSZXNldCB2YXJpYWJsZXNcclxuXHRcdENPTkZJRyA9IHt9O1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemUgUGx1Z2luXHJcblx0ICogQHB1YmxpY1xyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFVzZXIgc2V0dGluZ3NcclxuXHQgKi9cclxuXHQkaXppVG9hc3Quc2V0dGluZ3MgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cclxuXHRcdC8vIERlc3Ryb3kgYW55IGV4aXN0aW5nIGluaXRpYWxpemF0aW9uc1xyXG5cdFx0JGl6aVRvYXN0LmRlc3Ryb3koKTtcclxuXHJcblx0XHRDT05GSUcgPSBvcHRpb25zO1xyXG5cdFx0ZGVmYXVsdHMgPSBleHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBCdWlsZGluZyB0aGVtZXMgZnVuY3Rpb25zLlxyXG5cdCAqIEBwdWJsaWNcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBVc2VyIHNldHRpbmdzXHJcblx0ICovXHJcblx0Zm9yRWFjaChUSEVNRVMsIGZ1bmN0aW9uICh0aGVtZSwgbmFtZSkge1xyXG5cclxuXHRcdCRpemlUb2FzdFtuYW1lXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG5cdFx0XHR2YXIgc2V0dGluZ3MgPSBleHRlbmQoQ09ORklHLCBvcHRpb25zIHx8IHt9KTtcclxuXHRcdFx0c2V0dGluZ3MgPSBleHRlbmQodGhlbWUsIHNldHRpbmdzIHx8IHt9KTtcclxuXHJcblx0XHRcdHRoaXMuc2hvdyhzZXR0aW5ncyk7XHJcblx0XHR9O1xyXG5cclxuXHR9KTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIERvIHRoZSBjYWxjdWxhdGlvbiB0byBtb3ZlIHRoZSBwcm9ncmVzcyBiYXJcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdCAkaXppVG9hc3QucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoJHRvYXN0LCBvcHRpb25zLCBjYWxsYmFjaykge1xyXG5cclxuXHRcdHZhciB0aGF0ID0gdGhpcyxcclxuXHRcdFx0c2V0dGluZ3MgPSBleHRlbmQodGhhdC5zZXR0aW5ncywgb3B0aW9ucyB8fCB7fSksXHJcblx0XHRcdCRlbGVtID0gJHRvYXN0LnF1ZXJ5U2VsZWN0b3IoJy4nK1BMVUdJTl9OQU1FKyctcHJvZ3Jlc3NiYXIgZGl2Jyk7XHJcblxyXG5cdCAgICByZXR1cm4ge1xyXG5cdCAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuXHQgICAgICAgIFx0aWYoJGVsZW0gIT09IG51bGwpe1xyXG5cdFx0XHRcdFx0JGVsZW0uc3R5bGUudHJhbnNpdGlvbiA9ICd3aWR0aCAnKyBzZXR0aW5ncy50aW1lb3V0ICsnbXMgJytzZXR0aW5ncy5wcm9ncmVzc0JhckVhc2luZztcclxuXHRcdFx0XHRcdCRlbGVtLnN0eWxlLndpZHRoID0gJzAlJztcclxuXHRcdFx0XHR9XHJcblx0ICAgICAgICBcdHNldHRpbmdzLlRJTUUuU1RBUlQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHQgICAgICAgIFx0c2V0dGluZ3MuVElNRS5FTkQgPSBzZXR0aW5ncy5USU1FLlNUQVJUICsgc2V0dGluZ3MudGltZW91dDtcclxuXHRcdFx0XHRzZXR0aW5ncy5USU1FLlRJTUVSID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoc2V0dGluZ3MuVElNRS5USU1FUik7XHJcblxyXG5cdFx0XHRcdFx0aWYoISR0b2FzdC5jbGFzc0xpc3QuY29udGFpbnMoUExVR0lOX05BTUUrJy1jbG9zaW5nJykpe1xyXG5cclxuXHRcdFx0XHRcdFx0dGhhdC5oaWRlKCR0b2FzdCwgc2V0dGluZ3MsICd0aW1lb3V0Jyk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpe1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoYXQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdH0sIHNldHRpbmdzLnRpbWVvdXQpO1xyXG5cdFx0XHRcdFxyXG5cdCAgICAgICAgfSxcclxuXHQgICAgICAgIHBhdXNlOiBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0c2V0dGluZ3MuVElNRS5SRU1BSU5JTkcgPSBzZXR0aW5ncy5USU1FLkVORCAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuXHRcdFx0XHRjbGVhclRpbWVvdXQoc2V0dGluZ3MuVElNRS5USU1FUik7XHJcblxyXG5cdFx0XHRcdGlmKCRlbGVtICE9PSBudWxsKXtcclxuXHRcdFx0XHRcdHZhciBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoJGVsZW0pLFxyXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVdpZHRoID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd3aWR0aCcpO1xyXG5cclxuXHRcdFx0XHRcdCRlbGVtLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XHJcblx0XHRcdFx0XHQkZWxlbS5zdHlsZS53aWR0aCA9IHByb3BlcnR5V2lkdGg7XHRcdFx0XHRcdFxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKXtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoYXQpO1x0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0fSwgMTApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0ICAgICAgICB9LFxyXG5cdCAgICAgICAgcmVzdW1lOiBmdW5jdGlvbigpIHtcclxuXHJcblx0ICAgICAgICBcdGlmKCRlbGVtICE9PSBudWxsKXtcclxuXHRcdFx0XHRcdCRlbGVtLnN0eWxlLnRyYW5zaXRpb24gPSAnd2lkdGggJysgc2V0dGluZ3MuVElNRS5SRU1BSU5JTkcgKydtcyAnK3NldHRpbmdzLnByb2dyZXNzQmFyRWFzaW5nO1xyXG5cdFx0XHRcdFx0JGVsZW0uc3R5bGUud2lkdGggPSAnMCUnO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0ICAgICAgICBcdHNldHRpbmdzLlRJTUUuRU5EID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBzZXR0aW5ncy5USU1FLlJFTUFJTklORztcclxuXHRcdFx0XHRzZXR0aW5ncy5USU1FLlRJTUVSID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoc2V0dGluZ3MuVElNRS5USU1FUik7XHJcblxyXG5cdFx0XHRcdFx0aWYoISR0b2FzdC5jbGFzc0xpc3QuY29udGFpbnMoUExVR0lOX05BTUUrJy1jbG9zaW5nJykpe1xyXG5cclxuXHRcdFx0XHRcdFx0dGhhdC5oaWRlKCR0b2FzdCwgc2V0dGluZ3MsICd0aW1lb3V0Jyk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpe1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoYXQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHR9LCBzZXR0aW5ncy5USU1FLlJFTUFJTklORyk7XHJcblxyXG5cdCAgICAgICAgfSxcclxuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0XHRjbGVhclRpbWVvdXQoc2V0dGluZ3MuVElNRS5USU1FUik7XHJcblxyXG5cdFx0XHRcdGlmKCRlbGVtICE9PSBudWxsKXtcclxuXHRcdFx0XHRcdCRlbGVtLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XHJcblx0XHRcdFx0XHQkZWxlbS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyl7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRjYWxsYmFjay5hcHBseSh0aGF0KTtcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdH0sIDEwKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9O1xyXG5cclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ2xvc2UgdGhlIHNwZWNpZmljIFRvYXN0XHJcblx0ICogQHB1YmxpY1xyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFVzZXIgc2V0dGluZ3NcclxuXHQgKi9cclxuXHQkaXppVG9hc3QuaGlkZSA9IGZ1bmN0aW9uICgkdG9hc3QsIG9wdGlvbnMsIGNsb3NlZEJ5KSB7XHJcblxyXG5cdFx0dmFyIHNldHRpbmdzID0gZXh0ZW5kKHRoaXMuc2V0dGluZ3MsIG9wdGlvbnMgfHwge30pO1xyXG5cdFx0XHRjbG9zZWRCeSA9IGNsb3NlZEJ5IHx8IG51bGw7XHJcblxyXG5cdFx0aWYodHlwZW9mICR0b2FzdCAhPSAnb2JqZWN0Jyl7XHJcblx0XHRcdCR0b2FzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJHRvYXN0KTtcclxuXHRcdH1cclxuXHJcblx0XHQkdG9hc3QuY2xhc3NMaXN0LmFkZChQTFVHSU5fTkFNRSsnLWNsb3NpbmcnKTtcclxuXHJcblx0XHRzZXR0aW5ncy5jbG9zZWRCeSA9IGNsb3NlZEJ5O1xyXG5cdFx0c2V0dGluZ3MuUkVGID0gJHRvYXN0LmdldEF0dHJpYnV0ZSgnZGF0YS1pemlUb2FzdC1yZWYnKTtcclxuXHJcblx0XHQvLyBPdmVybGF5XHJcblx0XHQoZnVuY3Rpb24oKXtcclxuXHJcblx0XHRcdHZhciAkb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nK1BMVUdJTl9OQU1FKyctb3ZlcmxheScpO1xyXG5cdFx0XHRpZigkb3ZlcmxheSAhPT0gbnVsbCl7XHJcblx0XHRcdFx0dmFyIHJlZnMgPSAkb3ZlcmxheS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXppVG9hc3QtcmVmJyk7XHRcdFxyXG5cdFx0XHRcdFx0cmVmcyA9IHJlZnMuc3BsaXQoJywnKTtcclxuXHRcdFx0XHR2YXIgaW5kZXggPSByZWZzLmluZGV4T2Yoc2V0dGluZ3MuUkVGKTtcclxuXHJcblx0XHRcdFx0aWYoaW5kZXggIT09IC0xKXtcclxuXHRcdFx0XHRcdHJlZnMuc3BsaWNlKGluZGV4LCAxKTtcdFx0XHRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JG92ZXJsYXkuc2V0QXR0cmlidXRlKCdkYXRhLWl6aVRvYXN0LXJlZicsIHJlZnMuam9pbigpKTtcclxuXHJcblx0XHRcdFx0aWYocmVmcy5sZW5ndGggPT09IDApe1xyXG5cdFx0XHRcdFx0JG92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgnZmFkZUluJyk7XHJcblx0XHRcdFx0XHQkb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdmYWRlT3V0Jyk7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHQkb3ZlcmxheS5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdH0sIDcwMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSkoKTtcclxuXHJcblx0XHRpZihzZXR0aW5ncy50cmFuc2l0aW9uSW4gfHwgc2V0dGluZ3MudHJhbnNpdGlvbkluTW9iaWxlKXtcclxuXHRcdFx0JHRvYXN0LmNsYXNzTGlzdC5yZW1vdmUoc2V0dGluZ3MudHJhbnNpdGlvbkluKTtcclxuXHRcdFx0JHRvYXN0LmNsYXNzTGlzdC5yZW1vdmUoc2V0dGluZ3MudHJhbnNpdGlvbkluTW9iaWxlKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZihJU01PQklMRSB8fCB3aW5kb3cuaW5uZXJXaWR0aCA8PSBNT0JJTEVXSURUSCl7XHJcblx0XHRcdGlmKHNldHRpbmdzLnRyYW5zaXRpb25PdXRNb2JpbGUpXHJcblx0XHRcdFx0JHRvYXN0LmNsYXNzTGlzdC5hZGQoc2V0dGluZ3MudHJhbnNpdGlvbk91dE1vYmlsZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZihzZXR0aW5ncy50cmFuc2l0aW9uT3V0KVxyXG5cdFx0XHRcdCR0b2FzdC5jbGFzc0xpc3QuYWRkKHNldHRpbmdzLnRyYW5zaXRpb25PdXQpO1xyXG5cdFx0fVxyXG5cdFx0dmFyIEggPSAkdG9hc3QucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQ7XHJcblx0XHRcdFx0JHRvYXN0LnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0ID0gSCsncHgnO1xyXG5cdFx0XHRcdCR0b2FzdC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG5cdFx0XHJcblx0XHRpZighSVNNT0JJTEUgfHwgd2luZG93LmlubmVyV2lkdGggPiBNT0JJTEVXSURUSCl7XHJcblx0XHRcdCR0b2FzdC5wYXJlbnROb2RlLnN0eWxlLnRyYW5zaXRpb25EZWxheSA9ICcwLjJzJztcclxuXHRcdH1cclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRzZXR0aW5ncy5jbG9zZWRCeSA9IGNsb3NlZEJ5O1xyXG5cdFx0XHR2YXIgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoUExVR0lOX05BTUUrJy1jbG9zaW5nJywge2RldGFpbDogc2V0dGluZ3MsIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWV9KTtcclxuXHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcblx0XHR9IGNhdGNoKGV4KXtcclxuXHRcdFx0Y29uc29sZS53YXJuKGV4KTtcclxuXHRcdH1cclxuXHJcblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcclxuXHRcdFx0JHRvYXN0LnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XHJcblx0XHRcdCR0b2FzdC5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93ID0gJyc7XHJcblxyXG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0JHRvYXN0LnBhcmVudE5vZGUucmVtb3ZlKCk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHNldHRpbmdzLmNsb3NlZEJ5ID0gY2xvc2VkQnk7XHJcblx0XHRcdFx0XHR2YXIgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoUExVR0lOX05BTUUrJy1jbG9zZWQnLCB7ZGV0YWlsOiBzZXR0aW5ncywgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZX0pO1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcblx0XHRcdFx0fSBjYXRjaChleCl7XHJcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oZXgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYodHlwZW9mIHNldHRpbmdzLm9uQ2xvc2VkICE9PSAndW5kZWZpbmVkJyl7XHJcblx0XHRcdFx0XHRzZXR0aW5ncy5vbkNsb3NlZC5hcHBseShudWxsLCBbc2V0dGluZ3MsICR0b2FzdCwgY2xvc2VkQnldKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9LCAxMDAwKTtcclxuXHRcdH0sIDIwMCk7XHJcblxyXG5cclxuXHRcdGlmKHR5cGVvZiBzZXR0aW5ncy5vbkNsb3NpbmcgIT09ICd1bmRlZmluZWQnKXtcclxuXHRcdFx0c2V0dGluZ3Mub25DbG9zaW5nLmFwcGx5KG51bGwsIFtzZXR0aW5ncywgJHRvYXN0LCBjbG9zZWRCeV0pO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBhbmQgc2hvdyB0aGUgVG9hc3RcclxuXHQgKiBAcHVibGljXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVXNlciBzZXR0aW5nc1xyXG5cdCAqL1xyXG5cdCRpemlUb2FzdC5zaG93ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcblx0XHR2YXIgdGhhdCA9IHRoaXM7XHJcblxyXG5cdFx0Ly8gTWVyZ2UgdXNlciBvcHRpb25zIHdpdGggZGVmYXVsdHNcclxuXHRcdHZhciBzZXR0aW5ncyA9IGV4dGVuZChDT05GSUcsIG9wdGlvbnMgfHwge30pO1xyXG5cdFx0XHRzZXR0aW5ncyA9IGV4dGVuZChkZWZhdWx0cywgc2V0dGluZ3MpO1xyXG5cclxuXHRcdFx0c2V0dGluZ3MuVElNRSA9IHt9O1xyXG5cclxuXHRcdGlmKHNldHRpbmdzLnRvYXN0T25jZSAmJiBzZXR0aW5ncy5pZCAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJytQTFVHSU5fTkFNRSsnIycrc2V0dGluZ3MuaWQpLmxlbmd0aCA+IDApe1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0c2V0dGluZ3MuUkVGID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTAwMDAwMDApICsgMSk7XHJcblxyXG5cdFx0dmFyICRET00gPSB7XHJcblx0XHRcdGJvZHk6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKSxcclxuXHRcdFx0b3ZlcmxheTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXHJcblx0XHRcdHRvYXN0OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcclxuXHRcdFx0dG9hc3RCb2R5OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcclxuXHRcdFx0dG9hc3RUZXh0czogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXHJcblx0XHRcdHRvYXN0Q2Fwc3VsZTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXHJcblx0XHRcdGljb246IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKSxcclxuXHRcdFx0Y292ZXI6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxyXG5cdFx0XHRidXR0b25zOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcclxuXHRcdFx0d3JhcHBlcjogbnVsbFxyXG5cdFx0fTtcclxuXHJcblx0XHQkRE9NLnRvYXN0LnNldEF0dHJpYnV0ZSgnZGF0YS1pemlUb2FzdC1yZWYnLCBzZXR0aW5ncy5SRUYpO1xyXG5cdFx0JERPTS50b2FzdC5hcHBlbmRDaGlsZCgkRE9NLnRvYXN0Qm9keSk7XHJcblx0XHQkRE9NLnRvYXN0Q2Fwc3VsZS5hcHBlbmRDaGlsZCgkRE9NLnRvYXN0KTtcclxuXHJcblx0XHQvLyBDU1MgU2V0dGluZ3NcclxuXHRcdChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0JERPTS50b2FzdC5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKTtcclxuXHRcdFx0JERPTS50b2FzdC5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKyctb3BlbmluZycpO1xyXG5cdFx0XHQkRE9NLnRvYXN0Q2Fwc3VsZS5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKyctY2Fwc3VsZScpO1xyXG5cdFx0XHQkRE9NLnRvYXN0Qm9keS5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FICsgJy1ib2R5Jyk7XHJcblx0XHRcdCRET00udG9hc3RUZXh0cy5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FICsgJy10ZXh0cycpO1xyXG5cclxuXHRcdFx0aWYoSVNNT0JJTEUgfHwgd2luZG93LmlubmVyV2lkdGggPD0gTU9CSUxFV0lEVEgpe1xyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnRyYW5zaXRpb25Jbk1vYmlsZSlcclxuXHRcdFx0XHRcdCRET00udG9hc3QuY2xhc3NMaXN0LmFkZChzZXR0aW5ncy50cmFuc2l0aW9uSW5Nb2JpbGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnRyYW5zaXRpb25JbilcclxuXHRcdFx0XHRcdCRET00udG9hc3QuY2xhc3NMaXN0LmFkZChzZXR0aW5ncy50cmFuc2l0aW9uSW4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZihzZXR0aW5ncy5jbGFzcyl7XHJcblx0XHRcdFx0dmFyIGNsYXNzZXMgPSBzZXR0aW5ncy5jbGFzcy5zcGxpdCgnICcpO1xyXG5cdFx0XHRcdGZvckVhY2goY2xhc3NlcywgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdC5jbGFzc0xpc3QuYWRkKHZhbHVlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYoc2V0dGluZ3MuaWQpeyAkRE9NLnRvYXN0LmlkID0gc2V0dGluZ3MuaWQ7IH1cclxuXHJcblx0XHRcdGlmKHNldHRpbmdzLnJ0bCl7ICRET00udG9hc3QuY2xhc3NMaXN0LmFkZChQTFVHSU5fTkFNRSArICctcnRsJyk7IH1cclxuXHJcblx0XHRcdGlmKHNldHRpbmdzLmxheW91dCA+IDEpeyAkRE9NLnRvYXN0LmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUrJy1sYXlvdXQnK3NldHRpbmdzLmxheW91dCk7IH1cclxuXHJcblx0XHRcdGlmKHNldHRpbmdzLmJhbGxvb24peyAkRE9NLnRvYXN0LmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUrJy1iYWxsb29uJyk7IH1cclxuXHJcblx0XHRcdGlmKHNldHRpbmdzLm1heFdpZHRoKXtcclxuXHRcdFx0XHRpZiggIWlzTmFOKHNldHRpbmdzLm1heFdpZHRoKSApe1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdC5zdHlsZS5tYXhXaWR0aCA9IHNldHRpbmdzLm1heFdpZHRoKydweCc7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCRET00udG9hc3Quc3R5bGUubWF4V2lkdGggPSBzZXR0aW5ncy5tYXhXaWR0aDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmKHNldHRpbmdzLnRoZW1lICE9PSAnJyB8fCBzZXR0aW5ncy50aGVtZSAhPT0gJ2xpZ2h0Jykge1xyXG5cclxuXHRcdFx0XHQkRE9NLnRvYXN0LmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUrJy10aGVtZS0nK3NldHRpbmdzLnRoZW1lKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYoc2V0dGluZ3MuY29sb3IpIHsgLy8jLCByZ2IsIHJnYmEsIGhzbFxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGlmKCBpc0NvbG9yKHNldHRpbmdzLmNvbG9yKSApe1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdC5zdHlsZS5iYWNrZ3JvdW5kID0gc2V0dGluZ3MuY29sb3I7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCRET00udG9hc3QuY2xhc3NMaXN0LmFkZChQTFVHSU5fTkFNRSsnLWNvbG9yLScrc2V0dGluZ3MuY29sb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYoc2V0dGluZ3MuYmFja2dyb3VuZENvbG9yKSB7XHJcblx0XHRcdFx0JERPTS50b2FzdC5zdHlsZS5iYWNrZ3JvdW5kID0gc2V0dGluZ3MuYmFja2dyb3VuZENvbG9yO1xyXG5cdFx0XHRcdGlmKHNldHRpbmdzLmJhbGxvb24pe1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdC5zdHlsZS5ib3JkZXJDb2xvciA9IHNldHRpbmdzLmJhY2tncm91bmRDb2xvcjtcdFx0XHRcdFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvLyBDb3ZlciBpbWFnZVxyXG5cdFx0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdGlmKHNldHRpbmdzLmltYWdlKSB7XHJcblx0XHRcdFx0JERPTS5jb3Zlci5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FICsgJy1jb3ZlcicpO1xyXG5cdFx0XHRcdCRET00uY292ZXIuc3R5bGUud2lkdGggPSBzZXR0aW5ncy5pbWFnZVdpZHRoICsgJ3B4JztcclxuXHJcblx0XHRcdFx0aWYoaXNCYXNlNjQoc2V0dGluZ3MuaW1hZ2UucmVwbGFjZSgvIC9nLCcnKSkpe1xyXG5cdFx0XHRcdFx0JERPTS5jb3Zlci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgc2V0dGluZ3MuaW1hZ2UucmVwbGFjZSgvIC9nLCcnKSArICcpJztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0JERPTS5jb3Zlci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBzZXR0aW5ncy5pbWFnZSArICcpJztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnJ0bCl7XHJcblx0XHRcdFx0XHQkRE9NLnRvYXN0Qm9keS5zdHlsZS5tYXJnaW5SaWdodCA9IChzZXR0aW5ncy5pbWFnZVdpZHRoICsgMTApICsgJ3B4JztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdEJvZHkuc3R5bGUubWFyZ2luTGVmdCA9IChzZXR0aW5ncy5pbWFnZVdpZHRoICsgMTApICsgJ3B4JztcdFx0XHRcdFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkRE9NLnRvYXN0LmFwcGVuZENoaWxkKCRET00uY292ZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8vIEJ1dHRvbiBjbG9zZVxyXG5cdFx0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdGlmKHNldHRpbmdzLmNsb3NlKXtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQkRE9NLmJ1dHRvbkNsb3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcblxyXG5cdFx0XHRcdCRET00uYnV0dG9uQ2xvc2UuY2xhc3NMaXN0LmFkZChQTFVHSU5fTkFNRSArICctY2xvc2UnKTtcclxuXHRcdFx0XHQkRE9NLmJ1dHRvbkNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdHZhciBidXR0b24gPSBlLnRhcmdldDtcclxuXHRcdFx0XHRcdHRoYXQuaGlkZSgkRE9NLnRvYXN0LCBzZXR0aW5ncywgJ2J1dHRvbicpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdCRET00udG9hc3QuYXBwZW5kQ2hpbGQoJERPTS5idXR0b25DbG9zZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYoc2V0dGluZ3MucnRsKXtcclxuXHRcdFx0XHRcdCRET00udG9hc3Quc3R5bGUucGFkZGluZ0xlZnQgPSAnMjBweCc7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCRET00udG9hc3Quc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzIwcHgnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvLyBQcm9ncmVzcyBCYXIgJiBUaW1lb3V0XHJcblx0XHQoZnVuY3Rpb24oKXtcclxuXHRcdFx0aWYoc2V0dGluZ3MudGltZW91dCkge1xyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5wcm9ncmVzc0Jhcil7XHJcblx0XHRcdFx0XHQkRE9NLnByb2dyZXNzQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRcdFx0XHQkRE9NLnByb2dyZXNzQmFyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRcdFx0XHQkRE9NLnByb2dyZXNzQmFyLmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUgKyAnLXByb2dyZXNzYmFyJyk7XHJcblx0XHRcdFx0XHQkRE9NLnByb2dyZXNzQmFyRGl2LnN0eWxlLmJhY2tncm91bmQgPSBzZXR0aW5ncy5wcm9ncmVzc0JhckNvbG9yO1xyXG5cdFx0XHRcdFx0JERPTS5wcm9ncmVzc0Jhci5hcHBlbmRDaGlsZCgkRE9NLnByb2dyZXNzQmFyRGl2KTtcclxuXHRcdFx0XHRcdCRET00udG9hc3QuYXBwZW5kQ2hpbGQoJERPTS5wcm9ncmVzc0Jhcik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5wYXVzZU9uSG92ZXIgJiYgIXNldHRpbmdzLnJlc2V0T25Ib3Zlcil7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdCRET00udG9hc3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2xhc3NMaXN0LmFkZChQTFVHSU5fTkFNRSsnLXBhdXNlZCcpO1xyXG5cclxuXHRcdFx0XHRcdFx0dGhhdC5wcm9ncmVzcygkRE9NLnRvYXN0LCBzZXR0aW5ncykucGF1c2UoKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jbGFzc0xpc3QucmVtb3ZlKFBMVUdJTl9OQU1FKyctcGF1c2VkJyk7XHJcblxyXG5cdFx0XHRcdFx0XHR0aGF0LnByb2dyZXNzKCRET00udG9hc3QsIHNldHRpbmdzKS5yZXN1bWUoKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYoc2V0dGluZ3MucmVzZXRPbkhvdmVyKXtcclxuXHJcblx0XHRcdFx0XHQkRE9NLnRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUrJy1yZXNldGVkJyk7XHJcblxyXG5cdFx0XHRcdFx0XHR0aGF0LnByb2dyZXNzKCRET00udG9hc3QsIHNldHRpbmdzKS5yZXNldCgpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQkRE9NLnRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUoUExVR0lOX05BTUUrJy1yZXNldGVkJyk7XHJcblxyXG5cdFx0XHRcdFx0XHR0aGF0LnByb2dyZXNzKCRET00udG9hc3QsIHNldHRpbmdzKS5zdGFydCgpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8vIEljb25cclxuXHRcdChmdW5jdGlvbigpe1xyXG5cdFx0XHRpZihzZXR0aW5ncy5pY29uKSB7XHJcblx0XHRcdFx0JERPTS5pY29uLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBQTFVHSU5fTkFNRSArICctaWNvbiAnICsgc2V0dGluZ3MuaWNvbik7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0aWYoc2V0dGluZ3MuaWNvblRleHQpe1xyXG5cdFx0XHRcdFx0JERPTS5pY29uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNldHRpbmdzLmljb25UZXh0KSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5ydGwpe1xyXG5cdFx0XHRcdFx0JERPTS50b2FzdEJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzMzcHgnO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQkRE9NLnRvYXN0Qm9keS5zdHlsZS5wYWRkaW5nTGVmdCA9ICczM3B4JztcdFx0XHRcdFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHRpZihzZXR0aW5ncy5pY29uQ29sb3Ipe1xyXG5cdFx0XHRcdFx0JERPTS5pY29uLnN0eWxlLmNvbG9yID0gc2V0dGluZ3MuaWNvbkNvbG9yO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkRE9NLnRvYXN0Qm9keS5hcHBlbmRDaGlsZCgkRE9NLmljb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8vIFRpdGxlXHJcblx0XHQoZnVuY3Rpb24oKXtcclxuXHRcdFx0aWYoc2V0dGluZ3MudGl0bGUubGVuZ3RoID4gMCkge1xyXG5cclxuXHRcdFx0XHQkRE9NLnN0cm9uZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0cm9uZycpO1xyXG5cdFx0XHRcdCRET00uc3Ryb25nLmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUgKyAnLXRpdGxlJyk7XHJcblx0XHRcdFx0JERPTS5zdHJvbmcuYXBwZW5kQ2hpbGQoY3JlYXRlRnJhZ0VsZW0oc2V0dGluZ3MudGl0bGUpKTtcclxuXHRcdFx0XHQkRE9NLnRvYXN0VGV4dHMuYXBwZW5kQ2hpbGQoJERPTS5zdHJvbmcpO1xyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy50aXRsZUNvbG9yKSB7XHJcblx0XHRcdFx0XHQkRE9NLnN0cm9uZy5zdHlsZS5jb2xvciA9IHNldHRpbmdzLnRpdGxlQ29sb3I7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnRpdGxlU2l6ZSkge1xyXG5cdFx0XHRcdFx0aWYoICFpc05hTihzZXR0aW5ncy50aXRsZVNpemUpICl7XHJcblx0XHRcdFx0XHRcdCRET00uc3Ryb25nLnN0eWxlLmZvbnRTaXplID0gc2V0dGluZ3MudGl0bGVTaXplKydweCc7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQkRE9NLnN0cm9uZy5zdHlsZS5mb250U2l6ZSA9IHNldHRpbmdzLnRpdGxlU2l6ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2V0dGluZ3MudGl0bGVMaW5lSGVpZ2h0KSB7XHJcblx0XHRcdFx0XHRpZiggIWlzTmFOKHNldHRpbmdzLnRpdGxlU2l6ZSkgKXtcclxuXHRcdFx0XHRcdFx0JERPTS5zdHJvbmcuc3R5bGUubGluZUhlaWdodCA9IHNldHRpbmdzLnRpdGxlTGluZUhlaWdodCsncHgnO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0JERPTS5zdHJvbmcuc3R5bGUubGluZUhlaWdodCA9IHNldHRpbmdzLnRpdGxlTGluZUhlaWdodDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pKCk7XHJcblx0XHRcclxuXHRcdC8vIE1lc3NhZ2VcclxuXHRcdChmdW5jdGlvbigpe1xyXG5cdFx0XHRpZihzZXR0aW5ncy5tZXNzYWdlLmxlbmd0aCA+IDApIHtcclxuXHJcblx0XHRcdFx0JERPTS5wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG5cdFx0XHRcdCRET00ucC5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FICsgJy1tZXNzYWdlJyk7XHJcblx0XHRcdFx0JERPTS5wLmFwcGVuZENoaWxkKGNyZWF0ZUZyYWdFbGVtKHNldHRpbmdzLm1lc3NhZ2UpKTtcclxuXHRcdFx0XHQkRE9NLnRvYXN0VGV4dHMuYXBwZW5kQ2hpbGQoJERPTS5wKTtcclxuXHJcblx0XHRcdFx0aWYoc2V0dGluZ3MubWVzc2FnZUNvbG9yKSB7XHJcblx0XHRcdFx0XHQkRE9NLnAuc3R5bGUuY29sb3IgPSBzZXR0aW5ncy5tZXNzYWdlQ29sb3I7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLm1lc3NhZ2VTaXplKSB7XHJcblx0XHRcdFx0XHRpZiggIWlzTmFOKHNldHRpbmdzLnRpdGxlU2l6ZSkgKXtcclxuXHRcdFx0XHRcdFx0JERPTS5wLnN0eWxlLmZvbnRTaXplID0gc2V0dGluZ3MubWVzc2FnZVNpemUrJ3B4JztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCRET00ucC5zdHlsZS5mb250U2l6ZSA9IHNldHRpbmdzLm1lc3NhZ2VTaXplO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5tZXNzYWdlTGluZUhlaWdodCkge1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZiggIWlzTmFOKHNldHRpbmdzLnRpdGxlU2l6ZSkgKXtcclxuXHRcdFx0XHRcdFx0JERPTS5wLnN0eWxlLmxpbmVIZWlnaHQgPSBzZXR0aW5ncy5tZXNzYWdlTGluZUhlaWdodCsncHgnO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0JERPTS5wLnN0eWxlLmxpbmVIZWlnaHQgPSBzZXR0aW5ncy5tZXNzYWdlTGluZUhlaWdodDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0aWYoc2V0dGluZ3MudGl0bGUubGVuZ3RoID4gMCAmJiBzZXR0aW5ncy5tZXNzYWdlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0aWYoc2V0dGluZ3MucnRsKXtcclxuXHRcdFx0XHQkRE9NLnN0cm9uZy5zdHlsZS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG5cdFx0XHR9IGVsc2UgaWYoc2V0dGluZ3MubGF5b3V0ICE9PSAyICYmICFzZXR0aW5ncy5ydGwpIHtcclxuXHRcdFx0XHQkRE9NLnN0cm9uZy5zdHlsZS5tYXJnaW5SaWdodCA9ICcxMHB4JztcdFxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0JERPTS50b2FzdEJvZHkuYXBwZW5kQ2hpbGQoJERPTS50b2FzdFRleHRzKTtcclxuXHJcblx0XHQvLyBCdXR0b25zXHJcblx0XHQoZnVuY3Rpb24oKXtcclxuXHRcdFx0aWYoc2V0dGluZ3MuYnV0dG9ucy5sZW5ndGggPiAwKSB7XHJcblxyXG5cdFx0XHRcdCRET00uYnV0dG9ucy5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FICsgJy1idXR0b25zJyk7XHJcblxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnRpdGxlLmxlbmd0aCA+IDAgJiYgc2V0dGluZ3MubWVzc2FnZS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRcdGlmKHNldHRpbmdzLnJ0bCl7XHJcblx0XHRcdFx0XHRcdCRET00uc3Ryb25nLnN0eWxlLm1hcmdpbkxlZnQgPSAnMTVweCc7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQkRE9NLnN0cm9uZy5zdHlsZS5tYXJnaW5SaWdodCA9ICcxNXB4JztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2V0dGluZ3MubWVzc2FnZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRpZihzZXR0aW5ncy5ydGwpe1xyXG5cdFx0XHRcdFx0XHQkRE9NLnAuc3R5bGUubWFyZ2luTGVmdCA9ICcxNXB4JztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCRET00ucC5zdHlsZS5tYXJnaW5SaWdodCA9ICcxNXB4JztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCRET00ucC5zdHlsZS5tYXJnaW5Cb3R0b20gPSAnMCc7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3JFYWNoKHNldHRpbmdzLmJ1dHRvbnMsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcclxuXHRcdFx0XHRcdCRET00uYnV0dG9ucy5hcHBlbmRDaGlsZChjcmVhdGVGcmFnRWxlbSh2YWx1ZVswXSkpO1xyXG5cclxuXHRcdFx0XHRcdHZhciAkYnRucyA9ICRET00uYnV0dG9ucy5jaGlsZE5vZGVzO1xyXG5cclxuXHRcdFx0XHRcdCRidG5zW2luZGV4XS5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FICsgJy1idXR0b25zLWNoaWxkJyk7XHJcblxyXG5cdFx0XHRcdFx0aWYodmFsdWVbMl0pe1xyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdCRidG5zW2luZGV4XS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHR9LCAzMDApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdCRidG5zW2luZGV4XS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0dmFyIHRzID0gdmFsdWVbMV07XHJcblx0XHRcdFx0XHRcdHJldHVybiB0cyh0aGF0LCAkRE9NLnRvYXN0KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdCRET00udG9hc3RCb2R5LmFwcGVuZENoaWxkKCRET00uYnV0dG9ucyk7XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8vIFRhcmdldFxyXG5cdFx0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdCRET00udG9hc3RDYXBzdWxlLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR2YXIgSCA9ICRET00udG9hc3Qub2Zmc2V0SGVpZ2h0O1xyXG5cdFx0XHRcdHZhciBzdHlsZSA9ICRET00udG9hc3QuY3VycmVudFN0eWxlIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRET00udG9hc3QpO1xyXG5cdFx0XHRcdHZhciBtYXJnaW5Ub3AgPSBzdHlsZS5tYXJnaW5Ub3A7XHJcblx0XHRcdFx0XHRtYXJnaW5Ub3AgPSBtYXJnaW5Ub3Auc3BsaXQoJ3B4Jyk7XHJcblx0XHRcdFx0XHRtYXJnaW5Ub3AgPSBwYXJzZUludChtYXJnaW5Ub3BbMF0pO1xyXG5cdFx0XHRcdHZhciBtYXJnaW5Cb3R0b20gPSBzdHlsZS5tYXJnaW5Cb3R0b207XHJcblx0XHRcdFx0XHRtYXJnaW5Cb3R0b20gPSBtYXJnaW5Cb3R0b20uc3BsaXQoJ3B4Jyk7XHJcblx0XHRcdFx0XHRtYXJnaW5Cb3R0b20gPSBwYXJzZUludChtYXJnaW5Cb3R0b21bMF0pO1xyXG5cclxuXHRcdFx0XHQkRE9NLnRvYXN0Q2Fwc3VsZS5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcblx0XHRcdFx0JERPTS50b2FzdENhcHN1bGUuc3R5bGUuaGVpZ2h0ID0gKEgrbWFyZ2luQm90dG9tK21hcmdpblRvcCkrJ3B4JztcclxuXHJcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCRET00udG9hc3RDYXBzdWxlLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuXHRcdFx0XHRcdGlmKHNldHRpbmdzLnRhcmdldCl7XHJcblx0XHRcdFx0XHRcdCRET00udG9hc3RDYXBzdWxlLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIDUwMCk7XHJcblxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnRpbWVvdXQpIHtcclxuXHRcdFx0XHRcdHRoYXQucHJvZ3Jlc3MoJERPTS50b2FzdCwgc2V0dGluZ3MpLnN0YXJ0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCAxMDApO1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvLyBUYXJnZXRcclxuXHRcdChmdW5jdGlvbigpe1xyXG5cdFx0XHR2YXIgcG9zaXRpb24gPSBzZXR0aW5ncy5wb3NpdGlvbjtcclxuXHJcblx0XHRcdGlmKHNldHRpbmdzLnRhcmdldCl7XHJcblxyXG5cdFx0XHRcdCRET00ud3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2V0dGluZ3MudGFyZ2V0KTtcclxuXHRcdFx0XHQkRE9NLndyYXBwZXIuY2xhc3NMaXN0LmFkZChQTFVHSU5fTkFNRSArICctdGFyZ2V0Jyk7XHJcblxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLnRhcmdldEZpcnN0KSB7XHJcblx0XHRcdFx0XHQkRE9NLndyYXBwZXIuaW5zZXJ0QmVmb3JlKCRET00udG9hc3RDYXBzdWxlLCAkRE9NLndyYXBwZXIuZmlyc3RDaGlsZCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCRET00ud3JhcHBlci5hcHBlbmRDaGlsZCgkRE9NLnRvYXN0Q2Fwc3VsZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0aWYoIFBPU0lUSU9OUy5pbmRleE9mKHNldHRpbmdzLnBvc2l0aW9uKSA9PSAtMSApe1xyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdbJytQTFVHSU5fTkFNRSsnXSBJbmNvcnJlY3QgcG9zaXRpb24uXFxuSXQgY2FuIGJlIOKAuiAnICsgUE9TSVRJT05TKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmKElTTU9CSUxFIHx8IHdpbmRvdy5pbm5lcldpZHRoIDw9IE1PQklMRVdJRFRIKXtcclxuXHRcdFx0XHRcdGlmKHNldHRpbmdzLnBvc2l0aW9uID09ICdib3R0b21MZWZ0JyB8fCBzZXR0aW5ncy5wb3NpdGlvbiA9PSAnYm90dG9tUmlnaHQnIHx8IHNldHRpbmdzLnBvc2l0aW9uID09ICdib3R0b21DZW50ZXInKXtcclxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPSBQTFVHSU5fTkFNRSsnLXdyYXBwZXItYm90dG9tQ2VudGVyJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgaWYoc2V0dGluZ3MucG9zaXRpb24gPT0gJ3RvcExlZnQnIHx8IHNldHRpbmdzLnBvc2l0aW9uID09ICd0b3BSaWdodCcgfHwgc2V0dGluZ3MucG9zaXRpb24gPT0gJ3RvcENlbnRlcicpe1xyXG5cdFx0XHRcdFx0XHRwb3NpdGlvbiA9IFBMVUdJTl9OQU1FKyctd3JhcHBlci10b3BDZW50ZXInO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdHBvc2l0aW9uID0gUExVR0lOX05BTUUrJy13cmFwcGVyLWNlbnRlcic7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHBvc2l0aW9uID0gUExVR0lOX05BTUUrJy13cmFwcGVyLScrcG9zaXRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCRET00ud3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgUExVR0lOX05BTUUgKyAnLXdyYXBwZXIuJytwb3NpdGlvbik7XHJcblxyXG5cdFx0XHRcdGlmKCEkRE9NLndyYXBwZXIpIHtcclxuXHRcdFx0XHRcdCRET00ud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0XHRcdFx0JERPTS53cmFwcGVyLmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUgKyAnLXdyYXBwZXInKTtcclxuXHRcdFx0XHRcdCRET00ud3JhcHBlci5jbGFzc0xpc3QuYWRkKHBvc2l0aW9uKTtcclxuXHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoJERPTS53cmFwcGVyKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2V0dGluZ3MucG9zaXRpb24gPT0gJ3RvcExlZnQnIHx8IHNldHRpbmdzLnBvc2l0aW9uID09ICd0b3BDZW50ZXInIHx8IHNldHRpbmdzLnBvc2l0aW9uID09ICd0b3BSaWdodCcpe1xyXG5cdFx0XHRcdFx0JERPTS53cmFwcGVyLmluc2VydEJlZm9yZSgkRE9NLnRvYXN0Q2Fwc3VsZSwgJERPTS53cmFwcGVyLmZpcnN0Q2hpbGQpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQkRE9NLndyYXBwZXIuYXBwZW5kQ2hpbGQoJERPTS50b2FzdENhcHN1bGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYoIWlzTmFOKHNldHRpbmdzLnppbmRleCkpIHtcclxuXHRcdFx0XHQkRE9NLndyYXBwZXIuc3R5bGUuekluZGV4ID0gc2V0dGluZ3MuemluZGV4O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybignWycrUExVR0lOX05BTUUrJ10gSW52YWxpZCB6SW5kZXguJyk7XHJcblx0XHRcdH1cclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0Ly8gT3ZlcmxheVxyXG5cdFx0KGZ1bmN0aW9uKCl7XHJcblxyXG5cdFx0XHRpZihzZXR0aW5ncy5vdmVybGF5KSB7XHJcblxyXG5cdFx0XHRcdGlmKCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytQTFVHSU5fTkFNRSsnLW92ZXJsYXkuZmFkZUluJykgIT09IG51bGwgKXtcclxuXHJcblx0XHRcdFx0XHQkRE9NLm92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytQTFVHSU5fTkFNRSsnLW92ZXJsYXknKTtcclxuXHRcdFx0XHRcdCRET00ub3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaXppVG9hc3QtcmVmJywgJERPTS5vdmVybGF5LmdldEF0dHJpYnV0ZSgnZGF0YS1pemlUb2FzdC1yZWYnKSArICcsJyArIHNldHRpbmdzLlJFRik7XHJcblxyXG5cdFx0XHRcdFx0aWYoIWlzTmFOKHNldHRpbmdzLnppbmRleCkgJiYgc2V0dGluZ3MuemluZGV4ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdCRET00ub3ZlcmxheS5zdHlsZS56SW5kZXggPSBzZXR0aW5ncy56aW5kZXgtMTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdCRET00ub3ZlcmxheS5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKyctb3ZlcmxheScpO1xyXG5cdFx0XHRcdFx0JERPTS5vdmVybGF5LmNsYXNzTGlzdC5hZGQoJ2ZhZGVJbicpO1xyXG5cdFx0XHRcdFx0JERPTS5vdmVybGF5LnN0eWxlLmJhY2tncm91bmQgPSBzZXR0aW5ncy5vdmVybGF5Q29sb3I7XHJcblx0XHRcdFx0XHQkRE9NLm92ZXJsYXkuc2V0QXR0cmlidXRlKCdkYXRhLWl6aVRvYXN0LXJlZicsIHNldHRpbmdzLlJFRik7XHJcblx0XHRcdFx0XHRpZighaXNOYU4oc2V0dGluZ3MuemluZGV4KSAmJiBzZXR0aW5ncy56aW5kZXggIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0JERPTS5vdmVybGF5LnN0eWxlLnpJbmRleCA9IHNldHRpbmdzLnppbmRleC0xO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmFwcGVuZENoaWxkKCRET00ub3ZlcmxheSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5vdmVybGF5Q2xvc2UpIHtcclxuXHJcblx0XHRcdFx0XHQkRE9NLm92ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB7fSk7XHJcblx0XHRcdFx0XHQkRE9NLm92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHR0aGF0LmhpZGUoJERPTS50b2FzdCwgc2V0dGluZ3MsICdvdmVybGF5Jyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0JERPTS5vdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywge30pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH1cclxuXHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8vIEluc2lkZSBhbmltYXRpb25zXHJcblx0XHQoZnVuY3Rpb24oKXtcclxuXHRcdFx0aWYoc2V0dGluZ3MuYW5pbWF0ZUluc2lkZSl7XHJcblx0XHRcdFx0JERPTS50b2FzdC5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKyctYW5pbWF0ZUluc2lkZScpO1xyXG5cdFx0XHRcclxuXHRcdFx0XHR2YXIgYW5pbWF0aW9uVGltZXMgPSBbMjAwLCAxMDAsIDMwMF07XHJcblx0XHRcdFx0aWYoc2V0dGluZ3MudHJhbnNpdGlvbkluID09ICdib3VuY2VJbkxlZnQnKXtcclxuXHRcdFx0XHRcdGFuaW1hdGlvblRpbWVzID0gWzQwMCwgMjAwLCA0MDBdO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYoc2V0dGluZ3MudGl0bGUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHQkRE9NLnN0cm9uZy5jbGFzc0xpc3QuYWRkKCdzbGlkZUluJyk7XHJcblx0XHRcdFx0XHR9LCBhbmltYXRpb25UaW1lc1swXSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5tZXNzYWdlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0JERPTS5wLmNsYXNzTGlzdC5hZGQoJ3NsaWRlSW4nKTtcclxuXHRcdFx0XHRcdH0sIGFuaW1hdGlvblRpbWVzWzFdKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmKHNldHRpbmdzLmljb24pIHtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0JERPTS5pY29uLmNsYXNzTGlzdC5hZGQoJ3JldmVhbEluJyk7XHJcblx0XHRcdFx0XHR9LCBhbmltYXRpb25UaW1lc1syXSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZihzZXR0aW5ncy5idXR0b25zLmxlbmd0aCA+IDAgJiYgJERPTS5idXR0b25zKSB7XHJcblx0XHRcdFx0XHR2YXIgY291bnRlciA9IDE1MDtcclxuXHRcdFx0XHRcdGZvckVhY2goJERPTS5idXR0b25zLmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XHJcblxyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZXZlYWxJbicpO1xyXG5cdFx0XHRcdFx0XHR9LCBjb3VudGVyKTtcclxuXHRcdFx0XHRcdFx0Y291bnRlciA9IGNvdW50ZXIgKyAxNTA7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0c2V0dGluZ3Mub25PcGVuaW5nLmFwcGx5KG51bGwsIFtzZXR0aW5ncywgJERPTS50b2FzdF0pO1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudChQTFVHSU5fTkFNRSArICctb3BlbmluZycsIHtkZXRhaWw6IHNldHRpbmdzLCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlfSk7XHJcblx0XHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG5cdFx0fSBjYXRjaChleCl7XHJcblx0XHRcdGNvbnNvbGUud2FybihleCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdCRET00udG9hc3QuY2xhc3NMaXN0LnJlbW92ZShQTFVHSU5fTkFNRSsnLW9wZW5pbmcnKTtcclxuXHRcdFx0JERPTS50b2FzdC5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKyctb3BlbmVkJyk7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudChQTFVHSU5fTkFNRSArICctb3BlbmVkJywge2RldGFpbDogc2V0dGluZ3MsIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWV9KTtcclxuXHRcdFx0XHRkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuXHRcdFx0fSBjYXRjaChleCl7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGV4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0c2V0dGluZ3Mub25PcGVuZWQuYXBwbHkobnVsbCwgW3NldHRpbmdzLCAkRE9NLnRvYXN0XSk7XHJcblx0XHR9LCAxMDAwKTtcclxuXHJcblx0XHRpZihzZXR0aW5ncy5kcmFnKXtcclxuXHJcblx0XHRcdGlmKEFDQ0VQVFNUT1VDSCkge1xyXG5cclxuXHRcdFx0ICAgICRET00udG9hc3QuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0ICAgICAgICBkcmFnLnN0YXJ0TW92aW5nKHRoaXMsIHRoYXQsIHNldHRpbmdzLCBlKTtcclxuXHRcdFx0ICAgIH0sIGZhbHNlKTtcclxuXHJcblx0XHRcdCAgICAkRE9NLnRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHQgICAgICAgIGRyYWcuc3RvcE1vdmluZyh0aGlzLCBlKTtcclxuXHRcdFx0ICAgIH0sIGZhbHNlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdCAgICAkRE9NLnRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0ICAgIFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHQgICAgICAgIGRyYWcuc3RhcnRNb3ZpbmcodGhpcywgdGhhdCwgc2V0dGluZ3MsIGUpO1xyXG5cdFx0XHQgICAgfSwgZmFsc2UpO1xyXG5cclxuXHRcdFx0ICAgICRET00udG9hc3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0ICAgIFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHQgICAgICAgIGRyYWcuc3RvcE1vdmluZyh0aGlzLCBlKTtcclxuXHRcdFx0ICAgIH0sIGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmKHNldHRpbmdzLmNsb3NlT25Fc2NhcGUpIHtcclxuXHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZnVuY3Rpb24gKGV2dCkge1xyXG5cdFx0XHRcdGV2dCA9IGV2dCB8fCB3aW5kb3cuZXZlbnQ7XHJcblx0XHRcdFx0aWYoZXZ0LmtleUNvZGUgPT0gMjcpIHtcclxuXHRcdFx0XHQgICAgdGhhdC5oaWRlKCRET00udG9hc3QsIHNldHRpbmdzLCAnZXNjJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGF0LnRvYXN0ID0gJERPTS50b2FzdDtcdFx0XHJcblx0fTtcclxuXHRcclxuXHJcblx0cmV0dXJuICRpemlUb2FzdDtcclxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvaXppdG9hc3QvZGlzdC9qcy9pemlUb2FzdC5qc1xuLy8gbW9kdWxlIGlkID0gNDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///456\n");
/***/ })
});