(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{ /***/ "./node_modules/reveal.js/lib/js/classList.js": /*!****************************************************!*\ !*** ./node_modules/reveal.js/lib/js/classList.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/\nif(typeof document!==\"undefined\"&&!(\"classList\" in document.createElement(\"a\"))){(function(j){var a=\"classList\",f=\"prototype\",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\\s+|\\s+$/g,\"\")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p window.innerHeight - rangeY ) {\n\t\t\twindow.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) );\n\t\t}\n\n\t\t// Left\n\t\tif( mouseX < rangeX ) {\n\t\t\twindow.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y );\n\t\t}\n\t\t// Right\n\t\telse if( mouseX > window.innerWidth - rangeX ) {\n\t\t\twindow.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y );\n\t\t}\n\t}\n\n\tfunction getScrollOffset() {\n\t\treturn {\n\t\t\tx: window.scrollX !== undefined ? window.scrollX : window.pageXOffset,\n\t\t\ty: window.scrollY !== undefined ? window.scrollY : window.pageYOffset\n\t\t}\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Zooms in on either a rectangle or HTML element.\n\t\t *\n\t\t * @param {Object} options\n\t\t * - element: HTML element to zoom in on\n\t\t * OR\n\t\t * - x/y: coordinates in non-transformed space to zoom in on\n\t\t * - width/height: the portion of the screen to zoom in on\n\t\t * - scale: can be used instead of width/height to explicitly set scale\n\t\t */\n\t\tto: function( options ) {\n\n\t\t\t// Due to an implementation limitation we can't zoom in\n\t\t\t// to another element without zooming out first\n\t\t\tif( level !== 1 ) {\n\t\t\t\tzoom.out();\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.x = options.x || 0;\n\t\t\t\toptions.y = options.y || 0;\n\n\t\t\t\t// If an element is set, that takes precedence\n\t\t\t\tif( !!options.element ) {\n\t\t\t\t\t// Space around the zoomed in element to leave on screen\n\t\t\t\t\tvar padding = 20;\n\t\t\t\t\tvar bounds = options.element.getBoundingClientRect();\n\n\t\t\t\t\toptions.x = bounds.left - padding;\n\t\t\t\t\toptions.y = bounds.top - padding;\n\t\t\t\t\toptions.width = bounds.width + ( padding * 2 );\n\t\t\t\t\toptions.height = bounds.height + ( padding * 2 );\n\t\t\t\t}\n\n\t\t\t\t// If width/height values are set, calculate scale from those values\n\t\t\t\tif( options.width !== undefined && options.height !== undefined ) {\n\t\t\t\t\toptions.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 );\n\t\t\t\t}\n\n\t\t\t\tif( options.scale > 1 ) {\n\t\t\t\t\toptions.x *= options.scale;\n\t\t\t\t\toptions.y *= options.scale;\n\n\t\t\t\t\tmagnify( options, options.scale );\n\n\t\t\t\t\tif( options.pan !== false ) {\n\n\t\t\t\t\t\t// Wait with engaging panning as it may conflict with the\n\t\t\t\t\t\t// zoom transition\n\t\t\t\t\t\tpanEngageTimeout = setTimeout( function() {\n\t\t\t\t\t\t\tpanUpdateInterval = setInterval( pan, 1000 / 60 );\n\t\t\t\t\t\t}, 800 );\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Resets the document zoom state to its default.\n\t\t */\n\t\tout: function() {\n\t\t\tclearTimeout( panEngageTimeout );\n\t\t\tclearInterval( panUpdateInterval );\n\n\t\t\tmagnify( { x: 0, y: 0 }, 1 );\n\n\t\t\tlevel = 1;\n\t\t},\n\n\t\t// Alias\n\t\tmagnify: function( options ) { this.to( options ) },\n\t\treset: function() { this.out() },\n\n\t\tzoomLevel: function() {\n\t\t\treturn level;\n\t\t}\n\t}\n\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmV2ZWFsLmpzL3BsdWdpbi96b29tLWpzL3pvb20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmV2ZWFsLmpzL3BsdWdpbi96b29tLWpzL3pvb20uanM/YmE2MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDdXN0b20gcmV2ZWFsLmpzIGludGVncmF0aW9uXG4oZnVuY3Rpb24oKXtcblx0dmFyIHJldmVhbEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLnJldmVhbCcgKTtcblx0aWYoIHJldmVhbEVsZW1lbnQgKSB7XG5cblx0XHRyZXZlYWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWRvd24nLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgZGVmYXVsdE1vZGlmaWVyID0gL0xpbnV4Ly50ZXN0KCB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtICkgPyAnY3RybCcgOiAnYWx0JztcblxuXHRcdFx0dmFyIG1vZGlmaWVyID0gKCBSZXZlYWwuZ2V0Q29uZmlnKCkuem9vbUtleSA/IFJldmVhbC5nZXRDb25maWcoKS56b29tS2V5IDogZGVmYXVsdE1vZGlmaWVyICkgKyAnS2V5Jztcblx0XHRcdHZhciB6b29tTGV2ZWwgPSAoIFJldmVhbC5nZXRDb25maWcoKS56b29tTGV2ZWwgPyBSZXZlYWwuZ2V0Q29uZmlnKCkuem9vbUxldmVsIDogMiApO1xuXG5cdFx0XHRpZiggZXZlbnRbIG1vZGlmaWVyIF0gJiYgIVJldmVhbC5pc092ZXJ2aWV3KCkgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0em9vbS50byh7XG5cdFx0XHRcdFx0eDogZXZlbnQuY2xpZW50WCxcblx0XHRcdFx0XHR5OiBldmVudC5jbGllbnRZLFxuXHRcdFx0XHRcdHNjYWxlOiB6b29tTGV2ZWwsXG5cdFx0XHRcdFx0cGFuOiBmYWxzZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fVxufSkoKTtcblxuLyohXG4gKiB6b29tLmpzIDAuMyAobW9kaWZpZWQgZm9yIHVzZSB3aXRoIHJldmVhbC5qcylcbiAqIGh0dHA6Ly9sYWIuaGFraW0uc2Uvem9vbS1qc1xuICogTUlUIGxpY2Vuc2VkXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgSGFraW0gRWwgSGF0dGFiLCBodHRwOi8vaGFraW0uc2VcbiAqL1xudmFyIHpvb20gPSAoZnVuY3Rpb24oKXtcblxuXHQvLyBUaGUgY3VycmVudCB6b29tIGxldmVsIChzY2FsZSlcblx0dmFyIGxldmVsID0gMTtcblxuXHQvLyBUaGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiwgdXNlZCBmb3IgcGFubmluZ1xuXHR2YXIgbW91c2VYID0gMCxcblx0XHRtb3VzZVkgPSAwO1xuXG5cdC8vIFRpbWVvdXQgYmVmb3JlIHBhbiBpcyBhY3RpdmF0ZWRcblx0dmFyIHBhbkVuZ2FnZVRpbWVvdXQgPSAtMSxcblx0XHRwYW5VcGRhdGVJbnRlcnZhbCA9IC0xO1xuXG5cdC8vIENoZWNrIGZvciB0cmFuc2Zvcm0gc3VwcG9ydCBzbyB0aGF0IHdlIGNhbiBmYWxsYmFjayBvdGhlcndpc2Vcblx0dmFyIHN1cHBvcnRzVHJhbnNmb3JtcyA9IFx0J1dlYmtpdFRyYW5zZm9ybScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSB8fFxuXHRcdFx0XHRcdFx0XHRcdCdNb3pUcmFuc2Zvcm0nIGluIGRvY3VtZW50LmJvZHkuc3R5bGUgfHxcblx0XHRcdFx0XHRcdFx0XHQnbXNUcmFuc2Zvcm0nIGluIGRvY3VtZW50LmJvZHkuc3R5bGUgfHxcblx0XHRcdFx0XHRcdFx0XHQnT1RyYW5zZm9ybScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSB8fFxuXHRcdFx0XHRcdFx0XHRcdCd0cmFuc2Zvcm0nIGluIGRvY3VtZW50LmJvZHkuc3R5bGU7XG5cblx0aWYoIHN1cHBvcnRzVHJhbnNmb3JtcyApIHtcblx0XHQvLyBUaGUgZWFzaW5nIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHdoZW4gd2Ugem9vbSBpbi9vdXRcblx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDAuOHMgZWFzZSc7XG5cdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5PVHJhbnNpdGlvbiA9ICctby10cmFuc2Zvcm0gMC44cyBlYXNlJztcblx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLm1zVHJhbnNpdGlvbiA9ICctbXMtdHJhbnNmb3JtIDAuOHMgZWFzZSc7XG5cdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5Nb3pUcmFuc2l0aW9uID0gJy1tb3otdHJhbnNmb3JtIDAuOHMgZWFzZSc7XG5cdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtIDAuOHMgZWFzZSc7XG5cdH1cblxuXHQvLyBab29tIG91dCBpZiB0aGUgdXNlciBoaXRzIGVzY2FwZVxuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAna2V5dXAnLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYoIGxldmVsICE9PSAxICYmIGV2ZW50LmtleUNvZGUgPT09IDI3ICkge1xuXHRcdFx0em9vbS5vdXQoKTtcblx0XHR9XG5cdH0gKTtcblxuXHQvLyBNb25pdG9yIG1vdXNlIG1vdmVtZW50IGZvciBwYW5uaW5nXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZW1vdmUnLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYoIGxldmVsICE9PSAxICkge1xuXHRcdFx0bW91c2VYID0gZXZlbnQuY2xpZW50WDtcblx0XHRcdG1vdXNlWSA9IGV2ZW50LmNsaWVudFk7XG5cdFx0fVxuXHR9ICk7XG5cblx0LyoqXG5cdCAqIEFwcGxpZXMgdGhlIENTUyByZXF1aXJlZCB0byB6b29tIGluLCBwcmVmZXJzIHRoZSB1c2Ugb2YgQ1NTM1xuXHQgKiB0cmFuc2Zvcm1zIGJ1dCBmYWxscyBiYWNrIG9uIHpvb20gZm9yIElFLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcmVjdFxuXHQgKiBAcGFyYW0ge051bWJlcn0gc2NhbGVcblx0ICovXG5cdGZ1bmN0aW9uIG1hZ25pZnkoIHJlY3QsIHNjYWxlICkge1xuXG5cdFx0dmFyIHNjcm9sbE9mZnNldCA9IGdldFNjcm9sbE9mZnNldCgpO1xuXG5cdFx0Ly8gRW5zdXJlIGEgd2lkdGgvaGVpZ2h0IGlzIHNldFxuXHRcdHJlY3Qud2lkdGggPSByZWN0LndpZHRoIHx8IDE7XG5cdFx0cmVjdC5oZWlnaHQgPSByZWN0LmhlaWdodCB8fCAxO1xuXG5cdFx0Ly8gQ2VudGVyIHRoZSByZWN0IHdpdGhpbiB0aGUgem9vbWVkIHZpZXdwb3J0XG5cdFx0cmVjdC54IC09ICggd2luZG93LmlubmVyV2lkdGggLSAoIHJlY3Qud2lkdGggKiBzY2FsZSApICkgLyAyO1xuXHRcdHJlY3QueSAtPSAoIHdpbmRvdy5pbm5lckhlaWdodCAtICggcmVjdC5oZWlnaHQgKiBzY2FsZSApICkgLyAyO1xuXG5cdFx0aWYoIHN1cHBvcnRzVHJhbnNmb3JtcyApIHtcblx0XHRcdC8vIFJlc2V0XG5cdFx0XHRpZiggc2NhbGUgPT09IDEgKSB7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUudHJhbnNmb3JtID0gJyc7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUuT1RyYW5zZm9ybSA9ICcnO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLm1zVHJhbnNmb3JtID0gJyc7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUuTW96VHJhbnNmb3JtID0gJyc7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VHJhbnNmb3JtID0gJyc7XG5cdFx0XHR9XG5cdFx0XHQvLyBTY2FsZVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciBvcmlnaW4gPSBzY3JvbGxPZmZzZXQueCArJ3B4ICcrIHNjcm9sbE9mZnNldC55ICsncHgnLFxuXHRcdFx0XHRcdHRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoJysgLXJlY3QueCArJ3B4LCcrIC1yZWN0LnkgKydweCkgc2NhbGUoJysgc2NhbGUgKycpJztcblxuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IG9yaWdpbjtcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5PVHJhbnNmb3JtT3JpZ2luID0gb3JpZ2luO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLm1zVHJhbnNmb3JtT3JpZ2luID0gb3JpZ2luO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLk1velRyYW5zZm9ybU9yaWdpbiA9IG9yaWdpbjtcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRUcmFuc2Zvcm1PcmlnaW4gPSBvcmlnaW47XG5cblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUuT1RyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdC8vIFJlc2V0XG5cdFx0XHRpZiggc2NhbGUgPT09IDEgKSB7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSAnJztcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5sZWZ0ID0gJyc7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gJyc7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAnJztcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAnJztcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS56b29tID0gJyc7XG5cdFx0XHR9XG5cdFx0XHQvLyBTY2FsZVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnQgPSAoIC0gKCBzY3JvbGxPZmZzZXQueCArIHJlY3QueCApIC8gc2NhbGUgKSArICdweCc7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gKCAtICggc2Nyb2xsT2Zmc2V0LnkgKyByZWN0LnkgKSAvIHNjYWxlICkgKyAncHgnO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gKCBzY2FsZSAqIDEwMCApICsgJyUnO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICggc2NhbGUgKiAxMDAgKSArICclJztcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS56b29tID0gc2NhbGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV2ZWwgPSBzY2FsZTtcblxuXHRcdGlmKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0ICkge1xuXHRcdFx0aWYoIGxldmVsICE9PSAxICkge1xuXHRcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCggJ3pvb21lZCcgKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSggJ3pvb21lZCcgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGFuIHRoZSBkb2N1bWVudCB3aGVuIHRoZSBtb3N1ZSBjdXJzb3IgYXBwcm9hY2hlcyB0aGUgZWRnZXNcblx0ICogb2YgdGhlIHdpbmRvdy5cblx0ICovXG5cdGZ1bmN0aW9uIHBhbigpIHtcblx0XHR2YXIgcmFuZ2UgPSAwLjEyLFxuXHRcdFx0cmFuZ2VYID0gd2luZG93LmlubmVyV2lkdGggKiByYW5nZSxcblx0XHRcdHJhbmdlWSA9IHdpbmRvdy5pbm5lckhlaWdodCAqIHJhbmdlLFxuXHRcdFx0c2Nyb2xsT2Zmc2V0ID0gZ2V0U2Nyb2xsT2Zmc2V0KCk7XG5cblx0XHQvLyBVcFxuXHRcdGlmKCBtb3VzZVkgPCByYW5nZVkgKSB7XG5cdFx0XHR3aW5kb3cuc2Nyb2xsKCBzY3JvbGxPZmZzZXQueCwgc2Nyb2xsT2Zmc2V0LnkgLSAoIDEgLSAoIG1vdXNlWSAvIHJhbmdlWSApICkgKiAoIDE0IC8gbGV2ZWwgKSApO1xuXHRcdH1cblx0XHQvLyBEb3duXG5cdFx0ZWxzZSBpZiggbW91c2VZID4gd2luZG93LmlubmVySGVpZ2h0IC0gcmFuZ2VZICkge1xuXHRcdFx0d2luZG93LnNjcm9sbCggc2Nyb2xsT2Zmc2V0LngsIHNjcm9sbE9mZnNldC55ICsgKCAxIC0gKCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtb3VzZVkgKSAvIHJhbmdlWSApICogKCAxNCAvIGxldmVsICkgKTtcblx0XHR9XG5cblx0XHQvLyBMZWZ0XG5cdFx0aWYoIG1vdXNlWCA8IHJhbmdlWCApIHtcblx0XHRcdHdpbmRvdy5zY3JvbGwoIHNjcm9sbE9mZnNldC54IC0gKCAxIC0gKCBtb3VzZVggLyByYW5nZVggKSApICogKCAxNCAvIGxldmVsICksIHNjcm9sbE9mZnNldC55ICk7XG5cdFx0fVxuXHRcdC8vIFJpZ2h0XG5cdFx0ZWxzZSBpZiggbW91c2VYID4gd2luZG93LmlubmVyV2lkdGggLSByYW5nZVggKSB7XG5cdFx0XHR3aW5kb3cuc2Nyb2xsKCBzY3JvbGxPZmZzZXQueCArICggMSAtICggd2luZG93LmlubmVyV2lkdGggLSBtb3VzZVggKSAvIHJhbmdlWCApICogKCAxNCAvIGxldmVsICksIHNjcm9sbE9mZnNldC55ICk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0U2Nyb2xsT2Zmc2V0KCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR4OiB3aW5kb3cuc2Nyb2xsWCAhPT0gdW5kZWZpbmVkID8gd2luZG93LnNjcm9sbFggOiB3aW5kb3cucGFnZVhPZmZzZXQsXG5cdFx0XHR5OiB3aW5kb3cuc2Nyb2xsWSAhPT0gdW5kZWZpbmVkID8gd2luZG93LnNjcm9sbFkgOiB3aW5kb3cucGFnZVlPZmZzZXRcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFpvb21zIGluIG9uIGVpdGhlciBhIHJlY3RhbmdsZSBvciBIVE1MIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqICAgLSBlbGVtZW50OiBIVE1MIGVsZW1lbnQgdG8gem9vbSBpbiBvblxuXHRcdCAqICAgT1Jcblx0XHQgKiAgIC0geC95OiBjb29yZGluYXRlcyBpbiBub24tdHJhbnNmb3JtZWQgc3BhY2UgdG8gem9vbSBpbiBvblxuXHRcdCAqICAgLSB3aWR0aC9oZWlnaHQ6IHRoZSBwb3J0aW9uIG9mIHRoZSBzY3JlZW4gdG8gem9vbSBpbiBvblxuXHRcdCAqICAgLSBzY2FsZTogY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiB3aWR0aC9oZWlnaHQgdG8gZXhwbGljaXRseSBzZXQgc2NhbGVcblx0XHQgKi9cblx0XHR0bzogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHRcdC8vIER1ZSB0byBhbiBpbXBsZW1lbnRhdGlvbiBsaW1pdGF0aW9uIHdlIGNhbid0IHpvb20gaW5cblx0XHRcdC8vIHRvIGFub3RoZXIgZWxlbWVudCB3aXRob3V0IHpvb21pbmcgb3V0IGZpcnN0XG5cdFx0XHRpZiggbGV2ZWwgIT09IDEgKSB7XG5cdFx0XHRcdHpvb20ub3V0KCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0b3B0aW9ucy54ID0gb3B0aW9ucy54IHx8IDA7XG5cdFx0XHRcdG9wdGlvbnMueSA9IG9wdGlvbnMueSB8fCAwO1xuXG5cdFx0XHRcdC8vIElmIGFuIGVsZW1lbnQgaXMgc2V0LCB0aGF0IHRha2VzIHByZWNlZGVuY2Vcblx0XHRcdFx0aWYoICEhb3B0aW9ucy5lbGVtZW50ICkge1xuXHRcdFx0XHRcdC8vIFNwYWNlIGFyb3VuZCB0aGUgem9vbWVkIGluIGVsZW1lbnQgdG8gbGVhdmUgb24gc2NyZWVuXG5cdFx0XHRcdFx0dmFyIHBhZGRpbmcgPSAyMDtcblx0XHRcdFx0XHR2YXIgYm91bmRzID0gb3B0aW9ucy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRcdFx0b3B0aW9ucy54ID0gYm91bmRzLmxlZnQgLSBwYWRkaW5nO1xuXHRcdFx0XHRcdG9wdGlvbnMueSA9IGJvdW5kcy50b3AgLSBwYWRkaW5nO1xuXHRcdFx0XHRcdG9wdGlvbnMud2lkdGggPSBib3VuZHMud2lkdGggKyAoIHBhZGRpbmcgKiAyICk7XG5cdFx0XHRcdFx0b3B0aW9ucy5oZWlnaHQgPSBib3VuZHMuaGVpZ2h0ICsgKCBwYWRkaW5nICogMiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgd2lkdGgvaGVpZ2h0IHZhbHVlcyBhcmUgc2V0LCBjYWxjdWxhdGUgc2NhbGUgZnJvbSB0aG9zZSB2YWx1ZXNcblx0XHRcdFx0aWYoIG9wdGlvbnMud2lkdGggIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmhlaWdodCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdG9wdGlvbnMuc2NhbGUgPSBNYXRoLm1heCggTWF0aC5taW4oIHdpbmRvdy5pbm5lcldpZHRoIC8gb3B0aW9ucy53aWR0aCwgd2luZG93LmlubmVySGVpZ2h0IC8gb3B0aW9ucy5oZWlnaHQgKSwgMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIG9wdGlvbnMuc2NhbGUgPiAxICkge1xuXHRcdFx0XHRcdG9wdGlvbnMueCAqPSBvcHRpb25zLnNjYWxlO1xuXHRcdFx0XHRcdG9wdGlvbnMueSAqPSBvcHRpb25zLnNjYWxlO1xuXG5cdFx0XHRcdFx0bWFnbmlmeSggb3B0aW9ucywgb3B0aW9ucy5zY2FsZSApO1xuXG5cdFx0XHRcdFx0aWYoIG9wdGlvbnMucGFuICE9PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gV2FpdCB3aXRoIGVuZ2FnaW5nIHBhbm5pbmcgYXMgaXQgbWF5IGNvbmZsaWN0IHdpdGggdGhlXG5cdFx0XHRcdFx0XHQvLyB6b29tIHRyYW5zaXRpb25cblx0XHRcdFx0XHRcdHBhbkVuZ2FnZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cGFuVXBkYXRlSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggcGFuLCAxMDAwIC8gNjAgKTtcblx0XHRcdFx0XHRcdH0sIDgwMCApO1xuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlc2V0cyB0aGUgZG9jdW1lbnQgem9vbSBzdGF0ZSB0byBpdHMgZGVmYXVsdC5cblx0XHQgKi9cblx0XHRvdXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KCBwYW5FbmdhZ2VUaW1lb3V0ICk7XG5cdFx0XHRjbGVhckludGVydmFsKCBwYW5VcGRhdGVJbnRlcnZhbCApO1xuXG5cdFx0XHRtYWduaWZ5KCB7IHg6IDAsIHk6IDAgfSwgMSApO1xuXG5cdFx0XHRsZXZlbCA9IDE7XG5cdFx0fSxcblxuXHRcdC8vIEFsaWFzXG5cdFx0bWFnbmlmeTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7IHRoaXMudG8oIG9wdGlvbnMgKSB9LFxuXHRcdHJlc2V0OiBmdW5jdGlvbigpIHsgdGhpcy5vdXQoKSB9LFxuXG5cdFx0em9vbUxldmVsOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBsZXZlbDtcblx0XHR9XG5cdH1cblxufSkoKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/reveal.js/plugin/zoom-js/zoom.js\n"); /***/ }), /***/ "./src/client/js/util/reveal/plugins/growi-renderer.js": /*!*************************************************************!*\ !*** ./src/client/js/util/reveal/plugins/growi-renderer.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/**\n * reveal.js growi-renderer plugin.\n */\n(function (root, factory) {\n // get AppContainer instance from parent window\n const appContainer = window.parent.appContainer;\n const growiRendererPlugin = factory(appContainer);\n growiRendererPlugin.initialize();\n})(this, appContainer => {\n /* eslint-disable no-useless-escape */\n const DEFAULT_SLIDE_SEPARATOR = '^\\r?\\n---\\r?\\n$';\n const DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\\\\.element\\\\\\s*?(.+?)$';\n const DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\\\\.slide:\\\\\\s*?(\\\\\\S.+?)$';\n /* eslint-enable no-useless-escape */\n\n const growiRenderer = appContainer.getRenderer('editor');\n let marked;\n /**\n * Add data separator before lines\n * starting with '#' to markdown.\n */\n\n function divideSlides() {\n const sections = document.querySelectorAll('[data-markdown]');\n\n for (let i = 0, len = sections.length; i < len; i++) {\n const section = sections[i];\n const markdown = marked.getMarkdownFromSlide(section);\n const context = {\n markdown\n };\n const interceptorManager = appContainer.interceptorManager;\n let dataSeparator = section.getAttribute('data-separator') || DEFAULT_SLIDE_SEPARATOR; // replace string '\\n' to LF code.\n\n dataSeparator = dataSeparator.replace(/\\\\n/g, '\\n');\n const replaceValue = `${dataSeparator}#`; // detach code block.\n\n interceptorManager.process('prePreProcess', context); // if there is only '\\n' in the first line, replace it.\n\n context.markdown = context.markdown.replace(/^\\n/, ''); // add data separator to markdown.\n\n context.markdown = context.markdown.replace(/[\\n]+#/g, replaceValue); // restore code block.\n\n interceptorManager.process('postPreProcess', context);\n section.innerHTML = marked.createMarkdownSlide(context.markdown);\n }\n }\n /**\n * Converts data-markdown slides to HTML slides by GrowiRenderer.\n */\n\n\n function convertSlides() {\n const sections = document.querySelectorAll('[data-markdown]');\n let markdown;\n const interceptorManager = appContainer.interceptorManager;\n\n for (let i = 0, len = sections.length; i < len; i++) {\n const section = sections[i]; // Only parse the same slide once\n\n if (!section.getAttribute('data-markdown-parsed')) {\n section.setAttribute('data-markdown-parsed', 'true');\n const notes = section.querySelector('aside.notes');\n markdown = marked.getMarkdownFromSlide(section);\n const context = {\n markdown\n };\n interceptorManager.process('preRender', context).then(() => {\n return interceptorManager.process('prePreProcess', context);\n }).then(() => {\n context.markdown = growiRenderer.preProcess(context.markdown);\n }).then(() => {\n return interceptorManager.process('postPreProcess', context);\n }).then(() => {\n context.parsedHTML = growiRenderer.process(context.markdown);\n }).then(() => {\n return interceptorManager.process('prePostProcess', context);\n }).then(() => {\n context.parsedHTML = growiRenderer.postProcess(context.parsedHTML);\n }).then(() => {\n return interceptorManager.process('postPostProcess', context);\n }).then(() => {\n return interceptorManager.process('preRenderHtml', context);\n }).then(() => {\n return interceptorManager.process('postRenderHtml', context);\n }).then(() => {\n section.innerHTML = context.parsedHTML;\n });\n marked.addAttributes(section, section, null, section.getAttribute('data-element-attributes') || section.parentNode.getAttribute('data-element-attributes') || DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR, section.getAttribute('data-attributes') || section.parentNode.getAttribute('data-attributes') || DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR); // If there were notes, we need to re-add them after\n // having overwritten the section's HTML\n\n if (notes) {\n section.appendChild(notes);\n }\n }\n }\n } // API\n\n\n return {\n async initialize() {\n marked = __webpack_require__(/*! ./markdown */ \"./src/client/js/util/reveal/plugins/markdown.js\").default(growiRenderer.process);\n divideSlides();\n marked.processSlides();\n convertSlides();\n }\n\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvcmV2ZWFsL3BsdWdpbnMvZ3Jvd2ktcmVuZGVyZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3V0aWwvcmV2ZWFsL3BsdWdpbnMvZ3Jvd2ktcmVuZGVyZXIuanM/ZmJkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJldmVhbC5qcyBncm93aS1yZW5kZXJlciBwbHVnaW4uXG4gKi9cbihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gIC8vIGdldCBBcHBDb250YWluZXIgaW5zdGFuY2UgZnJvbSBwYXJlbnQgd2luZG93XG4gIGNvbnN0IGFwcENvbnRhaW5lciA9IHdpbmRvdy5wYXJlbnQuYXBwQ29udGFpbmVyO1xuXG4gIGNvbnN0IGdyb3dpUmVuZGVyZXJQbHVnaW4gPSBmYWN0b3J5KGFwcENvbnRhaW5lcik7XG4gIGdyb3dpUmVuZGVyZXJQbHVnaW4uaW5pdGlhbGl6ZSgpO1xufSh0aGlzLCAoYXBwQ29udGFpbmVyKSA9PiB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG4gIGNvbnN0IERFRkFVTFRfU0xJREVfU0VQQVJBVE9SID0gJ15cXHI/XFxuLS0tXFxyP1xcbiQnO1xuICBjb25zdCBERUZBVUxUX0VMRU1FTlRfQVRUUklCVVRFU19TRVBBUkFUT1IgPSAnXFxcXFxcLmVsZW1lbnRcXFxcXFxzKj8oLis/KSQnO1xuICBjb25zdCBERUZBVUxUX1NMSURFX0FUVFJJQlVURVNfU0VQQVJBVE9SID0gJ1xcXFxcXC5zbGlkZTpcXFxcXFxzKj8oXFxcXFxcUy4rPykkJztcbiAgLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG4gIGNvbnN0IGdyb3dpUmVuZGVyZXIgPSBhcHBDb250YWluZXIuZ2V0UmVuZGVyZXIoJ2VkaXRvcicpO1xuXG4gIGxldCBtYXJrZWQ7XG5cbiAgLyoqXG4gICAqIEFkZCBkYXRhIHNlcGFyYXRvciBiZWZvcmUgbGluZXNcbiAgICogc3RhcnRpbmcgd2l0aCAnIycgdG8gbWFya2Rvd24uXG4gICAqL1xuICBmdW5jdGlvbiBkaXZpZGVTbGlkZXMoKSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tYXJrZG93bl0nKTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VjdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uc1tpXTtcbiAgICAgIGNvbnN0IG1hcmtkb3duID0gbWFya2VkLmdldE1hcmtkb3duRnJvbVNsaWRlKHNlY3Rpb24pO1xuICAgICAgY29uc3QgY29udGV4dCA9IHsgbWFya2Rvd24gfTtcbiAgICAgIGNvbnN0IGludGVyY2VwdG9yTWFuYWdlciA9IGFwcENvbnRhaW5lci5pbnRlcmNlcHRvck1hbmFnZXI7XG4gICAgICBsZXQgZGF0YVNlcGFyYXRvciA9IHNlY3Rpb24uZ2V0QXR0cmlidXRlKCdkYXRhLXNlcGFyYXRvcicpIHx8IERFRkFVTFRfU0xJREVfU0VQQVJBVE9SO1xuICAgICAgLy8gcmVwbGFjZSBzdHJpbmcgJ1xcbicgdG8gTEYgY29kZS5cbiAgICAgIGRhdGFTZXBhcmF0b3IgPSBkYXRhU2VwYXJhdG9yLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcbiAgICAgIGNvbnN0IHJlcGxhY2VWYWx1ZSA9IGAke2RhdGFTZXBhcmF0b3J9I2A7XG4gICAgICAvLyBkZXRhY2ggY29kZSBibG9jay5cbiAgICAgIGludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzKCdwcmVQcmVQcm9jZXNzJywgY29udGV4dCk7XG4gICAgICAvLyBpZiB0aGVyZSBpcyBvbmx5ICdcXG4nIGluIHRoZSBmaXJzdCBsaW5lLCByZXBsYWNlIGl0LlxuICAgICAgY29udGV4dC5tYXJrZG93biA9IGNvbnRleHQubWFya2Rvd24ucmVwbGFjZSgvXlxcbi8sICcnKTtcbiAgICAgIC8vIGFkZCBkYXRhIHNlcGFyYXRvciB0byBtYXJrZG93bi5cbiAgICAgIGNvbnRleHQubWFya2Rvd24gPSBjb250ZXh0Lm1hcmtkb3duLnJlcGxhY2UoL1tcXG5dKyMvZywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIC8vIHJlc3RvcmUgY29kZSBibG9jay5cbiAgICAgIGludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzKCdwb3N0UHJlUHJvY2VzcycsIGNvbnRleHQpO1xuICAgICAgc2VjdGlvbi5pbm5lckhUTUwgPSBtYXJrZWQuY3JlYXRlTWFya2Rvd25TbGlkZShjb250ZXh0Lm1hcmtkb3duKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgZGF0YS1tYXJrZG93biBzbGlkZXMgdG8gSFRNTCBzbGlkZXMgYnkgR3Jvd2lSZW5kZXJlci5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnZlcnRTbGlkZXMoKSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tYXJrZG93bl0nKTtcbiAgICBsZXQgbWFya2Rvd247XG4gICAgY29uc3QgaW50ZXJjZXB0b3JNYW5hZ2VyID0gYXBwQ29udGFpbmVyLmludGVyY2VwdG9yTWFuYWdlcjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWN0aW9ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2ldO1xuXG4gICAgICAvLyBPbmx5IHBhcnNlIHRoZSBzYW1lIHNsaWRlIG9uY2VcbiAgICAgIGlmICghc2VjdGlvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFya2Rvd24tcGFyc2VkJykpIHtcbiAgICAgICAgc2VjdGlvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWFya2Rvd24tcGFyc2VkJywgJ3RydWUnKTtcbiAgICAgICAgY29uc3Qgbm90ZXMgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJ2FzaWRlLm5vdGVzJyk7XG4gICAgICAgIG1hcmtkb3duID0gbWFya2VkLmdldE1hcmtkb3duRnJvbVNsaWRlKHNlY3Rpb24pO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0geyBtYXJrZG93biB9O1xuXG4gICAgICAgIGludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzKCdwcmVSZW5kZXInLCBjb250ZXh0KVxuICAgICAgICAgIC50aGVuKCgpID0+IHsgcmV0dXJuIGludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzKCdwcmVQcmVQcm9jZXNzJywgY29udGV4dCkgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb250ZXh0Lm1hcmtkb3duID0gZ3Jvd2lSZW5kZXJlci5wcmVQcm9jZXNzKGNvbnRleHQubWFya2Rvd24pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oKCkgPT4geyByZXR1cm4gaW50ZXJjZXB0b3JNYW5hZ2VyLnByb2Nlc3MoJ3Bvc3RQcmVQcm9jZXNzJywgY29udGV4dCkgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb250ZXh0LnBhcnNlZEhUTUwgPSBncm93aVJlbmRlcmVyLnByb2Nlc3MoY29udGV4dC5tYXJrZG93bik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7IHJldHVybiBpbnRlcmNlcHRvck1hbmFnZXIucHJvY2VzcygncHJlUG9zdFByb2Nlc3MnLCBjb250ZXh0KSB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQucGFyc2VkSFRNTCA9IGdyb3dpUmVuZGVyZXIucG9zdFByb2Nlc3MoY29udGV4dC5wYXJzZWRIVE1MKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHsgcmV0dXJuIGludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzKCdwb3N0UG9zdFByb2Nlc3MnLCBjb250ZXh0KSB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHsgcmV0dXJuIGludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzKCdwcmVSZW5kZXJIdG1sJywgY29udGV4dCkgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7IHJldHVybiBpbnRlcmNlcHRvck1hbmFnZXIucHJvY2VzcygncG9zdFJlbmRlckh0bWwnLCBjb250ZXh0KSB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNlY3Rpb24uaW5uZXJIVE1MID0gY29udGV4dC5wYXJzZWRIVE1MO1xuICAgICAgICAgIH0pO1xuICAgICAgICBtYXJrZWQuYWRkQXR0cmlidXRlcyhzZWN0aW9uLCBzZWN0aW9uLCBudWxsLCBzZWN0aW9uLmdldEF0dHJpYnV0ZSgnZGF0YS1lbGVtZW50LWF0dHJpYnV0ZXMnKVxuICAgICAgICAgIHx8IHNlY3Rpb24ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZWxlbWVudC1hdHRyaWJ1dGVzJylcbiAgICAgICAgICB8fCBERUZBVUxUX0VMRU1FTlRfQVRUUklCVVRFU19TRVBBUkFUT1IsXG4gICAgICAgIHNlY3Rpb24uZ2V0QXR0cmlidXRlKCdkYXRhLWF0dHJpYnV0ZXMnKVxuICAgICAgICAgIHx8IHNlY3Rpb24ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXR0cmlidXRlcycpXG4gICAgICAgICAgfHwgREVGQVVMVF9TTElERV9BVFRSSUJVVEVTX1NFUEFSQVRPUik7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBub3Rlcywgd2UgbmVlZCB0byByZS1hZGQgdGhlbSBhZnRlclxuICAgICAgICAvLyBoYXZpbmcgb3ZlcndyaXR0ZW4gdGhlIHNlY3Rpb24ncyBIVE1MXG4gICAgICAgIGlmIChub3Rlcykge1xuICAgICAgICAgIHNlY3Rpb24uYXBwZW5kQ2hpbGQobm90ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQVBJXG4gIHJldHVybiB7XG4gICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAgICAgIG1hcmtlZCA9IHJlcXVpcmUoJy4vbWFya2Rvd24nKS5kZWZhdWx0KGdyb3dpUmVuZGVyZXIucHJvY2Vzcyk7XG4gICAgICBkaXZpZGVTbGlkZXMoKTtcbiAgICAgIG1hcmtlZC5wcm9jZXNzU2xpZGVzKCk7XG4gICAgICBjb252ZXJ0U2xpZGVzKCk7XG4gICAgfSxcbiAgfTtcbn0pKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7OztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFRQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/client/js/util/reveal/plugins/growi-renderer.js\n"); /***/ }), /***/ "./src/client/js/util/reveal/plugins/markdown.js": /*!*******************************************************!*\ !*** ./src/client/js/util/reveal/plugins/markdown.js ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/**\n * The reveal.js markdown plugin. Handles parsing of\n * markdown inside of presentations as well as loading\n * of external markdown documents.\n * Referred from The reveal.js markdown plugin.\n * https://github.com/hakimel/reveal.js/blob/master/plugin/markdown/markdown.js\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (marked) {\n const DEFAULT_SLIDE_SEPARATOR = '^\\r?\\n---\\r?\\n$',\n DEFAULT_NOTES_SEPARATOR = 'notes?:',\n DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\\\\.element\\\\\\s*?(.+?)$',\n DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\\\\.slide:\\\\\\s*?(\\\\\\S.+?)$';\n const SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__';\n /**\n * Retrieves the markdown contents of a slide section\n * element. Normalizes leading tabs/whitespace.\n */\n\n function getMarkdownFromSlide(section) {\n // look for a ');\n let leadingWs = text.match(/^\\n?(\\s*)/)[1].length,\n leadingTabs = text.match(/^\\n?(\\t*)/)[1].length;\n\n if (leadingTabs > 0) {\n text = text.replace(new RegExp('\\\\n?\\\\t{' + leadingTabs + '}', 'g'), '\\n');\n } else if (leadingWs > 1) {\n text = text.replace(new RegExp('\\\\n? {' + leadingWs + '}', 'g'), '\\n');\n }\n\n return text;\n }\n /**\n * Given a markdown slide section element, this will\n * return all arguments that aren't related to markdown\n * parsing. Used to forward any other user-defined arguments\n * to the output markdown slide.\n */\n\n\n function getForwardedAttributes(section) {\n let attributes = section.attributes;\n let result = [];\n\n for (let i = 0, len = attributes.length; i < len; i++) {\n let name = attributes[i].name,\n value = attributes[i].value; // disregard attributes that are used for markdown loading/parsing\n\n if (/data\\-(markdown|separator|vertical|notes)/gi.test(name)) continue;\n\n if (value) {\n result.push(name + '=\"' + value + '\"');\n } else {\n result.push(name);\n }\n }\n\n return result.join(' ');\n }\n /**\n * Inspects the given options and fills out default\n * values for what's not defined.\n */\n\n\n function getSlidifyOptions(options) {\n options = options || {};\n options.separator = options.separator || DEFAULT_SLIDE_SEPARATOR;\n options.notesSeparator = options.notesSeparator || DEFAULT_NOTES_SEPARATOR;\n options.attributes = options.attributes || '';\n return options;\n }\n /**\n * Helper function for constructing a markdown slide.\n */\n\n\n function createMarkdownSlide(content, options) {\n options = getSlidifyOptions(options);\n let notesMatch = content.split(new RegExp(options.notesSeparator, 'mgi'));\n\n if (notesMatch.length === 2) {\n content = notesMatch[0] + '';\n } // prevent script end tags in the content from interfering\n // with parsing\n\n\n content = content.replace(/<\\/script>/g, SCRIPT_END_PLACEHOLDER);\n return '';\n }\n /**\n * Parses a data string into multiple slides based\n * on the passed in separator arguments.\n */\n\n\n function slidify(markdown, options) {\n options = getSlidifyOptions(options);\n let separatorRegex = new RegExp(options.separator + (options.verticalSeparator ? '|' + options.verticalSeparator : ''), 'mg'),\n horizontalSeparatorRegex = new RegExp(options.separator);\n let matches,\n lastIndex = 0,\n isHorizontal,\n wasHorizontal = true,\n content,\n sectionStack = []; // iterate until all blocks between separators are stacked up\n\n while ((matches = separatorRegex.exec(markdown)) != null) {\n // notes = null;\n // determine direction (horizontal by default)\n isHorizontal = horizontalSeparatorRegex.test(matches[0]);\n\n if (!isHorizontal && wasHorizontal) {\n // create vertical stack\n sectionStack.push([]);\n } // pluck slide content from markdown input\n\n\n content = markdown.substring(lastIndex, matches.index);\n\n if (isHorizontal && wasHorizontal) {\n // add to horizontal stack\n sectionStack.push(content);\n } else {\n // add to vertical stack\n sectionStack[sectionStack.length - 1].push(content);\n }\n\n lastIndex = separatorRegex.lastIndex;\n wasHorizontal = isHorizontal;\n } // add the remaining slide\n\n\n (wasHorizontal ? sectionStack : sectionStack[sectionStack.length - 1]).push(markdown.substring(lastIndex));\n let markdownSections = ''; // flatten the hierarchical stack, and insert
tags\n\n for (let i = 0, len = sectionStack.length; i < len; i++) {\n // vertical\n if (sectionStack[i] instanceof Array) {\n markdownSections += '
';\n sectionStack[i].forEach(function (child) {\n markdownSections += '
' + createMarkdownSlide(child, options) + '
';\n });\n markdownSections += '
';\n } else {\n markdownSections += '
' + createMarkdownSlide(sectionStack[i], options) + '
';\n }\n }\n\n return markdownSections;\n }\n /**\n * Parses any current data-markdown slides, splits\n * multi-slide markdown into separate sections and\n * handles loading of external markdown.\n */\n\n\n function processSlides() {\n let sections = document.querySelectorAll('[data-markdown]'),\n section;\n\n for (let i = 0, len = sections.length; i < len; i++) {\n section = sections[i];\n\n if (section.getAttribute('data-markdown').length) {\n let xhr = new XMLHttpRequest(),\n url = section.getAttribute('data-markdown');\n let datacharset = section.getAttribute('data-charset'); // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes\n\n if (datacharset != null && datacharset != '') {\n xhr.overrideMimeType('text/html; charset=' + datacharset);\n }\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n // file protocol yields status code 0 (useful for local debug, mobile applications etc.)\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 0) {\n section.outerHTML = slidify(xhr.responseText, {\n separator: section.getAttribute('data-separator'),\n verticalSeparator: section.getAttribute('data-separator-vertical'),\n notesSeparator: section.getAttribute('data-separator-notes'),\n attributes: getForwardedAttributes(section)\n });\n } else {\n section.outerHTML = '
' + 'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' + 'Check your browser\\'s JavaScript console for more details.' + '

Remember that you need to serve the presentation HTML from a HTTP server.

' + '
';\n }\n }\n };\n\n xhr.open('GET', url, false);\n\n try {\n xhr.send();\n } catch (e) {\n alert('Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e);\n }\n } else if (section.getAttribute('data-separator') || section.getAttribute('data-separator-vertical') || section.getAttribute('data-separator-notes')) {\n section.outerHTML = slidify(getMarkdownFromSlide(section), {\n separator: section.getAttribute('data-separator'),\n verticalSeparator: section.getAttribute('data-separator-vertical'),\n notesSeparator: section.getAttribute('data-separator-notes'),\n attributes: getForwardedAttributes(section)\n });\n } else {\n section.innerHTML = createMarkdownSlide(getMarkdownFromSlide(section));\n }\n }\n }\n /**\n * Check if a node value has the attributes pattern.\n * If yes, extract it and add that value as one or several attributes\n * the the terget element.\n *\n * You need Cache Killer on Chrome to see the effect on any FOM transformation\n * directly on refresh (F5)\n * http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277\n */\n\n\n function addAttributeInElement(node, elementTarget, separator) {\n let mardownClassesInElementsRegex = new RegExp(separator, 'mg');\n let mardownClassRegex = new RegExp(\"([^\\\"= ]+?)=\\\"([^\\\"=]+?)\\\"\", 'mg');\n let nodeValue = node.nodeValue;\n let matches = mardownClassesInElementsRegex.exec(nodeValue);\n\n if (matches != null) {\n let classes = matches[1];\n nodeValue = nodeValue.substring(0, matches.index) + nodeValue.substring(mardownClassesInElementsRegex.lastIndex);\n node.nodeValue = nodeValue;\n let matchesClass;\n\n while ((matchesClass = mardownClassRegex.exec(classes)) != null) {\n elementTarget.setAttribute(matchesClass[1], matchesClass[2]);\n }\n\n return true;\n }\n\n return false;\n }\n /**\n * Add attributes to the parent element of a text node,\n * or the element of an attribute node.\n */\n\n\n function addAttributes(section, element, previousElement, separatorElementAttributes, separatorSectionAttributes) {\n if (element != null && element.childNodes != undefined && element.childNodes.length > 0) {\n let previousParentElement = element;\n\n for (let i = 0; i < element.childNodes.length; i++) {\n let childElement = element.childNodes[i];\n\n if (i > 0) {\n let j = i - 1;\n\n while (j >= 0) {\n let aPreviousChildElement = element.childNodes[j];\n\n if (typeof aPreviousChildElement.setAttribute == 'function' && aPreviousChildElement.tagName != 'BR') {\n previousParentElement = aPreviousChildElement;\n break;\n }\n\n j = j - 1;\n }\n }\n\n let parentSection = section;\n\n if (childElement.nodeName == 'section') {\n parentSection = childElement;\n previousParentElement = childElement;\n }\n\n if (typeof childElement.setAttribute == 'function' || childElement.nodeType == Node.COMMENT_NODE) {\n addAttributes(parentSection, childElement, previousParentElement, separatorElementAttributes, separatorSectionAttributes);\n }\n }\n }\n\n if (element.nodeType == Node.COMMENT_NODE) {\n if (addAttributeInElement(element, previousElement, separatorElementAttributes) == false) {\n addAttributeInElement(element, section, separatorSectionAttributes);\n }\n }\n }\n /**\n * Converts any current data-markdown slides in the\n * DOM to HTML.\n */\n\n\n function convertSlides() {\n let sections = document.querySelectorAll('[data-markdown]');\n\n for (let i = 0, len = sections.length; i < len; i++) {\n let section = sections[i]; // Only parse the same slide once\n\n if (!section.getAttribute('data-markdown-parsed')) {\n section.setAttribute('data-markdown-parsed', true);\n let notes = section.querySelector('aside.notes');\n let markdown = getMarkdownFromSlide(section);\n section.innerHTML = marked(markdown);\n addAttributes(section, section, null, section.getAttribute('data-element-attributes') || section.parentNode.getAttribute('data-element-attributes') || DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR, section.getAttribute('data-attributes') || section.parentNode.getAttribute('data-attributes') || DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR); // If there were notes, we need to re-add them after\n // having overwritten the section's HTML\n\n if (notes) {\n section.appendChild(notes);\n }\n }\n }\n } // API\n\n\n return {\n getMarkdownFromSlide: getMarkdownFromSlide,\n createMarkdownSlide: createMarkdownSlide,\n processSlides: processSlides,\n addAttributes: addAttributes,\n convertSlides: convertSlides\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvcmV2ZWFsL3BsdWdpbnMvbWFya2Rvd24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3V0aWwvcmV2ZWFsL3BsdWdpbnMvbWFya2Rvd24uanM/MjUxZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSByZXZlYWwuanMgbWFya2Rvd24gcGx1Z2luLiBIYW5kbGVzIHBhcnNpbmcgb2ZcbiAqIG1hcmtkb3duIGluc2lkZSBvZiBwcmVzZW50YXRpb25zIGFzIHdlbGwgYXMgbG9hZGluZ1xuICogb2YgZXh0ZXJuYWwgbWFya2Rvd24gZG9jdW1lbnRzLlxuICogUmVmZXJyZWQgZnJvbSBUaGUgcmV2ZWFsLmpzIG1hcmtkb3duIHBsdWdpbi5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9oYWtpbWVsL3JldmVhbC5qcy9ibG9iL21hc3Rlci9wbHVnaW4vbWFya2Rvd24vbWFya2Rvd24uanNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oIG1hcmtlZCApIHtcblxuICBjb25zdCBERUZBVUxUX1NMSURFX1NFUEFSQVRPUiA9ICdeXFxyP1xcbi0tLVxccj9cXG4kJyxcbiAgICBERUZBVUxUX05PVEVTX1NFUEFSQVRPUiA9ICdub3Rlcz86JyxcbiAgICBERUZBVUxUX0VMRU1FTlRfQVRUUklCVVRFU19TRVBBUkFUT1IgPSAnXFxcXFxcLmVsZW1lbnRcXFxcXFxzKj8oLis/KSQnLFxuICAgIERFRkFVTFRfU0xJREVfQVRUUklCVVRFU19TRVBBUkFUT1IgPSAnXFxcXFxcLnNsaWRlOlxcXFxcXHMqPyhcXFxcXFxTLis/KSQnO1xuXG4gIGNvbnN0IFNDUklQVF9FTkRfUExBQ0VIT0xERVIgPSAnX19TQ1JJUFRfRU5EX18nO1xuXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWFya2Rvd24gY29udGVudHMgb2YgYSBzbGlkZSBzZWN0aW9uXG4gICAqIGVsZW1lbnQuIE5vcm1hbGl6ZXMgbGVhZGluZyB0YWJzL3doaXRlc3BhY2UuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRNYXJrZG93bkZyb21TbGlkZSggc2VjdGlvbiApIHtcblxuICAgIC8vIGxvb2sgZm9yIGEgPHNjcmlwdD4gb3IgPHRleHRhcmVhIGRhdGEtdGVtcGxhdGU+IHdyYXBwZXJcbiAgICBsZXQgdGVtcGxhdGUgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS10ZW1wbGF0ZV0nICkgfHwgc2VjdGlvbi5xdWVyeVNlbGVjdG9yKCAnc2NyaXB0JyApO1xuXG4gICAgLy8gc3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlIHNvIGl0IGlzbid0IGV2YWx1YXRlZCBhcyBjb2RlXG4gICAgbGV0IHRleHQgPSAoIHRlbXBsYXRlIHx8IHNlY3Rpb24gKS50ZXh0Q29udGVudDtcblxuICAgIC8vIHJlc3RvcmUgc2NyaXB0IGVuZCB0YWdzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSggbmV3IFJlZ0V4cCggU0NSSVBUX0VORF9QTEFDRUhPTERFUiwgJ2cnICksICc8L3NjcmlwdD4nICk7XG5cbiAgICBsZXQgbGVhZGluZ1dzID0gdGV4dC5tYXRjaCggL15cXG4/KFxccyopLyApWzFdLmxlbmd0aCxcbiAgICAgIGxlYWRpbmdUYWJzID0gdGV4dC5tYXRjaCggL15cXG4/KFxcdCopLyApWzFdLmxlbmd0aDtcblxuICAgIGlmICggbGVhZGluZ1RhYnMgPiAwICkge1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSggbmV3IFJlZ0V4cCgnXFxcXG4/XFxcXHR7JyArIGxlYWRpbmdUYWJzICsgJ30nLCAnZycpLCAnXFxuJyApO1xuICAgIH1cbiAgICBlbHNlIGlmICggbGVhZGluZ1dzID4gMSApIHtcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIG5ldyBSZWdFeHAoJ1xcXFxuPyB7JyArIGxlYWRpbmdXcyArICd9JywgJ2cnKSwgJ1xcbicgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcblxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgbWFya2Rvd24gc2xpZGUgc2VjdGlvbiBlbGVtZW50LCB0aGlzIHdpbGxcbiAgICogcmV0dXJuIGFsbCBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgcmVsYXRlZCB0byBtYXJrZG93blxuICAgKiBwYXJzaW5nLiBVc2VkIHRvIGZvcndhcmQgYW55IG90aGVyIHVzZXItZGVmaW5lZCBhcmd1bWVudHNcbiAgICogdG8gdGhlIG91dHB1dCBtYXJrZG93biBzbGlkZS5cbiAgICovXG4gIGZ1bmN0aW9uIGdldEZvcndhcmRlZEF0dHJpYnV0ZXMoIHNlY3Rpb24gKSB7XG5cbiAgICBsZXQgYXR0cmlidXRlcyA9IHNlY3Rpb24uYXR0cmlidXRlcztcbiAgICBsZXQgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKCBsZXQgaSA9IDAsIGxlbiA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKysgKSB7XG4gICAgICBsZXQgbmFtZSA9IGF0dHJpYnV0ZXNbaV0ubmFtZSxcbiAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzW2ldLnZhbHVlO1xuXG4gICAgICAvLyBkaXNyZWdhcmQgYXR0cmlidXRlcyB0aGF0IGFyZSB1c2VkIGZvciBtYXJrZG93biBsb2FkaW5nL3BhcnNpbmdcbiAgICAgIGlmICggL2RhdGFcXC0obWFya2Rvd258c2VwYXJhdG9yfHZlcnRpY2FsfG5vdGVzKS9naS50ZXN0KCBuYW1lICkgKSBjb250aW51ZTtcblxuICAgICAgaWYgKCB2YWx1ZSApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goIG5hbWUgKyAnPVwiJyArIHZhbHVlICsgJ1wiJyApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCBuYW1lICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCAnICcgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3RzIHRoZSBnaXZlbiBvcHRpb25zIGFuZCBmaWxscyBvdXQgZGVmYXVsdFxuICAgKiB2YWx1ZXMgZm9yIHdoYXQncyBub3QgZGVmaW5lZC5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFNsaWRpZnlPcHRpb25zKCBvcHRpb25zICkge1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5zZXBhcmF0b3IgPSBvcHRpb25zLnNlcGFyYXRvciB8fCBERUZBVUxUX1NMSURFX1NFUEFSQVRPUjtcbiAgICBvcHRpb25zLm5vdGVzU2VwYXJhdG9yID0gb3B0aW9ucy5ub3Rlc1NlcGFyYXRvciB8fCBERUZBVUxUX05PVEVTX1NFUEFSQVRPUjtcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXMgfHwgJyc7XG5cbiAgICByZXR1cm4gb3B0aW9ucztcblxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY29uc3RydWN0aW5nIGEgbWFya2Rvd24gc2xpZGUuXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVNYXJrZG93blNsaWRlKCBjb250ZW50LCBvcHRpb25zICkge1xuXG4gICAgb3B0aW9ucyA9IGdldFNsaWRpZnlPcHRpb25zKCBvcHRpb25zICk7XG5cbiAgICBsZXQgbm90ZXNNYXRjaCA9IGNvbnRlbnQuc3BsaXQoIG5ldyBSZWdFeHAoIG9wdGlvbnMubm90ZXNTZXBhcmF0b3IsICdtZ2knICkgKTtcblxuICAgIGlmICggbm90ZXNNYXRjaC5sZW5ndGggPT09IDIgKSB7XG4gICAgICBjb250ZW50ID0gbm90ZXNNYXRjaFswXSArICc8YXNpZGUgY2xhc3M9XCJub3Rlc1wiPicgKyBtYXJrZWQobm90ZXNNYXRjaFsxXS50cmltKCkpICsgJzwvYXNpZGU+JztcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IHNjcmlwdCBlbmQgdGFncyBpbiB0aGUgY29udGVudCBmcm9tIGludGVyZmVyaW5nXG4gICAgLy8gd2l0aCBwYXJzaW5nXG4gICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSggLzxcXC9zY3JpcHQ+L2csIFNDUklQVF9FTkRfUExBQ0VIT0xERVIgKTtcblxuICAgIHJldHVybiAnPHNjcmlwdCB0eXBlPVwidGV4dC90ZW1wbGF0ZVwiPicgKyBjb250ZW50ICsgJzwvc2NyaXB0Pic7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBkYXRhIHN0cmluZyBpbnRvIG11bHRpcGxlIHNsaWRlcyBiYXNlZFxuICAgKiBvbiB0aGUgcGFzc2VkIGluIHNlcGFyYXRvciBhcmd1bWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiBzbGlkaWZ5KCBtYXJrZG93biwgb3B0aW9ucyApIHtcblxuICAgIG9wdGlvbnMgPSBnZXRTbGlkaWZ5T3B0aW9ucyggb3B0aW9ucyApO1xuXG4gICAgbGV0IHNlcGFyYXRvclJlZ2V4ID0gbmV3IFJlZ0V4cCggb3B0aW9ucy5zZXBhcmF0b3IgKyAoIG9wdGlvbnMudmVydGljYWxTZXBhcmF0b3IgPyAnfCcgKyBvcHRpb25zLnZlcnRpY2FsU2VwYXJhdG9yIDogJycgKSwgJ21nJyApLFxuICAgICAgaG9yaXpvbnRhbFNlcGFyYXRvclJlZ2V4ID0gbmV3IFJlZ0V4cCggb3B0aW9ucy5zZXBhcmF0b3IgKTtcblxuICAgIGxldCBtYXRjaGVzLFxuICAgICAgbGFzdEluZGV4ID0gMCxcbiAgICAgIGlzSG9yaXpvbnRhbCxcbiAgICAgIHdhc0hvcml6b250YWwgPSB0cnVlLFxuICAgICAgY29udGVudCxcbiAgICAgIHNlY3Rpb25TdGFjayA9IFtdO1xuXG4gICAgLy8gaXRlcmF0ZSB1bnRpbCBhbGwgYmxvY2tzIGJldHdlZW4gc2VwYXJhdG9ycyBhcmUgc3RhY2tlZCB1cFxuICAgIHdoaWxlICggKG1hdGNoZXMgPSBzZXBhcmF0b3JSZWdleC5leGVjKCBtYXJrZG93biApKSAhPSBudWxsICkge1xuICAgICAgLy8gbm90ZXMgPSBudWxsO1xuXG4gICAgICAvLyBkZXRlcm1pbmUgZGlyZWN0aW9uIChob3Jpem9udGFsIGJ5IGRlZmF1bHQpXG4gICAgICBpc0hvcml6b250YWwgPSBob3Jpem9udGFsU2VwYXJhdG9yUmVnZXgudGVzdCggbWF0Y2hlc1swXSApO1xuXG4gICAgICBpZiAoICFpc0hvcml6b250YWwgJiYgd2FzSG9yaXpvbnRhbCApIHtcbiAgICAgICAgLy8gY3JlYXRlIHZlcnRpY2FsIHN0YWNrXG4gICAgICAgIHNlY3Rpb25TdGFjay5wdXNoKCBbXSApO1xuICAgICAgfVxuXG4gICAgICAvLyBwbHVjayBzbGlkZSBjb250ZW50IGZyb20gbWFya2Rvd24gaW5wdXRcbiAgICAgIGNvbnRlbnQgPSBtYXJrZG93bi5zdWJzdHJpbmcoIGxhc3RJbmRleCwgbWF0Y2hlcy5pbmRleCApO1xuXG4gICAgICBpZiAoIGlzSG9yaXpvbnRhbCAmJiB3YXNIb3Jpem9udGFsICkge1xuICAgICAgICAvLyBhZGQgdG8gaG9yaXpvbnRhbCBzdGFja1xuICAgICAgICBzZWN0aW9uU3RhY2sucHVzaCggY29udGVudCApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGFkZCB0byB2ZXJ0aWNhbCBzdGFja1xuICAgICAgICBzZWN0aW9uU3RhY2tbc2VjdGlvblN0YWNrLmxlbmd0aC0xXS5wdXNoKCBjb250ZW50ICk7XG4gICAgICB9XG5cbiAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvclJlZ2V4Lmxhc3RJbmRleDtcbiAgICAgIHdhc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7XG4gICAgfVxuXG4gICAgLy8gYWRkIHRoZSByZW1haW5pbmcgc2xpZGVcbiAgICAoIHdhc0hvcml6b250YWwgPyBzZWN0aW9uU3RhY2sgOiBzZWN0aW9uU3RhY2tbc2VjdGlvblN0YWNrLmxlbmd0aC0xXSApLnB1c2goIG1hcmtkb3duLnN1YnN0cmluZyggbGFzdEluZGV4ICkgKTtcblxuICAgIGxldCBtYXJrZG93blNlY3Rpb25zID0gJyc7XG5cbiAgICAvLyBmbGF0dGVuIHRoZSBoaWVyYXJjaGljYWwgc3RhY2ssIGFuZCBpbnNlcnQgPHNlY3Rpb24gZGF0YS1tYXJrZG93bj4gdGFnc1xuICAgIGZvciAoIGxldCBpID0gMCwgbGVuID0gc2VjdGlvblN0YWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrICkge1xuICAgICAgLy8gdmVydGljYWxcbiAgICAgIGlmICggc2VjdGlvblN0YWNrW2ldIGluc3RhbmNlb2YgQXJyYXkgKSB7XG4gICAgICAgIG1hcmtkb3duU2VjdGlvbnMgKz0gJzxzZWN0aW9uICcrIG9wdGlvbnMuYXR0cmlidXRlcyArJz4nO1xuXG4gICAgICAgIHNlY3Rpb25TdGFja1tpXS5mb3JFYWNoKCBmdW5jdGlvbiggY2hpbGQgKSB7XG4gICAgICAgICAgbWFya2Rvd25TZWN0aW9ucyArPSAnPHNlY3Rpb24gZGF0YS1tYXJrZG93bj4nICsgY3JlYXRlTWFya2Rvd25TbGlkZSggY2hpbGQsIG9wdGlvbnMgKSArICc8L3NlY3Rpb24+JztcbiAgICAgICAgfSApO1xuXG4gICAgICAgIG1hcmtkb3duU2VjdGlvbnMgKz0gJzwvc2VjdGlvbj4nO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG1hcmtkb3duU2VjdGlvbnMgKz0gJzxzZWN0aW9uICcrIG9wdGlvbnMuYXR0cmlidXRlcyArJyBkYXRhLW1hcmtkb3duPicgKyBjcmVhdGVNYXJrZG93blNsaWRlKCBzZWN0aW9uU3RhY2tbaV0sIG9wdGlvbnMgKSArICc8L3NlY3Rpb24+JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Rvd25TZWN0aW9ucztcblxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhbnkgY3VycmVudCBkYXRhLW1hcmtkb3duIHNsaWRlcywgc3BsaXRzXG4gICAqIG11bHRpLXNsaWRlIG1hcmtkb3duIGludG8gc2VwYXJhdGUgc2VjdGlvbnMgYW5kXG4gICAqIGhhbmRsZXMgbG9hZGluZyBvZiBleHRlcm5hbCBtYXJrZG93bi5cbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NTbGlkZXMoKSB7XG5cbiAgICBsZXQgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnW2RhdGEtbWFya2Rvd25dJyksXG4gICAgICBzZWN0aW9uO1xuXG4gICAgZm9yICggbGV0IGkgPSAwLCBsZW4gPSBzZWN0aW9ucy5sZW5ndGg7IGkgPCBsZW47IGkrKyApIHtcblxuICAgICAgc2VjdGlvbiA9IHNlY3Rpb25zW2ldO1xuXG4gICAgICBpZiAoIHNlY3Rpb24uZ2V0QXR0cmlidXRlKCAnZGF0YS1tYXJrZG93bicgKS5sZW5ndGggKSB7XG5cbiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpLFxuICAgICAgICAgIHVybCA9IHNlY3Rpb24uZ2V0QXR0cmlidXRlKCAnZGF0YS1tYXJrZG93bicgKTtcblxuICAgICAgICBsZXQgZGF0YWNoYXJzZXQgPSBzZWN0aW9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtY2hhcnNldCcgKTtcblxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2VsZW1lbnQuZ2V0QXR0cmlidXRlI05vdGVzXG4gICAgICAgIGlmICggZGF0YWNoYXJzZXQgIT0gbnVsbCAmJiBkYXRhY2hhcnNldCAhPSAnJyApIHtcbiAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggJ3RleHQvaHRtbDsgY2hhcnNldD0nICsgZGF0YWNoYXJzZXQgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuICAgICAgICAgICAgLy8gZmlsZSBwcm90b2NvbCB5aWVsZHMgc3RhdHVzIGNvZGUgMCAodXNlZnVsIGZvciBsb2NhbCBkZWJ1ZywgbW9iaWxlIGFwcGxpY2F0aW9ucyBldGMuKVxuICAgICAgICAgICAgaWYgKCAoIHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDAgKSB8fCB4aHIuc3RhdHVzID09PSAwICkge1xuXG4gICAgICAgICAgICAgIHNlY3Rpb24ub3V0ZXJIVE1MID0gc2xpZGlmeSggeGhyLnJlc3BvbnNlVGV4dCwge1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvcjogc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvcicgKSxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNlcGFyYXRvcjogc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvci12ZXJ0aWNhbCcgKSxcbiAgICAgICAgICAgICAgICBub3Rlc1NlcGFyYXRvcjogc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvci1ub3RlcycgKSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBnZXRGb3J3YXJkZWRBdHRyaWJ1dGVzKCBzZWN0aW9uIClcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICAgIHNlY3Rpb24ub3V0ZXJIVE1MID0gJzxzZWN0aW9uIGRhdGEtc3RhdGU9XCJhbGVydFwiPicgK1xuICAgICAgICAgICAgICAgICdFUlJPUjogVGhlIGF0dGVtcHQgdG8gZmV0Y2ggJyArIHVybCArICcgZmFpbGVkIHdpdGggSFRUUCBzdGF0dXMgJyArIHhoci5zdGF0dXMgKyAnLicgK1xuICAgICAgICAgICAgICAgICdDaGVjayB5b3VyIGJyb3dzZXJcXCdzIEphdmFTY3JpcHQgY29uc29sZSBmb3IgbW9yZSBkZXRhaWxzLicgK1xuICAgICAgICAgICAgICAgICc8cD5SZW1lbWJlciB0aGF0IHlvdSBuZWVkIHRvIHNlcnZlIHRoZSBwcmVzZW50YXRpb24gSFRNTCBmcm9tIGEgSFRUUCBzZXJ2ZXIuPC9wPicgK1xuICAgICAgICAgICAgICAgICc8L3NlY3Rpb24+JztcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB4aHIub3BlbiggJ0dFVCcsIHVybCwgZmFsc2UgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKCBlICkge1xuICAgICAgICAgIGFsZXJ0KCAnRmFpbGVkIHRvIGdldCB0aGUgTWFya2Rvd24gZmlsZSAnICsgdXJsICsgJy4gTWFrZSBzdXJlIHRoYXQgdGhlIHByZXNlbnRhdGlvbiBhbmQgdGhlIGZpbGUgYXJlIHNlcnZlZCBieSBhIEhUVFAgc2VydmVyIGFuZCB0aGUgZmlsZSBjYW4gYmUgZm91bmQgdGhlcmUuICcgKyBlICk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIHNlY3Rpb24uZ2V0QXR0cmlidXRlKCAnZGF0YS1zZXBhcmF0b3InICkgfHwgc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvci12ZXJ0aWNhbCcgKSB8fCBzZWN0aW9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtc2VwYXJhdG9yLW5vdGVzJyApICkge1xuXG4gICAgICAgIHNlY3Rpb24ub3V0ZXJIVE1MID0gc2xpZGlmeSggZ2V0TWFya2Rvd25Gcm9tU2xpZGUoIHNlY3Rpb24gKSwge1xuICAgICAgICAgIHNlcGFyYXRvcjogc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvcicgKSxcbiAgICAgICAgICB2ZXJ0aWNhbFNlcGFyYXRvcjogc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvci12ZXJ0aWNhbCcgKSxcbiAgICAgICAgICBub3Rlc1NlcGFyYXRvcjogc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXNlcGFyYXRvci1ub3RlcycgKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBnZXRGb3J3YXJkZWRBdHRyaWJ1dGVzKCBzZWN0aW9uIClcbiAgICAgICAgfSk7XG5cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzZWN0aW9uLmlubmVySFRNTCA9IGNyZWF0ZU1hcmtkb3duU2xpZGUoIGdldE1hcmtkb3duRnJvbVNsaWRlKCBzZWN0aW9uICkgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG5vZGUgdmFsdWUgaGFzIHRoZSBhdHRyaWJ1dGVzIHBhdHRlcm4uXG4gICAqIElmIHllcywgZXh0cmFjdCBpdCBhbmQgYWRkIHRoYXQgdmFsdWUgYXMgb25lIG9yIHNldmVyYWwgYXR0cmlidXRlc1xuICAgKiB0aGUgdGhlIHRlcmdldCBlbGVtZW50LlxuICAgKlxuICAgKiBZb3UgbmVlZCBDYWNoZSBLaWxsZXIgb24gQ2hyb21lIHRvIHNlZSB0aGUgZWZmZWN0IG9uIGFueSBGT00gdHJhbnNmb3JtYXRpb25cbiAgICogZGlyZWN0bHkgb24gcmVmcmVzaCAoRjUpXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTY5MDI2OS9kaXNhYmxpbmctY2hyb21lLWNhY2hlLWZvci13ZWJzaXRlLWRldmVsb3BtZW50LzcwMDA4OTkjYW5zd2VyLTExNzg2Mjc3XG4gICAqL1xuICBmdW5jdGlvbiBhZGRBdHRyaWJ1dGVJbkVsZW1lbnQoIG5vZGUsIGVsZW1lbnRUYXJnZXQsIHNlcGFyYXRvciApIHtcblxuICAgIGxldCBtYXJkb3duQ2xhc3Nlc0luRWxlbWVudHNSZWdleCA9IG5ldyBSZWdFeHAoIHNlcGFyYXRvciwgJ21nJyApO1xuICAgIGxldCBtYXJkb3duQ2xhc3NSZWdleCA9IG5ldyBSZWdFeHAoIFwiKFteXFxcIj0gXSs/KT1cXFwiKFteXFxcIj1dKz8pXFxcIlwiLCAnbWcnICk7XG4gICAgbGV0IG5vZGVWYWx1ZSA9IG5vZGUubm9kZVZhbHVlO1xuICAgIGxldCBtYXRjaGVzID0gbWFyZG93bkNsYXNzZXNJbkVsZW1lbnRzUmVnZXguZXhlYyggbm9kZVZhbHVlICk7XG4gICAgaWYgKCBtYXRjaGVzICE9IG51bGwgKSB7XG5cbiAgICAgIGxldCBjbGFzc2VzID0gbWF0Y2hlc1sxXTtcbiAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoIDAsIG1hdGNoZXMuaW5kZXggKSArIG5vZGVWYWx1ZS5zdWJzdHJpbmcoIG1hcmRvd25DbGFzc2VzSW5FbGVtZW50c1JlZ2V4Lmxhc3RJbmRleCApO1xuICAgICAgbm9kZS5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gICAgICBsZXQgbWF0Y2hlc0NsYXNzO1xuICAgICAgd2hpbGUgKCAobWF0Y2hlc0NsYXNzID0gbWFyZG93bkNsYXNzUmVnZXguZXhlYyggY2xhc3NlcyApKSAhPSBudWxsICkge1xuICAgICAgICBlbGVtZW50VGFyZ2V0LnNldEF0dHJpYnV0ZSggbWF0Y2hlc0NsYXNzWzFdLCBtYXRjaGVzQ2xhc3NbMl0gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGF0dHJpYnV0ZXMgdG8gdGhlIHBhcmVudCBlbGVtZW50IG9mIGEgdGV4dCBub2RlLFxuICAgKiBvciB0aGUgZWxlbWVudCBvZiBhbiBhdHRyaWJ1dGUgbm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZXMoIHNlY3Rpb24sIGVsZW1lbnQsIHByZXZpb3VzRWxlbWVudCwgc2VwYXJhdG9yRWxlbWVudEF0dHJpYnV0ZXMsIHNlcGFyYXRvclNlY3Rpb25BdHRyaWJ1dGVzICkge1xuXG4gICAgaWYgKCBlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudC5jaGlsZE5vZGVzICE9IHVuZGVmaW5lZCAmJiBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCApIHtcbiAgICAgIGxldCBwcmV2aW91c1BhcmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICBsZXQgY2hpbGRFbGVtZW50ID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgICAgICBpZiAoIGkgPiAwICkge1xuICAgICAgICAgIGxldCBqID0gaSAtIDE7XG4gICAgICAgICAgd2hpbGUgKCBqID49IDAgKSB7XG4gICAgICAgICAgICBsZXQgYVByZXZpb3VzQ2hpbGRFbGVtZW50ID0gZWxlbWVudC5jaGlsZE5vZGVzW2pdO1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgYVByZXZpb3VzQ2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSA9PSAnZnVuY3Rpb24nICYmIGFQcmV2aW91c0NoaWxkRWxlbWVudC50YWdOYW1lICE9ICdCUicgKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50RWxlbWVudCA9IGFQcmV2aW91c0NoaWxkRWxlbWVudDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqID0gaiAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJlbnRTZWN0aW9uID0gc2VjdGlvbjtcbiAgICAgICAgaWYgKCBjaGlsZEVsZW1lbnQubm9kZU5hbWUgPT0gICdzZWN0aW9uJyApIHtcbiAgICAgICAgICBwYXJlbnRTZWN0aW9uID0gY2hpbGRFbGVtZW50IDtcbiAgICAgICAgICBwcmV2aW91c1BhcmVudEVsZW1lbnQgPSBjaGlsZEVsZW1lbnQgO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZW9mIGNoaWxkRWxlbWVudC5zZXRBdHRyaWJ1dGUgPT0gJ2Z1bmN0aW9uJyB8fCBjaGlsZEVsZW1lbnQubm9kZVR5cGUgPT0gTm9kZS5DT01NRU5UX05PREUgKSB7XG4gICAgICAgICAgYWRkQXR0cmlidXRlcyggcGFyZW50U2VjdGlvbiwgY2hpbGRFbGVtZW50LCBwcmV2aW91c1BhcmVudEVsZW1lbnQsIHNlcGFyYXRvckVsZW1lbnRBdHRyaWJ1dGVzLCBzZXBhcmF0b3JTZWN0aW9uQXR0cmlidXRlcyApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCBlbGVtZW50Lm5vZGVUeXBlID09IE5vZGUuQ09NTUVOVF9OT0RFICkge1xuICAgICAgaWYgKCBhZGRBdHRyaWJ1dGVJbkVsZW1lbnQoIGVsZW1lbnQsIHByZXZpb3VzRWxlbWVudCwgc2VwYXJhdG9yRWxlbWVudEF0dHJpYnV0ZXMgKSA9PSBmYWxzZSApIHtcbiAgICAgICAgYWRkQXR0cmlidXRlSW5FbGVtZW50KCBlbGVtZW50LCBzZWN0aW9uLCBzZXBhcmF0b3JTZWN0aW9uQXR0cmlidXRlcyApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbnkgY3VycmVudCBkYXRhLW1hcmtkb3duIHNsaWRlcyBpbiB0aGVcbiAgICogRE9NIHRvIEhUTUwuXG4gICAqL1xuICBmdW5jdGlvbiBjb252ZXJ0U2xpZGVzKCkge1xuXG4gICAgbGV0IHNlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLW1hcmtkb3duXScpO1xuXG4gICAgZm9yICggbGV0IGkgPSAwLCBsZW4gPSBzZWN0aW9ucy5sZW5ndGg7IGkgPCBsZW47IGkrKyApIHtcblxuICAgICAgbGV0IHNlY3Rpb24gPSBzZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBwYXJzZSB0aGUgc2FtZSBzbGlkZSBvbmNlXG4gICAgICBpZiAoICFzZWN0aW9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtbWFya2Rvd24tcGFyc2VkJyApICkge1xuXG4gICAgICAgIHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1tYXJrZG93bi1wYXJzZWQnLCB0cnVlICk7XG5cbiAgICAgICAgbGV0IG5vdGVzID0gc2VjdGlvbi5xdWVyeVNlbGVjdG9yKCAnYXNpZGUubm90ZXMnICk7XG4gICAgICAgIGxldCBtYXJrZG93biA9IGdldE1hcmtkb3duRnJvbVNsaWRlKCBzZWN0aW9uICk7XG5cbiAgICAgICAgc2VjdGlvbi5pbm5lckhUTUwgPSBtYXJrZWQoIG1hcmtkb3duICk7XG4gICAgICAgIGFkZEF0dHJpYnV0ZXMoICAgc2VjdGlvbiwgc2VjdGlvbiwgbnVsbCwgc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLWVsZW1lbnQtYXR0cmlidXRlcycgKSB8fFxuICAgICAgICAgICAgICAgIHNlY3Rpb24ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoICdkYXRhLWVsZW1lbnQtYXR0cmlidXRlcycgKSB8fFxuICAgICAgICAgICAgICAgIERFRkFVTFRfRUxFTUVOVF9BVFRSSUJVVEVTX1NFUEFSQVRPUixcbiAgICAgICAgc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLWF0dHJpYnV0ZXMnICkgfHxcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCAnZGF0YS1hdHRyaWJ1dGVzJyApIHx8XG4gICAgICAgICAgICAgICAgREVGQVVMVF9TTElERV9BVFRSSUJVVEVTX1NFUEFSQVRPUik7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBub3Rlcywgd2UgbmVlZCB0byByZS1hZGQgdGhlbSBhZnRlclxuICAgICAgICAvLyBoYXZpbmcgb3ZlcndyaXR0ZW4gdGhlIHNlY3Rpb24ncyBIVE1MXG4gICAgICAgIGlmICggbm90ZXMgKSB7XG4gICAgICAgICAgc2VjdGlvbi5hcHBlbmRDaGlsZCggbm90ZXMgKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgfVxuXG4gIC8vIEFQSVxuICByZXR1cm4ge1xuICAgIGdldE1hcmtkb3duRnJvbVNsaWRlOiBnZXRNYXJrZG93bkZyb21TbGlkZSxcbiAgICBjcmVhdGVNYXJrZG93blNsaWRlOiBjcmVhdGVNYXJrZG93blNsaWRlLFxuICAgIHByb2Nlc3NTbGlkZXM6IHByb2Nlc3NTbGlkZXMsXG4gICAgYWRkQXR0cmlidXRlczogYWRkQXR0cmlidXRlcyxcbiAgICBjb252ZXJ0U2xpZGVzOiBjb252ZXJ0U2xpZGVzXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7QUFPQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFHQTs7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOzs7OztBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUVBO0FBRUE7Ozs7OztBQUlBO0FBRUE7QUFFQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7Ozs7QUFLQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFHQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7Ozs7Ozs7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/util/reveal/plugins/markdown.js\n"); /***/ }) }]);