0.bundle.js 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. (window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
  2. /***/ "./node_modules/reveal.js/lib/js/classList.js":
  3. /*!****************************************************!*\
  4. !*** ./node_modules/reveal.js/lib/js/classList.js ***!
  5. \****************************************************/
  6. /*! no static exports found */
  7. /***/ (function(module, exports) {
  8. 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<o;p++){if(p in this&&this[p]===q){return p}}return -1},n=function(o,p){this.name=o;this.code=DOMException[o];this.message=p},g=function(p,o){if(o===\"\"){throw new n(\"SYNTAX_ERR\",\"An invalid or illegal string was specified\")}if(/\\s/.test(o)){throw new n(\"INVALID_CHARACTER_ERR\",\"String contains an invalid character\")}return c.call(p,o)},d=function(s){var r=k.call(s.className),q=r?r.split(/\\s+/):[],p=0,o=q.length;for(;p<o;p++){this.push(q[p])}this._updateClassName=function(){s.className=this.toString()}},e=d[f]=[],i=function(){return new d(this)};n[f]=Error[f];e.item=function(o){return this[o]||null};e.contains=function(o){o+=\"\";return g(this,o)!==-1};e.add=function(o){o+=\"\";if(g(this,o)===-1){this.push(o);this._updateClassName()}};e.remove=function(p){p+=\"\";var o=g(this,p);if(o!==-1){this.splice(o,1);this._updateClassName()}};e.toggle=function(o){o+=\"\";if(g(this,o)===-1){this.add(o)}else{this.remove(o)}};e.toString=function(){return this.join(\" \")};if(b.defineProperty){var l={get:i,enumerable:true,configurable:true};try{b.defineProperty(m,a,l)}catch(h){if(h.number===-2146823252){l.enumerable=false;b.defineProperty(m,a,l)}}}else{if(b[f].__defineGetter__){m.__defineGetter__(a,i)}}}(self))};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmV2ZWFsLmpzL2xpYi9qcy9jbGFzc0xpc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmV2ZWFsLmpzL2xpYi9qcy9jbGFzc0xpc3QuanM/MWIzMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgQHNvdXJjZSBodHRwOi8vcHVybC5lbGlncmV5LmNvbS9naXRodWIvY2xhc3NMaXN0LmpzL2Jsb2IvbWFzdGVyL2NsYXNzTGlzdC5qcyovXG5pZih0eXBlb2YgZG9jdW1lbnQhPT1cInVuZGVmaW5lZFwiJiYhKFwiY2xhc3NMaXN0XCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpKXsoZnVuY3Rpb24oail7dmFyIGE9XCJjbGFzc0xpc3RcIixmPVwicHJvdG90eXBlXCIsbT0oai5IVE1MRWxlbWVudHx8ai5FbGVtZW50KVtmXSxiPU9iamVjdCxrPVN0cmluZ1tmXS50cmltfHxmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9LGM9QXJyYXlbZl0uaW5kZXhPZnx8ZnVuY3Rpb24ocSl7dmFyIHA9MCxvPXRoaXMubGVuZ3RoO2Zvcig7cDxvO3ArKyl7aWYocCBpbiB0aGlzJiZ0aGlzW3BdPT09cSl7cmV0dXJuIHB9fXJldHVybiAtMX0sbj1mdW5jdGlvbihvLHApe3RoaXMubmFtZT1vO3RoaXMuY29kZT1ET01FeGNlcHRpb25bb107dGhpcy5tZXNzYWdlPXB9LGc9ZnVuY3Rpb24ocCxvKXtpZihvPT09XCJcIil7dGhyb3cgbmV3IG4oXCJTWU5UQVhfRVJSXCIsXCJBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIHdhcyBzcGVjaWZpZWRcIil9aWYoL1xccy8udGVzdChvKSl7dGhyb3cgbmV3IG4oXCJJTlZBTElEX0NIQVJBQ1RFUl9FUlJcIixcIlN0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlclwiKX1yZXR1cm4gYy5jYWxsKHAsbyl9LGQ9ZnVuY3Rpb24ocyl7dmFyIHI9ay5jYWxsKHMuY2xhc3NOYW1lKSxxPXI/ci5zcGxpdCgvXFxzKy8pOltdLHA9MCxvPXEubGVuZ3RoO2Zvcig7cDxvO3ArKyl7dGhpcy5wdXNoKHFbcF0pfXRoaXMuX3VwZGF0ZUNsYXNzTmFtZT1mdW5jdGlvbigpe3MuY2xhc3NOYW1lPXRoaXMudG9TdHJpbmcoKX19LGU9ZFtmXT1bXSxpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkKHRoaXMpfTtuW2ZdPUVycm9yW2ZdO2UuaXRlbT1mdW5jdGlvbihvKXtyZXR1cm4gdGhpc1tvXXx8bnVsbH07ZS5jb250YWlucz1mdW5jdGlvbihvKXtvKz1cIlwiO3JldHVybiBnKHRoaXMsbykhPT0tMX07ZS5hZGQ9ZnVuY3Rpb24obyl7bys9XCJcIjtpZihnKHRoaXMsbyk9PT0tMSl7dGhpcy5wdXNoKG8pO3RoaXMuX3VwZGF0ZUNsYXNzTmFtZSgpfX07ZS5yZW1vdmU9ZnVuY3Rpb24ocCl7cCs9XCJcIjt2YXIgbz1nKHRoaXMscCk7aWYobyE9PS0xKXt0aGlzLnNwbGljZShvLDEpO3RoaXMuX3VwZGF0ZUNsYXNzTmFtZSgpfX07ZS50b2dnbGU9ZnVuY3Rpb24obyl7bys9XCJcIjtpZihnKHRoaXMsbyk9PT0tMSl7dGhpcy5hZGQobyl9ZWxzZXt0aGlzLnJlbW92ZShvKX19O2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qb2luKFwiIFwiKX07aWYoYi5kZWZpbmVQcm9wZXJ0eSl7dmFyIGw9e2dldDppLGVudW1lcmFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX07dHJ5e2IuZGVmaW5lUHJvcGVydHkobSxhLGwpfWNhdGNoKGgpe2lmKGgubnVtYmVyPT09LTIxNDY4MjMyNTIpe2wuZW51bWVyYWJsZT1mYWxzZTtiLmRlZmluZVByb3BlcnR5KG0sYSxsKX19fWVsc2V7aWYoYltmXS5fX2RlZmluZUdldHRlcl9fKXttLl9fZGVmaW5lR2V0dGVyX18oYSxpKX19fShzZWxmKSl9OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/reveal.js/lib/js/classList.js\n");
  9. /***/ }),
  10. /***/ "./node_modules/reveal.js/plugin/notes/notes.js":
  11. /*!******************************************************!*\
  12. !*** ./node_modules/reveal.js/plugin/notes/notes.js ***!
  13. \******************************************************/
  14. /*! no static exports found */
  15. /***/ (function(module, exports) {
  16. eval("/**\n * Handles opening of and synchronization with the reveal.js\n * notes window.\n *\n * Handshake process:\n * 1. This window posts 'connect' to notes window\n * - Includes URL of presentation to show\n * 2. Notes window responds with 'connected' when it is available\n * 3. This window proceeds to send the current presentation state\n * to the notes window\n */\nvar RevealNotes = (function() {\n\n\tfunction openNotes( notesFilePath ) {\n\n\t\tif( !notesFilePath ) {\n\t\t\tvar jsFileLocation = document.querySelector('script[src$=\"notes.js\"]').src; // this js file path\n\t\t\tjsFileLocation = jsFileLocation.replace(/notes\\.js(\\?.*)?$/, ''); // the js folder path\n\t\t\tnotesFilePath = jsFileLocation + 'notes.html';\n\t\t}\n\n\t\tvar notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' );\n\n\t\t// Allow popup window access to Reveal API\n\t\tnotesPopup.Reveal = this.Reveal;\n\n\t\t/**\n\t\t * Connect to the notes window through a postmessage handshake.\n\t\t * Using postmessage enables us to work in situations where the\n\t\t * origins differ, such as a presentation being opened from the\n\t\t * file system.\n\t\t */\n\t\tfunction connect() {\n\t\t\t// Keep trying to connect until we get a 'connected' message back\n\t\t\tvar connectInterval = setInterval( function() {\n\t\t\t\tnotesPopup.postMessage( JSON.stringify( {\n\t\t\t\t\tnamespace: 'reveal-notes',\n\t\t\t\t\ttype: 'connect',\n\t\t\t\t\turl: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search,\n\t\t\t\t\tstate: Reveal.getState()\n\t\t\t\t} ), '*' );\n\t\t\t}, 500 );\n\n\t\t\twindow.addEventListener( 'message', function( event ) {\n\t\t\t\tvar data = JSON.parse( event.data );\n\t\t\t\tif( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) {\n\t\t\t\t\tclearInterval( connectInterval );\n\t\t\t\t\tonConnected();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Posts the current slide data to the notes window\n\t\t */\n\t\tfunction post( event ) {\n\n\t\t\tvar slideElement = Reveal.getCurrentSlide(),\n\t\t\t\tnotesElement = slideElement.querySelector( 'aside.notes' ),\n\t\t\t\tfragmentElement = slideElement.querySelector( '.current-fragment' );\n\n\t\t\tvar messageData = {\n\t\t\t\tnamespace: 'reveal-notes',\n\t\t\t\ttype: 'state',\n\t\t\t\tnotes: '',\n\t\t\t\tmarkdown: false,\n\t\t\t\twhitespace: 'normal',\n\t\t\t\tstate: Reveal.getState()\n\t\t\t};\n\n\t\t\t// Look for notes defined in a slide attribute\n\t\t\tif( slideElement.hasAttribute( 'data-notes' ) ) {\n\t\t\t\tmessageData.notes = slideElement.getAttribute( 'data-notes' );\n\t\t\t\tmessageData.whitespace = 'pre-wrap';\n\t\t\t}\n\n\t\t\t// Look for notes defined in a fragment\n\t\t\tif( fragmentElement ) {\n\t\t\t\tvar fragmentNotes = fragmentElement.querySelector( 'aside.notes' );\n\t\t\t\tif( fragmentNotes ) {\n\t\t\t\t\tnotesElement = fragmentNotes;\n\t\t\t\t}\n\t\t\t\telse if( fragmentElement.hasAttribute( 'data-notes' ) ) {\n\t\t\t\t\tmessageData.notes = fragmentElement.getAttribute( 'data-notes' );\n\t\t\t\t\tmessageData.whitespace = 'pre-wrap';\n\n\t\t\t\t\t// In case there are slide notes\n\t\t\t\t\tnotesElement = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for notes defined in an aside element\n\t\t\tif( notesElement ) {\n\t\t\t\tmessageData.notes = notesElement.innerHTML;\n\t\t\t\tmessageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';\n\t\t\t}\n\n\t\t\tnotesPopup.postMessage( JSON.stringify( messageData ), '*' );\n\n\t\t}\n\n\t\t/**\n\t\t * Called once we have established a connection to the notes\n\t\t * window.\n\t\t */\n\t\tfunction onConnected() {\n\n\t\t\t// Monitor events that trigger a change in state\n\t\t\tReveal.addEventListener( 'slidechanged', post );\n\t\t\tReveal.addEventListener( 'fragmentshown', post );\n\t\t\tReveal.addEventListener( 'fragmenthidden', post );\n\t\t\tReveal.addEventListener( 'overviewhidden', post );\n\t\t\tReveal.addEventListener( 'overviewshown', post );\n\t\t\tReveal.addEventListener( 'paused', post );\n\t\t\tReveal.addEventListener( 'resumed', post );\n\n\t\t\t// Post the initial state\n\t\t\tpost();\n\n\t\t}\n\n\t\tconnect();\n\n\t}\n\n\tif( !/receiver/i.test( window.location.search ) ) {\n\n\t\t// If the there's a 'notes' query set, open directly\n\t\tif( window.location.search.match( /(\\?|\\&)notes/gi ) !== null ) {\n\t\t\topenNotes();\n\t\t}\n\n\t\t// Open the notes when the 's' key is hit\n\t\tdocument.addEventListener( 'keydown', function( event ) {\n\t\t\t// Disregard the event if the target is editable or a\n\t\t\t// modifier is present\n\t\t\tif ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;\n\n\t\t\t// Disregard the event if keyboard is disabled\n\t\t\tif ( Reveal.getConfig().keyboard === false ) return;\n\n\t\t\tif( event.keyCode === 83 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\topenNotes();\n\t\t\t}\n\t\t}, false );\n\n\t\t// Show our keyboard shortcut in the reveal.js help overlay\n\t\tif( window.Reveal ) Reveal.registerKeyboardShortcut( 'S', 'Speaker notes view' );\n\n\t}\n\n\treturn { open: openNotes };\n\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmV2ZWFsLmpzL3BsdWdpbi9ub3Rlcy9ub3Rlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZXZlYWwuanMvcGx1Z2luL25vdGVzL25vdGVzLmpzP2RmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGVzIG9wZW5pbmcgb2YgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSByZXZlYWwuanNcbiAqIG5vdGVzIHdpbmRvdy5cbiAqXG4gKiBIYW5kc2hha2UgcHJvY2VzczpcbiAqIDEuIFRoaXMgd2luZG93IHBvc3RzICdjb25uZWN0JyB0byBub3RlcyB3aW5kb3dcbiAqICAgIC0gSW5jbHVkZXMgVVJMIG9mIHByZXNlbnRhdGlvbiB0byBzaG93XG4gKiAyLiBOb3RlcyB3aW5kb3cgcmVzcG9uZHMgd2l0aCAnY29ubmVjdGVkJyB3aGVuIGl0IGlzIGF2YWlsYWJsZVxuICogMy4gVGhpcyB3aW5kb3cgcHJvY2VlZHMgdG8gc2VuZCB0aGUgY3VycmVudCBwcmVzZW50YXRpb24gc3RhdGVcbiAqICAgIHRvIHRoZSBub3RlcyB3aW5kb3dcbiAqL1xudmFyIFJldmVhbE5vdGVzID0gKGZ1bmN0aW9uKCkge1xuXG5cdGZ1bmN0aW9uIG9wZW5Ob3Rlcyggbm90ZXNGaWxlUGF0aCApIHtcblxuXHRcdGlmKCAhbm90ZXNGaWxlUGF0aCApIHtcblx0XHRcdHZhciBqc0ZpbGVMb2NhdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdFtzcmMkPVwibm90ZXMuanNcIl0nKS5zcmM7ICAvLyB0aGlzIGpzIGZpbGUgcGF0aFxuXHRcdFx0anNGaWxlTG9jYXRpb24gPSBqc0ZpbGVMb2NhdGlvbi5yZXBsYWNlKC9ub3Rlc1xcLmpzKFxcPy4qKT8kLywgJycpOyAgIC8vIHRoZSBqcyBmb2xkZXIgcGF0aFxuXHRcdFx0bm90ZXNGaWxlUGF0aCA9IGpzRmlsZUxvY2F0aW9uICsgJ25vdGVzLmh0bWwnO1xuXHRcdH1cblxuXHRcdHZhciBub3Rlc1BvcHVwID0gd2luZG93Lm9wZW4oIG5vdGVzRmlsZVBhdGgsICdyZXZlYWwuanMgLSBOb3RlcycsICd3aWR0aD0xMTAwLGhlaWdodD03MDAnICk7XG5cblx0XHQvLyBBbGxvdyBwb3B1cCB3aW5kb3cgYWNjZXNzIHRvIFJldmVhbCBBUElcblx0XHRub3Rlc1BvcHVwLlJldmVhbCA9IHRoaXMuUmV2ZWFsO1xuXG5cdFx0LyoqXG5cdFx0ICogQ29ubmVjdCB0byB0aGUgbm90ZXMgd2luZG93IHRocm91Z2ggYSBwb3N0bWVzc2FnZSBoYW5kc2hha2UuXG5cdFx0ICogVXNpbmcgcG9zdG1lc3NhZ2UgZW5hYmxlcyB1cyB0byB3b3JrIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlXG5cdFx0ICogb3JpZ2lucyBkaWZmZXIsIHN1Y2ggYXMgYSBwcmVzZW50YXRpb24gYmVpbmcgb3BlbmVkIGZyb20gdGhlXG5cdFx0ICogZmlsZSBzeXN0ZW0uXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gY29ubmVjdCgpIHtcblx0XHRcdC8vIEtlZXAgdHJ5aW5nIHRvIGNvbm5lY3QgdW50aWwgd2UgZ2V0IGEgJ2Nvbm5lY3RlZCcgbWVzc2FnZSBiYWNrXG5cdFx0XHR2YXIgY29ubmVjdEludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRub3Rlc1BvcHVwLnBvc3RNZXNzYWdlKCBKU09OLnN0cmluZ2lmeSgge1xuXHRcdFx0XHRcdG5hbWVzcGFjZTogJ3JldmVhbC1ub3RlcycsXG5cdFx0XHRcdFx0dHlwZTogJ2Nvbm5lY3QnLFxuXHRcdFx0XHRcdHVybDogd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCxcblx0XHRcdFx0XHRzdGF0ZTogUmV2ZWFsLmdldFN0YXRlKClcblx0XHRcdFx0fSApLCAnKicgKTtcblx0XHRcdH0sIDUwMCApO1xuXG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ21lc3NhZ2UnLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZSggZXZlbnQuZGF0YSApO1xuXHRcdFx0XHRpZiggZGF0YSAmJiBkYXRhLm5hbWVzcGFjZSA9PT0gJ3JldmVhbC1ub3RlcycgJiYgZGF0YS50eXBlID09PSAnY29ubmVjdGVkJyApIHtcblx0XHRcdFx0XHRjbGVhckludGVydmFsKCBjb25uZWN0SW50ZXJ2YWwgKTtcblx0XHRcdFx0XHRvbkNvbm5lY3RlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUG9zdHMgdGhlIGN1cnJlbnQgc2xpZGUgZGF0YSB0byB0aGUgbm90ZXMgd2luZG93XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gcG9zdCggZXZlbnQgKSB7XG5cblx0XHRcdHZhciBzbGlkZUVsZW1lbnQgPSBSZXZlYWwuZ2V0Q3VycmVudFNsaWRlKCksXG5cdFx0XHRcdG5vdGVzRWxlbWVudCA9IHNsaWRlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCAnYXNpZGUubm90ZXMnICksXG5cdFx0XHRcdGZyYWdtZW50RWxlbWVudCA9IHNsaWRlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCAnLmN1cnJlbnQtZnJhZ21lbnQnICk7XG5cblx0XHRcdHZhciBtZXNzYWdlRGF0YSA9IHtcblx0XHRcdFx0bmFtZXNwYWNlOiAncmV2ZWFsLW5vdGVzJyxcblx0XHRcdFx0dHlwZTogJ3N0YXRlJyxcblx0XHRcdFx0bm90ZXM6ICcnLFxuXHRcdFx0XHRtYXJrZG93bjogZmFsc2UsXG5cdFx0XHRcdHdoaXRlc3BhY2U6ICdub3JtYWwnLFxuXHRcdFx0XHRzdGF0ZTogUmV2ZWFsLmdldFN0YXRlKClcblx0XHRcdH07XG5cblx0XHRcdC8vIExvb2sgZm9yIG5vdGVzIGRlZmluZWQgaW4gYSBzbGlkZSBhdHRyaWJ1dGVcblx0XHRcdGlmKCBzbGlkZUVsZW1lbnQuaGFzQXR0cmlidXRlKCAnZGF0YS1ub3RlcycgKSApIHtcblx0XHRcdFx0bWVzc2FnZURhdGEubm90ZXMgPSBzbGlkZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCAnZGF0YS1ub3RlcycgKTtcblx0XHRcdFx0bWVzc2FnZURhdGEud2hpdGVzcGFjZSA9ICdwcmUtd3JhcCc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIG5vdGVzIGRlZmluZWQgaW4gYSBmcmFnbWVudFxuXHRcdFx0aWYoIGZyYWdtZW50RWxlbWVudCApIHtcblx0XHRcdFx0dmFyIGZyYWdtZW50Tm90ZXMgPSBmcmFnbWVudEVsZW1lbnQucXVlcnlTZWxlY3RvciggJ2FzaWRlLm5vdGVzJyApO1xuXHRcdFx0XHRpZiggZnJhZ21lbnROb3RlcyApIHtcblx0XHRcdFx0XHRub3Rlc0VsZW1lbnQgPSBmcmFnbWVudE5vdGVzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYoIGZyYWdtZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoICdkYXRhLW5vdGVzJyApICkge1xuXHRcdFx0XHRcdG1lc3NhZ2VEYXRhLm5vdGVzID0gZnJhZ21lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSggJ2RhdGEtbm90ZXMnICk7XG5cdFx0XHRcdFx0bWVzc2FnZURhdGEud2hpdGVzcGFjZSA9ICdwcmUtd3JhcCc7XG5cblx0XHRcdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGFyZSBzbGlkZSBub3Rlc1xuXHRcdFx0XHRcdG5vdGVzRWxlbWVudCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3Igbm90ZXMgZGVmaW5lZCBpbiBhbiBhc2lkZSBlbGVtZW50XG5cdFx0XHRpZiggbm90ZXNFbGVtZW50ICkge1xuXHRcdFx0XHRtZXNzYWdlRGF0YS5ub3RlcyA9IG5vdGVzRWxlbWVudC5pbm5lckhUTUw7XG5cdFx0XHRcdG1lc3NhZ2VEYXRhLm1hcmtkb3duID0gdHlwZW9mIG5vdGVzRWxlbWVudC5nZXRBdHRyaWJ1dGUoICdkYXRhLW1hcmtkb3duJyApID09PSAnc3RyaW5nJztcblx0XHRcdH1cblxuXHRcdFx0bm90ZXNQb3B1cC5wb3N0TWVzc2FnZSggSlNPTi5zdHJpbmdpZnkoIG1lc3NhZ2VEYXRhICksICcqJyApO1xuXG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQ2FsbGVkIG9uY2Ugd2UgaGF2ZSBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24gdG8gdGhlIG5vdGVzXG5cdFx0ICogd2luZG93LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIG9uQ29ubmVjdGVkKCkge1xuXG5cdFx0XHQvLyBNb25pdG9yIGV2ZW50cyB0aGF0IHRyaWdnZXIgYSBjaGFuZ2UgaW4gc3RhdGVcblx0XHRcdFJldmVhbC5hZGRFdmVudExpc3RlbmVyKCAnc2xpZGVjaGFuZ2VkJywgcG9zdCApO1xuXHRcdFx0UmV2ZWFsLmFkZEV2ZW50TGlzdGVuZXIoICdmcmFnbWVudHNob3duJywgcG9zdCApO1xuXHRcdFx0UmV2ZWFsLmFkZEV2ZW50TGlzdGVuZXIoICdmcmFnbWVudGhpZGRlbicsIHBvc3QgKTtcblx0XHRcdFJldmVhbC5hZGRFdmVudExpc3RlbmVyKCAnb3ZlcnZpZXdoaWRkZW4nLCBwb3N0ICk7XG5cdFx0XHRSZXZlYWwuYWRkRXZlbnRMaXN0ZW5lciggJ292ZXJ2aWV3c2hvd24nLCBwb3N0ICk7XG5cdFx0XHRSZXZlYWwuYWRkRXZlbnRMaXN0ZW5lciggJ3BhdXNlZCcsIHBvc3QgKTtcblx0XHRcdFJldmVhbC5hZGRFdmVudExpc3RlbmVyKCAncmVzdW1lZCcsIHBvc3QgKTtcblxuXHRcdFx0Ly8gUG9zdCB0aGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0cG9zdCgpO1xuXG5cdFx0fVxuXG5cdFx0Y29ubmVjdCgpO1xuXG5cdH1cblxuXHRpZiggIS9yZWNlaXZlci9pLnRlc3QoIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKSApIHtcblxuXHRcdC8vIElmIHRoZSB0aGVyZSdzIGEgJ25vdGVzJyBxdWVyeSBzZXQsIG9wZW4gZGlyZWN0bHlcblx0XHRpZiggd2luZG93LmxvY2F0aW9uLnNlYXJjaC5tYXRjaCggLyhcXD98XFwmKW5vdGVzL2dpICkgIT09IG51bGwgKSB7XG5cdFx0XHRvcGVuTm90ZXMoKTtcblx0XHR9XG5cblx0XHQvLyBPcGVuIHRoZSBub3RlcyB3aGVuIHRoZSAncycga2V5IGlzIGhpdFxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0Ly8gRGlzcmVnYXJkIHRoZSBldmVudCBpZiB0aGUgdGFyZ2V0IGlzIGVkaXRhYmxlIG9yIGFcblx0XHRcdC8vIG1vZGlmaWVyIGlzIHByZXNlbnRcblx0XHRcdGlmICggZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJzpmb2N1cycgKSAhPT0gbnVsbCB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5ICkgcmV0dXJuO1xuXG5cdFx0XHQvLyBEaXNyZWdhcmQgdGhlIGV2ZW50IGlmIGtleWJvYXJkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoIFJldmVhbC5nZXRDb25maWcoKS5rZXlib2FyZCA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGlmKCBldmVudC5rZXlDb2RlID09PSA4MyApIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0b3Blbk5vdGVzKCk7XG5cdFx0XHR9XG5cdFx0fSwgZmFsc2UgKTtcblxuXHRcdC8vIFNob3cgb3VyIGtleWJvYXJkIHNob3J0Y3V0IGluIHRoZSByZXZlYWwuanMgaGVscCBvdmVybGF5XG5cdFx0aWYoIHdpbmRvdy5SZXZlYWwgKSBSZXZlYWwucmVnaXN0ZXJLZXlib2FyZFNob3J0Y3V0KCAnUycsICdTcGVha2VyIG5vdGVzIHZpZXcnICk7XG5cblx0fVxuXG5cdHJldHVybiB7IG9wZW46IG9wZW5Ob3RlcyB9O1xuXG59KSgpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/reveal.js/plugin/notes/notes.js\n");
  17. /***/ }),
  18. /***/ "./node_modules/reveal.js/plugin/zoom-js/zoom.js":
  19. /*!*******************************************************!*\
  20. !*** ./node_modules/reveal.js/plugin/zoom-js/zoom.js ***!
  21. \*******************************************************/
  22. /*! no static exports found */
  23. /***/ (function(module, exports) {
  24. eval("// Custom reveal.js integration\n(function(){\n\tvar revealElement = document.querySelector( '.reveal' );\n\tif( revealElement ) {\n\n\t\trevealElement.addEventListener( 'mousedown', function( event ) {\n\t\t\tvar defaultModifier = /Linux/.test( window.navigator.platform ) ? 'ctrl' : 'alt';\n\n\t\t\tvar modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : defaultModifier ) + 'Key';\n\t\t\tvar zoomLevel = ( Reveal.getConfig().zoomLevel ? Reveal.getConfig().zoomLevel : 2 );\n\n\t\t\tif( event[ modifier ] && !Reveal.isOverview() ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tzoom.to({\n\t\t\t\t\tx: event.clientX,\n\t\t\t\t\ty: event.clientY,\n\t\t\t\t\tscale: zoomLevel,\n\t\t\t\t\tpan: false\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\n\t}\n})();\n\n/*!\n * zoom.js 0.3 (modified for use with reveal.js)\n * http://lab.hakim.se/zoom-js\n * MIT licensed\n *\n * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se\n */\nvar zoom = (function(){\n\n\t// The current zoom level (scale)\n\tvar level = 1;\n\n\t// The current mouse position, used for panning\n\tvar mouseX = 0,\n\t\tmouseY = 0;\n\n\t// Timeout before pan is activated\n\tvar panEngageTimeout = -1,\n\t\tpanUpdateInterval = -1;\n\n\t// Check for transform support so that we can fallback otherwise\n\tvar supportsTransforms = \t'WebkitTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'MozTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'msTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'OTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'transform' in document.body.style;\n\n\tif( supportsTransforms ) {\n\t\t// The easing that will be applied when we zoom in/out\n\t\tdocument.body.style.transition = 'transform 0.8s ease';\n\t\tdocument.body.style.OTransition = '-o-transform 0.8s ease';\n\t\tdocument.body.style.msTransition = '-ms-transform 0.8s ease';\n\t\tdocument.body.style.MozTransition = '-moz-transform 0.8s ease';\n\t\tdocument.body.style.WebkitTransition = '-webkit-transform 0.8s ease';\n\t}\n\n\t// Zoom out if the user hits escape\n\tdocument.addEventListener( 'keyup', function( event ) {\n\t\tif( level !== 1 && event.keyCode === 27 ) {\n\t\t\tzoom.out();\n\t\t}\n\t} );\n\n\t// Monitor mouse movement for panning\n\tdocument.addEventListener( 'mousemove', function( event ) {\n\t\tif( level !== 1 ) {\n\t\t\tmouseX = event.clientX;\n\t\t\tmouseY = event.clientY;\n\t\t}\n\t} );\n\n\t/**\n\t * Applies the CSS required to zoom in, prefers the use of CSS3\n\t * transforms but falls back on zoom for IE.\n\t *\n\t * @param {Object} rect\n\t * @param {Number} scale\n\t */\n\tfunction magnify( rect, scale ) {\n\n\t\tvar scrollOffset = getScrollOffset();\n\n\t\t// Ensure a width/height is set\n\t\trect.width = rect.width || 1;\n\t\trect.height = rect.height || 1;\n\n\t\t// Center the rect within the zoomed viewport\n\t\trect.x -= ( window.innerWidth - ( rect.width * scale ) ) / 2;\n\t\trect.y -= ( window.innerHeight - ( rect.height * scale ) ) / 2;\n\n\t\tif( supportsTransforms ) {\n\t\t\t// Reset\n\t\t\tif( scale === 1 ) {\n\t\t\t\tdocument.body.style.transform = '';\n\t\t\t\tdocument.body.style.OTransform = '';\n\t\t\t\tdocument.body.style.msTransform = '';\n\t\t\t\tdocument.body.style.MozTransform = '';\n\t\t\t\tdocument.body.style.WebkitTransform = '';\n\t\t\t}\n\t\t\t// Scale\n\t\t\telse {\n\t\t\t\tvar origin = scrollOffset.x +'px '+ scrollOffset.y +'px',\n\t\t\t\t\ttransform = 'translate('+ -rect.x +'px,'+ -rect.y +'px) scale('+ scale +')';\n\n\t\t\t\tdocument.body.style.transformOrigin = origin;\n\t\t\t\tdocument.body.style.OTransformOrigin = origin;\n\t\t\t\tdocument.body.style.msTransformOrigin = origin;\n\t\t\t\tdocument.body.style.MozTransformOrigin = origin;\n\t\t\t\tdocument.body.style.WebkitTransformOrigin = origin;\n\n\t\t\t\tdocument.body.style.transform = transform;\n\t\t\t\tdocument.body.style.OTransform = transform;\n\t\t\t\tdocument.body.style.msTransform = transform;\n\t\t\t\tdocument.body.style.MozTransform = transform;\n\t\t\t\tdocument.body.style.WebkitTransform = transform;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Reset\n\t\t\tif( scale === 1 ) {\n\t\t\t\tdocument.body.style.position = '';\n\t\t\t\tdocument.body.style.left = '';\n\t\t\t\tdocument.body.style.top = '';\n\t\t\t\tdocument.body.style.width = '';\n\t\t\t\tdocument.body.style.height = '';\n\t\t\t\tdocument.body.style.zoom = '';\n\t\t\t}\n\t\t\t// Scale\n\t\t\telse {\n\t\t\t\tdocument.body.style.position = 'relative';\n\t\t\t\tdocument.body.style.left = ( - ( scrollOffset.x + rect.x ) / scale ) + 'px';\n\t\t\t\tdocument.body.style.top = ( - ( scrollOffset.y + rect.y ) / scale ) + 'px';\n\t\t\t\tdocument.body.style.width = ( scale * 100 ) + '%';\n\t\t\t\tdocument.body.style.height = ( scale * 100 ) + '%';\n\t\t\t\tdocument.body.style.zoom = scale;\n\t\t\t}\n\t\t}\n\n\t\tlevel = scale;\n\n\t\tif( document.documentElement.classList ) {\n\t\t\tif( level !== 1 ) {\n\t\t\t\tdocument.documentElement.classList.add( 'zoomed' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdocument.documentElement.classList.remove( 'zoomed' );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Pan the document when the mosue cursor approaches the edges\n\t * of the window.\n\t */\n\tfunction pan() {\n\t\tvar range = 0.12,\n\t\t\trangeX = window.innerWidth * range,\n\t\t\trangeY = window.innerHeight * range,\n\t\t\tscrollOffset = getScrollOffset();\n\n\t\t// Up\n\t\tif( mouseY < rangeY ) {\n\t\t\twindow.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) );\n\t\t}\n\t\t// Down\n\t\telse if( mouseY > 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");
  25. /***/ }),
  26. /***/ "./src/client/js/util/reveal/plugins/growi-renderer.js":
  27. /*!*************************************************************!*\
  28. !*** ./src/client/js/util/reveal/plugins/growi-renderer.js ***!
  29. \*************************************************************/
  30. /*! no static exports found */
  31. /***/ (function(module, exports, __webpack_require__) {
  32. 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");
  33. /***/ }),
  34. /***/ "./src/client/js/util/reveal/plugins/markdown.js":
  35. /*!*******************************************************!*\
  36. !*** ./src/client/js/util/reveal/plugins/markdown.js ***!
  37. \*******************************************************/
  38. /*! exports provided: default */
  39. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  40. "use strict";
  41. 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 <script> or <textarea data-template> wrapper\n let template = section.querySelector('[data-template]') || section.querySelector('script'); // strip leading whitespace so it isn't evaluated as code\n\n let text = (template || section).textContent; // restore script end tags\n\n text = text.replace(new RegExp(SCRIPT_END_PLACEHOLDER, 'g'), '</script>');\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] + '<aside class=\"notes\">' + marked(notesMatch[1].trim()) + '</aside>';\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 '<script type=\"text/template\">' + content + '</script>';\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 <section data-markdown> tags\n\n for (let i = 0, len = sectionStack.length; i < len; i++) {\n // vertical\n if (sectionStack[i] instanceof Array) {\n markdownSections += '<section ' + options.attributes + '>';\n sectionStack[i].forEach(function (child) {\n markdownSections += '<section data-markdown>' + createMarkdownSlide(child, options) + '</section>';\n });\n markdownSections += '</section>';\n } else {\n markdownSections += '<section ' + options.attributes + ' data-markdown>' + createMarkdownSlide(sectionStack[i], options) + '</section>';\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 = '<section data-state=\"alert\">' + 'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' + 'Check your browser\\'s JavaScript console for more details.' + '<p>Remember that you need to serve the presentation HTML from a HTTP server.</p>' + '</section>';\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");
  42. /***/ })
  43. }]);