@jhuix/showdowns 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"showdowns.core.min.js","sources":["../src/parser/converter.js","../src/parser/githubCodeBlocks.js","../src/parser/tables.js","../src/parser/showdown.js","../src/extensions/cdn.js","../src/extensions/date-format.js","../src/extensions/utils.js","../src/extensions/showdown-abc.js","../src/extensions/showdown-toc.js","../src/extensions/showdown-viz.js","../src/extensions/showdown-vega.js","../src/extensions/showdown-align.js","../src/extensions/asciimath2tex.js","../src/extensions/showdown-katex.js","../src/extensions/showdown-echarts.js","../src/extensions/showdown-mermaid.js","../src/utils/zlib-codec.js","../src/utils/plantuml-codec.js","../src/extensions/showdown-plantuml.js","../src/extensions/showdown-railroad.js","../src/extensions/showdown-sequence.js","../src/extensions/showdown-wavedrom.js","../src/extensions/showdown-footnotes.js","../src/extensions/showdown-container.js","../src/extensions/showdown-flowchart.js","../src/showdowns.js"],"sourcesContent":["/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.ConverterExtObj = function(flavor, asyncExtensions) {\n 'use strict';\n\n let outputAsyncModifiers = [],\n /**\n * The flavor set in this converter\n */\n currConvFlavor = flavor;\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor() {\n if (asyncExtensions) {\n showdown.helper.forEach(asyncExtensions, _parseAsyncExtension);\n }\n }\n\n /**\n * Parse async extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseAsyncExtension(ext, name) {\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n name = showdown.helper.stdExtName(ext);\n ext = showdown.asyncExtension(name);\n if (showdown.helper.isUndefined(ext)) {\n throw Error(\n 'Extension \"' + name + '\" could not be loaded. It was either not found or is not a valid aync extension.'\n );\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'output':\n outputAsyncModifiers.push(ext[i]);\n break;\n }\n }\n }\n }\n\n this.addAsyncExtension = function(extension, name) {\n name = name || null;\n _parseAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var j = 0; j < outputAsyncModifiers.length; ++j) {\n if (outputAsyncModifiers[j] === ext) {\n outputAsyncModifiers.splice(j, 1);\n }\n }\n }\n };\n\n this.getAsyncExtensions = function() {\n return outputAsyncModifiers;\n };\n\n /**\n * Get the currently flavor name of this converter\n * @returns {string}\n */\n this.getCurrFlavor = function() {\n return currConvFlavor;\n };\n\n /**\n * Set the currently flavor name of this converter\n * @param {string} flavor name\n */\n this.setCurrFlavor = function(name) {\n currConvFlavor = name;\n };\n};\n\nshowdown.Converter.prototype.initConvertExtObj = function(flavor, asyncExtensions) {\n this.extObj = new showdown.ConverterExtObj(flavor, asyncExtensions);\n\n this.resetOptions = function(converterOptions) {\n converterOptions = converterOptions || {};\n\n const globalOptions = showdown.getOptions();\n let options = this.getOptions();\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n }\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function(name) {\n let preset = showdown.getFlavorOptions(name);\n if (showdown.helper.isUndefined(preset)) return;\n this.extObj.setCurrFlavor(name);\n let defaultOptions = showdown.getDefaultOptions(true);\n for (var option in defaultOptions) {\n if (defaultOptions.hasOwnProperty(option)) {\n this.getOptions()[option] = defaultOptions[option];\n }\n }\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n this.getOptions()[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function() {\n return this.extObj.getCurrFlavor();\n };\n\n this.addAsyncExtension = function(extension, name) {\n this.extObj.addAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n this.extObj.removeAsyncExtension(extension);\n };\n\n // Because removeExtension function of converter has bug in showdown.js,\n // it needs to be overrode.\n this.removeExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n const exts = this.getAllExtensions();\n let langExtensions = exts.language;\n let outputModifiers = exts.output;\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions.splice(i, 1);\n }\n }\n for (var j = 0; j < outputModifiers.length; ++j) {\n if (outputModifiers[j] === ext) {\n outputModifiers.splice(j, 1);\n }\n }\n }\n };\n\n /**\n * Async converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.asyncMakeHtml = function(text, callback) {\n const content = this.makeHtml(text);\n const outputs = this.extObj.getAsyncExtensions();\n if (!outputs.length) {\n return Promise.resolve({html: content});\n }\n\n var globals = {\n outputs: outputs,\n converter: this\n };\n const parser = new DOMParser();\n const doc = parser.parseFromString(content, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n const options = this.getOptions();\n let scripts = [];\n let result = Promise.resolve({ wrapper, options, globals, scripts });\n //forEach写法\n outputs.forEach(function(ext) {\n result = result.then(obj => {\n const filter = ext.filter(obj);\n return filter ? filter : obj;\n });\n });\n return result.then(obj => {\n if (typeof callback === 'function' && callback) {\n const promise = callback(obj);\n if (promise instanceof Promise) {\n return promise.then(obj => {\n return { html: obj.wrapper.innerHTML, scripts: obj.scripts };\n });\n }\n }\n return { html: obj.wrapper.innerHTML, scripts: obj.scripts };\n });\n };\n\n return this;\n};\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Override githubCodeBlocks parser;\n * Support language attribute, see the following format:\n * ```lang {\"theme\": \"github\", \"align\": \"center\"}\n * code block\n * ```\n * OR\n * ```lang [\"theme\": \"vox\", \"align\": \"right\"]\n * code block\n * ```\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.subParser('githubCodeBlocks', function(text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(\n /(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*?)(?:[ \\t]*?)((?:\\{[\\S\\t ]*\\}|\\[[\\S\\t ]*\\])?)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g,\n function(wholeMatch, delim, language, langattr, codeblock) {\n var end = options.omitExtraWLInCodeBlocks ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock =\n '<pre><code' +\n (language ? ' class=\"' + language + ' language-' + language + '\"' : '') +\n (langattr ? ` data-lang='${langattr}'` : '') +\n '>' +\n codeblock +\n end +\n '</code></pre>';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return (\n '\\n\\n¨G' +\n (globals.ghCodeBlocks.push({\n text: wholeMatch,\n codeblock: codeblock\n }) -\n 1) +\n 'G\\n\\n'\n );\n }\n );\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\n// Override tables parser;\nshowdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm,\n headerlessTableRgx = /^ {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n headerlessSingeColTblRgx = /^ {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles(sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders(header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '<th' + id + style + '>' + header + '</th>\\n';\n }\n\n function mergeCells(cells, row, col, cell) {\n if (cell) {\n if (!options.tablesRowspan || cell !== '^^' || !row) {\n return;\n }\n\n // up merge except for first row cells\n for (var i = row - 1; i >= 0; --i) {\n if (!cells[i][col]) {\n for (var ii = col - 1; ii >= 0; -ii) {\n if (cells[i + 1][ii] && cells[i + 1][ii] !== '^^') {\n return;\n }\n\n if (cells[i][ii]) {\n if (!cells[i + 1][ii]) {\n return;\n }\n\n cells[i][ii] = cells[i][ii]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else if (cells[i][col] !== '^^') {\n cells[i][col] = cells[i][col]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n } else if (i === 0) {\n cells[i][col] = '<td rowspan=\"' + (row - i + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n // left merge except for first column cells\n if (!col) {\n return;\n }\n\n for (var ii = col - 1; ii >= 0; --ii) {\n if (cells[row][ii]) {\n if (cells[row][ii] === '^^') {\n for (var i = row - 1; i >= 0; --i) {\n if (cells[i][ii + 1]) {\n return;\n }\n\n if (cells[i][ii] !== '^^') {\n cells[i][ii] = cells[i][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else {\n cells[row][ii] = cells[row][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n } else if (ii === 0) {\n cells[row][ii] = '<td colspan=\"' + (col - ii + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n function parseCells(cells, row, col, cell, style) {\n if (options.tablesMerge) {\n var direct = mergeCells(cells, row, col, cell);\n if (!showdown.helper.isUndefined(direct)) {\n return direct;\n }\n }\n\n cell = cell.trim();\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '<td' + style + '>' + subText + '</td>\\n';\n }\n\n function buildTable(headers, styles, cells) {\n var tb = '<table>\\n',\n tblLgn = styles.length;\n\n if (headers.length) {\n tb += '<thead>\\n<tr>\\n';\n for (var i = 0; i < headers.length; ++i) {\n tb += headers[i];\n }\n tb += '</tr>\\n</thead>\\n';\n }\n tb += '<tbody>\\n'\n\n for (i = 0; i < cells.length; ++i) {\n tb += '<tr>\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n if (!options.tablesMerge || cells[i][ii] !== '^^') {\n tb += cells[i][ii];\n }\n }\n tb += '</tr>\\n';\n }\n tb += '</tbody>\\n</table>\\n';\n return tb;\n }\n\n function parseTableContent(rawTable, headerless) {\n var i,\n tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawStyles = [],\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n if (headerless) {\n rawStyles = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n tableLines.shift();\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n } else {\n var rawHeaders = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n rawStyles = tableLines[1].split('|').map(function (s) {\n return s.trim();\n });\n\n tableLines.shift();\n tableLines.shift();\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n }\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i].split('|').map(function (s) {\n var cell = s.trim();\n if (cell === '' && s.length > 0) return s;\n return cell;\n })\n );\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n cells.push(row);\n for (var ii = 0; ii < styles.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n rawCells[i][ii] = '';\n }\n row.push(parseCells(cells, i, ii, rawCells[i][ii], styles[ii]));\n }\n }\n\n return buildTable(headers, styles, cells);\n }\n\n function parseTable(rawTable) {\n return parseTableContent(rawTable, false);\n }\n\n function parseHeaderlessTable(rawTable) {\n return parseTableContent(rawTable, true);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n if (options.tablesHeaderless) {\n // parse multi column headerless tables\n text = text.replace(headerlessTableRgx, parseHeaderlessTable);\n\n // parse one column headerless tables\n text = text.replace(headerlessSingeColTblRgx, parseHeaderlessTable);\n }\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\nimport './converter.js';\nimport './githubCodeBlocks.js';\nimport './tables.js';\n\nlet currFlavor = 'vanilla',\n flavors = {\n github: {\n ghCompatibleHeaderId: false,\n underline: true,\n rawHeaderId: true,\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n ghost: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n allOn: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n }\n },\n _asyncExtensions = {};\n\n/**\n * Gets or registers an async extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.asyncExtension = function(name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error(\"Extension 'name' must be a string\");\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!_asyncExtensions.hasOwnProperty(name)) {\n throw Error('Async Extension named ' + name + ' is not registered!');\n }\n return _asyncExtensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n _asyncExtensions[name] = ext;\n }\n }\n};\n\n/**\n * Remove an async extension\n * @param {string} name\n */\nshowdown.removeAsyncExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete _asyncExtensions[name];\n};\n\n/**\n * Removes all async extensions\n */\nshowdown.resetAsyncExtensions = function() {\n 'use strict';\n _asyncExtensions = {};\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete showdown.getAllExtensions[name];\n};\n\nconst orgSetFlavor = showdown.setFlavor;\nconst orgGetFlavorOptions = showdown.getFlavorOptions;\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function(name) {\n 'use strict';\n\n try {\n orgSetFlavor(name);\n currFlavor = name;\n if (!flavors.hasOwnProperty(name)) return;\n } catch {\n if (!flavors.hasOwnProperty(name)) return;\n showdown.resetOptions();\n currFlavor = name;\n }\n var preset = flavors[name];\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n showdown.getOptions()[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function() {\n 'use strict';\n return currFlavor;\n};\n\nshowdown.setFlavorOptions = function(name, options) {\n if (options) {\n flavors[name] = Object.assign(flavors[name] || {}, options);\n }\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function(name) {\n 'use strict';\n const flavor = orgGetFlavorOptions(name);\n if (!showdown.helper.isUndefined(flavor)) {\n if (!flavors.hasOwnProperty(name)) {\n return flavor;\n }\n return Object.assign(flavor, flavors[name]);\n }\n\n if (flavors.hasOwnProperty(name)) {\n return flavors[name];\n }\n};\n\nexport default showdown;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nlet cdnName = 'jsdelivr';\nlet scheme = document.location.protocol === 'file:' ? 'https://' : document.location.protocol + '//';\nlet defScheme = '';\nlet distScheme = '';\n\nconst cdnSrc = {\n local: {\n ABCJS: '../node_modules/abcjs/dist/abcjs-basic.js',\n ABCJSCSS: '../node_modules/abcjs/abcjs-audio.css',\n echarts: '../node_modules/echarts/dist/echarts.js',\n Viz: '../node_modules/@viz-js/viz/lib/viz-standalone.js',\n Raphael: '../node_modules/raphael/raphael.min.js',\n flowchart: '../dist/diagrams/flowchart/flowchart.min.js',\n mermaid: '../node_modules/mermaid/dist/mermaid.js',\n katex: '../node_modules/katex/dist/katex.min.js',\n katexCSS: '../node_modules/katex/dist/katex.min.css',\n renderMathInElement: '../node_modules/katex/dist/contrib/auto-render.js',\n railroad: '../node_modules/railroad-diagrams/railroad-diagrams.js',\n railroadCSS: '../node_modules/railroad-diagrams/railroad-diagrams.css',\n Snap: '../node_modules/snapsvg/dist/snap.svg-min.js',\n WebFont: '../node_modules/webfontloader/webfontloader.js',\n underscore: '../node_modules/underscore/underscore-min.js',\n sequence: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.js',\n sequenceCSS: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.css',\n WaveDrom: '../node_modules/wavedrom/wavedrom.min.js',\n WaveDromSkin: {\n default: '../node_modules/wavedrom/skins/default.js',\n lowkey: '../node_modules/wavedrom/skins/lowkey.js',\n narrow: '../node_modules/wavedrom/skins/narrow.js'\n },\n vega: '../node_modules/vega/build/vega.js',\n vegaLite: '../node_modules/vega-lite/build/vega-lite.js',\n vegaEmbed: '../node_modules/vega-embed/build/vega-embed.js'\n },\n cdnjs: {\n ABCJS: scheme + 'cdnjs.cloudflare.com/ajax/libs/abcjs/6.4.1/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/abcjs/abcjs-audio.css',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.1/mermaid.min.js',\n katex: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.11/katex.min.js',\n katexCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.11/katex.min.css',\n renderMathInElement: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.11/contrib/auto-render.js',\n railroad: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.js',\n railroadCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.css',\n Snap: scheme + 'cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js',\n WebFont: scheme + 'cdnjs.cloudflare.com/ajax/libs/webfont/1.6.28/webfontloader.js',\n underscore: scheme + 'cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.6/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/default.js',\n lowkey: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/lowkey.js',\n narrow: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/narrow.js'\n },\n vega: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega/5.30.0/vega.min.js',\n vegaLite: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-lite/5.19.0/vega-lite.min.js',\n vegaEmbed: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-embed/6.26.0/vega-embed.min.js'\n },\n jsdelivr: {\n ABCJS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/dist/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/abcjs-audio.css', \n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdn.jsdelivr.net/npm/raphael@2/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js',\n katex: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.js',\n katexCSS: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.css',\n renderMathInElement: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/contrib/auto-render.js',\n railroad: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.js',\n railroadCSS: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.css',\n Snap: scheme + 'cdn.jsdelivr.net/npm/snapsvg@0/dist/snap.svg-min.js',\n WebFont: scheme + 'cdn.jsdelivr.net/npm/webfontloader@1/webfontloader.js',\n underscore: scheme + 'cdn.jsdelivr.net/npm/underscore@1/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/default.js',\n lowkey: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/lowkey.js',\n narrow: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/narrow.js'\n },\n vega: scheme + 'cdn.jsdelivr.net/npm/vega@5/build/vega.js',\n vegaLite: scheme + 'cdn.jsdelivr.net/npm/vega-lite@5/build/vega-lite.js',\n vegaEmbed: scheme + 'cdn.jsdelivr.net/npm/vega-embed@6/build/vega-embed.js'\n }\n};\n\nfunction setCDN(name, scheme_default, scheme_dist) {\n if (name in cdnSrc) {\n cdnName = name;\n }\n\n if (typeof scheme_default === 'string' && scheme_default) {\n defScheme = scheme_default;\n }\n\n if (typeof scheme_dist === 'string' && scheme_dist) {\n distScheme = scheme_dist;\n }\n}\n\nfunction getCDN() {\n return cdnName;\n}\n\nfunction getSrc(name, def) {\n if (cdnSrc.hasOwnProperty(cdnName)) {\n const cdn = cdnSrc[cdnName];\n let url = '';\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (cdn[key] && typeof val === 'string' && val && cdn[key][val]) {\n url = cdn[key][val];\n }\n } else if (cdn[name]) {\n url = cdn[name];\n }\n\n if (url) {\n if (url.substring(0, scheme.length) === scheme) {\n def = url;\n } else if (url.substring(0, 8) === '../dist/') {\n def = distScheme + url;\n } else {\n def = defScheme + url;\n }\n }\n }\n return def;\n}\n\nfunction loadScript(src, name) {\n return new Promise((res, rej) => {\n if (!src || typeof document === 'undefined') {\n rej('Args is invaild!');\n }\n\n if (typeof name === 'undefined') {\n name = src;\n }\n\n src = getSrc(name, src);\n const head = document.head || document.getElementsByTagName('head')[0];\n const script = document.createElement('script');\n script.src = src;\n script.onload = () => {\n res(name);\n };\n head.appendChild(script);\n });\n}\n\nfunction loadStyleSheet(css, name) {\n if (!css || typeof document === 'undefined') {\n return '';\n }\n\n if (typeof name === 'undefined') {\n name = css;\n }\n\n css = getSrc(name, css);\n var head = document.head || document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = css;\n head.appendChild(link);\n return cdnName === 'local' ? '' : css;\n}\n\nconst cdnjs = {\n setCDN,\n getCDN,\n getSrc,\n loadScript,\n loadStyleSheet\n};\n\nexport default cdnjs;\n","/*\r\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\r\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\r\n * Description: Date format extension\r\n */\r\n'use strict';\r\n// 对Date的扩展,将 Date 转化为指定格式的String\r\n// 月(M)、日(d)、小时(h/H)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,\r\n// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)\r\n// 例子:\r\n// (new Date()).Format(\"yyyy-MM-dd hh:mm:ss.S\") ==> 1970-01-01 08:09:04.423\r\n// (new Date()).Format(\"yyyy-M-d h:m:s.S\") ==> 1970-1-1 8:9:4.18\r\nDate.prototype.Format = function(fmt) {\r\n var o = {\r\n 'M+': this.getMonth() + 1, //月份\r\n 'd+': this.getDate(), //日\r\n 'h+': this.getHours(), //小时\r\n 'H+': this.getHours(), //小时\r\n 'm+': this.getMinutes(), //分\r\n 's+': this.getSeconds(), //秒\r\n 'q+': Math.floor((this.getMonth() + 3) / 3), //季度\r\n S: this.getMilliseconds() //毫秒\r\n };\r\n if (!fmt) fmt = 'yyyy-MM-dd hh:mm:ss.S';\r\n if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));\r\n for (var k in o) {\r\n if (new RegExp('(' + k + ')').test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));\r\n }\r\n }\r\n return fmt;\r\n};\r\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport './date-format.js';\n\nfunction loadScript(id, code) {\n return new Promise((res, rej) => {\n if (!code || typeof document === 'undefined') {\n rej('Args is invaild!');\n }\n\n const body = document.body;\n let script = document.getElementById(id);\n if (script) {\n body.removeChild(script);\n } else {\n script = document.createElement('script');\n script.id = id;\n }\n script.type = \"text/javascript\";\n script.text = code;\n body.appendChild(script);\n res(true);\n });\n}\n\nfunction interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nfunction renderCacheElement(doc, id, name, callback) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n el.style.display = 'none';\n doc.body.appendChild(el);\n if (typeof callback === 'function' && callback) {\n const result = callback(el);\n if (result instanceof Promise) {\n result.then(el => {\n doc.body.removeChild(el);\n el.style.display = '';\n });\n return el.outerHTML;\n }\n }\n doc.body.removeChild(el);\n el.style.display = '';\n return el.outerHTML;\n}\n\nfunction renderElement(doc, id, name) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n doc.body.appendChild(el);\n return el\n}\n\nfunction createElementMeta(name, element, callback) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return false;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n\n let code = element.textContent.trim();\n if (callback && typeof callback === 'function') {\n code = callback(code);\n }\n const className =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const id = name + '-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n return {\n id: id,\n className: className,\n data: code,\n element: element, \n };\n}\n\nconst utils = {\n interopDefault,\n loadScript,\n renderCacheElement,\n renderElement,\n createElementMeta\n};\n\nexport default utils;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown abc extension for markdown\n */\n'use strict';\n\nconst extName = 'abc';\nconst cssCdnName = 'ABCJSCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown abcjs extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof ABCJS === 'undefined') {\n var ABCJS = window.ABCJS || undefined;\n} \n\nfunction hasAbc() {\n return !!ABCJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasAbc();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs.loadScript('ABCJS').then(name => {\n ABCJS = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction onRenderAbc(resolve, res) {\n if (hasAbc()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const cssLink = res.cssLink;\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-abc\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n const element = doc.getElementById(id);\n ABCJS.renderAbc(element, data);\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderAbc(resolve, res);\n }, 20);\n}\n\n/**\n * render abc graphs\n */\nfunction renderAbc(element) {\n return new Promise(resolve => {\n let meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(cssCdnName);\n onRenderAbc(resolve, meta);\n });\n}\n\n// <div class=\"abc\"></div>\nfunction renderAbcElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderAbc(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n\nfunction showdownAbc() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the abc in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(cssCdnName)\n };\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render ${extName} elements.`);\n return renderAbcElements(elements).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render ${extName} elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownAbc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown toc extension for markdown\n */\n'use strict';\n\nfunction createHeadingElement(wrapper, element, toc, nexthead) {\n try {\n if (nexthead) {\n toc = toc.appendChild(wrapper.ownerDocument.createElement('ul'));\n }\n const child = toc\n .appendChild(wrapper.ownerDocument.createElement('li'))\n .appendChild(wrapper.ownerDocument.createElement('a'));\n if (element) {\n child.appendChild(wrapper.ownerDocument.createTextNode(element.textContent));\n child.href = '#' + element.id;\n }\n } catch {\n console.log(\"append child error:\" + wrapper);\n }\n return toc;\n}\n\nfunction appendTocElement(wrapper, element, currTocNode, headingLevel) {\n // If the current heading level is not greater than the heading level of current toc node,\n // return the toc node whose heading level is less than the current heading level in the toc node list.\n // At the same time, clearing the invalid toc node.\n if (headingLevel <= currTocNode.headingLevel) {\n let tempTocNode = null;\n while (currTocNode) {\n if (headingLevel > currTocNode.headingLevel) break;\n tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Remove toc node from node list and clean it.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n if (currTocNode) appendTocElement(wrapper, element, currTocNode, headingLevel);\n return currTocNode;\n }\n\n // If the current heading level is greater than the heading level of\n // the latest heading of the current toc node,\n // you need to create a new level heading with out list.\n // Otherwise add a heading of the same heading level.\n if (headingLevel > currTocNode.preLevel) {\n currTocNode.preLevel ++;\n while (headingLevel > currTocNode.preLevel) {\n currTocNode.toc = createHeadingElement(wrapper, null, currTocNode.toc, true);\n currTocNode.preLevel ++;\n }\n currTocNode.toc = createHeadingElement(wrapper, element, currTocNode.toc, true);\n } else {\n while (headingLevel < currTocNode.preLevel) {\n currTocNode.toc = currTocNode.toc.parentNode;\n currTocNode.preLevel--;\n }\n createHeadingElement(wrapper, element, currTocNode.toc, false);\n }\n\n if (currTocNode.parentNode) appendTocElement(wrapper, element, currTocNode.parentNode, headingLevel);\n return currTocNode;\n}\n\nfunction renderTocElements(wrapper) {\n let element = null;\n let headingLevel = 0;\n let currTocNode = null;\n let result = false;\n const elements = wrapper.querySelectorAll('p,h1,h2,h3,h4,h5,h6');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n\n // Match the element text is [toc].\n // And replace this element with out list that classname is 'showdown-toc'.\n if (element.textContent.trim().toLowerCase() == '[toc]') {\n // New table of contents container.\n let toc = wrapper.ownerDocument.createElement('ul');\n toc.className = 'showdown-toc';\n element.parentNode.replaceChild(toc, element);\n let tocNode = {\n parentNode: null,\n toc: toc,\n headingLevel: headingLevel,\n preLevel: 0\n };\n if (currTocNode) {\n // If the heading level of the TOC node is higher than\n // that of the previous TOC node,\n // the TOC node is a child of the previous TOC node.\n // Otherwise, look up the TOC node in the node list\n // whose heading level is not greater than the TOC node.\n if (headingLevel > currTocNode.headingLevel) {\n tocNode.parentNode = currTocNode;\n } else {\n // The code will never be executed, just to prevent logic loss.\n // Because invalid nodes have been cleared in appendTocElement method.\n let prev = currTocNode;\n while (headingLevel < prev.headingLevel) {\n prev = prev.parentNode;\n }\n if (prev) {\n if (headingLevel === prev.headingLevel) {\n tocNode.parentNode = prev.parentNode;\n } else {\n tocNode.parentNode = prev;\n }\n }\n }\n }\n currTocNode = tocNode;\n result = true;\n }\n // That's going to be what we use as contents entries\n // for this table of contents.\n else if (element['tagName']) {\n switch (element['tagName']) {\n case 'H1':\n case 'H2':\n case 'H3':\n case 'H4':\n case 'H5':\n case 'H6':\n headingLevel = parseInt(element['tagName'].substr(1));\n if (currTocNode) {\n if (!currTocNode.preLevel) {\n currTocNode.preLevel = headingLevel;\n }\n\n currTocNode = appendTocElement(wrapper, element, currTocNode, headingLevel);\n }\n break;\n }\n }\n }\n\n // Final, clear all toc node in node list.\n while (currTocNode) {\n let tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Clean toc node.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n return result;\n}\n\nfunction showdownToc() {\n const parser = new DOMParser();\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderTocElements(wrapper)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownToc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown viz extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown viz extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Viz === 'undefined') {\n var Viz = window.Viz || undefined;\n}\n\nconst engines = ['circo', 'dot', 'neato', 'osage', 'twopi'];\n\nfunction hasViz() {\n return typeof Viz !== 'undefined' && Viz && typeof Viz.instance !== 'undefined'\n ? true\n : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasViz();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadScript('Viz').then(name => {\n Viz = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction onRenderViz(resolve, res) {\n if (hasViz()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const el = res.element;\n const langattr = res.element.dataset.lang;\n let engine = 'dot';\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.engine && engines.indexOf(obj.engine) != -1) {\n engine = obj.engine;\n }\n }\n Viz.instance().then(viz => {\n const svg = viz.renderString(data, { format: 'svg', engine: engine });\n el.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svg}</div>`;\n resolve(true)\n });\n return;\n }\n\n setTimeout(() => {\n onRenderViz(resolve, res);\n }, 10);\n}\n\n/**\n * render Viz graphs\n */\nfunction renderViz(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(\"viz\", element);\n if (!meta) {\n return resolve(false);\n }\n \n onRenderViz(resolve, meta);\n });\n}\n\n// <div class=\"dot\"></div>\nfunction renderVizElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderViz(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownViz() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the Viz in code blocks\n const elements = wrapper.querySelectorAll('code.dot.language-dot');\n if (!elements.length) {\n return false;\n }\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render dot elements.`);\n return renderVizElements(elements).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render dot elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownViz;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown vega extension for markdown\n */\n'use strict';\n\nconst extName = \"vega\";\n\nif (typeof window === 'undefined') {\n throw Error('The showdown vega extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof vegaEmbed === 'undefined') {\n var vegaEmbed = window.vegaEmbed || undefined;\n}\n\nfunction hasVegaEmbed() {\n return typeof vegaEmbed !== 'undefined' && vegaEmbed ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasVegaEmbed();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs\n .loadScript(extName)\n .then(() => {\n return cdnjs.loadScript('vegaLite');\n })\n .then(() => {\n return cdnjs.loadScript('vegaEmbed');\n })\n .then(name => {\n vegaEmbed = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\n/**\n * render VegaEmbed graphs\n */\nfunction renderVega(element, options, scripts, isVegaLite) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n const config = JSON.stringify(options); \n const data = JSON.stringify(JSON.parse(meta.data));\n const id = meta.id;\n const script = {\n id: id,\n code: `(function() {\n let el = document.getElementById('${id}');\n if (el){\n vegaEmbed(el, JSON.parse('${data}'), JSON.parse('${config}'));\n }\n })();`\n }\n scripts.push(script);\n return new Promise(resolve => {\n onRenderVega(resolve, meta);\n });\n}\n\n// <div class=\"vegaembed || flow\"></div>\nfunction renderVegaElements(vegaElements, vegaLiteElements, scripts, options) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n vegaElements.forEach(element => {\n promiseArray.push(renderVega(element, options, scripts, false));\n });\n vegaLiteElements.forEach(element => {\n promiseArray.push(renderVega(element, options, scripts, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// theme: 'excel' | 'ggplot2' | 'quartz' | 'vox' | 'dark'\nconst getOptions = (userOptions = {}) => ({\n actions: { editor: false },\n theme: 'vox',\n tooltip: false,\n renderer: 'svg',\n ...userOptions\n});\n\nfunction onRenderVega(resolve, res) {\n if (hasVegaEmbed()) {\n const id = res.id;\n const name = res.className;\n const node = res.element.parentNode;\n node.outerHTML = `<div id=\"${id}\" class=\"${name}\"></div>`;\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderVega(resolve, res);\n }, 10);\n}\n\nfunction showdownVega(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the VegaEmbed in code blocks\n const vegaElements = wrapper.querySelectorAll('code.vega.language-vega');\n const vegaLiteElements = wrapper.querySelectorAll('code.vega-lite.language-vega-lite');\n if (!vegaElements.length && !vegaLiteElements.length) {\n return false;\n }\n\n const scripts = obj.scripts; \n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render vega elements.`);\n return renderVegaElements(vegaElements, vegaLiteElements, scripts, this.config).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render vega elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownVega;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown align extension for markdown\n */\n'use strict';\n\nfunction renderAlignElements(wrapper) {\n let element = null;\n let childNode = null;\n let result = false;\n const elements = wrapper.querySelectorAll('p, li, h1, h2, h3, h4, h5, h6, div.paragraph');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n childNode = element.firstChild;\n while (childNode) {\n // Text node type is 3.\n if (childNode.nodeType === 3) {\n // Does the element consist of ':-:' or '--:'\n let results = childNode.nodeValue.match(/^([\\s\\S]*?)([:-]-:)(?:[\\s]?)([\\s\\S]*)$/);\n if (results) {\n if (results[2] === ':-:') {\n // align-center\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-center`;\n } else {\n element.className = `align-center`;\n }\n result = true;\n } else if (results[2] === '--:') {\n //align-right\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-right`;\n } else {\n element.className = `align-right`;\n }\n result = true;\n }\n //default algin-left\n }\n break;\n }\n childNode = childNode.nextSibling;\n }\n }\n return result;\n}\n\nfunction showdownAlign() {\n const parser = new DOMParser();\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderAlignElements(wrapper)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownAlign;\n","/*\nBased on ASCIIMathTeXImg.js but now part of https://github.com/jhuix/showdowns.git\n\nBased on ASCIIMathML, Version 1.4.7 Aug 30, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen\nModified with TeX conversion for IMG rendering Sept 6, 2006 (c) David Lippman http://www.pierce.ctc.edu/dlippman\n Updated to match ver 2.2 Mar 3, 2014\n Latest at https://github.com/mathjax/asciimathml\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nvar config = {\n decimalsign: \".\" // change to \",\" if you like, beware of `(1,2)`!\n};\n\nvar CONST = 0,\n UNARY = 1,\n BINARY = 2,\n INFIX = 3,\n LEFTBRACKET = 4,\n RIGHTBRACKET = 5,\n SPACE = 6,\n UNDEROVER = 7,\n DEFINITION = 8,\n LEFTRIGHT = 9,\n TEXT = 10; // token types\n\nvar AMsqrt = { input: 'sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n AMroot = { input: 'root', tag: 'mroot', output: 'root', tex: null, ttype: BINARY },\n AMfrac = { input: 'frac', tag: 'mfrac', output: '/', tex: null, ttype: BINARY },\n AMdiv = { input: '/', tag: 'mfrac', output: '/', tex: null, ttype: INFIX },\n AMover = { input: 'stackrel', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n AMsub = { input: '_', tag: 'msub', output: '_', tex: null, ttype: INFIX },\n AMsup = { input: '^', tag: 'msup', output: '^', tex: null, ttype: INFIX },\n AMtext = { input: 'text', tag: 'mtext', output: 'text', tex: null, ttype: TEXT },\n AMmbox = { input: 'mbox', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT },\n AMquote = { input: '\"', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT };\n\nvar AMsymbols = [\n //some greek symbols\n { input: 'alpha', tag: 'mi', output: '\\u03B1', tex: null, ttype: CONST },\n { input: 'beta', tag: 'mi', output: '\\u03B2', tex: null, ttype: CONST },\n { input: 'chi', tag: 'mi', output: '\\u03C7', tex: null, ttype: CONST },\n { input: 'delta', tag: 'mi', output: '\\u03B4', tex: null, ttype: CONST },\n { input: 'Delta', tag: 'mo', output: '\\u0394', tex: null, ttype: CONST },\n { input: 'epsi', tag: 'mi', output: '\\u03B5', tex: 'epsilon', ttype: CONST },\n { input: 'varepsilon', tag: 'mi', output: '\\u025B', tex: null, ttype: CONST },\n { input: 'eta', tag: 'mi', output: '\\u03B7', tex: null, ttype: CONST },\n { input: 'gamma', tag: 'mi', output: '\\u03B3', tex: null, ttype: CONST },\n { input: 'Gamma', tag: 'mo', output: '\\u0393', tex: null, ttype: CONST },\n { input: 'iota', tag: 'mi', output: '\\u03B9', tex: null, ttype: CONST },\n { input: 'kappa', tag: 'mi', output: '\\u03BA', tex: null, ttype: CONST },\n { input: 'lambda', tag: 'mi', output: '\\u03BB', tex: null, ttype: CONST },\n { input: 'Lambda', tag: 'mo', output: '\\u039B', tex: null, ttype: CONST },\n { input: 'lamda', tag: 'mi', output: 'lambda', tex: null, ttype: DEFINITION },\n { input: 'Lamda', tag: 'mi', output: 'Lambda', tex: null, ttype: DEFINITION },\n { input: 'mu', tag: 'mi', output: '\\u03BC', tex: null, ttype: CONST },\n { input: 'nu', tag: 'mi', output: '\\u03BD', tex: null, ttype: CONST },\n { input: 'omega', tag: 'mi', output: '\\u03C9', tex: null, ttype: CONST },\n { input: 'Omega', tag: 'mo', output: '\\u03A9', tex: null, ttype: CONST },\n { input: 'phi', tag: 'mi', output: '\\u03C6', tex: null, ttype: CONST },\n { input: 'varphi', tag: 'mi', output: '\\u03D5', tex: null, ttype: CONST },\n { input: 'Phi', tag: 'mo', output: '\\u03A6', tex: null, ttype: CONST },\n { input: 'pi', tag: 'mi', output: '\\u03C0', tex: null, ttype: CONST },\n { input: 'Pi', tag: 'mo', output: '\\u03A0', tex: null, ttype: CONST },\n { input: 'psi', tag: 'mi', output: '\\u03C8', tex: null, ttype: CONST },\n { input: 'Psi', tag: 'mi', output: '\\u03A8', tex: null, ttype: CONST },\n { input: 'rho', tag: 'mi', output: '\\u03C1', tex: null, ttype: CONST },\n { input: 'sigma', tag: 'mi', output: '\\u03C3', tex: null, ttype: CONST },\n { input: 'Sigma', tag: 'mo', output: '\\u03A3', tex: null, ttype: CONST },\n { input: 'tau', tag: 'mi', output: '\\u03C4', tex: null, ttype: CONST },\n { input: 'theta', tag: 'mi', output: '\\u03B8', tex: null, ttype: CONST },\n { input: 'vartheta', tag: 'mi', output: '\\u03D1', tex: null, ttype: CONST },\n { input: 'Theta', tag: 'mo', output: '\\u0398', tex: null, ttype: CONST },\n { input: 'upsilon', tag: 'mi', output: '\\u03C5', tex: null, ttype: CONST },\n { input: 'xi', tag: 'mi', output: '\\u03BE', tex: null, ttype: CONST },\n { input: 'Xi', tag: 'mo', output: '\\u039E', tex: null, ttype: CONST },\n { input: 'zeta', tag: 'mi', output: '\\u03B6', tex: null, ttype: CONST },\n\n //binary operation symbols\n { input: '*', tag: 'mo', output: '\\u22C5', tex: 'cdot', ttype: CONST },\n { input: '**', tag: 'mo', output: '\\u2217', tex: 'ast', ttype: CONST },\n { input: '***', tag: 'mo', output: '\\u22C6', tex: 'star', ttype: CONST },\n { input: '//', tag: 'mo', output: '/', tex: '/', ttype: CONST, val: true, notexcopy: true },\n { input: '\\\\\\\\', tag: 'mo', output: '\\\\', tex: 'backslash', ttype: CONST },\n { input: 'setminus', tag: 'mo', output: '\\\\', tex: null, ttype: CONST },\n { input: 'xx', tag: 'mo', output: '\\u00D7', tex: 'times', ttype: CONST },\n { input: '|><', tag: 'mo', output: '\\u22C9', tex: 'ltimes', ttype: CONST },\n { input: '><|', tag: 'mo', output: '\\u22CA', tex: 'rtimes', ttype: CONST },\n { input: '|><|', tag: 'mo', output: '\\u22C8', tex: 'bowtie', ttype: CONST },\n { input: '-:', tag: 'mo', output: '\\u00F7', tex: 'div', ttype: CONST },\n { input: 'divide', tag: 'mo', output: '-:', tex: null, ttype: DEFINITION },\n { input: '@', tag: 'mo', output: '\\u2218', tex: 'circ', ttype: CONST },\n { input: 'o+', tag: 'mo', output: '\\u2295', tex: 'oplus', ttype: CONST },\n { input: 'ox', tag: 'mo', output: '\\u2297', tex: 'otimes', ttype: CONST },\n { input: 'o.', tag: 'mo', output: '\\u2299', tex: 'odot', ttype: CONST },\n { input: 'sum', tag: 'mo', output: '\\u2211', tex: null, ttype: UNDEROVER },\n { input: 'prod', tag: 'mo', output: '\\u220F', tex: null, ttype: UNDEROVER },\n { input: '^^', tag: 'mo', output: '\\u2227', tex: 'wedge', ttype: CONST },\n { input: '^^^', tag: 'mo', output: '\\u22C0', tex: 'bigwedge', ttype: UNDEROVER },\n { input: 'vv', tag: 'mo', output: '\\u2228', tex: 'vee', ttype: CONST },\n { input: 'vvv', tag: 'mo', output: '\\u22C1', tex: 'bigvee', ttype: UNDEROVER },\n { input: 'nn', tag: 'mo', output: '\\u2229', tex: 'cap', ttype: CONST },\n { input: 'nnn', tag: 'mo', output: '\\u22C2', tex: 'bigcap', ttype: UNDEROVER },\n { input: 'uu', tag: 'mo', output: '\\u222A', tex: 'cup', ttype: CONST },\n { input: 'uuu', tag: 'mo', output: '\\u22C3', tex: 'bigcup', ttype: UNDEROVER },\n { input: 'overset', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n { input: 'underset', tag: 'munder', output: 'stackrel', tex: null, ttype: BINARY },\n\n //binary relation symbols\n { input: '!=', tag: 'mo', output: '\\u2260', tex: 'ne', ttype: CONST },\n { input: ':=', tag: 'mo', output: ':=', tex: null, ttype: CONST },\n { input: 'lt', tag: 'mo', output: '<', tex: null, ttype: CONST },\n { input: 'gt', tag: 'mo', output: '>', tex: null, ttype: CONST },\n { input: '<=', tag: 'mo', output: '\\u2264', tex: 'le', ttype: CONST },\n { input: 'lt=', tag: 'mo', output: '\\u2264', tex: 'leq', ttype: CONST },\n { input: 'gt=', tag: 'mo', output: '\\u2265', tex: 'geq', ttype: CONST },\n { input: '>=', tag: 'mo', output: '\\u2265', tex: 'ge', ttype: CONST },\n { input: '-<', tag: 'mo', output: '\\u227A', tex: 'prec', ttype: CONST },\n { input: '-lt', tag: 'mo', output: '\\u227A', tex: null, ttype: CONST },\n { input: '>-', tag: 'mo', output: '\\u227B', tex: 'succ', ttype: CONST },\n { input: '-<=', tag: 'mo', output: '\\u2AAF', tex: 'preceq', ttype: CONST },\n { input: '>-=', tag: 'mo', output: '\\u2AB0', tex: 'succeq', ttype: CONST },\n { input: 'in', tag: 'mo', output: '\\u2208', tex: null, ttype: CONST },\n { input: '!in', tag: 'mo', output: '\\u2209', tex: 'notin', ttype: CONST },\n { input: 'sub', tag: 'mo', output: '\\u2282', tex: 'subset', ttype: CONST },\n { input: 'sup', tag: 'mo', output: '\\u2283', tex: 'supset', ttype: CONST },\n { input: 'sube', tag: 'mo', output: '\\u2286', tex: 'subseteq', ttype: CONST },\n { input: 'supe', tag: 'mo', output: '\\u2287', tex: 'supseteq', ttype: CONST },\n { input: '-=', tag: 'mo', output: '\\u2261', tex: 'equiv', ttype: CONST },\n { input: '~=', tag: 'mo', output: '\\u2245', tex: 'stackrel{\\\\sim}{=}', notexcopy: true, ttype: CONST }, //back hack b/c mimetex doesn't support /cong\n { input: 'cong', tag: 'mo', output: '~=', tex: null, ttype: DEFINITION },\n { input: '~~', tag: 'mo', output: '\\u2248', tex: 'approx', ttype: CONST },\n { input: 'prop', tag: 'mo', output: '\\u221D', tex: 'propto', ttype: CONST },\n\n //logical symbols\n { input: 'and', tag: 'mtext', output: 'and', tex: null, ttype: SPACE },\n { input: 'or', tag: 'mtext', output: 'or', tex: null, ttype: SPACE },\n { input: 'not', tag: 'mo', output: '\\u00AC', tex: 'neg', ttype: CONST },\n { input: '=>', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'implies', tag: 'mo', output: '=>', tex: null, ttype: DEFINITION },\n { input: 'if', tag: 'mo', output: 'if', tex: null, ttype: SPACE },\n { input: '<=>', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n { input: 'iff', tag: 'mo', output: '<=>', tex: null, ttype: DEFINITION },\n { input: 'AA', tag: 'mo', output: '\\u2200', tex: 'forall', ttype: CONST },\n { input: 'EE', tag: 'mo', output: '\\u2203', tex: 'exists', ttype: CONST },\n { input: '_|_', tag: 'mo', output: '\\u22A5', tex: 'bot', ttype: CONST },\n { input: 'TT', tag: 'mo', output: '\\u22A4', tex: 'top', ttype: CONST },\n { input: '|--', tag: 'mo', output: '\\u22A2', tex: 'vdash', ttype: CONST },\n { input: '|==', tag: 'mo', output: '\\u22A8', tex: 'models', ttype: CONST }, //mimetex doesn't support\n\n //grouping brackets\n { input: '(', tag: 'mo', output: '(', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ')', tag: 'mo', output: ')', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: '[', tag: 'mo', output: '[', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ']', tag: 'mo', output: ']', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: 'left(', tag: 'mo', output: '(', tex: '(', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right)', tag: 'mo', output: ')', tex: ')', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: 'left[', tag: 'mo', output: '[', tex: '[', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right]', tag: 'mo', output: ']', tex: ']', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: '{', tag: 'mo', output: '{', tex: 'lbrace', ttype: LEFTBRACKET },\n { input: '}', tag: 'mo', output: '}', tex: 'rbrace', ttype: RIGHTBRACKET },\n { input: '|', tag: 'mo', output: '|', tex: null, ttype: LEFTRIGHT, val: true },\n { input: '|:', tag: 'mo', output: '|', tex: '|', ttype: LEFTBRACKET, notexcopy: true, val: true },\n { input: ':|', tag: 'mo', output: '|', tex: '|', ttype: RIGHTBRACKET, notexcopy: true, val: true },\n { input: ':|:', tag: 'mo', output: '|', tex: '|', ttype: CONST, notexcopy: true, val: true },\n //{input:\"||\", tag:\"mo\", output:\"||\", tex:null, ttype:LEFTRIGHT},\n { input: '(:', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: ':)', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '<<', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: '>>', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '{:', tag: 'mo', output: '{:', tex: null, ttype: LEFTBRACKET, invisible: true },\n { input: ':}', tag: 'mo', output: ':}', tex: null, ttype: RIGHTBRACKET, invisible: true },\n\n //miscellaneous symbols\n { input: 'int', tag: 'mo', output: '\\u222B', tex: null, ttype: CONST },\n { input: 'dx', tag: 'mi', output: '{:d x:}', tex: null, ttype: DEFINITION },\n { input: 'dy', tag: 'mi', output: '{:d y:}', tex: null, ttype: DEFINITION },\n { input: 'dz', tag: 'mi', output: '{:d z:}', tex: null, ttype: DEFINITION },\n { input: 'dt', tag: 'mi', output: '{:d t:}', tex: null, ttype: DEFINITION },\n { input: 'oint', tag: 'mo', output: '\\u222E', tex: null, ttype: CONST },\n { input: 'del', tag: 'mo', output: '\\u2202', tex: 'partial', ttype: CONST },\n { input: 'grad', tag: 'mo', output: '\\u2207', tex: 'nabla', ttype: CONST },\n { input: '+-', tag: 'mo', output: '\\u00B1', tex: 'pm', ttype: CONST },\n { input: 'O/', tag: 'mo', output: '\\u2205', tex: 'emptyset', ttype: CONST },\n { input: 'oo', tag: 'mo', output: '\\u221E', tex: 'infty', ttype: CONST },\n { input: 'aleph', tag: 'mo', output: '\\u2135', tex: null, ttype: CONST },\n { input: '...', tag: 'mo', output: '...', tex: 'ldots', ttype: CONST },\n { input: ':.', tag: 'mo', output: '\\u2234', tex: 'therefore', ttype: CONST },\n { input: \":'\", tag: 'mo', output: '\\u2235', tex: 'because', ttype: CONST },\n { input: '/_', tag: 'mo', output: '\\u2220', tex: 'angle', ttype: CONST },\n { input: '/_\\\\', tag: 'mo', output: '\\u25B3', tex: 'triangle', ttype: CONST },\n { input: '\\\\ ', tag: 'mo', output: '\\u00A0', tex: null, ttype: CONST, val: true },\n { input: 'frown', tag: 'mo', output: '\\u2322', tex: null, ttype: CONST },\n { input: '%', tag: 'mo', output: '%', tex: '%', ttype: CONST, notexcopy: true },\n { input: 'quad', tag: 'mo', output: '\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'qquad', tag: 'mo', output: '\\u00A0\\u00A0\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'cdots', tag: 'mo', output: '\\u22EF', tex: null, ttype: CONST },\n { input: 'vdots', tag: 'mo', output: '\\u22EE', tex: null, ttype: CONST },\n { input: 'ddots', tag: 'mo', output: '\\u22F1', tex: null, ttype: CONST },\n { input: 'diamond', tag: 'mo', output: '\\u22C4', tex: null, ttype: CONST },\n { input: 'square', tag: 'mo', output: '\\u25A1', tex: 'boxempty', ttype: CONST },\n { input: '|__', tag: 'mo', output: '\\u230A', tex: 'lfloor', ttype: CONST },\n { input: '__|', tag: 'mo', output: '\\u230B', tex: 'rfloor', ttype: CONST },\n { input: '|~', tag: 'mo', output: '\\u2308', tex: 'lceil', ttype: CONST },\n { input: 'lceiling', tag: 'mo', output: '|~', tex: null, ttype: DEFINITION },\n { input: '~|', tag: 'mo', output: '\\u2309', tex: 'rceil', ttype: CONST },\n { input: 'rceiling', tag: 'mo', output: '~|', tex: null, ttype: DEFINITION },\n { input: 'CC', tag: 'mo', output: '\\u2102', tex: 'mathbb{C}', ttype: CONST, notexcopy: true },\n { input: 'NN', tag: 'mo', output: '\\u2115', tex: 'mathbb{N}', ttype: CONST, notexcopy: true },\n { input: 'QQ', tag: 'mo', output: '\\u211A', tex: 'mathbb{Q}', ttype: CONST, notexcopy: true },\n { input: 'RR', tag: 'mo', output: '\\u211D', tex: 'mathbb{R}', ttype: CONST, notexcopy: true },\n { input: 'ZZ', tag: 'mo', output: '\\u2124', tex: 'mathbb{Z}', ttype: CONST, notexcopy: true },\n { input: 'f', tag: 'mi', output: 'f', tex: null, ttype: UNARY, func: true, val: true },\n { input: 'g', tag: 'mi', output: 'g', tex: null, ttype: UNARY, func: true, val: true },\n { input: \"''\", tag: 'mo', output: \"''\", tex: null, val: true },\n { input: \"'''\", tag: 'mo', output: \"'''\", tex: null, val: true },\n { input: \"''''\", tag: 'mo', output: \"''''\", tex: null, val: true },\n\n //standard functions\n { input: 'lim', tag: 'mo', output: 'lim', tex: null, ttype: UNDEROVER },\n { input: 'Lim', tag: 'mo', output: 'Lim', tex: null, ttype: UNDEROVER },\n { input: 'sin', tag: 'mo', output: 'sin', tex: null, ttype: UNARY, func: true },\n { input: 'cos', tag: 'mo', output: 'cos', tex: null, ttype: UNARY, func: true },\n { input: 'tan', tag: 'mo', output: 'tan', tex: null, ttype: UNARY, func: true },\n { input: 'arcsin', tag: 'mo', output: 'arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'arccos', tag: 'mo', output: 'arccos', tex: null, ttype: UNARY, func: true },\n { input: 'arctan', tag: 'mo', output: 'arctan', tex: null, ttype: UNARY, func: true },\n { input: 'sinh', tag: 'mo', output: 'sinh', tex: null, ttype: UNARY, func: true },\n { input: 'cosh', tag: 'mo', output: 'cosh', tex: null, ttype: UNARY, func: true },\n { input: 'tanh', tag: 'mo', output: 'tanh', tex: null, ttype: UNARY, func: true },\n { input: 'cot', tag: 'mo', output: 'cot', tex: null, ttype: UNARY, func: true },\n { input: 'coth', tag: 'mo', output: 'coth', tex: null, ttype: UNARY, func: true },\n { input: 'sech', tag: 'mo', output: 'sech', tex: null, ttype: UNARY, func: true },\n { input: 'csch', tag: 'mo', output: 'csch', tex: null, ttype: UNARY, func: true },\n { input: 'sec', tag: 'mo', output: 'sec', tex: null, ttype: UNARY, func: true },\n { input: 'csc', tag: 'mo', output: 'csc', tex: null, ttype: UNARY, func: true },\n { input: 'log', tag: 'mo', output: 'log', tex: null, ttype: UNARY, func: true },\n { input: 'ln', tag: 'mo', output: 'ln', tex: null, ttype: UNARY, func: true },\n { input: 'abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n {\n input: 'norm',\n tag: 'mo',\n output: 'norm',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\|', '\\\\|']\n },\n {\n input: 'floor',\n tag: 'mo',\n output: 'floor',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lfloor', '\\\\rfloor']\n },\n {\n input: 'ceil',\n tag: 'mo',\n output: 'ceil',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lceil', '\\\\rceil']\n },\n { input: 'Sin', tag: 'mo', output: 'Sin', tex: null, ttype: UNARY, func: true },\n { input: 'Cos', tag: 'mo', output: 'Cos', tex: null, ttype: UNARY, func: true },\n { input: 'Tan', tag: 'mo', output: 'Tan', tex: null, ttype: UNARY, func: true },\n { input: 'Arcsin', tag: 'mo', output: 'Arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'Arccos', tag: 'mo', output: 'Arccos', tex: null, ttype: UNARY, func: true },\n { input: 'Arctan', tag: 'mo', output: 'Arctan', tex: null, ttype: UNARY, func: true },\n { input: 'Sinh', tag: 'mo', output: 'Sinh', tex: null, ttype: UNARY, func: true },\n { input: 'Cosh', tag: 'mo', output: 'Cosh', tex: null, ttype: UNARY, func: true },\n { input: 'Tanh', tag: 'mo', output: 'Tanh', tex: null, ttype: UNARY, func: true },\n { input: 'Cot', tag: 'mo', output: 'Cot', tex: null, ttype: UNARY, func: true },\n { input: 'Sec', tag: 'mo', output: 'Sec', tex: null, ttype: UNARY, func: true },\n { input: 'Csc', tag: 'mo', output: 'Csc', tex: null, ttype: UNARY, func: true },\n { input: 'Log', tag: 'mo', output: 'Log', tex: null, ttype: UNARY, func: true },\n { input: 'Ln', tag: 'mo', output: 'Ln', tex: null, ttype: UNARY, func: true },\n { input: 'Abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n\n { input: 'det', tag: 'mo', output: 'det', tex: null, ttype: UNARY, func: true },\n { input: 'exp', tag: 'mo', output: 'exp', tex: null, ttype: UNARY, func: true },\n { input: 'dim', tag: 'mo', output: 'dim', tex: null, ttype: CONST },\n { input: 'mod', tag: 'mo', output: 'mod', tex: 'text{mod}', ttype: CONST, notexcopy: true },\n { input: 'gcd', tag: 'mo', output: 'gcd', tex: null, ttype: UNARY, func: true },\n { input: 'lcm', tag: 'mo', output: 'lcm', tex: 'text{lcm}', ttype: UNARY, func: true, notexcopy: true },\n { input: 'lub', tag: 'mo', output: 'lub', tex: null, ttype: CONST },\n { input: 'glb', tag: 'mo', output: 'glb', tex: null, ttype: CONST },\n { input: 'min', tag: 'mo', output: 'min', tex: null, ttype: UNDEROVER },\n { input: 'max', tag: 'mo', output: 'max', tex: null, ttype: UNDEROVER },\n\n //arrows\n { input: 'uarr', tag: 'mo', output: '\\u2191', tex: 'uparrow', ttype: CONST },\n { input: 'darr', tag: 'mo', output: '\\u2193', tex: 'downarrow', ttype: CONST },\n { input: 'rarr', tag: 'mo', output: '\\u2192', tex: 'rightarrow', ttype: CONST },\n { input: '->', tag: 'mo', output: '\\u2192', tex: 'to', ttype: CONST },\n { input: '>->', tag: 'mo', output: '\\u21A3', tex: 'rightarrowtail', ttype: CONST },\n { input: '->>', tag: 'mo', output: '\\u21A0', tex: 'twoheadrightarrow', ttype: CONST },\n { input: '>->>', tag: 'mo', output: '\\u2916', tex: 'twoheadrightarrowtail', ttype: CONST },\n { input: '|->', tag: 'mo', output: '\\u21A6', tex: 'mapsto', ttype: CONST },\n { input: 'larr', tag: 'mo', output: '\\u2190', tex: 'leftarrow', ttype: CONST },\n { input: 'harr', tag: 'mo', output: '\\u2194', tex: 'leftrightarrow', ttype: CONST },\n { input: 'rArr', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'lArr', tag: 'mo', output: '\\u21D0', tex: 'Leftarrow', ttype: CONST },\n { input: 'hArr', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n\n //commands with argument\n AMsqrt,\n AMroot,\n AMfrac,\n AMdiv,\n AMover,\n AMsub,\n AMsup,\n { input: 'cancel', tag: 'menclose', output: 'cancel', tex: null, ttype: UNARY },\n { input: 'Sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n { input: 'hat', tag: 'mover', output: '\\u005E', tex: null, ttype: UNARY, acc: true },\n { input: 'bar', tag: 'mover', output: '\\u00AF', tex: 'overline', ttype: UNARY, acc: true },\n { input: 'vec', tag: 'mover', output: '\\u2192', tex: null, ttype: UNARY, acc: true },\n { input: 'tilde', tag: 'mover', output: '~', tex: null, ttype: UNARY, acc: true },\n { input: 'dot', tag: 'mover', output: '.', tex: null, ttype: UNARY, acc: true },\n { input: 'ddot', tag: 'mover', output: '..', tex: null, ttype: UNARY, acc: true },\n {\n input: 'overarc',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n {\n input: 'overparen',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n { input: 'ul', tag: 'munder', output: '\\u0332', tex: 'underline', ttype: UNARY, acc: true },\n { input: 'ubrace', tag: 'munder', output: '\\u23DF', tex: 'underbrace', ttype: UNARY, acc: true },\n { input: 'obrace', tag: 'mover', output: '\\u23DE', tex: 'overbrace', ttype: UNARY, acc: true },\n AMtext,\n AMmbox,\n AMquote,\n //{input:\"var\", tag:\"mstyle\", atname:\"fontstyle\", atval:\"italic\", output:\"var\", tex:null, ttype:UNARY},\n { input: 'color', tag: 'mstyle', ttype: BINARY },\n {\n input: 'bb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'bold',\n output: 'bb',\n tex: 'mathbf',\n ttype: UNARY,\n notexcopy: true\n },\n { input: 'mathbf', tag: 'mstyle', atname: 'mathvariant', atval: 'bold', output: 'mathbf', tex: null, ttype: UNARY },\n {\n input: 'sf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'sf',\n tex: 'mathsf',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathsf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'mathsf',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'bbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'bbb',\n tex: 'mathbb',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'mathbb',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'cc',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'cc',\n tex: 'mathcal',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathcal',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'mathcal',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'tt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'tt',\n tex: 'mathtt',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathtt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'mathtt',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'fr',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'fr',\n tex: 'mathfrak',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathfrak',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'mathfrak',\n tex: null,\n ttype: UNARY\n }\n];\n\nfunction compareNames(s1, s2) {\n if (s1.input > s2.input) return 1;\n else return -1;\n}\n\nvar AMnames = []; //list of input symbols\n\nfunction AMinitSymbols() {\n var i;\n var symlen = AMsymbols.length;\n for (i = 0; i < symlen; i++) {\n if (AMsymbols[i].tex && !(typeof AMsymbols[i].notexcopy == 'boolean' && AMsymbols[i].notexcopy)) {\n AMsymbols.push({\n input: AMsymbols[i].tex,\n tag: AMsymbols[i].tag,\n output: AMsymbols[i].output,\n ttype: AMsymbols[i].ttype,\n acc: AMsymbols[i].acc || false\n });\n }\n }\n refreshSymbols();\n}\n\nfunction refreshSymbols() {\n var i;\n AMsymbols.sort(compareNames);\n for (i = 0; i < AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;\n}\n\nfunction AMremoveCharsAndBlanks(str, n) {\n //remove n characters and any following blanks\n var st;\n if (str.charAt(n) == '\\\\' && str.charAt(n + 1) != '\\\\' && str.charAt(n + 1) != ' ') st = str.slice(n + 1);\n else st = str.slice(n);\n for (var i = 0; i < st.length && st.charCodeAt(i) <= 32; i = i + 1);\n return st.slice(i);\n}\n\nfunction AMposition(arr, str, n) {\n // return position >=n where str appears or would be inserted\n // assumes arr is sorted\n if (n == 0) {\n var h, m;\n n = -1;\n h = arr.length;\n while (n + 1 < h) {\n m = (n + h) >> 1;\n if (arr[m] < str) n = m;\n else h = m;\n }\n return h;\n } else for (var i = n; i < arr.length && arr[i] < str; i++);\n return i; // i=arr.length || arr[i]>=str\n}\n\nfunction AMgetSymbol(str) {\n //return maximal initial substring of str that appears in names\n //return null if there is none\n var k = 0; //new pos\n var j = 0; //old pos\n var mk; //match pos\n var st;\n var tagst;\n var match = '';\n var more = true;\n for (var i = 1; i <= str.length && more; i++) {\n st = str.slice(0, i); //initial substring of length i\n j = k;\n k = AMposition(AMnames, st, j);\n if (k < AMnames.length && str.slice(0, AMnames[k].length) == AMnames[k]) {\n match = AMnames[k];\n mk = k;\n i = match.length;\n }\n more = k < AMnames.length && str.slice(0, AMnames[k].length) >= AMnames[k];\n }\n AMpreviousSymbol = AMcurrentSymbol;\n if (match != '') {\n AMcurrentSymbol = AMsymbols[mk].ttype;\n return AMsymbols[mk];\n }\n // if str[0] is a digit or - return maxsubstring of digits.digits\n AMcurrentSymbol = CONST;\n k = 1;\n st = str.slice(0, 1);\n var integ = true;\n\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n if (st == config.decimalsign) {\n st = str.slice(k, k + 1);\n if ('0' <= st && st <= '9') {\n integ = false;\n k++;\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n }\n }\n if ((integ && k > 1) || k > 2) {\n st = str.slice(0, k - 1);\n tagst = 'mn';\n } else {\n k = 2;\n st = str.slice(0, 1); //take 1 character\n tagst = ('A' > st || st > 'Z') && ('a' > st || st > 'z') ? 'mo' : 'mi';\n }\n if (st == '-' && AMpreviousSymbol == INFIX) {\n AMcurrentSymbol = INFIX;\n return { input: st, tag: tagst, output: st, ttype: UNARY, func: true, val: true };\n }\n return { input: st, tag: tagst, output: st, ttype: CONST, val: true }; //added val bit\n}\n\nfunction AMTremoveBrackets(node) {\n var st;\n if (node.charAt(0) == '{' && node.charAt(node.length - 1) == '}') {\n var leftchop = 0;\n\n st = node.substr(1, 5);\n if (st == '\\\\left') {\n st = node.charAt(6);\n if (st == '(' || st == '[' || st == '{') {\n leftchop = 7;\n } else {\n st = node.substr(6, 7);\n if (st == '\\\\lbrace') {\n leftchop = 13;\n }\n }\n } else {\n st = node.charAt(1);\n if (st == '(' || st == '[') {\n leftchop = 2;\n }\n }\n if (leftchop > 0) {\n //st = node.charAt(node.length-7);\n st = node.substr(node.length - 8);\n if (st == '\\\\right)}' || st == '\\\\right]}' || st == '\\\\right.}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 8) + '}';\n } else if (st == '\\\\rbrace}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 14) + '}';\n }\n }\n }\n return node;\n}\n\n/*Parsing ASCII math expressions with the following grammar\nv ::= [A-Za-z] | greek letters | numbers | other constant symbols\nu ::= sqrt | text | bb | other unary symbols for font commands\nb ::= frac | root | stackrel binary symbols\nl ::= ( | [ | { | (: | {: left brackets\nr ::= ) | ] | } | :) | :} right brackets\nS ::= v | lEr | uS | bSS Simple expression\nI ::= S_S | S^S | S_S^S | S Intermediate expression\nE ::= IE | I/I Expression\nEach terminal symbol is translated into a corresponding mathml node.*/\n\nvar AMnestingDepth, AMpreviousSymbol, AMcurrentSymbol;\n\nfunction AMTgetTeXsymbol(symb) {\n var pre;\n if (typeof symb.val == 'boolean' && symb.val) {\n pre = '';\n } else {\n pre = '\\\\';\n }\n if (symb.tex == null) {\n //can't remember why this was here. Breaks /delta /Delta to removed\n //return (pre+(pre==''?symb.input:symb.input.toLowerCase()));\n return pre + symb.input;\n } else {\n return pre + symb.tex;\n }\n}\n\nfunction AMTparseSexpr(str) {\n //parses str and returns [node,tailstr]\n var symbol,\n node,\n result,\n i,\n st, // rightvert = false,\n newFrag = '';\n str = AMremoveCharsAndBlanks(str, 0);\n symbol = AMgetSymbol(str); //either a token or a bracket or empty\n if (symbol == null || (symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0)) {\n return [null, str];\n }\n if (symbol.ttype == DEFINITION) {\n str = symbol.output + AMremoveCharsAndBlanks(str, symbol.input.length);\n symbol = AMgetSymbol(str);\n }\n switch (symbol.ttype) {\n case UNDEROVER:\n case CONST:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n var texsymbol = AMTgetTeXsymbol(symbol);\n if (texsymbol.charAt(0) == '\\\\' || symbol.tag == 'mo') return [texsymbol, str];\n else return ['{' + texsymbol + '}', str];\n\n case LEFTBRACKET: //read (expr+)\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n\n result = AMTparseExpr(str, true);\n AMnestingDepth--;\n var leftchop = 0;\n if (result[0].substr(0, 6) == '\\\\right') {\n st = result[0].charAt(6);\n if (st == ')' || st == ']' || st == '}') {\n leftchop = 6;\n } else if (st == '.') {\n leftchop = 7;\n } else {\n st = result[0].substr(6, 7);\n if (st == '\\\\rbrace') {\n leftchop = 13;\n }\n }\n }\n if (leftchop > 0) {\n result[0] = result[0].substr(leftchop);\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{' + result[0] + '}';\n else {\n node = '{' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n } else {\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{\\\\left.' + result[0] + '}';\n else {\n node = '{\\\\left' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n }\n return [node, result[1]];\n case TEXT:\n if (symbol != AMquote) str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (str.charAt(0) == '{') i = str.indexOf('}');\n else if (str.charAt(0) == '(') i = str.indexOf(')');\n else if (str.charAt(0) == '[') i = str.indexOf(']');\n else if (symbol == AMquote) i = str.slice(1).indexOf('\"') + 1;\n else i = 0;\n if (i == -1) i = str.length;\n st = str.slice(1, i);\n if (st.charAt(0) == ' ') {\n newFrag = '\\\\ ';\n }\n newFrag += '\\\\text{' + st + '}';\n if (st.charAt(st.length - 1) == ' ') {\n newFrag += '\\\\ ';\n }\n str = AMremoveCharsAndBlanks(str, i + 1);\n return [newFrag, str];\n case UNARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n if (typeof symbol.func == 'boolean' && symbol.func) {\n // functions hack\n st = str.charAt(0);\n if (\n st == '^' ||\n st == '_' ||\n st == '/' ||\n st == '|' ||\n st == ',' ||\n (symbol.input.length == 1 && symbol.input.match(/\\w/) && st != '(')\n ) {\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n } else {\n node = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}';\n return [node, result[1]];\n }\n }\n result[0] = AMTremoveBrackets(result[0]);\n if (symbol.input == 'sqrt') {\n // sqrt\n return ['\\\\sqrt{' + result[0] + '}', result[1]];\n } else if (symbol.input == 'cancel') {\n // cancel\n return ['\\\\cancel{' + result[0] + '}', result[1]];\n } else if (typeof symbol.rewriteleftright != 'undefined') {\n // abs, floor, ceil\n return [\n '{\\\\left' + symbol.rewriteleftright[0] + result[0] + '\\\\right' + symbol.rewriteleftright[1] + '}',\n result[1]\n ];\n } else if (typeof symbol.acc == 'boolean' && symbol.acc) {\n // accent\n //return ['{'+AMTgetTeXsymbol(symbol)+'{'+result[0]+'}}',result[1]];\n return [AMTgetTeXsymbol(symbol) + '{' + result[0] + '}', result[1]];\n } else {\n // font change command\n return ['{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}', result[1]];\n }\n case BINARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result[0] = AMTremoveBrackets(result[0]);\n var result2 = AMTparseSexpr(result[1]);\n if (result2[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result2[0] = AMTremoveBrackets(result2[0]);\n if (symbol.input == 'color') {\n newFrag = '{\\\\color{' + result[0].replace(/[\\{\\}]/g, '') + '}' + result2[0] + '}';\n } else if (symbol.input == 'root') {\n newFrag = '{\\\\sqrt[' + result[0] + ']{' + result2[0] + '}}';\n } else {\n newFrag = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}{' + result2[0] + '}}';\n }\n return [newFrag, result2[1]];\n case INFIX:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return [symbol.output, str];\n case SPACE:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{\\\\quad\\\\text{' + symbol.input + '}\\\\quad}', str];\n case LEFTRIGHT:\n // if (rightvert) return [null,str]; else rightvert = true;\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseExpr(str, false);\n AMnestingDepth--;\n var st = '';\n st = result[0].charAt(result[0].length - 1);\n //alert(result[0].lastChild+\"***\"+st);\n if (st == '|' && str.charAt(0) !== ',') {\n // its an absolute value subterm\n node = '{\\\\left|' + result[0] + '}';\n return [node, result[1]];\n } else {\n // the \"|\" is a \\mid\n node = '{\\\\mid}';\n return [node, str];\n }\n\n default:\n //alert(\"default\");\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n }\n}\n\nfunction AMTparseIexpr(str) {\n var symbol, sym1, sym2, node, result;\n str = AMremoveCharsAndBlanks(str, 0);\n sym1 = AMgetSymbol(str);\n result = AMTparseSexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input != '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n // if (symbol.input == \"/\") result = AMTparseIexpr(str); else\n result = AMTparseSexpr(str);\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n // if (symbol.input == \"/\") AMTremoveBrackets(node);\n if (symbol.input == '_') {\n sym2 = AMgetSymbol(str);\n if (sym2.input == '^') {\n str = AMremoveCharsAndBlanks(str, sym2.input.length);\n var res2 = AMTparseSexpr(str);\n res2[0] = AMTremoveBrackets(res2[0]);\n str = res2[1];\n node = '{' + node;\n node += '_{' + result[0] + '}';\n node += '^{' + res2[0] + '}';\n node += '}';\n } else {\n node += '_{' + result[0] + '}';\n }\n } else {\n //must be ^\n //node = '{'+node+'}^{'+result[0]+'}';\n node = node + '^{' + result[0] + '}';\n }\n if (typeof sym1.func != 'undefined' && sym1.func) {\n sym2 = AMgetSymbol(str);\n if (sym2.ttype != INFIX && sym2.ttype != RIGHTBRACKET && (sym1.input.length > 1 || sym2.ttype == LEFTBRACKET)) {\n result = AMTparseIexpr(str);\n node = '{' + node + result[0] + '}';\n str = result[1];\n }\n }\n }\n\n return [node, str];\n}\n\nfunction AMTparseExpr(str, rightbracket) {\n var symbol,\n node,\n result,\n i,\n nodeList = [],\n newFrag = '';\n var addedright = false;\n do {\n str = AMremoveCharsAndBlanks(str, 0);\n result = AMTparseIexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input == '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseIexpr(str);\n\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n node = AMTremoveBrackets(node);\n node = '\\\\frac' + '{' + node + '}';\n node += '{' + result[0] + '}';\n newFrag += node;\n symbol = AMgetSymbol(str);\n } else if (node != undefined) newFrag += node;\n } while (\n ((symbol.ttype != RIGHTBRACKET && (symbol.ttype != LEFTRIGHT || rightbracket)) || AMnestingDepth == 0) &&\n symbol != null &&\n symbol.output != ''\n );\n if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) {\n // if (AMnestingDepth > 0) AMnestingDepth--;\n var len = newFrag.length;\n if (len > 2 && newFrag.charAt(0) == '{' && newFrag.indexOf(',') > 0) {\n //could be matrix (total rewrite from .js)\n var right = newFrag.charAt(len - 2);\n if (right == ')' || right == ']') {\n var left = newFrag.charAt(6);\n if ((left == '(' && right == ')' && symbol.output != '}') || (left == '[' && right == ']')) {\n var mxout = '';\n var pos = new Array(); //position of commas\n pos.push(0);\n var matrix = true;\n var mxnestingd = 0;\n var subpos = [];\n subpos[0] = [0];\n var lastsubposstart = 0;\n var mxanynestingd = 0;\n var columnaligns = '';\n for (i = 1; i < len - 1; i++) {\n if (newFrag.charAt(i) == left) mxnestingd++;\n if (newFrag.charAt(i) == right) {\n mxnestingd--;\n if (mxnestingd == 0 && newFrag.charAt(i + 2) == ',' && newFrag.charAt(i + 3) == '{') {\n pos.push(i + 2);\n lastsubposstart = i + 2;\n subpos[lastsubposstart] = [i + 2];\n }\n }\n if (newFrag.charAt(i) == '[' || newFrag.charAt(i) == '(' || newFrag.charAt(i) == '{') {\n mxanynestingd++;\n }\n if (newFrag.charAt(i) == ']' || newFrag.charAt(i) == ')' || newFrag.charAt(i) == '}') {\n mxanynestingd--;\n }\n if (newFrag.charAt(i) == ',' && mxanynestingd == 1) {\n subpos[lastsubposstart].push(i);\n }\n if (mxanynestingd < 0) {\n //happens at the end of the row\n if (lastsubposstart == i + 1) {\n //if at end of row, skip to next row\n i++;\n } else {\n //misformed something - abandon treating as a matrix\n matrix = false;\n }\n }\n }\n\n pos.push(len);\n var lastmxsubcnt = -1;\n if (mxnestingd == 0 && pos.length > 0 && matrix) {\n for (i = 0; i < pos.length - 1; i++) {\n if (i > 0) mxout += '\\\\\\\\';\n if (i == 0) {\n //var subarr = newFrag.substr(pos[i]+7,pos[i+1]-pos[i]-15).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 7, pos[i + 1] - pos[i] - 15)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 7, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n } else {\n //var subarr = newFrag.substr(pos[i]+8,pos[i+1]-pos[i]-16).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 8, pos[i + 1] - pos[i] - 16)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 8, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n }\n for (j = subarr.length - 1; j >= 0; j--) {\n if (subarr[j] == '{\\\\mid}') {\n if (i == 0) {\n columnaligns = '|' + columnaligns;\n }\n subarr.splice(j, 1);\n } else if (i == 0) {\n columnaligns = 'c' + columnaligns;\n }\n }\n if (lastmxsubcnt > 0 && subarr.length != lastmxsubcnt) {\n matrix = false;\n } else if (lastmxsubcnt == -1) {\n lastmxsubcnt = subarr.length;\n }\n mxout += subarr.join('&');\n }\n }\n mxout = '\\\\begin{array}{' + columnaligns + '} ' + mxout + '\\\\end{array}';\n\n if (matrix) {\n newFrag = mxout;\n }\n }\n }\n }\n\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (typeof symbol.invisible != 'boolean' || !symbol.invisible) {\n node = '\\\\right' + AMTgetTeXsymbol(symbol); //AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));\n newFrag += node;\n addedright = true;\n } else {\n newFrag += '\\\\right.';\n addedright = true;\n }\n }\n if (AMnestingDepth > 0 && !addedright) {\n newFrag += '\\\\right.'; //adjust for non-matching left brackets\n //todo: adjust for non-matching right brackets\n }\n\n return [newFrag, str];\n}\n\nexport default function AMTparseAMtoTeX(str) {\n AMnestingDepth = 0;\n str = str.replace(/(&nbsp;|\\u00a0|&#160;)/g, '');\n str = str.replace(/&gt;/g, '>');\n str = str.replace(/&lt;/g, '<');\n if (str.match(/\\S/) == null) {\n return '';\n }\n return AMTparseExpr(str.replace(/^\\s+/g, ''), false)[0];\n}\n\nAMinitSymbols();\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown katex extension for markdown\n */\n\nif (typeof window === 'undefined') {\n throw Error('The showdown katex extension can only be used in browser environment!');\n}\n\nimport asciimathToTex from './asciimath2tex';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof katex === 'undefined') {\n var katex = window.katex || undefined;\n}\n\nif (typeof renderMathInElement === 'undefined') {\n var RenderMathInElement = window.renderMathInElement || undefined;\n}\n\nlet katexElementCount = 0;\nfunction hasKatex() {\n return typeof RenderMathInElement !== 'undefined' && RenderMathInElement && typeof katex !== 'undefined' && katex\n ? true\n : false;\n}\n\nlet dync = false;\nconst cssCdnName = 'katexCSS';\nfunction dyncLoadScript(callback) {\n const sync = hasKatex();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('katex')\n .then(name => {\n katex = utils.interopDefault(window[name]);\n return cdnjs.loadScript('renderMathInElement');\n })\n .then(name => {\n RenderMathInElement = utils.interopDefault(window[name]);\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n });\n return sync;\n }\n }\n\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n return sync;\n}\n\nfunction onRenderKatex(resolve, res) {\n if (hasKatex()) {\n const id = res.id;\n const name = res.className;\n const input = res.input;\n const data = res.data;\n const cssLink = res.cssLink;\n const config = res.options;\n const doc = res.element.ownerDocument;\n let html = '';\n if (data instanceof Array) {\n data.forEach(code => {\n if (code === '') {\n html += '<br>';\n } else {\n const math = katex.renderToString(code, config);\n html += cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n });\n } else {\n const math = katex.renderToString(data, config);\n html = cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n res.element.parentNode.outerHTML = html;\n --katexElementCount;\n if (!katexElementCount) {\n RenderMathInElement(doc.body, config);\n }\n resolve(true);\n } else {\n setTimeout(() => {\n onRenderKatex(resolve, res);\n }, 50);\n }\n}\n\nfunction renderKatex(element, config, isAsciimath) {\n return new Promise(resolve => {\n let latex;\n const meta = utils.createElementMeta('katex', element, code => {\n let data;\n latex = code;\n const codes = code.split(/\\n[ \\f\\r\\t\\v]*\\n/);\n if (codes.length > 1) {\n data = new Array();\n codes.forEach(code => {\n code = code.trim();\n if (code !== '') {\n code = isAsciimath ? asciimathToTex(code) : code;\n }\n data.push(code);\n });\n } else {\n data = isAsciimath ? asciimathToTex(latex) : latex;\n }\n return data;\n });\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(cssCdnName);\n meta.input = latex;\n meta.options = config;\n onRenderKatex(resolve, meta);\n });\n}\n\nfunction renderBlockElements(latex, asciimath, config) {\n katexElementCount = latex.length + asciimath.length;\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n latex.forEach(element => {\n promiseArray.push(renderKatex(element, config, false));\n });\n asciimath.forEach(element => {\n promiseArray.push(renderKatex(element, config, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n/**\n * https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n * @param {string} str\n * @returns {string} regexp escaped string\n */\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\$^|]/g, '\\\\$&');\n}\n\n// katex config\nconst getConfig = (userConfig = {}) => {\n let config = {\n displayMode: true,\n throwOnError: false, // fail silently\n errorColor: '#ff0000',\n delimiters: null,\n ...userConfig\n };\n\n function _isEmptyArray(a) {\n if (!Array.isArray(a) || !a.length) {\n return false;\n }\n\n return true;\n }\n\n function _isObjectProperty(obj, prop) {\n if (!obj || typeof obj !== 'object' || !obj.hasOwnProperty(prop)) {\n return false;\n }\n return true;\n }\n\n function _getDelimiter(obj, style, type) {\n if (!_isObjectProperty(obj, style) || !_isObjectProperty(obj[style], type) || !_isEmptyArray(obj[style][type])) {\n return false;\n }\n\n obj[style][type].forEach(delimiter => {\n delimiter.display = type === 'inline' ? false : true;\n if (style === 'asciimath') {\n delimiter.asciimath = true;\n }\n });\n return obj[style][type];\n }\n\n if (!Array.isArray(config.delimiters)) {\n config.delimiters = []\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'display') || [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true } \n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'inline') || [\n { left: '\\\\(', right: '\\\\)', display: false }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'display') || [\n { left: '@@', right: '@@', display: true, asciimath: true }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'inline') || [\n { left: '@ ', right: ' @', display: false, asciimath: true },\n { left: \"\\\\~\", right: \"\\\\~\", display: false, asciimath: true }\n ]\n );\n } else if (!config.delimiters.length) {\n config.delimiters = [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true }, \n { left: '\\\\(', right: '\\\\)', display: false },\n { left: '@@', right: '@@', display: true, asciimath: true },\n { left: '@ ', right: ' @', display: false, asciimath: true },\n { left: \"\\\\~\", right: \"\\\\~\", display: false, asciimath: true }\n ];\n }\n return config;\n};\n\nfunction showdownKatex(userConfig) {\n let inlineMathCount = 0;\n const config = getConfig(userConfig);\n const mathDelimiters = config.delimiters.map(({ left, right, display, asciimath }) => {\n const test = new RegExp(`${escapeRegExp(left)}(.+?)${escapeRegExp(right)}`, 'g');\n const replacer = (match, math) => {\n ++inlineMathCount;\n if (asciimath) {\n math = asciimathToTex(math);\n }\n if (display) {\n return `\\\\[${math}\\\\]`;\n }\n return `\\\\(${math}\\\\)`;\n };\n return { test, replacer };\n });\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n if (mathDelimiters.length) {\n // convert inline math to inline latex\n // ignore anything in code and pre elements\n wrapper.querySelectorAll(':not(code):not(pre)').forEach(el => {\n /** @type Text[] */\n const textNodes = [...el.childNodes].filter(\n // skip \"empty\" text nodes\n node => node.nodeName === '#text' && node.nodeValue.trim()\n );\n\n textNodes.forEach(node => {\n const newText = mathDelimiters.reduce(\n (acc, { test, replacer }) => acc.replace(test, replacer),\n node.nodeValue\n );\n node.nodeValue = newText;\n });\n });\n }\n\n // find the math in code blocks\n const latex = wrapper.querySelectorAll('code.latex.language-latex');\n const asciimath = wrapper.querySelectorAll('code.asciimath.language-asciimath');\n\n if (!latex.length && !asciimath.length) {\n if (inlineMathCount > 0) {\n this.config.cssLink = cdnjs.getSrc(cssCdnName);\n const that = this;\n function asyncRenderKatex(resolve, render) {\n if (hasKatex()) {\n render(wrapper.ownerDocument.body, that.config);\n resolve(true);\n } else {\n setTimeout(() => {\n asyncRenderKatex(resolve, render);\n }, 50);\n }\n }\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render inline katex elements.`);\n return new Promise(resolve => {\n dyncLoadScript(render => {\n asyncRenderKatex(resolve, render);\n });\n }).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render inline katex elements.`);\n return obj;\n });\n }\n\n return false;\n }\n\n config.cssLink = cdnjs.getSrc(cssCdnName);\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render katex elements.`);\n return renderBlockElements(latex, asciimath, this.config).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render katex elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownKatex;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown echarts extension for markdown\n */\n'use strict';\n\nconst extName = \"echarts\";\n\nif (typeof window === 'undefined') {\n throw Error(`The showdown ${extName} extension can only be used in browser environment!`);\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof echarts === 'undefined') {\n var echarts = window.echarts || undefined;\n}\n\nfunction hasEcharts() {\n return !!echarts;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasEcharts();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadScript(extName).then(name => {\n echarts = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction onRenderEcharts(resolve, res) {\n if (hasEcharts()) {\n const id = res.id;\n const name = res.className;\n const node = res.element.parentNode;\n // // 在 SSR 模式下第一个参数不需要再传入 DOM 对象\n // let chart = echarts.init(null, null, {\n // renderer: 'svg', // 必须使用 SVG 模式\n // ssr: true,\n // width: res.config.width, // 需要指明高和宽\n // height: res.config.height\n // });\n // // 像正常使用一样 setOption\n // const option = JSON.parse(data);\n // chart.setOption(option);\n // // 输出字符串\n // const svg = chart.renderToSVGString();\n // // 如果不再需要图表,调用 dispose 以释放内存\n // chart.dispose();\n // chart = null;\n node.outerHTML = `<div id=\"${id}\" class=\"${name}\"></div>`;\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderEcharts(resolve, res);\n }, 20);\n}\n\n\n/**\n * render echarts graphs\n */\nfunction renderEcharts(element, scripts, config) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n config = JSON.stringify({ ...config, ssr: false });\n const data = JSON.stringify(JSON.parse(meta.data));\n const script = {\n id: meta.id,\n code: `(function() {\n let el = document.getElementById('${meta.id}');\n if (el){\n let config = JSON.parse('${config}');\n let chart = echarts.init(el, null, config);\n let option = JSON.parse('${data}');\n chart.setOption(option);\n }\n })();`\n }\n scripts.push(script);\n return new Promise(resolve => {\n onRenderEcharts(resolve, meta);\n });\n}\n\n// <div class=\"echarts\"></div>\nfunction renderEchartsElements(elements, scripts, config) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderEcharts(element, scripts, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// echarts default config\nconst getConfig = (config = {}) => ({\n renderer: 'svg',\n ssr: false,\n width: 400,\n height: 300,\n tooltip: {\n show: true\n },\n animation: true,\n ...config\n});\n\nfunction showdownEcharts(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the echarts in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n const scripts = obj.scripts;\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render ${extName} elements.`);\n return renderEchartsElements(elements, scripts, this.config).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render ${extName} elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownEcharts;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown mermaid extension for markdown\n */\n'use strict';\n\nconst extName = \"mermaid\";\n\nif (typeof window === 'undefined') {\n throw Error('The showdown mermaid extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof mermaid === 'undefined') {\n var mermaid = window.mermaid || undefined;\n}\n\nfunction hasMermaid() {\n return typeof mermaid !== 'undefined' && mermaid ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript(config) {\n // When window object exists,\n // it means browser environment, otherwise node.js environment.\n // In browser environment, html need to be rendered asynchronously.\n const sync = hasMermaid();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadScript(extName).then(name => {\n mermaid = utils.interopDefault(window[name]);\n mermaid.initialize(config);\n });\n return sync\n }\n }\n\n mermaid.initialize(config);\n return sync;\n}\n\nfunction onRenderMermaid(resolve, res) {\n if (hasMermaid()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const node = res.element.parentNode;\n mermaid.render(id, data).then(m =>{\n node.outerHTML = `<div class=\"${name}\">${m.svg}</div>`;\n resolve(true);\n });\n return;\n }\n\n setTimeout(() => {\n onRenderMermaid(resolve, res);\n }, 10);\n}\n\n/**\n * render mermaid graphs\n */\nfunction renderMermaid(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n onRenderMermaid(resolve, meta);\n });\n}\n\n// <div class=\"mermaid\"></div>\nfunction renderMermaidElements(elements, config) {\n dyncLoadScript(config);\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderMermaid(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// mermaid default config\nconst getConfig = (config = {}) => ({\n theme: 'forest',\n logLevel: 4,\n startOnLoad: false,\n arrowMarkerAbsolute: false,\n flowchart: {\n curve: 'basis'\n },\n gantt: {\n axisFormat: '%m/%d/%Y'\n },\n sequence: {\n actorMargin: 50\n },\n ...config\n});\n\nfunction showdownMermaid(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the mermaid in code blocks\n const elements = wrapper.querySelectorAll('code.mermaid.language-mermaid');\n if (!elements.length) {\n return false;\n }\n\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render mermaid elements.`);\n return renderMermaidElements(elements, this.config).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render mermaid elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownMermaid;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: zlib codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n'use strict';\n\nimport zlib from 'zlib';\n\nfunction encode64(data) {\n var r = '';\n for (var i = 0; i < data.length; i += 3) {\n if (i + 2 == data.length) {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), 0);\n } else if (i + 1 == data.length) {\n r += append3bytes(data.charCodeAt(i), 0, 0);\n } else {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), data.charCodeAt(i + 2));\n }\n }\n return r;\n}\n\nfunction append3bytes(b1, b2, b3) {\n var c1 = b1 >> 2;\n var c2 = ((b1 & 0x3) << 4) | (b2 >> 4);\n var c3 = ((b2 & 0xf) << 2) | (b3 >> 6);\n var c4 = b3 & 0x3f;\n var r = '';\n r += encode6bit(c1 & 0x3f);\n r += encode6bit(c2 & 0x3f);\n r += encode6bit(c3 & 0x3f);\n r += encode6bit(c4 & 0x3f);\n return r;\n}\n\nfunction encode6bit(b) {\n if (b < 10) {\n return String.fromCharCode(48 + b);\n }\n b -= 10;\n if (b < 26) {\n return String.fromCharCode(65 + b);\n }\n b -= 26;\n if (b < 26) {\n return String.fromCharCode(97 + b);\n }\n b -= 26;\n if (b == 0) {\n return '-';\n }\n if (b == 1) {\n return '_';\n }\n return '?';\n}\n\nfunction decode6bit(cc) {\n var c = cc.charCodeAt(0);\n if (cc === '_') return 63;\n if (cc === '-') return 62;\n if (c >= 97) return c - 61; // - 97 + 26 + 10\n if (c >= 65) return c - 55; // - 65 + 10\n if (c >= 48) return c - 48;\n return '?';\n}\n\nfunction extract3bytes(data) {\n var c1 = decode6bit(data[0]);\n var c2 = decode6bit(data[1]);\n var c3 = decode6bit(data[2]);\n var c4 = decode6bit(data[3]);\n var b1 = (c1 << 2) | ((c2 >> 4) & 0x3f);\n var b2 = ((c2 << 4) & 0xf0) | ((c3 >> 2) & 0xf);\n var b3 = ((c3 << 6) & 0xc0) | (c4 & 0x3f);\n return [b1, b2, b3];\n}\n\nfunction decode64(data) {\n var r = '';\n var i = 0;\n for (i = 0; i < data.length; i += 4) {\n var t = extract3bytes(data.substring(i, i + 4));\n r = r + String.fromCharCode(t[0]);\n r = r + String.fromCharCode(t[1]);\n r = r + String.fromCharCode(t[2]);\n }\n return r;\n}\n\nfunction encode(data) {\n return encode64(\n zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('binary')\n );\n}\n\nfunction decode(data) {\n return zlib.inflateRawSync(Buffer.from(decode64(data), 'binary')).toString();\n}\n\nfunction zEncode(data) {\n return zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('base64');\n}\n\nfunction zDecode(data) {\n return zlib.inflateRawSync(Buffer.from(data, 'base64')).toString();\n}\n\nconst brEncode =\n typeof zlib.brotliCompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib\n .brotliCompressSync(Buffer.from(data), {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 11\n }\n })\n .toString('base64');\n };\n\nconst brDecode =\n typeof zlib.brotliDecompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib.brotliDecompressSync(Buffer.from(data, 'base64')).toString();\n };\n\nconst zlibcodec = { encode, decode, brEncode, brDecode };\nexport { zlibcodec as default, encode, decode, zEncode, zDecode, brEncode, brDecode };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: plantuml codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n\n'use strict';\n\nimport * as zlibcodec from './zlib-codec.js';\n\nfunction encodeuml(data) {\n const startuml = '@startuml';\n const enduml = '@enduml';\n const s = `${startuml}${String(data.split(startuml)[1]).split(enduml)[0] || ''}${enduml}`;\n return zlibcodec.encode(s);\n}\n\nfunction decodeuml(data) {\n return zlibcodec.decode(data);\n}\n\nconst plantumlcodec = {\n encodeuml,\n decodeuml\n};\n\nexport { plantumlcodec as default, encodeuml, decodeuml };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown plantuml extension for markdown\n */\n'use strict';\n\nimport plantumlcodec from '../utils/plantuml-codec.js';\n\nconst defaultUmlWebsite = 'www.plantuml.com/plantuml';\nconst defaultImageFormat = 'img';\n\nlet umlElementCount = 0;\nfunction renderPlantumlElement(element, config) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return resolve(false);\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const imageFormat = config.imageFormat;\n if (imageFormat === 'svg') {\n const id = 'plantuml-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n if (typeof config.svgRender === 'function' && config.svgRender) {\n config.svgRender(id, name, code, umlElementCount).then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n } else if (typeof window !== 'undefined' && window.fetch && window.dispatchEvent) {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n window\n .fetch(src)\n .then(response => {\n if (response.ok) {\n return response.text();\n }\n })\n .then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n }\n } else {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n element.parentNode.outerHTML = `<div class=\"${name}\"><img src='${src}' alt=''></img></div>`;\n return resolve(true);\n }\n });\n}\n\n// <div class=\"plantuml\"></div>\nfunction renderPlantumlElements(elements, config) {\n umlElementCount = elements.length;\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderPlantumlElement(element, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Plantuml default config\nconst getConfig = (config = {}) => ({\n umlWebSite: defaultUmlWebsite,\n imageFormat: defaultImageFormat,\n svgRender: null,\n ...config\n});\n\nfunction showdownPlantuml(userConfig) {\n const config = getConfig(userConfig);\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the plantuml in code blocks\n const elements = wrapper.querySelectorAll('code.plantuml.language-plantuml');\n if (!elements.length) {\n return false;\n }\n\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render plantuml elements.`);\n return renderPlantumlElements(elements, this.config).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render plantuml elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownPlantuml;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown railroad extension for markdown\n */\n'use strict';\n\nconst extName = \"railroad\";\nconst cssCdnName = 'railroadCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown railroad extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nlet railroad = false;\nfunction hasRailroad() {\n return railroad;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasRailroad();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs.loadScript(extName).then(() => {\n railroad = true;\n });\n }\n }\n return sync;\n}\n\nfunction onRenderRailroad(resolve, res) {\n if (hasRailroad()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const cssLink = res.cssLink;\n const railroadElement = window.eval(data).format();\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-railroad\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n railroadElement.addTo(doc.getElementById(id));\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderRailroad(resolve, res);\n }, 10);\n}\n\n/**\n * render railroad graphs\n */\nfunction renderRailroad(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n\n meta.cssLink = cdnjs.getSrc(cssCdnName);\n onRenderRailroad(resolve, meta);\n });\n}\n\n// <div class=\"railroad\"></div>\nfunction renderRailroadElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderRailroad(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownRailroad() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the railroad in code blocks\n const elements = wrapper.querySelectorAll('code.railroad.language-railroad');\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(cssCdnName)\n };\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render railroad elements.`);\n return renderRailroadElements(elements).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render railroad elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownRailroad;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown sequence extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown sequence extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\n\n// js-sequence-diagrams can create a global object named Diagrams of window,\n// To be compatible with railroad diagrams extension that also has window.Diagram object,\n// You need to save the original Diagrams object of railroad diagrams extension here.\nlet diagram;\nif (typeof window !== 'undefined') {\n if (window.Diagram) {\n diagram = window.Diagram;\n if (window.Diagram['Signal']) {\n var sequence = window.Diagram;\n }\n }\n}\n\nconst themes = ['simple', 'hand'];\nif (typeof sequence === 'undefined' && typeof window !== 'undefined') {\n var sequence = window.SequenceJS;\n}\n\nfunction hasSequence() {\n return !!sequence;\n}\n\nlet dync = false;\nconst cssCdnName = 'sequenceCSS';\nfunction dyncLoadScript() {\n const sync = hasSequence();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('WebFont')\n .then(() => {\n return cdnjs.loadScript('Snap');\n })\n .then(() => {\n return cdnjs.loadScript('underscore');\n })\n .then(() => {\n // You need to save the original Diagrams object of railroad diagrams extension here.\n if (!diagram && window['Diagram']) {\n diagram = window['Diagram'];\n }\n return cdnjs.loadScript('sequence');\n })\n .then(() => {\n sequence = window['Diagram'];\n window.SequenceJS = sequence;\n // You need to replace the original Diagrams object of railroad diagrams extension here.\n if (diagram) {\n window['Diagram'] = diagram;\n }\n });\n }\n }\n return sync;\n}\n\n/**\n * render sequence graphs\n */\nfunction renderSequence(element) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const sync = dyncLoadScript();\n const cssLink = cdnjs.getSrc(cssCdnName);\n const code = element.textContent.trim();\n const name = 'js-sequence' + (!diagramClass ? '' : ' ') + diagramClass;\n const id = 'sequence-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n if (cssLink) {\n element.className = element.className + (!element.className ? '' : ' ') + 'css-sequence';\n element.dataset.css = cssLink;\n }\n if (!sync && typeof window !== 'undefined' && window.dispatchEvent) {\n Promise.resolve(id).then(elementid => {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: elementid,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink\n }\n })\n );\n });\n } else {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: id,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink\n }\n })\n );\n }\n }\n}\n\n// <div class=\"sequence\"></div>\nfunction renderSequenceElements(elements) {\n if (!elements.length) {\n return false;\n }\n elements.forEach(element => {\n renderSequence(element);\n });\n return true;\n}\n\nfunction onRenderSequence(element) {\n if (hasSequence()) {\n const id = element.id;\n const name = element.className;\n const data = element.data;\n const cssLink = element.cssLink;\n let theme = 'hand';\n const langattr = element.langattr;\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.theme && themes.indexOf(obj.theme) != -1) {\n theme = obj.theme;\n }\n }\n let el = window.document.getElementById(id);\n if (el) {\n el.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-sequence\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n el = window.document.getElementById(id);\n const d = sequence.parse(data);\n const options = { theme: theme };\n d.drawSVG(el ? el : id, options);\n return;\n }\n }\n setTimeout(() => {\n onRenderSequence(element);\n }, 50);\n}\n\nfunction showdownSequence() {\n const parser = new DOMParser();\n\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n // Listen sequence custom event\n window.addEventListener('sequence', event => {\n if (event.detail) {\n onRenderSequence(event.detail);\n }\n });\n }\n\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n\n // find the sequence in code blocks\n const elements = wrapper.querySelectorAll('code.sequence.language-sequence');\n if (elements.length) {\n this.config = {\n cssLink: cdnjs.getSrc(cssCdnName)\n };\n }\n if (!renderSequenceElements(elements)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownSequence;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown wavedrom extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown wavedrom extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof WaveDrom === 'undefined') {\n var WaveDrom = window.WaveDrom || undefined;\n}\n\nlet wdCount = 0;\nlet indexWD = 0;\nfunction hasWavedrom() {\n return !!WaveDrom;\n}\n\nlet dync = false;\nfunction dyncLoadScript(skin) {\n const sync = hasWavedrom();\n if (!sync && !dync) {\n dync = true;\n if (typeof window !== 'undefined') {\n cdnjs\n .loadScript({ WaveDromSkin: skin })\n .then(() => {\n return cdnjs.loadScript('WaveDrom');\n })\n .then(name => {\n WaveDrom = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction onRenderWavedrom(resolve, res) {\n if (hasWavedrom()) {\n const index = res.index;\n const id = res.id;\n const name = res.className;\n const data = res.data;\n let element = res.element;\n const doc = element.ownerDocument;\n element.parentNode.outerHTML = utils.renderCacheElement(doc, id + index, name, el => {\n const obj = window.eval(`(${data})`);\n WaveDrom.RenderWaveForm(index, obj, id);\n // Replace the created cache element with the original element with the same id.\n const wdel = document.getElementById('WaveDrom_Display_' + index);\n if (el != wdel) {\n while (wdel.childNodes.length) {\n el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n }\n }\n });\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderWavedrom(resolve, res);\n }, 10);\n}\n/**\n * render wavedrom graphs\n */\nfunction renderWavedrom(element) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const index = indexWD;\n ++indexWD;\n // When index of wavwdrom is 0, there will be some special logic in the WaveDrom lib.\n // So the index needs to be cleared after all WavwDrom element are rendered.\n --wdCount;\n if (!wdCount) {\n indexWD = 0;\n }\n\n //const id = 'wavedrom-' + Date.now() + '-' + Math.floor(Math.random() * 10000) + '-';\n const id = 'WaveDrom_Display_';\n element.id = id + index;\n const res = {\n element: element,\n index: index,\n id: id,\n className: name,\n data: code\n };\n onRenderWavedrom(resolve, res);\n // const id = 'WaveDrom_Display_' + index;\n // element.parentNode.outerHTML = cdnjs.renderCacheElement(element.ownerDocument, id, name, el => {\n // const obj = window.eval(`(${code})`);\n // WaveDrom.RenderWaveForm(index, obj, 'WaveDrom_Display_');\n // // Replace the created cache element with the original element with the same id.\n // const wdel = document.getElementById('WaveDrom_Display_' + index);\n // if (el != wdel) {\n // while (wdel.childNodes.length) {\n // el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n // }\n // }\n // });\n });\n}\n\n// <div class=\"wavedrom\"></div>\nfunction renderWavedromElements(elements, skin) {\n dyncLoadScript(skin);\n return new Promise(resolve => {\n const promiseArray = [];\n wdCount = elements.length;\n elements.forEach(element => {\n promiseArray.push(renderWavedrom(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// wavedrom default config\nconst getConfig = (config = {}) => ({\n skin: 'default',\n ...config\n});\n\nfunction showdownWavedrom(skinConfig) {\n const config = getConfig(skinConfig)\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the wavedrom in code blocks\n const elements = wrapper.querySelectorAll('code.wavedrom.language-wavedrom');\n if (!elements.length) {\n return false;\n }\n\n console.log(`${new Date().Format('yyyy-MM-dd hh:mm:ss.S')} Begin render wavedrom elements.`);\n return renderWavedromElements(elements, this.config.skin).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd hh:mm:ss.S')} End render wavedrom elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownWavedrom;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown footnotes extension for markdown\n */\n'use strict';\n\nfunction showdownFootnotes() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(/^\\[\\^([\\d\\w]+)\\]:\\s*((\\n+(\\s{2,4}|\\t).+)+)$/gm, (str, name, rawContent, _, padding) => {\n const content = converter.makeHtml(rawContent.replace(new RegExp(`^${padding}`, 'gm'), ''));\n return `<div class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>:${content}</div>`;\n })\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(\n /^\\[\\^([\\d\\w]+)\\]:( |\\n)((.+\\n)*.+)$/gm,\n (str, name, _, content) =>\n `<small class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>: ${content}</small>`\n )\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(/\\[\\^([\\d\\w]+)\\]/m, (str, name) => `<a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>`)\n }\n ];\n}\n\nexport default showdownFootnotes;\n","/*\n * Copyright (c) 2020-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown container extension for markdown\n */\n'use strict';\n\nfunction showdownContainer() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(\n /(?:^|\\n)(?: {0,3})(:::+)(?: *)([\\S]+)(?:[ \\t]*)([^\\s][\\S\\t ]*)?\\n([\\s\\S]*?)\\n(?: {0,3})\\1(?:[ \\t]*)\\n/g,\n function (wholeMatch, delim, classname, title, content) {\n if (classname) {\n let classes = classname.split('-');\n if (classes.length > 1) {\n classes.forEach(function (name, index, arr) {\n if (index > 0) {\n arr[index] = arr[index - 1] + '-' + name;\n }\n });\n } else {\n classes.unshift('container');\n }\n classname = classes.join(' ');\n }\n if (content) {\n content = converter.makeHtml(content);\n }\n if (title) {\n title = `<p class=\"container-title\">${title}</p>`;\n } else {\n title = ''\n }\n return `<div class=\"showdown-container ${classname}\">${title}${content}</div>`;\n }\n ),\n },\n ];\n}\n\nexport default showdownContainer;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown flowchart extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown flowchart extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\nif (typeof flowchart === 'undefined') {\n var flowchart = window.flowchart || undefined;\n}\n\nfunction hasFlowchart() {\n return typeof Raphael !== 'undefined' && Raphael && typeof flowchart !== 'undefined' && flowchart ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasFlowchart();\n if (typeof window !== 'undefined') {\n if (!sync && !dync) {\n dync = true;\n cdnjs\n .loadScript('Raphael')\n .then(name => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('flowchart');\n })\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction onRenderFlowchart(resolve, res) {\n if (hasFlowchart()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const options = res.options;\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = utils.renderCacheElement(doc, id, name, el => {\n flowchart.parse(data).drawSVG(el, options);\n });\n resolve(true);\n return;\n }\n \n setTimeout(() => {\n onRenderFlowchart(resolve, res);\n }, 10);\n}\n\n/**\n * render flowchart graphs\n */\nfunction renderFlowchart(element, options) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta('flowchart', element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.options = options;\n onRenderFlowchart(resolve, meta);\n });\n}\n\n// <div class=\"flowchart || flow\"></div>\nfunction renderFlowchartElements(flowchartElements, flowElements, options) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n flowchartElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n flowElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Flowchart default options:\n// 'x': 0,\n// 'y': 0,\n// 'line-width': 3,\n// 'line-length': 50,\n// 'text-margin': 10,\n// 'font-size': 14,\n// 'font-color': 'black',\n// 'font': 'normal',\n// 'font-family': 'calibri',\n// 'font-weight': 'normal',\n// 'line-color': 'black',\n// 'element-color': 'black',\n// 'fill': 'white',\n// 'yes-text': 'yes',\n// 'no-text': 'no',\n// 'arrow-end': 'block',\n// 'class': 'flowchart',\n// 'scale': 1,\n// 'symbols': {\n// 'start': {},\n// 'end': {},\n// 'condition': {},\n// 'inputoutput': {},\n// 'operation': {},\n// 'subroutine': {},\n// 'parallel': {}\n// },\n// 'flowstate' : {\n// 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n// 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n// 'future' : { 'fill': '#FFFF99'},\n// 'invalid': {'fill': '#444444'}\n// }\nconst getOptions = (userOptions = {}) => ({\n 'line-width': 3,\n maxWidth: 3, //ensures the flowcharts fits within a certian width\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n font: 'normal',\n 'font-family': 'Helvetica',\n 'font-weight': 'normal',\n 'font-color': 'black',\n 'line-color': 'black',\n 'element-color': 'black',\n fill: 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n scale: 1,\n symbols: {\n start: {\n 'font-color': 'red',\n 'element-color': 'green',\n fill: 'yellow'\n },\n end: {\n class: 'end-element'\n }\n },\n flowstate: {\n past: { fill: '#CCCCCC', 'font-size': 12 },\n current: { fill: 'yellow', 'font-color': 'red', 'font-weight': 'bold' },\n future: { fill: '#FFFF99' },\n request: { fill: 'blue' },\n invalid: { fill: '#444444' },\n approved: {\n fill: '#58C4A3',\n 'font-size': 12,\n 'yes-text': 'APPROVED',\n 'no-text': 'n/a'\n },\n rejected: {\n fill: '#C45879',\n 'font-size': 12,\n 'yes-text': 'n/a',\n 'no-text': 'REJECTED'\n }\n },\n ...userOptions\n});\n\nfunction showdownFlowchart(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the Flowchart in code blocks\n const flowchartElements = wrapper.querySelectorAll('code.flowchart.language-flowchart');\n const flowElements = wrapper.querySelectorAll('code.flow.language-flow');\n if (!flowchartElements.length && !flowElements.length) {\n return false;\n }\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} Begin render flowchart elements.`);\n return renderFlowchartElements(flowchartElements, flowElements, this.config).then(() => {\n console.log(`${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} End render flowchart elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownFlowchart;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport './less/preview.less';\nimport './less/container.less';\n\nimport showdown from './parser/showdown.js';\nimport showdownAbc from './extensions/showdown-abc.js';\nimport showdownToc from './extensions/showdown-toc.js';\nimport showdownViz from './extensions/showdown-viz.js';\nimport showdownVega from './extensions/showdown-vega.js';\nimport showdownAlign from './extensions/showdown-align.js';\nimport showdownKatex from './extensions/showdown-katex.js';\nimport showdownEcharts from './extensions/showdown-echarts.js';\nimport showdownMermaid from './extensions/showdown-mermaid.js';\nimport showdownPlantuml from './extensions/showdown-plantuml.js';\nimport showdownRailroad from './extensions/showdown-railroad.js';\nimport showdownSequence from './extensions/showdown-sequence.js';\nimport showdownWavedrom from './extensions/showdown-wavedrom.js';\nimport showdownFootnotes from './extensions/showdown-footnotes.js';\nimport showdownContainer from './extensions/showdown-container.js';\nimport showdownFlowchart from './extensions/showdown-flowchart.js';\n\nimport * as zlibcodec from './utils/zlib-codec.js';\nimport cdnjs from './extensions/cdn';\n\n//////////////////////////////////////////////////////////////////////\nconst getOptions = (options = {}) => {\n return {\n flavor: 'github',\n ...options\n };\n};\n\nconst getAsyncExtensions = (options, extensions = {}) => {\n const mermaidOptions = options ? options.mermaid || {} : {};\n const plantumlOptions = options ? options.plantuml || {} : {};\n const katexOptions = options ? options.katex || {} : {};\n const vegaOptions = options ? options.vega || {} : {};\n\n const asyncExtensions = {\n 'showdown-plantuml': showdownPlantuml(plantumlOptions),\n 'showdown-mermaid': showdownMermaid(mermaidOptions),\n 'showdown-katex': showdownKatex(katexOptions),\n 'showdown-flowchart': showdownFlowchart,\n 'showdown-viz': showdownViz,\n 'showdown-vega': showdownVega(vegaOptions),\n 'showdown-wavedrom': showdownWavedrom,\n 'showdown-railroad': showdownRailroad,\n 'showdown-abc': showdownAbc,\n 'showdown-echarts': showdownEcharts,\n ...extensions\n };\n\n let extnames = [];\n for (let prop in asyncExtensions) {\n if (asyncExtensions.hasOwnProperty(prop)) {\n showdown.asyncExtension(prop, asyncExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst getExtensions = (options, extensions = {}) => {\n const nativeExtensions = {\n 'showdown-toc': showdownToc,\n 'showdown-align': showdownAlign,\n 'showdown-footnotes': showdownFootnotes,\n 'showdown-container': showdownContainer,\n 'showdown-sequence': showdownSequence,\n ...extensions\n };\n\n let extnames = [];\n for (let prop in nativeExtensions) {\n if (nativeExtensions.hasOwnProperty(prop)) {\n showdown.extension(prop, nativeExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst loadScript = (id, code) => {\n if (!code || typeof document === 'undefined') {\n return false;\n }\n\n const body = document.body;\n const parent = document.getElementById(id);\n if (parent) {\n const scriptID = `script-${id}`;\n let script = document.querySelector(`#parent > #${scriptID}`);\n if (script) {\n body.removeChild(script);\n } else {\n script = document.createElement('script');\n script.id = scriptID;\n }\n script.type = \"text/javascript\";\n script.text = code;\n parent.appendChild(script);\n }\n return true\n};\n\n\nconst showdownFlavors = ['github', 'ghost', 'vanilla', 'original', 'allon'];\nconst mermaidThemes = ['default', 'forest', 'dark', 'neutral'];\nconst vegaThemes = ['excel', 'ggplot2', 'quartz', 'vox', 'dark'];\nconst vegaRenderers = ['canvas', 'svg'];\nconst plantumlImgFmts = ['svg', 'png', 'jpg'];\n\n// defaultOptions.vega is embedOptions of vega-embed;\n// defaultOptions.katex is config of katex,\n// format is { delimiters: [ { left: '$$', right: '$$', display: true | false | undefined, asciimath: true | undefined }] };\n// defaultOptions.mermaid is config of mermaidAPI;\n// defaultOptions.plantuml is {umlWebSite: string, imageFormat: string};\n// defaultOptions.showdown is flavor and ShowdownOptions of showdown\nconst showdowns = {\n showdown: showdown,\n converter: null,\n defaultOptions: {\n showdown: getOptions(),\n plantuml: { imageFormat: 'svg' },\n mermaid: { theme: 'default' },\n katex: {},\n vega: { theme: 'vox' }\n },\n defaultExtensions: {},\n defaultAsyncExtensions: {},\n markdownDecodeFilter: function(doc) {\n return '';\n },\n initDefaultOptions: function() {\n if (!this.defaultOptions) {\n this.defaultOptions = {\n showdown: {},\n plantuml: {},\n mermaid: {},\n katex: {},\n vega: {}\n };\n }\n },\n setFlavor: function(name) {\n this.showdown.setFlavor(name);\n if (this.converter) {\n this.converter.setFlavor(name);\n }\n },\n addOptions: function(options) {\n for (const key in options) {\n if (key !== 'flavor') {\n this.showdown.setOption(key, options[key]);\n if (this.converter) {\n this.converter.setOption(key, options[key]);\n }\n }\n }\n },\n addExtension: function(name, extension) {\n this.removeExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.extension(name, extension);\n if (this.converter) {\n this.converter.addExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeExtension: function(name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.extension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeExtension(ext);\n }\n showdown.removeExtension(name);\n },\n addAsyncExtension: function(name, extension) {\n this.removeAsyncExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.asyncExtension(name, extension);\n if (this.converter) {\n this.converter.addAsyncExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeAsyncExtension: function(name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.asyncExtension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeAsyncExtension(ext);\n }\n showdown.removeAsyncExtension(name);\n },\n setCDN: function(cdnname, defScheme, distScheme) {\n if (typeof cdnname === 'string' && cdnname) {\n cdnjs.setCDN(cdnname, defScheme, distScheme);\n }\n },\n setShowdownFlavor: function(name) {\n this.initDefaultOptions();\n if (name) {\n if (showdownFlavors.indexOf(name) === -1) {\n name = 'github';\n }\n this.defaultOptions.showdown.flavor = name;\n this.setFlavor(name);\n }\n },\n setShowdownOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.showdown = Object.assign(this.defaultOptions.showdown || {}, options);\n this.setShowdownFlavor(this.defaultOptions.showdown.flavor);\n this.addOptions(this.defaultOptions.showdown);\n return this.defaultOptions.showdown;\n },\n setPlantumlOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.plantuml = Object.assign(this.defaultOptions.plantuml || {}, options);\n const imageFormat = this.defaultOptions.plantuml.imageFormat;\n if (imageFormat && plantumlImgFmts.indexOf(imageFormat) === -1) {\n this.defaultOptions.plantuml.imageFormat = 'png';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n }\n return this.defaultOptions.plantuml;\n },\n setMermaidOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.mermaid = Object.assign(this.defaultOptions.mermaid || {}, options);\n const theme = this.defaultOptions.mermaid.theme;\n if (theme && mermaidThemes.indexOf(theme) === -1) {\n this.defaultOptions.mermaid.theme = 'default';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n }\n return this.defaultOptions.mermaid;\n },\n setKatexOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.katex = Object.assign(this.defaultOptions.katex || {}, options);\n if (this.converter) {\n this.addAsyncExtension('showdown-katex', showdownKatex(this.defaultOptions.katex));\n }\n return this.defaultOptions.katex;\n },\n setVegaOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.vega = Object.assign(this.defaultOptions.vega || {}, options);\n const theme = this.defaultOptions.vega.theme;\n if (theme && vegaThemes.indexOf(theme) === -1) {\n this.defaultOptions.vega.theme = 'vox';\n }\n const renderer = this.defaultOptions.vega.renderer;\n if (renderer && vegaRenderers.indexOf(renderer) === -1) {\n this.defaultOptions.vega.renderer = 'canvas';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n return this.defaultOptions.vega;\n },\n init: function(reset) {\n if (!this.converter) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n const extensions = getExtensions(this.defaultOptions, this.defaultExtensions);\n const asyncExtensions = getAsyncExtensions(this.defaultOptions, this.defaultAsyncExtensions);\n this.setFlavor(options.flavor);\n // converter instance of showdown\n this.converter = new showdown.Converter({\n extensions: extensions\n }).initConvertExtObj(options.flavor, asyncExtensions);\n this.addOptions(options);\n } else {\n let resetOptions = {};\n if (typeof reset === 'boolean' && reset) {\n resetOptions = { option: true, extension: true };\n } else {\n resetOptions = reset;\n }\n if (typeof resetOptions === 'object') {\n if (resetOptions.hasOwnProperty('option') && resetOptions.option) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n this.addOptions(options);\n }\n if (resetOptions.hasOwnProperty('extension') && resetOptions.extension) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n }\n }\n return this;\n },\n makeHtml: function(doc, callback) {\n let content = '';\n if (typeof doc === 'object') {\n if (typeof doc.content === 'string') {\n if (typeof doc.type === 'string') {\n switch (doc.type) {\n case 'zip':\n content = this.zDecode(doc.content);\n break;\n default:\n content = this.markdownDecodeFilter(doc) || doc.content;\n break;\n }\n } else {\n content = doc.content;\n }\n }\n } else {\n content = doc;\n }\n\n if (this.converter && content) {\n function _getCssLink(wrapper, className, extName) {\n // find elements that has csslink\n const element = wrapper.querySelector(className);\n let cssLink = '';\n if (element) {\n cssLink = element.dataset.css;\n } else {\n let ext;\n try {\n ext = showdown.extension(extName);\n } catch {}\n\n if (!ext) {\n try {\n ext = showdown.asyncExtension(extName);\n } catch {}\n }\n\n if (ext) {\n if (Array.isArray(ext)) {\n for (var i = 0; i < ext.length; ++i) {\n if (ext[i].hasOwnProperty('config') && ext[i].config.hasOwnProperty('cssLink')) {\n cssLink = ext[i].config.cssLink;\n break;\n }\n }\n } else if (typeof ext === 'object') {\n if (ext.hasOwnProperty('config') && ext.config.hasOwnProperty('cssLink')) {\n cssLink = ext.config.cssLink;\n }\n }\n }\n }\n return cssLink;\n }\n\n function _checkCssTypes(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n return new Promise(resolve => {\n const katexCssLink = _getCssLink(wrapper, '.css-katex', 'showdown-katex');\n const sequenceCssLink = _getCssLink(wrapper, '.css-sequence', 'showdown-sequence');\n const railroadCssLink = _getCssLink(wrapper, '.css-railroad', 'showdown-railroad');\n\n obj.cssTypes = {\n hasKatex: katexCssLink ? true : false,\n hasSequence: sequenceCssLink ? true : false,\n hasRailroad: railroadCssLink ? true : false,\n css: {\n katex: katexCssLink,\n sequence: sequenceCssLink,\n railroad: railroadCssLink\n }\n };\n if (typeof callback === 'function' && callback) {\n callback(obj.cssTypes);\n }\n return resolve(obj);\n });\n }\n\n return this.converter.asyncMakeHtml(content, _checkCssTypes).then( obj => {\n content = `<div class='showdowns'>${obj.html}</div>`;\n return { html: content, scripts: obj.scripts };\n });\n }\n return Promise.reject(!content ? 'Content is empty.' : 'Converter is invaild.');\n },\n completedHtml: function(scripts) {\n if (!showdown.helper.isArray(scripts)) {\n scripts = [scripts];\n }\n return new Promise((revole, reject) => {\n for (var i = 0; i < scripts.length; ++i) {\n const script = scripts[i];\n if (!loadScript(script.id, script.code)) {\n return reject('Args is invaild!');\n }\n }\n revole(true);\n });\n },\n zDecode: function(zContent) {\n return zlibcodec.zDecode(zContent);\n },\n zEncode: function(content) {\n return zlibcodec.zEncode(content);\n }\n};\n\nexport default showdowns;\n"],"names":["showdown","ConverterExtObj","flavor","asyncExtensions","outputAsyncModifiers","currConvFlavor","_parseAsyncExtension","ext","name","helper","isString","stdExtName","asyncExtension","isUndefined","Error","isArray","validateExtension","i","length","type","push","forEach","this","addAsyncExtension","extension","removeAsyncExtension","a","j","splice","getAsyncExtensions","getCurrFlavor","setCurrFlavor","Converter","prototype","initConvertExtObj","extObj","resetOptions","converterOptions","globalOptions","getOptions","options","gOpt","hasOwnProperty","opt","setFlavor","preset","getFlavorOptions","defaultOptions","getDefaultOptions","option","getFlavor","removeExtension","exts","getAllExtensions","langExtensions","language","outputModifiers","output","asyncMakeHtml","text","callback","content","makeHtml","outputs","Promise","resolve","html","globals","converter","doc","DOMParser","parseFromString","wrapper","body","result","scripts","then","obj","filter","promise","innerHTML","subParser","ghCodeBlocks","_dispatch","replace","wholeMatch","delim","langattr","codeblock","end","omitExtraWLInCodeBlocks","tables","parseStyles","sLine","test","parseCells","cells","row","col","cell","style","tablesMerge","direct","tablesRowspan","str","left","right","ii","mergeCells","trim","parseTableContent","rawTable","headerless","tableLines","split","header","id","rawStyles","rawCells","headers","styles","map","s","shift","rawHeaders","tablesHeaderId","tableHeaderId","toLowerCase","tb","tblLgn","buildTable","parseTable","parseHeaderlessTable","escapeCharactersCallback","tablesHeaderless","currFlavor","flavors","github","ghCompatibleHeaderId","underline","rawHeaderId","ghost","allOn","_asyncExtensions","resetAsyncExtensions","orgSetFlavor","orgGetFlavorOptions","setFlavorOptions","Object","assign","cdnName","scheme","document","location","protocol","defScheme","distScheme","cdnSrc","local","ABCJS","ABCJSCSS","echarts","Viz","Raphael","flowchart","mermaid","katex","katexCSS","renderMathInElement","railroad","railroadCSS","Snap","WebFont","underscore","sequence","sequenceCSS","WaveDrom","WaveDromSkin","default","lowkey","narrow","vega","vegaLite","vegaEmbed","cdnjs","jsdelivr","getSrc","def","cdn","url","key","keys","val","substring","setCDN","scheme_default","scheme_dist","getCDN","loadScript","src","res","rej","head","getElementsByTagName","script","createElement","onload","appendChild","loadStyleSheet","css","link","rel","href","Date","Format","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","k","RegExp","$1","getFullYear","substr","utils","interopDefault","ex","code","getElementById","removeChild","renderCacheElement","window","el","className","display","outerHTML","renderElement","createElementMeta","element","dataset","lang","langobj","JSON","parse","diagramClass","align","textContent","classList","now","random","data","extName","cssCdnName","undefined","hasAbc","dync","onRenderAbc","cssLink","ownerDocument","parentNode","renderAbc","setTimeout","meta","renderAbcElements","elements","sync","dyncLoadScript","promiseArray","all","showdownAbc","querySelectorAll","config","createHeadingElement","toc","nexthead","child","createTextNode","appendTocElement","currTocNode","headingLevel","tempTocNode","preLevel","showdownToc","parser","replaceChild","tocNode","prev","parseInt","renderTocElements","engines","hasViz","instance","onRenderViz","engine","indexOf","viz","svg","renderString","format","renderViz","renderVizElements","showdownViz","hasVegaEmbed","renderVega","isVegaLite","stringify","onRenderVega","renderVegaElements","vegaElements","vegaLiteElements","showdownVega","userOptions","actions","editor","theme","tooltip","renderer","showdownAlign","childNode","firstChild","nodeType","results","nodeValue","match","nextSibling","renderAlignElements","decimalsign","CONST","UNARY","BINARY","INFIX","LEFTBRACKET","RIGHTBRACKET","SPACE","UNDEROVER","DEFINITION","LEFTRIGHT","TEXT","AMquote","input","tag","tex","ttype","AMsymbols","notexcopy","invisible","func","rewriteleftright","acc","atname","atval","compareNames","s1","s2","AMnestingDepth","AMpreviousSymbol","AMcurrentSymbol","AMnames","AMremoveCharsAndBlanks","n","st","charAt","slice","charCodeAt","AMposition","arr","h","m","AMgetSymbol","mk","tagst","more","integ","AMTremoveBrackets","node","leftchop","AMTgetTeXsymbol","symb","pre","AMTparseSexpr","symbol","newFrag","texsymbol","AMTparseExpr","result2","AMTparseIexpr","sym1","sym2","res2","rightbracket","addedright","len","mxout","pos","matrix","mxnestingd","subpos","lastsubposstart","mxanynestingd","columnaligns","lastmxsubcnt","subarr","join","AMTparseAMtoTeX","symlen","sort","refreshSymbols","AMinitSymbols","RenderMathInElement","katexElementCount","hasKatex","onRenderKatex","Array","math","renderToString","renderKatex","isAsciimath","latex","codes","asciimathToTex","escapeRegExp","getConfig","userConfig","displayMode","throwOnError","errorColor","delimiters","_isObjectProperty","prop","_getDelimiter","delimiter","asciimath","concat","showdownKatex","inlineMathCount","mathDelimiters","replacer","childNodes","nodeName","newText","reduce","that","asyncRenderKatex","render","renderBlockElements","hasEcharts","onRenderEcharts","renderEcharts","ssr","renderEchartsElements","showdownEcharts","width","height","show","animation","hasMermaid","onRenderMermaid","renderMermaid","renderMermaidElements","initialize","showdownMermaid","logLevel","startOnLoad","arrowMarkerAbsolute","curve","gantt","axisFormat","actorMargin","append3bytes","b1","b2","b3","c2","c3","c4","r","encode6bit","b","String","fromCharCode","decode6bit","cc","c","extract3bytes","c1","encode","encode64","zlib","deflateRawSync","level","toString","decode","inflateRawSync","Buffer","from","t","decode64","plantumlcodec","encodeuml","startuml","enduml","zlibcodec.encode","decodeuml","zlibcodec.decode","defaultImageFormat","umlElementCount","renderPlantumlElements","imageFormat","website","umlWebSite","imageExtension","uml","svgRender","svgData","fetch","dispatchEvent","response","ok","renderPlantumlElement","showdownPlantuml","hasRailroad","diagram","onRenderRailroad","railroadElement","eval","addTo","renderRailroad","renderRailroadElements","showdownRailroad","Diagram","themes","SequenceJS","hasSequence","renderSequence","elementid","CustomEvent","detail","onRenderSequence","drawSVG","showdownSequence","addEventListener","event","renderSequenceElements","wdCount","indexWD","hasWavedrom","onRenderWavedrom","index","RenderWaveForm","wdel","renderWavedrom","renderWavedromElements","skin","showdownWavedrom","skinConfig","showdownFootnotes","rawContent","_","padding","showdownContainer","classname","title","classes","unshift","hasFlowchart","onRenderFlowchart","renderFlowchart","renderFlowchartElements","flowchartElements","flowElements","showdownFlowchart","maxWidth","font","fill","scale","symbols","start","class","flowstate","past","current","future","request","invalid","approved","rejected","parent","scriptID","querySelector","showdownFlavors","mermaidThemes","vegaThemes","vegaRenderers","plantumlImgFmts","showdowns","plantuml","defaultExtensions","defaultAsyncExtensions","markdownDecodeFilter","initDefaultOptions","addOptions","setOption","addExtension","err","cdnname","setShowdownFlavor","setShowdownOptions","setPlantumlOptions","setMermaidOptions","setKatexOptions","setVegaOptions","init","reset","extensions","nativeExtensions","extnames","getExtensions","mermaidOptions","katexOptions","vegaOptions","zDecode","_getCssLink","_checkCssTypes","katexCssLink","sequenceCssLink","railroadCssLink","cssTypes","reject","completedHtml","revole","zContent","zEncode"],"mappings":"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"}
1
+ {"version":3,"file":"showdowns.core.min.js","sources":["../src/parser/converter.js","../src/parser/githubCodeBlocks.js","../src/parser/tables.js","../src/parser/showdown.js","../src/extensions/log.js","../src/extensions/date-format.js","../src/extensions/cdn.js","../src/extensions/utils.js","../src/extensions/showdown-abc.js","../src/extensions/showdown-toc.js","../src/extensions/showdown-viz.js","../src/extensions/showdown-vega.js","../src/extensions/showdown-align.js","../src/extensions/asciimath2tex.js","../src/extensions/showdown-katex.js","../src/extensions/showdown-echarts.js","../src/extensions/showdown-mermaid.js","../src/utils/zlib-codec.js","../src/utils/plantuml-codec.js","../src/extensions/showdown-plantuml.js","../src/extensions/showdown-railroad.js","../src/extensions/showdown-sequence.js","../src/extensions/showdown-wavedrom.js","../src/extensions/showdown-footnotes.js","../src/extensions/showdown-container.js","../src/extensions/showdown-flowchart.js","../src/showdowns.js"],"sourcesContent":["/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.ConverterExtObj = function(flavor, asyncExtensions) {\n 'use strict';\n\n let outputAsyncModifiers = [],\n /**\n * The flavor set in this converter\n */\n currConvFlavor = flavor;\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor() {\n if (asyncExtensions) {\n showdown.helper.forEach(asyncExtensions, _parseAsyncExtension);\n }\n }\n\n /**\n * Parse async extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseAsyncExtension(ext, name) {\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n name = showdown.helper.stdExtName(ext);\n ext = showdown.asyncExtension(name);\n if (showdown.helper.isUndefined(ext)) {\n throw Error(\n 'Extension \"' + name + '\" could not be loaded. It was either not found or is not a valid aync extension.'\n );\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'output':\n outputAsyncModifiers.push(ext[i]);\n break;\n }\n }\n }\n }\n\n this.addAsyncExtension = function(extension, name) {\n name = name || null;\n _parseAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var j = 0; j < outputAsyncModifiers.length; ++j) {\n if (outputAsyncModifiers[j] === ext) {\n outputAsyncModifiers.splice(j, 1);\n }\n }\n }\n };\n\n this.getAsyncExtensions = function() {\n return outputAsyncModifiers;\n };\n\n /**\n * Get the currently flavor name of this converter\n * @returns {string}\n */\n this.getCurrFlavor = function() {\n return currConvFlavor;\n };\n\n /**\n * Set the currently flavor name of this converter\n * @param {string} flavor name\n */\n this.setCurrFlavor = function(name) {\n currConvFlavor = name;\n };\n};\n\nshowdown.Converter.prototype.initConvertExtObj = function(flavor, asyncExtensions) {\n this.extObj = new showdown.ConverterExtObj(flavor, asyncExtensions);\n\n this.resetOptions = function(converterOptions) {\n converterOptions = converterOptions || {};\n\n const globalOptions = showdown.getOptions();\n let options = this.getOptions();\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n }\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function(name) {\n let preset = showdown.getFlavorOptions(name);\n if (showdown.helper.isUndefined(preset)) return;\n this.extObj.setCurrFlavor(name);\n let defaultOptions = showdown.getDefaultOptions(true);\n for (var option in defaultOptions) {\n if (defaultOptions.hasOwnProperty(option)) {\n this.getOptions()[option] = defaultOptions[option];\n }\n }\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n this.getOptions()[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function() {\n return this.extObj.getCurrFlavor();\n };\n\n this.addAsyncExtension = function(extension, name) {\n this.extObj.addAsyncExtension(extension, name);\n };\n\n this.removeAsyncExtension = function(extension) {\n this.extObj.removeAsyncExtension(extension);\n };\n\n // Because removeExtension function of converter has bug in showdown.js,\n // it needs to be overrode.\n this.removeExtension = function(extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n const exts = this.getAllExtensions();\n let langExtensions = exts.language;\n let outputModifiers = exts.output;\n for (var a = 0; a < extension.length; ++a) {\n const ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions.splice(i, 1);\n }\n }\n for (var j = 0; j < outputModifiers.length; ++j) {\n if (outputModifiers[j] === ext) {\n outputModifiers.splice(j, 1);\n }\n }\n }\n };\n\n /**\n * Async converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.asyncMakeHtml = function(text, callback) {\n const content = this.makeHtml(text);\n const outputs = this.extObj.getAsyncExtensions();\n if (!outputs.length) {\n return Promise.resolve({html: content});\n }\n\n var globals = {\n outputs: outputs,\n converter: this\n };\n const parser = new DOMParser();\n const doc = parser.parseFromString(content, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n const options = this.getOptions();\n let scripts = [];\n let result = Promise.resolve({ wrapper, options, globals, scripts });\n //forEach写法\n outputs.forEach(function(ext) {\n result = result.then(obj => {\n const filter = ext.filter(obj);\n return filter ? filter : obj;\n });\n });\n return result.then(obj => {\n if (typeof callback === 'function' && callback) {\n const promise = callback(obj);\n if (promise instanceof Promise) {\n return promise.then(obj => {\n return { html: obj.wrapper.innerHTML, scripts: obj.scripts };\n });\n }\n }\n return { html: obj.wrapper.innerHTML, scripts: obj.scripts };\n });\n };\n\n return this;\n};\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Override githubCodeBlocks parser;\n * Support language attribute, see the following format:\n * ```lang {\"theme\": \"github\", \"align\": \"center\"}\n * code block\n * ```\n * OR\n * ```lang [\"theme\": \"vox\", \"align\": \"right\"]\n * code block\n * ```\n */\n'use strict';\n\nimport showdown from 'showdown';\n\nshowdown.subParser('githubCodeBlocks', function(text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(\n /(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*?)(?:[ \\t]*?)((?:\\{[\\S\\t ]*\\}|\\[[\\S\\t ]*\\])?)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g,\n function(wholeMatch, delim, language, langattr, codeblock) {\n var end = options.omitExtraWLInCodeBlocks ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock =\n '<pre><code' +\n (language ? ' class=\"' + language + ' language-' + language + '\"' : '') +\n (langattr ? ` data-lang='${langattr}'` : '') +\n '>' +\n codeblock +\n end +\n '</code></pre>';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return (\n '\\n\\n¨G' +\n (globals.ghCodeBlocks.push({\n text: wholeMatch,\n codeblock: codeblock\n }) -\n 1) +\n 'G\\n\\n'\n );\n }\n );\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\n\n// Override tables parser;\nshowdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm,\n headerlessTableRgx = /^ {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n headerlessSingeColTblRgx = /^ {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles(sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders(header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '<th' + id + style + '>' + header + '</th>\\n';\n }\n\n function mergeCells(cells, row, col, cell) {\n if (cell) {\n if (!options.tablesRowspan || cell !== '^^' || !row) {\n return;\n }\n\n // up merge except for first row cells\n for (var i = row - 1; i >= 0; --i) {\n if (!cells[i][col]) {\n for (var ii = col - 1; ii >= 0; -ii) {\n if (cells[i + 1][ii] && cells[i + 1][ii] !== '^^') {\n return;\n }\n\n if (cells[i][ii]) {\n if (!cells[i + 1][ii]) {\n return;\n }\n\n cells[i][ii] = cells[i][ii]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else if (cells[i][col] !== '^^') {\n cells[i][col] = cells[i][col]\n .replace(/rowspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' rowspan=\"' + (row - i + 1) + '\"' + right;\n });\n return cell;\n } else if (i === 0) {\n cells[i][col] = '<td rowspan=\"' + (row - i + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n // left merge except for first column cells\n if (!col) {\n return;\n }\n\n for (var ii = col - 1; ii >= 0; --ii) {\n if (cells[row][ii]) {\n if (cells[row][ii] === '^^') {\n for (var i = row - 1; i >= 0; --i) {\n if (cells[i][ii + 1]) {\n return;\n }\n\n if (cells[i][ii] !== '^^') {\n cells[i][ii] = cells[i][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n }\n } else {\n cells[row][ii] = cells[row][ii]\n .replace(/colspan=\"[0-9]*\"/g, '')\n .replace(/^(<td[^<>\\n\\r]*?)(>.*<\\/td>\\n)/, function (str, left, right) {\n return left + ' colspan=\"' + (col - ii + 1) + '\"' + right;\n });\n return cell;\n }\n } else if (ii === 0) {\n cells[row][ii] = '<td colspan=\"' + (col - ii + 1) + '\"></td>\\n';\n return cell;\n }\n }\n\n return;\n }\n\n function parseCells(cells, row, col, cell, style) {\n if (options.tablesMerge) {\n var direct = mergeCells(cells, row, col, cell);\n if (!showdown.helper.isUndefined(direct)) {\n return direct;\n }\n }\n\n cell = cell.trim();\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '<td' + style + '>' + subText + '</td>\\n';\n }\n\n function buildTable(headers, styles, cells) {\n var tb = '<table>\\n',\n tblLgn = styles.length;\n\n if (headers.length) {\n tb += '<thead>\\n<tr>\\n';\n for (var i = 0; i < headers.length; ++i) {\n tb += headers[i];\n }\n tb += '</tr>\\n</thead>\\n';\n }\n tb += '<tbody>\\n'\n\n for (i = 0; i < cells.length; ++i) {\n tb += '<tr>\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n if (!options.tablesMerge || cells[i][ii] !== '^^') {\n tb += cells[i][ii];\n }\n }\n tb += '</tr>\\n';\n }\n tb += '</tbody>\\n</table>\\n';\n return tb;\n }\n\n function parseTableContent(rawTable, headerless) {\n var i,\n tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawStyles = [],\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n if (headerless) {\n rawStyles = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n tableLines.shift();\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n } else {\n var rawHeaders = tableLines[0].split('|').map(function (s) {\n return s.trim();\n });\n rawStyles = tableLines[1].split('|').map(function (s) {\n return s.trim();\n });\n\n tableLines.shift();\n tableLines.shift();\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n }\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i].split('|').map(function (s) {\n var cell = s.trim();\n if (cell === '' && s.length > 0) return s;\n return cell;\n })\n );\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n cells.push(row);\n for (var ii = 0; ii < styles.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n rawCells[i][ii] = '';\n }\n row.push(parseCells(cells, i, ii, rawCells[i][ii], styles[ii]));\n }\n }\n\n return buildTable(headers, styles, cells);\n }\n\n function parseTable(rawTable) {\n return parseTableContent(rawTable, false);\n }\n\n function parseHeaderlessTable(rawTable) {\n return parseTableContent(rawTable, true);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n if (options.tablesHeaderless) {\n // parse multi column headerless tables\n text = text.replace(headerlessTableRgx, parseHeaderlessTable);\n\n // parse one column headerless tables\n text = text.replace(headerlessSingeColTblRgx, parseHeaderlessTable);\n }\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport showdown from 'showdown';\nimport './converter.js';\nimport './githubCodeBlocks.js';\nimport './tables.js';\n\nlet currFlavor = 'vanilla',\n flavors = {\n github: {\n ghCompatibleHeaderId: false,\n underline: true,\n rawHeaderId: true,\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n ghost: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n },\n allOn: {\n tablesHeaderless: true,\n tablesMerge: true,\n tablesRowspan: true\n }\n },\n _asyncExtensions = {};\n\n/**\n * Gets or registers an async extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.asyncExtension = function(name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error(\"Extension 'name' must be a string\");\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!_asyncExtensions.hasOwnProperty(name)) {\n throw Error('Async Extension named ' + name + ' is not registered!');\n }\n return _asyncExtensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n if (showdown.validateExtension(ext)) {\n _asyncExtensions[name] = ext;\n }\n }\n};\n\n/**\n * Remove an async extension\n * @param {string} name\n */\nshowdown.removeAsyncExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete _asyncExtensions[name];\n};\n\n/**\n * Removes all async extensions\n */\nshowdown.resetAsyncExtensions = function() {\n 'use strict';\n _asyncExtensions = {};\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function(name) {\n 'use strict';\n name = showdown.helper.stdExtName(name);\n delete showdown.getAllExtensions[name];\n};\n\nconst orgSetFlavor = showdown.setFlavor;\nconst orgGetFlavorOptions = showdown.getFlavorOptions;\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function(name) {\n 'use strict';\n\n try {\n orgSetFlavor(name);\n currFlavor = name;\n if (!flavors.hasOwnProperty(name)) return;\n } catch {\n if (!flavors.hasOwnProperty(name)) return;\n showdown.resetOptions();\n currFlavor = name;\n }\n var preset = flavors[name];\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n showdown.getOptions()[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function() {\n 'use strict';\n return currFlavor;\n};\n\nshowdown.setFlavorOptions = function(name, options) {\n if (options) {\n flavors[name] = Object.assign(flavors[name] || {}, options);\n }\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function(name) {\n 'use strict';\n const flavor = orgGetFlavorOptions(name);\n if (!showdown.helper.isUndefined(flavor)) {\n if (!flavors.hasOwnProperty(name)) {\n return flavor;\n }\n return Object.assign(flavor, flavors[name]);\n }\n\n if (flavors.hasOwnProperty(name)) {\n return flavors[name];\n }\n};\n\nexport default showdown;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nimport './date-format.js';\n\nfunction format(s) {\n return `${new Date().Format('yyyy-MM-dd HH:mm:ss.S')} ${s}`\n}\n\nexport default format;\n","/*\r\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\r\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\r\n * Description: Date format extension\r\n */\r\n'use strict';\r\n// 对Date的扩展,将 Date 转化为指定格式的String\r\n// 月(M)、日(d)、小时(h/H)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,\r\n// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)\r\n// 例子:\r\n// (new Date()).Format(\"yyyy-MM-dd hh:mm:ss.S\") ==> 1970-01-01 08:09:04.423\r\n// (new Date()).Format(\"yyyy-M-d h:m:s.S\") ==> 1970-1-1 8:9:4.18\r\nDate.prototype.Format = function(fmt) {\r\n var o = {\r\n 'M+': this.getMonth() + 1, //月份\r\n 'd+': this.getDate(), //日\r\n 'h+': this.getHours(), //小时\r\n 'H+': this.getHours(), //小时\r\n 'm+': this.getMinutes(), //分\r\n 's+': this.getSeconds(), //秒\r\n 'q+': Math.floor((this.getMonth() + 3) / 3), //季度\r\n S: this.getMilliseconds() //毫秒\r\n };\r\n if (!fmt) fmt = 'yyyy-MM-dd hh:mm:ss.S';\r\n const matches = /(y+)/.exec(fmt);\r\n if (matches) fmt = fmt.replace(matches[1], (this.getFullYear() + '').substring(4 - matches[1].length));\r\n for (const k in o) {\r\n const m = new RegExp('(' + k + ')').exec(fmt)\r\n if (m) {\r\n let n = o[k];\r\n if (m[1].length == 1) n = ('000' + o[k]).substring(('' + o[k]).length);\r\n else if (m[1].length == 2) n = ('00' + o[k]).substring(('' + o[k]).length);\r\n fmt = fmt.replace(m[1], n);\r\n }\r\n }\r\n return fmt;\r\n};\r\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: dynamic loading js libs for local or cdnjs or jsdelivr\n */\n'use strict';\n\nlet cdnName = 'jsdelivr';\nlet scheme = document.location.protocol === 'file:' ? 'https://' : document.location.protocol + '//';\nlet defScheme = '';\nlet distScheme = '';\n\nconst cdnSrc = {\n local: {\n ABCJS: '../node_modules/abcjs/dist/abcjs-basic.js',\n ABCJSCSS: '../node_modules/abcjs/abcjs-audio.css',\n echarts: '../node_modules/echarts/dist/echarts.js',\n Viz: '../node_modules/@viz-js/viz/lib/viz-standalone.js',\n Raphael: '../node_modules/raphael/raphael.min.js',\n flowchart: '../dist/diagrams/flowchart/flowchart.min.js',\n mermaid: '../node_modules/mermaid/dist/mermaid.js',\n katex: '../node_modules/katex/dist/katex.min.js',\n katexCSS: '../node_modules/katex/dist/katex.min.css',\n renderMathInElement: '../node_modules/katex/dist/contrib/auto-render.js',\n railroad: '../node_modules/railroad-diagrams/railroad-diagrams.js',\n railroadCSS: '../node_modules/railroad-diagrams/railroad-diagrams.css',\n Snap: '../node_modules/snapsvg/dist/snap.svg-min.js',\n WebFont: '../node_modules/webfontloader/webfontloader.js',\n underscore: '../node_modules/underscore/underscore-min.js',\n sequence: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.js',\n sequenceCSS: '../node_modules/@rokt33r/js-sequence-diagrams/dist/sequence-diagram-min.css',\n WaveDrom: '../node_modules/wavedrom/wavedrom.min.js',\n WaveDromSkin: {\n default: '../node_modules/wavedrom/skins/default.js',\n lowkey: '../node_modules/wavedrom/skins/lowkey.js',\n narrow: '../node_modules/wavedrom/skins/narrow.js'\n },\n vega: '../node_modules/vega/build/vega.js',\n vegaLite: '../node_modules/vega-lite/build/vega-lite.js',\n vegaEmbed: '../node_modules/vega-embed/build/vega-embed.js'\n },\n cdnjs: {\n ABCJS: scheme + 'cdnjs.cloudflare.com/ajax/libs/abcjs/6.4.1/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/abcjs/abcjs-audio.css',\n echarts: scheme + 'cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.1/mermaid.min.js',\n katex: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.11/katex.min.js',\n katexCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.11/katex.min.css',\n renderMathInElement: scheme + 'cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.11/contrib/auto-render.js',\n railroad: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.js',\n railroadCSS: scheme + 'cdnjs.cloudflare.com/ajax/libs/railroad-diagrams/1.0.0/railroad-diagrams.css',\n Snap: scheme + 'cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js',\n WebFont: scheme + 'cdnjs.cloudflare.com/ajax/libs/webfont/1.6.28/webfontloader.js',\n underscore: scheme + 'cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.6/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/default.js',\n lowkey: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/lowkey.js',\n narrow: scheme + 'cdnjs.cloudflare.com/ajax/libs/wavedrom/3.5.0/skins/narrow.js'\n },\n vega: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega/5.30.0/vega.min.js',\n vegaLite: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-lite/5.19.0/vega-lite.min.js',\n vegaEmbed: scheme + 'cdnjs.cloudflare.com/ajax/libs/vega-embed/6.26.0/vega-embed.min.js'\n },\n jsdelivr: {\n ABCJS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/dist/abcjs-basic-min.js',\n ABCJSCSS: scheme + 'cdn.jsdelivr.net/npm/abcjs@6/abcjs-audio.css',\n echarts: scheme + 'cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js',\n Viz: scheme + 'cdn.jsdelivr.net/npm/@viz-js/viz@3/lib/viz-standalone.js',\n Raphael: scheme + 'cdn.jsdelivr.net/npm/raphael@2/raphael.min.js',\n flowchart: scheme + 'cdnjs.cloudflare.com/ajax/libs/flowchart/1.18.0/flowchart.min.js',\n mermaid: scheme + 'cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js',\n katex: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.js',\n katexCSS: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/katex.min.css',\n renderMathInElement: scheme + 'cdn.jsdelivr.net/npm/katex@0/dist/contrib/auto-render.js',\n railroad: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.js',\n railroadCSS: scheme + 'cdn.jsdelivr.net/npm/railroad-diagrams@1/railroad-diagrams.css',\n Snap: scheme + 'cdn.jsdelivr.net/npm/snapsvg@0/dist/snap.svg-min.js',\n WebFont: scheme + 'cdn.jsdelivr.net/npm/webfontloader@1/webfontloader.js',\n underscore: scheme + 'cdn.jsdelivr.net/npm/underscore@1/underscore-min.js',\n sequence: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.js',\n sequenceCSS: scheme + 'cdn.jsdelivr.net/npm/@rokt33r/js-sequence-diagrams@2.0.6-2/dist/sequence-diagram-min.css',\n WaveDrom: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/wavedrom.min.js',\n WaveDromSkin: {\n default: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/default.js',\n lowkey: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/lowkey.js',\n narrow: scheme + 'cdn.jsdelivr.net/npm/wavedrom@3/skins/narrow.js'\n },\n vega: scheme + 'cdn.jsdelivr.net/npm/vega@5/build/vega.js',\n vegaLite: scheme + 'cdn.jsdelivr.net/npm/vega-lite@5/build/vega-lite.js',\n vegaEmbed: scheme + 'cdn.jsdelivr.net/npm/vega-embed@6/build/vega-embed.js'\n }\n};\n\nfunction setCDN(name, scheme_default, scheme_dist) {\n if (name in cdnSrc) {\n cdnName = name;\n }\n\n if (typeof scheme_default === 'string' && scheme_default) {\n defScheme = scheme_default;\n }\n\n if (typeof scheme_dist === 'string' && scheme_dist) {\n distScheme = scheme_dist;\n }\n}\n\nfunction getCDN() {\n return cdnName;\n}\n\nfunction getName(name) {\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (typeof val === 'string') {\n return key + \"-\" + val;\n } \n }\n\n return name;\n}\n\nfunction getSrc(name, def) {\n if (cdnSrc.hasOwnProperty(cdnName)) {\n const cdn = cdnSrc[cdnName];\n let url = '';\n if (typeof name === 'object') {\n const key = Object.keys(name)[0];\n const val = name[key];\n if (cdn[key] && typeof val === 'string' && val && cdn[key][val]) {\n url = cdn[key][val];\n }\n } else if (cdn[name]) {\n url = cdn[name];\n }\n\n if (url) {\n if (url.substring(0, scheme.length) === scheme) {\n def = url;\n } else if (url.substring(0, 8) === '../dist/') {\n def = distScheme + url;\n } else {\n def = defScheme + url;\n }\n }\n }\n return def;\n}\n\nfunction loadScript(name, src) {\n return new Promise((resovle, reject) => {\n if (!name || typeof document === 'undefined') {\n reject('Args is invaild!');\n }\n\n if (typeof src === 'undefined') {\n src = '';\n }\n\n src = getSrc(name, src);\n if (!src) {\n reject(name + ' script source invaild!');\n }\n\n const id = 'script-' + getName(name).toLowerCase();\n let script = document.getElementById(id);\n if (script) {\n return resovle(name);\n }\n\n const head = document.head || document.getElementsByTagName('head')[0];\n script = document.createElement('script');\n script.src = src;\n script.id = id;\n script.onload = () => {\n resovle(name);\n };\n head.appendChild(script);\n });\n}\n\nfunction unloadScript(name) {\n name = getName(name);\n const e = document.getElementById('script-' + name.toLowerCase());\n if (e) {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(e);\n }\n}\n\nfunction loadStyleSheet(name, css) {\n if (!name || typeof document === 'undefined') {\n return '';\n }\n\n if (typeof css === 'undefined') {\n css = '';\n }\n\n css = getSrc(name, css);\n if (!css) {\n return '';\n }\n\n const id = 'css-' + getName(name).toLowerCase();\n let script = document.getElementById(id);\n if (!script) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = css;\n link.id = id;\n head.appendChild(link);\n }\n return cdnName === 'local' ? '' : css;\n}\n\nfunction unloadStyleSheet(name) {\n name = getName(name);\n const e = document.getElementById('css-' + name.toLowerCase());\n if (e) {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(e);\n }\n}\n\nconst cdnjs = {\n setCDN,\n getCDN,\n getSrc,\n loadScript,\n unloadScript,\n loadStyleSheet,\n unloadStyleSheet\n};\n\nexport default cdnjs;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nfunction loadStyle(name, css) {\n if (!name || !css || typeof document === 'undefined') {\n return false;\n }\n\n const id = 'css-' + name.toLowerCase();\n const script = document.getElementById(id);\n if (!script) {\n const head = document.head || document.getElementsByTagName('head')[0];\n const style = document.createElement('style');\n style.id = id;\n style.innerText = css;\n head.appendChild(style);\n }\n return true;\n}\n\nfunction loadScript(id, code) {\n return new Promise((res, rej) => {\n if (!code || typeof document === 'undefined') {\n rej('Args is invaild!');\n }\n\n const body = document.body;\n let script = document.getElementById(id);\n if (script) {\n body.removeChild(script);\n } else {\n script = document.createElement('script');\n script.id = id;\n }\n script.type = \"text/javascript\";\n script.text = code;\n body.appendChild(script);\n res(true);\n });\n}\n\nfunction interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nfunction renderCacheElement(doc, id, name, callback) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n el.style.display = 'none';\n doc.body.appendChild(el);\n if (typeof callback === 'function' && callback) {\n const result = callback(el);\n if (result instanceof Promise) {\n result.then(el => {\n doc.body.removeChild(el);\n el.style.display = '';\n });\n return el.outerHTML;\n }\n }\n doc.body.removeChild(el);\n el.style.display = '';\n return el.outerHTML;\n}\n\nfunction renderElement(doc, id, name) {\n if (typeof window !== 'undefined' && window.document) {\n doc = window.document;\n }\n const el = doc.createElement('div');\n el.id = id;\n el.className = name;\n doc.body.appendChild(el);\n return el\n}\n\nfunction createElementMeta(name, element, callback) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return false;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n\n let code = element.textContent.trim();\n if (callback && typeof callback === 'function') {\n code = callback(code);\n }\n const className =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const id = name + '-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n return {\n id: id,\n className: className,\n data: code,\n element: element, \n };\n}\n\nconst utils = {\n interopDefault,\n loadStyle,\n loadScript,\n renderCacheElement,\n renderElement,\n createElementMeta,\n};\n\nexport default utils;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown abc extension for markdown\n */\n'use strict';\n\nconst extName = 'abc';\nconst cssCdnName = 'ABCJSCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown abcjs extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof ABCJS === 'undefined') {\n var ABCJS = window.ABCJS || undefined;\n} \n\nfunction hasAbc() {\n return !!ABCJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasAbc();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n utils.loadStyle('abc-audio', '.highlight{fill: #0a9ecc;} .abcjs-cursor{stroke: red;}' +\n ' .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed{border: none;}' +\n ' .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed svg path{fill: #6eaa49;}');\n cdnjs.loadScript('ABCJS').then(name => {\n ABCJS = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasAbc()) return;\n cdnjs.unloadScript('ABCJS');\n cdnjs.unloadStyleSheet(cssCdnName);\n ABCJS = null;\n window.ABCJS = null;\n dync = false;\n}\n\nvar abcOptions = {\n\tadd_classes: true,\n\tresponsive: \"resize\"\n};\n\nfunction CursorControl(id) {\n\tconst self = this;\n\n\tself.onReady = function() {\n\t};\n\tself.onStart = function() {\n\t\tconst svg = document.querySelector(`#${id} svg`);\n\t\tconst cursor = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n\t\tcursor.setAttribute(\"class\", \"abcjs-cursor\");\n\t\tcursor.setAttributeNS(null, 'x1', 0);\n\t\tcursor.setAttributeNS(null, 'y1', 0);\n\t\tcursor.setAttributeNS(null, 'x2', 0);\n\t\tcursor.setAttributeNS(null, 'y2', 0);\n\t\tsvg.appendChild(cursor);\n\n\t};\n\tself.beatSubdivisions = 2;\n\tself.onBeat = function(beatNumber, totalBeats, totalTime) {\n\t};\n\tself.onEvent = function(ev) {\n\t\tif (ev.measureStart && ev.left === null)\n\t\t\treturn; // this was the second part of a tie across a measure line. Just ignore it.\n\n\t\tconst lastSelection = document.querySelectorAll(`#${id} svg .highlight`);\n\t\tfor (let k = 0; k < lastSelection.length; k++)\n\t\t\tlastSelection[k].classList.remove(\"highlight\");\n\n\t\tfor (let i = 0; i < ev.elements.length; i++ ) {\n\t\t\tconst note = ev.elements[i];\n\t\t\tfor (let j = 0; j < note.length; j++) {\n\t\t\t\tnote[j].classList.add(\"highlight\");\n\t\t\t}\n\t\t}\n\n\t\tconst cursor = document.querySelector(`#${id} svg .abcjs-cursor`);\n\t\tif (cursor) {\n\t\t\tcursor.setAttribute(\"x1\", ev.left - 2);\n\t\t\tcursor.setAttribute(\"x2\", ev.left - 2);\n\t\t\tcursor.setAttribute(\"y1\", ev.top);\n\t\t\tcursor.setAttribute(\"y2\", ev.top + ev.height);\n\t\t}\n\t};\n\tself.onFinished = function() {\n\t\tconst els = document.querySelectorAll(`#${id} svg .highlight`);\n\t\tfor (let i = 0; i < els.length; i++ ) {\n\t\t\tels[i].classList.remove(\"highlight\");\n\t\t}\n\t\tconst cursor = document.querySelector(`#${id} svg .abcjs-cursor`);\n\t\tif (cursor) {\n\t\t\tcursor.setAttribute(\"x1\", 0);\n\t\t\tcursor.setAttribute(\"x2\", 0);\n\t\t\tcursor.setAttribute(\"y1\", 0);\n\t\t\tcursor.setAttribute(\"y2\", 0);\n\t\t}\n\t};\n}\n\nlet synthControl;\n\nfunction load(audio, render, abc) {\n\tif (ABCJS.synth.supportsAudio()) {\n\t\tsynthControl = new ABCJS.synth.SynthController();\n\t\tsynthControl.load(`#${audio}`, new CursorControl(render), {displayLoop: true, displayRestart: true, displayPlay: true, displayProgress: true, displayWarp: true});\n\t} else {\n\t\tdocument.querySelector(`#${audio}`).innerHTML = \"<div class='audio-error'>Audio is not supported in this browser.</div>\";\n\t}\n\tsetTune(render, false, abc);\n}\n\nfunction setTune(render, userAction, abc) {\n\tsynthControl.disable(true);\n\tconst visualObj = ABCJS.renderAbc(`${render}`, abc, abcOptions)[0];\n\tconst midiBuffer = new ABCJS.synth.CreateSynth();\n\tmidiBuffer.init({\n\t\tvisualObj: visualObj,\n\t}).then(function (response) {\n\t\t// console.log(response);\n\t\tif (synthControl) {\n\t\t\tsynthControl.setTune(visualObj, userAction).then(function (response) {\n\t\t\t\tconsole.log(format(\"Audio successfully loaded.\"));\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.warn(\"Audio problem:\", error);\n\t\t\t});\n\t\t}\n\t}).catch(function (error) {\n\t\tconsole.warn(\"Audio problem:\", error);\n\t});\n}\n\nfunction onRenderAbc(resolve, scripts, res) {\n if (hasAbc()) {\n const id = res.id;\n const name = res.className;\n const data = btoa(res.data);\n const cssLink = res.cssLink;\n // const doc = res.element.ownerDocument;\n const audio = id + '-audio';\n let html = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-abc\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n html +=`<div id=\"${audio}\"></div>`;\n res.element.parentNode.outerHTML = html;\n // const renderElement = doc.getElementById(id);\n // ABCJS.renderAbc(element, data);\n const script = {\n id: id,\n code: `(function() {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n window.dispatchEvent(new CustomEvent('abcjs',{\n detail: {\n audio: '${audio}',\n render: '${id}',\n data: '${data}'\n }\n }));\n }\n })();`\n }\n scripts.push(script);\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderAbc(resolve, scripts, res);\n }, 10);\n}\n\n/**\n * render abc graphs\n */\nfunction renderAbc(element, scripts) {\n return new Promise(resolve => {\n let meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(cssCdnName);\n onRenderAbc(resolve, scripts, meta);\n });\n}\n\n// <div class=\"abc\"></div>\nfunction renderAbcElements(elements, scripts) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderAbc(element, scripts));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n\nfunction showdownAbc() {\n let hasEvent = false;\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the abc in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n if (!hasEvent) {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n hasEvent = true;\n // Listen sequence custom event\n window.addEventListener('abcjs', event => {\n if (event.detail) {\n load(event.detail.audio, event.detail.render, atob(event.detail.data));\n }\n }); \n }\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(cssCdnName)\n };\n console.log(format(`Begin render ${extName} elements.`));\n return renderAbcElements(elements, obj.scripts).then(() => {\n console.log(format(`End render ${extName} elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownAbc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown toc extension for markdown\n */\n'use strict';\n\nimport format from './log';\n\nfunction createHeadingElement(wrapper, element, toc, nexthead) {\n try {\n if (nexthead) {\n toc = toc.appendChild(wrapper.ownerDocument.createElement('ul'));\n }\n const child = toc\n .appendChild(wrapper.ownerDocument.createElement('li'))\n .appendChild(wrapper.ownerDocument.createElement('a'));\n if (element) {\n child.appendChild(wrapper.ownerDocument.createTextNode(element.textContent));\n child.href = '#' + element.id;\n }\n } catch {\n console.warn(format('append child error:'), wrapper);\n }\n return toc;\n}\n\nfunction appendTocElement(wrapper, element, currTocNode, headingLevel) {\n // If the current heading level is not greater than the heading level of current toc node,\n // return the toc node whose heading level is less than the current heading level in the toc node list.\n // At the same time, clearing the invalid toc node.\n if (headingLevel <= currTocNode.headingLevel) {\n let tempTocNode = null;\n while (currTocNode) {\n if (headingLevel > currTocNode.headingLevel) break;\n tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Remove toc node from node list and clean it.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n if (currTocNode) appendTocElement(wrapper, element, currTocNode, headingLevel);\n return currTocNode;\n }\n\n // If the current heading level is greater than the heading level of\n // the latest heading of the current toc node,\n // you need to create a new level heading with out list.\n // Otherwise add a heading of the same heading level.\n if (headingLevel > currTocNode.preLevel) {\n currTocNode.preLevel ++;\n while (headingLevel > currTocNode.preLevel) {\n currTocNode.toc = createHeadingElement(wrapper, null, currTocNode.toc, true);\n currTocNode.preLevel ++;\n }\n currTocNode.toc = createHeadingElement(wrapper, element, currTocNode.toc, true);\n } else {\n while (headingLevel < currTocNode.preLevel) {\n currTocNode.toc = currTocNode.toc.parentNode;\n currTocNode.preLevel--;\n }\n createHeadingElement(wrapper, element, currTocNode.toc, false);\n }\n\n if (currTocNode.parentNode) appendTocElement(wrapper, element, currTocNode.parentNode, headingLevel);\n return currTocNode;\n}\n\nfunction renderTocElements(wrapper) {\n let element = null;\n let headingLevel = 0;\n let currTocNode = null;\n let result = false;\n const elements = wrapper.querySelectorAll('p,h1,h2,h3,h4,h5,h6');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n\n // Match the element text is [toc].\n // And replace this element with out list that classname is 'showdown-toc'.\n if (element.textContent.trim().toLowerCase() == '[toc]') {\n // New table of contents container.\n let toc = wrapper.ownerDocument.createElement('ul');\n toc.className = 'showdown-toc';\n element.parentNode.replaceChild(toc, element);\n let tocNode = {\n parentNode: null,\n toc: toc,\n headingLevel: headingLevel,\n preLevel: 0\n };\n if (currTocNode) {\n // If the heading level of the TOC node is higher than\n // that of the previous TOC node,\n // the TOC node is a child of the previous TOC node.\n // Otherwise, look up the TOC node in the node list\n // whose heading level is not greater than the TOC node.\n if (headingLevel > currTocNode.headingLevel) {\n tocNode.parentNode = currTocNode;\n } else {\n // The code will never be executed, just to prevent logic loss.\n // Because invalid nodes have been cleared in appendTocElement method.\n let prev = currTocNode;\n while (headingLevel < prev.headingLevel) {\n prev = prev.parentNode;\n }\n if (prev) {\n if (headingLevel === prev.headingLevel) {\n tocNode.parentNode = prev.parentNode;\n } else {\n tocNode.parentNode = prev;\n }\n }\n }\n }\n currTocNode = tocNode;\n result = true;\n }\n // That's going to be what we use as contents entries\n // for this table of contents.\n else if (element['tagName']) {\n switch (element['tagName']) {\n case 'H1':\n case 'H2':\n case 'H3':\n case 'H4':\n case 'H5':\n case 'H6':\n headingLevel = parseInt(element['tagName'].substr(1));\n if (currTocNode) {\n if (!currTocNode.preLevel) {\n currTocNode.preLevel = headingLevel;\n }\n\n currTocNode = appendTocElement(wrapper, element, currTocNode, headingLevel);\n }\n break;\n }\n }\n }\n\n // Final, clear all toc node in node list.\n while (currTocNode) {\n let tempTocNode = currTocNode;\n currTocNode = tempTocNode.parentNode;\n // Clean toc node.\n tempTocNode.parentNode = null;\n tempTocNode.toc = null;\n tempTocNode.headingLevel = null;\n tempTocNode.preLevel = null;\n }\n return result;\n}\n\nfunction showdownToc() {\n const parser = new DOMParser();\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderTocElements(wrapper)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownToc;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown viz extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown viz extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Viz === 'undefined') {\n var Viz = window.Viz || undefined;\n}\n\nconst engines = ['circo', 'dot', 'neato', 'osage', 'twopi'];\n\nfunction hasViz() {\n return typeof Viz !== 'undefined' && Viz && typeof Viz.instance !== 'undefined'\n ? true\n : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasViz();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadScript('Viz').then(name => {\n Viz = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasViz()) return;\n cdnjs.unloadScript('Viz');\n Viz = null;\n window.Viz = null;\n dync = false; \n}\n\nfunction onRenderViz(resolve, res) {\n if (hasViz()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const el = res.element;\n const langattr = res.element.dataset.lang;\n let engine = 'dot';\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.engine && engines.indexOf(obj.engine) != -1) {\n engine = obj.engine;\n }\n }\n Viz.instance().then(viz => {\n const svg = viz.renderString(data, { format: 'svg', engine: engine });\n el.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svg}</div>`;\n resolve(true)\n });\n return;\n }\n\n setTimeout(() => {\n onRenderViz(resolve, res);\n }, 10);\n}\n\n/**\n * render Viz graphs\n */\nfunction renderViz(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(\"viz\", element);\n if (!meta) {\n return resolve(false);\n }\n \n onRenderViz(resolve, meta);\n });\n}\n\n// <div class=\"dot\"></div>\nfunction renderVizElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderViz(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownViz() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the Viz in code blocks\n const elements = wrapper.querySelectorAll('code.dot.language-dot');\n if (!elements.length) {\n return false;\n }\n console.log(format(`Begin render dot elements.`));\n return renderVizElements(elements).then(() => {\n console.log(format(`End render dot elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownViz;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown vega extension for markdown\n */\n'use strict';\n\nconst extName = \"vega\";\n\nif (typeof window === 'undefined') {\n throw Error('The showdown vega extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof vegaEmbed === 'undefined') {\n var vegaEmbed = window.vegaEmbed || undefined;\n}\n\nfunction hasVegaEmbed() {\n return typeof vegaEmbed !== 'undefined' && vegaEmbed ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasVegaEmbed();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs\n .loadScript(extName)\n .then(() => {\n return cdnjs.loadScript('vegaLite');\n })\n .then(() => {\n return cdnjs.loadScript('vegaEmbed');\n })\n .then(name => {\n vegaEmbed = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasVegaEmbed()) return;\n cdnjs.unloadScript('vegaEmbed');\n cdnjs.unloadScript('vegaLite');\n cdnjs.unloadScript(extName);\n const vegaStyle = document.getElementById('vega-embed-style');\n if (vegaStyle && vegaStyle.tagName.toLowerCase() === 'style') {\n const head = document.head || document.getElementsByTagName('head')[0];\n head.removeChild(vegaStyle);\n }\n vegaEmbed = null;\n window.vegaEmbed = null;\n dync = false; \n}\n\n/**\n * render VegaEmbed graphs\n */\nfunction renderVega(element, options, scripts, isVegaLite) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n const config = JSON.stringify(options); \n const data = JSON.stringify(JSON.parse(meta.data));\n const id = meta.id;\n const script = {\n id: id,\n code: `(function() {\n let el = document.getElementById('${id}');\n if (el){\n vegaEmbed(el, JSON.parse('${data}'), JSON.parse('${config}'));\n }\n })();`\n }\n scripts.push(script);\n return new Promise(resolve => {\n onRenderVega(resolve, meta);\n });\n}\n\n// <div class=\"vegaembed || flow\"></div>\nfunction renderVegaElements(vegaElements, vegaLiteElements, scripts, options) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n vegaElements.forEach(element => {\n promiseArray.push(renderVega(element, options, scripts, false));\n });\n vegaLiteElements.forEach(element => {\n promiseArray.push(renderVega(element, options, scripts, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// theme: 'excel' | 'ggplot2' | 'quartz' | 'vox' | 'dark'\nconst getOptions = (userOptions = {}) => ({\n actions: { editor: false },\n theme: 'vox',\n tooltip: false,\n renderer: 'svg',\n ...userOptions\n});\n\nfunction onRenderVega(resolve, res) {\n if (hasVegaEmbed()) {\n const id = res.id;\n const name = res.className;\n const node = res.element.parentNode;\n node.outerHTML = `<div id=\"${id}\" class=\"${name}\"></div>`;\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderVega(resolve, res);\n }, 10);\n}\n\nfunction showdownVega(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the VegaEmbed in code blocks\n const vegaElements = wrapper.querySelectorAll('code.vega.language-vega');\n const vegaLiteElements = wrapper.querySelectorAll('code.vega-lite.language-vega-lite');\n if (!vegaElements.length && !vegaLiteElements.length) {\n return false;\n }\n\n console.log(format(`Begin render vega elements.`));\n return renderVegaElements(vegaElements, vegaLiteElements, obj.scripts, this.config).then(() => {\n console.log(format(`End render vega elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownVega;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown align extension for markdown\n */\n'use strict';\n\nfunction renderAlignElements(wrapper) {\n let element = null;\n let childNode = null;\n let result = false;\n const elements = wrapper.querySelectorAll('p, li, h1, h2, h3, h4, h5, h6, div.paragraph');\n for (let i = 0; i < elements.length; i++) {\n element = elements[i];\n childNode = element.firstChild;\n while (childNode) {\n // Text node type is 3.\n if (childNode.nodeType === 3) {\n // Does the element consist of ':-:' or '--:'\n let results = childNode.nodeValue.match(/^([\\s\\S]*?)([:-]-:)(?:[\\s]?)([\\s\\S]*)$/);\n if (results) {\n if (results[2] === ':-:') {\n // align-center\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-center`;\n } else {\n element.className = `align-center`;\n }\n result = true;\n } else if (results[2] === '--:') {\n //align-right\n childNode.nodeValue = results[3];\n if (element.className) {\n element.className += ` align-right`;\n } else {\n element.className = `align-right`;\n }\n result = true;\n }\n //default algin-left\n }\n break;\n }\n childNode = childNode.nextSibling;\n }\n }\n return result;\n}\n\nfunction showdownAlign() {\n const parser = new DOMParser();\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n if (!renderAlignElements(wrapper)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownAlign;\n","/*\nBased on ASCIIMathTeXImg.js but now part of https://github.com/jhuix/showdowns.git\n\nBased on ASCIIMathML, Version 1.4.7 Aug 30, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen\nModified with TeX conversion for IMG rendering Sept 6, 2006 (c) David Lippman http://www.pierce.ctc.edu/dlippman\n Updated to match ver 2.2 Mar 3, 2014\n Latest at https://github.com/mathjax/asciimathml\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nvar config = {\n decimalsign: \".\" // change to \",\" if you like, beware of `(1,2)`!\n};\n\nvar CONST = 0,\n UNARY = 1,\n BINARY = 2,\n INFIX = 3,\n LEFTBRACKET = 4,\n RIGHTBRACKET = 5,\n SPACE = 6,\n UNDEROVER = 7,\n DEFINITION = 8,\n LEFTRIGHT = 9,\n TEXT = 10; // token types\n\nvar AMsqrt = { input: 'sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n AMroot = { input: 'root', tag: 'mroot', output: 'root', tex: null, ttype: BINARY },\n AMfrac = { input: 'frac', tag: 'mfrac', output: '/', tex: null, ttype: BINARY },\n AMdiv = { input: '/', tag: 'mfrac', output: '/', tex: null, ttype: INFIX },\n AMover = { input: 'stackrel', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n AMsub = { input: '_', tag: 'msub', output: '_', tex: null, ttype: INFIX },\n AMsup = { input: '^', tag: 'msup', output: '^', tex: null, ttype: INFIX },\n AMtext = { input: 'text', tag: 'mtext', output: 'text', tex: null, ttype: TEXT },\n AMmbox = { input: 'mbox', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT },\n AMquote = { input: '\"', tag: 'mtext', output: 'mbox', tex: null, ttype: TEXT };\n\nvar AMsymbols = [\n //some greek symbols\n { input: 'alpha', tag: 'mi', output: '\\u03B1', tex: null, ttype: CONST },\n { input: 'beta', tag: 'mi', output: '\\u03B2', tex: null, ttype: CONST },\n { input: 'chi', tag: 'mi', output: '\\u03C7', tex: null, ttype: CONST },\n { input: 'delta', tag: 'mi', output: '\\u03B4', tex: null, ttype: CONST },\n { input: 'Delta', tag: 'mo', output: '\\u0394', tex: null, ttype: CONST },\n { input: 'epsi', tag: 'mi', output: '\\u03B5', tex: 'epsilon', ttype: CONST },\n { input: 'varepsilon', tag: 'mi', output: '\\u025B', tex: null, ttype: CONST },\n { input: 'eta', tag: 'mi', output: '\\u03B7', tex: null, ttype: CONST },\n { input: 'gamma', tag: 'mi', output: '\\u03B3', tex: null, ttype: CONST },\n { input: 'Gamma', tag: 'mo', output: '\\u0393', tex: null, ttype: CONST },\n { input: 'iota', tag: 'mi', output: '\\u03B9', tex: null, ttype: CONST },\n { input: 'kappa', tag: 'mi', output: '\\u03BA', tex: null, ttype: CONST },\n { input: 'lambda', tag: 'mi', output: '\\u03BB', tex: null, ttype: CONST },\n { input: 'Lambda', tag: 'mo', output: '\\u039B', tex: null, ttype: CONST },\n { input: 'lamda', tag: 'mi', output: 'lambda', tex: null, ttype: DEFINITION },\n { input: 'Lamda', tag: 'mi', output: 'Lambda', tex: null, ttype: DEFINITION },\n { input: 'mu', tag: 'mi', output: '\\u03BC', tex: null, ttype: CONST },\n { input: 'nu', tag: 'mi', output: '\\u03BD', tex: null, ttype: CONST },\n { input: 'omega', tag: 'mi', output: '\\u03C9', tex: null, ttype: CONST },\n { input: 'Omega', tag: 'mo', output: '\\u03A9', tex: null, ttype: CONST },\n { input: 'phi', tag: 'mi', output: '\\u03C6', tex: null, ttype: CONST },\n { input: 'varphi', tag: 'mi', output: '\\u03D5', tex: null, ttype: CONST },\n { input: 'Phi', tag: 'mo', output: '\\u03A6', tex: null, ttype: CONST },\n { input: 'pi', tag: 'mi', output: '\\u03C0', tex: null, ttype: CONST },\n { input: 'Pi', tag: 'mo', output: '\\u03A0', tex: null, ttype: CONST },\n { input: 'psi', tag: 'mi', output: '\\u03C8', tex: null, ttype: CONST },\n { input: 'Psi', tag: 'mi', output: '\\u03A8', tex: null, ttype: CONST },\n { input: 'rho', tag: 'mi', output: '\\u03C1', tex: null, ttype: CONST },\n { input: 'sigma', tag: 'mi', output: '\\u03C3', tex: null, ttype: CONST },\n { input: 'Sigma', tag: 'mo', output: '\\u03A3', tex: null, ttype: CONST },\n { input: 'tau', tag: 'mi', output: '\\u03C4', tex: null, ttype: CONST },\n { input: 'theta', tag: 'mi', output: '\\u03B8', tex: null, ttype: CONST },\n { input: 'vartheta', tag: 'mi', output: '\\u03D1', tex: null, ttype: CONST },\n { input: 'Theta', tag: 'mo', output: '\\u0398', tex: null, ttype: CONST },\n { input: 'upsilon', tag: 'mi', output: '\\u03C5', tex: null, ttype: CONST },\n { input: 'xi', tag: 'mi', output: '\\u03BE', tex: null, ttype: CONST },\n { input: 'Xi', tag: 'mo', output: '\\u039E', tex: null, ttype: CONST },\n { input: 'zeta', tag: 'mi', output: '\\u03B6', tex: null, ttype: CONST },\n\n //binary operation symbols\n { input: '*', tag: 'mo', output: '\\u22C5', tex: 'cdot', ttype: CONST },\n { input: '**', tag: 'mo', output: '\\u2217', tex: 'ast', ttype: CONST },\n { input: '***', tag: 'mo', output: '\\u22C6', tex: 'star', ttype: CONST },\n { input: '//', tag: 'mo', output: '/', tex: '/', ttype: CONST, val: true, notexcopy: true },\n { input: '\\\\\\\\', tag: 'mo', output: '\\\\', tex: 'backslash', ttype: CONST },\n { input: 'setminus', tag: 'mo', output: '\\\\', tex: null, ttype: CONST },\n { input: 'xx', tag: 'mo', output: '\\u00D7', tex: 'times', ttype: CONST },\n { input: '|><', tag: 'mo', output: '\\u22C9', tex: 'ltimes', ttype: CONST },\n { input: '><|', tag: 'mo', output: '\\u22CA', tex: 'rtimes', ttype: CONST },\n { input: '|><|', tag: 'mo', output: '\\u22C8', tex: 'bowtie', ttype: CONST },\n { input: '-:', tag: 'mo', output: '\\u00F7', tex: 'div', ttype: CONST },\n { input: 'divide', tag: 'mo', output: '-:', tex: null, ttype: DEFINITION },\n { input: '@', tag: 'mo', output: '\\u2218', tex: 'circ', ttype: CONST },\n { input: 'o+', tag: 'mo', output: '\\u2295', tex: 'oplus', ttype: CONST },\n { input: 'ox', tag: 'mo', output: '\\u2297', tex: 'otimes', ttype: CONST },\n { input: 'o.', tag: 'mo', output: '\\u2299', tex: 'odot', ttype: CONST },\n { input: 'sum', tag: 'mo', output: '\\u2211', tex: null, ttype: UNDEROVER },\n { input: 'prod', tag: 'mo', output: '\\u220F', tex: null, ttype: UNDEROVER },\n { input: '^^', tag: 'mo', output: '\\u2227', tex: 'wedge', ttype: CONST },\n { input: '^^^', tag: 'mo', output: '\\u22C0', tex: 'bigwedge', ttype: UNDEROVER },\n { input: 'vv', tag: 'mo', output: '\\u2228', tex: 'vee', ttype: CONST },\n { input: 'vvv', tag: 'mo', output: '\\u22C1', tex: 'bigvee', ttype: UNDEROVER },\n { input: 'nn', tag: 'mo', output: '\\u2229', tex: 'cap', ttype: CONST },\n { input: 'nnn', tag: 'mo', output: '\\u22C2', tex: 'bigcap', ttype: UNDEROVER },\n { input: 'uu', tag: 'mo', output: '\\u222A', tex: 'cup', ttype: CONST },\n { input: 'uuu', tag: 'mo', output: '\\u22C3', tex: 'bigcup', ttype: UNDEROVER },\n { input: 'overset', tag: 'mover', output: 'stackrel', tex: null, ttype: BINARY },\n { input: 'underset', tag: 'munder', output: 'stackrel', tex: null, ttype: BINARY },\n\n //binary relation symbols\n { input: '!=', tag: 'mo', output: '\\u2260', tex: 'ne', ttype: CONST },\n { input: ':=', tag: 'mo', output: ':=', tex: null, ttype: CONST },\n { input: 'lt', tag: 'mo', output: '<', tex: null, ttype: CONST },\n { input: 'gt', tag: 'mo', output: '>', tex: null, ttype: CONST },\n { input: '<=', tag: 'mo', output: '\\u2264', tex: 'le', ttype: CONST },\n { input: 'lt=', tag: 'mo', output: '\\u2264', tex: 'leq', ttype: CONST },\n { input: 'gt=', tag: 'mo', output: '\\u2265', tex: 'geq', ttype: CONST },\n { input: '>=', tag: 'mo', output: '\\u2265', tex: 'ge', ttype: CONST },\n { input: '-<', tag: 'mo', output: '\\u227A', tex: 'prec', ttype: CONST },\n { input: '-lt', tag: 'mo', output: '\\u227A', tex: null, ttype: CONST },\n { input: '>-', tag: 'mo', output: '\\u227B', tex: 'succ', ttype: CONST },\n { input: '-<=', tag: 'mo', output: '\\u2AAF', tex: 'preceq', ttype: CONST },\n { input: '>-=', tag: 'mo', output: '\\u2AB0', tex: 'succeq', ttype: CONST },\n { input: 'in', tag: 'mo', output: '\\u2208', tex: null, ttype: CONST },\n { input: '!in', tag: 'mo', output: '\\u2209', tex: 'notin', ttype: CONST },\n { input: 'sub', tag: 'mo', output: '\\u2282', tex: 'subset', ttype: CONST },\n { input: 'sup', tag: 'mo', output: '\\u2283', tex: 'supset', ttype: CONST },\n { input: 'sube', tag: 'mo', output: '\\u2286', tex: 'subseteq', ttype: CONST },\n { input: 'supe', tag: 'mo', output: '\\u2287', tex: 'supseteq', ttype: CONST },\n { input: '-=', tag: 'mo', output: '\\u2261', tex: 'equiv', ttype: CONST },\n { input: '~=', tag: 'mo', output: '\\u2245', tex: 'stackrel{\\\\sim}{=}', notexcopy: true, ttype: CONST }, //back hack b/c mimetex doesn't support /cong\n { input: 'cong', tag: 'mo', output: '~=', tex: null, ttype: DEFINITION },\n { input: '~~', tag: 'mo', output: '\\u2248', tex: 'approx', ttype: CONST },\n { input: 'prop', tag: 'mo', output: '\\u221D', tex: 'propto', ttype: CONST },\n\n //logical symbols\n { input: 'and', tag: 'mtext', output: 'and', tex: null, ttype: SPACE },\n { input: 'or', tag: 'mtext', output: 'or', tex: null, ttype: SPACE },\n { input: 'not', tag: 'mo', output: '\\u00AC', tex: 'neg', ttype: CONST },\n { input: '=>', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'implies', tag: 'mo', output: '=>', tex: null, ttype: DEFINITION },\n { input: 'if', tag: 'mo', output: 'if', tex: null, ttype: SPACE },\n { input: '<=>', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n { input: 'iff', tag: 'mo', output: '<=>', tex: null, ttype: DEFINITION },\n { input: 'AA', tag: 'mo', output: '\\u2200', tex: 'forall', ttype: CONST },\n { input: 'EE', tag: 'mo', output: '\\u2203', tex: 'exists', ttype: CONST },\n { input: '_|_', tag: 'mo', output: '\\u22A5', tex: 'bot', ttype: CONST },\n { input: 'TT', tag: 'mo', output: '\\u22A4', tex: 'top', ttype: CONST },\n { input: '|--', tag: 'mo', output: '\\u22A2', tex: 'vdash', ttype: CONST },\n { input: '|==', tag: 'mo', output: '\\u22A8', tex: 'models', ttype: CONST }, //mimetex doesn't support\n\n //grouping brackets\n { input: '(', tag: 'mo', output: '(', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ')', tag: 'mo', output: ')', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: '[', tag: 'mo', output: '[', tex: null, ttype: LEFTBRACKET, val: true },\n { input: ']', tag: 'mo', output: ']', tex: null, ttype: RIGHTBRACKET, val: true },\n { input: 'left(', tag: 'mo', output: '(', tex: '(', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right)', tag: 'mo', output: ')', tex: ')', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: 'left[', tag: 'mo', output: '[', tex: '[', notexcopy: true, ttype: LEFTBRACKET, val: true },\n { input: 'right]', tag: 'mo', output: ']', tex: ']', notexcopy: true, ttype: RIGHTBRACKET, val: true },\n { input: '{', tag: 'mo', output: '{', tex: 'lbrace', ttype: LEFTBRACKET },\n { input: '}', tag: 'mo', output: '}', tex: 'rbrace', ttype: RIGHTBRACKET },\n { input: '|', tag: 'mo', output: '|', tex: null, ttype: LEFTRIGHT, val: true },\n { input: '|:', tag: 'mo', output: '|', tex: '|', ttype: LEFTBRACKET, notexcopy: true, val: true },\n { input: ':|', tag: 'mo', output: '|', tex: '|', ttype: RIGHTBRACKET, notexcopy: true, val: true },\n { input: ':|:', tag: 'mo', output: '|', tex: '|', ttype: CONST, notexcopy: true, val: true },\n //{input:\"||\", tag:\"mo\", output:\"||\", tex:null, ttype:LEFTRIGHT},\n { input: '(:', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: ':)', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '<<', tag: 'mo', output: '\\u2329', tex: 'langle', ttype: LEFTBRACKET },\n { input: '>>', tag: 'mo', output: '\\u232A', tex: 'rangle', ttype: RIGHTBRACKET },\n { input: '{:', tag: 'mo', output: '{:', tex: null, ttype: LEFTBRACKET, invisible: true },\n { input: ':}', tag: 'mo', output: ':}', tex: null, ttype: RIGHTBRACKET, invisible: true },\n\n //miscellaneous symbols\n { input: 'int', tag: 'mo', output: '\\u222B', tex: null, ttype: CONST },\n { input: 'dx', tag: 'mi', output: '{:d x:}', tex: null, ttype: DEFINITION },\n { input: 'dy', tag: 'mi', output: '{:d y:}', tex: null, ttype: DEFINITION },\n { input: 'dz', tag: 'mi', output: '{:d z:}', tex: null, ttype: DEFINITION },\n { input: 'dt', tag: 'mi', output: '{:d t:}', tex: null, ttype: DEFINITION },\n { input: 'oint', tag: 'mo', output: '\\u222E', tex: null, ttype: CONST },\n { input: 'del', tag: 'mo', output: '\\u2202', tex: 'partial', ttype: CONST },\n { input: 'grad', tag: 'mo', output: '\\u2207', tex: 'nabla', ttype: CONST },\n { input: '+-', tag: 'mo', output: '\\u00B1', tex: 'pm', ttype: CONST },\n { input: 'O/', tag: 'mo', output: '\\u2205', tex: 'emptyset', ttype: CONST },\n { input: 'oo', tag: 'mo', output: '\\u221E', tex: 'infty', ttype: CONST },\n { input: 'aleph', tag: 'mo', output: '\\u2135', tex: null, ttype: CONST },\n { input: '...', tag: 'mo', output: '...', tex: 'ldots', ttype: CONST },\n { input: ':.', tag: 'mo', output: '\\u2234', tex: 'therefore', ttype: CONST },\n { input: \":'\", tag: 'mo', output: '\\u2235', tex: 'because', ttype: CONST },\n { input: '/_', tag: 'mo', output: '\\u2220', tex: 'angle', ttype: CONST },\n { input: '/_\\\\', tag: 'mo', output: '\\u25B3', tex: 'triangle', ttype: CONST },\n { input: '\\\\ ', tag: 'mo', output: '\\u00A0', tex: null, ttype: CONST, val: true },\n { input: 'frown', tag: 'mo', output: '\\u2322', tex: null, ttype: CONST },\n { input: '%', tag: 'mo', output: '%', tex: '%', ttype: CONST, notexcopy: true },\n { input: 'quad', tag: 'mo', output: '\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'qquad', tag: 'mo', output: '\\u00A0\\u00A0\\u00A0\\u00A0', tex: null, ttype: CONST },\n { input: 'cdots', tag: 'mo', output: '\\u22EF', tex: null, ttype: CONST },\n { input: 'vdots', tag: 'mo', output: '\\u22EE', tex: null, ttype: CONST },\n { input: 'ddots', tag: 'mo', output: '\\u22F1', tex: null, ttype: CONST },\n { input: 'diamond', tag: 'mo', output: '\\u22C4', tex: null, ttype: CONST },\n { input: 'square', tag: 'mo', output: '\\u25A1', tex: 'boxempty', ttype: CONST },\n { input: '|__', tag: 'mo', output: '\\u230A', tex: 'lfloor', ttype: CONST },\n { input: '__|', tag: 'mo', output: '\\u230B', tex: 'rfloor', ttype: CONST },\n { input: '|~', tag: 'mo', output: '\\u2308', tex: 'lceil', ttype: CONST },\n { input: 'lceiling', tag: 'mo', output: '|~', tex: null, ttype: DEFINITION },\n { input: '~|', tag: 'mo', output: '\\u2309', tex: 'rceil', ttype: CONST },\n { input: 'rceiling', tag: 'mo', output: '~|', tex: null, ttype: DEFINITION },\n { input: 'CC', tag: 'mo', output: '\\u2102', tex: 'mathbb{C}', ttype: CONST, notexcopy: true },\n { input: 'NN', tag: 'mo', output: '\\u2115', tex: 'mathbb{N}', ttype: CONST, notexcopy: true },\n { input: 'QQ', tag: 'mo', output: '\\u211A', tex: 'mathbb{Q}', ttype: CONST, notexcopy: true },\n { input: 'RR', tag: 'mo', output: '\\u211D', tex: 'mathbb{R}', ttype: CONST, notexcopy: true },\n { input: 'ZZ', tag: 'mo', output: '\\u2124', tex: 'mathbb{Z}', ttype: CONST, notexcopy: true },\n { input: 'f', tag: 'mi', output: 'f', tex: null, ttype: UNARY, func: true, val: true },\n { input: 'g', tag: 'mi', output: 'g', tex: null, ttype: UNARY, func: true, val: true },\n { input: \"''\", tag: 'mo', output: \"''\", tex: null, val: true },\n { input: \"'''\", tag: 'mo', output: \"'''\", tex: null, val: true },\n { input: \"''''\", tag: 'mo', output: \"''''\", tex: null, val: true },\n\n //standard functions\n { input: 'lim', tag: 'mo', output: 'lim', tex: null, ttype: UNDEROVER },\n { input: 'Lim', tag: 'mo', output: 'Lim', tex: null, ttype: UNDEROVER },\n { input: 'sin', tag: 'mo', output: 'sin', tex: null, ttype: UNARY, func: true },\n { input: 'cos', tag: 'mo', output: 'cos', tex: null, ttype: UNARY, func: true },\n { input: 'tan', tag: 'mo', output: 'tan', tex: null, ttype: UNARY, func: true },\n { input: 'arcsin', tag: 'mo', output: 'arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'arccos', tag: 'mo', output: 'arccos', tex: null, ttype: UNARY, func: true },\n { input: 'arctan', tag: 'mo', output: 'arctan', tex: null, ttype: UNARY, func: true },\n { input: 'sinh', tag: 'mo', output: 'sinh', tex: null, ttype: UNARY, func: true },\n { input: 'cosh', tag: 'mo', output: 'cosh', tex: null, ttype: UNARY, func: true },\n { input: 'tanh', tag: 'mo', output: 'tanh', tex: null, ttype: UNARY, func: true },\n { input: 'cot', tag: 'mo', output: 'cot', tex: null, ttype: UNARY, func: true },\n { input: 'coth', tag: 'mo', output: 'coth', tex: null, ttype: UNARY, func: true },\n { input: 'sech', tag: 'mo', output: 'sech', tex: null, ttype: UNARY, func: true },\n { input: 'csch', tag: 'mo', output: 'csch', tex: null, ttype: UNARY, func: true },\n { input: 'sec', tag: 'mo', output: 'sec', tex: null, ttype: UNARY, func: true },\n { input: 'csc', tag: 'mo', output: 'csc', tex: null, ttype: UNARY, func: true },\n { input: 'log', tag: 'mo', output: 'log', tex: null, ttype: UNARY, func: true },\n { input: 'ln', tag: 'mo', output: 'ln', tex: null, ttype: UNARY, func: true },\n { input: 'abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n {\n input: 'norm',\n tag: 'mo',\n output: 'norm',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\|', '\\\\|']\n },\n {\n input: 'floor',\n tag: 'mo',\n output: 'floor',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lfloor', '\\\\rfloor']\n },\n {\n input: 'ceil',\n tag: 'mo',\n output: 'ceil',\n tex: null,\n ttype: UNARY,\n notexcopy: true,\n rewriteleftright: ['\\\\lceil', '\\\\rceil']\n },\n { input: 'Sin', tag: 'mo', output: 'Sin', tex: null, ttype: UNARY, func: true },\n { input: 'Cos', tag: 'mo', output: 'Cos', tex: null, ttype: UNARY, func: true },\n { input: 'Tan', tag: 'mo', output: 'Tan', tex: null, ttype: UNARY, func: true },\n { input: 'Arcsin', tag: 'mo', output: 'Arcsin', tex: null, ttype: UNARY, func: true },\n { input: 'Arccos', tag: 'mo', output: 'Arccos', tex: null, ttype: UNARY, func: true },\n { input: 'Arctan', tag: 'mo', output: 'Arctan', tex: null, ttype: UNARY, func: true },\n { input: 'Sinh', tag: 'mo', output: 'Sinh', tex: null, ttype: UNARY, func: true },\n { input: 'Cosh', tag: 'mo', output: 'Cosh', tex: null, ttype: UNARY, func: true },\n { input: 'Tanh', tag: 'mo', output: 'Tanh', tex: null, ttype: UNARY, func: true },\n { input: 'Cot', tag: 'mo', output: 'Cot', tex: null, ttype: UNARY, func: true },\n { input: 'Sec', tag: 'mo', output: 'Sec', tex: null, ttype: UNARY, func: true },\n { input: 'Csc', tag: 'mo', output: 'Csc', tex: null, ttype: UNARY, func: true },\n { input: 'Log', tag: 'mo', output: 'Log', tex: null, ttype: UNARY, func: true },\n { input: 'Ln', tag: 'mo', output: 'Ln', tex: null, ttype: UNARY, func: true },\n { input: 'Abs', tag: 'mo', output: 'abs', tex: null, ttype: UNARY, notexcopy: true, rewriteleftright: ['|', '|'] },\n\n { input: 'det', tag: 'mo', output: 'det', tex: null, ttype: UNARY, func: true },\n { input: 'exp', tag: 'mo', output: 'exp', tex: null, ttype: UNARY, func: true },\n { input: 'dim', tag: 'mo', output: 'dim', tex: null, ttype: CONST },\n { input: 'mod', tag: 'mo', output: 'mod', tex: 'text{mod}', ttype: CONST, notexcopy: true },\n { input: 'gcd', tag: 'mo', output: 'gcd', tex: null, ttype: UNARY, func: true },\n { input: 'lcm', tag: 'mo', output: 'lcm', tex: 'text{lcm}', ttype: UNARY, func: true, notexcopy: true },\n { input: 'lub', tag: 'mo', output: 'lub', tex: null, ttype: CONST },\n { input: 'glb', tag: 'mo', output: 'glb', tex: null, ttype: CONST },\n { input: 'min', tag: 'mo', output: 'min', tex: null, ttype: UNDEROVER },\n { input: 'max', tag: 'mo', output: 'max', tex: null, ttype: UNDEROVER },\n\n //arrows\n { input: 'uarr', tag: 'mo', output: '\\u2191', tex: 'uparrow', ttype: CONST },\n { input: 'darr', tag: 'mo', output: '\\u2193', tex: 'downarrow', ttype: CONST },\n { input: 'rarr', tag: 'mo', output: '\\u2192', tex: 'rightarrow', ttype: CONST },\n { input: '->', tag: 'mo', output: '\\u2192', tex: 'to', ttype: CONST },\n { input: '>->', tag: 'mo', output: '\\u21A3', tex: 'rightarrowtail', ttype: CONST },\n { input: '->>', tag: 'mo', output: '\\u21A0', tex: 'twoheadrightarrow', ttype: CONST },\n { input: '>->>', tag: 'mo', output: '\\u2916', tex: 'twoheadrightarrowtail', ttype: CONST },\n { input: '|->', tag: 'mo', output: '\\u21A6', tex: 'mapsto', ttype: CONST },\n { input: 'larr', tag: 'mo', output: '\\u2190', tex: 'leftarrow', ttype: CONST },\n { input: 'harr', tag: 'mo', output: '\\u2194', tex: 'leftrightarrow', ttype: CONST },\n { input: 'rArr', tag: 'mo', output: '\\u21D2', tex: 'Rightarrow', ttype: CONST },\n { input: 'lArr', tag: 'mo', output: '\\u21D0', tex: 'Leftarrow', ttype: CONST },\n { input: 'hArr', tag: 'mo', output: '\\u21D4', tex: 'Leftrightarrow', ttype: CONST },\n\n //commands with argument\n AMsqrt,\n AMroot,\n AMfrac,\n AMdiv,\n AMover,\n AMsub,\n AMsup,\n { input: 'cancel', tag: 'menclose', output: 'cancel', tex: null, ttype: UNARY },\n { input: 'Sqrt', tag: 'msqrt', output: 'sqrt', tex: null, ttype: UNARY },\n { input: 'hat', tag: 'mover', output: '\\u005E', tex: null, ttype: UNARY, acc: true },\n { input: 'bar', tag: 'mover', output: '\\u00AF', tex: 'overline', ttype: UNARY, acc: true },\n { input: 'vec', tag: 'mover', output: '\\u2192', tex: null, ttype: UNARY, acc: true },\n { input: 'tilde', tag: 'mover', output: '~', tex: null, ttype: UNARY, acc: true },\n { input: 'dot', tag: 'mover', output: '.', tex: null, ttype: UNARY, acc: true },\n { input: 'ddot', tag: 'mover', output: '..', tex: null, ttype: UNARY, acc: true },\n {\n input: 'overarc',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n {\n input: 'overparen',\n tag: 'mover',\n output: '\\u23DC',\n tex: 'stackrel{\\\\frown}',\n notexcopy: true,\n ttype: UNARY,\n acc: true\n },\n { input: 'ul', tag: 'munder', output: '\\u0332', tex: 'underline', ttype: UNARY, acc: true },\n { input: 'ubrace', tag: 'munder', output: '\\u23DF', tex: 'underbrace', ttype: UNARY, acc: true },\n { input: 'obrace', tag: 'mover', output: '\\u23DE', tex: 'overbrace', ttype: UNARY, acc: true },\n AMtext,\n AMmbox,\n AMquote,\n //{input:\"var\", tag:\"mstyle\", atname:\"fontstyle\", atval:\"italic\", output:\"var\", tex:null, ttype:UNARY},\n { input: 'color', tag: 'mstyle', ttype: BINARY },\n {\n input: 'bb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'bold',\n output: 'bb',\n tex: 'mathbf',\n ttype: UNARY,\n notexcopy: true\n },\n { input: 'mathbf', tag: 'mstyle', atname: 'mathvariant', atval: 'bold', output: 'mathbf', tex: null, ttype: UNARY },\n {\n input: 'sf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'sf',\n tex: 'mathsf',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathsf',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'sans-serif',\n output: 'mathsf',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'bbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'bbb',\n tex: 'mathbb',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathbb',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'double-struck',\n output: 'mathbb',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'cc',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'cc',\n tex: 'mathcal',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathcal',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'script',\n output: 'mathcal',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'tt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'tt',\n tex: 'mathtt',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathtt',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'monospace',\n output: 'mathtt',\n tex: null,\n ttype: UNARY\n },\n {\n input: 'fr',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'fr',\n tex: 'mathfrak',\n ttype: UNARY,\n notexcopy: true\n },\n {\n input: 'mathfrak',\n tag: 'mstyle',\n atname: 'mathvariant',\n atval: 'fraktur',\n output: 'mathfrak',\n tex: null,\n ttype: UNARY\n }\n];\n\nfunction compareNames(s1, s2) {\n if (s1.input > s2.input) return 1;\n else return -1;\n}\n\nvar AMnames = []; //list of input symbols\n\nfunction AMinitSymbols() {\n var i;\n var symlen = AMsymbols.length;\n for (i = 0; i < symlen; i++) {\n if (AMsymbols[i].tex && !(typeof AMsymbols[i].notexcopy == 'boolean' && AMsymbols[i].notexcopy)) {\n AMsymbols.push({\n input: AMsymbols[i].tex,\n tag: AMsymbols[i].tag,\n output: AMsymbols[i].output,\n ttype: AMsymbols[i].ttype,\n acc: AMsymbols[i].acc || false\n });\n }\n }\n refreshSymbols();\n}\n\nfunction refreshSymbols() {\n var i;\n AMsymbols.sort(compareNames);\n for (i = 0; i < AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;\n}\n\nfunction AMremoveCharsAndBlanks(str, n) {\n //remove n characters and any following blanks\n var st;\n if (str.charAt(n) == '\\\\' && str.charAt(n + 1) != '\\\\' && str.charAt(n + 1) != ' ') st = str.slice(n + 1);\n else st = str.slice(n);\n for (var i = 0; i < st.length && st.charCodeAt(i) <= 32; i = i + 1);\n return st.slice(i);\n}\n\nfunction AMposition(arr, str, n) {\n // return position >=n where str appears or would be inserted\n // assumes arr is sorted\n if (n == 0) {\n var h, m;\n n = -1;\n h = arr.length;\n while (n + 1 < h) {\n m = (n + h) >> 1;\n if (arr[m] < str) n = m;\n else h = m;\n }\n return h;\n } else for (var i = n; i < arr.length && arr[i] < str; i++);\n return i; // i=arr.length || arr[i]>=str\n}\n\nfunction AMgetSymbol(str) {\n //return maximal initial substring of str that appears in names\n //return null if there is none\n var k = 0; //new pos\n var j = 0; //old pos\n var mk; //match pos\n var st;\n var tagst;\n var match = '';\n var more = true;\n for (var i = 1; i <= str.length && more; i++) {\n st = str.slice(0, i); //initial substring of length i\n j = k;\n k = AMposition(AMnames, st, j);\n if (k < AMnames.length && str.slice(0, AMnames[k].length) == AMnames[k]) {\n match = AMnames[k];\n mk = k;\n i = match.length;\n }\n more = k < AMnames.length && str.slice(0, AMnames[k].length) >= AMnames[k];\n }\n AMpreviousSymbol = AMcurrentSymbol;\n if (match != '') {\n AMcurrentSymbol = AMsymbols[mk].ttype;\n return AMsymbols[mk];\n }\n // if str[0] is a digit or - return maxsubstring of digits.digits\n AMcurrentSymbol = CONST;\n k = 1;\n st = str.slice(0, 1);\n var integ = true;\n\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n if (st == config.decimalsign) {\n st = str.slice(k, k + 1);\n if ('0' <= st && st <= '9') {\n integ = false;\n k++;\n while ('0' <= st && st <= '9' && k <= str.length) {\n st = str.slice(k, k + 1);\n k++;\n }\n }\n }\n if ((integ && k > 1) || k > 2) {\n st = str.slice(0, k - 1);\n tagst = 'mn';\n } else {\n k = 2;\n st = str.slice(0, 1); //take 1 character\n tagst = ('A' > st || st > 'Z') && ('a' > st || st > 'z') ? 'mo' : 'mi';\n }\n if (st == '-' && AMpreviousSymbol == INFIX) {\n AMcurrentSymbol = INFIX;\n return { input: st, tag: tagst, output: st, ttype: UNARY, func: true, val: true };\n }\n return { input: st, tag: tagst, output: st, ttype: CONST, val: true }; //added val bit\n}\n\nfunction AMTremoveBrackets(node) {\n var st;\n if (node.charAt(0) == '{' && node.charAt(node.length - 1) == '}') {\n var leftchop = 0;\n\n st = node.substr(1, 5);\n if (st == '\\\\left') {\n st = node.charAt(6);\n if (st == '(' || st == '[' || st == '{') {\n leftchop = 7;\n } else {\n st = node.substr(6, 7);\n if (st == '\\\\lbrace') {\n leftchop = 13;\n }\n }\n } else {\n st = node.charAt(1);\n if (st == '(' || st == '[') {\n leftchop = 2;\n }\n }\n if (leftchop > 0) {\n //st = node.charAt(node.length-7);\n st = node.substr(node.length - 8);\n if (st == '\\\\right)}' || st == '\\\\right]}' || st == '\\\\right.}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 8) + '}';\n } else if (st == '\\\\rbrace}') {\n node = '{' + node.substr(leftchop);\n node = node.substr(0, node.length - 14) + '}';\n }\n }\n }\n return node;\n}\n\n/*Parsing ASCII math expressions with the following grammar\nv ::= [A-Za-z] | greek letters | numbers | other constant symbols\nu ::= sqrt | text | bb | other unary symbols for font commands\nb ::= frac | root | stackrel binary symbols\nl ::= ( | [ | { | (: | {: left brackets\nr ::= ) | ] | } | :) | :} right brackets\nS ::= v | lEr | uS | bSS Simple expression\nI ::= S_S | S^S | S_S^S | S Intermediate expression\nE ::= IE | I/I Expression\nEach terminal symbol is translated into a corresponding mathml node.*/\n\nvar AMnestingDepth, AMpreviousSymbol, AMcurrentSymbol;\n\nfunction AMTgetTeXsymbol(symb) {\n var pre;\n if (typeof symb.val == 'boolean' && symb.val) {\n pre = '';\n } else {\n pre = '\\\\';\n }\n if (symb.tex == null) {\n //can't remember why this was here. Breaks /delta /Delta to removed\n //return (pre+(pre==''?symb.input:symb.input.toLowerCase()));\n return pre + symb.input;\n } else {\n return pre + symb.tex;\n }\n}\n\nfunction AMTparseSexpr(str) {\n //parses str and returns [node,tailstr]\n var symbol,\n node,\n result,\n i,\n st, // rightvert = false,\n newFrag = '';\n str = AMremoveCharsAndBlanks(str, 0);\n symbol = AMgetSymbol(str); //either a token or a bracket or empty\n if (symbol == null || (symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0)) {\n return [null, str];\n }\n if (symbol.ttype == DEFINITION) {\n str = symbol.output + AMremoveCharsAndBlanks(str, symbol.input.length);\n symbol = AMgetSymbol(str);\n }\n switch (symbol.ttype) {\n case UNDEROVER:\n case CONST:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n var texsymbol = AMTgetTeXsymbol(symbol);\n if (texsymbol.charAt(0) == '\\\\' || symbol.tag == 'mo') return [texsymbol, str];\n else return ['{' + texsymbol + '}', str];\n\n case LEFTBRACKET: //read (expr+)\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n\n result = AMTparseExpr(str, true);\n AMnestingDepth--;\n var leftchop = 0;\n if (result[0].substr(0, 6) == '\\\\right') {\n st = result[0].charAt(6);\n if (st == ')' || st == ']' || st == '}') {\n leftchop = 6;\n } else if (st == '.') {\n leftchop = 7;\n } else {\n st = result[0].substr(6, 7);\n if (st == '\\\\rbrace') {\n leftchop = 13;\n }\n }\n }\n if (leftchop > 0) {\n result[0] = result[0].substr(leftchop);\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{' + result[0] + '}';\n else {\n node = '{' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n } else {\n if (typeof symbol.invisible == 'boolean' && symbol.invisible) node = '{\\\\left.' + result[0] + '}';\n else {\n node = '{\\\\left' + AMTgetTeXsymbol(symbol) + result[0] + '}';\n }\n }\n return [node, result[1]];\n case TEXT:\n if (symbol != AMquote) str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (str.charAt(0) == '{') i = str.indexOf('}');\n else if (str.charAt(0) == '(') i = str.indexOf(')');\n else if (str.charAt(0) == '[') i = str.indexOf(']');\n else if (symbol == AMquote) i = str.slice(1).indexOf('\"') + 1;\n else i = 0;\n if (i == -1) i = str.length;\n st = str.slice(1, i);\n if (st.charAt(0) == ' ') {\n newFrag = '\\\\ ';\n }\n newFrag += '\\\\text{' + st + '}';\n if (st.charAt(st.length - 1) == ' ') {\n newFrag += '\\\\ ';\n }\n str = AMremoveCharsAndBlanks(str, i + 1);\n return [newFrag, str];\n case UNARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n if (typeof symbol.func == 'boolean' && symbol.func) {\n // functions hack\n st = str.charAt(0);\n if (\n st == '^' ||\n st == '_' ||\n st == '/' ||\n st == '|' ||\n st == ',' ||\n (symbol.input.length == 1 && symbol.input.match(/\\w/) && st != '(')\n ) {\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n } else {\n node = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}';\n return [node, result[1]];\n }\n }\n result[0] = AMTremoveBrackets(result[0]);\n if (symbol.input == 'sqrt') {\n // sqrt\n return ['\\\\sqrt{' + result[0] + '}', result[1]];\n } else if (symbol.input == 'cancel') {\n // cancel\n return ['\\\\cancel{' + result[0] + '}', result[1]];\n } else if (typeof symbol.rewriteleftright != 'undefined') {\n // abs, floor, ceil\n return [\n '{\\\\left' + symbol.rewriteleftright[0] + result[0] + '\\\\right' + symbol.rewriteleftright[1] + '}',\n result[1]\n ];\n } else if (typeof symbol.acc == 'boolean' && symbol.acc) {\n // accent\n //return ['{'+AMTgetTeXsymbol(symbol)+'{'+result[0]+'}}',result[1]];\n return [AMTgetTeXsymbol(symbol) + '{' + result[0] + '}', result[1]];\n } else {\n // font change command\n return ['{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}}', result[1]];\n }\n case BINARY:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseSexpr(str);\n if (result[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result[0] = AMTremoveBrackets(result[0]);\n var result2 = AMTparseSexpr(result[1]);\n if (result2[0] == null) return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n result2[0] = AMTremoveBrackets(result2[0]);\n if (symbol.input == 'color') {\n newFrag = '{\\\\color{' + result[0].replace(/[\\{\\}]/g, '') + '}' + result2[0] + '}';\n } else if (symbol.input == 'root') {\n newFrag = '{\\\\sqrt[' + result[0] + ']{' + result2[0] + '}}';\n } else {\n newFrag = '{' + AMTgetTeXsymbol(symbol) + '{' + result[0] + '}{' + result2[0] + '}}';\n }\n return [newFrag, result2[1]];\n case INFIX:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return [symbol.output, str];\n case SPACE:\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{\\\\quad\\\\text{' + symbol.input + '}\\\\quad}', str];\n case LEFTRIGHT:\n // if (rightvert) return [null,str]; else rightvert = true;\n AMnestingDepth++;\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseExpr(str, false);\n AMnestingDepth--;\n var st = '';\n st = result[0].charAt(result[0].length - 1);\n //alert(result[0].lastChild+\"***\"+st);\n if (st == '|' && str.charAt(0) !== ',') {\n // its an absolute value subterm\n node = '{\\\\left|' + result[0] + '}';\n return [node, result[1]];\n } else {\n // the \"|\" is a \\mid\n node = '{\\\\mid}';\n return [node, str];\n }\n\n default:\n //alert(\"default\");\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n return ['{' + AMTgetTeXsymbol(symbol) + '}', str];\n }\n}\n\nfunction AMTparseIexpr(str) {\n var symbol, sym1, sym2, node, result;\n str = AMremoveCharsAndBlanks(str, 0);\n sym1 = AMgetSymbol(str);\n result = AMTparseSexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input != '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n // if (symbol.input == \"/\") result = AMTparseIexpr(str); else\n result = AMTparseSexpr(str);\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n // if (symbol.input == \"/\") AMTremoveBrackets(node);\n if (symbol.input == '_') {\n sym2 = AMgetSymbol(str);\n if (sym2.input == '^') {\n str = AMremoveCharsAndBlanks(str, sym2.input.length);\n var res2 = AMTparseSexpr(str);\n res2[0] = AMTremoveBrackets(res2[0]);\n str = res2[1];\n node = '{' + node;\n node += '_{' + result[0] + '}';\n node += '^{' + res2[0] + '}';\n node += '}';\n } else {\n node += '_{' + result[0] + '}';\n }\n } else {\n //must be ^\n //node = '{'+node+'}^{'+result[0]+'}';\n node = node + '^{' + result[0] + '}';\n }\n if (typeof sym1.func != 'undefined' && sym1.func) {\n sym2 = AMgetSymbol(str);\n if (sym2.ttype != INFIX && sym2.ttype != RIGHTBRACKET && (sym1.input.length > 1 || sym2.ttype == LEFTBRACKET)) {\n result = AMTparseIexpr(str);\n node = '{' + node + result[0] + '}';\n str = result[1];\n }\n }\n }\n\n return [node, str];\n}\n\nfunction AMTparseExpr(str, rightbracket) {\n var symbol,\n node,\n result,\n i,\n nodeList = [],\n newFrag = '';\n var addedright = false;\n do {\n str = AMremoveCharsAndBlanks(str, 0);\n result = AMTparseIexpr(str);\n node = result[0];\n str = result[1];\n symbol = AMgetSymbol(str);\n if (symbol.ttype == INFIX && symbol.input == '/') {\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n result = AMTparseIexpr(str);\n\n if (result[0] == null)\n // show box in place of missing argument\n result[0] = '{}';\n else result[0] = AMTremoveBrackets(result[0]);\n str = result[1];\n node = AMTremoveBrackets(node);\n node = '\\\\frac' + '{' + node + '}';\n node += '{' + result[0] + '}';\n newFrag += node;\n symbol = AMgetSymbol(str);\n } else if (node != undefined) newFrag += node;\n } while (\n ((symbol.ttype != RIGHTBRACKET && (symbol.ttype != LEFTRIGHT || rightbracket)) || AMnestingDepth == 0) &&\n symbol != null &&\n symbol.output != ''\n );\n if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) {\n // if (AMnestingDepth > 0) AMnestingDepth--;\n var len = newFrag.length;\n if (len > 2 && newFrag.charAt(0) == '{' && newFrag.indexOf(',') > 0) {\n //could be matrix (total rewrite from .js)\n var right = newFrag.charAt(len - 2);\n if (right == ')' || right == ']') {\n var left = newFrag.charAt(6);\n if ((left == '(' && right == ')' && symbol.output != '}') || (left == '[' && right == ']')) {\n var mxout = '';\n var pos = new Array(); //position of commas\n pos.push(0);\n var matrix = true;\n var mxnestingd = 0;\n var subpos = [];\n subpos[0] = [0];\n var lastsubposstart = 0;\n var mxanynestingd = 0;\n var columnaligns = '';\n for (i = 1; i < len - 1; i++) {\n if (newFrag.charAt(i) == left) mxnestingd++;\n if (newFrag.charAt(i) == right) {\n mxnestingd--;\n if (mxnestingd == 0 && newFrag.charAt(i + 2) == ',' && newFrag.charAt(i + 3) == '{') {\n pos.push(i + 2);\n lastsubposstart = i + 2;\n subpos[lastsubposstart] = [i + 2];\n }\n }\n if (newFrag.charAt(i) == '[' || newFrag.charAt(i) == '(' || newFrag.charAt(i) == '{') {\n mxanynestingd++;\n }\n if (newFrag.charAt(i) == ']' || newFrag.charAt(i) == ')' || newFrag.charAt(i) == '}') {\n mxanynestingd--;\n }\n if (newFrag.charAt(i) == ',' && mxanynestingd == 1) {\n subpos[lastsubposstart].push(i);\n }\n if (mxanynestingd < 0) {\n //happens at the end of the row\n if (lastsubposstart == i + 1) {\n //if at end of row, skip to next row\n i++;\n } else {\n //misformed something - abandon treating as a matrix\n matrix = false;\n }\n }\n }\n\n pos.push(len);\n var lastmxsubcnt = -1;\n if (mxnestingd == 0 && pos.length > 0 && matrix) {\n for (i = 0; i < pos.length - 1; i++) {\n if (i > 0) mxout += '\\\\\\\\';\n if (i == 0) {\n //var subarr = newFrag.substr(pos[i]+7,pos[i+1]-pos[i]-15).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 7, pos[i + 1] - pos[i] - 15)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 7, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n } else {\n //var subarr = newFrag.substr(pos[i]+8,pos[i+1]-pos[i]-16).split(',');\n if (subpos[pos[i]].length == 1) {\n var subarr = [newFrag.substr(pos[i] + 8, pos[i + 1] - pos[i] - 16)];\n } else {\n var subarr = [newFrag.substring(pos[i] + 8, subpos[pos[i]][1])];\n for (var j = 2; j < subpos[pos[i]].length; j++) {\n subarr.push(newFrag.substring(subpos[pos[i]][j - 1] + 1, subpos[pos[i]][j]));\n }\n subarr.push(newFrag.substring(subpos[pos[i]][subpos[pos[i]].length - 1] + 1, pos[i + 1] - 8));\n }\n }\n for (j = subarr.length - 1; j >= 0; j--) {\n if (subarr[j] == '{\\\\mid}') {\n if (i == 0) {\n columnaligns = '|' + columnaligns;\n }\n subarr.splice(j, 1);\n } else if (i == 0) {\n columnaligns = 'c' + columnaligns;\n }\n }\n if (lastmxsubcnt > 0 && subarr.length != lastmxsubcnt) {\n matrix = false;\n } else if (lastmxsubcnt == -1) {\n lastmxsubcnt = subarr.length;\n }\n mxout += subarr.join('&');\n }\n }\n mxout = '\\\\begin{array}{' + columnaligns + '} ' + mxout + '\\\\end{array}';\n\n if (matrix) {\n newFrag = mxout;\n }\n }\n }\n }\n\n str = AMremoveCharsAndBlanks(str, symbol.input.length);\n if (typeof symbol.invisible != 'boolean' || !symbol.invisible) {\n node = '\\\\right' + AMTgetTeXsymbol(symbol); //AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));\n newFrag += node;\n addedright = true;\n } else {\n newFrag += '\\\\right.';\n addedright = true;\n }\n }\n if (AMnestingDepth > 0 && !addedright) {\n newFrag += '\\\\right.'; //adjust for non-matching left brackets\n //todo: adjust for non-matching right brackets\n }\n\n return [newFrag, str];\n}\n\nexport default function AMTparseAMtoTeX(str) {\n AMnestingDepth = 0;\n str = str.replace(/(&nbsp;|\\u00a0|&#160;)/g, '');\n str = str.replace(/&gt;/g, '>');\n str = str.replace(/&lt;/g, '<');\n if (str.match(/\\S/) == null) {\n return '';\n }\n return AMTparseExpr(str.replace(/^\\s+/g, ''), false)[0];\n}\n\nAMinitSymbols();\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown katex extension for markdown\n */\n\nif (typeof window === 'undefined') {\n throw Error('The showdown katex extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport asciimathToTex from './asciimath2tex';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof katex === 'undefined') {\n var katex = window.katex || undefined;\n}\n\nif (typeof renderMathInElement === 'undefined') {\n var RenderMathInElement = window.renderMathInElement || undefined;\n}\n\nlet katexElementCount = 0;\nfunction hasKatex() {\n return typeof RenderMathInElement !== 'undefined' && RenderMathInElement && typeof katex !== 'undefined' && katex\n ? true\n : false;\n}\n\nlet dync = false;\nconst cssCdnName = 'katexCSS';\nfunction dyncLoadScript(callback) {\n const sync = hasKatex();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('katex')\n .then(name => {\n katex = utils.interopDefault(window[name]);\n return cdnjs.loadScript('renderMathInElement');\n })\n .then(name => {\n RenderMathInElement = utils.interopDefault(window[name]);\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n })\n .catch(e => {\n console.log('load script error: ' + e);\n });\n return sync;\n }\n }\n\n if (typeof callback === 'function' && callback) {\n callback(RenderMathInElement);\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasKatex()) return;\n cdnjs.unloadScript('renderMathInElement');\n cdnjs.unloadScript('katex');\n cdnjs.unloadStyleSheet(cssCdnName);\n katex = null;\n window.katex = null;\n RenderMathInElement = null;\n window.renderMathInElement = null; \n dync = false; \n}\n\nfunction onRenderKatex(resolve, res) {\n if (hasKatex()) {\n const id = res.id;\n const name = res.className;\n const input = res.input;\n const data = res.data;\n const cssLink = res.cssLink;\n const config = res.options;\n const doc = res.element.ownerDocument;\n let html = '';\n if (data instanceof Array) {\n data.forEach(code => {\n if (code === '') {\n html += '<br>';\n } else {\n const math = katex.renderToString(code, config);\n html += cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n });\n } else {\n const math = katex.renderToString(data, config);\n html = cssLink\n ? `<div title=\"${input}\" class=\"${name} css-katex\" data-css=\"${cssLink}\">${math}</div>`\n : `<div title=\"${input}\" class=\"${name}\">${math}</div>`;\n }\n res.element.parentNode.outerHTML = html;\n --katexElementCount;\n if (!katexElementCount) {\n RenderMathInElement(doc.body, config);\n }\n resolve(true);\n } else {\n setTimeout(() => {\n onRenderKatex(resolve, res);\n }, 10);\n }\n}\n\nfunction renderKatex(element, config, isAsciimath) {\n return new Promise(resolve => {\n let latex;\n const meta = utils.createElementMeta('katex', element, code => {\n let data;\n latex = code;\n const codes = code.split(/\\n[ \\f\\r\\t\\v]*\\n/);\n if (codes.length > 1) {\n data = new Array();\n codes.forEach(code => {\n code = code.trim();\n if (code !== '') {\n code = isAsciimath ? asciimathToTex(code) : code;\n }\n data.push(code);\n });\n } else {\n data = isAsciimath ? asciimathToTex(latex) : latex;\n }\n return data;\n });\n if (!meta) {\n return resolve(false);\n }\n\n meta.cssLink = cdnjs.getSrc(cssCdnName);\n meta.input = latex;\n meta.options = config;\n onRenderKatex(resolve, meta);\n });\n}\n\nfunction renderBlockElements(latex, asciimath, config) {\n katexElementCount = latex.length + asciimath.length;\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n latex.forEach(element => {\n promiseArray.push(renderKatex(element, config, false));\n });\n asciimath.forEach(element => {\n promiseArray.push(renderKatex(element, config, true));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n/**\n * https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n * @param {string} str\n * @returns {string} regexp escaped string\n */\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\$^|]/g, '\\\\$&');\n}\n\n// katex config\nconst getConfig = (userConfig = {}) => {\n let config = {\n displayMode: true,\n throwOnError: false, // fail silently\n errorColor: '#ff0000',\n delimiters: null,\n ...userConfig\n };\n\n function _isEmptyArray(a) {\n if (!Array.isArray(a) || !a.length) {\n return false;\n }\n\n return true;\n }\n\n function _isObjectProperty(obj, prop) {\n if (!obj || typeof obj !== 'object' || !obj.hasOwnProperty(prop)) {\n return false;\n }\n return true;\n }\n\n function _getDelimiter(obj, style, type) {\n if (!_isObjectProperty(obj, style) || !_isObjectProperty(obj[style], type) || !_isEmptyArray(obj[style][type])) {\n return false;\n }\n\n obj[style][type].forEach(delimiter => {\n delimiter.display = type === 'inline' ? false : true;\n if (style === 'asciimath') {\n delimiter.asciimath = true;\n }\n });\n return obj[style][type];\n }\n\n if (!Array.isArray(config.delimiters)) {\n config.delimiters = []\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'display') || [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true } \n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'texmath', 'inline') || [\n { left: '\\\\(', right: '\\\\)', display: false }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'display') || [\n { left: '@@', right: '@@', display: true, asciimath: true }\n ]\n )\n .concat(\n _getDelimiter(config.delimiters, 'asciimath', 'inline') || [\n { left: '@ ', right: ' @', display: false, asciimath: true },\n { left: \"\\\\~\", right: \"\\\\~\", display: false, asciimath: true }\n ]\n );\n } else if (!config.delimiters.length) {\n config.delimiters = [\n { left: '$$', right: '$$', display: true },\n { left: '\\\\[', right: '\\\\]', display: true },\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true }, \n { left: '\\\\(', right: '\\\\)', display: false },\n { left: '@@', right: '@@', display: true, asciimath: true },\n { left: '@ ', right: ' @', display: false, asciimath: true },\n { left: \"\\\\~\", right: \"\\\\~\", display: false, asciimath: true }\n ];\n }\n return config;\n};\n\nfunction showdownKatex(userConfig) {\n let inlineMathCount = 0;\n const config = getConfig(userConfig);\n const mathDelimiters = config.delimiters.map(({ left, right, display, asciimath }) => {\n const test = new RegExp(`${escapeRegExp(left)}(.+?)${escapeRegExp(right)}`, 'g');\n const replacer = (match, math) => {\n ++inlineMathCount;\n if (asciimath) {\n math = asciimathToTex(math);\n }\n if (display) {\n return `\\\\[${math}\\\\]`;\n }\n return `\\\\(${math}\\\\)`;\n };\n return { test, replacer };\n });\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n inlineMathCount = 0;\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n if (mathDelimiters.length) {\n // convert inline math to inline latex\n // ignore anything in code and pre elements\n wrapper.querySelectorAll(':not(code):not(pre)').forEach(el => {\n /** @type Text[] */\n const textNodes = [...el.childNodes].filter(\n // skip \"empty\" text nodes\n node => node.nodeName === '#text' && node.nodeValue.trim()\n );\n\n textNodes.forEach(node => {\n const newText = mathDelimiters.reduce(\n (acc, { test, replacer }) => acc.replace(test, replacer),\n node.nodeValue\n );\n node.nodeValue = newText;\n });\n });\n }\n\n // find the math in code blocks\n const latex = wrapper.querySelectorAll('code.latex.language-latex');\n const asciimath = wrapper.querySelectorAll('code.asciimath.language-asciimath');\n\n if (!latex.length && !asciimath.length) {\n if (inlineMathCount > 0) {\n this.config.cssLink = cdnjs.getSrc(cssCdnName);\n const that = this;\n function asyncRenderKatex(resolve, render) {\n if (hasKatex()) {\n render(wrapper.ownerDocument.body, that.config);\n resolve(true);\n } else {\n setTimeout(() => {\n asyncRenderKatex(resolve, render);\n }, 10);\n }\n }\n console.log(format(`Begin render inline katex elements.`));\n return new Promise(resolve => {\n dyncLoadScript(render => {\n asyncRenderKatex(resolve, render);\n });\n }).then(() => {\n console.log(format(`End render inline katex elements.`));\n return obj;\n });\n }\n\n return false;\n }\n\n config.cssLink = cdnjs.getSrc(cssCdnName);\n console.log(format(`Begin render katex elements.`));\n return renderBlockElements(latex, asciimath, this.config).then(() => {\n console.log(format(`End render katex elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownKatex;\n","/*\n * Copyright (c) 2024-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown echarts extension for markdown\n */\n'use strict';\n\nconst extName = \"echarts\";\n\nif (typeof window === 'undefined') {\n throw Error(`The showdown ${extName} extension can only be used in browser environment!`);\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof echarts === 'undefined') {\n var echarts = window.echarts || undefined;\n}\n\nfunction hasEcharts() {\n return !!echarts;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasEcharts();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadScript(extName).then(name => {\n echarts = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasEcharts()) return;\n cdnjs.unloadScript(extName);\n echarts = null;\n window.echarts = null;\n dync = false;\n}\n\nfunction onRenderEcharts(resolve, res) {\n if (hasEcharts()) {\n const id = res.id;\n const name = res.className;\n const node = res.element.parentNode;\n // // 在 SSR 模式下第一个参数不需要再传入 DOM 对象\n // let chart = echarts.init(null, null, {\n // renderer: 'svg', // 必须使用 SVG 模式\n // ssr: true,\n // width: res.config.width, // 需要指明高和宽\n // height: res.config.height\n // });\n // // 像正常使用一样 setOption\n // const option = JSON.parse(data);\n // chart.setOption(option);\n // // 输出字符串\n // const svg = chart.renderToSVGString();\n // // 如果不再需要图表,调用 dispose 以释放内存\n // chart.dispose();\n // chart = null;\n node.outerHTML = `<div id=\"${id}\" class=\"${name}\"></div>`;\n return resolve(true);\n }\n\n setTimeout(() => {\n onRenderEcharts(resolve, res);\n }, 20);\n}\n\n\n/**\n * render echarts graphs\n */\nfunction renderEcharts(element, scripts, config) {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return Promise.resolve(false);\n }\n\n config = JSON.stringify({ ...config, ssr: false });\n const data = JSON.stringify(JSON.parse(meta.data));\n const script = {\n id: meta.id,\n code: `(function() {\n let el = document.getElementById('${meta.id}');\n if (el){\n let config = JSON.parse('${config}');\n let chart = echarts.init(el, null, config);\n let option = JSON.parse('${data}');\n chart.setOption(option);\n }\n })();`\n }\n scripts.push(script);\n return new Promise(resolve => {\n onRenderEcharts(resolve, meta);\n });\n}\n\n// <div class=\"echarts\"></div>\nfunction renderEchartsElements(elements, scripts, config) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderEcharts(element, scripts, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// echarts default config\nconst getConfig = (config = {}) => ({\n renderer: 'svg',\n ssr: false,\n width: 400,\n height: 300,\n tooltip: {\n show: true\n },\n animation: true,\n ...config\n});\n\nfunction showdownEcharts(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function (obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the echarts in code blocks\n const elements = wrapper.querySelectorAll(`code.${extName}.language-${extName}`);\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render ${extName} elements.`));\n return renderEchartsElements(elements, obj.scripts, this.config).then(() => {\n console.log(format(`End render ${extName} elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownEcharts;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown mermaid extension for markdown\n */\n'use strict';\n\nconst extName = \"mermaid\";\n\nif (typeof window === 'undefined') {\n throw Error('The showdown mermaid extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof mermaid === 'undefined') {\n var mermaid = window.mermaid || undefined;\n}\n\nfunction hasMermaid() {\n return typeof mermaid !== 'undefined' && mermaid ? true : false;\n}\n\nlet dync = false;\nfunction dyncLoadScript(config) {\n // When window object exists,\n // it means browser environment, otherwise node.js environment.\n // In browser environment, html need to be rendered asynchronously.\n const sync = hasMermaid();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n cdnjs.loadScript(extName).then(name => {\n mermaid = utils.interopDefault(window[name]);\n mermaid.initialize(config);\n });\n return sync\n }\n }\n\n mermaid.initialize(config);\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasMermaid()) return;\n cdnjs.unloadScript(extName);\n katex = null;\n window.mermaid = null;\n mermaid = null; \n dync = false; \n}\n\n\nfunction onRenderMermaid(resolve, res) {\n if (hasMermaid()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const node = res.element.parentNode;\n mermaid.render(id, data).then(m =>{\n node.outerHTML = `<div class=\"${name}\">${m.svg}</div>`;\n resolve(true);\n });\n return;\n }\n\n setTimeout(() => {\n onRenderMermaid(resolve, res);\n }, 10);\n}\n\n/**\n * render mermaid graphs\n */\nfunction renderMermaid(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n onRenderMermaid(resolve, meta);\n });\n}\n\n// <div class=\"mermaid\"></div>\nfunction renderMermaidElements(elements, config) {\n dyncLoadScript(config);\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderMermaid(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// mermaid default config\nconst getConfig = (config = {}) => ({\n theme: 'forest',\n logLevel: 4,\n startOnLoad: false,\n arrowMarkerAbsolute: false,\n flowchart: {\n curve: 'basis'\n },\n gantt: {\n axisFormat: '%m/%d/%Y'\n },\n sequence: {\n actorMargin: 50\n },\n ...config\n});\n\nfunction showdownMermaid(userConfig) {\n const config = getConfig(userConfig);\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the mermaid in code blocks\n const elements = wrapper.querySelectorAll('code.mermaid.language-mermaid');\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render mermaid elements.`));\n return renderMermaidElements(elements, this.config).then(() => {\n console.log(format(`End render mermaid elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownMermaid;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: zlib codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n'use strict';\n\nimport zlib from 'zlib';\n\nfunction encode64(data) {\n var r = '';\n for (var i = 0; i < data.length; i += 3) {\n if (i + 2 == data.length) {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), 0);\n } else if (i + 1 == data.length) {\n r += append3bytes(data.charCodeAt(i), 0, 0);\n } else {\n r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), data.charCodeAt(i + 2));\n }\n }\n return r;\n}\n\nfunction append3bytes(b1, b2, b3) {\n var c1 = b1 >> 2;\n var c2 = ((b1 & 0x3) << 4) | (b2 >> 4);\n var c3 = ((b2 & 0xf) << 2) | (b3 >> 6);\n var c4 = b3 & 0x3f;\n var r = '';\n r += encode6bit(c1 & 0x3f);\n r += encode6bit(c2 & 0x3f);\n r += encode6bit(c3 & 0x3f);\n r += encode6bit(c4 & 0x3f);\n return r;\n}\n\nfunction encode6bit(b) {\n if (b < 10) {\n return String.fromCharCode(48 + b);\n }\n b -= 10;\n if (b < 26) {\n return String.fromCharCode(65 + b);\n }\n b -= 26;\n if (b < 26) {\n return String.fromCharCode(97 + b);\n }\n b -= 26;\n if (b == 0) {\n return '-';\n }\n if (b == 1) {\n return '_';\n }\n return '?';\n}\n\nfunction decode6bit(cc) {\n var c = cc.charCodeAt(0);\n if (cc === '_') return 63;\n if (cc === '-') return 62;\n if (c >= 97) return c - 61; // - 97 + 26 + 10\n if (c >= 65) return c - 55; // - 65 + 10\n if (c >= 48) return c - 48;\n return '?';\n}\n\nfunction extract3bytes(data) {\n var c1 = decode6bit(data[0]);\n var c2 = decode6bit(data[1]);\n var c3 = decode6bit(data[2]);\n var c4 = decode6bit(data[3]);\n var b1 = (c1 << 2) | ((c2 >> 4) & 0x3f);\n var b2 = ((c2 << 4) & 0xf0) | ((c3 >> 2) & 0xf);\n var b3 = ((c3 << 6) & 0xc0) | (c4 & 0x3f);\n return [b1, b2, b3];\n}\n\nfunction decode64(data) {\n var r = '';\n var i = 0;\n for (i = 0; i < data.length; i += 4) {\n var t = extract3bytes(data.substring(i, i + 4));\n r = r + String.fromCharCode(t[0]);\n r = r + String.fromCharCode(t[1]);\n r = r + String.fromCharCode(t[2]);\n }\n return r;\n}\n\nfunction encode(data) {\n return encode64(\n zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('binary')\n );\n}\n\nfunction decode(data) {\n return zlib.inflateRawSync(Buffer.from(decode64(data), 'binary')).toString();\n}\n\nfunction zEncode(data) {\n return zlib\n .deflateRawSync(data, {\n level: 9\n })\n .toString('base64');\n}\n\nfunction zDecode(data) {\n return zlib.inflateRawSync(Buffer.from(data, 'base64')).toString();\n}\n\nconst brEncode =\n typeof zlib.brotliCompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib\n .brotliCompressSync(Buffer.from(data), {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 11\n }\n })\n .toString('base64');\n };\n\nconst brDecode =\n typeof zlib.brotliDecompressSync === 'undefined'\n ? undefined\n : function(data) {\n return zlib.brotliDecompressSync(Buffer.from(data, 'base64')).toString();\n };\n\nconst zlibcodec = { encode, decode, brEncode, brDecode };\nexport { zlibcodec as default, encode, decode, zEncode, zDecode, brEncode, brDecode };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: plantuml codec for PlantUML website\n * Encode/Decode code taken from the PlantUML website:\n * http://plantuml.sourceforge.net/codejavascript2.html\n */\n\n'use strict';\n\nimport * as zlibcodec from './zlib-codec.js';\n\nfunction encodeuml(data) {\n const startuml = '@startuml';\n const enduml = '@enduml';\n const s = `${startuml}${String(data.split(startuml)[1]).split(enduml)[0] || ''}${enduml}`;\n return zlibcodec.encode(s);\n}\n\nfunction decodeuml(data) {\n return zlibcodec.decode(data);\n}\n\nconst plantumlcodec = {\n encodeuml,\n decodeuml\n};\n\nexport { plantumlcodec as default, encodeuml, decodeuml };\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown plantuml extension for markdown\n */\n'use strict';\n\nimport format from './log';\nimport plantumlcodec from '../utils/plantuml-codec.js';\n\nconst defaultUmlWebsite = 'www.plantuml.com/plantuml';\nconst defaultImageFormat = 'img';\n\nlet umlElementCount = 0;\nfunction renderPlantumlElement(element, config) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return resolve(false);\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const imageFormat = config.imageFormat;\n if (imageFormat === 'svg') {\n const id = 'plantuml-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n if (typeof config.svgRender === 'function' && config.svgRender) {\n config.svgRender(id, name, code, umlElementCount).then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n } else if (typeof window !== 'undefined' && window.fetch && window.dispatchEvent) {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n window\n .fetch(src)\n .then(response => {\n if (response.ok) {\n return response.text();\n }\n })\n .then(svgData => {\n element.parentNode.outerHTML = `<div id=\"${id}\" class=\"${name}\">${svgData}</div>`;\n resolve(true);\n });\n }\n } else {\n const protocol = window && window.location.protocol;\n const website = (protocol === 'http:' || protocol === 'https:' ? '//' : 'https://') + config.umlWebSite;\n const imageExtension = imageFormat !== defaultImageFormat ? `.${imageFormat}` : '';\n const uml = plantumlcodec.encodeuml(code);\n const src = `${website}/${imageFormat}/${uml}${imageExtension}`;\n element.parentNode.outerHTML = `<div class=\"${name}\"><img src='${src}' alt=''></img></div>`;\n return resolve(true);\n }\n });\n}\n\n// <div class=\"plantuml\"></div>\nfunction renderPlantumlElements(elements, config) {\n umlElementCount = elements.length;\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderPlantumlElement(element, config));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Plantuml default config\nconst getConfig = (config = {}) => ({\n umlWebSite: defaultUmlWebsite,\n imageFormat: defaultImageFormat,\n svgRender: null,\n ...config\n});\n\nfunction showdownPlantuml(userConfig) {\n const config = getConfig(userConfig);\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the plantuml in code blocks\n const elements = wrapper.querySelectorAll('code.plantuml.language-plantuml');\n if (!elements.length) {\n return false;\n }\n\n console.log(format(`Begin render plantuml elements.`));\n return renderPlantumlElements(elements, this.config).then(() => {\n console.log(format(`End render plantuml elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownPlantuml;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown railroad extension for markdown\n */\n'use strict';\n\nconst extName = \"railroad\";\nconst cssCdnName = 'railroadCSS';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown railroad extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nlet railroad = false;\nfunction hasRailroad() {\n return railroad;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasRailroad();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs.loadScript(extName).then(() => {\n railroad = true;\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasRailroad()) return;\n cdnjs.unloadScript(extName);\n cdnjs.unloadStyleSheet(cssCdnName);\n railroad = false;\n dync = false; \n}\n\nfunction onRenderRailroad(resolve, res) {\n if (hasRailroad()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const cssLink = res.cssLink;\n const railroadElement = window.eval(data).format();\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-railroad\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n railroadElement.addTo(doc.getElementById(id));\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderRailroad(resolve, res);\n }, 10);\n}\n\n/**\n * render railroad graphs\n */\nfunction renderRailroad(element) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta(extName, element);\n if (!meta) {\n return resolve(false);\n }\n\n\n meta.cssLink = cdnjs.getSrc(cssCdnName);\n onRenderRailroad(resolve, meta);\n });\n}\n\n// <div class=\"railroad\"></div>\nfunction renderRailroadElements(elements) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n elements.forEach(element => {\n promiseArray.push(renderRailroad(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\nfunction showdownRailroad() {\n return [\n {\n type: 'output',\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the railroad in code blocks\n const elements = wrapper.querySelectorAll('code.railroad.language-railroad');\n if (!elements.length) {\n return false;\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(cssCdnName)\n };\n console.log(format(`Begin render railroad elements.`));\n return renderRailroadElements(elements).then(() => {\n console.log(format(`End render railroad elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownRailroad;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown sequence extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown sequence extension can only be used in browser environment!');\n}\n\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\n// js-sequence-diagrams can create a global object named Diagrams of window,\n// To be compatible with railroad diagrams extension that also has window.Diagram object,\n// You need to save the original Diagrams object of railroad diagrams extension here.\nlet diagram;\nif (typeof window !== 'undefined') {\n if (window.Diagram) {\n diagram = window.Diagram;\n if (window.Diagram['Signal']) {\n var sequence = window.Diagram;\n }\n }\n}\n\nconst themes = ['simple', 'hand'];\nif (typeof sequence === 'undefined' && typeof window !== 'undefined') {\n var sequence = window.SequenceJS;\n}\n\nfunction hasRaphael() {\n return !!Raphael\n}\n\nfunction hasSequence() {\n return hasRaphael() && !!sequence;\n}\n\nfunction hasFlowchart() {\n return hasRaphael() && !!window.flowchart;\n}\n\nlet dync = false;\nconst cssCdnName = 'sequenceCSS';\nfunction dyncLoadScript() {\n const sync = hasSequence();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n cdnjs.loadStyleSheet(cssCdnName);\n cdnjs\n .loadScript('WebFont')\n .then(() => {\n if (!hasRaphael()) {\n return cdnjs.loadScript('Raphael');\n }\n\n return 'Raphael';\n })\n .then((name) => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('Snap');\n })\n .then(() => {\n return cdnjs.loadScript('underscore');\n })\n .then(() => {\n // You need to save the original Diagrams object of sequence diagrams extension here.\n if (!diagram && window['Diagram']) {\n diagram = window['Diagram'];\n }\n return cdnjs.loadScript('sequence');\n })\n .then(() => {\n sequence = window['Diagram'];\n window.SequenceJS = sequence;\n // You need to replace the original Diagrams object of sequence diagrams extension here.\n if (diagram) {\n window['Diagram'] = diagram;\n }\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasSequence()) return;\n cdnjs.unloadScript('sequence');\n cdnjs.unloadScript('underscore');\n cdnjs.unloadScript('Snap');\n cdnjs.unloadScript('WebFont');\n cdnjs.unloadStyleSheet(cssCdnName);\n diagram = null;\n sequence = null;\n window.Diagram = null;\n window.SequenceJS = null;\n if (!hasFlowchart()) {\n cdnjs.unloadScript('Raphael');\n const es = document.getElementsByTagName('i');\n if (es && es.length > 0) {\n const body = document.body;\n for (let i = 0; i < es.length; i++) {\n const e = es[i];\n if (e.title && e.title === 'Raphaël Colour Picker') {\n body.removeChild(e);\n }\n }\n }\n Raphael = null;\n window.Raphael = null;\n } \n dync = false; \n}\n\n/**\n * render sequence graphs\n */\nfunction renderSequence(element) {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const sync = dyncLoadScript();\n const cssLink = cdnjs.getSrc(cssCdnName);\n const code = element.textContent.trim();\n const name = 'js-sequence' + (!diagramClass ? '' : ' ') + diagramClass;\n const id = 'sequence-' + Date.now() + '-' + Math.floor(Math.random() * 10000);\n element.id = id;\n if (cssLink) {\n element.className = element.className + (!element.className ? '' : ' ') + 'css-sequence';\n element.dataset.css = cssLink;\n }\n if (!sync && typeof window !== 'undefined' && window.dispatchEvent) {\n Promise.resolve(id).then(elementid => {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: elementid,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink\n }\n })\n );\n });\n } else {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n // dispatch sequence custom event\n window.dispatchEvent(\n new CustomEvent('sequence', {\n detail: {\n id: id,\n className: name,\n data: code,\n langattr: langattr,\n cssLink: cssLink\n }\n })\n );\n }\n }\n}\n\n// <div class=\"sequence\"></div>\nfunction renderSequenceElements(elements) {\n if (!elements.length) {\n return false;\n }\n elements.forEach(element => {\n renderSequence(element);\n });\n return true;\n}\n\nfunction onRenderSequence(element) {\n if (hasSequence()) {\n const id = element.id;\n const name = element.className;\n const data = element.data;\n const cssLink = element.cssLink;\n let theme = 'hand';\n const langattr = element.langattr;\n if (langattr) {\n const obj = JSON.parse(langattr);\n if (obj && obj.theme && themes.indexOf(obj.theme) != -1) {\n theme = obj.theme;\n }\n }\n let el = window.document.getElementById(id);\n if (el) {\n el.parentNode.outerHTML = cssLink\n ? `<div id=\"${id}\" class=\"${name} css-sequence\" data-css=\"${cssLink}\"></div>`\n : `<div id=\"${id}\" class=\"${name}\"></div>`;\n el = window.document.getElementById(id);\n const d = sequence.parse(data);\n const options = { theme: theme };\n d.drawSVG(el ? el : id, options);\n return;\n }\n }\n setTimeout(() => {\n onRenderSequence(element);\n }, 10);\n}\n\nfunction showdownSequence() {\n let hasEvent = false;\n const parser = new DOMParser();\n\n return [\n {\n type: 'output',\n filter: function(html) {\n // parse html\n const doc = parser.parseFromString(html, 'text/html');\n const wrapper = typeof doc.body !== 'undefined' ? doc.body : doc;\n\n // find the sequence in code blocks\n const elements = wrapper.querySelectorAll('code.sequence.language-sequence');\n if (elements.length) {\n if (!hasEvent) {\n if (typeof window !== 'undefined' && window.dispatchEvent) {\n hasEvent = true;\n // Listen sequence custom event\n window.addEventListener('sequence', event => {\n if (event.detail) {\n onRenderSequence(event.detail);\n }\n }); \n }\n }\n\n this.config = {\n cssLink: cdnjs.getSrc(cssCdnName)\n };\n }\n if (!renderSequenceElements(elements)) {\n return html;\n }\n // return html text content\n return wrapper.innerHTML;\n }\n }\n ];\n}\n\nexport default showdownSequence;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown wavedrom extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown wavedrom extension can only be used in browser environment!');\n}\n\nimport log from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof WaveDrom === 'undefined') {\n var WaveDrom = window.WaveDrom || undefined;\n}\n\nlet wdCount = 0;\nlet indexWD = 0;\nfunction hasWavedrom() {\n return !!WaveDrom;\n}\n\nlet dync = false;\nfunction dyncLoadScript(skin) {\n const sync = hasWavedrom();\n if (dync) {\n return sync;\n }\n\n if (!sync) { \n dync = true;\n if (typeof window !== 'undefined') {\n cdnjs\n .loadScript({ WaveDromSkin: skin })\n .then(() => {\n return cdnjs.loadScript('WaveDrom');\n })\n .then(name => {\n WaveDrom = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript(skin) {\n if (!hasWavedrom()) return;\n cdnjs.unloadScript('WaveDrom');\n cdnjs.unloadScript({ WaveDromSkin: skin });\n WaveDrom = null;\n window.WaveDrom = null;\n dync = false; \n}\n\nfunction onRenderWavedrom(resolve, res) {\n if (hasWavedrom()) {\n const index = res.index;\n const id = res.id;\n const name = res.className;\n const data = res.data;\n let element = res.element;\n const doc = element.ownerDocument;\n element.parentNode.outerHTML = utils.renderCacheElement(doc, id + index, name, el => {\n const obj = window.eval(`(${data})`);\n WaveDrom.RenderWaveForm(index, obj, id);\n // Replace the created cache element with the original element with the same id.\n const wdel = document.getElementById('WaveDrom_Display_' + index);\n if (el != wdel) {\n while (wdel.childNodes.length) {\n el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n }\n }\n });\n return resolve(true);\n }\n \n setTimeout(() => {\n onRenderWavedrom(resolve, res);\n }, 10);\n}\n/**\n * render wavedrom graphs\n */\nfunction renderWavedrom(element) {\n return new Promise(resolve => {\n const langattr = element.dataset.lang;\n const langobj = langattr ? JSON.parse(langattr) : null;\n let diagramClass = '';\n if (langobj) {\n if (\n (typeof langobj.codeblock === 'boolean' && langobj.codeblock) ||\n (typeof langobj.codeblock === 'string' && langobj.codeblock.toLowerCase() === 'true')\n ) {\n return;\n }\n\n if (langobj.align) {\n //default left\n if (langobj.align === 'center') {\n diagramClass = 'diagram-center';\n } else if (langobj.align === 'right') {\n diagramClass = 'diagram-right';\n }\n }\n }\n const code = element.textContent.trim();\n const name =\n (element.classList.length > 0 ? element.classList[0] : '') +\n (!element.className || !diagramClass ? '' : ' ') +\n diagramClass;\n const index = indexWD;\n ++indexWD;\n // When index of wavwdrom is 0, there will be some special logic in the WaveDrom lib.\n // So the index needs to be cleared after all WavwDrom element are rendered.\n --wdCount;\n if (!wdCount) {\n indexWD = 0;\n }\n\n //const id = 'wavedrom-' + Date.now() + '-' + Math.floor(Math.random() * 10000) + '-';\n const id = 'WaveDrom_Display_';\n element.id = id + index;\n const res = {\n element: element,\n index: index,\n id: id,\n className: name,\n data: code\n };\n onRenderWavedrom(resolve, res);\n // const id = 'WaveDrom_Display_' + index;\n // element.parentNode.outerHTML = cdnjs.renderCacheElement(element.ownerDocument, id, name, el => {\n // const obj = window.eval(`(${code})`);\n // WaveDrom.RenderWaveForm(index, obj, 'WaveDrom_Display_');\n // // Replace the created cache element with the original element with the same id.\n // const wdel = document.getElementById('WaveDrom_Display_' + index);\n // if (el != wdel) {\n // while (wdel.childNodes.length) {\n // el.appendChild(wdel.removeChild(wdel.childNodes[0]));\n // }\n // }\n // });\n });\n}\n\n// <div class=\"wavedrom\"></div>\nfunction renderWavedromElements(elements, skin) {\n dyncLoadScript(skin);\n return new Promise(resolve => {\n const promiseArray = [];\n wdCount = elements.length;\n elements.forEach(element => {\n promiseArray.push(renderWavedrom(element));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// wavedrom default config\nconst getConfig = (config = {}) => ({\n skin: 'default',\n ...config\n});\n\nfunction showdownWavedrom(skinConfig) {\n const config = getConfig(skinConfig)\n\n return [\n {\n type: 'output',\n config: config,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n // find the wavedrom in code blocks\n const elements = wrapper.querySelectorAll('code.wavedrom.language-wavedrom');\n if (!elements.length) {\n return false;\n }\n\n log(`Begin render wavedrom elements.`);\n return renderWavedromElements(elements, this.config.skin).then(() => {\n log(`End render wavedrom elements.`);\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownWavedrom;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown footnotes extension for markdown\n */\n'use strict';\n\nfunction showdownFootnotes() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(/^\\[\\^([\\d\\w]+)\\]:\\s*((\\n+(\\s{2,4}|\\t).+)+)$/gm, (str, name, rawContent, _, padding) => {\n const content = converter.makeHtml(rawContent.replace(new RegExp(`^${padding}`, 'gm'), ''));\n return `<div class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>:${content}</div>`;\n })\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(\n /^\\[\\^([\\d\\w]+)\\]:( |\\n)((.+\\n)*.+)$/gm,\n (str, name, _, content) =>\n `<small class=\"footnote\" id=\"footnote-${name}\"><a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>: ${content}</small>`\n )\n },\n {\n type: 'lang',\n filter: text =>\n text.replace(/\\[\\^([\\d\\w]+)\\]/m, (str, name) => `<a href=\"#footnote-${name}\"><sup>[${name}]</sup></a>`)\n }\n ];\n}\n\nexport default showdownFootnotes;\n","/*\n * Copyright (c) 2020-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown container extension for markdown\n */\n'use strict';\n\nfunction showdownContainer() {\n return [\n {\n type: 'lang',\n filter: (text, converter) =>\n text.replace(\n /(?:^|\\n)(?: {0,3})(:::+)(?: *)([\\S]+)(?:[ \\t]*)([^\\s][\\S\\t ]*)?\\n([\\s\\S]*?)\\n(?: {0,3})\\1(?:[ \\t]*)\\n/g,\n function (wholeMatch, delim, classname, title, content) {\n if (classname) {\n let classes = classname.split('-');\n if (classes.length > 1) {\n classes.forEach(function (name, index, arr) {\n if (index > 0) {\n arr[index] = arr[index - 1] + '-' + name;\n }\n });\n } else {\n classes.unshift('container');\n }\n classname = classes.join(' ');\n }\n if (content) {\n content = converter.makeHtml(content);\n }\n if (title) {\n title = `<p class=\"container-title\">${title}</p>`;\n } else {\n title = ''\n }\n return `<div class=\"showdown-container ${classname}\">${title}${content}</div>`;\n }\n ),\n },\n ];\n}\n\nexport default showdownContainer;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n * Description: showdown flowchart extension for markdown\n */\n'use strict';\n\nif (typeof window === 'undefined') {\n throw Error('The showdown flowchart extension can only be used in browser environment!');\n}\n\nimport format from './log';\nimport cdnjs from './cdn';\nimport utils from './utils';\n\nif (typeof Raphael === 'undefined') {\n var Raphael = window.Raphael || undefined;\n}\n\nif (typeof flowchart === 'undefined') {\n var flowchart = window.flowchart || undefined;\n}\n\nfunction hasRaphael() {\n return !!Raphael\n}\n\nfunction hasFlowchart() {\n return typeof Raphael !== 'undefined' && Raphael && typeof flowchart !== 'undefined' && flowchart ? true : false;\n}\n\nfunction hasSequence() {\n return hasRaphael() && !!window.SequenceJS;\n}\n\nlet dync = false;\nfunction dyncLoadScript() {\n const sync = hasFlowchart();\n if (typeof window !== 'undefined') {\n if (dync) {\n return sync;\n }\n\n if (!sync) {\n dync = true;\n if (!hasRaphael()) {\n cdnjs\n .loadScript('Raphael')\n .then(name => {\n Raphael = utils.interopDefault(window[name]);\n return cdnjs.loadScript('flowchart');\n })\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n return sync\n }\n\n cdnjs\n .loadScript('flowchart')\n .then(name => {\n flowchart = utils.interopDefault(window[name]);\n });\n }\n }\n return sync;\n}\n\nfunction unloadScript() {\n if (!hasFlowchart()) return;\n cdnjs.unloadScript('flowchart');\n flowchart = null;\n window.flowchart = null;\n if (!hasSequence()) {\n cdnjs.unloadScript('Raphael');\n const es = document.getElementsByTagName('i');\n if (es && es.length > 0) {\n const body = document.body;\n for (let i = 0; i < es.length; i++) {\n const e = es[i];\n if (e.title && e.title === 'Raphaël Colour Picker') {\n body.removeChild(e);\n }\n }\n }\n Raphael = null;\n window.Raphael = null;\n }\n dync = false;\n}\n\nfunction onRenderFlowchart(resolve, res) {\n if (hasFlowchart()) {\n const id = res.id;\n const name = res.className;\n const data = res.data;\n const options = res.options;\n const doc = res.element.ownerDocument;\n res.element.parentNode.outerHTML = utils.renderCacheElement(doc, id, name, el => {\n flowchart.parse(data).drawSVG(el, options);\n });\n resolve(true);\n return;\n }\n \n setTimeout(() => {\n onRenderFlowchart(resolve, res);\n }, 10);\n}\n\n/**\n * render flowchart graphs\n */\nfunction renderFlowchart(element, options) {\n return new Promise(resolve => {\n const meta = utils.createElementMeta('flowchart', element);\n if (!meta) {\n return resolve(false);\n }\n\n meta.options = options;\n onRenderFlowchart(resolve, meta);\n });\n}\n\n// <div class=\"flowchart || flow\"></div>\nfunction renderFlowchartElements(flowchartElements, flowElements, options) {\n dyncLoadScript();\n return new Promise(resolve => {\n const promiseArray = [];\n flowchartElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n flowElements.forEach(element => {\n promiseArray.push(renderFlowchart(element, options));\n });\n Promise.all(promiseArray).then(() => {\n resolve(true);\n });\n });\n}\n\n// Flowchart default options:\n// 'x': 0,\n// 'y': 0,\n// 'line-width': 3,\n// 'line-length': 50,\n// 'text-margin': 10,\n// 'font-size': 14,\n// 'font-color': 'black',\n// 'font': 'normal',\n// 'font-family': 'calibri',\n// 'font-weight': 'normal',\n// 'line-color': 'black',\n// 'element-color': 'black',\n// 'fill': 'white',\n// 'yes-text': 'yes',\n// 'no-text': 'no',\n// 'arrow-end': 'block',\n// 'class': 'flowchart',\n// 'scale': 1,\n// 'symbols': {\n// 'start': {},\n// 'end': {},\n// 'condition': {},\n// 'inputoutput': {},\n// 'operation': {},\n// 'subroutine': {},\n// 'parallel': {}\n// },\n// 'flowstate' : {\n// 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n// 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n// 'future' : { 'fill': '#FFFF99'},\n// 'invalid': {'fill': '#444444'}\n// }\nconst getOptions = (userOptions = {}) => ({\n 'line-width': 3,\n maxWidth: 3, //ensures the flowcharts fits within a certian width\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n font: 'normal',\n 'font-family': 'Helvetica',\n 'font-weight': 'normal',\n 'font-color': 'black',\n 'line-color': 'black',\n 'element-color': 'black',\n fill: 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n scale: 1,\n symbols: {\n start: {\n 'font-color': 'red',\n 'element-color': 'green',\n fill: 'yellow'\n },\n end: {\n class: 'end-element'\n }\n },\n flowstate: {\n past: { fill: '#CCCCCC', 'font-size': 12 },\n current: { fill: 'yellow', 'font-color': 'red', 'font-weight': 'bold' },\n future: { fill: '#FFFF99' },\n request: { fill: 'blue' },\n invalid: { fill: '#444444' },\n approved: {\n fill: '#58C4A3',\n 'font-size': 12,\n 'yes-text': 'APPROVED',\n 'no-text': 'n/a'\n },\n rejected: {\n fill: '#C45879',\n 'font-size': 12,\n 'yes-text': 'n/a',\n 'no-text': 'REJECTED'\n }\n },\n ...userOptions\n});\n\nfunction showdownFlowchart(userOptions) {\n const options = getOptions(userOptions);\n\n return [\n {\n type: 'output',\n config: options,\n filter: function(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n // find the Flowchart in code blocks\n const flowchartElements = wrapper.querySelectorAll('code.flowchart.language-flowchart');\n const flowElements = wrapper.querySelectorAll('code.flow.language-flow');\n if (!flowchartElements.length && !flowElements.length) {\n return false;\n }\n console.log(format(`Begin render flowchart elements.`));\n return renderFlowchartElements(flowchartElements, flowElements, this.config).then(() => {\n console.log(format(`End render flowchart elements.`));\n return obj;\n });\n }\n }\n ];\n}\n\nexport default showdownFlowchart;\n","/*\n * Copyright (c) 2019-present, Jhuix (Hui Jin) <jhuix0117@gmail.com>. All rights reserved.\n * Use of this source code is governed by a MIT license that can be found in the LICENSE file.\n */\n'use strict';\n\nimport './less/preview.less';\nimport './less/container.less';\n\nimport showdown from './parser/showdown.js';\nimport showdownAbc from './extensions/showdown-abc.js';\nimport showdownToc from './extensions/showdown-toc.js';\nimport showdownViz from './extensions/showdown-viz.js';\nimport showdownVega from './extensions/showdown-vega.js';\nimport showdownAlign from './extensions/showdown-align.js';\nimport showdownKatex from './extensions/showdown-katex.js';\nimport showdownEcharts from './extensions/showdown-echarts.js';\nimport showdownMermaid from './extensions/showdown-mermaid.js';\nimport showdownPlantuml from './extensions/showdown-plantuml.js';\nimport showdownRailroad from './extensions/showdown-railroad.js';\nimport showdownSequence from './extensions/showdown-sequence.js';\nimport showdownWavedrom from './extensions/showdown-wavedrom.js';\nimport showdownFootnotes from './extensions/showdown-footnotes.js';\nimport showdownContainer from './extensions/showdown-container.js';\nimport showdownFlowchart from './extensions/showdown-flowchart.js';\n\nimport * as zlibcodec from './utils/zlib-codec.js';\nimport cdnjs from './extensions/cdn';\n\n//////////////////////////////////////////////////////////////////////\nconst getOptions = (options = {}) => {\n return {\n flavor: 'github',\n ...options\n };\n};\n\nconst getAsyncExtensions = (options, extensions = {}) => {\n const mermaidOptions = options ? options.mermaid || {} : {};\n const plantumlOptions = options ? options.plantuml || {} : {};\n const katexOptions = options ? options.katex || {} : {};\n const vegaOptions = options ? options.vega || {} : {};\n\n const asyncExtensions = {\n 'showdown-plantuml': showdownPlantuml(plantumlOptions),\n 'showdown-mermaid': showdownMermaid(mermaidOptions),\n 'showdown-katex': showdownKatex(katexOptions),\n 'showdown-flowchart': showdownFlowchart,\n 'showdown-viz': showdownViz,\n 'showdown-vega': showdownVega(vegaOptions),\n 'showdown-wavedrom': showdownWavedrom,\n 'showdown-railroad': showdownRailroad,\n 'showdown-abc': showdownAbc,\n 'showdown-echarts': showdownEcharts,\n ...extensions\n };\n\n let extnames = [];\n for (let prop in asyncExtensions) {\n if (asyncExtensions.hasOwnProperty(prop)) {\n showdown.asyncExtension(prop, asyncExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst getExtensions = (options, extensions = {}) => {\n const nativeExtensions = {\n 'showdown-toc': showdownToc,\n 'showdown-align': showdownAlign,\n 'showdown-footnotes': showdownFootnotes,\n 'showdown-container': showdownContainer,\n 'showdown-sequence': showdownSequence,\n ...extensions\n };\n\n let extnames = [];\n for (let prop in nativeExtensions) {\n if (nativeExtensions.hasOwnProperty(prop)) {\n showdown.extension(prop, nativeExtensions[prop]);\n extnames.push(prop);\n }\n }\n return extnames;\n};\n\nconst loadScript = (id, code, element) => {\n if (!code || typeof document === 'undefined') {\n return false;\n }\n\n if (!element) {\n element = document.getElementById(id);\n }\n \n if (element) {\n const eid = element.id;\n const scriptID = `script-${id}`;\n let script = document.querySelector(`#${eid} > #${scriptID}`);\n if (script) {\n document.body.removeChild(script);\n } else {\n script = document.createElement('script');\n script.id = scriptID;\n }\n script.type = \"text/javascript\";\n script.text = code;\n element.appendChild(script);\n }\n return true\n};\n\n\nconst showdownFlavors = ['github', 'ghost', 'vanilla', 'original', 'allon'];\nconst mermaidThemes = ['default', 'forest', 'dark', 'neutral'];\nconst vegaThemes = ['excel', 'ggplot2', 'quartz', 'vox', 'dark'];\nconst vegaRenderers = ['canvas', 'svg'];\nconst plantumlImgFmts = ['svg', 'png', 'jpg'];\n\n// defaultOptions.vega is embedOptions of vega-embed;\n// defaultOptions.katex is config of katex,\n// format is { delimiters: [ { left: '$$', right: '$$', display: true | false | undefined, asciimath: true | undefined }] };\n// defaultOptions.mermaid is config of mermaidAPI;\n// defaultOptions.plantuml is {umlWebSite: string, imageFormat: string};\n// defaultOptions.showdown is flavor and ShowdownOptions of showdown\nconst showdowns = {\n showdown: showdown,\n converter: null,\n defaultOptions: {\n showdown: getOptions(),\n plantuml: { imageFormat: 'svg' },\n mermaid: { theme: 'default' },\n katex: {},\n vega: { theme: 'vox' }\n },\n defaultExtensions: {},\n defaultAsyncExtensions: {},\n markdownDecodeFilter: function(doc) {\n return '';\n },\n initDefaultOptions: function() {\n if (!this.defaultOptions) {\n this.defaultOptions = {\n showdown: {},\n plantuml: {},\n mermaid: {},\n katex: {},\n vega: {}\n };\n }\n },\n setFlavor: function(name) {\n this.showdown.setFlavor(name);\n if (this.converter) {\n this.converter.setFlavor(name);\n }\n },\n addOptions: function(options) {\n for (const key in options) {\n if (key !== 'flavor') {\n this.showdown.setOption(key, options[key]);\n if (this.converter) {\n this.converter.setOption(key, options[key]);\n }\n }\n }\n },\n addExtension: function(name, extension) {\n this.removeExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.extension(name, extension);\n if (this.converter) {\n this.converter.addExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeExtension: function(name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.extension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeExtension(ext);\n }\n showdown.removeExtension(name);\n },\n addAsyncExtension: function(name, extension) {\n this.removeAsyncExtension(name);\n if (typeof name === 'string') {\n try {\n showdown.asyncExtension(name, extension);\n if (this.converter) {\n this.converter.addAsyncExtension(name);\n }\n } catch (err) {\n console.log(err);\n }\n }\n },\n removeAsyncExtension: function(name) {\n if (typeof name !== 'string') return;\n if (this.converter) {\n let ext = null;\n try {\n ext = showdown.asyncExtension(name);\n } catch (err) {\n console.log(err);\n }\n if (!ext) return;\n this.converter.removeAsyncExtension(ext);\n }\n showdown.removeAsyncExtension(name);\n },\n setCDN: function(cdnname, defScheme, distScheme) {\n if (typeof cdnname === 'string' && cdnname) {\n cdnjs.setCDN(cdnname, defScheme, distScheme);\n }\n },\n setShowdownFlavor: function(name) {\n this.initDefaultOptions();\n if (name) {\n if (showdownFlavors.indexOf(name) === -1) {\n name = 'github';\n }\n this.defaultOptions.showdown.flavor = name;\n this.setFlavor(name);\n }\n },\n setShowdownOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.showdown = Object.assign(this.defaultOptions.showdown || {}, options);\n this.setShowdownFlavor(this.defaultOptions.showdown.flavor);\n this.addOptions(this.defaultOptions.showdown);\n return this.defaultOptions.showdown;\n },\n setPlantumlOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.plantuml = Object.assign(this.defaultOptions.plantuml || {}, options);\n const imageFormat = this.defaultOptions.plantuml.imageFormat;\n if (imageFormat && plantumlImgFmts.indexOf(imageFormat) === -1) {\n this.defaultOptions.plantuml.imageFormat = 'png';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n }\n return this.defaultOptions.plantuml;\n },\n setMermaidOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.mermaid = Object.assign(this.defaultOptions.mermaid || {}, options);\n const theme = this.defaultOptions.mermaid.theme;\n if (theme && mermaidThemes.indexOf(theme) === -1) {\n this.defaultOptions.mermaid.theme = 'default';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n }\n return this.defaultOptions.mermaid;\n },\n setKatexOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.katex = Object.assign(this.defaultOptions.katex || {}, options);\n if (this.converter) {\n this.addAsyncExtension('showdown-katex', showdownKatex(this.defaultOptions.katex));\n }\n return this.defaultOptions.katex;\n },\n setVegaOptions: function(options) {\n this.initDefaultOptions();\n if (typeof options !== 'object' || !options) options = {};\n this.defaultOptions.vega = Object.assign(this.defaultOptions.vega || {}, options);\n const theme = this.defaultOptions.vega.theme;\n if (theme && vegaThemes.indexOf(theme) === -1) {\n this.defaultOptions.vega.theme = 'vox';\n }\n const renderer = this.defaultOptions.vega.renderer;\n if (renderer && vegaRenderers.indexOf(renderer) === -1) {\n this.defaultOptions.vega.renderer = 'canvas';\n }\n if (this.converter) {\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n return this.defaultOptions.vega;\n },\n init: function(reset) {\n if (!this.converter) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n const extensions = getExtensions(this.defaultOptions, this.defaultExtensions);\n const asyncExtensions = getAsyncExtensions(this.defaultOptions, this.defaultAsyncExtensions);\n this.setFlavor(options.flavor);\n // converter instance of showdown\n this.converter = new showdown.Converter({\n extensions: extensions\n }).initConvertExtObj(options.flavor, asyncExtensions);\n this.addOptions(options);\n } else {\n let resetOptions = {};\n if (typeof reset === 'boolean' && reset) {\n resetOptions = { option: true, extension: true };\n } else {\n resetOptions = reset;\n }\n if (typeof resetOptions === 'object') {\n if (resetOptions.hasOwnProperty('option') && resetOptions.option) {\n const showdownOptions = this.defaultOptions ? this.defaultOptions.showdown || {} : {};\n const options = getOptions(showdownOptions);\n this.addOptions(options);\n }\n if (resetOptions.hasOwnProperty('extension') && resetOptions.extension) {\n this.addAsyncExtension('showdown-plantuml', showdownPlantuml(this.defaultOptions.plantuml));\n this.addAsyncExtension('showdown-mermaid', showdownMermaid(this.defaultOptions.mermaid));\n this.addAsyncExtension('showdown-vega', showdownVega(this.defaultOptions.vega));\n }\n }\n }\n return this;\n },\n makeHtml: function(doc, callback) {\n let content = '';\n if (typeof doc === 'object') {\n if (typeof doc.content === 'string') {\n if (typeof doc.type === 'string') {\n switch (doc.type) {\n case 'zip':\n content = this.zDecode(doc.content);\n break;\n default:\n content = this.markdownDecodeFilter(doc) || doc.content;\n break;\n }\n } else {\n content = doc.content;\n }\n }\n } else {\n content = doc;\n }\n\n if (this.converter && content) {\n function _getCssLink(wrapper, className, extName) {\n // find elements that has csslink\n const element = wrapper.querySelector(className);\n let cssLink = '';\n if (element) {\n cssLink = element.dataset.css;\n } else {\n let ext;\n try {\n ext = showdown.extension(extName);\n } catch {}\n\n if (!ext) {\n try {\n ext = showdown.asyncExtension(extName);\n } catch {}\n }\n\n if (ext) {\n if (Array.isArray(ext)) {\n for (var i = 0; i < ext.length; ++i) {\n if (ext[i].hasOwnProperty('config') && ext[i].config.hasOwnProperty('cssLink')) {\n cssLink = ext[i].config.cssLink;\n break;\n }\n }\n } else if (typeof ext === 'object') {\n if (ext.hasOwnProperty('config') && ext.config.hasOwnProperty('cssLink')) {\n cssLink = ext.config.cssLink;\n }\n }\n }\n }\n return cssLink;\n }\n\n function _checkCssTypes(obj) {\n const wrapper = obj.wrapper;\n if (!wrapper) {\n return false;\n }\n\n return new Promise(resolve => {\n const katexCssLink = _getCssLink(wrapper, '.css-katex', 'showdown-katex');\n const sequenceCssLink = _getCssLink(wrapper, '.css-sequence', 'showdown-sequence');\n const railroadCssLink = _getCssLink(wrapper, '.css-railroad', 'showdown-railroad');\n\n obj.cssTypes = {\n hasKatex: katexCssLink ? true : false,\n hasSequence: sequenceCssLink ? true : false,\n hasRailroad: railroadCssLink ? true : false,\n css: {\n katex: katexCssLink,\n sequence: sequenceCssLink,\n railroad: railroadCssLink\n }\n };\n if (typeof callback === 'function' && callback) {\n callback(obj.cssTypes);\n }\n return resolve(obj);\n });\n }\n\n return this.converter.asyncMakeHtml(content, _checkCssTypes).then( obj => {\n content = `<div class='showdowns'>${obj.html}</div>`;\n return { html: content, scripts: obj.scripts };\n });\n }\n return Promise.reject(!content ? 'Content is empty.' : 'Converter is invaild.');\n },\n completedHtml: function(scripts, element) {\n if (!showdown.helper.isArray(scripts)) {\n scripts = [scripts];\n }\n\n return new Promise((revole, reject) => {\n for (var i = 0; i < scripts.length; ++i) {\n const script = scripts[i];\n if (!loadScript(script.id, script.code, element)) {\n return reject('Args is invaild!');\n }\n }\n revole(true);\n });\n },\n zDecode: function(zContent) {\n return zlibcodec.zDecode(zContent);\n },\n zEncode: function(content) {\n return zlibcodec.zEncode(content);\n }\n};\n\nexport default showdowns;\n"],"names":["showdown","ConverterExtObj","flavor","asyncExtensions","outputAsyncModifiers","currConvFlavor","_parseAsyncExtension","ext","name","helper","isString","stdExtName","asyncExtension","isUndefined","Error","isArray","validateExtension","i","length","type","push","forEach","this","addAsyncExtension","extension","removeAsyncExtension","a","j","splice","getAsyncExtensions","getCurrFlavor","setCurrFlavor","Converter","prototype","initConvertExtObj","extObj","resetOptions","converterOptions","globalOptions","getOptions","options","gOpt","hasOwnProperty","opt","setFlavor","preset","getFlavorOptions","defaultOptions","getDefaultOptions","option","getFlavor","removeExtension","exts","getAllExtensions","langExtensions","language","outputModifiers","output","asyncMakeHtml","text","callback","content","makeHtml","outputs","Promise","resolve","html","globals","converter","doc","DOMParser","parseFromString","wrapper","body","result","scripts","then","obj","filter","promise","innerHTML","subParser","ghCodeBlocks","_dispatch","replace","wholeMatch","delim","langattr","codeblock","end","omitExtraWLInCodeBlocks","tables","parseStyles","sLine","test","parseCells","cells","row","col","cell","style","tablesMerge","direct","tablesRowspan","str","left","right","ii","mergeCells","trim","parseTableContent","rawTable","headerless","tableLines","split","header","id","rawStyles","rawCells","headers","styles","map","s","shift","rawHeaders","tablesHeaderId","tableHeaderId","toLowerCase","tb","tblLgn","buildTable","parseTable","parseHeaderlessTable","escapeCharactersCallback","tablesHeaderless","currFlavor","flavors","github","ghCompatibleHeaderId","underline","rawHeaderId","ghost","allOn","_asyncExtensions","resetAsyncExtensions","orgSetFlavor","orgGetFlavorOptions","format","Date","Format","setFlavorOptions","Object","assign","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","matches","exec","getFullYear","substring","k","m","RegExp","n","cdnName","scheme","document","location","protocol","defScheme","distScheme","cdnSrc","local","ABCJS","ABCJSCSS","echarts","Viz","Raphael","flowchart","mermaid","katex","katexCSS","renderMathInElement","railroad","railroadCSS","Snap","WebFont","underscore","sequence","sequenceCSS","WaveDrom","WaveDromSkin","default","lowkey","narrow","vega","vegaLite","vegaEmbed","cdnjs","jsdelivr","getName","key","keys","val","getSrc","def","cdn","url","setCDN","scheme_default","scheme_dist","getCDN","loadScript","src","resovle","reject","script","getElementById","head","getElementsByTagName","createElement","onload","appendChild","unloadScript","e","removeChild","loadStyleSheet","css","link","rel","href","unloadStyleSheet","utils","interopDefault","ex","loadStyle","innerText","code","res","rej","renderCacheElement","window","el","className","display","outerHTML","renderElement","createElementMeta","element","dataset","lang","langobj","JSON","parse","diagramClass","align","textContent","classList","now","random","data","extName","cssCdnName","undefined","hasAbc","dync","abcOptions","add_classes","responsive","CursorControl","self","onReady","onStart","svg","querySelector","cursor","createElementNS","setAttribute","setAttributeNS","beatSubdivisions","onBeat","beatNumber","totalBeats","totalTime","onEvent","ev","measureStart","lastSelection","querySelectorAll","remove","elements","note","add","top","height","onFinished","els","synthControl","load","audio","render","abc","synth","supportsAudio","SynthController","displayLoop","displayRestart","displayPlay","displayProgress","displayWarp","userAction","disable","visualObj","renderAbc","CreateSynth","init","response","setTune","catch","error","onRenderAbc","btoa","cssLink","parentNode","setTimeout","meta","renderAbcElements","sync","dyncLoadScript","promiseArray","all","showdownAbc","hasEvent","dispatchEvent","addEventListener","event","detail","atob","config","createHeadingElement","toc","nexthead","ownerDocument","child","createTextNode","appendTocElement","currTocNode","headingLevel","tempTocNode","preLevel","showdownToc","parser","replaceChild","tocNode","prev","parseInt","substr","renderTocElements","engines","hasViz","instance","onRenderViz","engine","indexOf","viz","renderString","renderViz","renderVizElements","showdownViz","hasVegaEmbed","renderVega","isVegaLite","stringify","onRenderVega","renderVegaElements","vegaElements","vegaLiteElements","showdownVega","userOptions","actions","editor","theme","tooltip","renderer","showdownAlign","childNode","firstChild","nodeType","results","nodeValue","match","nextSibling","renderAlignElements","decimalsign","CONST","UNARY","BINARY","INFIX","LEFTBRACKET","RIGHTBRACKET","SPACE","UNDEROVER","DEFINITION","LEFTRIGHT","TEXT","AMquote","input","tag","tex","ttype","AMsymbols","notexcopy","invisible","func","rewriteleftright","acc","atname","atval","compareNames","s1","s2","AMnestingDepth","AMpreviousSymbol","AMcurrentSymbol","AMnames","AMremoveCharsAndBlanks","st","charAt","slice","charCodeAt","AMposition","arr","h","AMgetSymbol","mk","tagst","more","integ","AMTremoveBrackets","node","leftchop","AMTgetTeXsymbol","symb","pre","AMTparseSexpr","symbol","newFrag","texsymbol","AMTparseExpr","result2","AMTparseIexpr","sym1","sym2","res2","rightbracket","addedright","len","mxout","pos","matrix","mxnestingd","subpos","lastsubposstart","mxanynestingd","columnaligns","lastmxsubcnt","subarr","join","AMTparseAMtoTeX","symlen","sort","refreshSymbols","AMinitSymbols","RenderMathInElement","katexElementCount","hasKatex","onRenderKatex","Array","math","renderToString","renderKatex","isAsciimath","latex","codes","asciimathToTex","escapeRegExp","getConfig","userConfig","displayMode","throwOnError","errorColor","delimiters","_isObjectProperty","prop","_getDelimiter","delimiter","asciimath","concat","showdownKatex","inlineMathCount","mathDelimiters","replacer","childNodes","nodeName","newText","reduce","that","asyncRenderKatex","renderBlockElements","hasEcharts","onRenderEcharts","renderEcharts","ssr","renderEchartsElements","showdownEcharts","width","show","animation","hasMermaid","onRenderMermaid","renderMermaid","renderMermaidElements","initialize","showdownMermaid","logLevel","startOnLoad","arrowMarkerAbsolute","curve","gantt","axisFormat","actorMargin","append3bytes","b1","b2","b3","c2","c3","c4","r","encode6bit","b","String","fromCharCode","decode6bit","cc","c","extract3bytes","c1","encode","encode64","zlib","deflateRawSync","level","toString","decode","inflateRawSync","Buffer","from","t","decode64","plantumlcodec","encodeuml","startuml","enduml","zlibcodec.encode","decodeuml","zlibcodec.decode","defaultImageFormat","umlElementCount","renderPlantumlElements","imageFormat","website","umlWebSite","imageExtension","uml","svgRender","svgData","fetch","ok","renderPlantumlElement","showdownPlantuml","hasRailroad","diagram","onRenderRailroad","railroadElement","eval","addTo","renderRailroad","renderRailroadElements","showdownRailroad","Diagram","themes","SequenceJS","hasRaphael","hasSequence","renderSequence","elementid","CustomEvent","onRenderSequence","drawSVG","showdownSequence","renderSequenceElements","wdCount","indexWD","hasWavedrom","onRenderWavedrom","index","RenderWaveForm","wdel","renderWavedrom","renderWavedromElements","skin","showdownWavedrom","skinConfig","log","showdownFootnotes","rawContent","_","padding","showdownContainer","classname","title","classes","unshift","hasFlowchart","onRenderFlowchart","renderFlowchart","showdownFlowchart","maxWidth","font","fill","scale","symbols","start","class","flowstate","past","current","future","request","invalid","approved","rejected","flowchartElements","flowElements","renderFlowchartElements","scriptID","showdownFlavors","mermaidThemes","vegaThemes","vegaRenderers","plantumlImgFmts","showdowns","plantuml","defaultExtensions","defaultAsyncExtensions","markdownDecodeFilter","initDefaultOptions","addOptions","setOption","addExtension","err","cdnname","setShowdownFlavor","setShowdownOptions","setPlantumlOptions","setMermaidOptions","setKatexOptions","setVegaOptions","reset","extensions","nativeExtensions","extnames","getExtensions","mermaidOptions","katexOptions","vegaOptions","zDecode","_getCssLink","_checkCssTypes","katexCssLink","sequenceCssLink","railroadCssLink","cssTypes","completedHtml","revole","zContent","zEncode"],"mappings":";;;;;yDAQAA,EAASC,gBAAkB,SAASC,EAAQC,GAG1C,IAAIC,EAAuB,GAIzBC,EAAiBH,EAoBnB,SAASI,EAAqBC,EAAKC,GAGjC,GAFAA,EAAOA,GAAQ,KAEXR,EAASS,OAAOC,SAASH,KAC3BC,EAAOR,EAASS,OAAOE,WAAWJ,GAClCA,EAAMP,EAASY,eAAeJ,GAC1BR,EAASS,OAAOI,YAAYN,IAC9B,MAAMO,MACJ,cAAgBN,EAAO,oFAa7B,GARmB,mBAARD,IACTA,EAAMA,KAGHP,EAASS,OAAOM,QAAQR,KAC3BA,EAAM,CAACA,IAGLP,EAASgB,kBAAkBT,GAC7B,IAAK,IAAIU,EAAI,EAAOV,EAAIW,OAARD,IAAkBA,EAChC,GACO,WADCV,EAAIU,GAAGE,KAEXf,EAAqBgB,KAAKb,EAAIU,GAKvC,CAzCKd,GACFH,EAASS,OAAOY,QAAQlB,EAAiBG,GA0C7CgB,KAAKC,kBAAoB,SAASC,EAAWhB,GAE3CF,EAAqBkB,EADrBhB,EAAOA,GAAQ,KAEnB,EAEEc,KAAKG,qBAAuB,SAASD,GAC9BxB,EAASS,OAAOM,QAAQS,KAC3BA,EAAY,CAACA,IAEf,IAAK,IAAIE,EAAI,EAAOF,EAAUN,OAAdQ,IAAwBA,EAAG,CACzC,MAAMnB,EAAMiB,EAAUE,GACtB,IAAK,IAAIC,EAAI,EAAOvB,EAAqBc,OAAzBS,IAAmCA,EAC7CvB,EAAqBuB,KAAOpB,GAC9BH,EAAqBwB,OAAOD,EAAG,EAGpC,CACL,EAEEL,KAAKO,mBAAqB,WACxB,OAAOzB,CACX,EAMEkB,KAAKQ,cAAgB,WACnB,OAAOzB,CACX,EAMEiB,KAAKS,cAAgB,SAASvB,GAC5BH,EAAiBG,CACrB,CACA,EAEAR,EAASgC,UAAUC,UAAUC,kBAAoB,SAAShC,EAAQC,GA+HhE,OA9HAmB,KAAKa,OAAS,IAAInC,EAASC,gBAAgBC,EAAQC,GAEnDmB,KAAKc,aAAe,SAASC,GAC3BA,EAAmBA,GAAoB,GAEvC,MAAMC,EAAgBtC,EAASuC,aAC/B,IAAIC,EAAUlB,KAAKiB,aACnB,IAAK,IAAIE,KAAQH,EACXA,EAAcI,eAAeD,KAC/BD,EAAQC,GAAQH,EAAcG,IAKlC,GAAgC,iBAArBJ,EACT,IAAK,IAAIM,KAAON,EACVA,EAAiBK,eAAeC,KAClCH,EAAQG,GAAON,EAAiBM,GAI1C,EAMErB,KAAKsB,UAAY,SAASpC,GACxB,IAAIqC,EAAS7C,EAAS8C,iBAAiBtC,GACvC,GAAIR,EAASS,OAAOI,YAAYgC,GAAS,OACzCvB,KAAKa,OAAOJ,cAAcvB,GAC1B,IAAIuC,EAAiB/C,EAASgD,mBAAkB,GAChD,IAAK,IAAIC,KAAUF,EACbA,EAAeL,eAAeO,KAChC3B,KAAKiB,aAAaU,GAAUF,EAAeE,IAG/C,IAAK,IAAIA,KAAUJ,EACbA,EAAOH,eAAeO,KACxB3B,KAAKiB,aAAaU,GAAUJ,EAAOI,GAG3C,EAME3B,KAAK4B,UAAY,WACf,OAAO5B,KAAKa,OAAOL,eACvB,EAEER,KAAKC,kBAAoB,SAASC,EAAWhB,GAC3Cc,KAAKa,OAAOZ,kBAAkBC,EAAWhB,EAC7C,EAEEc,KAAKG,qBAAuB,SAASD,GACnCF,KAAKa,OAAOV,qBAAqBD,EACrC,EAIEF,KAAK6B,gBAAkB,SAAS3B,GACzBxB,EAASS,OAAOM,QAAQS,KAC3BA,EAAY,CAACA,IAEf,MAAM4B,EAAO9B,KAAK+B,mBAClB,IAAIC,EAAiBF,EAAKG,SACtBC,EAAkBJ,EAAKK,OAC3B,IAAK,IAAI/B,EAAI,EAAOF,EAAUN,OAAdQ,IAAwBA,EAAG,CACzC,MAAMnB,EAAMiB,EAAUE,GACtB,IAAK,IAAIT,EAAI,EAAOqC,EAAepC,OAAnBD,IAA6BA,EACvCqC,EAAerC,KAAOV,GACxB+C,EAAe1B,OAAOX,EAAG,GAG7B,IAAK,IAAIU,EAAI,EAAO6B,EAAgBtC,OAApBS,IAA8BA,EACxC6B,EAAgB7B,KAAOpB,GACzBiD,EAAgB5B,OAAOD,EAAG,EAG/B,CACL,EAOEL,KAAKoC,cAAgB,SAASC,EAAMC,GAClC,MAAMC,EAAUvC,KAAKwC,SAASH,GACxBI,EAAUzC,KAAKa,OAAON,qBAC5B,IAAKkC,EAAQ7C,OACX,OAAO8C,QAAQC,QAAQ,CAACC,KAAML,IAGhC,IAAIM,EAAU,CACZJ,QAASA,EACTK,UAAW9C,MAEb,MACM+C,GADS,IAAIC,WACAC,gBAAgBV,EAAS,aACtCW,OAA8B,IAAbH,EAAII,KAAuBJ,EAAII,KAAOJ,EACvD7B,EAAUlB,KAAKiB,aACrB,IACImC,EAASV,QAAQC,QAAQ,CAAEO,UAAShC,UAAS2B,UAASQ,QAD5C,KASd,OANAZ,EAAQ1C,SAAQ,SAASd,GACvBmE,EAASA,EAAOE,MAAKC,IACnB,MAAMC,EAASvE,EAAIuE,OAAOD,GAC1B,OAAOC,GAAkBD,CAAG,GAEpC,IACWH,EAAOE,MAAKC,IACjB,GAAwB,mBAAbjB,GAA2BA,EAAU,CAC9C,MAAMmB,EAAUnB,EAASiB,GACzB,GAAIE,aAAmBf,QACrB,OAAOe,EAAQH,MAAKC,IACX,CAAEX,KAAMW,EAAIL,QAAQQ,UAAWL,QAASE,EAAIF,WAGxD,CACD,MAAO,CAAET,KAAMW,EAAIL,QAAQQ,UAAWL,QAASE,EAAIF,QAAS,GAElE,EAESrD,IACT,EC1NAtB,EAASiF,UAAU,oBAAoB,SAAStB,EAAMnB,EAAS2B,GAI7D,OAAK3B,EAAQ0C,cAIbvB,EAAOQ,EAAQC,UAAUe,UAAU,0BAA2BxB,EAAMnB,EAAS2B,GA0C7ER,GAtCAA,GAFAA,GAAQ,MAEIyB,QACV,wHACA,SAASC,EAAYC,EAAO/B,EAAUgC,EAAUC,GAC9C,IAAIC,EAAMjD,EAAQkD,wBAA0B,GAAK,KAsBjD,OAnBAF,EAAYxF,EAASiF,UAAU,aAAnBjF,CAAiCwF,EAAWhD,EAAS2B,GAKjEqB,EACE,cACCjC,EAAW,WAAaA,EAAW,aAAeA,EAAW,IAAM,KACnEgC,EAAW,eAAeA,KAAc,IACzC,KANFC,GADAA,GADAA,EAAYxF,EAASiF,UAAU,QAAnBjF,CAA4BwF,EAAWhD,EAAS2B,IACtCiB,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAQrCK,EACA,gBAEFD,EAAYxF,EAASiF,UAAU,YAAnBjF,CAAgCwF,EAAWhD,EAAS2B,GAM9D,UACCA,EAAQe,aAAa9D,KAAK,CACzBuC,KAAM0B,EACNG,UAAWA,IAEX,GACF,OAEH,KAISJ,QAAQ,KAAM,IAEnBjB,EAAQC,UAAUe,UAAU,yBAA0BxB,EAAMnB,EAAS2B,IA/CnER,CAgDX,IC7DA3D,EAASiF,UAAU,UAAU,SAAUtB,EAAMnB,EAAS2B,GAGpD,IAAK3B,EAAQmD,OACX,OAAOhC,EAQT,SAASiC,EAAYC,GACnB,MAAI,eAAeC,KAAKD,GACf,4BACE,qBAAqBC,KAAKD,GAC5B,6BACE,sBAAsBC,KAAKD,GAC7B,8BAEA,EAEV,CAgGD,SAASE,EAAWC,EAAOC,EAAKC,EAAKC,EAAMC,GACzC,GAAI5D,EAAQ6D,YAAa,CACvB,IAAIC,EApFR,SAAoBN,EAAOC,EAAKC,EAAKC,GACnC,GAAIA,EAAJ,CACE,IAAK3D,EAAQ+D,eAA0B,OAATJ,IAAkBF,EAC9C,OAIF,IAAK,IAAIhF,EAAIgF,EAAM,EAAGhF,GAAK,IAAKA,EAC9B,GAAK+E,EAAM/E,GAAGiF,GAmBP,IAAsB,OAAlBF,EAAM/E,GAAGiF,GAMlB,OALAF,EAAM/E,GAAGiF,GAAOF,EAAM/E,GAAGiF,GACtBd,QAAQ,oBAAqB,IAC7BA,QAAQ,kCAAkC,SAAUoB,EAAKC,EAAMC,GAC9D,OAAOD,EAAO,cAAgBR,EAAMhF,EAAI,GAAK,IAAMyF,CACjE,IACiBP,EACF,GAAU,IAANlF,EAET,OADA+E,EAAM/E,GAAGiF,GAAO,iBAAmBD,EAAMhF,EAAI,GAAK,YAC3CkF,CACR,MA5BC,IAAK,IAAIQ,EAAKT,EAAM,EAAGS,GAAM,GAAIA,EAAI,CACnC,GAAIX,EAAM/E,EAAI,GAAG0F,IAA4B,OAArBX,EAAM/E,EAAI,GAAG0F,GACnC,OAGF,GAAIX,EAAM/E,GAAG0F,GAAK,CAChB,IAAKX,EAAM/E,EAAI,GAAG0F,GAChB,OAQF,OALAX,EAAM/E,GAAG0F,GAAMX,EAAM/E,GAAG0F,GACrBvB,QAAQ,oBAAqB,IAC7BA,QAAQ,kCAAkC,SAAUoB,EAAKC,EAAMC,GAC9D,OAAOD,EAAO,cAAgBR,EAAMhF,EAAI,GAAK,IAAMyF,CACrE,IACqBP,CACR,CACF,CAeN,MAGD,GAAKD,EAIL,IAASS,EAAKT,EAAM,EAAGS,GAAM,IAAKA,EAChC,GAAIX,EAAMC,GAAKU,GAAK,CAClB,GAAuB,OAAnBX,EAAMC,GAAKU,GAqBb,OALAX,EAAMC,GAAKU,GAAMX,EAAMC,GAAKU,GACzBvB,QAAQ,oBAAqB,IAC7BA,QAAQ,kCAAkC,SAAUoB,EAAKC,EAAMC,GAC9D,OAAOD,EAAO,cAAgBP,EAAMS,EAAK,GAAK,IAAMD,CAClE,IACiBP,EApBP,IAASlF,EAAIgF,EAAM,EAAGhF,GAAK,IAAKA,EAAG,CACjC,GAAI+E,EAAM/E,GAAG0F,EAAK,GAChB,OAGF,GAAqB,OAAjBX,EAAM/E,GAAG0F,GAMX,OALAX,EAAM/E,GAAG0F,GAAMX,EAAM/E,GAAG0F,GACrBvB,QAAQ,oBAAqB,IAC7BA,QAAQ,kCAAkC,SAAUoB,EAAKC,EAAMC,GAC9D,OAAOD,EAAO,cAAgBP,EAAMS,EAAK,GAAK,IAAMD,CACtE,IACqBP,CAEV,CASX,MAAa,GAAW,IAAPQ,EAET,OADAX,EAAMC,GAAKU,GAAM,iBAAmBT,EAAMS,EAAK,GAAK,YAC7CR,CAKZ,CAIgBS,CAAWZ,EAAOC,EAAKC,EAAKC,GACzC,IAAKnG,EAASS,OAAOI,YAAYyF,GAC/B,OAAOA,CAEV,CAID,OAFAH,EAAOA,EAAKU,OAEL,MAAQT,EAAQ,IADTpG,EAASiF,UAAU,YAAnBjF,CAAgCmG,EAAM3D,EAAS2B,GACtB,SACxC,CA4BD,SAAS2C,EAAkBC,EAAUC,GACnC,IAAI/F,EACFgG,EAAaF,EAASG,MAAM,MAE9B,IAAKjG,EAAI,EAAOgG,EAAW/F,OAAfD,IAAyBA,EAE/B,YAAY6E,KAAKmB,EAAWhG,MAC9BgG,EAAWhG,GAAKgG,EAAWhG,GAAGmE,QAAQ,YAAa,KAEjD,YAAYU,KAAKmB,EAAWhG,MAC9BgG,EAAWhG,GAAKgG,EAAWhG,GAAGmE,QAAQ,YAAa,KAGrD6B,EAAWhG,GAAKjB,EAASiF,UAAU,YAAnBjF,CAAgCiH,EAAWhG,GAAIuB,EAAS2B,GAG1E,IArJoBgD,EAAQf,EACxBgB,EAoJAC,EAAY,GACdC,EAAW,GACXC,EAAU,GACVC,EAAS,GACTxB,EAAQ,GAEV,GAAIgB,EAKF,IAJAK,EAAYJ,EAAW,GAAGC,MAAM,KAAKO,KAAI,SAAUC,GACjD,OAAOA,EAAEb,MACjB,IACMI,EAAWU,QACN1G,EAAI,EAAOoG,EAAUnG,OAAdD,IAAwBA,EAClCuG,EAAOpG,KAAKwE,EAAYyB,EAAUpG,SAE/B,CACL,IAAI2G,EAAaX,EAAW,GAAGC,MAAM,KAAKO,KAAI,SAAUC,GACtD,OAAOA,EAAEb,MACjB,IAQM,GAPAQ,EAAYJ,EAAW,GAAGC,MAAM,KAAKO,KAAI,SAAUC,GACjD,OAAOA,EAAEb,MACjB,IAEMI,EAAWU,QACXV,EAAWU,QAEaN,EAAUnG,OAA9B0G,EAAW1G,OACb,OAAO6F,EAGT,IAAK9F,EAAI,EAAOoG,EAAUnG,OAAdD,IAAwBA,EAClCuG,EAAOpG,KAAKwE,EAAYyB,EAAUpG,KAGpC,IAAKA,EAAI,EAAO2G,EAAW1G,OAAfD,IAAyBA,EAC/BjB,EAASS,OAAOI,YAAY2G,EAAOvG,MACrCuG,EAAOvG,GAAK,IAEdsG,EAAQnG,MA1LgBgF,EA0LiBoB,EAAOvG,GAzLhDmG,WAAK,GACTD,GAFoBA,EA0LUS,EAAW3G,IAxLzB4F,QAEZrE,EAAQqF,gBAAkBrF,EAAQsF,iBACpCV,EAAK,QAAUD,EAAO/B,QAAQ,KAAM,KAAK2C,cAAgB,KAIpD,MAAQX,EAAKhB,EAAQ,KAF5Be,EAASnH,EAASiF,UAAU,YAAnBjF,CAAgCmH,EAAQ3E,EAAS2B,IAEf,WAmL1C,CAED,IAAKlD,EAAI,EAAOgG,EAAW/F,OAAfD,IAAyBA,EACN,KAAzBgG,EAAWhG,GAAG4F,QAGlBS,EAASlG,KACP6F,EAAWhG,GAAGiG,MAAM,KAAKO,KAAI,SAAUC,GACrC,IAAIvB,EAAOuB,EAAEb,OACb,MAAa,KAATV,GAAeuB,EAAExG,OAAS,EAAUwG,EACjCvB,CACjB,KAII,IAAKlF,EAAI,EAAOqG,EAASpG,OAAbD,IAAuBA,EAAG,CACpC,IAAIgF,EAAM,GACVD,EAAM5E,KAAK6E,GACX,IAAK,IAAIU,EAAK,EAAQa,EAAOtG,OAAZyF,IAAsBA,EACjC3G,EAASS,OAAOI,YAAYyG,EAASrG,GAAG0F,MAC1CW,EAASrG,GAAG0F,GAAM,IAEpBV,EAAI7E,KAAK2E,EAAWC,EAAO/E,EAAG0F,EAAIW,EAASrG,GAAG0F,GAAKa,EAAOb,IAE7D,CAED,OA3GF,SAAoBY,EAASC,EAAQxB,GACnC,IAAIgC,EAAK,YACPC,EAAST,EAAOtG,OAElB,GAAIqG,EAAQrG,OAAQ,CAClB8G,GAAM,kBACN,IAAK,IAAI/G,EAAI,EAAOsG,EAAQrG,OAAZD,IAAsBA,EACpC+G,GAAMT,EAAQtG,GAEhB+G,GAAM,mBACP,CAGD,IAFAA,GAAM,YAED/G,EAAI,EAAO+E,EAAM9E,OAAVD,IAAoBA,EAAG,CACjC+G,GAAM,SACN,IAAK,IAAIrB,EAAK,EAAQsB,EAALtB,IAAeA,EACzBnE,EAAQ6D,aAAgC,OAAjBL,EAAM/E,GAAG0F,KACnCqB,GAAMhC,EAAM/E,GAAG0F,IAGnBqB,GAAM,SACP,CAED,OADAA,EAAM,sBAEP,CAmFQE,CAAWX,EAASC,EAAQxB,EACpC,CAED,SAASmC,EAAWpB,GAClB,OAAOD,EAAkBC,GAAU,EACpC,CAED,SAASqB,EAAqBrB,GAC5B,OAAOD,EAAkBC,GAAU,EACpC,CAuBD,OAZApD,GAHAA,GAHAA,GAHAA,EAAOQ,EAAQC,UAAUe,UAAU,gBAAiBxB,EAAMnB,EAAS2B,IAGvDiB,QAAQ,UAAWpF,EAASS,OAAO4H,2BAGnCjD,QAxPG,uHAwPe+C,IAGlB/C,QA1PO,oHA0PiB+C,GAEhC3F,EAAQ8F,mBAKV3E,GAHAA,EAAOA,EAAKyB,QA7PS,sGA6PmBgD,IAG5BhD,QA/Pe,gGA+PmBgD,IAGhDzE,EAAOQ,EAAQC,UAAUe,UAAU,eAAgBxB,EAAMnB,EAAS2B,EAGpE,IC7QA,IAAIoE,EAAa,UACfC,EAAU,CACRC,OAAQ,CACNC,sBAAsB,EACtBC,WAAW,EACXC,aAAa,EACbN,kBAAkB,EAClBjC,aAAa,EACbE,eAAe,GAEjBsC,MAAO,CACLP,kBAAkB,EAClBjC,aAAa,EACbE,eAAe,GAEjBuC,MAAO,CACLR,kBAAkB,EAClBjC,aAAa,EACbE,eAAe,IAGnBwC,EAAmB,CAAA,EASrB/I,EAASY,eAAiB,SAASJ,EAAMD,GAGvC,IAAKP,EAASS,OAAOC,SAASF,GAC5B,MAAMM,MAAM,qCAMd,GAHAN,EAAOR,EAASS,OAAOE,WAAWH,GAG9BR,EAASS,OAAOI,YAAYN,GAAM,CACpC,IAAKwI,EAAiBrG,eAAelC,GACnC,MAAMM,MAAM,yBAA2BN,EAAO,uBAEhD,OAAOuI,EAAiBvI,EAG5B,CAEuB,mBAARD,IACTA,EAAMA,KAIHP,EAASS,OAAOM,QAAQR,KAC3BA,EAAM,CAACA,IAGLP,EAASgB,kBAAkBT,KAC7BwI,EAAiBvI,GAAQD,EAG/B,EAMAP,EAASyB,qBAAuB,SAASjB,GAEvCA,EAAOR,EAASS,OAAOE,WAAWH,UAC3BuI,EAAiBvI,EAC1B,EAKAR,EAASgJ,qBAAuB,WAE9BD,EAAmB,CAAA,CACrB,EAMA/I,EAASmD,gBAAkB,SAAS3C,GAElCA,EAAOR,EAASS,OAAOE,WAAWH,UAC3BR,EAASqD,iBAAiB7C,EACnC,EAEA,MAAMyI,EAAejJ,EAAS4C,UACxBsG,EAAsBlJ,EAAS8C,iBC/FrC,SAASqG,EAAOzB,GACZ,MAAO,IAAG,IAAI0B,MAAOC,OAAO,4BAA4B3B,GAC5D,CDmGA1H,EAAS4C,UAAY,SAASpC,GAG5B,IAGE,GAFAyI,EAAazI,GACb+H,EAAa/H,GACRgI,EAAQ9F,eAAelC,GAAO,MACvC,CAAI,MACA,IAAKgI,EAAQ9F,eAAelC,GAAO,OACnCR,EAASoC,eACTmG,EAAa/H,CACd,CACD,IAAIqC,EAAS2F,EAAQhI,GACrB,IAAK,IAAIyC,KAAUJ,EACbA,EAAOH,eAAeO,KACxBjD,EAASuC,aAAaU,GAAUJ,EAAOI,GAG7C,EAMAjD,EAASkD,UAAY,WAEnB,OAAOqF,CACT,EAEAvI,EAASsJ,iBAAmB,SAAS9I,EAAMgC,GACrCA,IACFgG,EAAQhI,GAAQ+I,OAAOC,OAAOhB,EAAQhI,IAAS,GAAIgC,GAEvD,EAOAxC,EAAS8C,iBAAmB,SAAStC,GAEnC,MAAMN,EAASgJ,EAAoB1I,GACnC,OAAKR,EAASS,OAAOI,YAAYX,GAO7BsI,EAAQ9F,eAAelC,GAClBgI,EAAQhI,QADjB,EANOgI,EAAQ9F,eAAelC,GAGrB+I,OAAOC,OAAOtJ,EAAQsI,EAAQhI,IAF5BN,CAQb,EEvJAkJ,KAAKnH,UAAUoH,OAAS,SAASI,GAC/B,IAAIC,EAAI,CACN,KAAMpI,KAAKqI,WAAa,EACxB,KAAMrI,KAAKsI,UACX,KAAMtI,KAAKuI,WACX,KAAMvI,KAAKuI,WACX,KAAMvI,KAAKwI,aACX,KAAMxI,KAAKyI,aACX,KAAMC,KAAKC,OAAO3I,KAAKqI,WAAa,GAAK,GACzCO,EAAG5I,KAAK6I,mBAELV,IAAKA,EAAM,yBAChB,MAAMW,EAAU,OAAOC,KAAKZ,GACxBW,IAASX,EAAMA,EAAIrE,QAAQgF,EAAQ,IAAK9I,KAAKgJ,cAAgB,IAAIC,UAAU,EAAIH,EAAQ,GAAGlJ,UAC9F,IAAK,MAAMsJ,KAAKd,EAAG,CACjB,MAAMe,EAAQC,OAAO,IAAMF,EAAI,KAAKH,KAAKZ,GACzC,GAAIgB,EAAG,CACL,IAAIE,EAAIjB,EAAEc,GACS,GAAfC,EAAE,GAAGvJ,OAAayJ,GAAK,MAAQjB,EAAEc,IAAID,WAAW,GAAKb,EAAEc,IAAItJ,QACvC,GAAfuJ,EAAE,GAAGvJ,SAAayJ,GAAK,KAAOjB,EAAEc,IAAID,WAAW,GAAKb,EAAEc,IAAItJ,SACnEuI,EAAMA,EAAIrE,QAAQqF,EAAE,GAAIE,EACzB,CACF,CACD,OAAOlB,CACT,EC7BA,IAAImB,EAAU,WACVC,EAAwC,UAA/BC,SAASC,SAASC,SAAuB,WAAaF,SAASC,SAASC,SAAW,KAC5FC,EAAY,GACZC,EAAa,GAEjB,MAAMC,EAAS,CACbC,MAAO,CACLC,MAAO,4CACPC,SAAU,wCACVC,QAAS,0CACTC,IAAK,oDACLC,QAAS,yCACTC,UAAW,8CACXC,QAAS,0CACTC,MAAO,0CACPC,SAAU,2CACVC,oBAAqB,oDACrBC,SAAU,yDACVC,YAAa,0DACbC,KAAM,+CACNC,QAAS,iDACTC,WAAY,+CACZC,SAAU,6EACVC,YAAa,8EACbC,SAAU,2CACVC,aAAc,CACZC,QAAS,4CACTC,OAAQ,2CACRC,OAAQ,4CAEVC,KAAM,qCACNC,SAAU,+CACVC,UAAW,kDAEbC,MAAO,CACLzB,MAAOR,EAAS,gEAChBS,SAAUT,EAAS,uDACnBU,QAASV,EAAS,8DAClBW,IAAKX,EAAS,2DACdY,QAASZ,EAAS,8DAClBa,UAAWb,EAAS,mEACpBc,QAASd,EAAS,+DAClBe,MAAOf,EAAS,4DAChBgB,SAAUhB,EAAS,6DACnBiB,oBAAqBjB,EAAS,sEAC9BkB,SAAUlB,EAAS,8EACnBmB,YAAanB,EAAS,+EACtBoB,KAAMpB,EAAS,gEACfqB,QAASrB,EAAS,iEAClBsB,WAAYtB,EAAS,wEACrBuB,SAAUvB,EAAS,0FACnBwB,YAAaxB,EAAS,2FACtByB,SAAUzB,EAAS,gEACnB0B,aAAc,CACZC,QAAS3B,EAAS,iEAClB4B,OAAQ5B,EAAS,gEACjB6B,OAAQ7B,EAAS,iEAEnB8B,KAAM9B,EAAS,yDACf+B,SAAU/B,EAAS,mEACnBgC,UAAWhC,EAAS,sEAEtBkC,SAAU,CACR1B,MAAOR,EAAS,uDAChBS,SAAUT,EAAS,+CACnBU,QAASV,EAAS,qDAClBW,IAAKX,EAAS,2DACdY,QAASZ,EAAS,gDAClBa,UAAWb,EAAS,mEACpBc,QAASd,EAAS,sDAClBe,MAAOf,EAAS,iDAChBgB,SAAUhB,EAAS,kDACnBiB,oBAAqBjB,EAAS,2DAC9BkB,SAAUlB,EAAS,gEACnBmB,YAAanB,EAAS,iEACtBoB,KAAMpB,EAAS,sDACfqB,QAASrB,EAAS,wDAClBsB,WAAYtB,EAAS,sDACrBuB,SAAUvB,EAAS,0FACnBwB,YAAaxB,EAAS,2FACtByB,SAAUzB,EAAS,kDACnB0B,aAAc,CACZC,QAAS3B,EAAS,mDAClB4B,OAAQ5B,EAAS,kDACjB6B,OAAQ7B,EAAS,mDAEnB8B,KAAM9B,EAAS,4CACf+B,SAAU/B,EAAS,sDACnBgC,UAAWhC,EAAS,0DAsBxB,SAASmC,EAAQxM,GACf,GAAoB,iBAATA,EAAmB,CAC5B,MAAMyM,EAAM1D,OAAO2D,KAAK1M,GAAM,GACxB2M,EAAM3M,EAAKyM,GACjB,GAAmB,iBAARE,EACT,OAAOF,EAAM,IAAME,CAEtB,CAED,OAAO3M,CACT,CAEA,SAAS4M,EAAO5M,EAAM6M,GACpB,GAAIlC,EAAOzI,eAAekI,GAAU,CAClC,MAAM0C,EAAMnC,EAAOP,GACnB,IAAI2C,EAAM,GACV,GAAoB,iBAAT/M,EAAmB,CAC5B,MAAMyM,EAAM1D,OAAO2D,KAAK1M,GAAM,GACxB2M,EAAM3M,EAAKyM,GACbK,EAAIL,IAAuB,iBAARE,GAAoBA,GAAOG,EAAIL,GAAKE,KACzDI,EAAMD,EAAIL,GAAKE,GAEvB,MAAeG,EAAI9M,KACb+M,EAAMD,EAAI9M,IAGR+M,IAEAF,EADEE,EAAIhD,UAAU,EAAGM,EAAO3J,UAAY2J,EAChC0C,EAC2B,aAAxBA,EAAIhD,UAAU,EAAG,GACpBW,EAAaqC,EAEbtC,EAAYsC,EAGvB,CACD,OAAOF,CACT,CA+EA,MAAMP,EAAQ,CACZU,OAvIF,SAAgBhN,EAAMiN,EAAgBC,GAChClN,KAAQ2K,IACVP,EAAUpK,GAGkB,iBAAnBiN,GAA+BA,IACxCxC,EAAYwC,GAGa,iBAAhBC,GAA4BA,IACrCxC,EAAawC,EAEjB,EA4HEC,OA1HF,WACE,OAAO/C,CACT,EAyHEwC,SACFQ,WAjFA,SAAoBpN,EAAMqN,GACxB,OAAO,IAAI7J,SAAQ,CAAC8J,EAASC,KACpBvN,GAA4B,oBAAbsK,UAClBiD,EAAO,yBAGU,IAARF,IACTA,EAAM,KAGRA,EAAMT,EAAO5M,EAAMqN,KAEjBE,EAAOvN,EAAO,2BAGhB,MAAM4G,EAAK,UAAY4F,EAAQxM,GAAMuH,cACrC,IAAIiG,EAASlD,SAASmD,eAAe7G,GACrC,GAAI4G,EACF,OAAOF,EAAQtN,GAGjB,MAAM0N,EAAOpD,SAASoD,MAAQpD,SAASqD,qBAAqB,QAAQ,GACpEH,EAASlD,SAASsD,cAAc,UAChCJ,EAAOH,IAAMA,EACbG,EAAO5G,GAAKA,EACZ4G,EAAOK,OAAS,KACdP,EAAQtN,EAAK,EAEf0N,EAAKI,YAAYN,EAAO,GAE9B,EAoDEO,aAlDF,SAAsB/N,GACpBA,EAAOwM,EAAQxM,GACf,MAAMgO,EAAI1D,SAASmD,eAAe,UAAYzN,EAAKuH,eACnD,GAAIyG,EAAG,EACQ1D,SAASoD,MAAQpD,SAASqD,qBAAqB,QAAQ,IAC/DM,YAAYD,EAClB,CACH,EA4CEE,eA1CF,SAAwBlO,EAAMmO,GAC5B,IAAKnO,GAA4B,oBAAbsK,SAChB,MAAO,GAQX,QALmB,IAAR6D,IACTA,EAAM,MAGRA,EAAMvB,EAAO5M,EAAMmO,IAEjB,MAAO,GAGT,MAAMvH,EAAK,OAAS4F,EAAQxM,GAAMuH,cAElC,IADa+C,SAASmD,eAAe7G,GACxB,CACX,IAAI8G,EAAOpD,SAASoD,MAAQpD,SAASqD,qBAAqB,QAAQ,GAC9DS,EAAO9D,SAASsD,cAAc,QAClCQ,EAAKC,IAAM,aACXD,EAAKE,KAAOH,EACZC,EAAKxH,GAAKA,EACV8G,EAAKI,YAAYM,EAClB,CACD,MAAmB,UAAZhE,EAAsB,GAAK+D,CACpC,EAkBEI,iBAhBF,SAA0BvO,GACxBA,EAAOwM,EAAQxM,GACf,MAAMgO,EAAI1D,SAASmD,eAAe,OAASzN,EAAKuH,eAChD,GAAIyG,EAAG,EACQ1D,SAASoD,MAAQpD,SAASqD,qBAAqB,QAAQ,IAC/DM,YAAYD,EAClB,CACH,GC5GA,MAAMQ,EAAQ,CACVC,eAhFJ,SAAwBC,GACpB,OAAOA,GAAoB,iBAAPA,GAAmB,YAAaA,EAAKA,EAAY,QAAIA,CAC7E,EA+EIC,UAvHJ,SAAmB3O,EAAMmO,GACvB,IAAKnO,IAASmO,GAA2B,oBAAb7D,SAC1B,OAAO,EAGT,MAAM1D,EAAK,OAAS5G,EAAKuH,cAEzB,IADe+C,SAASmD,eAAe7G,GAC1B,CACX,MAAM8G,EAAOpD,SAASoD,MAAQpD,SAASqD,qBAAqB,QAAQ,GAC9D/H,EAAQ0E,SAASsD,cAAc,SACrChI,EAAMgB,GAAKA,EACXhB,EAAMgJ,UAAYT,EAClBT,EAAKI,YAAYlI,EAClB,CACD,OAAO,CACT,EAyGAwH,WAvGA,SAAoBxG,EAAIiI,GACpB,OAAO,IAAIrL,SAAQ,CAACsL,EAAKC,KAChBF,GAA4B,oBAAbvE,UAChByE,EAAI,oBAGR,MAAM9K,EAAOqG,SAASrG,KACtB,IAAIuJ,EAASlD,SAASmD,eAAe7G,GACjC4G,EACAvJ,EAAKgK,YAAYT,IAEjBA,EAASlD,SAASsD,cAAc,UAChCJ,EAAO5G,GAAKA,GAEhB4G,EAAO7M,KAAO,kBACd6M,EAAOrK,KAAO0L,EACd5K,EAAK6J,YAAYN,GACjBsB,GAAI,EAAK,GAEjB,EAqFIE,mBA/EJ,SAA4BnL,EAAK+C,EAAI5G,EAAMoD,GACjB,oBAAX6L,QAA0BA,OAAO3E,WACxCzG,EAAMoL,OAAO3E,UAEjB,MAAM4E,EAAKrL,EAAI+J,cAAc,OAK7B,GAJAsB,EAAGtI,GAAKA,EACRsI,EAAGC,UAAYnP,EACfkP,EAAGtJ,MAAMwJ,QAAU,OACnBvL,EAAII,KAAK6J,YAAYoB,GACG,mBAAb9L,GAA2BA,EAAU,CAC5C,MAAMc,EAASd,EAAS8L,GACxB,GAAIhL,aAAkBV,QAKlB,OAJAU,EAAOE,MAAK8K,IACRrL,EAAII,KAAKgK,YAAYiB,GACrBA,EAAGtJ,MAAMwJ,QAAU,EAAE,IAElBF,EAAGG,SAEjB,CAGD,OAFAxL,EAAII,KAAKgK,YAAYiB,GACrBA,EAAGtJ,MAAMwJ,QAAU,GACZF,EAAGG,SACd,EA0DIC,cAxDJ,SAAuBzL,EAAK+C,EAAI5G,GACN,oBAAXiP,QAA0BA,OAAO3E,WACxCzG,EAAMoL,OAAO3E,UAEjB,MAAM4E,EAAKrL,EAAI+J,cAAc,OAI7B,OAHAsB,EAAGtI,GAAKA,EACRsI,EAAGC,UAAYnP,EACf6D,EAAII,KAAK6J,YAAYoB,GACdA,CACX,EAgDIK,kBA9CJ,SAA2BvP,EAAMwP,EAASpM,GACtC,MAAM2B,EAAWyK,EAAQC,QAAQC,KAC3BC,EAAU5K,EAAW6K,KAAKC,MAAM9K,GAAY,KAClD,IAAI+K,EAAe,GACnB,GAAIH,EAAS,CACX,GACgC,kBAAtBA,EAAQ3K,WAA2B2K,EAAQ3K,WACrB,iBAAtB2K,EAAQ3K,WAA8D,SAApC2K,EAAQ3K,UAAUuC,cAE5D,OAAO,EAGLoI,EAAQI,QAEY,WAAlBJ,EAAQI,MACVD,EAAe,iBACY,UAAlBH,EAAQI,QACjBD,EAAe,iBAGpB,CAED,IAAIjB,EAAOW,EAAQQ,YAAY3J,OAC3BjD,GAAgC,mBAAbA,IACnByL,EAAOzL,EAASyL,IAEpB,MAAMM,GACHK,EAAQS,UAAUvP,OAAS,EAAI8O,EAAQS,UAAU,GAAK,KACrDT,EAAQL,WAAcW,EAAoB,IAAL,IACvCA,EACIlJ,EAAK5G,EAAO,IAAM4I,KAAKsH,MAAQ,IAAM1G,KAAKC,MAAsB,IAAhBD,KAAK2G,UAE3D,OADAX,EAAQ5I,GAAKA,EACN,CACLA,GAAIA,EACJuI,UAAWA,EACXiB,KAAMvB,EACNW,QAASA,EAEf,GClHMa,EAAU,MACVC,EAAa,WAEnB,GAAsB,oBAAXrB,OACT,MAAM3O,MAAM,yEAOd,QAAqB,IAAVuK,EACP,IAAIA,EAAQoE,OAAOpE,YAAS0F,EAGhC,SAASC,IACL,QAAS3F,CACb,CAEA,IAAI4F,GAAO,EA+BX,IAAIC,EAAa,CAChBC,aAAa,EACbC,WAAY,UAGb,SAASC,EAAcjK,GACtB,MAAMkK,EAAOhQ,KAEbgQ,EAAKC,QAAU,WAChB,EACCD,EAAKE,QAAU,WACd,MAAMC,EAAM3G,SAAS4G,cAAc,IAAItK,SACjCuK,EAAS7G,SAAS8G,gBAAgB,6BAA8B,QACtED,EAAOE,aAAa,QAAS,gBAC7BF,EAAOG,eAAe,KAAM,KAAM,GAClCH,EAAOG,eAAe,KAAM,KAAM,GAClCH,EAAOG,eAAe,KAAM,KAAM,GAClCH,EAAOG,eAAe,KAAM,KAAM,GAClCL,EAAInD,YAAYqD,EAElB,EACCL,EAAKS,iBAAmB,EACxBT,EAAKU,OAAS,SAASC,EAAYC,EAAYC,GAChD,EACCb,EAAKc,QAAU,SAASC,GACvB,GAAIA,EAAGC,cAA4B,OAAZD,EAAG5L,KACzB,OAED,MAAM8L,EAAgBzH,SAAS0H,iBAAiB,IAAIpL,oBACpD,IAAK,IAAIoD,EAAI,EAAO+H,EAAcrR,OAAlBsJ,EAA0BA,IACzC+H,EAAc/H,GAAGiG,UAAUgC,OAAO,aAEnC,IAAK,IAAIxR,EAAI,EAAOoR,EAAGK,SAASxR,OAAhBD,EAAwBA,IAAM,CAC7C,MAAM0R,EAAON,EAAGK,SAASzR,GACzB,IAAK,IAAIU,EAAI,EAAOgR,EAAKzR,OAATS,EAAiBA,IAChCgR,EAAKhR,GAAG8O,UAAUmC,IAAI,YAEvB,CAED,MAAMjB,EAAS7G,SAAS4G,cAAc,IAAItK,uBACtCuK,IACHA,EAAOE,aAAa,KAAMQ,EAAG5L,KAAO,GACpCkL,EAAOE,aAAa,KAAMQ,EAAG5L,KAAO,GACpCkL,EAAOE,aAAa,KAAMQ,EAAGQ,KAC7BlB,EAAOE,aAAa,KAAMQ,EAAGQ,IAAMR,EAAGS,QAEzC,EACCxB,EAAKyB,WAAa,WACjB,MAAMC,EAAMlI,SAAS0H,iBAAiB,IAAIpL,oBAC1C,IAAK,IAAInG,EAAI,EAAO+R,EAAI9R,OAARD,EAAgBA,IAC/B+R,EAAI/R,GAAGwP,UAAUgC,OAAO,aAEzB,MAAMd,EAAS7G,SAAS4G,cAAc,IAAItK,uBACtCuK,IACHA,EAAOE,aAAa,KAAM,GAC1BF,EAAOE,aAAa,KAAM,GAC1BF,EAAOE,aAAa,KAAM,GAC1BF,EAAOE,aAAa,KAAM,GAE7B,CACA,CAEA,IAAIoB,EAEJ,SAASC,EAAKC,EAAOC,EAAQC,GACxBhI,EAAMiI,MAAMC,iBACfN,EAAe,IAAI5H,EAAMiI,MAAME,gBAC/BP,EAAaC,KAAK,IAAIC,EAAS,IAAI9B,EAAc+B,GAAS,CAACK,aAAa,EAAMC,gBAAgB,EAAMC,aAAa,EAAMC,iBAAiB,EAAMC,aAAa,KAE3J/I,SAAS4G,cAAc,IAAIyB,GAASnO,UAAY,yEAKlD,SAAiBoO,EAAQU,EAAYT,GACpCJ,EAAac,SAAQ,GACrB,MAAMC,EAAY3I,EAAM4I,UAAU,GAAGb,EAAUC,EAAKnC,GAAY,IAC7C,IAAI7F,EAAMiI,MAAMY,aACxBC,KAAK,CACfH,UAAWA,IACTpP,MAAK,SAAUwP,GAEbnB,GACHA,EAAaoB,QAAQL,EAAWF,GAAYlP,MAAK,SAAUwP,GAE9D,IAAME,OAAM,SAAUC,GAEtB,GAEA,IAAID,OAAM,SAAUC,GAEpB,GACA,CArBCF,CAAQjB,GAAQ,EAAOC,EACxB,CAsBA,SAASmB,EAAYvQ,EAASU,EAAS2K,GACrC,GAAI0B,IAAU,CACZ,MAAM5J,EAAKkI,EAAIlI,GACT5G,EAAO8O,EAAIK,UACXiB,EAAO6D,KAAKnF,EAAIsB,MAChB8D,EAAUpF,EAAIoF,QAEdvB,EAAQ/L,EAAK,SACnB,IAAIlD,EAAOwQ,EACP,YAAYtN,aAAc5G,wBAA2BkU,YACrD,YAAYtN,aAAc5G,YAC9B0D,GAAO,YAAYiP,YACnB7D,EAAIU,QAAQ2E,WAAW9E,UAAY3L,EAkBnC,OADAS,EAAQvD,KAdO,CACbgG,GAAIA,EACJiI,KAAM,uNAIkB8D,qCACC/L,mCACFwJ,sFAOlB3M,GAAQ,EAChB,CAED2Q,YAAW,KACTJ,EAAYvQ,EAASU,EAAS2K,EAAI,GACjC,GACL,CAKA,SAAS2E,EAAUjE,EAASrL,GAC1B,OAAO,IAAIX,SAAQC,IACjB,IAAI4Q,EAAO7F,EAAMe,kBAAkBc,EAASb,GAC5C,IAAK6E,EACH,OAAO5Q,GAAQ,GAGjB4Q,EAAKH,QAAU5H,EAAMM,OAAO0D,GAC5B0D,EAAYvQ,EAASU,EAASkQ,EAAK,GAEvC,CAGA,SAASC,EAAkBpC,EAAU/N,GAEnC,OApLF,WACE,MAAMoQ,EAAO/D,IACb,GAAsB,oBAAXvB,OAAwB,CACjC,GAAIwB,EACF,OAAO8D,EAGJA,IACH9D,GAAO,EACPnE,EAAM4B,eAAeoC,GACrB9B,EAAMG,UAAU,YAAa,sMAG7BrC,EAAMc,WAAW,SAAShJ,MAAKpE,IAC7B6K,EAAQ2D,EAAMC,eAAeQ,OAAOjP,GAAM,IAG/C,CAEH,CAgKEwU,GACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrBvC,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAAK6S,EAAUjE,EAASrL,GAAS,IAEhDX,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAGA,SAASkR,IACP,IAAIC,GAAW,EACf,MAAO,CACL,CACEjU,KAAM,SACN2D,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,QAAQ3B,cAAoBA,KACtE,QAAK6B,EAASxR,SAITkU,GACmB,oBAAX3F,QAA0BA,OAAO4F,gBAC1CD,GAAW,EAEX3F,OAAO6F,iBAAiB,SAASC,IAC3BA,EAAMC,QACRtC,EAAKqC,EAAMC,OAAOrC,MAAOoC,EAAMC,OAAOpC,OAAQqC,KAAKF,EAAMC,OAAO5E,MACjE,KAKPtP,KAAKoU,OAAS,CACZhB,QAAS5H,EAAMM,OAAO0D,IAGjBgE,EAAkBpC,EAAU7N,EAAIF,SAASC,MAAK,IAE5CC,IAEV,GAGP,CCzPA,SAAS8Q,EAAqBnR,EAASwL,EAAS4F,EAAKC,GACnD,IACMA,IACFD,EAAMA,EAAItH,YAAY9J,EAAQsR,cAAc1H,cAAc,QAE5D,MAAM2H,EAAQH,EACXtH,YAAY9J,EAAQsR,cAAc1H,cAAc,OAChDE,YAAY9J,EAAQsR,cAAc1H,cAAc,MAC/C4B,IACF+F,EAAMzH,YAAY9J,EAAQsR,cAAcE,eAAehG,EAAQQ,cAC/DuF,EAAMjH,KAAO,IAAMkB,EAAQ5I,GAEjC,CAAI,MAED,CACD,OAAOwO,CACT,CAEA,SAASK,EAAiBzR,EAASwL,EAASkG,EAAaC,GAIvD,GAAoBD,EAAYC,cAA5BA,EAA0C,CAC5C,IAAIC,EAAc,KAClB,KAAOF,GACcA,EAAYC,cAA3BA,GACJC,EAAcF,EACdA,EAAcE,EAAYzB,WAE1ByB,EAAYzB,WAAa,KACzByB,EAAYR,IAAM,KAClBQ,EAAYD,aAAe,KAC3BC,EAAYC,SAAW,KAGzB,OADIH,GAAaD,EAAiBzR,EAASwL,EAASkG,EAAaC,GAC1DD,CACR,CAMD,GAAIC,EAAeD,EAAYG,SAAU,CAEvC,IADAH,EAAYG,WACLF,EAAeD,EAAYG,UAChCH,EAAYN,IAAMD,EAAqBnR,EAAS,KAAM0R,EAAYN,KAAK,GACvEM,EAAYG,WAEdH,EAAYN,IAAMD,EAAqBnR,EAASwL,EAASkG,EAAYN,KAAK,EAC9E,KAAS,CACL,KAAsBM,EAAYG,SAA3BF,GACLD,EAAYN,IAAMM,EAAYN,IAAIjB,WAClCuB,EAAYG,WAEdV,EAAqBnR,EAASwL,EAASkG,EAAYN,KAAK,EACzD,CAGD,OADIM,EAAYvB,YAAYsB,EAAiBzR,EAASwL,EAASkG,EAAYvB,WAAYwB,GAChFD,CACT,CAuFA,SAASI,IACP,MAAMC,EAAS,IAAIjS,UACnB,MAAO,CACL,CACEnD,KAAM,SACN2D,OAAQ,SAASZ,GAEf,MAAMG,EAAMkS,EAAOhS,gBAAgBL,EAAM,aACnCM,OAA8B,IAAbH,EAAII,KAAuBJ,EAAII,KAAOJ,EAC7D,OA9FR,SAA2BG,GACzB,IAAIwL,EAAU,KACVmG,EAAe,EACfD,EAAc,KACdxR,GAAS,EACb,MAAMgO,EAAWlO,EAAQgO,iBAAiB,uBAC1C,IAAK,IAAIvR,EAAI,EAAOyR,EAASxR,OAAbD,EAAqBA,IAKnC,GAJA+O,EAAU0C,EAASzR,GAI6B,SAA5C+O,EAAQQ,YAAY3J,OAAOkB,cAA0B,CAEvD,IAAI6N,EAAMpR,EAAQsR,cAAc1H,cAAc,MAC9CwH,EAAIjG,UAAY,eAChBK,EAAQ2E,WAAW6B,aAAaZ,EAAK5F,GACrC,IAAIyG,EAAU,CACZ9B,WAAY,KACZiB,IAAKA,EACLO,aAAcA,EACdE,SAAU,GAEZ,GAAIH,EAMF,GAAIC,EAAeD,EAAYC,aAC7BM,EAAQ9B,WAAauB,MAChB,CAGL,IAAIQ,EAAOR,EACX,KAAsBQ,EAAKP,aAApBA,GACLO,EAAOA,EAAK/B,WAEV+B,IAEAD,EAAQ9B,WADNwB,IAAiBO,EAAKP,aACHO,EAAK/B,WAEL+B,EAG1B,CAEHR,EAAcO,EACd/R,GAAS,CACV,MAGI,GAAIsL,EAAiB,QACxB,OAAQA,EAAiB,SACvB,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACHmG,EAAeQ,SAAS3G,EAAiB,QAAE4G,OAAO,IAC9CV,IACGA,EAAYG,WACfH,EAAYG,SAAWF,GAGzBD,EAAcD,EAAiBzR,EAASwL,EAASkG,EAAaC,IAQxE,KAAOD,GAAa,CAClB,IAAIE,EAAcF,EAClBA,EAAcE,EAAYzB,WAE1ByB,EAAYzB,WAAa,KACzByB,EAAYR,IAAM,KAClBQ,EAAYD,aAAe,KAC3BC,EAAYC,SAAW,IACxB,CACD,OAAO3R,CACT,CAWamS,CAAkBrS,GAIhBA,EAAQQ,UAHNd,CAIV,GAGP,CCrKA,GAAsB,oBAAXuL,OACT,MAAM3O,MAAM,uEAOd,QAAmB,IAAR0K,EACT,IAAIA,EAAMiE,OAAOjE,UAAOuF,EAG1B,MAAM+F,EAAU,CAAC,QAAS,MAAO,QAAS,QAAS,SAEnD,SAASC,IACP,aAAsB,IAARvL,IAAuBA,QAA+B,IAAjBA,EAAIwL,SAGzD,CAEA,IAAI/F,GAAO,EA0BX,SAASgG,EAAYhT,EAASqL,GAC5B,GAAIyH,IAAJ,CACE,MAAM3P,EAAKkI,EAAIlI,GACT5G,EAAO8O,EAAIK,UACXiB,EAAOtB,EAAIsB,KACXlB,EAAKJ,EAAIU,QACTzK,EAAW+J,EAAIU,QAAQC,QAAQC,KACrC,IAAIgH,EAAS,MACb,GAAI3R,EAAU,CACZ,MAAMV,EAAMuL,KAAKC,MAAM9K,GACnBV,GAAOA,EAAIqS,SAA0C,GAAhCJ,EAAQK,QAAQtS,EAAIqS,UAC3CA,EAASrS,EAAIqS,OAEhB,CACD1L,EAAIwL,WAAWpS,MAAKwS,IAClB,MAAM3F,EAAM2F,EAAIC,aAAazG,EAAM,CAAEzH,OAAQ,MAAO+N,OAAQA,IAC5DxH,EAAGiF,WAAW9E,UAAY,YAAYzI,aAAc5G,MAASiR,UAC7DxN,GAAQ,EAAK,GAGhB,MAED2Q,YAAW,KACTqC,EAAYhT,EAASqL,EAAI,GACxB,GACL,CAKA,SAASgI,EAAUtH,GACjB,OAAO,IAAIhM,SAAQC,IACjB,MAAM4Q,EAAO7F,EAAMe,kBAAkB,MAAOC,GAC5C,IAAK6E,EACH,OAAO5Q,GAAQ,GAGjBgT,EAAYhT,EAAS4Q,EAAK,GAE9B,CAGA,SAAS0C,EAAkB7E,GAEzB,OArEF,WACE,MAAMqC,EAAOgC,IACb,GAAsB,oBAAXtH,OAAwB,CACjC,GAAIwB,EACF,OAAO8D,EAGJA,IACH9D,GAAO,EACPnE,EAAMc,WAAW,OAAOhJ,MAAKpE,IAC3BgL,EAAMwD,EAAMC,eAAeQ,OAAOjP,GAAM,IAG7C,CAEH,CAqDEwU,GACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrBvC,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAAKkW,EAAUtH,GAAS,IAEvChM,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAEA,SAASuT,IACP,MAAO,CACL,CACErW,KAAM,SACN2D,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,yBAC1C,QAAKE,EAASxR,QAIPqW,EAAkB7E,GAAU9N,MAAK,IAE/BC,GAEV,GAGP,CC3HA,MAAMgM,EAAU,OAEhB,GAAsB,oBAAXpB,OACT,MAAM3O,MAAM,wEAOd,QAAyB,IAAd+L,EACT,IAAIA,EAAY4C,OAAO5C,gBAAakE,EAGtC,SAAS0G,IACP,aAA4B,IAAd5K,IAA6BA,EAC7C,CAEA,IAAIoE,GAAO,EA4CX,SAASyG,EAAW1H,EAASxN,EAASmC,EAASgT,GAC7C,MAAM9C,EAAO7F,EAAMe,kBAAkBc,EAASb,GAC9C,IAAK6E,EACH,OAAO7Q,QAAQC,SAAQ,GAGzB,MAAMyR,EAAStF,KAAKwH,UAAUpV,GACxBoO,EAAOR,KAAKwH,UAAUxH,KAAKC,MAAMwE,EAAKjE,OACtCxJ,EAAKyN,EAAKzN,GAWhB,OADAzC,EAAQvD,KATO,CACbgG,GAAIA,EACJiI,KAAM,0DACgCjI,2DAENwJ,oBAAuB8E,8BAKlD,IAAI1R,SAAQC,IACjB4T,EAAa5T,EAAS4Q,EAAK,GAE/B,CAGA,SAASiD,EAAmBC,EAAcC,EAAkBrT,EAASnC,GAEnE,OAtEF,WACE,MAAMuS,EAAO0C,IACb,GAAsB,oBAAXhI,OAAwB,CACjC,GAAIwB,EACF,OAAO8D,EAGJA,IACH9D,GAAO,EACPnE,EACGc,WAAWiD,GACXjM,MAAK,IACGkI,EAAMc,WAAW,cAEzBhJ,MAAK,IACGkI,EAAMc,WAAW,eAEzBhJ,MAAKpE,IACJqM,EAAYmC,EAAMC,eAAeQ,OAAOjP,GAAM,IAGrD,CAEH,CA8CEwU,GACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrB8C,EAAa1W,SAAQ2O,IACnBiF,EAAa7T,KAAKsW,EAAW1H,EAASxN,EAASmC,GAAgB,IAEjEqT,EAAiB3W,SAAQ2O,IACvBiF,EAAa7T,KAAKsW,EAAW1H,EAASxN,EAASmC,GAAe,IAEhEX,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAWA,SAAS4T,EAAa5T,EAASqL,GAC7B,GAAImI,IAAgB,CAKlB,OAFanI,EAAIU,QAAQ2E,WACpB9E,UAAY,YAHNP,EAAIlI,cACFkI,EAAIK,oBAGV1L,GAAQ,EAChB,CAED2Q,YAAW,KACTiD,EAAa5T,EAASqL,EAAI,GACzB,GACL,CAEA,SAAS2I,EAAaC,GACpB,MAAM1V,EAvBW,EAAC0V,EAAc,MAAQ,CACxCC,QAAS,CAAEC,QAAQ,GACnBC,MAAO,MACPC,SAAS,EACTC,SAAU,SACPL,IAkBa3V,CAAW2V,GAE3B,MAAO,CACL,CACE/W,KAAM,SACNuU,OAAQlT,EACRsC,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAIT,MAAMuT,EAAevT,EAAQgO,iBAAiB,2BACxCwF,EAAmBxT,EAAQgO,iBAAiB,qCAClD,SAAKuF,EAAa7W,SAAW8W,EAAiB9W,SAKvC4W,EAAmBC,EAAcC,EAAkBnT,EAAIF,QAASrD,KAAKoU,QAAQ9Q,MAAK,IAEhFC,GAEV,GAGP,CC/GA,SAAS2T,IACP,MAAMjC,EAAS,IAAIjS,UACnB,MAAO,CACL,CACEnD,KAAM,SACN2D,OAAQ,SAASZ,GAEf,MAAMG,EAAMkS,EAAOhS,gBAAgBL,EAAM,aACnCM,OAA8B,IAAbH,EAAII,KAAuBJ,EAAII,KAAOJ,EAC7D,OApDR,SAA6BG,GAC3B,IAAIwL,EAAU,KACVyI,EAAY,KACZ/T,GAAS,EACb,MAAMgO,EAAWlO,EAAQgO,iBAAiB,gDAC1C,IAAK,IAAIvR,EAAI,EAAOyR,EAASxR,OAAbD,EAAqBA,IAGnC,IAFA+O,EAAU0C,EAASzR,GACnBwX,EAAYzI,EAAQ0I,WACbD,GAAW,CAEhB,GAA2B,IAAvBA,EAAUE,SAAgB,CAE5B,IAAIC,EAAUH,EAAUI,UAAUC,MAAM,0CACpCF,IACiB,QAAfA,EAAQ,IAEVH,EAAUI,UAAYD,EAAQ,GAC1B5I,EAAQL,UACVK,EAAQL,WAAa,gBAErBK,EAAQL,UAAY,eAEtBjL,GAAS,GACe,QAAfkU,EAAQ,KAEjBH,EAAUI,UAAYD,EAAQ,GAC1B5I,EAAQL,UACVK,EAAQL,WAAa,eAErBK,EAAQL,UAAY,cAEtBjL,GAAS,IAIb,KACD,CACD+T,EAAYA,EAAUM,WACvB,CAEH,OAAOrU,CACT,CAWasU,CAAoBxU,GAIlBA,EAAQQ,UAHNd,CAIV,GAGP,CCxCA,IAAIwR,EAAS,CACXuD,YAAa,KAGXC,EAAQ,EACVC,EAAQ,EACRC,EAAS,EACTC,GAAQ,EACRC,GAAc,EACdC,GAAe,EACfC,GAAQ,EACRC,GAAY,EACZC,GAAa,EACbC,GAAY,EACZC,GAAO,GAWPC,GAAU,CAAEC,MAAO,IAAKC,IAAK,QAAStW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOL,IAEtEM,GAAY,CAEd,CAAEJ,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAChE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,UAAWC,MAAOf,GACrE,CAAEY,MAAO,aAAcC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACtE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAChE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAClE,CAAEY,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAClE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOP,IACjE,CAAEI,MAAO,QAASC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOP,IACjE,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAClE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,WAAYC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACpE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,UAAWC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACnE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAGhE,CAAEY,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,OAAQC,MAAOf,GAC/D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,OAAQC,MAAOf,GACjE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKC,MAAOf,EAAO/L,KAAK,EAAMgN,WAAW,GACrF,CAAEL,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,YAAaC,MAAOf,GACnE,CAAEY,MAAO,WAAYC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOf,GAChE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACpE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAC/D,CAAEY,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOP,IAC9D,CAAEI,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,OAAQC,MAAOf,GAC/D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GAClE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,OAAQC,MAAOf,GAChE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOR,IAC/D,CAAEK,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOR,IAChE,CAAEK,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOR,IACrE,CAAEK,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOR,IACnE,CAAEK,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOR,IACnE,CAAEK,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOR,IACnE,CAAEK,MAAO,UAAWC,IAAK,QAAStW,OAAQ,WAAYuW,IAAK,KAAMC,MAAOb,GACxE,CAAEU,MAAO,WAAYC,IAAK,SAAUtW,OAAQ,WAAYuW,IAAK,KAAMC,MAAOb,GAG1E,CAAEU,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOf,GAC1D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOf,GACzD,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOf,GACzD,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAChE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAChE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,OAAQC,MAAOf,GAChE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,OAAQC,MAAOf,GAChE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GAClE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOf,GACtE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOf,GACtE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,qBAAsBG,WAAW,EAAMF,MAAOf,GAC/F,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOP,IAC5D,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GAClE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GAGpE,CAAEY,MAAO,MAAOC,IAAK,QAAStW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOT,IAC/D,CAAEM,MAAO,KAAMC,IAAK,QAAStW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOT,IAC7D,CAAEM,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAChE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,aAAcC,MAAOf,GACtE,CAAEY,MAAO,UAAWC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOP,IAC/D,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOT,IAC1D,CAAEM,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,iBAAkBC,MAAOf,GAC3E,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOP,IAC5D,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GAClE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GAClE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAChE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,MAAOC,MAAOf,GAC/D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GAClE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GAGnE,CAAEY,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOX,GAAanM,KAAK,GAC1E,CAAE2M,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOV,GAAcpM,KAAK,GAC3E,CAAE2M,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOX,GAAanM,KAAK,GAC1E,CAAE2M,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOV,GAAcpM,KAAK,GAC3E,CAAE2M,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKG,WAAW,EAAMF,MAAOX,GAAanM,KAAK,GAC9F,CAAE2M,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKG,WAAW,EAAMF,MAAOV,GAAcpM,KAAK,GAChG,CAAE2M,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKG,WAAW,EAAMF,MAAOX,GAAanM,KAAK,GAC9F,CAAE2M,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKG,WAAW,EAAMF,MAAOV,GAAcpM,KAAK,GAChG,CAAE2M,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,SAAUC,MAAOX,IAC5D,CAAEQ,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,SAAUC,MAAOV,IAC5D,CAAEO,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAON,GAAWxM,KAAK,GACxE,CAAE2M,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKC,MAAOX,GAAaa,WAAW,EAAMhN,KAAK,GAC3F,CAAE2M,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKC,MAAOV,GAAcY,WAAW,EAAMhN,KAAK,GAC5F,CAAE2M,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKC,MAAOf,EAAOiB,WAAW,EAAMhN,KAAK,GAEtF,CAAE2M,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOX,IAClE,CAAEQ,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOV,IAClE,CAAEO,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOX,IAClE,CAAEQ,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOV,IAClE,CAAEO,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOX,GAAac,WAAW,GAClF,CAAEN,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOV,GAAca,WAAW,GAGnF,CAAEN,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC/D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,UAAWuW,IAAK,KAAMC,MAAOP,IAC/D,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,UAAWuW,IAAK,KAAMC,MAAOP,IAC/D,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,UAAWuW,IAAK,KAAMC,MAAOP,IAC/D,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,UAAWuW,IAAK,KAAMC,MAAOP,IAC/D,CAAEI,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAChE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,UAAWC,MAAOf,GACpE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACnE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOf,GACpE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,QAASC,MAAOf,GAC/D,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,GACrE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,UAAWC,MAAOf,GACnE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOf,GACtE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,EAAO/L,KAAK,GAC3E,CAAE2M,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,IAAKC,MAAOf,EAAOiB,WAAW,GACzE,CAAEL,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,KAAgBuW,IAAK,KAAMC,MAAOf,GACtE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,OAA4BuW,IAAK,KAAMC,MAAOf,GACnF,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,QAASC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACjE,CAAEY,MAAO,UAAWC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GACnE,CAAEY,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOf,GACxE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,WAAYC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOP,IAChE,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,QAASC,MAAOf,GACjE,CAAEY,MAAO,WAAYC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOP,IAChE,CAAEI,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,EAAOiB,WAAW,GACvF,CAAEL,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,EAAOiB,WAAW,GACvF,CAAEL,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,EAAOiB,WAAW,GACvF,CAAEL,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,EAAOiB,WAAW,GACvF,CAAEL,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,EAAOiB,WAAW,GACvF,CAAEL,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,EAAMlN,KAAK,GAChF,CAAE2M,MAAO,IAAKC,IAAK,KAAMtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,EAAMlN,KAAK,GAChF,CAAE2M,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAM7M,KAAK,GACxD,CAAE2M,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAM7M,KAAK,GAC1D,CAAE2M,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAM7M,KAAK,GAG5D,CAAE2M,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOR,IAC5D,CAAEK,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOR,IAC5D,CAAEK,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC/E,CAAEP,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC/E,CAAEP,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC/E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACvE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOgB,WAAW,EAAMG,iBAAkB,CAAC,IAAK,MAC5G,CACER,MAAO,OACPC,IAAK,KACLtW,OAAQ,OACRuW,IAAK,KACLC,MAAOd,EACPgB,WAAW,EACXG,iBAAkB,CAAC,MAAO,QAE5B,CACER,MAAO,QACPC,IAAK,KACLtW,OAAQ,QACRuW,IAAK,KACLC,MAAOd,EACPgB,WAAW,EACXG,iBAAkB,CAAC,WAAY,aAEjC,CACER,MAAO,OACPC,IAAK,KACLtW,OAAQ,OACRuW,IAAK,KACLC,MAAOd,EACPgB,WAAW,EACXG,iBAAkB,CAAC,UAAW,YAEhC,CAAER,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC/E,CAAEP,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC/E,CAAEP,MAAO,SAAUC,IAAK,KAAMtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC/E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GAC3E,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACvE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOgB,WAAW,EAAMG,iBAAkB,CAAC,IAAK,MAE5G,CAAER,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOf,GAC5D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,YAAaC,MAAOf,EAAOiB,WAAW,GACrF,CAAEL,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOd,EAAOkB,MAAM,GACzE,CAAEP,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,YAAaC,MAAOd,EAAOkB,MAAM,EAAMF,WAAW,GACjG,CAAEL,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOf,GAC5D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOf,GAC5D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOR,IAC5D,CAAEK,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,MAAOuW,IAAK,KAAMC,MAAOR,IAG5D,CAAEK,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,UAAWC,MAAOf,GACrE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,GACvE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,aAAcC,MAAOf,GACxE,CAAEY,MAAO,KAAMC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOf,GAC9D,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,iBAAkBC,MAAOf,GAC3E,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,oBAAqBC,MAAOf,GAC9E,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,wBAAyBC,MAAOf,GACnF,CAAEY,MAAO,MAAOC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,SAAUC,MAAOf,GACnE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,GACvE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,iBAAkBC,MAAOf,GAC5E,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,aAAcC,MAAOf,GACxE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOf,GACvE,CAAEY,MAAO,OAAQC,IAAK,KAAMtW,OAAQ,IAAUuW,IAAK,iBAAkBC,MAAOf,GAxRjE,CAAEY,MAAO,OAAQC,IAAK,QAAStW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,GACnE,CAAEW,MAAO,OAAQC,IAAK,QAAStW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOb,GACjE,CAAEU,MAAO,OAAQC,IAAK,QAAStW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOb,GAC/D,CAAEU,MAAO,IAAKC,IAAK,QAAStW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOZ,IAC1D,CAAES,MAAO,WAAYC,IAAK,QAAStW,OAAQ,WAAYuW,IAAK,KAAMC,MAAOb,GAC1E,CAAEU,MAAO,IAAKC,IAAK,OAAQtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOZ,IAC1D,CAAES,MAAO,IAAKC,IAAK,OAAQtW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOZ,IA4RlE,CAAES,MAAO,SAAUC,IAAK,WAAYtW,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,GACxE,CAAEW,MAAO,OAAQC,IAAK,QAAStW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOd,GACjE,CAAEW,MAAO,MAAOC,IAAK,QAAStW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOd,EAAOoB,KAAK,GAC9E,CAAET,MAAO,MAAOC,IAAK,QAAStW,OAAQ,IAAUuW,IAAK,WAAYC,MAAOd,EAAOoB,KAAK,GACpF,CAAET,MAAO,MAAOC,IAAK,QAAStW,OAAQ,IAAUuW,IAAK,KAAMC,MAAOd,EAAOoB,KAAK,GAC9E,CAAET,MAAO,QAASC,IAAK,QAAStW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOd,EAAOoB,KAAK,GAC3E,CAAET,MAAO,MAAOC,IAAK,QAAStW,OAAQ,IAAKuW,IAAK,KAAMC,MAAOd,EAAOoB,KAAK,GACzE,CAAET,MAAO,OAAQC,IAAK,QAAStW,OAAQ,KAAMuW,IAAK,KAAMC,MAAOd,EAAOoB,KAAK,GAC3E,CACET,MAAO,UACPC,IAAK,QACLtW,OAAQ,IACRuW,IAAK,oBACLG,WAAW,EACXF,MAAOd,EACPoB,KAAK,GAEP,CACET,MAAO,YACPC,IAAK,QACLtW,OAAQ,IACRuW,IAAK,oBACLG,WAAW,EACXF,MAAOd,EACPoB,KAAK,GAEP,CAAET,MAAO,KAAMC,IAAK,SAAUtW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOd,EAAOoB,KAAK,GACrF,CAAET,MAAO,SAAUC,IAAK,SAAUtW,OAAQ,IAAUuW,IAAK,aAAcC,MAAOd,EAAOoB,KAAK,GAC1F,CAAET,MAAO,SAAUC,IAAK,QAAStW,OAAQ,IAAUuW,IAAK,YAAaC,MAAOd,EAAOoB,KAAK,GAvT/E,CAAET,MAAO,OAAQC,IAAK,QAAStW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOL,IACjE,CAAEE,MAAO,OAAQC,IAAK,QAAStW,OAAQ,OAAQuW,IAAK,KAAMC,MAAOL,IAyT1EC,GAEA,CAAEC,MAAO,QAASC,IAAK,SAAUE,MAAOb,GACxC,CACEU,MAAO,KACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,OACPhX,OAAQ,KACRuW,IAAK,SACLC,MAAOd,EACPgB,WAAW,GAEb,CAAEL,MAAO,SAAUC,IAAK,SAAUS,OAAQ,cAAeC,MAAO,OAAQhX,OAAQ,SAAUuW,IAAK,KAAMC,MAAOd,GAC5G,CACEW,MAAO,KACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,aACPhX,OAAQ,KACRuW,IAAK,SACLC,MAAOd,EACPgB,WAAW,GAEb,CACEL,MAAO,SACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,aACPhX,OAAQ,SACRuW,IAAK,KACLC,MAAOd,GAET,CACEW,MAAO,MACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,gBACPhX,OAAQ,MACRuW,IAAK,SACLC,MAAOd,EACPgB,WAAW,GAEb,CACEL,MAAO,SACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,gBACPhX,OAAQ,SACRuW,IAAK,KACLC,MAAOd,GAET,CACEW,MAAO,KACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,SACPhX,OAAQ,KACRuW,IAAK,UACLC,MAAOd,EACPgB,WAAW,GAEb,CACEL,MAAO,UACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,SACPhX,OAAQ,UACRuW,IAAK,KACLC,MAAOd,GAET,CACEW,MAAO,KACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,YACPhX,OAAQ,KACRuW,IAAK,SACLC,MAAOd,EACPgB,WAAW,GAEb,CACEL,MAAO,SACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,YACPhX,OAAQ,SACRuW,IAAK,KACLC,MAAOd,GAET,CACEW,MAAO,KACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,UACPhX,OAAQ,KACRuW,IAAK,WACLC,MAAOd,EACPgB,WAAW,GAEb,CACEL,MAAO,WACPC,IAAK,SACLS,OAAQ,cACRC,MAAO,UACPhX,OAAQ,WACRuW,IAAK,KACLC,MAAOd,IAIX,SAASuB,GAAaC,EAAIC,GACxB,OAAID,EAAGb,MAAQc,EAAGd,MAAc,GACnB,CACf,CAEA,IAiKIe,GAAgBC,GAAkBC,GAjKlCC,GAAU,GAyBd,SAASC,GAAuBzU,EAAKmE,GAEnC,IAAIuQ,EACgFA,EAA/D,MAAjB1U,EAAI2U,OAAOxQ,IAAmC,MAArBnE,EAAI2U,OAAOxQ,EAAI,IAAmC,KAArBnE,EAAI2U,OAAOxQ,EAAI,GAAgBnE,EAAI4U,MAAMzQ,EAAI,GAC7FnE,EAAI4U,MAAMzQ,GACpB,IAAK,IAAI1J,EAAI,EAAOia,EAAGha,OAAPD,GAAqC,IAApBia,EAAGG,WAAWpa,GAAUA,GAAQ,GACjE,OAAOia,EAAGE,MAAMna,EAClB,CAEA,SAASqa,GAAWC,EAAK/U,EAAKmE,GAG5B,GAAS,GAALA,EAAQ,CACV,IAAI6Q,EAAG/Q,EAGP,IAFAE,GAAK,EACL6Q,EAAID,EAAIra,OACOsa,EAAR7Q,EAAI,GAEInE,EAAT+U,EADJ9Q,EAAKE,EAAI6Q,GAAM,GACG7Q,EAAIF,EACjB+Q,EAAI/Q,EAEX,OAAO+Q,CACR,CAAM,IAAK,IAAIva,EAAI0J,EAAO4Q,EAAIra,OAARD,GAA2BuF,EAAT+U,EAAIta,GAAUA,KACvD,OAAOA,CACT,CAEA,SAASwa,GAAYjV,GAUnB,IAPA,IAEIkV,EACAR,EACAS,EAJAnR,EAAI,EAKJsO,EAAQ,GACR8C,GAAO,EACF3a,EAAI,EAAQuF,EAAItF,QAATD,GAAmB2a,EAAM3a,IACvCia,EAAK1U,EAAI4U,MAAM,EAAGna,GAElBuJ,EAAI8Q,GAAWN,GAASE,EADpB1Q,GAEIwQ,GAAQ9Z,OAAZsJ,GAAsBhE,EAAI4U,MAAM,EAAGJ,GAAQxQ,GAAGtJ,SAAW8Z,GAAQxQ,KAEnEkR,EAAKlR,EACLvJ,GAFA6X,EAAQkC,GAAQxQ,IAENtJ,QAEZ0a,EAAWZ,GAAQ9Z,OAAZsJ,GAAsBhE,EAAI4U,MAAM,EAAGJ,GAAQxQ,GAAGtJ,SAAW8Z,GAAQxQ,GAG1E,GADAsQ,GAAmBC,GACN,IAATjC,EAEF,OADAiC,GAAkBb,GAAUwB,GAAIzB,MACzBC,GAAUwB,GAGnBX,GAAkB7B,EAClB1O,EAAI,EACJ0Q,EAAK1U,EAAI4U,MAAM,EAAG,GAGlB,IAFA,IAAIS,GAAQ,EAEEX,GAAP,KAAmB,KAANA,GAAkB1U,EAAItF,QAATsJ,GAC/B0Q,EAAK1U,EAAI4U,MAAM5Q,EAAGA,EAAI,GACtBA,IAEF,GAAI0Q,GAAMxF,EAAOuD,cACfiC,EAAK1U,EAAI4U,MAAM5Q,EAAGA,EAAI,KAClB,KAAmB,KAAN0Q,EAGf,IAFAW,GAAQ,EACRrR,IACc0Q,GAAP,KAAmB,KAANA,GAAkB1U,EAAItF,QAATsJ,GAC/B0Q,EAAK1U,EAAI4U,MAAM5Q,EAAGA,EAAI,GACtBA,IAYN,OARKqR,GAASrR,EAAI,GAAMA,EAAI,GAC1B0Q,EAAK1U,EAAI4U,MAAM,EAAG5Q,EAAI,GACtBmR,EAAQ,OAERnR,EAAI,EAEJmR,GAAS,KADTT,EAAK1U,EAAI4U,MAAM,EAAG,KACGF,EAAK,OAAS,IAAMA,GAAMA,EAAK,KAAO,KAAO,MAE1D,KAANA,GAAaJ,IAAoBzB,IACnC0B,GAAkB1B,GACX,CAAES,MAAOoB,EAAInB,IAAK4B,EAAOlY,OAAQyX,EAAIjB,MAAOd,EAAOkB,MAAM,EAAMlN,KAAK,IAEtE,CAAE2M,MAAOoB,EAAInB,IAAK4B,EAAOlY,OAAQyX,EAAIjB,MAAOf,EAAO/L,KAAK,EACjE,CAEA,SAAS2O,GAAkBC,GACzB,IAAIb,EACJ,GAAsB,KAAlBa,EAAKZ,OAAO,IAA6C,KAAhCY,EAAKZ,OAAOY,EAAK7a,OAAS,GAAW,CAChE,IAAI8a,EAAW,EAGL,WADVd,EAAKa,EAAKnF,OAAO,EAAG,IAGR,MADVsE,EAAKa,EAAKZ,OAAO,KACM,KAAND,GAAmB,KAANA,EAC5Bc,EAAW,EAGD,aADVd,EAAKa,EAAKnF,OAAO,EAAG,MAElBoF,EAAW,IAKL,MADVd,EAAKa,EAAKZ,OAAO,KACM,KAAND,IACfc,EAAW,GAGXA,EAAW,IAGH,cADVd,EAAKa,EAAKnF,OAAOmF,EAAK7a,OAAS,KACA,aAANga,GAA2B,aAANA,EAE5Ca,GADAA,EAAO,IAAMA,EAAKnF,OAAOoF,IACbpF,OAAO,EAAGmF,EAAK7a,OAAS,GAAK,IAC1B,aAANga,IAETa,GADAA,EAAO,IAAMA,EAAKnF,OAAOoF,IACbpF,OAAO,EAAGmF,EAAK7a,OAAS,IAAM,KAG/C,CACD,OAAO6a,CACT,CAeA,SAASE,GAAgBC,GACvB,IAAIC,EAMJ,OAJEA,EADqB,kBAAZD,EAAK/O,KAAoB+O,EAAK/O,IACjC,GAEA,KAEQ,MAAZ+O,EAAKlC,IAGAmC,EAAMD,EAAKpC,MAEXqC,EAAMD,EAAKlC,GAEtB,CAEA,SAASoC,GAAc5V,GAErB,IAAI6V,EACFN,EACArX,EACAzD,EAEAqb,EAAU,GAGZ,GAAc,OADdD,EAASZ,GADTjV,EAAMyU,GAAuBzU,EAAK,MAEX6V,EAAOpC,OAASV,IAAgBsB,GAAiB,EACtE,MAAO,CAAC,KAAMrU,GAMhB,OAJI6V,EAAOpC,OAASP,KAElB2C,EAASZ,GADTjV,EAAM6V,EAAO5Y,OAASwX,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,UAGzDmb,EAAOpC,OACb,KAAKR,GACL,KAAKP,EACH1S,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,QAC/C,IAAIqb,EAAYN,GAAgBI,GAChC,MAA2B,MAAvBE,EAAUpB,OAAO,IAA4B,MAAdkB,EAAOtC,IAAoB,CAACwC,EAAW/V,GAC9D,CAAC,IAAM+V,EAAY,IAAK/V,GAEtC,KAAK8S,GACHuB,KAGAnW,EAAS8X,GAFThW,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,SAEpB,GAC3B2Z,KACA,IAAImB,EAAW,EA0Bf,MAzB8B,WAA1BtX,EAAO,GAAGkS,OAAO,EAAG,KAEZ,MADVsE,EAAKxW,EAAO,GAAGyW,OAAO,KACC,KAAND,GAAmB,KAANA,EAC5Bc,EAAW,EACI,KAANd,EACTc,EAAW,EAGD,aADVd,EAAKxW,EAAO,GAAGkS,OAAO,EAAG,MAEvBoF,EAAW,KAIbA,EAAW,GACbtX,EAAO,GAAKA,EAAO,GAAGkS,OAAOoF,GACiCD,EAA/B,kBAApBM,EAAOjC,WAA0BiC,EAAOjC,UAAkB,IAAM1V,EAAO,GAAK,IAE9E,IAAMuX,GAAgBI,GAAU3X,EAAO,GAAK,KAGSqX,EAA/B,kBAApBM,EAAOjC,WAA0BiC,EAAOjC,UAAkB,WAAa1V,EAAO,GAAK,IAErF,UAAYuX,GAAgBI,GAAU3X,EAAO,GAAK,IAGtD,CAACqX,EAAMrX,EAAO,IACvB,KAAKkV,GAiBH,OAhBIyC,GAAUxC,KAASrT,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,UAM5D,IALgBD,EAAL,KAAjBuF,EAAI2U,OAAO,GAAe3U,EAAI2Q,QAAQ,KAChB,KAAjB3Q,EAAI2U,OAAO,GAAe3U,EAAI2Q,QAAQ,KACrB,KAAjB3Q,EAAI2U,OAAO,GAAe3U,EAAI2Q,QAAQ,KACtCkF,GAAUxC,GAAarT,EAAI4U,MAAM,GAAGjE,QAAQ,KAAO,EACnD,KACIlW,EAAIuF,EAAItF,QAED,MADpBga,EAAK1U,EAAI4U,MAAM,EAAGna,IACXka,OAAO,KACZmB,EAAU,OAEZA,GAAW,UAAYpB,EAAK,IACI,KAA5BA,EAAGC,OAAOD,EAAGha,OAAS,KACxBob,GAAW,OAGN,CAACA,EADR9V,EAAMyU,GAAuBzU,EAAKvF,EAAI,IAExC,KAAKkY,EAGH,OAAiB,OADjBzU,EAAS0X,GADT5V,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,UAEpC,GAAmB,CAAC,IAAM+a,GAAgBI,GAAU,IAAK7V,GAC1C,kBAAf6V,EAAOhC,MAAqBgC,EAAOhC,KAIpC,MAFRa,EAAK1U,EAAI2U,OAAO,KAGR,KAAND,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACwB,GAAvBmB,EAAOvC,MAAM5Y,QAAemb,EAAOvC,MAAMhB,MAAM,OAAe,KAANoC,EAElD,CAAC,IAAMe,GAAgBI,GAAU,IAAK7V,GAGtC,CADPuV,EAAO,IAAME,GAAgBI,GAAU,IAAM3X,EAAO,GAAK,KAC3CA,EAAO,KAGzBA,EAAO,GAAKoX,GAAkBpX,EAAO,IACjB,QAAhB2X,EAAOvC,MAEF,CAAC,UAAYpV,EAAO,GAAK,IAAKA,EAAO,IACnB,UAAhB2X,EAAOvC,MAET,CAAC,YAAcpV,EAAO,GAAK,IAAKA,EAAO,SACH,IAA3B2X,EAAO/B,iBAEhB,CACL,UAAY+B,EAAO/B,iBAAiB,GAAK5V,EAAO,GAAK,UAAY2X,EAAO/B,iBAAiB,GAAK,IAC9F5V,EAAO,IAEqB,kBAAd2X,EAAO9B,KAAoB8B,EAAO9B,IAG3C,CAAC0B,GAAgBI,GAAU,IAAM3X,EAAO,GAAK,IAAKA,EAAO,IAGzD,CAAC,IAAMuX,GAAgBI,GAAU,IAAM3X,EAAO,GAAK,KAAMA,EAAO,KAE3E,KAAK0U,EAGH,GAAiB,OADjB1U,EAAS0X,GADT5V,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,UAEpC,GAAY,MAAO,CAAC,IAAM+a,GAAgBI,GAAU,IAAK7V,GACpE9B,EAAO,GAAKoX,GAAkBpX,EAAO,IACrC,IAAI+X,EAAUL,GAAc1X,EAAO,IACnC,OAAkB,MAAd+X,EAAQ,GAAmB,CAAC,IAAMR,GAAgBI,GAAU,IAAK7V,IACrEiW,EAAQ,GAAKX,GAAkBW,EAAQ,IAQhC,CANLH,EADkB,SAAhBD,EAAOvC,MACC,YAAcpV,EAAO,GAAGU,QAAQ,UAAW,IAAM,IAAMqX,EAAQ,GAAK,IACrD,QAAhBJ,EAAOvC,MACN,WAAapV,EAAO,GAAK,KAAO+X,EAAQ,GAAK,KAE7C,IAAMR,GAAgBI,GAAU,IAAM3X,EAAO,GAAK,KAAO+X,EAAQ,GAAK,KAEjEA,EAAQ,KAC3B,KAAKpD,GAEH,OADA7S,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,QACxC,CAACmb,EAAO5Y,OAAQ+C,GACzB,KAAKgT,GAEH,OADAhT,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,QACxC,CAAC,iBAAmBmb,EAAOvC,MAAQ,WAAYtT,GACxD,KAAKmT,GAEHkB,KAEAnW,EAAS8X,GADThW,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,SACpB,GAC3B2Z,KACA,IAAIK,EAAK,GAGT,MAAU,MAFVA,EAAKxW,EAAO,GAAGyW,OAAOzW,EAAO,GAAGxD,OAAS,KAEN,MAAlBsF,EAAI2U,OAAO,GAGnB,CADPY,EAAO,WAAarX,EAAO,GAAK,IAClBA,EAAO,IAId,CADPqX,EAAO,UACOvV,GAGlB,QAGE,OADAA,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,QACxC,CAAC,IAAM+a,GAAgBI,GAAU,IAAK7V,GAEnD,CAEA,SAASkW,GAAclW,GACrB,IAAI6V,EAAQM,EAAMC,EAAMb,EAAMrX,EAO9B,GALAiY,EAAOlB,GADPjV,EAAMyU,GAAuBzU,EAAK,IAGlCuV,GADArX,EAAS0X,GAAc5V,IACT,IAEd6V,EAASZ,GADTjV,EAAM9B,EAAO,KAEFuV,OAASZ,IAAyB,KAAhBgD,EAAOvC,MAAc,CAUhD,IAPApV,EAAS0X,GAFT5V,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,UAKtC,GAFQ,MAAbwD,EAAO,GAEG,KACGoX,GAAkBpX,EAAO,IAC1C8B,EAAM9B,EAAO,GAEO,KAAhB2X,EAAOvC,MAET,GAAkB,MADlB8C,EAAOnB,GAAYjV,IACVsT,MAAc,CAErB,IAAI+C,EAAOT,GADX5V,EAAMyU,GAAuBzU,EAAKoW,EAAK9C,MAAM5Y,SAE7C2b,EAAK,GAAKf,GAAkBe,EAAK,IACjCrW,EAAMqW,EAAK,GACXd,EAAO,IAAMA,EACbA,GAAQ,KAAOrX,EAAO,GAAK,IAC3BqX,GAAQ,KAAOc,EAAK,GAAK,IACzBd,GAAQ,GAChB,MACQA,GAAQ,KAAOrX,EAAO,GAAK,SAK7BqX,EAAOA,EAAO,KAAOrX,EAAO,GAAK,SAEX,IAAbiY,EAAKtC,MAAuBsC,EAAKtC,QAC1CuC,EAAOnB,GAAYjV,IACVyT,OAASZ,IAASuD,EAAK3C,OAASV,IAAqC,GAApBoD,EAAK7C,MAAM5Y,QAAc0b,EAAK3C,OAASX,KAE/FyC,EAAO,IAAMA,GADbrX,EAASgY,GAAclW,IACI,GAAK,IAChCA,EAAM9B,EAAO,IAGlB,CAED,MAAO,CAACqX,EAAMvV,EAChB,CAEA,SAASgW,GAAahW,EAAKsW,GACtB,IAACT,EACFN,EACArX,EACAzD,EAEAqb,EAAU,GACRS,GAAa,EACjB,GAGEhB,GADArX,EAASgY,GADTlW,EAAMyU,GAAuBzU,EAAK,KAEpB,IAEd6V,EAASZ,GADTjV,EAAM9B,EAAO,KAEFuV,OAASZ,IAAyB,KAAhBgD,EAAOvC,QAElCpV,EAASgY,GADTlW,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,UAKtC,GAFQ,MAAbwD,EAAO,GAEG,KACGoX,GAAkBpX,EAAO,IAC1C8B,EAAM9B,EAAO,GAEbqX,EAAO,WADPA,EAAOD,GAAkBC,IACM,IAE/BO,GADAP,GAAQ,IAAMrX,EAAO,GAAK,IAE1B2X,EAASZ,GAAYjV,IACJuK,MAARgL,IAAmBO,GAAWP,UAEvCM,EAAOpC,OAASV,KAAiB8C,EAAOpC,OAASN,IAAamD,IAAoC,GAAlBjC,KACxE,MAAVwB,GACiB,IAAjBA,EAAO5Y,QAET,GAAI4Y,EAAOpC,OAASV,IAAgB8C,EAAOpC,OAASN,GAAW,CAE7D,IAAIqD,EAAMV,EAAQpb,OAClB,GAAI8b,EAAM,GAA0B,KAArBV,EAAQnB,OAAO,IAAamB,EAAQnF,QAAQ,KAAO,EAAG,CAEnE,IAAIzQ,EAAQ4V,EAAQnB,OAAO6B,EAAM,GACjC,GAAa,KAATtW,GAAyB,KAATA,EAAc,CAChC,IAAID,EAAO6V,EAAQnB,OAAO,GAC1B,GAAa,KAAR1U,GAAwB,KAATC,GAAiC,KAAjB2V,EAAO5Y,QAA2B,KAARgD,GAAwB,KAATC,EAAe,CAC1F,IAAIuW,EAAQ,GACRC,EAAM,GACVA,EAAI9b,KAAK,GACT,IAAI+b,GAAS,EACTC,EAAa,EACbC,EAAS,GACbA,EAAO,GAAK,CAAC,GACb,IAAIC,EAAkB,EAClBC,EAAgB,EAChBC,EAAe,GACnB,IAAKvc,EAAI,EAAO+b,EAAM,EAAV/b,EAAaA,IACnBqb,EAAQnB,OAAOla,IAAMwF,GAAM2W,IAC3Bd,EAAQnB,OAAOla,IAAMyF,GAEL,KADlB0W,GACgD,KAAzBd,EAAQnB,OAAOla,EAAI,IAAsC,KAAzBqb,EAAQnB,OAAOla,EAAI,KACxEic,EAAI9b,KAAKH,EAAI,GAEboc,EADAC,EAAkBrc,EAAI,GACI,CAACA,EAAI,IAGV,KAArBqb,EAAQnB,OAAOla,IAAkC,KAArBqb,EAAQnB,OAAOla,IAAkC,KAArBqb,EAAQnB,OAAOla,IACzEsc,IAEuB,KAArBjB,EAAQnB,OAAOla,IAAkC,KAArBqb,EAAQnB,OAAOla,IAAkC,KAArBqb,EAAQnB,OAAOla,IACzEsc,IAEuB,KAArBjB,EAAQnB,OAAOla,IAA8B,GAAjBsc,GAC9BF,EAAOC,GAAiBlc,KAAKH,GAEX,EAAhBsc,IAEED,GAAmBrc,EAAI,EAEzBA,IAGAkc,GAAS,GAKfD,EAAI9b,KAAK4b,GACT,IAAIS,GAAgB,EACpB,GAAkB,GAAdL,GAAmBF,EAAIhc,OAAS,GAAKic,EACvC,IAAKlc,EAAI,EAAOic,EAAIhc,OAAS,EAAjBD,EAAoBA,IAAK,CAEnC,GADIA,EAAI,IAAGgc,GAAS,QACX,GAALhc,EAEF,GAA6B,GAAzBoc,EAAOH,EAAIjc,IAAIC,OACjB,IAAIwc,EAAS,CAACpB,EAAQ1F,OAAOsG,EAAIjc,GAAK,EAAGic,EAAIjc,EAAI,GAAKic,EAAIjc,GAAK,SAC1D,CACDyc,EAAS,CAACpB,EAAQ/R,UAAU2S,EAAIjc,GAAK,EAAGoc,EAAOH,EAAIjc,IAAI,KAC3D,IADA,IACSU,EAAI,EAAO0b,EAAOH,EAAIjc,IAAIC,OAAnBS,EAA2BA,IACzC+b,EAAOtc,KAAKkb,EAAQ/R,UAAU8S,EAAOH,EAAIjc,IAAIU,EAAI,GAAK,EAAG0b,EAAOH,EAAIjc,IAAIU,KAE1E+b,EAAOtc,KAAKkb,EAAQ/R,UAAU8S,EAAOH,EAAIjc,IAAIoc,EAAOH,EAAIjc,IAAIC,OAAS,GAAK,EAAGgc,EAAIjc,EAAI,GAAK,GAC3F,MAGD,GAA6B,GAAzBoc,EAAOH,EAAIjc,IAAIC,OACbwc,EAAS,CAACpB,EAAQ1F,OAAOsG,EAAIjc,GAAK,EAAGic,EAAIjc,EAAI,GAAKic,EAAIjc,GAAK,SAC1D,CAEL,IADIyc,EAAS,CAACpB,EAAQ/R,UAAU2S,EAAIjc,GAAK,EAAGoc,EAAOH,EAAIjc,IAAI,KAClDU,EAAI,EAAO0b,EAAOH,EAAIjc,IAAIC,OAAnBS,EAA2BA,IACzC+b,EAAOtc,KAAKkb,EAAQ/R,UAAU8S,EAAOH,EAAIjc,IAAIU,EAAI,GAAK,EAAG0b,EAAOH,EAAIjc,IAAIU,KAE1E+b,EAAOtc,KAAKkb,EAAQ/R,UAAU8S,EAAOH,EAAIjc,IAAIoc,EAAOH,EAAIjc,IAAIC,OAAS,GAAK,EAAGgc,EAAIjc,EAAI,GAAK,GAC3F,CAEH,IAAKU,EAAI+b,EAAOxc,OAAS,EAAGS,GAAK,EAAGA,IACjB,WAAb+b,EAAO/b,IACA,GAALV,IACFuc,EAAe,IAAMA,GAEvBE,EAAO9b,OAAOD,EAAG,IACH,GAALV,IACTuc,EAAe,IAAMA,GAGrBC,EAAe,GAAKC,EAAOxc,QAAUuc,EACvCN,GAAS,GACiB,GAAjBM,IACTA,EAAeC,EAAOxc,QAExB+b,GAASS,EAAOC,KAAK,IACtB,CAEHV,EAAQ,kBAAoBO,EAAe,KAAOP,EAAQ,eAEtDE,IACFb,EAAUW,EAEb,CACF,CACF,CAEDzW,EAAMyU,GAAuBzU,EAAK6V,EAAOvC,MAAM5Y,QAChB,kBAApBmb,EAAOjC,WAA2BiC,EAAOjC,WAKlDkC,GAAW,WACXS,GAAa,IAJbT,GADAP,EAAO,UAAYE,GAAgBI,GAEnCU,GAAa,EAKhB,CAMD,OALIlC,GAAiB,IAAMkC,IACzBT,GAAW,YAIN,CAACA,EAAS9V,EACnB,CAEe,SAASoX,GAAgBpX,GAKtC,OAJAqU,GAAiB,EAIM,OADvBrU,GADAA,GADAA,EAAMA,EAAIpB,QAAQ,0BAA2B,KACnCA,QAAQ,QAAS,MACjBA,QAAQ,QAAS,MACnB0T,MAAM,MACL,GAEF0D,GAAahW,EAAIpB,QAAQ,QAAS,KAAK,GAAO,EACvD,CC3gCA,GD4dA,WACE,IAAInE,EACA4c,EAAS3D,GAAUhZ,OACvB,IAAKD,EAAI,EAAO4c,EAAJ5c,EAAYA,KAClBiZ,GAAUjZ,GAAG+Y,KAA0C,kBAA1BE,GAAUjZ,GAAGkZ,WAA0BD,GAAUjZ,GAAGkZ,WACnFD,GAAU9Y,KAAK,CACb0Y,MAAOI,GAAUjZ,GAAG+Y,IACpBD,IAAKG,GAAUjZ,GAAG8Y,IAClBtW,OAAQyW,GAAUjZ,GAAGwC,OACrBwW,MAAOC,GAAUjZ,GAAGgZ,MACpBM,IAAKL,GAAUjZ,GAAGsZ,MAAO,KAOjC,WACE,IAAItZ,EAEJ,IADAiZ,GAAU4D,KAAKpD,IACVzZ,EAAI,EAAOiZ,GAAUhZ,OAAdD,EAAsBA,IAAK+Z,GAAQ/Z,GAAKiZ,GAAUjZ,GAAG6Y,KACnE,CAPEiE,EACF,CAkiBAC,GC7gCsB,oBAAXvO,OACT,MAAM3O,MAAM,yEAQd,QAAqB,IAAV8K,GACT,IAAIA,GAAQ6D,OAAO7D,YAASmF,EAG9B,GAAmC,oBAAxBjF,oBACT,IAAImS,GAAsBxO,OAAO3D,0BAAuBiF,EAG1D,IAAImN,GAAoB,EACxB,SAASC,KACP,aAAsC,IAAxBF,KAAuCA,SAAwC,IAAVrS,KAAyBA,GAG9G,CAEA,IAAIqF,IAAO,EACX,MAAMH,GAAa,WACnB,SAASkE,GAAepR,GACtB,MAAMmR,EAAOoJ,KACb,GAAsB,oBAAX1O,OAAwB,CACjC,GAAIwB,GACF,OAAO8D,EAGT,IAAKA,EAkBH,OAjBA9D,IAAO,EACPnE,EAAM4B,eAAeoC,IACrBhE,EACGc,WAAW,SACXhJ,MAAKpE,IACJoL,GAAQoD,EAAMC,eAAeQ,OAAOjP,IAC7BsM,EAAMc,WAAW,0BAEzBhJ,MAAKpE,IACJyd,GAAsBjP,EAAMC,eAAeQ,OAAOjP,IAC1B,mBAAboD,GAA2BA,GACpCA,EAASqa,GACV,IAEF3J,OAAM9F,IACiC,IAEnCuG,CAEV,CAKD,MAHwB,mBAAbnR,GAA2BA,GACpCA,EAASqa,IAEJlJ,CACT,CAcA,SAASqJ,GAAcna,EAASqL,GAC9B,GAAI6O,KAAY,CAEd,MAAM3d,EAAO8O,EAAIK,UACXmK,EAAQxK,EAAIwK,MACZlJ,EAAOtB,EAAIsB,KACX8D,EAAUpF,EAAIoF,QACdgB,EAASpG,EAAI9M,QACb6B,EAAMiL,EAAIU,QAAQ8F,cACxB,IAAI5R,EAAO,GACX,GAAI0M,aAAgByN,MAClBzN,EAAKvP,SAAQgO,IACX,GAAa,KAATA,EACFnL,GAAQ,WACH,CACL,MAAMoa,EAAO1S,GAAM2S,eAAelP,EAAMqG,GACxCxR,GAAQwQ,EACJ,eAAeoF,aAAiBtZ,0BAA6BkU,MAAY4J,UACzE,eAAexE,aAAiBtZ,MAAS8d,SAC9C,SAEE,CACL,MAAMA,EAAO1S,GAAM2S,eAAe3N,EAAM8E,GACxCxR,EAAOwQ,EACH,eAAeoF,aAAiBtZ,0BAA6BkU,MAAY4J,UACzE,eAAexE,aAAiBtZ,MAAS8d,SAC9C,CACDhP,EAAIU,QAAQ2E,WAAW9E,UAAY3L,IACjCga,GACGA,IACHD,GAAoB5Z,EAAII,KAAMiR,GAEhCzR,GAAQ,EACZ,MACI2Q,YAAW,KACTwJ,GAAcna,EAASqL,EAAI,GAC1B,GAEP,CAEA,SAASkP,GAAYxO,EAAS0F,EAAQ+I,GACpC,OAAO,IAAIza,SAAQC,IACjB,IAAIya,EACJ,MAAM7J,EAAO7F,EAAMe,kBAAkB,QAASC,GAASX,IACrD,IAAIuB,EACJ8N,EAAQrP,EACR,MAAMsP,EAAQtP,EAAKnI,MAAM,oBAazB,OAZIyX,EAAMzd,OAAS,GACjB0P,EAAO,GACP+N,EAAMtd,SAAQgO,IAEC,MADbA,EAAOA,EAAKxI,UAEVwI,EAAOoP,EAAcG,GAAevP,GAAQA,GAE9CuB,EAAKxP,KAAKiO,EAAK,KAGjBuB,EAAO6N,EAAcG,GAAeF,GAASA,EAExC9N,CAAI,IAEb,IAAKiE,EACH,OAAO5Q,GAAQ,GAGjB4Q,EAAKH,QAAU5H,EAAMM,OAAO0D,IAC5B+D,EAAKiF,MAAQ4E,EACb7J,EAAKrS,QAAUkT,EACf0I,GAAcna,EAAS4Q,EAAK,GAEhC,CAwBA,SAASgK,GAAarY,GACpB,OAAOA,EAAIpB,QAAQ,wBAAyB,OAC9C,CAGA,MAAM0Z,GAAY,CAACC,EAAa,MAC9B,IAAIrJ,EAAS,CACXsJ,aAAa,EACbC,cAAc,EACdC,WAAY,UACZC,WAAY,QACTJ,GAWL,SAASK,EAAkBva,EAAKwa,GAC9B,SAAKxa,GAAsB,iBAARA,IAAqBA,EAAInC,eAAe2c,GAI5D,CAED,SAASC,EAAcza,EAAKuB,EAAOjF,GACjC,SAAKie,EAAkBva,EAAKuB,IAAWgZ,EAAkBva,EAAIuB,GAAQjF,KAhBhDO,EAgBwEmD,EAAIuB,GAAOjF,GAfnGkd,MAAMtd,QAAQW,IAAOA,EAAER,WAmB5B2D,EAAIuB,GAAOjF,GAAME,SAAQke,IACvBA,EAAU3P,QAAmB,WAATzO,EACN,cAAViF,IACFmZ,EAAUC,WAAY,EACvB,IAEI3a,EAAIuB,GAAOjF,IA1BpB,IAAuBO,CA2BtB,CA8CD,OA5CK2c,MAAMtd,QAAQ2U,EAAOyJ,YA6BdzJ,EAAOyJ,WAAWje,SAC5BwU,EAAOyJ,WAAa,CAClB,CAAE1Y,KAAM,KAAMC,MAAO,KAAMkJ,SAAS,GACpC,CAAEnJ,KAAM,MAAOC,MAAO,MAAOkJ,SAAS,GACtC,CAAEnJ,KAAM,oBAAqBC,MAAO,kBAAmBkJ,SAAS,GAChE,CAAEnJ,KAAM,iBAAkBC,MAAO,eAAgBkJ,SAAS,GAC1D,CAAEnJ,KAAM,mBAAoBC,MAAO,iBAAkBkJ,SAAS,GAC9D,CAAEnJ,KAAM,kBAAmBC,MAAO,gBAAiBkJ,SAAS,GAC5D,CAAEnJ,KAAM,cAAeC,MAAO,YAAakJ,SAAS,GACpD,CAAEnJ,KAAM,MAAOC,MAAO,MAAOkJ,SAAS,GACtC,CAAEnJ,KAAM,KAAMC,MAAO,KAAMkJ,SAAS,EAAM4P,WAAW,GACrD,CAAE/Y,KAAM,KAAMC,MAAO,KAAMkJ,SAAS,EAAO4P,WAAW,GACtD,CAAE/Y,KAAM,MAAOC,MAAO,MAAOkJ,SAAS,EAAO4P,WAAW,KAxC1D9J,EAAOyJ,WAAa,GACjBM,OACCH,EAAc5J,EAAOyJ,WAAY,UAAW,YAAc,CACxD,CAAE1Y,KAAM,KAAMC,MAAO,KAAMkJ,SAAS,GACpC,CAAEnJ,KAAM,MAAOC,MAAO,MAAOkJ,SAAS,GACtC,CAAEnJ,KAAM,oBAAqBC,MAAO,kBAAmBkJ,SAAS,GAChE,CAAEnJ,KAAM,iBAAkBC,MAAO,eAAgBkJ,SAAS,GAC1D,CAAEnJ,KAAM,mBAAoBC,MAAO,iBAAkBkJ,SAAS,GAC9D,CAAEnJ,KAAM,kBAAmBC,MAAO,gBAAiBkJ,SAAS,GAC5D,CAAEnJ,KAAM,cAAeC,MAAO,YAAakJ,SAAS,KAGvD6P,OACCH,EAAc5J,EAAOyJ,WAAY,UAAW,WAAa,CACvD,CAAE1Y,KAAM,MAAOC,MAAO,MAAOkJ,SAAS,KAGzC6P,OACCH,EAAc5J,EAAOyJ,WAAY,YAAa,YAAc,CAC1D,CAAE1Y,KAAM,KAAMC,MAAO,KAAMkJ,SAAS,EAAM4P,WAAW,KAGxDC,OACCH,EAAc5J,EAAOyJ,WAAY,YAAa,WAAa,CACzD,CAAE1Y,KAAM,KAAMC,MAAO,KAAMkJ,SAAS,EAAO4P,WAAW,GACtD,CAAE/Y,KAAM,MAAOC,MAAO,MAAOkJ,SAAS,EAAO4P,WAAW,KAkBzD9J,CAAM,EAGf,SAASgK,GAAcX,GACrB,IAAIY,EAAkB,EACtB,MAAMjK,EAASoJ,GAAUC,GACnBa,EAAiBlK,EAAOyJ,WAAW1X,KAAI,EAAGhB,OAAMC,QAAOkJ,UAAS4P,gBAY7D,CAAE1Z,KAXQ4E,OAAO,GAAGmU,GAAapY,UAAaoY,GAAanY,KAAU,KAW7DmZ,SAVE,CAAC/G,EAAOwF,OACrBqB,EACEH,IACFlB,EAAOM,GAAeN,IAEpB1O,EACK,MAAM0O,OAER,MAAMA,YAKjB,MAAO,CACL,CACEnd,KAAM,SACNuU,OAAQA,EACR5Q,OAAQ,SAASD,GACf8a,EAAkB,EAClB,MAAMnb,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGLob,EAAe1e,QAGjBsD,EAAQgO,iBAAiB,uBAAuBnR,SAAQqO,IAEpC,IAAIA,EAAGoQ,YAAYhb,QAEnCiX,GAA0B,UAAlBA,EAAKgE,UAAwBhE,EAAKlD,UAAUhS,SAG5CxF,SAAQ0a,IAChB,MAAMiE,EAAUJ,EAAeK,QAC7B,CAAC1F,GAAOzU,OAAM+Z,cAAetF,EAAInV,QAAQU,EAAM+Z,IAC/C9D,EAAKlD,WAEPkD,EAAKlD,UAAYmH,CAAO,GACxB,IAKN,MAAMtB,EAAQla,EAAQgO,iBAAiB,6BACjCgN,EAAYhb,EAAQgO,iBAAiB,qCAE3C,IAAKkM,EAAMxd,SAAWse,EAAUte,OAAQ,CACtC,GAAIye,EAAkB,EAAG,CACvBre,KAAKoU,OAAOhB,QAAU5H,EAAMM,OAAO0D,IACnC,MAAMoP,EAAO5e,KACb,SAAS6e,EAAiBlc,EAASmP,GAC7B+K,MACF/K,EAAO5O,EAAQsR,cAAcrR,KAAMyb,EAAKxK,QACxCzR,GAAQ,IAER2Q,YAAW,KACTuL,EAAiBlc,EAASmP,EAAO,GAChC,GAEN,CAED,OAAO,IAAIpP,SAAQC,IACjB+Q,IAAe5B,IACb+M,EAAiBlc,EAASmP,EAAO,GACjC,IACDxO,MAAK,IAECC,GAEV,CAED,OAAO,CACR,CAID,OAFA6Q,EAAOhB,QAAU5H,EAAMM,OAAO0D,IAjMtC,SAA6B4N,EAAOc,EAAW9J,GAG7C,OAFAwI,GAAoBQ,EAAMxd,OAASse,EAAUte,OAC7C8T,KACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrByJ,EAAMrd,SAAQ2O,IACZiF,EAAa7T,KAAKod,GAAYxO,EAAS0F,GAAQ,GAAO,IAExD8J,EAAUne,SAAQ2O,IAChBiF,EAAa7T,KAAKod,GAAYxO,EAAS0F,GAAQ,GAAM,IAEvD1R,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAoLemc,CAAoB1B,EAAOc,EAAWle,KAAKoU,QAAQ9Q,MAAK,IAEtDC,GAEV,GAGP,CC1VA,MAAMgM,GAAU,UAEhB,GAAsB,oBAAXpB,OACT,MAAM3O,MAAM,gBAAgB+P,yDAO9B,QAAuB,IAAZtF,GACT,IAAIA,GAAUkE,OAAOlE,cAAWwF,EAGlC,SAASsP,KACP,QAAS9U,EACX,CAEA,IAAI0F,IAAO,EA0BX,SAASqP,GAAgBrc,EAASqL,GAChC,GAAI+Q,KAAc,CAoBhB,OAjBa/Q,EAAIU,QAAQ2E,WAgBpB9E,UAAY,YAlBNP,EAAIlI,cACFkI,EAAIK,oBAkBV1L,GAAQ,EAChB,CAED2Q,YAAW,KACT0L,GAAgBrc,EAASqL,EAAI,GAC5B,GACL,CAMA,SAASiR,GAAcvQ,EAASrL,EAAS+Q,GACvC,MAAMb,EAAO7F,EAAMe,kBAAkBc,GAASb,GAC9C,IAAK6E,EACH,OAAO7Q,QAAQC,SAAQ,GAGzByR,EAAStF,KAAKwH,UAAU,IAAKlC,EAAQ8K,KAAK,IAC1C,MAAM5P,EAAOR,KAAKwH,UAAUxH,KAAKC,MAAMwE,EAAKjE,OAc5C,OADAjM,EAAQvD,KAZO,CACbgG,GAAIyN,EAAKzN,GACTiI,KAAM,4DACkCwF,EAAKzN,+DAEZsO,mGAEA9E,qEAM5B,IAAI5M,SAAQC,IACjBqc,GAAgBrc,EAAS4Q,EAAK,GAElC,CAGA,SAAS4L,GAAsB/N,EAAU/N,EAAS+Q,GAEhD,OAvFF,WACE,MAAMX,EAAOsL,KACb,GAAsB,oBAAX5Q,OAAwB,CACjC,GAAIwB,GACF,OAAO8D,EAGJA,IACH9D,IAAO,EACPnE,EAAMc,WAAWiD,IAASjM,MAAKpE,IAC7B+K,GAAUyD,EAAMC,eAAeQ,OAAOjP,GAAM,IAGjD,CAEH,CAuEEwU,GACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrBvC,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAAKmf,GAAcvQ,EAASrL,EAAS+Q,GAAQ,IAE5D1R,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAeA,SAASyc,GAAgB3B,GAEvB,MAAO,CACL,CACE5d,KAAM,SACNuU,OAjBY,EAACA,EAAS,MAAQ,CAClC6C,SAAU,MACViI,KAAK,EACLG,MAAO,IACP7N,OAAQ,IACRwF,QAAS,CACPsI,MAAM,GAERC,WAAW,KACRnL,IAIYoJ,CAAUC,GAKrBja,OAAQ,SAAUD,GAChB,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,QAAQ3B,eAAoBA,MACtE,QAAK6B,EAASxR,QAKPuf,GAAsB/N,EAAU7N,EAAIF,QAASrD,KAAKoU,QAAQ9Q,MAAK,IAE7DC,GAEV,GAGP,CC3JA,MAAMgM,GAAU,UAEhB,GAAsB,oBAAXpB,OACT,MAAM3O,MAAM,2EAOd,QAAuB,IAAZ6K,GACT,IAAIA,GAAU8D,OAAO9D,cAAWoF,EAGlC,SAAS+P,KACP,aAA0B,IAAZnV,KAA2BA,GAC3C,CAEA,IAAIsF,IAAO,EAmCX,SAAS8P,GAAgB9c,EAASqL,GAChC,GAAIwR,KAAJ,CACE,MACMtgB,EAAO8O,EAAIK,UAEXoM,EAAOzM,EAAIU,QAAQ2E,WACzBhJ,GAAQyH,OAJG9D,EAAIlI,GAEFkI,EAAIsB,MAEQhM,MAAK6F,IAC5BsR,EAAKlM,UAAY,eAAerP,MAASiK,EAAEgH,YAC3CxN,GAAQ,EAAK,GAGhB,MAED2Q,YAAW,KACTmM,GAAgB9c,EAASqL,EAAI,GAC5B,GACL,CAKA,SAAS0R,GAAchR,GACrB,OAAO,IAAIhM,SAAQC,IACjB,MAAM4Q,EAAO7F,EAAMe,kBAAkBc,GAASb,GAC9C,IAAK6E,EACH,OAAO5Q,GAAQ,GAGjB8c,GAAgB9c,EAAS4Q,EAAK,GAElC,CAGA,SAASoM,GAAsBvO,EAAUgD,GAEvC,OArEF,SAAwBA,GAItB,MAAMX,EAAO+L,KACb,GAAsB,oBAAXrR,OAAwB,CACjC,GAAIwB,GACF,OAAO8D,EAGT,IAAKA,EAMH,OALA9D,IAAO,EACPnE,EAAMc,WAAWiD,IAASjM,MAAKpE,KAC7BmL,GAAUqD,EAAMC,eAAeQ,OAAOjP,KAC9B0gB,WAAWxL,EAAO,IAErBX,CAEV,CAEDpJ,GAAQuV,WAAWxL,EAErB,CA8CEV,CAAeU,GACR,IAAI1R,SAAQC,IACjB,MAAMgR,EAAe,GACrBvC,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAAK4f,GAAchR,GAAS,IAE3ChM,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAoBA,SAASkd,GAAgBpC,GAEvB,MAAO,CACL,CACE5d,KAAM,SACNuU,OAtBY,EAACA,EAAS,MAAQ,CAClC2C,MAAO,SACP+I,SAAU,EACVC,aAAa,EACbC,qBAAqB,EACrB5V,UAAW,CACT6V,MAAO,SAETC,MAAO,CACLC,WAAY,YAEdrV,SAAU,CACRsV,YAAa,OAEZhM,IAIYoJ,CAAUC,GAKrBja,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,iCAC1C,QAAKE,EAASxR,QAKP+f,GAAsBvO,EAAUpR,KAAKoU,QAAQ9Q,MAAK,IAEhDC,GAEV,GAGP,CC5HA,SAAS8c,GAAaC,EAAIC,EAAIC,GAC5B,IACIC,GAAY,EAALH,IAAa,EAAMC,GAAM,EAChCG,GAAY,GAALH,IAAa,EAAMC,GAAM,EAChCG,EAAU,GAALH,EACLI,EAAI,GAKR,OAJAA,GAAKC,GAAgB,GALZP,GAAM,GAMfM,GAAKC,GAAgB,GAALJ,GAChBG,GAAKC,GAAgB,GAALH,GAChBE,GAAKC,GAAgB,GAALF,EAElB,CAEA,SAASE,GAAWC,GAClB,OAAQ,GAAJA,EACKC,OAAOC,aAAa,GAAKF,GAG1B,IADRA,GAAK,IAEIC,OAAOC,aAAa,GAAKF,GAG1B,IADRA,GAAK,IAEIC,OAAOC,aAAa,GAAKF,GAGzB,IADTA,GAAK,IAEI,IAEA,GAALA,EACK,IAEF,GACT,CAEA,SAASG,GAAWC,GAClB,IAAIC,EAAID,EAAGnH,WAAW,GACtB,MAAW,MAAPmH,EAAmB,GACZ,MAAPA,EAAmB,GACd,GAALC,EACK,GAALA,EACK,GAALA,EACG,IADaA,EAAI,GADJA,EAAI,GADJA,EAAI,EAI1B,CAEA,SAASC,GAAc9R,GACrB,IAAI+R,EAAKJ,GAAW3R,EAAK,IACrBmR,EAAKQ,GAAW3R,EAAK,IACrBoR,EAAKO,GAAW3R,EAAK,IAKzB,MAAO,CAHG+R,GAAM,EAAOZ,GAAM,EAAK,GACvBA,GAAM,EAAK,IAAUC,GAAM,EAAK,GAChCA,GAAM,EAAK,IAAc,GAH3BO,GAAW3R,EAAK,IAK3B,CAcA,SAASgS,GAAOhS,GACd,OAnFF,SAAkBA,GAEhB,IADA,IAAIsR,EAAI,GACCjhB,EAAI,EAAO2P,EAAK1P,OAATD,EAAiBA,GAAK,EAElCihB,GADEjhB,EAAI,GAAK2P,EAAK1P,OACXygB,GAAa/Q,EAAKyK,WAAWpa,GAAI2P,EAAKyK,WAAWpa,EAAI,GAAI,GACrDA,EAAI,GAAK2P,EAAK1P,OAClBygB,GAAa/Q,EAAKyK,WAAWpa,GAAI,EAAG,GAEpC0gB,GAAa/Q,EAAKyK,WAAWpa,GAAI2P,EAAKyK,WAAWpa,EAAI,GAAI2P,EAAKyK,WAAWpa,EAAI,IAGtF,OAAOihB,CACT,CAuESW,CACLC,EACGC,eAAenS,EAAM,CACpBoS,MAAO,IAERC,SAAS,UAEhB,CAEA,SAASC,GAAOtS,GACd,MAAOkS,KAAKK,eAAeC,OAAOC,KAvBpC,SAAkBzS,GAChB,IAAIsR,EAAI,GACJjhB,EAAI,EACR,IAAKA,EAAI,EAAO2P,EAAK1P,OAATD,EAAiBA,GAAK,EAAG,CACnC,IAAIqiB,EAAIZ,GAAc9R,EAAKrG,UAAUtJ,EAAGA,EAAI,IAC5CihB,GAAQG,OAAOC,aAAagB,EAAE,IAC9BpB,GAAQG,OAAOC,aAAagB,EAAE,IAC9BpB,GAAQG,OAAOC,aAAagB,EAAE,GAC/B,CACD,OAAOpB,CACT,CAayCqB,CAAS3S,GAAO,UACzD,CClFA,MAAM4S,GAAgB,CACpBC,UAZF,SAAmB7S,GACjB,MAAM8S,EAAW,YACXC,EAAS,UAEf,OAAOC,GADG,GAAGF,KAAkB9S,EAAK1J,MAAMwc,GAAU,GAA5BrB,IAAgCnb,MAAMyc,GAAQ,IAAM,KAAKA,IAEnF,EAQEE,UANF,SAAmBjT,GACjB,OAAOkT,GAAiBlT,EAC1B,GCVMmT,GAAqB,MAE3B,IAAIC,GAAkB,EAmEtB,SAASC,GAAuBvR,EAAUgD,GAExC,OADAsO,GAAkBtR,EAASxR,OACpB,IAAI8C,SAAQC,IACjB,MAAMgR,EAAe,GACrBvC,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAvEnB,SAA+B4O,EAAS0F,GACtC,OAAO,IAAI1R,SAAQC,IACjB,MAAMsB,EAAWyK,EAAQC,QAAQC,KAC3BC,EAAU5K,EAAW6K,KAAKC,MAAM9K,GAAY,KAClD,IAAI+K,EAAe,GACnB,GAAIH,EAAS,CACX,GACgC,kBAAtBA,EAAQ3K,WAA2B2K,EAAQ3K,WACrB,iBAAtB2K,EAAQ3K,WAA8D,SAApC2K,EAAQ3K,UAAUuC,cAE5D,OAAO9D,GAAQ,GAGbkM,EAAQI,QAEY,WAAlBJ,EAAQI,MACVD,EAAe,iBACY,UAAlBH,EAAQI,QACjBD,EAAe,iBAGpB,CACD,MAAMjB,EAAOW,EAAQQ,YAAY3J,OAC3BrG,GACHwP,EAAQS,UAAUvP,OAAS,EAAI8O,EAAQS,UAAU,GAAK,KACrDT,EAAQL,WAAcW,EAAoB,IAAL,IACvCA,EACI4T,EAAcxO,EAAOwO,YAC3B,GAAoB,QAAhBA,EAyBG,CACL,MAAMlZ,EAAWyE,QAAUA,OAAO1E,SAASC,SACrCmZ,GAAwB,UAAbnZ,GAAqC,WAAbA,EAAwB,KAAO,YAAc0K,EAAO0O,WACvFC,EAAiBH,IAAgBH,GAAqB,IAAIG,EAAgB,GAC1EI,EAAMd,GAAcC,UAAUpU,GAGpC,OADAW,EAAQ2E,WAAW9E,UAAY,eAAerP,gBAD/B2jB,KAAWD,KAAeI,IAAMD,yBAExCpgB,GAAQ,EAChB,CAjC0B,CACzB,MAAMmD,EAAK,YAAcgC,KAAKsH,MAAQ,IAAM1G,KAAKC,MAAsB,IAAhBD,KAAK2G,UAC5D,GAAgC,mBAArB+E,EAAO6O,WAA4B7O,EAAO6O,UACnD7O,EAAO6O,UAAUnd,EAAI5G,EAAM6O,EAAM2U,IAAiBpf,MAAK4f,IACrDxU,EAAQ2E,WAAW9E,UAAY,YAAYzI,aAAc5G,MAASgkB,UAClEvgB,GAAQ,EAAK,SAEV,GAAsB,oBAAXwL,QAA0BA,OAAOgV,OAAShV,OAAO4F,cAAe,CAChF,MAAMrK,EAAWyE,QAAUA,OAAO1E,SAASC,SACrCmZ,GAAwB,UAAbnZ,GAAqC,WAAbA,EAAwB,KAAO,YAAc0K,EAAO0O,WACvFC,EAAiBH,IAAgBH,GAAqB,IAAIG,EAAgB,GAC1EI,EAAMd,GAAcC,UAAUpU,GAEpCI,OACGgV,MAFS,GAAGN,KAAWD,KAAeI,IAAMD,KAG5Czf,MAAKwP,IACJ,GAAIA,EAASsQ,GACX,OAAOtQ,EAASzQ,MACjB,IAEFiB,MAAK4f,IACJxU,EAAQ2E,WAAW9E,UAAY,YAAYzI,aAAc5G,MAASgkB,UAClEvgB,GAAQ,EAAK,GAElB,CACP,CAQK,GAEL,CAQwB0gB,CAAsB3U,EAAS0F,GAAQ,IAE3D1R,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAUA,SAAS2gB,GAAiB7F,GAGxB,MAAO,CACL,CACE5d,KAAM,SACNuU,OAbY,EAACA,EAAS,MAAQ,CAClC0O,WArFwB,4BAsFxBF,YAAaH,GACbQ,UAAW,QACR7O,IAIYoJ,CAAUC,GAMrBja,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,mCAC1C,QAAKE,EAASxR,QAKP+iB,GAAuBvR,EAAUpR,KAAKoU,QAAQ9Q,MAAK,IAEjDC,GAEV,GAGP,CCxHA,MAAMgM,GAAU,WACVC,GAAa,cAEnB,GAAsB,oBAAXrB,OACT,MAAM3O,MAAM,4EAOd,IAAIiL,IAAW,EACf,SAAS8Y,KACP,OAAO9Y,EACT,CAEA,ICFI+Y,GDEA7T,IAAO,EA2BX,SAAS8T,GAAiB9gB,EAASqL,GACjC,GAAIuV,KAAe,CACjB,MAAMzd,EAAKkI,EAAIlI,GACT5G,EAAO8O,EAAIK,UAEX+E,EAAUpF,EAAIoF,QACdsQ,EAAkBvV,OAAOwV,KAFlB3V,EAAIsB,MAEyBzH,SACpC9E,EAAMiL,EAAIU,QAAQ8F,cAKxB,OAJAxG,EAAIU,QAAQ2E,WAAW9E,UAAY6E,EAC/B,YAAYtN,aAAc5G,6BAAgCkU,YAC1D,YAAYtN,aAAc5G,YAC9BwkB,EAAgBE,MAAM7gB,EAAI4J,eAAe7G,IAClCnD,GAAQ,EAChB,CAED2Q,YAAW,KACTmQ,GAAiB9gB,EAASqL,EAAI,GAC7B,GACL,CAKA,SAAS6V,GAAenV,GACtB,OAAO,IAAIhM,SAAQC,IACjB,MAAM4Q,EAAO7F,EAAMe,kBAAkBc,GAASb,GAC9C,IAAK6E,EACH,OAAO5Q,GAAQ,GAIjB4Q,EAAKH,QAAU5H,EAAMM,OAAO0D,IAC5BiU,GAAiB9gB,EAAS4Q,EAAK,GAEnC,CAGA,SAASuQ,GAAuB1S,GAE9B,OAjEF,WACE,MAAMqC,EAAO8P,KACb,GAAsB,oBAAXpV,OAAwB,CACjC,GAAIwB,GACF,OAAO8D,EAGJA,IACH9D,IAAO,EACPnE,EAAM4B,eAAeoC,IACrBhE,EAAMc,WAAWiD,IAASjM,MAAK,KAC7BmH,IAAW,CAAI,IAGpB,CAEH,CAgDEiJ,GACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrBvC,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAAK+jB,GAAenV,GAAS,IAE5ChM,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAEA,SAASohB,KACP,MAAO,CACL,CACElkB,KAAM,SACN2D,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,mCAC1C,QAAKE,EAASxR,SAIdI,KAAKoU,OAAS,CACZhB,QAAS5H,EAAMM,OAAO0D,KAGjBsU,GAAuB1S,GAAU9N,MAAK,IAEpCC,IAEV,GAGP,CCvHA,GAAsB,oBAAX4K,OACT,MAAM3O,MAAM,4EAMd,QAAuB,IAAZ2K,GACT,IAAIA,GAAUgE,OAAOhE,cAAWsF,EAOlC,GAAsB,oBAAXtB,QACLA,OAAO6V,UACTR,GAAUrV,OAAO6V,QACb7V,OAAO6V,QAAgB,QACzB,IAAIlZ,GAAWqD,OAAO6V,QAK5B,MAAMC,GAAS,CAAC,SAAU,QAC1B,QAAwB,IAAbnZ,IAA8C,oBAAXqD,OACxCrD,GAAWqD,OAAO+V,WAGxB,SAASC,KACP,QAASha,EACX,CAEA,SAASia,KACP,OAAOD,QAAkBrZ,EAC3B,CAMA,IAAI6E,IAAO,EACX,MAAMH,GAAa,cA+EnB,SAAS6U,GAAe3V,GACtB,MAAMzK,EAAWyK,EAAQC,QAAQC,KAC3BC,EAAU5K,EAAW6K,KAAKC,MAAM9K,GAAY,KAClD,IAAI+K,EAAe,GACnB,GAAIH,EAAS,CACX,GACgC,kBAAtBA,EAAQ3K,WAA2B2K,EAAQ3K,WACrB,iBAAtB2K,EAAQ3K,WAA8D,SAApC2K,EAAQ3K,UAAUuC,cAE5D,OAGEoI,EAAQI,QAEY,WAAlBJ,EAAQI,MACVD,EAAe,iBACY,UAAlBH,EAAQI,QACjBD,EAAe,iBAGpB,CACD,MAAMyE,EAnGR,WACE,MAAMA,EAAO2Q,KACb,GAAsB,oBAAXjW,OAAwB,CACjC,GAAIwB,GACF,OAAO8D,EAGJA,IACH9D,IAAO,EACPnE,EAAM4B,eAAeoC,IACrBhE,EACGc,WAAW,WACXhJ,MAAK,IACC6gB,KAIE,UAHE3Y,EAAMc,WAAW,aAK3BhJ,MAAMpE,IACLiL,GAAUuD,EAAMC,eAAeQ,OAAOjP,IAC/BsM,EAAMc,WAAW,WAEzBhJ,MAAK,IACGkI,EAAMc,WAAW,gBAEzBhJ,MAAK,MAECkgB,IAAWrV,OAAgB,UAC9BqV,GAAUrV,OAAgB,SAErB3C,EAAMc,WAAW,eAEzBhJ,MAAK,KACJwH,GAAWqD,OAAgB,QAC3BA,OAAO+V,WAAapZ,GAEhB0Y,KACFrV,OAAgB,QAAIqV,GACrB,IAGR,CACD,OAAO/P,CACT,CAuDeC,GACPN,EAAU5H,EAAMM,OAAO0D,IACvBzB,EAAOW,EAAQQ,YAAY3J,OAC3BrG,EAAO,eAAkB8P,EAAoB,IAAL,IAAYA,EACpDlJ,EAAK,YAAcgC,KAAKsH,MAAQ,IAAM1G,KAAKC,MAAsB,IAAhBD,KAAK2G,UAC5DX,EAAQ5I,GAAKA,EACTsN,IACF1E,EAAQL,UAAYK,EAAQL,WAAcK,EAAQL,UAAiB,IAAL,IAAY,eAC1EK,EAAQC,QAAQtB,IAAM+F,IAEnBK,GAA0B,oBAAXtF,QAA0BA,OAAO4F,cACnDrR,QAAQC,QAAQmD,GAAIxC,MAAKghB,IAEvBnW,OAAO4F,cACL,IAAIwQ,YAAY,WAAY,CAC1BrQ,OAAQ,CACNpO,GAAIwe,EACJjW,UAAWnP,EACXoQ,KAAMvB,EACN9J,SAAUA,EACVmP,QAASA,KAGd,IAGmB,oBAAXjF,QAA0BA,OAAO4F,eAE1C5F,OAAO4F,cACL,IAAIwQ,YAAY,WAAY,CAC1BrQ,OAAQ,CACNpO,GAAIA,EACJuI,UAAWnP,EACXoQ,KAAMvB,EACN9J,SAAUA,EACVmP,QAASA,KAMrB,CAaA,SAASoR,GAAiB9V,GACxB,GAAI0V,KAAe,CACjB,MAAMte,EAAK4I,EAAQ5I,GACb5G,EAAOwP,EAAQL,UACfiB,EAAOZ,EAAQY,KACf8D,EAAU1E,EAAQ0E,QACxB,IAAI2D,EAAQ,OACZ,MAAM9S,EAAWyK,EAAQzK,SACzB,GAAIA,EAAU,CACZ,MAAMV,EAAMuL,KAAKC,MAAM9K,GACnBV,GAAOA,EAAIwT,QAAuC,GAA9BkN,GAAOpO,QAAQtS,EAAIwT,SACzCA,EAAQxT,EAAIwT,MAEf,CACD,IAAI3I,EAAKD,OAAO3E,SAASmD,eAAe7G,GACxC,GAAIsI,EAAI,CACNA,EAAGiF,WAAW9E,UAAY6E,EACtB,YAAYtN,aAAc5G,6BAAgCkU,YAC1D,YAAYtN,aAAc5G,YAC9BkP,EAAKD,OAAO3E,SAASmD,eAAe7G,GAIpC,YAHUgF,GAASiE,MAAMO,GAEvBmV,QAAQrW,GAAUtI,EADJ,CAAEiR,MAAOA,GAG1B,CACF,CACDzD,YAAW,KACTkR,GAAiB9V,EAAQ,GACxB,GACL,CAEA,SAASgW,KACP,IAAI5Q,GAAW,EACf,MAAMmB,EAAS,IAAIjS,UAEnB,MAAO,CACL,CACEnD,KAAM,SACN2D,OAAQ,SAASZ,GAEf,MAAMG,EAAMkS,EAAOhS,gBAAgBL,EAAM,aACnCM,OAA8B,IAAbH,EAAII,KAAuBJ,EAAII,KAAOJ,EAGvDqO,EAAWlO,EAAQgO,iBAAiB,mCAkB1C,OAjBIE,EAASxR,SACNkU,GACmB,oBAAX3F,QAA0BA,OAAO4F,gBAC1CD,GAAW,EAEX3F,OAAO6F,iBAAiB,YAAYC,IAC9BA,EAAMC,QACRsQ,GAAiBvQ,EAAMC,OACxB,KAKPlU,KAAKoU,OAAS,CACZhB,QAAS5H,EAAMM,OAAO0D,MArElC,SAAgC4B,GAC9B,QAAKA,EAASxR,SAGdwR,EAASrR,SAAQ2O,IACf2V,GAAe3V,EAAQ,KAElB,EACT,CAgEaiW,CAAuBvT,GAIrBlO,EAAQQ,UAHNd,CAIV,GAGP,CC1QA,GAAsB,oBAAXuL,OACT,MAAM3O,MAAM,4EAOd,QAAwB,IAAbwL,GACT,IAAIA,GAAWmD,OAAOnD,eAAYyE,EAGpC,IAAImV,GAAU,EACVC,GAAU,EACd,SAASC,KACP,QAAS9Z,EACX,CAEA,IAAI2E,IAAO,EAgCX,SAASoV,GAAiBpiB,EAASqL,GACjC,GAAI8W,KAAe,CACjB,MAAME,EAAQhX,EAAIgX,MACZlf,EAAKkI,EAAIlI,GAETwJ,EAAOtB,EAAIsB,KACjB,IAAIZ,EAAUV,EAAIU,QAalB,OAXAA,EAAQ2E,WAAW9E,UAAYb,EAAMQ,mBADzBQ,EAAQ8F,cACyC1O,EAAKkf,EAJrDhX,EAAIK,WAI8DD,IAC7E,MAAM7K,EAAM4K,OAAOwV,KAAK,IAAIrU,MAC5BtE,GAASia,eAAeD,EAAOzhB,EAAKuC,GAEpC,MAAMof,EAAO1b,SAASmD,eAAe,oBAAsBqY,GAC3D,GAAI5W,GAAM8W,EACR,KAAOA,EAAK1G,WAAW5e,QACrBwO,EAAGpB,YAAYkY,EAAK/X,YAAY+X,EAAK1G,WAAW,IAEnD,IAEI7b,GAAQ,EAChB,CAED2Q,YAAW,KACTyR,GAAiBpiB,EAASqL,EAAI,GAC7B,GACL,CAIA,SAASmX,GAAezW,GACtB,OAAO,IAAIhM,SAAQC,IACjB,MAAMsB,EAAWyK,EAAQC,QAAQC,KAC3BC,EAAU5K,EAAW6K,KAAKC,MAAM9K,GAAY,KAClD,IAAI+K,EAAe,GACnB,GAAIH,EAAS,CACX,GACgC,kBAAtBA,EAAQ3K,WAA2B2K,EAAQ3K,WACrB,iBAAtB2K,EAAQ3K,WAA8D,SAApC2K,EAAQ3K,UAAUuC,cAE5D,OAGEoI,EAAQI,QAEY,WAAlBJ,EAAQI,MACVD,EAAe,iBACY,UAAlBH,EAAQI,QACjBD,EAAe,iBAGpB,CACD,MAAMjB,EAAOW,EAAQQ,YAAY3J,OAC3BrG,GACHwP,EAAQS,UAAUvP,OAAS,EAAI8O,EAAQS,UAAU,GAAK,KACrDT,EAAQL,WAAcW,EAAoB,IAAL,IACvCA,EACIgW,EAAQH,KACZA,KAGAD,GACGA,KACHC,GAAU,GAIZ,MAAM/e,EAAK,oBACX4I,EAAQ5I,GAAKA,EAAKkf,EAQlBD,GAAiBpiB,EAPL,CACV+L,QAASA,EACTsW,MAAOA,EACPlf,GAAIA,EACJuI,UAAWnP,EACXoQ,KAAMvB,GAEsB,GAclC,CAGA,SAASqX,GAAuBhU,EAAUiU,GAExC,OA7HF,SAAwBA,GACtB,MAAM5R,EAAOqR,KACTnV,IAIC8D,IACH9D,IAAO,EACe,oBAAXxB,QACT3C,EACGc,WAAW,CAAErB,aAAcoa,IAC3B/hB,MAAK,IACGkI,EAAMc,WAAW,cAEzBhJ,MAAKpE,IACJ8L,GAAW0C,EAAMC,eAAeQ,OAAOjP,GAAM,IAKvD,CAwGEwU,CAAe2R,GACR,IAAI3iB,SAAQC,IACjB,MAAMgR,EAAe,GACrBiR,GAAUxT,EAASxR,OACnBwR,EAASrR,SAAQ2O,IACfiF,EAAa7T,KAAKqlB,GAAezW,GAAS,IAE5ChM,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAQA,SAAS2iB,GAAiBC,GAGxB,MAAO,CACL,CACE1lB,KAAM,SACNuU,OAXY,EAACA,EAAS,MAAQ,CAClCiR,KAAM,aACHjR,IAIYoJ,CAAU+H,GAMrB/hB,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAGT,MAAMkO,EAAWlO,EAAQgO,iBAAiB,mCAC1C,QAAKE,EAASxR,SAId4lB,EAAI,mCACGJ,GAAuBhU,EAAUpR,KAAKoU,OAAOiR,MAAM/hB,MAAK,KAC7DkiB,EAAI,iCACGjiB,KAEV,GAGP,CC5LA,SAASkiB,KACP,MAAO,CACL,CACE5lB,KAAM,OACN2D,OAAQ,CAACnB,EAAMS,IACbT,EAAKyB,QAAQ,iDAAiD,CAACoB,EAAKhG,EAAMwmB,EAAYC,EAAGC,IAEhF,sCAAsC1mB,yBAA4BA,YAAeA,gBADxE4D,EAAUN,SAASkjB,EAAW5hB,QAAYsF,OAAO,IAAIwc,EAAW,MAAO,gBAI7F,CACE/lB,KAAM,OACN2D,OAAQnB,GACNA,EAAKyB,QACH,yCACA,CAACoB,EAAKhG,EAAMymB,EAAGpjB,IACb,wCAAwCrD,yBAA4BA,YAAeA,iBAAoBqD,eAG/G,CACE1C,KAAM,OACN2D,OAAQnB,GACNA,EAAKyB,QAAQ,oBAAoB,CAACoB,EAAKhG,IAAS,sBAAsBA,YAAeA,kBAG7F,CCzBA,SAAS2mB,KACP,MAAO,CACL,CACEhmB,KAAM,OACN2D,OAAQ,CAACnB,EAAMS,IACbT,EAAKyB,QACH,0GACA,SAAUC,EAAYC,EAAO8hB,EAAWC,EAAOxjB,GAC7C,GAAIujB,EAAW,CACb,IAAIE,EAAUF,EAAUlgB,MAAM,KAC1BogB,EAAQpmB,OAAS,EACnBomB,EAAQjmB,SAAQ,SAAUb,EAAM8lB,EAAO/K,GACjC+K,EAAQ,IACV/K,EAAI+K,GAAS/K,EAAI+K,EAAQ,GAAK,IAAM9lB,EAExD,IAEgB8mB,EAAQC,QAAQ,aAElBH,EAAYE,EAAQ3J,KAAK,IAC1B,CASD,OARI9Z,IACFA,EAAUO,EAAUN,SAASD,IAOxB,kCAAkCujB,MAJvCC,EADEA,EACM,8BAA8BA,QAE9B,KAEqDxjB,SAChE,KAIX,CClCA,GAAsB,oBAAX4L,OACT,MAAM3O,MAAM,6EAOd,QAAuB,IAAZ2K,GACT,IAAIA,GAAUgE,OAAOhE,cAAWsF,EAGlC,QAAyB,IAAdrF,GACT,IAAIA,GAAY+D,OAAO/D,gBAAaqF,EAOtC,SAASyW,KACP,aAA0B,IAAZ/b,KAA2BA,SAAgC,IAAdC,KAA6BA,GAC1F,CAMA,IAAIuF,IAAO,EACX,SAAS+D,KACP,MAAMD,EAAOyS,KACb,GAAsB,oBAAX/X,OAAwB,CACjC,GAAIwB,GACF,OAAO8D,EAGT,IAAKA,EAAM,CAET,GADA9D,IAAO,GApBFxF,GA+BH,OATAqB,EACGc,WAAW,WACXhJ,MAAKpE,IACJiL,GAAUuD,EAAMC,eAAeQ,OAAOjP,IAC/BsM,EAAMc,WAAW,gBAEzBhJ,MAAKpE,IACJkL,GAAYsD,EAAMC,eAAeQ,OAAOjP,GAAM,IAE3CuU,EAGTjI,EACCc,WAAW,aACXhJ,MAAKpE,IACJkL,GAAYsD,EAAMC,eAAeQ,OAAOjP,GAAM,GAEjD,CACF,CACD,OAAOuU,CACT,CAyBA,SAAS0S,GAAkBxjB,EAASqL,GAClC,GAAIkY,KAAgB,CAClB,MAEM5W,EAAOtB,EAAIsB,KACXpO,EAAU8M,EAAI9M,QAMpB,OAJA8M,EAAIU,QAAQ2E,WAAW9E,UAAYb,EAAMQ,mBAD7BF,EAAIU,QAAQ8F,cAJbxG,EAAIlI,GACFkI,EAAIK,WAI0DD,IACzEhE,GAAU2E,MAAMO,GAAMmV,QAAQrW,EAAIlN,EAAQ,SAE5CyB,GAAQ,EAET,CAED2Q,YAAW,KACT6S,GAAkBxjB,EAASqL,EAAI,GAC9B,GACL,CAKA,SAASoY,GAAgB1X,EAASxN,GAChC,OAAO,IAAIwB,SAAQC,IACjB,MAAM4Q,EAAO7F,EAAMe,kBAAkB,YAAaC,GAClD,IAAK6E,EACH,OAAO5Q,GAAQ,GAGjB4Q,EAAKrS,QAAUA,EACfilB,GAAkBxjB,EAAS4Q,EAAK,GAEpC,CAsGA,SAAS8S,GAAkBzP,GACzB,MAAM1V,EAlDW,EAAC0V,EAAc,MAAQ,CACxC,aAAc,EACd0P,SAAU,EACV,cAAe,GACf,cAAe,GACf,YAAa,GACbC,KAAM,SACN,cAAe,YACf,cAAe,SACf,aAAc,QACd,aAAc,QACd,gBAAiB,QACjBC,KAAM,QACN,WAAY,MACZ,UAAW,KACX,YAAa,QACbC,MAAO,EACPC,QAAS,CACPC,MAAO,CACL,aAAc,MACd,gBAAiB,QACjBH,KAAM,UAERriB,IAAK,CACHyiB,MAAO,gBAGXC,UAAW,CACTC,KAAM,CAAEN,KAAM,UAAW,YAAa,IACtCO,QAAS,CAAEP,KAAM,SAAU,aAAc,MAAO,cAAe,QAC/DQ,OAAQ,CAAER,KAAM,WAChBS,QAAS,CAAET,KAAM,QACjBU,QAAS,CAAEV,KAAM,WACjBW,SAAU,CACRX,KAAM,UACN,YAAa,GACb,WAAY,WACZ,UAAW,OAEbY,SAAU,CACRZ,KAAM,UACN,YAAa,GACb,WAAY,MACZ,UAAW,gBAGZ5P,IAIa3V,CAAW2V,GAE3B,MAAO,CACL,CACE/W,KAAM,SACNuU,OAAQlT,EACRsC,OAAQ,SAASD,GACf,MAAML,EAAUK,EAAIL,QACpB,IAAKA,EACH,OAAO,EAIT,MAAMmkB,EAAoBnkB,EAAQgO,iBAAiB,qCAC7CoW,EAAepkB,EAAQgO,iBAAiB,2BAC9C,SAAKmW,EAAkBznB,SAAW0nB,EAAa1nB,SAnHvD,SAAiCynB,EAAmBC,EAAcpmB,GAEhE,OADAwS,KACO,IAAIhR,SAAQC,IACjB,MAAMgR,EAAe,GACrB0T,EAAkBtnB,SAAQ2O,IACxBiF,EAAa7T,KAAKsmB,GAAgB1X,EAASxN,GAAS,IAEtDomB,EAAavnB,SAAQ2O,IACnBiF,EAAa7T,KAAKsmB,GAAgB1X,EAASxN,GAAS,IAEtDwB,QAAQkR,IAAID,GAAcrQ,MAAK,KAC7BX,GAAQ,EAAK,GACb,GAEN,CAyGe4kB,CAAwBF,EAAmBC,EAActnB,KAAKoU,QAAQ9Q,MAAK,IAEzEC,GAEV,GAGP,CC9NA,MAAMtC,GAAa,CAACC,EAAU,MACrB,CACLtC,OAAQ,YACLsC,IAsDDoL,GAAa,CAACxG,EAAIiI,EAAMW,KAC5B,IAAKX,GAA4B,oBAAbvE,SAClB,OAAO,EAOT,GAJKkF,IACHA,EAAUlF,SAASmD,eAAe7G,IAGhC4I,EAAS,CACX,MACM8Y,EAAW,UAAU1hB,EAC3B,IAAI4G,EAASlD,SAAS4G,cAAc,IAFxB1B,EAAQ5I,SAE8B0hB,KAC9C9a,EACFlD,SAASrG,KAAKgK,YAAYT,IAE1BA,EAASlD,SAASsD,cAAc,UAChCJ,EAAO5G,GAAK0hB,GAEd9a,EAAO7M,KAAO,kBACd6M,EAAOrK,KAAO0L,EACdW,EAAQ1B,YAAYN,EACrB,CACD,OAAO,GAIH+a,GAAkB,CAAC,SAAU,QAAS,UAAW,WAAY,SAC7DC,GAAgB,CAAC,UAAW,SAAU,OAAQ,WAC9CC,GAAa,CAAC,QAAS,UAAW,SAAU,MAAO,QACnDC,GAAgB,CAAC,SAAU,OAC3BC,GAAkB,CAAC,MAAO,MAAO,OAQjCC,GAAY,CAChBppB,SAAUA,EACVoE,UAAW,KACXrB,eAAgB,CACd/C,SAAUuC,KACV8mB,SAAU,CAAEnF,YAAa,OACzBvY,QAAS,CAAE0M,MAAO,WAClBzM,MAAO,CAAE,EACTe,KAAM,CAAE0L,MAAO,QAEjBiR,kBAAmB,CAAE,EACrBC,uBAAwB,CAAE,EAC1BC,qBAAsB,SAASnlB,GAC7B,MAAO,EACR,EACDolB,mBAAoB,WACbnoB,KAAKyB,iBACRzB,KAAKyB,eAAiB,CACpB/C,SAAU,CAAE,EACZqpB,SAAU,CAAE,EACZ1d,QAAS,CAAE,EACXC,MAAO,CAAE,EACTe,KAAM,CAAE,GAGb,EACD/J,UAAW,SAASpC,GAClBc,KAAKtB,SAAS4C,UAAUpC,GACpBc,KAAK8C,WACP9C,KAAK8C,UAAUxB,UAAUpC,EAE5B,EACDkpB,WAAY,SAASlnB,GACnB,IAAK,MAAMyK,KAAOzK,EACJ,WAARyK,IACF3L,KAAKtB,SAAS2pB,UAAU1c,EAAKzK,EAAQyK,IACjC3L,KAAK8C,WACP9C,KAAK8C,UAAUulB,UAAU1c,EAAKzK,EAAQyK,IAI7C,EACD2c,aAAc,SAASppB,EAAMgB,GAE3B,GADAF,KAAK6B,gBAAgB3C,GACD,iBAATA,EACT,IACER,EAASwB,UAAUhB,EAAMgB,GACrBF,KAAK8C,WACP9C,KAAK8C,UAAUwlB,aAAappB,EAE/B,CAAC,MAAOqpB,GAER,CAEJ,EACD1mB,gBAAiB,SAAS3C,GACxB,GAAoB,iBAATA,EAAX,CACA,GAAIc,KAAK8C,UAAW,CAClB,IAAI7D,EAAM,KACV,IACEA,EAAMP,EAASwB,UAAUhB,EAC1B,CAAC,MAAOqpB,GAER,CACD,IAAKtpB,EAAK,OACVe,KAAK8C,UAAUjB,gBAAgB5C,EAChC,CACDP,EAASmD,gBAAgB3C,EAXY,CAYtC,EACDe,kBAAmB,SAASf,EAAMgB,GAEhC,GADAF,KAAKG,qBAAqBjB,GACN,iBAATA,EACT,IACER,EAASY,eAAeJ,EAAMgB,GAC1BF,KAAK8C,WACP9C,KAAK8C,UAAU7C,kBAAkBf,EAEpC,CAAC,MAAOqpB,GAER,CAEJ,EACDpoB,qBAAsB,SAASjB,GAC7B,GAAoB,iBAATA,EAAX,CACA,GAAIc,KAAK8C,UAAW,CAClB,IAAI7D,EAAM,KACV,IACEA,EAAMP,EAASY,eAAeJ,EAC/B,CAAC,MAAOqpB,GAER,CACD,IAAKtpB,EAAK,OACVe,KAAK8C,UAAU3C,qBAAqBlB,EACrC,CACDP,EAASyB,qBAAqBjB,EAXO,CAYtC,EACDgN,OAAQ,SAASsc,EAAS7e,EAAWC,GACZ,iBAAZ4e,GAAwBA,GACjChd,EAAMU,OAAOsc,EAAS7e,EAAWC,EAEpC,EACD6e,kBAAmB,SAASvpB,GAC1Bc,KAAKmoB,qBACDjpB,KACqC,IAAnCuoB,GAAgB5R,QAAQ3W,KAC1BA,EAAO,UAETc,KAAKyB,eAAe/C,SAASE,OAASM,EACtCc,KAAKsB,UAAUpC,GAElB,EACDwpB,mBAAoB,SAASxnB,GAM3B,OALAlB,KAAKmoB,qBACkB,iBAAZjnB,GAAyBA,IAASA,EAAU,CAAA,GACvDlB,KAAKyB,eAAe/C,SAAWuJ,OAAOC,OAAOlI,KAAKyB,eAAe/C,UAAY,GAAIwC,GACjFlB,KAAKyoB,kBAAkBzoB,KAAKyB,eAAe/C,SAASE,QACpDoB,KAAKooB,WAAWpoB,KAAKyB,eAAe/C,UAC7BsB,KAAKyB,eAAe/C,QAC5B,EACDiqB,mBAAoB,SAASznB,GAC3BlB,KAAKmoB,qBACkB,iBAAZjnB,GAAyBA,IAASA,EAAU,CAAA,GACvDlB,KAAKyB,eAAesmB,SAAW9f,OAAOC,OAAOlI,KAAKyB,eAAesmB,UAAY,GAAI7mB,GACjF,MAAM0hB,EAAc5iB,KAAKyB,eAAesmB,SAASnF,YAOjD,OANIA,IAAyD,IAA1CiF,GAAgBhS,QAAQ+M,KACzC5iB,KAAKyB,eAAesmB,SAASnF,YAAc,OAEzC5iB,KAAK8C,WACP9C,KAAKC,kBAAkB,oBAAqBqjB,GAAiBtjB,KAAKyB,eAAesmB,WAE5E/nB,KAAKyB,eAAesmB,QAC5B,EACDa,kBAAmB,SAAS1nB,GAC1BlB,KAAKmoB,qBACkB,iBAAZjnB,GAAyBA,IAASA,EAAU,CAAA,GACvDlB,KAAKyB,eAAe4I,QAAUpC,OAAOC,OAAOlI,KAAKyB,eAAe4I,SAAW,GAAInJ,GAC/E,MAAM6V,EAAQ/W,KAAKyB,eAAe4I,QAAQ0M,MAO1C,OANIA,IAA2C,IAAlC2Q,GAAc7R,QAAQkB,KACjC/W,KAAKyB,eAAe4I,QAAQ0M,MAAQ,WAElC/W,KAAK8C,WACP9C,KAAKC,kBAAkB,mBAAoB4f,GAAgB7f,KAAKyB,eAAe4I,UAE1ErK,KAAKyB,eAAe4I,OAC5B,EACDwe,gBAAiB,SAAS3nB,GAOxB,OANAlB,KAAKmoB,qBACkB,iBAAZjnB,GAAyBA,IAASA,EAAU,CAAA,GACvDlB,KAAKyB,eAAe6I,MAAQrC,OAAOC,OAAOlI,KAAKyB,eAAe6I,OAAS,GAAIpJ,GACvElB,KAAK8C,WACP9C,KAAKC,kBAAkB,iBAAkBme,GAAcpe,KAAKyB,eAAe6I,QAEtEtK,KAAKyB,eAAe6I,KAC5B,EACDwe,eAAgB,SAAS5nB,GACvBlB,KAAKmoB,qBACkB,iBAAZjnB,GAAyBA,IAASA,EAAU,CAAA,GACvDlB,KAAKyB,eAAe4J,KAAOpD,OAAOC,OAAOlI,KAAKyB,eAAe4J,MAAQ,GAAInK,GACzE,MAAM6V,EAAQ/W,KAAKyB,eAAe4J,KAAK0L,MACnCA,IAAwC,IAA/B4Q,GAAW9R,QAAQkB,KAC9B/W,KAAKyB,eAAe4J,KAAK0L,MAAQ,OAEnC,MAAME,EAAWjX,KAAKyB,eAAe4J,KAAK4L,SAO1C,OANIA,IAAiD,IAArC2Q,GAAc/R,QAAQoB,KACpCjX,KAAKyB,eAAe4J,KAAK4L,SAAW,UAElCjX,KAAK8C,WACP9C,KAAKC,kBAAkB,gBAAiB0W,EAAa3W,KAAKyB,eAAe4J,OAEpErL,KAAKyB,eAAe4J,IAC5B,EACDwH,KAAM,SAASkW,GACb,GAAK/oB,KAAK8C,UAWH,CACL,IAAIhC,EAAe,CAAA,EAMnB,GAJEA,EADmB,kBAAVioB,GAAuBA,EACjB,CAAEpnB,QAAQ,EAAMzB,WAAW,GAE3B6oB,EAEW,iBAAjBjoB,EAA2B,CACpC,GAAIA,EAAaM,eAAe,WAAaN,EAAaa,OAAQ,CAChE,MACMT,EAAUD,GADQjB,KAAKyB,gBAAiBzB,KAAKyB,eAAe/C,UAAiB,IAEnFsB,KAAKooB,WAAWlnB,EACjB,CACGJ,EAAaM,eAAe,cAAgBN,EAAaZ,YAC3DF,KAAKC,kBAAkB,oBAAqBqjB,GAAiBtjB,KAAKyB,eAAesmB,WACjF/nB,KAAKC,kBAAkB,mBAAoB4f,GAAgB7f,KAAKyB,eAAe4I,UAC/ErK,KAAKC,kBAAkB,gBAAiB0W,EAAa3W,KAAKyB,eAAe4J,OAE5E,CACF,KA9BoB,CACnB,MACMnK,EAAUD,GADQjB,KAAKyB,gBAAiBzB,KAAKyB,eAAe/C,UAAiB,IAE7EsqB,EA1OU,EAAC9nB,EAAS8nB,EAAa,MAC3C,MAAMC,EAAmB,CACvB,eAAgBjU,EAChB,iBAAkBkC,EAClB,qBAAsBuO,GACtB,qBAAsBI,GACtB,oBAAqBnB,MAClBsE,GAGL,IAAIE,EAAW,GACf,IAAK,IAAInL,KAAQkL,EACXA,EAAiB7nB,eAAe2c,KAClCrf,EAASwB,UAAU6d,EAAMkL,EAAiBlL,IAC1CmL,EAASppB,KAAKie,IAGlB,OAAOmL,CAAQ,EAyNQC,CAAcnpB,EAAqBA,KAAKgoB,mBACrDnpB,EAzQe,EAACqC,EAAS8nB,EAAa,MAChD,MAAMI,EAAiBloB,GAAUA,EAAQmJ,SAAgB,CAAA,EAEnDgf,EAAenoB,GAAUA,EAAQoJ,OAAc,CAAA,EAC/Cgf,EAAcpoB,GAAUA,EAAQmK,MAAa,CAAA,EAE7CxM,EAAkB,CACtB,oBAAqBykB,GALCpiB,GAAUA,EAAQ6mB,UAAiB,CAAA,GAMzD,mBAAoBlI,GAAgBuJ,GACpC,iBAAkBhL,GAAciL,GAChC,qBAAsBhD,GACtB,eAAgBnQ,EAChB,gBAAiBS,EAAa2S,GAC9B,oBAAqBhE,GACrB,oBAAqBvB,GACrB,eAAgBlQ,EAChB,mBAAoBuL,MACjB4J,GAGL,IAAIE,EAAW,GACf,IAAK,IAAInL,KAAQlf,EACXA,EAAgBuC,eAAe2c,KACjCrf,EAASY,eAAeye,EAAMlf,EAAgBkf,IAC9CmL,EAASppB,KAAKie,IAGlB,OAAOmL,CAAQ,EA8Oa3oB,CAAmBP,KAAKyB,eAAgBzB,KAAKioB,wBACrEjoB,KAAKsB,UAAUJ,EAAQtC,QAEvBoB,KAAK8C,UAAY,IAAIpE,EAASgC,UAAU,CACtCsoB,WAAYA,IACXpoB,kBAAkBM,EAAQtC,OAAQC,GACrCmB,KAAKooB,WAAWlnB,EACtB,CAoBI,OAAOlB,IACR,EACDwC,SAAU,SAASO,EAAKT,GACtB,IAAIC,EAAU,GACd,GAAmB,iBAARQ,GACT,GAA2B,iBAAhBA,EAAIR,QACb,GAAwB,iBAAbQ,EAAIlD,KACb,GACO,QADCkD,EAAIlD,KAER0C,EAAUvC,KAAKupB,QAAQxmB,EAAIR,cAG3BA,EAAUvC,KAAKkoB,qBAAqBnlB,IAAQA,EAAIR,aAIpDA,EAAUQ,EAAIR,aAIlBA,EAAUQ,EAGZ,GAAI/C,KAAK8C,WAAaP,EAAS,CAC7B,SAASinB,EAAYtmB,EAASmL,EAAWkB,GAEvC,MAAMb,EAAUxL,EAAQkN,cAAc/B,GACtC,IAAI+E,EAAU,GACd,GAAI1E,EACF0E,EAAU1E,EAAQC,QAAQtB,QACrB,CACL,IAAIpO,EACJ,IACEA,EAAMP,EAASwB,UAAUqP,EAC1B,CAAC,MAAQ,CAEV,IAAKtQ,EACH,IACEA,EAAMP,EAASY,eAAeiQ,EAC/B,CAAC,MAAQ,CAGZ,GAAItQ,EACF,GAAI8d,MAAMtd,QAAQR,IAChB,IAAK,IAAIU,EAAI,EAAOV,EAAIW,OAARD,IAAkBA,EAChC,GAAIV,EAAIU,GAAGyB,eAAe,WAAanC,EAAIU,GAAGyU,OAAOhT,eAAe,WAAY,CAC9EgS,EAAUnU,EAAIU,GAAGyU,OAAOhB,QACxB,KACD,MAEqB,iBAARnU,GACZA,EAAImC,eAAe,WAAanC,EAAImV,OAAOhT,eAAe,aAC5DgS,EAAUnU,EAAImV,OAAOhB,QAI5B,CACD,OAAOA,CACR,CAED,SAASqW,EAAelmB,GACtB,MAAML,EAAUK,EAAIL,QACpB,QAAKA,GAIE,IAAIR,SAAQC,IACjB,MAAM+mB,EAAeF,EAAYtmB,EAAS,aAAc,kBAClDymB,EAAkBH,EAAYtmB,EAAS,gBAAiB,qBACxD0mB,EAAkBJ,EAAYtmB,EAAS,gBAAiB,qBAe9D,OAbAK,EAAIsmB,SAAW,CACbhN,WAAU6M,EACVtF,cAAauF,EACbpG,cAAaqG,EACbvc,IAAK,CACH/C,MAAOof,EACP5e,SAAU6e,EACVlf,SAAUmf,IAGU,mBAAbtnB,GAA2BA,GACpCA,EAASiB,EAAIsmB,UAERlnB,EAAQY,EAAI,GAEtB,CAED,OAAOvD,KAAK8C,UAAUV,cAAcG,EAASknB,GAAgBnmB,MAAMC,IACjEhB,EAAU,0BAA0BgB,EAAIX,aACjC,CAAEA,KAAML,EAASc,QAASE,EAAIF,WAExC,CACD,OAAOX,QAAQ+J,OAAQlK,EAAgC,wBAAtB,oBAClC,EACDunB,cAAe,SAASzmB,EAASqL,GAK/B,OAJKhQ,EAASS,OAAOM,QAAQ4D,KAC3BA,EAAU,CAACA,IAGN,IAAIX,SAAQ,CAACqnB,EAAQtd,KAC1B,IAAK,IAAI9M,EAAI,EAAO0D,EAAQzD,OAAZD,IAAsBA,EAAG,CACvC,MAAM+M,EAASrJ,EAAQ1D,GACvB,IAAK2M,GAAWI,EAAO5G,GAAI4G,EAAOqB,KAAMW,GACtC,OAAOjC,EAAO,mBAEjB,CACDsd,GAAO,EAAK,GAEf,EACDR,QAAS,SAASS,GAChB,MTpUKxI,KAAKK,eAAeC,OAAOC,KSoUPiI,ETpUkB,USqU5C,EACDC,QAAS,SAAS1nB,GAChB,OT/UKif,EACJC,eS8UwBlf,ET9UH,CACpBmf,MAAO,IAERC,SAAS,SS4UX"}